Win32 API 日本語リファレンス
ホームMedia.Audio › IAudioViewManagerService

IAudioViewManagerService

COM
IIDa7a7ef10-1f49-45e0-ad35-612057cc8f74継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

HWND をオーディオストリームに関連付けるための API を提供します。

解説(Remarks)

IAudioViewManagerService のインスタンスは、IAudioClient のインスタンスに対して GetService を呼び出すことで取得します。

メソッド 1

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT SetAudioStreamWindow(HWND hwnd)

指定した HWND ウィンドウハンドルをオーディオストリームに関連付けます。

hwndHWNDinオーディオストリームに関連付ける HWND

解説(Remarks)

アプリは、Mixed Reality シナリオでオーディオの位置を適切に表現するために、オーディオストリームをアプリの特定のウィンドウに関連付けることを選択できます。

IAudioViewManagerService のインスタンスは、ウィンドウに関連付けたいストリームを表す IAudioClient インスタンスに対して GetService を呼び出すことで取得します。次のコード例は、既定のオーディオレンダーエンドポイント上にオーディオストリームを作成し、それを HWND に関連付ける方法を示しています。

#include <audioclient.h>

HRESULT CreateAudioStreamAndAttachToHwnd(_In_ HWND hwnd, _Out_ IAudioClient **audioStream)
{

    wil::com_ptr_nothrow<IMMDeviceEnumerator> enumerator;
    RETURN_IF_FAILED(CoCreateInstance(__uuidof(IMMDeviceEnumerator),
    NULL,
    CLSCTX_ALL,
    IID_PPV_ARGS(&enumerator)));
    
    wil::com_ptr_nothrow<IMMDevice> device;
    RETURN_IF_FAILED(enumerator->GetDefaultAudioEndpoint(eRender, eConsole, &device));
    
    wil::com_ptr_nothrow<IAudioClient> audioClient;
    RETURN_IF_FAILED(device->Activate(__uuidof(IAudioClient),
    CLSCTX_ALL,
    NULL,
    (void**)&audioClient));
    
    wil::unique_cotaskmem_ptr<WAVEFORMATEX> wfx;
    RETURN_IF_FAILED(audioClient->GetMixFormat(wil::out_param_ptr<WAVEFORMATEX**>(wfx)));
    
    constexpr REFERENCE_TIME hnsRequestedDuration = 10000000;
    RETURN_IF_FAILED(audioClient->Initialize(AUDCLNT_SHAREMODE_SHARED,
    0,
    hnsRequestedDuration,
    0,
    wfx.get(),
    NULL));
    
    wil::com_ptr_nothrow<IAudioViewManagerService> audioViewManagerService;
    RETURN_IF_FAILED(audioClient->GetService(IID_PPV_ARGS(&audioViewManagerService)));
    RETURN_IF_FAILED(audioViewManagerService->SetAudioStreamWindow(hwnd));
    
    *audioStream = spAudioClient.detach();
    
    return S_OK;
}
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

#define global IID_IAudioViewManagerService "{A7A7EF10-1F49-45E0-AD35-612057CC8F74}"
#usecom global IAudioViewManagerService IID_IAudioViewManagerService "{}"
#comfunc global IAudioViewManagerService_SetAudioStreamWindow  3 sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。