Microsoft Audio Compression Manager MS ACM MMACM audstub.sys Codecs (G729 G711 G723 MSGSM)

Вступление

Кто впервые сталкивается с подсистемой аудиозжатия в Win32 попадает в незавидное положение. Информация в MSDN есть, но она дает лишь ОБЩИЕ теоритические знания и примеры, которые в реальных ситуациях мало используются.
Теперь обо всем по-порядку. На самом деле вся эта система состоит глобально из частей: В основном, далее речь пойдет об инстоллируемых драйверах т.к. работа с ними и представляет практический интерес.

Практическое применение

При разработке ПО я использовал эту подсистему для преобразования голосового трафика для VoIP, потому в основном речь пойдет о "кодеках" таких как G711 G723 GSM и G729, в меньшей степени о медийных кодеках таких как MPEG AC3 и еже с ними.
Нужно отметить, что такие ACM кодеки использются в очень неплохой библиотеке для разработки программных телефонов с протоколом сигнализации SIP - MS RTC (Microsoft RealTime Communication Client).
Была задумка сделать back-end media player, управлять которым можно было бы из под любого пользователя, но всё же я больше VoIP разработчик ;)

Трудности

Друдности у всех, уверен, разные, потому расскажу про свои, авось у кого-то такие же сейчас и ныкается неприкаяный по Интернетам.

Трудность №1: "Не всё так радужно, а как хотелось счастья"

Как правило кодеки, используемые в пакетной телефонии(VoIP) выполняют преобразование между WAVE_FORMAT_PCM и неким своим форматом. Т.е. воспринимают на вход 2 формата: свой и WAVE_FORMAT_PCM. При этом ВНИМАНИЕ: не смотря на то, что эти кодеки "принимают" на вход форматы с разными характеристикми (частота квантования, число каналов, величина сэмпла), преобразование этих характеристик они делать НЕ УМЕЮТ.
Это весьма неочевидно, тем не менее, это можно узнать, если прежде чем использовать тот или иной кодек провести его детальное исследование при помощи несложного приложения.
Т.е. эти кодеки реализуют минимально необходимый функционал. Потому часто необходимо использовать много-стадийное преобразование, сначала привести формат к WAVE_FORMAT_PCM, который соответствует по характеристикам конечному выходному формату, а потом выполнить конечное преобразование формата.
Для преобразования внутри формата(преобразование характеристик) годятся не все кодеки, а может или не может кодек такое преобразование выполнить показывает один из его атрибутов.

Трудность №2: "Не все кодеки одинаково полезны"

Архитектура ACM драйверов(кодеков) достаточно удобна и некоторые разработчики ПО её используют для своих внутренних нужд, создают кодеки, в целом, построеные по принципам этой архитектуры.
Всё бы хорошо, но дело всё в том, что как правило такие кодеки поддерживают некий минимум функционала, который необходим для работы в рамках того проекта, для которого они создавались.
Пример:

Трудность №3: "Знал бы прикуп - жил бы в Сочи"

Даже кодеки от Microsoft нигде в MSDN не описаны. Не говоря уже о кодеках сторонних производителей. Конечно можно опросить их на предмет поддерживаемых форматов и типов преобразований, но всегда ведь проще прочитать и сделать как рекомендовано или описано в примерах.
Да и на эксперименты, как правило, времени нет и хочется найти статью в дебрях Интернетов, в которой будет чётко и понятно описано что и куда нужно записать чтобы на входе была звуковая карта, а на выходе RTP ;) Я в своё время таких статей не нашел.

Справочная информация, которая облегчит Вам жизнь при разработке ПО

Этот раздел будет дополняться по мере редактирования статьи и моих экспериментов.
Ниже приведен список кодеков на обычном компьютере с Windows XP SP3, а также список форматов, поддерживаемых кодеками.
Как я и говорил НЕ все кодеки можно опросить и получить такую информацию. Кстати, в случае с VidoSystem G729 это приводит к тому, что:
  1. В моём списке для него не указаны форматы
  2. (Что хуже всего и вводит многих в заблуждение)При использовании acmFormatChoose, форматов этого драйвера нет в списке диалога!
