Зачем нужно WASAPI и как правильно выводить звук в Windows


Windows Audio Session API (WASAPI) позволяет клиентским устройствам управлять потоком аудиоданных между приложением и конечным аудиоустройством. Делает комфортным прослушивание музыкальных композиций и микширование без нежелательных задержек и без потери качества. Удобно wasapi скачать на нашем сайте и установить.

Что такое WASAPI

Каждый аудиопоток, воспроизводимый на устройстве, является участником audio сеанса. С помощью абстракции сеанса клиент WASAPI может идентифицировать аудиопоток как член группы связанных аудиопотоков. Система может управлять всеми потоками в session как единым целым.

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


цепочка вывода звука

WASAPI состоит из нескольких интерфейсов. Первый из них – это интерфейс IAudioClient. Чтобы получить доступ к интерфейсам WASAPI, клиент сначала получает ссылку на интерфейс IAudioClient конечного аудиоустройства, вызывая метод IMMDevice :: Activate с параметром iid, установленным на REFIID IID_IAudioClient. Клиент вызывает метод IAudioClient :: Initialize для инициализации потока на устройстве конечной точки. После инициализации потока клиент может получить ссылки на другие интерфейсы WASAPI, вызвав метод IAudioClient :: GetService.

Многие методы в WASAPI возвращают код ошибки AUDCLNT_E_DEVICE_INVALIDATED, если конечное аудиоустройство, используемое клиентским приложением, становится недействительным. Часто приложение может исправить эту ошибку.

WASAPI реализует следующие интерфейсы в foobar.

  • AudioCaptureClient. Позволяет клиенту читать входные данные из буфера конечной точки захвата и передавать в браузер.
  • AudioClient. Создавать, настроить и инициализировать аудиопоток между аудиоприложением и аудиосистемой или аппаратным буфером конечного аудиоустройства.
  • AudioClock. Отслеживать скорость передачи данных потока и текущую позицию в потоке.
  • AudioRenderClient. Записывать выходные данные в буфер конечной точки рендеринга.
  • AudioSessionControl. Настраивать параметры управления для аудиосеанса и отслеживать события в сеансе, в том числе default.
  • AudioSessionManager. Включить доступ к элементам управления сеансом и элементам управления громкостью как для межпроцессных, так и для конкретных аудиосеансов.
  • AudioStreamVolume. Контролировать и отслеживать уровни громкости для всех каналов в аудиопотоке.
  • ChannelAudioVolume. Управлять уровнями громкости для всех каналов в аудиосеансе, которому принадлежит поток.
  • SimpleAudioVolume. Управлять общим уровнем громкости аудиосеанса.
  • AudioSessionEvents. Предоставляет уведомления о событиях, связанных с сеансом, таких как изменения уровня громкости, отображаемого имени и состояния сеанса. Открывает доступ пользователю данной программы в mode и support.

Как установить плагины в foobar2000

Перед установкой плагинов для плеера необходимо и все необходимые плагины в один каталог. Почти все популярные расширения есть на официальном сайте плеера. Используйте версию foobar 1.4.6 – она самая стабильная на данный момент.

Важно! Плагины скачиваются в виде архивов в формате zip (чаще всего) или fb2k-component. Разархивировать их в каталог программы не нужно (если в описании плагина не указано иное), программа сделает это сама при установке.

Есть 2 способа установки.

Первый способ:

  • Если загруженный архив имеет формат zip или fb2k-component, то открываем foobar2000, затем кликаем по пункту File сверху и переходим к Preferences (Настройки).

  • Нажимаем на первый пункт в меню слева – Components.

  • Снизу кликаем по кнопке Install, чтобы установить сторонний плагин. При этом программа сама извлечет из архива нужные файлы и поместит их в правильную директорию. Плагин появится в списке.

Второй способ:

  1. Если скачанный архив имеет другой формат, его необходимо сначала распаковать (к примеру, с помощью WinRar).
  2. Находим файл с расширением dll и переносим его в папку Components в директории, где установлена программа.
  3. Перезапускаем плеер. Плагин должен появиться в списке компонентов.

