В этой статье описываются аудио API и компоненты в Microsoft Windows , которые в настоящее время устарели или не рекомендуются к использованию.
MME API или Windows Multimedia API (также известный как WinMM ) был первым универсальным и стандартизированным Windows audio API. События звука Wave, воспроизводимые в Windows (до Windows XP ), и MIDI I/O используют MME. Устройства, перечисленные в апплете панели управления Мультимедиа/Звуки и Аудио, представляют MME API драйвера звуковой карты .
Multimedia Extensions (интерфейсы WaveIn/WaveOut) были выпущены осенью 1991 года для поддержки звуковых карт , а также приводов CD-ROM , которые тогда становились все более доступными. Multimedia Extensions были выпущены для производителей оригинального оборудования (OEM) , в основном производителей приводов CD-ROM и звуковых карт, и добавили базовую поддержку мультимедиа для аудиовхода и выхода и приложение проигрывателя компакт-дисков в Windows 3.0. Новые функции Multimedia Extensions были недоступны в реальном режиме Windows 3.0, только в стандартном и 386 расширенном режиме. Windows 3.1x позже включила многие из своих функций. Microsoft разработала спецификацию звуковой карты Windows Sound System, чтобы дополнить эти расширения.
В Windows 95/ME MME не может смешивать несколько аудиопотоков во время воспроизведения и совместного использования устройств, поэтому за раз может быть воспроизведен только один аудиопоток. Но некоторые драйверы звуковых карт могут эмулировать более одного устройства MME (или поддерживать более одного потокового клиента), поэтому они могут работать и с MME. Начиная с Windows 2000, MME поддерживает совместное использование устройств воспроизведения (многоклиентский доступ) и может смешивать потоки воспроизведения. Начиная с Windows XP, MME начал поддерживать совместное использование записывающих устройств.
В более ранних версиях Windows MME поддерживал до двух каналов записи, глубину звука 16 бит и частоту дискретизации до 44100 сэмплов в секунду, при этом весь звук микшировался и дискретизировался до 44100 сэмплов в секунду. [ необходима цитата ] Начиная с Windows 2000, MME поддерживает до 384000 сэмплов в секунду, до 8 каналов и до 32 бит на сэмпл.
До Windows XP количество интерфейсов устройств MME/WinMM (waveIn, waveOut, midiIn, midiOut, mixer и aux) было ограничено 10. В Windows XP этот предел увеличен с 10 до 32. [1] [2]
Длина имени устройства в MME ограничена 31 символом, поэтому длинные имена устройств могут отображаться только частично.
Ошибка в эмуляции MME WaveIn/WaveOut была введена в Windows Vista: если требуется преобразование частоты дискретизации, иногда появляется слышимый шум, например, при воспроизведении аудио в веб-браузере, использующем эти API. Это происходит из-за того, что внутренний ресэмплер, который больше не настраивается, по умолчанию использует быструю целочисленную линейную интерполяцию , которая была режимом преобразования самого низкого качества, который можно было установить в предыдущих версиях Windows. Ресемплер можно установить в режим высокого качества с помощью исправления только для Windows 7 и Windows Server 2008. [3] [4]
Audio Compression Manager (ACM) — это мультимедийная среда Windows , которая управляет аудиокодеками (компрессорами/декомпрессорами). [5] ACM также можно считать спецификацией API. Кодек должен соответствовать неявной спецификации ACM для работы с Windows Multimedia. Файлы ACM можно распознать по расширению имени файла .acm
. Файлы ACM также используют совместимые с RIFF типы файлов, такие как WAV или AVI, в качестве «оболочки» для хранения аудиоданных, закодированных любым аудиокодеком, поддерживаемым ACM.
ACM считается устаревшим фреймворком/API, и Microsoft теперь рекомендует использовать как минимум DirectShow . Однако, в отличие от ACM и связанного с ним Video Compression Manager (VCM) , DirectShow не предоставляет никаких средств для кодирования файлов для конечных пользователей, а требует от разработчиков создания сквозных графиков для кодирования контента. ACM также не поддерживает аудиопотоки VBR ; поэтому более новые кодеки, такие как MPEG-4 AAC , Ogg Vorbis , FLAC и т. д., не могут поддерживаться через ACM при использовании переменных битрейтов. Хотя многие источники утверждают обратное, Ogg Vorbis хорошо работает с ACM, например, при встраивании в файл, совместимый с RIFF (такой как файл WAV или AVI, как упоминалось ранее), при условии, что поток Ogg Vorbis кодируется с постоянным битрейтом.
Windows поставляется с несколькими предустановленными кодеками ACM. Для получения списка этих кодеков обратитесь к WAV-файлу § Сравнение схем кодирования .
Кодеки ACM идентифицируются двухбайтовым кодом (TwoCC), выделенным Microsoft.
KMixer — это драйвер звукового микшера ядра , часть WDM Audio в Windows 98 — Windows XP, который управляет микшированием нескольких звуковых буферов в выходной сигнал.
Задачи, выполняемые KMixer.sys:
В Windows 98, Windows 2000 и Windows Me максимальная частота дискретизации KMixer составляет 100 кГц. В Windows XP SP1 и более поздних версиях частота дискретизации звука KMixer поддерживает максимум 200 кГц. [6] [7] [8]
KMixer был разработан, чтобы помочь приложениям, избавив их от необходимости выполнять микширование аудиопотоков, особенно на недорогих звуковых картах, которые не поддерживают несколько звуковых потоков. Однако он внес некоторые существенные проблемы.
Во-первых, задержка KMixer составляет около 30 мс [9] и ее нельзя уменьшить, поскольку этот компонент находится прямо над аудиодрайвером класса порта, поэтому каждый аудиопоток, включая выдаваемые DirectSound (за исключением случаев аппаратного микширования ) и WinMM, проходит через микшер ядра. [10] Если аудиооборудование поддерживает аппаратное микширование (также известное как аппаратная буферизация или аппаратное ускорение DirectSound), DirectSound буферизуется непосредственно на устройстве рендеринга. [11] Таким образом, если потоки DirectSound используют аппаратное микширование , KMixer обходит стороной. [12]
В более ранних выпусках, таких как оригинальный выпуск Windows 98, KMixer пытался смешивать все форматы данных, которые проходили через него, даже те, которые он не поддерживал. Это вызывало различные проблемы с медиаплеерами, которые пытались передавать потоки объемного звука в кодировке AC3 через выход S/PDIF звуковой карты на внешний ресивер домашнего кинотеатра . Это было исправлено в Windows Me и предоставлено как исправление для Windows 98 Second Edition и Windows 2000 SP2. [13] Начиная с Windows Me, API waveOut, DirectSound и DirectShow поддерживают не-PCM форматы, такие как AC-3 или WMA через S/PDIF, и не-PCM данные поступают напрямую в драйвер класса, а не проходят через KMixer.
В Windows 98 также был представлен новый API режима ядра, Direct Kernel Streaming , позволяющий обойти KMixer и избежать связанных с ним проблем.
KMixer не изменяет звук в большинстве случаев. [6] Кроме того, существует множество способов обойти KMixer без необходимости использования дополнительного плагина для доступа к DirectSound, ASIO , Direct Kernel Streaming или WASAPI . В Windows XP, например, использование DirectSound (который Winamp использует по умолчанию) с аппаратным микшером является способом обойти KMixer. [9]
KMixer был удален в Windows Vista . Он заменен пользовательским режимом WASAPI (Windows Audio Session API) Audio Engine, который является частью обновленной звуковой архитектуры . Звуковой движок может работать в общем режиме или в эксклюзивном режиме . В общем режиме микширование все еще происходит. Предварительно микшированный звук PCM отправляется на драйвер в едином формате (с точки зрения частоты дискретизации, битовой глубины и количества каналов), который настраивается на панели управления звуками. Режим WASAPI Exclusive обходит микшер, как и использование сторонних аудио API, таких как OpenAL или ASIO , которые все еще имеют прямой доступ к оборудованию. [14]
Kernel Streaming или Direct Kernel streaming (Direct KS) — это метод, который поддерживает обработку потоковых данных в режиме ядра . Он обеспечивает эффективную потоковую передачу в реальном времени для мультимедийных устройств, таких как звуковые карты и карты ТВ-тюнеров . Kernel streaming позволяет драйверу устройства создавать фильтры и выводы, подобные DirectShow, в режиме ядра , обеспечивая доступ к оборудованию, снижая задержку связи и по-прежнему использоваться в графе фильтров DirectShow .
Потоковая передача ядра была введена в Windows 98. Когда звуковая карта использует пользовательский драйвер для использования с системным драйвером класса порта PortCls.sys или реализует мини-драйвер для использования с драйвером класса потоковой передачи, приложения могут полностью обойти KMixer и вместо этого использовать интерфейсы потоковой передачи ядра для прямого взаимодействия с аудиодрайвером и уменьшения задержки. Windows 98 включает в себя первый драйвер потоковой передачи ядра, Stream.sys. В Windows XP Microsoft представила еще один улучшенный драйвер класса потоковой передачи ядра, AVStream.
Такие музыкальные проигрыватели, как JRiver Media Center , JPLAY, foobar2000 , Audirvana Studio и Winamp, поддерживают потоковую передачу на уровне ядра . По сравнению с обычным "методом WaveOut" в Microsoft Windows потоковая передача на уровне ядра требует меньше процессорного времени. Это достигается за счет обхода KMixer и регулятора громкости Windows. Потоковая передача на уровне ядра также не позволяет совместно использовать устройства, если только звуковой драйвер режима ядра не поддерживает несколько клиентов.
До Windows Vista Kernel Streaming предлагал только один протокол связи клиент-драйвер с цепочкой буферов, как в MME. Начиная с Vista, представлен новый протокол Real-Time Audio ( RT Audio , не путать с кодеком RTAudio ), основанный на одном кольцевом буфере . Протокол RT Audio реализован драйвером порта WaveRT в portcls.sys. В Vista и более поздних версиях Audio Subsystem поддерживает оба протокола, поэтому он может взаимодействовать как с устаревшими, так и с новыми аудиодрайверами. Но большинство аудиоприложений, использующих KS, поддерживают только один протокол (в большинстве случаев устаревший), поэтому они могут взаимодействовать только с одним типом аудиодрайверов.