В квадратных скобках указан тэг формата в шестнадцатеричном виде, фактически это синоним "алгоритм кодека". Внутри такого формата может существовать несколько вариаций, которые будут отличаться числом каналов, квантованием и количеством бит на сэмпл.
Среди приведенных ниже драйверов хочу отметить 2 типа:
--------------------------------------------------------------
Short Name: Microsoft IMA ADPCM
Long Name: Кодек IMA ADPCM (Microsoft)
Licensing: 
Features: Сжатие и распаковка аудиозаписей IMA ADPCM.
Copyright: c Корпорация Microsoft, 1992-1996.
Supports: CODEC 
Форматы:
--------------------------------------------------------------
Short Name: MS-ADPCM
Long Name: Кодек ADPCM (Microsoft)
Licensing: 
Features: Сжатие и распаковка аудиозаписей Microsoft ADPCM.
Copyright: c Корпорация Microsoft, 1992-1996.
Supports: CODEC 
Форматы:
--------------------------------------------------------------
Short Name: vidog729
Long Name: Vidosystem G.729A Codec Implementation 1.6.0
Licensing: 
Features: Compresses and Decompresses G.729A audio data. Please visit http://www.vidosystem.com for more information
Copyright: Copyright (C) 2006 Vidosystem Corporation
Supports: CODEC 
Форматы:
--------------------------------------------------------------
Short Name: Microsoft G.723.1
Long Name: Microsoft G.723.1 CODEC
Licensing: 
Features: Compresses and decompresses G.723.1 audio data.
Copyright: Copyright c 1996 Intel Corporation and Microsoft Corporation
Supports: CODEC 
Форматы:
--------------------------------------------------------------
Short Name: Microsoft GSM 6.10
Long Name: Кодек GSM 6.10 (Microsoft)
Licensing: 
Features: Сжатие и распаковка аудиозаписей в соответствии со стандартом ETSI-GSM (European Telecommunications Standards Institute-Groupe Special Mobile) версии 6.10.
Copyright: (С) Корпорация Майкрософт, 1993-1996
Supports: CODEC 
Форматы:
--------------------------------------------------------------
Short Name: Microsoft CCITT G.711
Long Name: Кодек CCITT G.711 A-Law и u-Law (Microsoft)
Licensing: 
Features: Сжатие и распаковка аудиозаписей CCITT G.711 A-Law / u-Law.
Copyright: (С) Корпорация Майкрософт, 1993-1996
Supports: CODEC 
Форматы:
--------------------------------------------------------------
Short Name: WM-AUDIO
Long Name: Windows Media Audio
Licensing: 
Features: Compresses and decompresses audio data.
Copyright: Copyright (C) Microsoft Corporation, 1999 - 2001
Supports: CODEC 
Форматы:
--------------------------------------------------------------
Short Name: ACELP.net
Long Name: Sipro Lab Telecom ACELP.net audio codec
Licensing: 
Features: ACELP.net audio encoder/decoder. For licensing please access  HTTP: //www.sipro.com
Copyright: Copyright c 1995-99 Sipro Lab Telecom Inc., Montreal
Supports: CODEC 
Форматы:
--------------------------------------------------------------
Short Name: IndeoR audio software
Long Name: IndeoR audio software
Licensing: 
Features: IndeoR audio software
Copyright: Copyright c 1997 Intel Corporation
Supports: CODEC 
Форматы:
--------------------------------------------------------------
Short Name: MPEG Layer-3 Codec 
Long Name: Fraunhofer IIS MPEG Layer-3 Codec (advanced)
Licensing: 
Features: bitrates up to 56kBit/s, mono and stereo codec (advanced)
Copyright: Copyright c 1996-1999 Fraunhofer Institut Integrierte Schaltungen IIS
Supports: CODEC 
Форматы:
--------------------------------------------------------------
Short Name: ACELP.net
Long Name: VoiceAge ACELP.net audio codec
Licensing: 
Features: ACELP.net audio encoder/decoder. For licensing please access  HTTP: //www.sipro.com
Copyright: Copyright. c 2002-2003.VoiceAge. All Rights Reserved.
Supports: CODEC 
Форматы:
--------------------------------------------------------------
Short Name: MS-PCM
Long Name: Конвертор PCM Microsoft
Licensing: 
Features: Изменение частоты и количества бит для аудиозаписей PCM.
Copyright: c Корпорация Microsoft, 1992-1996.
Supports: 
Форматы:
--------------------------------------------------------------
Short Name: SJ Labs G729A v3.14 MCh
Long Name: SJ Labs G729A Audio CODEC v 3.15 MCh
Licensing: 
Features: Compresses and decompresses audio data conforming to the G729 ITUT recommendation 
Copyright: Copyright (C) 1999-2003 SJ Labs
Supports: CODEC 
Форматы:
--------------------------------------------------------------
Short Name: SJ Labs  GSM 6.10
Long Name: SJ Labs Inc. GSM 6.10 (v 3.15)
Licensing: 
Features: Codec audio data conforming to the ETSI-GSM rec 6.10.(v 3.15)
Copyright: Copyright (C) 2003 SJ Labs.
Supports: CODEC 
Форматы: