Управление потоками
После перечисления конечных точек звука в системе и определения подходящего устройства отрисовки или записи следующей задачей для приложения звукового клиента является открытие подключения к устройству конечной точки и управление потоком звуковых данных через это подключение. WASAPI позволяет клиентам создавать аудиопотоки и управлять ими.
WASAPI реализует несколько интерфейсов для предоставления служб управления потоками аудио клиентам. Основной интерфейс — IAudioClient. Клиент получает интерфейс IAudioClient для устройства аудио конечной точки путем вызова метода IMMDevice::Activate (с параметром iid set to REFIID IID_IAudioClient) в объекте конечной точки.
Клиент вызывает методы в интерфейсе IAudioClient для выполнения следующих действий:
- Узнайте, какие звуковые форматы поддерживает устройство конечной точки.
- Получение размера буфера конечной точки.
- Получение формата потока и задержки.
- Запуск, остановка и сброс потока, который проходит через устройство конечной точки.
- Доступ к дополнительным звуковым службам.
Чтобы создать поток, клиент вызывает метод IAudioClient::Initialize . С помощью этого метода клиент задает формат данных для потока, размер буфера конечной точки и работает ли поток в общем или монопольном режиме.
Остальные методы в интерфейсе IAudioClient делятся на две группы:
- Методы, которые можно вызывать только после открытия потока iAudioClient ::Initialize.
- Методы, которые можно вызывать в любое время до или после вызова инициализации.
Следующие методы можно вызывать только после вызова IAudioClient::Initialize:
- IAudioClient::GetBufferSize
- IAudioClient::GetCurrentPadding
- IAudioClient::GetService
- IAudioClient::GetStreamLatency
- IAudioClient::Reset
- IAudioClient::Start
- IAudioClient::Stop
Следующие методы можно вызвать до или после вызова IAudioClient::Initialize :
Чтобы получить доступ к дополнительным службам аудио-клиентов, клиент вызывает метод IAudioClient::GetService . С помощью этого метода клиент может получить ссылки на следующие интерфейсы:
-
Записывает данные отрисовки в буфер конечной точки отрисовки звука.
-
Считывает захваченные данные из буфера конечной точки записи звука.
-
Взаимодействует с диспетчером звуковых сеансов для настройки звукового сеанса и управления ими, связанного с потоком.
-
Управляет уровнем громкости звукового сеанса, связанного с потоком.
-
Управляет уровнями громкости отдельных каналов в звуковом сеансе, связанном с потоком.
-
Отслеживает скорость потоковой передачи данных и положение потока.
Кроме того, клиенты WASAPI, требующие уведомления о событиях, связанных с сеансом, должны реализовать следующий интерфейс:
-
Чтобы получать уведомления о событиях, клиент передает указатель на его интерфейс IAudioSessionEvents в метод IAudioSessionControl::RegisterAudioSessionNotification в качестве параметра вызова.
Наконец, клиент может использовать API более высокого уровня для создания звукового потока, но также требует доступа к элементам управления сеансом и элементам управления громкости для сеанса, содержащего поток. Api более высокого уровня обычно не предоставляет этот доступ. Клиент может получить элементы управления для определенного сеанса через интерфейс IAudioSessionManager . Этот интерфейс позволяет клиенту получать интерфейсы IAudioSessionControl и ISimpleAudioVolume для сеанса без необходимости использовать интерфейс IAudioClient для создания потока и назначения потока сеансу. Клиент получает интерфейс IAudioSessionManager для устройства аудио конечной точки путем вызова метода IMMDevice::Activate (с параметром iid, установленным для REFIID IID_IAudioSessionManager) в объекте конечной точки.
Интерфейсы IAudioSessionControl, IAudioSessionEvents и IAudioSessionManager определены в файле заголовка Audiopolicy.h. Все остальные интерфейсы WASAPI определены в файле заголовка Audioclient.h.
В следующих разделах описывается использование WASAPI для управления звуковыми потоками:
- Сведения о WASAPI
- Отрисовка потока
- Запись потока
- Запись обратного цикла
- Монопольный режим Потоки
- Восстановление после ошибки "Недопустимое устройство"
- Использование устройства связи
- Маршрутизация потоков
См. также