Устаревшие аудиокомпоненты Windows
Эта статья включает список общих ссылок , но в ней отсутствуют достаточные соответствующие встроенные цитаты . ( сентябрь 2009 г. ) |
В этой статье описываются API-интерфейсы и компоненты аудио в Microsoft Windows , которые сейчас устарели или устарели.
Мультимедийные расширения (MME)
[ редактировать ]MME API или Windows Multimedia API (также известный как WinMM ) был первым универсальным и стандартизированным аудио API Windows. Звуковые события Wave, воспроизводимые в Windows (вплоть до Windows XP ), и MIDI-входы/выходы используют MME. Устройства, перечисленные в апплете панели управления «Мультимедиа/Звуки и аудио» , представляют собой MME API драйвера звуковой карты .
Мультимедийные расширения (интерфейсы WaveIn/WaveOut) были выпущены осенью 1991 года для поддержки звуковых карт , а также приводов CD-ROM , которые в то время становились все более доступными. Мультимедийные расширения были выпущены производителям оригинального оборудования (OEM) , в основном производителям приводов CD-ROM и звуковых карт, и добавили базовую поддержку мультимедиа для ввода и вывода звука, а также компакт-дисков приложение аудиоплеера в Windows 3.0. Новые функции мультимедийных расширений были недоступны в реальном режиме 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-битную разрядность звука и частоту дискретизации до 44 100 сэмплов в секунду, при этом весь звук микшировался и дискретизировался до 44 100 семплов в секунду. [ нужна ссылка ] Начиная с Windows 2000, MME поддерживает до 384 000 выборок в секунду, до 8 каналов и до 32 бит на выборку.
До Windows XP количество интерфейсов устройств MME/WinMM (waveIn, waveOut, MIDIIn, MidiOut, микшер и aux) ограничивалось 10. В Windows XP это ограничение увеличено с 10 до 32. [ 1 ] [ 2 ]
Длина имени устройства в MME ограничена 31 символом, поэтому длинные имена устройств могут отображаться только частично.
Проблемы
[ редактировать ]В Windows Vista появилась ошибка в эмуляции MME WaveIn/WaveOut: если требуется преобразование частоты дискретизации, иногда появляется звуковой шум, например, при воспроизведении звука в веб-браузере, который использует эти 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 и связанного с ним диспетчера сжатия видео (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.
Аудиобиблиотеки DirectX
[ редактировать ]КМиксер
[ редактировать ]KMixer — это драйвер Kernel Audio Mixer , часть WDM Audio в Windows 98 –Windows XP, которая управляет микшированием нескольких звуковых буферов в выходной файл.
Задачи, выполняемые KMixer.sys:
- Смешивание нескольких PCM аудиопотоков
- Преобразование формата, разрядности (также известной как длина слова) и частоты дискретизации.
- Конфигурация динамиков и отображение каналов
В 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.
Новый API режима ядра Direct Kernel Streaming также был представлен в Windows 98, чтобы обойти 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 Эксклюзивный режим обходит микшер, как и использование сторонних аудио API, таких как OpenAL или ASIO , которые по-прежнему имеют прямой доступ к оборудованию. [ 14 ]
Потоковая передача ядра
[ редактировать ]Потоковая передача ядра или прямая потоковая передача ядра (Direct KS) — это метод, который поддерживает в режиме ядра обработку потоковых данных . Он обеспечивает эффективную потоковую передачу в реальном времени для мультимедийных устройств, таких как звуковые карты и ТВ-тюнеры . Потоковая передача ядра позволяет драйверу устройства создавать фильтры и контакты, подобные 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 и более поздних версиях аудиоподсистема поддерживает оба протокола, поэтому может взаимодействовать как с устаревшими, так и с новыми аудиодрайверами. Но большинство аудиоприложений, использующих KS, поддерживают только один протокол (в большинстве случаев устаревший), поэтому они могут взаимодействовать только с одним типом аудиодрайверов.
См. также
[ редактировать ]- Звук WDM в Windows 98
- Звуковая архитектура Windows Vista
- ДиректХ
- Универсальная аудиоархитектура (UAA)
Ссылки
[ редактировать ]- ^ Основы API аудиодрайвера Windows
- ^ Ограничения интерфейса устройства Windows 2000
- ^ «Политика преобразования частоты дискретизации аудиопотоков (драйверы Windows)» . Центр разработки — Аппаратное обеспечение . Майкрософт . Проверено 17 января 2012 г.
- ^ «Артефакты в Windows 7 из-за преобразования частоты дискретизации» . Ветка обсуждения на форумах по разработке настольных компьютеров для Windows . Проверено 17 января 2012 г.
- ^ «Диспетчер сжатия звука» . Майкрософт . 30 мая 2018 г.
- ^ Jump up to: а б «Политика микширования аудиопотоков и установки выходной частоты дискретизации» . MSDN . Проверено 23 ноября 2010 г.
- ^ «Windows Кмиксер» . Проверено 23 ноября 2010 г.
- ^ «Что такое «bitperfect» и что мне нужно сделать для идеального воспроизведения?» . Проверено 23 ноября 2010 г.
- ^ Jump up to: а б «Задержка KMixer» . MSDN . Проверено 23 ноября 2010 г.
- ^ CakeWalk - Круглый стол Windows Pro Audio
- ^ Модели драйверов DirectSound
- ^ Обзор аппаратного ускорения DirectSound
- ^ Форматы волн, отличные от PCM, и аудиодрайверы WDM
- ^ «Плагин вывода Winamp OpenAL» . Проверено 23 ноября 2010 г.
Внешние ссылки
[ редактировать ]- Информация о Kmixer на сайте Microsoft
- Задержка KMixer на сайте Microsoft
- Подробности о драйверах MS ACM (кодеках)
- Как написать кодек Microsoft Audio Compression Manager (устанавливаемый драйвер)
- Плагин foobar2000 — плагин Kernel Streaming для foobar2000.
- Плагин потоковой передачи ядра Winamp
Неработающие ссылки
[ редактировать ]- Компоненты потоковой передачи ядра
- API MME (WinMM)
- Компоненты Kernel Streaming (задокументированы для повторной реализации в ReactOS )