Кодек ZyXEL ADPCM

У меня есть модем ZyXEL USB Omni56K Duo, и я хочу отправлять и получать голосовые потоки на нем, но для достижения надлежащего качества мне, вероятно, потребуется реализовать некоторое кодирование «ZyXEL ADPCM», потому что обычный PCM обеспечивает слишком низкую частоту дискретизации для передачи голоса даже среднего качества, и через USB тоже не работает (наверное из-за того, что даже этот битрейт слишком высок для конвертера USB-Serial в нем).

Этот загадочный кодек фигурирует во всех библиотеках Microsoft, связанных с WAV, как один из многих кодеков, теоретически поддерживаемых им, но я не нашел никаких реализаций.

Может ли кто-нибудь предложить реализацию на любом языке или, может быть, какую-то документацию? Написание собственного алгоритма декодирования мю-закона не будет для меня проблемой.

Спасибо.


person whitequark    schedule 20.01.2010    source источник


Ответы (2)


Я не уверен, чем ZyXEL ADPCM отличается от других разновидностей ADPCM, но с помощью поиска в Google можно найти различные реализации ADPCM.

Однако настоящая причина моего поста в том, почему выбор ADPCM. ADPCM представляет собой адаптивную дифференциальную импульсно-кодовую модуляцию. Это означает, что передаваемые данные представляют собой разницу в выборках, а не текущее значение (именно поэтому вы видите такое сильное сжатие). В чистой среде без потери битов (например, на жестком диске) это нормально. Однако в потоковой среде обычно предполагается, что биты могут периодически искажаться. Любое повреждение данных, и вы будете слышать статические или другие звуковые артефакты очень быстро и, как правило, довольно плохо.

Механизм сброса ADPCM не основан на фреймах, что означает, что проблемы со звуком могут продолжаться в течение длительного периода времени в зависимости от кодировщика. Код сброса обычно представляет собой набор из 0 (на ум приходит 16, но прошло много лет с тех пор, как я писал свои собственные порты).

ADPCM в среде телефонии обычно преобразует 12-битный образец PCM в 4-битный образец ADPCM (неплохо). Что касается качества звука... неплохо для телефонных разговоров и устной речи, но большинство людей в слепом тесте могут легко обнаружить падение качества.

В своем последнем предложении вы бросаете кривую мяч в вопрос. Вы начинаете упоминать muLaw. muLaw — это реализация PCM, которая берет 12-битную выборку и преобразует ее с использованием логарифмической шкалы в 8-битную выборку. Это типичный механизм сжатия для сетей TDM (телефонных сетей) в Северной Америке (большая часть остального мира использует аналогичный алгоритм под названием ALaw).

Итак, я смущен тем, что вы на самом деле пытаетесь найти.

Вы также упомянули о реализации Microsoft и WAV. Вы, наверное, знаете, но на всякий случай, что WAV — это просто оболочка для аудиоданных, которая предоставляет информацию о формате, семплировании, канале, размере и другую полезную информацию. Без участия WAV, AU или других оберток muLaw и ADPCM обычно представляются как необработанные данные.

Еще один совет, если вы внедряете ADPCM. Как я уже говорил, они используют 4 бита для представления 12-битной выборки. Им это сходит с рук, поскольку у обеих сторон есть таблица умножения. Ваша позиция в таблице изменяется в зависимости от 4-битного значения (другими словами, значение кратно размеру шага и используется для определения нового размера шага). Я видел множество алгоритмов, использующих немного разные таблицы (не знаю почему, но обычно вы видите, что отправленные и полученные сигналы медленно отклоняются от смещения). Один из старых популярных звуковых пакетов отличался от того, что я обычно видел у поставщиков телефонного оборудования.

И, для более бесполезных мелочей, есть несколько разновидностей ADPCM. Отклонения связаны с таблицей, размером исходной выборки и размером выборки назначения, но мне никогда не приходилось с ними работать. Только что задокументированные разновидности, которые я обнаружил, когда искал в Интернете спецификации для различных аудиоформатов, используемых в телефонии.

person Jim Rush    schedule 21.01.2010
comment
Спасибо за очень красивое описание. Так что ADPCM, вероятно, неправильный путь... Вопрос закрыт. - person whitequark; 21.01.2010

Передача вашего PCM через ffmpeg -f u16le -i - -f wav -acodec adpcm_ms -, скорее всего, сработает.

http://ffmpeg.org/

person Will    schedule 21.01.2010