Как видите, foobar2000 легко настраивать под себя, так как существует огромное количество плагинов, с помощью которых можно подобрать необходимое качество звука. Процесс их установки тоже крайне прост и производится в 2 клика.

В чем отличие Wasapi Exclusive (Event) от Wasapi Exclusive (Push)

Если вы решили скачать wasapi exclusive , то есть два варианта на 32 и 64 bite. Есть два основных способа связи с помощью:

  • Wasapi Exclusive (Event).
  • Wasapi Exclusive (Push).

Оба передают одни и те же аудиоданные и звучат одинаково. Отличие заключается, исключительно, в возможности работать с тем или иным оборудованием.

Обратите внимание: начиная с версии «MC 18.0.183», WASAPI теперь используется, как программа по умолчанию. Если ваше аудиоустройство не поддерживает этот режим, его можно отключить в диалоговом окне настроек устройства.

Версии до 18.0.183. В режиме вывода WASAPI данные из Media Center передаются на звуковое устройство. Он работает практически со всем оборудованием.

WASAPI Event Style позволяет звуковому устройству извлекать данные из Media Center. Этот метод поддерживается не всем оборудованием, но рекомендуется, если он поддерживается. Это дает несколько преимуществ:

Это позволяет аудиоподсистеме извлекать данные вместо того, чтобы отправлять данные в систему.

Оборудование (или интерфейс WASAPI) никогда не видит вызовов паузы или сброса. Вместо этого при паузе или сбросе тишина доставляется в цикле pull. Это устраняет необходимость во взломах карт, которые окружают свои буферы при паузе, сбросе и т. Д. (ATI HDMI и т. д.). Это обеспечивает более прямой путь данных к driver/оборудованию. В основном «цикле извлечения» используется круговой буфер без блокировки (система, которую Дж. Ривер построил для ASIO), поэтому выполнение запроса на извлечение выполняется как можно быстрее.

Расширенные настройки

По нажатию кнопки Detailed settings

мы попадаем в расширенные настройки программы.

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

NS on


NS off

Очень странно — никакого дизеринга, а уж тем более нойз шейпинга здесь не видно. Программа лишь добавляет какой-то странный дополнительный шум. Вероятно, это баг — я уже сообщил об этой странности разработчику.
Добавлено: по словам разработчика, обработка всё же выполняется и называется это формовкой шума первого порядка (first order noise shaping). Т.е. дополнительный шум в запись не вводится, а уже имеющийся шум квантования с помощью специального алгоритма, включающего обратную связь, вытесняется в область высоких частот. Разработчик также утверждает, что в качестве дизера могут запросто выступать естественные шумы микрофона, присутствующие на большинстве записей. Т.е. такой алгоритм даёт преимущественно лучшие результаты на живых, не синтетических записях.Добавлено: в весрии 4.0.63 была добавлена возможность использовать комбинации dither и noise shaping.
Далее у нас следуют настройки общего режима WASAPI. Здесь мы можем управлять качеством ресемплера (resampler MFT или Audio resampler DSP), входящего в Windows Audio Service. Как написано в документации Microsoft, если программа не выполняет управление качество ресемплера, устанавливается значение по умолчанию — 30. Давайте сравним качество ресемплинга 44.1->96 кГц с качеством 1, 30 и 60 (максимум).


Q=1


Q=30


Q=60

На слух минимальное качество имеет значительные искажения, режимы качества 30 и 60 на слух практически одинаково приемлемы. Кстати, интересно, что управление качеством ресемплинга было введено только в Windows 7.

Здесь же имеется настройка автоматического масштабирования сигнала по амплитуде до 98% от максимума, что предотвращает вмешательство лимитера Windows (иначе он будет компрессировать сигнал).

Что касается режима Shared — с особенностями его работы вы можете ознакомиться в обзоре Windows Media Player.

