Поделиться через


Соответствующие уведомления для маршрутизации потоков

В Windows 7 высокоуровневые API платформы, использующие основные API аудио, такие как Media Foundation, DirectSound и API волны, реализуют функцию маршрутизации потоков, обрабатывая переключение потоков с существующего устройства на новую конечную точку звука по умолчанию. Приложения мультимедиа, использующие эти API, используют поведение маршрутизации потоков без каких-либо изменений в источнике. Прямые клиенты WASAPI могут использовать уведомления, отправленные компонентами Core Audio, и реализовать функцию маршрутизации потоков.

Чтобы реализовать функцию маршрутизации потоков, клиент должен прослушивать два типа событий: уведомления об изменении устройства и уведомления об отключении сеанса. В реализации, предоставляемой интерфейсами API высокого уровня, эти события отправляются для конечных точек устройств по умолчанию, созданных путем вызова IMMDeviceEnumerator::GetDefaultAudioEndpoint. Дополнительные сведения см. в статье "Получение конечной точки устройства для маршрутизации потоков".

Компонент Core Audio MMDeviceAPI обеспечивает обратные вызовы уведомлений при добавлении, удалении или изменении звуковых устройств. Изменения формата и звукового сеанса передаются как события через WASAPI.

Уведомления об изменении устройства

MMDeviceAPI вызывает события при добавлении, удалении или изменении звуковых устройств. Если клиент должен предоставить функциональность маршрутизации потоков, он должен реализовать интерфейс IMMNotificationClient и зарегистрировать его реализацию в MMDeviceAPI.

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

После регистрации реализации этих интерфейсов клиент получает уведомления в виде обратных вызовов с помощью методов этих интерфейсов. Методы IMMNotificationClient вызываются MMDeviceAPI при возникновении событий уровня конечной точки (изменения состояния конечной точки, поступления новых конечных точек, удаления конечных точек, изменения конечной точки по умолчанию и изменения свойств конечной точки).

Если клиент хочет предоставить маршрутизацию потоков для устройства по умолчанию, клиент должен реализовать поведение изменения устройства при получении уведомления через обратный вызов IMMNotificationClient::OnDefaultDeviceChanged.

Уведомления об изменении сеанса звука

Изменения звукового сеанса и изменения формата передаются в виде событий сеанса аудио через WASAPI. Клиент WASAPI реализует интерфейс IAudioSessionEvents и регистрирует реализацию с помощью WASAPI.

Чтобы получить уведомления об изменении сеанса звука, клиент должен выполнить следующие задачи:

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

Чтобы реализовать функцию маршрутизации потоков, клиент должен ожидать уведомления об отключении сеанса. При отключении звукового сеанса или изменении формата устройства WASAPI отправляет клиентские уведомления в виде обратных вызовов через IAudioSessionEvents::OnSessionDisconnected. При уведомлении об отключении WASAPI также отправляет значение, указывающее, почему сеанс был отключен. Это может произойти по нескольким причинам, например устройство было удалено, сервер остановлен и т. д. Полный список причин см . в перечислении AudioSessionDisconnectReason , определенном в AudioPolicy.h. Если устройство по умолчанию изменится, клиент должен ждать уведомлений (если они еще не были получены), которые сопровождаются значением DisconnectReasonDeviceRemoval . В ответ на такие уведомления клиент может повторно открыть поток на новом устройстве по умолчанию.

Так как все эти операции являются асихронными, то порядок, в котором приложение получает уведомления, можно спрогнозировать. Однако обычно приложение получает значение AudioSessionDisconnect до уведомления об изменении устройства по умолчанию.

Уведомления об изменении формата

Изменения формата звука происходят при изменении формата потока. Это может произойти, когда пользователь выбирает новый формат на панели управления звуком или новое устройство по умолчанию поддерживает новый формат (например, HDMI или некоторые профессиональные звуковые интерфейсы с ручной корректировкой частоты выборки). Чтобы уведомить клиента об этих типах изменений формата, WASAPI отправляет уведомление о сеансе зарегистрированной реализацией IAudioSessionEvents::OnSessionDisconnected с причиной отключения DisconnectReasonFormatChanged. Клиент может обрабатывать уведомление, повторно открыв поток в новом формате.

Сведения об API MMDevice

Сведения о WASAPI

Маршрутизация потоков