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