次の方法で共有


XUserGetDefaultAudioEndpointUtf16

特定のユーザーの既定オーディオ エンドポイントを取得します。

構文

HRESULT XUserGetDefaultAudioEndpointUtf16(  
         XUserLocalId user,  
         XUserDefaultAudioEndpointKind defaultAudioEndpointKind,  
         size_t endpointIdUtf16Count,  
         wchar_t* endpointIdUtf16,  
         size_t* endpointIdUtf16Used  
)  

パラメーター

user   
型: XUserLocalId
既定のオーディオ エンドポイントを取得するユーザーのローカル ID。

defaultAudioEndpointKind   
型: XUserDefaultAudioEndpointKind
ユーザーの既定のオーディオ エンドポイントがオーディオのレンダリングやキャプチャを行うかどうかを指定する列挙値。

endpointIdUtf16Count   
型: size_t
endpointIdUtf16 パラメーターの指すバッファーの wchar_t 数。 XUserAudioEndpointMaxUtf16Count を渡します。

endpointIdUtf16 _Out_writes_to_(endpointIdUtf16Count,endpointIdUtf16Used)
型: wchar_t

ユーザーの既定のオーディオ エンドポイントの ID が格納されます。

endpointIdUtf16Used _Out_opt_
型: size_t*

endpointIdUtf16 パラメーターの返す ID の実際の wchar_t 数が格納されます。

戻り値

型: HRESULT

正常に実行された場合は S_OK が返され、それ以外の場合はエラー コードが返されます。 エラー コードの一覧については、「エラー コード」を参照してください。

解説

注意

この関数は、時間依存のスレッドで呼び出すのに安全ではありません。 詳細については、「時間依存のスレッド」を参照してください。

XUserGetDefaultAudioEndpointUtf16 関数は、引数として XUserDefaultAudioEndpointKind 列挙型をとります。

XUserDefaultAudioEndpointUtf16ChangedCallback コールバック関数は、特定のユーザーの既定のオーディオ エンドポイントが変更されたときに呼び出されます。

既定のオーディオ エンドポイントが変更されたときにコールバックを受け取るように登録するには、XUserRegisterForDefaultAudioEndpointUtf16Changed を呼び出します。

既定のオーディオ エンドポイントが変更されたときにコールバックの受け取りを登録解除するには、XUserUnregisterForDefaultAudioEndpointUtf16Changed を呼び出します。

次の例は、ユーザーの既定のオーディオ エンドポイントを取得する方法を示しています。

HRESULT GetAudioDeviceAssociation(
    IMMDeviceEnumerator* audioDeviceEnumerator,
    XUserLocalId user,
    XUserDefaultAudioEndpointKind defaultAudioEndpointKind,
    _Outptr_result_maybenull_ IMMDevice** endpoint)
{
    wchar_t audioDeviceId[XUserAudioEndpointMaxUtf16Count];
    RETURN_IF_FAILED_WITH_EXPECTED(XUserGetDefaultAudioEndpointUtf16(user, defaultAudioEndpointKind, std::size(audioDeviceId), audioDeviceId, nullptr), E_NOTFOUND);

    return audioDeviceEnumerator->GetDevice(audioDeviceId, endpoint);
}

HRESULT GetAudioAssociations()
{
    Mwrl::ComPtr<IMMDeviceEnumerator> audioDeviceEnumerator;

    RETURN_IF_FAILED(CoCreateInstance(
        __uuidof(MMDeviceEnumerator),
        nullptr,
        CLSCTX_ALL,
        __uuidof(IMMDeviceEnumerator),
        (void**)&audioDeviceEnumerator));

    XUserLocalId userLocalId;
    RETURN_IF_FAILED(XUserGetLocalId(_handle.get(), &userLocalId));

    {
        wil::unique_cotaskmem_string id;
        Mwrl::ComPtr<IMMDevice> device;
        if (SUCCEEDED(GetAudioDeviceAssociation(audioDeviceEnumerator.Get(), userLocalId, XUserDefaultAudioEndpointKind::CommunicationRender, &device)))
        {
            RETURN_IF_FAILED(device->GetId(&id));
        }
        appLog.AddLog("Preferred render communication device id: %S\n", id.get());
    }

    {
        wil::unique_cotaskmem_string id;
        Mwrl::ComPtr<IMMDevice> device;
        if (SUCCEEDED(GetAudioDeviceAssociation(audioDeviceEnumerator.Get(), userLocalId, XUserDefaultAudioEndpointKind::CommunicationCapture, &device)))
        {
            RETURN_IF_FAILED(device->GetId(&id));
        }
        appLog.AddLog("Preferred capture communication device id: %S\n", id.get());
    }

    return S_OK;
}

要件

ヘッダー: XUser.h

ライブラリ: xgameruntime.lib

サポートされているプラットフォーム: Windows、Xbox One ファミリー本体、Xbox Series 本体

関連項目

XUser

XUserDefaultAudioEndpointUtf16ChangedCallback

XUserRegisterForDefaultAudioEndpointUtf16Changed

XUserUnregisterForDefaultAudioEndpointUtf16Changed