ZyXEL ADPCM кодек - PullRequest
       16

ZyXEL ADPCM кодек

0 голосов
/ 20 января 2010

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

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

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

Спасибо.

Ответы [ 2 ]

2 голосов
/ 21 января 2010

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

Однако настоящая причина моего поста в том, почему выбор 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. Отклонения касаются таблицы, размера исходной и целевой выборки, но мне никогда не приходилось с ними работать. Просто задокументированные варианты, которые я обнаружил, когда выполнял поиск в Интернете спецификаций для различных аудиоформатов, используемых в телефонии.

0 голосов
/ 21 января 2010

Пропускание вашего ПКМ через ffmpeg -f u16le -i - -f wav -acodec adpcm_ms -, скорее всего, будет работать.

http://ffmpeg.org/

...