Главная » Программирование звука » Как я разбирался с форматами ADPCM

0

Хотя  IMA  действительно  предоставляет  полный  пакет  спецификаций  на  IMA ADPCM,  в  том  числе  примеры  программ,  реализующих  данный  стандарт,  мне  не удалось  отыскать  детальной  информации  по  реализациям  последнего,  подготовленным Microsoft и Apple. Кроме того, чтобы не допустить возможного нарушения авторских  прав  IMA,  я  намеренно  не  использовал  разработанные  этой  организацией  примеры.  Кое-какой  полезный  материал  мне  удалось  отыскать  в  Internet, в  том  числе  реализацию  базового  алгоритма,  написанного  Джеком  Дженсеном QackJansen),  и  раздел  «Техническая  поддержка  разработчиков  Apple  1081»  (Apple Developer  Support  TechNote  1081),  где  был  выделен  ряд  фундаментальных  отличий между версиями этого алгоритма от Microsoft и Apple.

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

Для  начала  я  воспользовался  стандартными  утилитами  (поставляемыми  в  составе  Mac  OS  7.6  и  Windows  95),  чтобы  конвертировать  короткий  файл  выборок в  сжатый  формат  IMA  ADPCM.  После  чего  я  декомпрессировал  получившийся файл  в  формат  16-битной  ИКМ.  Поскольку  при  использовании  алгоритмов  IMA ADPCM происходит потеря данных, вместо сравнения сжатых данных с исходными лучше   проводить   сравнение   сжатых   данных   с   полученными   в   результате   декомпрессии.

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

Если  вам  необходимо  проанализировать  алгоритм  АДИКМ,  в  которомдлязаписи  одного  отсчета  используется  4  бита,  описанный  выше  метод  вам  поможет. Выяснение  того,  как  именно  4-битное  сжатое  значение  согласуется  с  приращением, задача более сложная. Прежде всего необходимо хорошо разбираться в различных  родственных  алгоритмах.  Помимо  алгоритма  IMA  ADPCM  можно  изучить еще семейство алгоритмов ITU (в особенности G.721 и G.723). Часто удается

отыскать фрагменты исходных текстов (как мне при работе с IMA ADPCM),

которые послужат вам источником важной информации.

Пользуясь  этими  методами,  мне  удалось  создать  приведенную  в  данной  главе программу,  работающую  очень  согласованно  с  выходными  форматами  официально  признанных  компрессоров  для  всех  протестированных  мной  файлов.  (За  время, прошедшее с начала моей работы, мне удалось подтвердить официальной документацией  многие  из  моих  предположений.)  Такие  поиски  не  всегда  просты (один из моих друзей сравнивает их с криптоанализом), но часто это единственный способ разыскать необходимую информацию.

Соавторы

Программа,  о  которой  идет  речь  в  этой  главе,  частично  основана  на  реализации  алгоритма  Intel  DVI  ADPCM,  осуществленной  Джеком  Дженсеном.  Авторский исходный текст содержит следующее уведомление об авторском праве:

Листинг 13.12. Уведомление об авторских правах Джека Дженсена

/*****************************************************************

*

Copyright 1992 Stichting, математический центр, Амстердам,

Нидерланды

Все   права зарезервированы.

Настоящим  дается  разрешение использовать, копировать, изменять

и  распространять  это  программное обеспечение и  документацию

к  нему   при   следующих  условиях: указанное  выше  уведомление  об авторских правах будет присутствовать  во   всех копиях; сопровождающая документация  должна содержать  как  уведомление, так и  данное  разрешение; названия  математического центра Stichting, и  CWI без  предварительного особого письменного разрешения  не   будут использованы в  целях рекламы, связанной

с  распространением программного обеспечения.

Математический центр  Stichting не   дает  никаких гарантий, связанных  с  этим  программным обеспечением, в  том   числе гарантий на   готовность и  пригодность  для продажи. Центр отказывается от ответственности при   любых  условиях за  любые  прямые, непрямые

и  косвенные  убытки, а также за  какие бы  то ни  было   убытки, вызванные  невозможностью  использования, потерями  данных или прибыли, ставшие  следствием  действий, оговоренных  контрактом  или

произошедшие  в результате  небрежности, а  также иных   вредоносных действий, имевших   место вследствие  или   в связи

с  использованием или   выполнением этого  программного обеспечения.

******************************************************************

/

Источник: Кинтцель Т.  Руководство программиста по работе со звуком = A Programmer’s Guide to Sound: Пер. с англ. М.: ДМК Пресс, 2000. 432 с, ил. (Серия «Для программистов»).

По теме:

  • Комментарии