【发布时间】:2018-10-11 11:44:48
【问题描述】:
我正在捕获使用OPUS Codec 编码的语音聊天程序的音频流(它是专有的、闭源的,我无法控制它),我想将其解码为原始 PCM 音频(Opus Decoder doc)。
我正在做的是:
- 创建一个 OPUS 解码器:
opusDecoder = opus_decoder_create(48000, 1, &opusResult); - 解码流:
opusResult = opus_decode(opusDecoder, voicePacketBuffer, voicePacketLength, pcm, 9600, 0); - 将其保存到文件中:
pcmFile.write(pcm, opusResult * sizeof(opus_int16)); - 使用Audacity 读取文件(文件 > 导入 > 原始数据...)
问题来了:有时它工作得很好(我可以听到解码后的 PCM 音频没有故障并且以原始速度)但有时,解码后的音频流处于“慢动作”(有时比正常慢一点,有时慢得多)。
我不知道为什么,因为我没有更改我的程序:解码设置保持不变。然而,有时它有效,有时却无效。此外,opus_decode() 始终能够解码数据,它不会返回错误代码。
我读到解码器有一个“状态”(opus_decoder_ctl() doc)。我认为opus_decode() 通话之间的时间可能很重要?
你能想到任何参数,无论是显式的(如给函数的参数)还是隐式的(两个函数调用之间的时间),都可能导致这种效果?
【问题讨论】:
-
我没有使用 OPUS 解码器的经验,但是听到“慢动作”声音可能意味着您没有以录制时的速度播放它。这是否意味着音频流可以不时具有不同的采样率?你确定它总是 48,000 吗?