Scott Boekweg
2015-Aug-25 17:21 UTC
[opus] PLC Sounds Robotic - How to Implement FEC Wideband
I am specifically using Celt Wideband (48kHz) over WiFi multicast that naturally leads to lost packets and am trying to minimize the impact to the audio. I implemented PLC but the audio it produces is robotic. Have I implemented PLC correctly? Checking the waveform it is using the previous received waveform to fill in a missing packet but not the full waveform so it has to repeat. Basically, within a single lost 20ms packet I hear two replicas of the last 10ms of the previous waveform. Sometimes the repeats are only 4ms long thus repeating 5 times. This makes it sound robotic. Is this typical or do I have it implemented incorrectly? Should it not try to create one replica of the entire 20ms previous waveform instead of having to repeat a portion of it? Scott Boekweg -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.xiph.org/pipermail/opus/attachments/20150825/28f2fe28/attachment.htm
Jean-Marc Valin
2015-Aug-25 18:02 UTC
[opus] PLC Sounds Robotic - How to Implement FEC Wideband
What do you mean by "implement"? You're just using the Opus built-in PLC (passing NULL), right? The PLC generally attempts to find periodicity and replicate it. I guess if your signal isn't periodic it can lead to a repetition that isn't great. It's something that could probably be improved in the PLC. Cheers, Jean-Marc On 08/25/2015 01:21 PM, Scott Boekweg wrote:> I am specifically using Celt Wideband (48kHz) over WiFi multicast that > naturally leads to lost packets and am trying to minimize the impact to > the audio. I implemented PLC but the audio it produces is robotic. > Have I implemented PLC correctly? > > > > Checking the waveform it is using the previous received waveform to fill > in a missing packet but not the full waveform so it has to repeat. > Basically, within a single lost 20ms packet I hear two replicas of the > last 10ms of the previous waveform. Sometimes the repeats are only 4ms > long thus repeating 5 times. This makes it sound robotic. Is this > typical or do I have it implemented incorrectly? Should it not try to > create one replica of the entire 20ms previous waveform instead of > having to repeat a portion of it? > > > > Scott Boekweg > > > > _______________________________________________ > opus mailing list > opus at xiph.org > http://lists.xiph.org/mailman/listinfo/opus >
Scott Boekweg
2015-Aug-25 18:15 UTC
[opus] PLC Sounds Robotic - How to Implement FEC Wideband
Thanks Jean-Marc for your prompt response. Yes I am passing the Null so my implementation is correct. Your explanation of how it works helps explain what is going on. So it looks like FEC might be a better option. After reading through Opus documentation it appears that in-band FEC is not available for Celt, is this correct? Assuming that's correct, is there any recommended documentation on how to implement FEC with wideband Celt? I'm hoping I can pass the "redundant" FEC data through existing RTP packets. Many thanks! Scott -----Original Message----- From: Jean-Marc Valin [mailto:jmvalin at jmvalin.ca] Sent: Tuesday, August 25, 2015 12:02 PM To: Scott Boekweg <scott.boekweg at listentech.com>; opus at xiph.org Subject: Re: [opus] PLC Sounds Robotic - How to Implement FEC Wideband What do you mean by "implement"? You're just using the Opus built-in PLC (passing NULL), right? The PLC generally attempts to find periodicity and replicate it. I guess if your signal isn't periodic it can lead to a repetition that isn't great. It's something that could probably be improved in the PLC. Cheers, Jean-Marc On 08/25/2015 01:21 PM, Scott Boekweg wrote:> I am specifically using Celt Wideband (48kHz) over WiFi multicast that > naturally leads to lost packets and am trying to minimize the impact > to the audio. I implemented PLC but the audio it produces is robotic. > Have I implemented PLC correctly? > > > > Checking the waveform it is using the previous received waveform to > fill in a missing packet but not the full waveform so it has to repeat. > Basically, within a single lost 20ms packet I hear two replicas of the > last 10ms of the previous waveform. Sometimes the repeats are only > 4ms long thus repeating 5 times. This makes it sound robotic. Is > this typical or do I have it implemented incorrectly? Should it not > try to create one replica of the entire 20ms previous waveform instead > of having to repeat a portion of it? > > > > Scott Boekweg > > > > _______________________________________________ > opus mailing list > opus at xiph.org > http://lists.xiph.org/mailman/listinfo/opus >