지침
- 사용자가 최고의 게임 경험을 얻을 수 있도록 엔드포인트가 멀티채널 오디오를 지원하는지 확인하십시오. 먼저 IAudioClient::IsFormatSupported를 호출하십시오. 선호하는 형식이 지원되지 않으면 IAudioClient::GetMixFormat의 믹스 형식으로 렌더링으로 폴백하십시오.
- 타이틀은 7.1 엔드포인트만 처리하는 대신 2.0, 5.1, 7.1 엔드포인트도 네이티브로 처리할 수 있어야 하며, 오디오 클라이언트 무효화를 통해 형식이 변경되면 실시간으로 반응해야 합니다. 타이틀이 세 가지(채널 수에 따라) 다른 오디오 소스를 제공하지 않으려면, Audioclient 초기화 시 AUDCLNT_STREAMFLAGS_AUTOCONVERTPCM 스트림플래그를 사용하여 OS가 업믹싱 및 다운믹싱을 수행하도록 요청할 수 있습니다. 게임이 OS에 업믹싱 및 다운믹싱을 수행하도록 요청하더라도 여전히 오디오 클라이언트 무효화를 수신하고 이에 반응해야 합니다.
- 오디오 장치(렌더 및 캡처)를 열거하려면 MMDevice API를 사용하십시오. 메인 HDMI 엔드포인트로만 오디오를 렌더링하는 경우 GetDefaultAudioEndpoint를 호출하십시오.
- XBOX에서는 한 번에 한 프로세스에서만 오디오를 렌더링하십시오.
- XBOX Manager 원격 제어는 Windows Audio Session API(WASAPI)를 통한 오디오를 지원하도록 설계되었습니다. 하지만 Dolby/DTS 홈시어터 설정이 활성화된 경우 ISpatialAudioClient(ISAC)에서 오디오 스트리밍을 지원하지 않습니다.
-
WASAPI와 관련된 많은 메서드는 클라이언트 애플리케이션이 사용하는 오디오 엔드포인트 장치가 유효하지 않게 되면 오류 코드 AUDCLNT_E_DEVICE_INVALIDATED를 반환할 수 있습니다. 엔드포인트 장치가 어떤 식으로든 변경될 때 발생할 수 있는 이러한 오류에 여러분 타이틀이 적절히 응답하도록 하십시오. WASAPI에서 유효하지 않은 장치 오류에서 복구하는 방법에 대한 자세한 내용은 여기에서 확인할 수 있습니다. 타이틀이 오디오 장치 무효화를 올바르게 처리하는지 확인하는 쉬운 방법은 타이틀이 실행되는 동안 오디오 설정 페이지로 전환하고 HDMI 장치의 채널 수를 변경하는 것입니다. 무효화 시나리오 동안 WASAPI는 다음 오류 코드를 반환할 수 있습니다:
- AUDCLNT_E_DEVICE_INVALIDATED
- AUDCLNT_E_RESOURCES_INVALIDATED
- AUDCLNT_E_UNSUPPORTED_FORMAT
- AUDCLNT_E_ENDPOINT_CREATE_FAILED
-
타이틀에서 Spatial Sound가 사용되는 경우 ISAC API와 상호작용하게 되며, 이들도 장치 무효화와 관련된 오류 코드를 반환합니다. ISAC의 경우, 재생 중에 오디오 엔드포인트가 변경되거나 공간 렌더링 모드가 변경될 때 무효화가 발생합니다. ISAC에서 유효하지 않은 장치 오류에서 복구하는 방법에 대한 자세한 내용은 여기에서 확인할 수 있습니다. 이는 다음 메서드 중 하나가 다음 값 중 하나를 반환할 때 발생합니다.
메서드:
- ISpatialAudioObjectRenderStreamBase
- ISpatialAudioObjectRenderStream
- ISpatialAudioObjectRenderStreamForMetadata
- ISpatialAudioObjectRenderStreamForHrtf
- SPTLAUDCLNT_E_DESTROYED
- AUDCLNT_E_DEVICE_INVALIDATED
- AUDCLNT_E_RESOURCES_INVALIDATED
- AUDCLNT_E_UNSUPPORTED_FORMAT
- SPTLAUDCLNT_E_INTERNAL 또한, 콘솔이 공간 형식(예: Windows Sonic for Headphones)을 사용하도록 설정된 상태에서 컨트롤러의 헤드셋을 꽂거나 빼면 이러한 이벤트가 발생할 가능성이 높습니다.
- MMDevice API에서 IMMDevice를 얻은 후 언제든지 오디오 장치 무효화가 발생할 수 있습니다. IMMDevice::Activate를 포함한 모든 호출은 무효화 오류를 반환할 수 있습니다. 게임이 무효화 오류를 만날 때마다, IMMDeviceEnumerator를 통해 새 IMMDevice를 먼저 얻은 다음 오디오 스트림을 다시 생성해야 합니다.
