Я перехватываю аудиопоток программы голосового чата (она является проприетарной, с закрытым исходным кодом, и я не контролирую ее), которая кодируется с помощью 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()
звонками важно?
Можете ли вы представить какой-либо параметр, будь то явный (например, параметры, переданные функциям) или неявный (время между двумя вызовами функций), который может вызвать этот эффект?