И последняя группа настроек, которая нас интересует — Playback thread settings, т.е. настройки потока воспроизведения. Здесь мы сталкиваемся с новшеством под названием MMCSS (Multimedia Class Scheduler Service). Эта служба занимается распределением процессорных ресурсов между процессами, отвечающими за выполнение задачи реального времени — записи, воспроизведения (рендеринга). Включив данную функцию (DwmEnableMMCSS(True) и установив тип задачи в Pro Audio, мы тем самым установим для проигрывания максимальный приоритет доступа к ЦП, что позволит еще больше уменьшить латентность (размер буфера). Таким образом, установка режима Pro Audio уменьшает вероятность опустошения буфера (что и является причиной щелчков), однако этот режим менее эффективен с точки зрения эффективности энергопотребления.

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

PlayPcmWin 4.0.62.0 64bit wasapi.Init() 00000000 wasapi.DoDeviceEnumeration(Play) 00000000 wasapi.ChooseDevice(Динамики (Creative SB X-Fi)) 00000000 wasapi.Setup(PCM 44.1kHz Sint32V24 2ch ProAudio Exclusive EventDriven latency=3ms zeroFlush=500ms timePeriod=0.5ms) 00000000 Endpoint buffer size = 132 frames. Read playgroup 0 completed. Elapsed time: 1632ms wasapi.StartPlayback(0) 00000000

Продолжительность трека — около 6 минут. После запуска программа потребляла 70 Мб ОЗУ, после включения трека — 212 Мб.

Как вы можете видеть на скриншоте. мне удалось осуществить вывод аудио в формате i32V24 с задержкой всего 3 мс. При этом звуковые артефакты не наблюдались

Что самое интересное — в режиме Shared программа выполняет ресемплирование средствами алгоритма resampler MFT, а затем получает поток обратно, помещая уже ресемпилрованное аудио в ОЗУ (т.е. ресемплинг выполняется не на лету). Вот лог:

PlayPcmWin 4.0.62.0 64bit wasapi.Init() 00000000 wasapi.DoDeviceEnumeration(Play) 00000000 wasapi.ChooseDevice(Динамики (Creative SB X-Fi)) 00000000 wasapi.Setup(PCM 44.1kHz Sint16 2ch ProAudio Shared EventDriven latency=3ms zeroFlush=500ms timePeriod=0.5ms) 00000000 Endpoint buffer size = 2880 frames. Resampling… Read playgroup 0 completed. Elapsed time: 6677ms wasapi.StartPlayback(0) 00000000

После начала произведения программа потребляла около 340 Мб ОЗУ.

PlayPcmWin поддерживает форматы WAV, AIFF, FLAC, а также имеет поддержку CUEsheet.

В чем разница между Directsound и Wasapi Shared

Windows – наиболее широко используемая операционная система в мире. люди используют ее для решения повседневных задач, и прослушивание звука – одна из них. Microsoft Windows 7 и выше может воспроизводить звук двумя способами. используя прямую поддержку звука Directx и поддержку WASAPI. большинство приложений Windows используют подход Direct Sound. Windows может воспроизводить несколько потоков из разных приложений при использовании прямого звука. Directsound работает как промежуточный уровень между программным обеспечением и звуковыми драйверами. Он берет звук из другого программного обеспечения, затем передискретизирует весь звуковой поток в один поток, а затем отправляет его в аудиодрайверы. Обратной стороной этого подхода является то, что мы никогда не получаем то, что на самом деле играем. например, если кто-то воспроизводит звуковой файл на 192 кГц, 24 бит. тогда окна, вероятно, преобразуют его в 44 кГц, 16 бит с другим звуком. Прямой звук автоматически передискретизирует звуковой поток до соответствующей частоты дискретизации, которая может поддерживаться аудиооборудованием.

WASAPI предоставляет два режима работы. общий режим и эксклюзивный режим. Общий режим работает так же, как прямой звук, а микшер Win выполняет повторную выборку и микширование. В эксклюзивном режиме WASAPI обходит звуковой микшер Windows, и приложение может напрямую отправлять данные на звуковую карту. в этом режиме приложение может декодировать такие форматы, как DTS, DTS master audio, DOLBY True HD, Dolby digital, Flac и т. д., и отправлять неизмененный поток на звуковую карту.

Кроме различных режимов, важно также, как WASAPI управляет данными между буферами. WASAPI использует подход пуш и PULL для запроса данных, которые необходимо обработать. При использовании метода push приложение помещает данные в буферы и постоянно отслеживает их, и как только видит, что они опустошены, оно заполняет их снова. В подходе PULL, который является современной разработкой, приложение использует два буфера. Аудиодрайверы вызывают приложение, как только оно видит пустой буфер, и начинает использовать данные из другого буфера. тем временем приложения заполняют пустой буфер.

Basic

Звуковой сигнал, в общем случае, кодируется последовательностью значений амплитуды сигнала, измеренных через равные промежутки времени. Единичное значение амплитуды называют сэмплом, а время между двумя соседними измерениями — частотой дискретизации или частотой квантования. В подавляющем большинстве случаев сэмпл при передаче на аудиоустройство описывают знаковым целым числом — разрядности 16, 24 или 32 бита. Разрядность в 32 бита может быть использована для выравнивания буфера устройства по границе двойного слова, тогда семпл кодируется только первыми 24 битами, или же для полноразрядного кодирования. Первый вариант доступен в ASIO и WASAPI, второй только в WASAPI.

Максимально достижимое соотношение сигнал/шум определяется разрядностью сэмпла и вычисляется как 20log(2^q) где q — разрядность сэмпла.

16 бит — диапазон сэмпла [−32768, 32767], SNR 96.33 дБ 24 бит — диапазон сэмпла [−8388608, 8388607], SNR 144.49 дБ 32 бит — диапазон сэмпла [−2147483648, 2147483647] , SNR 192.66 дБ

Частоты дискретизации (количество сэмплов в секунду для одного канала) из-за взаимной кратности стоит выписать в два набора: {44100, 88200, 192000} и {48000, 96000}. Два набора частот приводят к тому, что аудиоустройству нужно два осциллятора для качественной синхронизации. Конечно, можно использовать и один с кратной частотой, например, как 88200, так и 96000 Гц, но это существенно повышает сложность исполнения точного тактового контура.

Вывод: качественное аудиоустройство должно иметь два осциллятора, один для работы с частотами {44100, 88200}, второй для {48000, 96000, 192000}.

Что лучше ASIO или WASAPI

ASIO был разработан для обхода исходной некорректной аудиоподсистемы Windows, которая заставляла все работать с фиксированной скоростью, смешивала системные звуки и аудиопотоки и имела серьезные проблемы с задержкой. ASIO был разработан для обеспечения интерфейса с малой задержкой для профессиональных аудио вычислений. Wasapi – это разработка Microsoft, устраняющая недостатки на более ранней стадии, и она работает стабильно. Но она меньше поддерживает нестандартные скорости воспроизведения и может не поддерживать dop dsd или более высокие скорости dsd.

ASIO изначально поддерживает все частоты дискретизации, которые может обрабатывать подключенный ЦАП, и не имеет проблем с dsd. Длина буфера в основном зависит от общей загрузки системы, поскольку компьютеру приходится прерывать другие операции для загрузки следующего фрагмента выборок в выходной буфер, поэтому в системах с низким энергопотреблением или более загруженных системах очень короткий или очень длинный буфер может увеличить нагрузку на процессор. Это может спровоцировать нежелательную задержку при воспроизведении музыкальных композиций.

ASIO – это модель аудиоинтерфейса Steinberg, используемая практически во всех профессиональных аудиоприложениях, и обычно это лучший способ работы с очень низкими задержками. Производители профессиональных звуковых карт предоставляют драйверы ASIO. Его единственная слабость заключается в том, что вы можете использовать только один драйвер ASIO за раз, что может вызвать проблемы в будущем, поскольку все больше и больше студийного оборудования, такого как микрофоны, звуковые модули и мониторы (именно так называются динамики в мире профессионального обучения). audio) поставляются с интерфейсами USB, а не с более старой моделью, объединяющей все ваши входы и выходы в единый аудиоинтерфейс.

Многие компании, производящие потребительское аудио, в наши дни производят asio-драйверы для своих ЦАП, поскольку они исключают из уравнения любые вычисления в Windows и обеспечивают более высокие шансы на получение хороших результатов от их продукта.

Рейтинг
( 1 оценка, среднее 4 из 5 )
Понравилась статья? Поделиться с друзьями:
Для любых предложений по сайту: [email protected]