다음을 통해 공유


XAudio2 기본 채널 매핑

XAudio2 클라이언트는 음성 채널에서 각 대상 음성의 채널로의 매핑을 완전히 제어할 수 있습니다. IXAudio2Voice::SetOutputMatrix 메서드를 사용하여 매핑을 제어합니다. 그러나 경우에 따라 XAudio2는 기본 송신 매트릭스를 자동으로 설정하여 이 작업을 간소화합니다. 음성의 오디오 채널과 연결된 채널 마스크(있는 경우)를 사용하여 이 작업을 수행합니다. 채널 마스크는 X3DAudio.h 및 기타 위치에 정의된 SPEAKER_xxx 비트 마스크의 조합입니다. XAudio2를 사용하려면 채널 마스크가 0이거나 채널 수와 설정된 비트 수가 같아야 합니다.

다음 표에서는 XAudio2에서 지원하는 형식에 대한 채널 마스크 요구 사항 및 기본값을 보여 줍니다.

서식 채널 마스크 요구 사항 기본 마스크 해당 구조체 멤버
PCM 파일에 채널 마스크가 포함될 수 있습니다. 채널 마스크가 0이거나 없음 WAVEFORMATEXTENSIBLE.dwChannelMask 또는 none(WAVEFORMATEX)
Adpcm 파일에 채널 마스크가 없습니다. 기본 채널 마스크는 항상 사용됩니다. None(ADPCMWAVEFORMAT)

 

서브믹스 및 마스터링 음성의 경우, 채널 마스크 또는 채널 마스크가 0이 없는 원본 음성의 경우 XAudio2는 다음 표에 따라 기본 화자 위치를 가정합니다.

채널 암시적 채널 위치
1 항상 두 스피커에서 전체 규모로 FrontLeft 및 FrontRight에 매핑됩니다(모노 사운드의 특수 사례).
2 FrontLeft, FrontRight(기본 스테레오 구성)
3 FrontLeft, FrontRight, LowFrequency(2.1 구성)
4 FrontLeft, FrontRight, BackLeft, BackRight(사분면)
5 FrontLeft, FrontRight, FrontCenter, SideLeft, SideRight(5.0 구성)
6 FrontLeft, FrontRight, FrontCenter, LowFrequency, SideLeft, SideRight(5.1 구성) (다음 설명 참조)
7 FrontLeft, FrontRight, FrontCenter, LowFrequency, SideLeft, SideRight, BackCenter(6.1 구성)
8 FrontLeft, FrontRight, FrontCenter, LowFrequency, BackLeft, BackRight, SideLeft, SideRight(7.1 구성)
9개 이상 암시적 위치 없음(일대일 매핑)

 

오디오 그래프의 지정된 음성 쌍에 원본 또는 대상 음성과 연결된 화자 위치가 없는 경우(한 음성에는 8개 이상의 채널이 있음), 원본 음성에 IXAudio2Voice::SetOutputMatrix 메서드를 사용하여 명시적으로 송신 매트릭스 집합이 설정될 때까지 두 음성 모두 재생할 수 없습니다. 이 작업을 수행할 때까지 두 음성에 대해 IXAudio2SourceVoice::Start 메서드를 호출하면 실패합니다.

원본 음성 및 대상 음성의 화자 위치 수가 다르고 IXAudio2Voice::SetOutputMatrix 가 원본 음성에서 호출되지 않은 경우 XAudio2는 각 원본 채널을 사용 가능한 가장 가까운 대상 스피커(또는 스피커)로 보내며, 의도한 화자와 얼마나 가까운지에 비례하여 전송합니다. 기본 동작이 다른 두 가지 특별한 경우가 있습니다.

  1. 원본 오디오가 모노이고 SPEAKER_FRONT_CENTER 위치하거나 정의된 위치가 없는 경우 출력 오디오에 있는 경우 항상 SPEAKER_FRONT_LEFT SPEAKER_FRONT_RIGHT 전송됩니다. 그들이 존재하지 않는 경우, 그것은 정상적인 경우로 돌아갑니다.
  2. 원본과 대상이 모두 6 채널이고 표준 5.1 화자 설정(Left+Right+Center+Sub+BackL+BackR 또는 Left+Right+Center+Sub+SideL+SideR) 중 하나에 배치되는 경우 채널은 1대 1로 매핑됩니다. 즉, SideLeft/Right 및 BackLeft/Right는 동일하게 처리됩니다. 이러한 설정에 대한 역사적 혼란이 있었기 때문입니다. 따라서 가정된 의도는 항상 일대일로 매핑하는 것입니다.

음성

XAudio2 프로그래밍 지침

GetChannelMask