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 主机
另请参阅
XUserDefaultAudioEndpointUtf16ChangedCallback