Вопрос

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

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

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

Спасибо.

Это было полезно?

Решение

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

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

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

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

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

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

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

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

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

Другие советы

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

http://ffmpeg.org/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top