IAudioSessionControl::RegisterAudioSessionNotification メソッド (audiopolicy.h)

RegisterAudioSessionNotification メソッドは、ストリーム状態の変更を含むセッション イベントの通知を受信するようにクライアントを登録します。

構文

HRESULT RegisterAudioSessionNotification(
  [in] IAudioSessionEvents *NewNotifications
);

パラメーター

[in] NewNotifications

クライアントで実装された IAudioSessionEvents インターフェイスへのポインター。 メソッドが成功した場合は、クライアントの IAudioSessionEvents インターフェイスで AddRef メソッドを呼び出します。

戻り値

メソッドが成功した場合は、S_OK を返します。 失敗した場合、次の表に示す値が含まれますが、これに限定されません。

リターン コード 説明
E_POINTER
パラメーター NewNotificationsNULL です
AUDCLNT_E_DEVICE_INVALIDATED
オーディオ エンドポイント デバイスが取り外されているか、オーディオ ハードウェアまたは関連するハードウェア リソースが再構成、無効、削除、またはその他の方法で使用できなくなります。
AUDCLNT_E_SERVICE_NOT_RUNNING
Windows オーディオ サービスが実行されていません。

注釈

このメソッドは、クライアントによって実装された IAudioSessionEvents インターフェイスをセッション マネージャーに渡します。 このメソッドが正常に呼び出されると、セッション マネージャーは IAudioSessionEvents インターフェイス内のメソッドを呼び出して、さまざまなセッション イベントをクライアントに通知します。 これらのメソッドを使用して、クライアントは次のセッション関連イベントの通知を受け取ります。

  • 表示名の変更
  • ボリューム レベルの変更
  • セッション状態の変更 (非アクティブからアクティブ、またはアクティブから非アクティブ)
  • パラメーターの変更をグループ化する
  • セッションからのクライアントの切断 (ユーザーがオーディオ エンドポイント デバイスを削除したり、セッション マネージャーをシャットダウンしたり、ストリーム形式を変更したりした場合に発生します)
通知が不要になった場合、クライアントは IAudioSessionControl::UnregisterAudioSessionNotification メソッドを呼び出して通知を終了できます。

クライアントが IAudioSessionEvents インターフェイスへの最後の参照を解放する前に、 UnregisterAudioSessionNotification を呼び出してインターフェイスの登録を解除する必要があります。 それ以外の場合、アプリケーションは IAudioSessionEvents オブジェクトと IAudioSessionControl オブジェクトによって保持されているリソースをリークします。 RegisterAudioSessionNotification はクライアントの IAudioSessionEvents::AddRef メソッドを呼び出し、UnregisterAudioSessionNotificationIAudioSessionEvents::Release メソッドを呼び出します。 クライアントが UnregisterAudioSessionNotification を呼び出す前に IAudioSessionEvents インターフェイスへの参照を解放してエラーが発生した場合、セッション マネージャーは IAudioSessionEvents インターフェイスへの参照を解放しません。 たとえば、適切に設計されていない IAudioSessionEvents 実装では、IAudioSessionEvents オブジェクトのデストラクターから UnregisterAudioSessionNotification を呼び出す場合があります。 この場合、セッション マネージャーが IAudioSessionEvents インターフェイスへの参照を解放するまで、クライアントは UnregisterAudioSessionNotification を呼び出しません。セッション マネージャーは、クライアントが UnregisterAudioSessionNotification を呼び出すまで IAudioSessionEvents インターフェイスへの参照を解放しません。 AddRef メソッドと Release メソッドの詳細については、Windows SDK ドキュメントの IUnknown インターフェイスの説明を参照してください。

さらに、クライアントは、IAudioSessionControl オブジェクトと IAudioSessionManager オブジェクトへのすべての参照を解放する前に、UnregisterAudioSessionNotification を呼び出す必要があります。 クライアントがこれら 2 つのオブジェクトの少なくとも 1 つへの参照を保持しない限り、セッション マネージャーは、登録情報を保持するために割り当てたストレージをリークします。 通知インターフェイスを登録した後、クライアントは、これら 2 つのオブジェクトの少なくとも 1 つが存在する限り、引き続き通知を受け取ります。

RegisterAudioSessionNotification メソッドを呼び出すコード例については、「レガシ オーディオ アプリケーションのオーディオ イベント」を参照してください。

要件

要件
サポートされている最小のクライアント Windows Vista [デスクトップ アプリのみ | UWP アプリ]
サポートされている最小のサーバー Windows Server 2008 [デスクトップ アプリ | UWP アプリ]
対象プラットフォーム Windows
ヘッダー audiopolicy.h

こちらもご覧ください

IAudioSessionControl インターフェイス

IAudioSessionControl::UnregisterAudioSessionNotification

IAudioSessionEvents インターフェイス

IAudioSessionManager