다음을 통해 공유


ISpatialAudioClient2 인터페이스(spatialaudioclient.h)

ISpatialAudioClient2 인터페이스는 ISpatialAudioClient에서 상속되며 큰 오디오 버퍼 오프로드에 대한 지원을 쿼리하는 메서드를 추가합니다.

상속

ISpatialAudioClient2 인터페이스는 ISpatialAudioClient 인터페이스에서 상속됩니다.

메서드

ISpatialAudioClient2 인터페이스에는 이러한 메서드가 있습니다.

 
ISpatialAudioClient2::GetMaxFrameCountForCategory

처리 단계당 지원되는 최대 프레임 수를 가져옵니다.
ISpatialAudioClient2::IsOffloadCapable

ISpatialAudioClient2가 만들어진 오디오 렌더링 엔드포인트가 하드웨어 오프로드 오디오 처리를 지원하는지 여부를 쿼리합니다.

설명

오디오 오프로드를 사용하면 앱이 큰 오디오 버퍼(일반적으로 1~2초)를 오디오 디바이스 드라이버에 제출할 수 있습니다. 오프로드가 없으면 일반적인 오디오 버퍼에는 10ms의 데이터만 포함되며, 추가 오디오 데이터를 제공하기 위해 앱을 초당 약 100번 깨워야 합니다. 오프로드된 큰 버퍼를 사용하면 특히 사용자가 화면을 끄고 오디오를 수신 대기하는 시나리오에서 배터리 절약을 제공할 수 있습니다.

이 기능을 사용하려면 오디오 디바이스용 드라이버가 오프로드를 지원해야 합니다. IsOffloadCapable을 호출하여 지원을 쿼리합니다. GetMaxFrameCountForCategory를 호출하여 오프로드에 지원되는 최대 오디오 프레임 수를 결정합니다.

ISpatialAudioClient2는 Windows 11(Windows 빌드 22000)에 도입되었으므로 코드는 인터페이스를 포함하지 않는 이전 버전의 Windows에서 실행되는 경우를 처리해야 합니다. 다음 예제에서는 ISpatialAudioClient에서 QueryInterface를 호출하여 ISpatialAudioClient2 instance 가져오려고 시도하고 해당 메서드를 호출하기 전에 검색된 인터페이스가 null이 아닌지 확인하는 방법을 보여 줍니다.

HRESULT hr;
Microsoft::WRL::ComPtr<IMMDeviceEnumerator> deviceEnum;
Microsoft::WRL::ComPtr<IMMDevice> defaultDevice;

hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), nullptr, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), (void**)&deviceEnum);
hr = deviceEnum->GetDefaultAudioEndpoint(EDataFlow::eRender, eMultimedia, &defaultDevice);

Microsoft::WRL::ComPtr<ISpatialAudioClient> spatialAudioClient;
hr = defaultDevice->Activate(__uuidof(ISpatialAudioClient), CLSCTX_INPROC_SERVER, nullptr, (void**)&spatialAudioClient);

Microsoft::WRL::ComPtr<ISpatialAudioClient2> spatialAudioClient2;
hr = spatialAudioClient->QueryInterface(__uuidof(ISpatialAudioClient2), (void**)&spatialAudioClient2);

if (spatialAudioClient2 != nullptr)
{
    BOOL offloadCapable = false;

    // AudioCategory_Media is just for example purposes.
    // Specify the same audio category that you intend specify in the call toISpatialAudioClient::ActivateSpatialAudioStream
    hr = spatialAudioClient2->IsOffloadCapable(AudioCategory_Media, &offloadCapable);
}

IMMDevice에 액세스할 수 없는 UWP 앱의 경우 ActivateAudioInterfaceAsync를 호출하여 ISpatialAudioClient의 instance 가져와야 합니다. 예제는 WindowsAudioSession 샘플을 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 빌드 22000
머리글 spatialaudioclient.h