다음을 통해 공유


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