IAudioSessionNotification インターフェイス (audiopolicy.h)
IAudioSessionNotification インターフェイスは、オーディオ セッションの作成時に通知を提供します。
継承
IAudioSessionNotification インターフェイスは、IUnknown インターフェイスから継承します。 IAudioSessionNotification には、次の種類のメンバーもあります。
メソッド
IAudioSessionNotification インターフェイスには、これらのメソッドがあります。
IAudioSessionNotification::OnSessionCreated OnSessionCreated メソッドは、オーディオ セッションが作成されたことを登録済みプロセスに通知します。 |
注釈
WASAPI システム コンポーネントによって実装される他の WASAPI インターフェイスとは異なり、 IAudioSessionNotification インターフェイスはアプリケーションによって実装されます。 イベント通知を受信するために、アプリケーションは IAudioSessionManager2::RegisterSessionNotification メソッドに IAudioSessionNotification 実装へのポインターを渡します。
IAudioSessionNotification インターフェイスを登録すると、アプリケーションは インターフェイスの メソッドを介してコールバックの形式でイベント通知を受け取ります。
アプリケーションが通知を受信する必要がなくなったら、 IAudioSessionManager2::UnregisterSessionNotification メソッドを 呼び出します。 このメソッドは、アプリケーションが以前に登録した IAudioSessionNotification インターフェイスの登録を削除します。
アプリケーションは、イベント コールバック中に通知コールバックを登録または登録解除することはできません。
セッション列挙子は、 IAudioSessionNotification を介して報告される新しいセッションを認識していない可能性があります。 そのため、アプリケーションがオーディオ エンドポイントのすべてのセッションを取得するためにセッション列挙子のみに依存している場合、結果が正確ではない可能性があります。 これを回避するには、アプリケーションでリストを手動で管理する必要があります。 詳細については、「 IAudioSessionEnumerator」を参照してください。
CoInitializeEx(NULL, COINIT_MULTITHREADED)
すことによって、マルチスレッド アパートメント (MTA) モデルを使用して COM を初期化することを確認します。 MTA が初期化されていない場合、アプリケーションはセッション マネージャーからセッション通知を受信しません。
アプリケーションのユーザー インターフェイスを実行するスレッドは、アパートメント スレッド モデルを初期化する必要があります。
例
次のコード例は、 IAudioSessionNotification インターフェイスの実装例を示しています。
class CSessionNotifications: public IAudioSessionNotification
{
private:
LONG m_cRefAll;
HWND m_hwndMain;
~CSessionManager(){};
public:
CSessionManager(HWND hWnd):
m_cRefAll(1),
m_hwndMain (hWnd)
{}
// IUnknown
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppv)
{
if (IID_IUnknown == riid)
{
AddRef();
*ppvInterface = (IUnknown*)this;
}
else if (__uuidof(IAudioSessionNotification) == riid)
{
AddRef();
*ppvInterface = (IAudioSessionNotification*)this;
}
else
{
*ppvInterface = NULL;
return E_NOINTERFACE;
}
return S_OK;
}
ULONG STDMETHODCALLTYPE AddRef()
{
return InterlockedIncrement(&m_cRefAll);
}
ULONG STDMETHODCALLTYPE Release)()
{
ULONG ulRef = InterlockedDecrement(&m_cRefAll);
if (0 == ulRef)
{
delete this;
}
return ulRef;
}
HRESULT OnSessionCreated(IAudioSessionControl *pNewSession)
{
if (pNewSession)
{
PostMessage(m_hwndMain, WM_SESSION_CREATED, 0, 0);
}
}
};
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 7 [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2008 R2 [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | audiopolicy.h |