Метод IAudioSessionControl::RegisterAudioSessionNotification (audiopolicy.h)

Метод RegisterAudioSessionNotification регистрирует клиент для получения уведомлений о событиях сеанса, включая изменения в состоянии потока.

Синтаксис

HRESULT RegisterAudioSessionNotification(
  [in] IAudioSessionEvents *NewNotifications
);

Параметры

[in] NewNotifications

Указатель на интерфейс IAudioSessionEvents, реализованный клиентом. Если метод завершается успешно, он вызывает метод AddRef в интерфейсе IAudioSessionEvents клиента.

Возвращаемое значение

Если метод завершается успешно, возвращает значение S_OK. В случае сбоя возможные коды возврата включают, но не ограничиваются ими, значения, показанные в следующей таблице.

Код возврата Описание
E_POINTER
Параметр NewNotifications имеет значение NULL.
AUDCLNT_E_DEVICE_INVALIDATED
Устройство конечной точки звука было отключено, или звуковое оборудование или связанные аппаратные ресурсы были перенастроены, отключены, удалены или иным образом стали недоступными для использования.
AUDCLNT_E_SERVICE_NOT_RUNNING
Аудиослужба Windows не запущена.

Комментарии

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

  • Изменение отображаемого имени
  • Изменения уровня тома
  • Изменение состояния сеанса (неактивное на активное или активное на неактивное)
  • Изменение параметров группировки
  • Отключение клиента от сеанса (вызванное удалением пользователем устройства конечной точки аудио, завершением работы диспетчера сеансов или изменением формата потока).
Если уведомления больше не нужны, клиент может вызвать метод IAudioSessionControl::UnregisterAudioSessionNotification для завершения уведомлений.

Прежде чем клиент выпускает окончательную ссылку на интерфейс IAudioSessionEvents , он должен вызвать UnregisterAudioSessionNotification , чтобы отменить регистрацию интерфейса. В противном случае приложение утечет ресурсов, хранящиеся объектами IAudioSessionEvents и IAudioSessionControl . Обратите внимание, что RegisterAudioSessionNotification вызывает метод IAudioSessionEvents::AddRef клиента, а UnregisterAudioSessionNotification вызывает метод IAudioSessionEvents::Release . Если клиент допустит ошибку путем освобождения ссылки на интерфейс IAudioSessionEvents перед вызовом UnregisterAudioSessionNotification, диспетчер сеансов никогда не освобождает ссылку на интерфейс IAudioSessionEvents . Например, плохо спроектированная реализация IAudioSessionEvents может вызвать UnregisterAudioSessionNotification из деструктора для объекта IAudioSessionEvents . В этом случае клиент не будет вызывать UnregisterAudioSessionNotification , пока диспетчер сеансов не отпустит ссылку на интерфейс IAudioSessionEvents , а диспетчер сеансов не разблокирует свою ссылку на интерфейс IAudioSessionEvents, пока клиент не вызовет UnregisterAudioSessionNotification. Дополнительные сведения о методах AddRef и Release см. в разделе Обсуждение интерфейса IUnknown в документации по Windows SDK.

Кроме того, клиент должен вызвать UnregisterAudioSessionNotification , прежде чем освобождать все свои ссылки на объекты IAudioSessionControl и IAudioSessionManager . Если клиент не сохраняет ссылку по крайней мере на один из этих двух объектов, диспетчер сеансов утечет хранилище, выделенное для хранения регистрационных данных. После регистрации интерфейса уведомлений клиент продолжает получать уведомления только до тех пор, пока существует хотя бы один из этих двух объектов.

Пример кода, который вызывает метод RegisterAudioSessionNotification , см. в разделе Звуковые события для устаревших звуковых приложений.

Требования

Требование Значение
Минимальная версия клиента Windows Vista [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2008 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header audiopolicy.h

См. также раздел

Интерфейс IAudioSessionControl

IAudioSessionControl::UnregisterAudioSessionNotification

Интерфейс IAudioSessionEvents

IAudioSessionManager