Сведения о WASAPI

API сеанса аудио Windows (WASAPI) позволяет клиентским приложениям управлять потоком звуковых данных между приложением и устройством аудио конечной точки.

Файлы заголовков Audioclient.h и Audiopolicy.h определяют интерфейсы WASAPI.

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

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

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

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

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

Интерфейс Description
IAudioCaptureClient Позволяет клиенту считывать входные данные из буфера конечной точки записи.
IAudioClient Позволяет клиенту создавать и инициализировать аудиопоток между звуковым приложением и подсистемой аудио или аппаратным буфером устройства аудио конечной точки.
IAudioClock Позволяет клиенту отслеживать скорость данных потока и текущую позицию в потоке.
IAudioRenderClient Позволяет клиенту записывать выходные данные в буфер конечной точки отрисовки.
IAudioSessionControl Позволяет клиенту настраивать параметры управления для звукового сеанса и отслеживать события в сеансе.
IAudioSessionManager Позволяет клиенту получать доступ к элементам управления сеансом и элементам управления громкости для сеансов между процессами и процессами.
IAudioStreamVolume Позволяет клиенту контролировать и отслеживать уровни громкости для всех каналов в звуковом потоке.
IChannelAudioVolume Позволяет клиенту управлять уровнями томов для всех каналов в звуковом сеансе, к которому принадлежит поток.
ISimpleAudioVolume Позволяет клиенту управлять уровнем основного тома сеанса звука.

 

Клиенты WASAPI, требующие уведомления о событиях, связанных с сеансом, должны реализовать следующий интерфейс.

Интерфейс Description
IAudioSessionEvents Предоставляет уведомления о событиях, связанных с сеансом, таких как изменения уровня тома, отображаемое имя и состояние сеанса.

 

Управление потоками

Справочник по программированию