C++ 解码OPUS音频流时的慢动作效果
我正在捕获一个语音聊天程序的音频流(它是专有的、封闭源代码,我对它没有控制权),该程序使用进行编码,我想将其解码为原始PCM音频() 我正在做的是:C++ 解码OPUS音频流时的慢动作效果,c++,opus,C++,Opus,我正在捕获一个语音聊天程序的音频流(它是专有的、封闭源代码,我对它没有控制权),该程序使用进行编码,我想将其解码为原始PCM音频() 我正在做的是: 创建OPUS解码器:opusDecoder=OPUS\u解码器\u创建(48000,1,&opusResult) 解码流:opusResult=opus_解码(opusDecoder,voicePacketBuffer,voicePacketLength,pcm,9600,0) 将其保存到文件:pcmFile.write(pcm,opusResul
opusDecoder=OPUS\u解码器\u创建(48000,1,&opusResult)代码>
opusResult=opus_解码(opusDecoder,voicePacketBuffer,voicePacketLength,pcm,9600,0)代码>
pcmFile.write(pcm,opusResult*sizeof(opus_int16))代码>
opus\u decode()
始终能够解码数据,它不会返回错误代码
我读到解码器有一个“状态”()。我想也许调用opus\u decode()之间的时间间隔很重要
您能想到任何可能导致这种影响的参数,无论是显式参数(如给定给函数的参数)还是隐式参数(两次函数调用之间的时间)?“慢动作”音频几乎总是采样率不匹配(以高速率录制,但以低速率播放)。例如,如果您以48kHz的频率录制音频,但以8kHz的频率播放
“慢动作”的另一个可能原因是由同一解码器解码的多个流。但在这种情况下,你也会得到失真的慢速音频
至于作品:
- 它总是按照您在创建参数中指定的速率进行解码
- 在它里面有纯数学(没有任何定时器或实时相关的东西),所以当您调用decode函数时它并不重要
- 请确保您没有创建具有不同采样率的解码器
- 确保在audacity中导入原始文件时,始终以48kHz mono格式导入
- 如果以上任何一项都没有帮助-检查在正常/慢动作情况下每个数据包上从解码器接收的字节数。对于正常音频流(具有统一的数据包间时间),您始终可以获得相同数量的原始音频样本