Stream Formats를 Speaker Configurations에 매핑

오디오 장치의 스피커 구성과 일치하지 않는 스트림 형식을 재생하라는 메시지가 표시되면 오디오 드라이버에 다음과 같은 몇 가지 옵션이 있습니다.

  • 스트림 재생을 거부합니다.

  • 개별 채널을 스피커에 일대일로 매핑하여 스트림을 재생합니다. 채널이 각 스피커에 매핑된 후 채널이 남아 있는 경우 남은 채널을 삭제합니다. 반대로, 모든 채널이 스피커에 할당된 후 스피커가 남아 있는 경우 남은 스피커를 통해 침묵을 재생합니다.

  • 원래 스트림의 채널을 혼합하여 스트림을 재생하여 스피커 구성에 필요한 채널 수를 정확하게 생성합니다. 원래 스트림에 스피커보다 더 많은 채널이 있는 경우 이 방법은 단순히 초과 채널을 삭제하여 발생하는 콘텐츠 손실을 방지합니다. 혼합 및 형식 변환은 소프트웨어 또는 하드웨어에서 수행할 수 있습니다.

세 번째 옵션과 관련하여 드라이버는 소프트웨어 혼합을 직접 수행하지 않아야 합니다. 대신 하드웨어 공급업체는 GFX(글로벌 효과) 소프트웨어 모듈을 설치하여 오디오 디바이스에 도달하기 전에 스트림을 처리해야 합니다. Windows Vista에서 전역 효과는 GFX API(오디오 처리 개체)로 구현됩니다. Windows Server 2003 및 Windows XP에서는 전역 효과가 GFX 필터로 구현되었습니다.

7.1 Speaker Configuration에서 5.1 채널 스트림 재생

다음 그림에서는 5.1 서라운드 사운드 스피커 구성(왼쪽)에 대해 기록되지만 7.1 홈 시어터 스피커 구성(오른쪽)을 통해 재생되는 스트림을 보여 줍니다.

두 개의 자동 스피커가 있는 7.1 화자 구성에서 재생된 5.1 스트림을 보여 주는 다이어그램.

앞의 그림에서 기록된 5.1 형식에는 7.1 화자 구성의 BL 및 BR 화자 위치에 대한 채널 정보가 포함되어 있지 않습니다. 따라서 이 두 스피커는 침묵합니다. (또 다른, 더 어려운 대안은 오디오 장치가 녹음의 원래 여섯 채널의 콘텐츠를 혼합하여 BL 및 BR 스피커에 대한 두 개의 추가 채널을 합성하는 것입니다.)

채널 마스크 비트에 대한 정의에 따라 이전 그림의 왼쪽에 표시된 5.1 스트림을 기록하기 위한 채널 마스크는 0x60F 있어야 합니다. 이 마스크는 FL, FR, FC, LFE, SL 및 SR의 화자 위치에 6개의 채널을 할당합니다. (앞에서 설명한 사이드 스피커 5.1 구성입니다.) 실제로 5.1 스트림에 대한 채널 마스크는 이전에 언급된 이유로 0x60F 0x3F 않고 이제 자세히 설명됩니다.

이전 버전의 Windows(Windows Server 2003, WINDOWS XP SP1, Windows 2000 및 Windows Me/98)에서 채널 마스크 0x3F 해석은 5.1 형식의 6개 채널을 FL, FR, FC, LFE, BL 및 BR 화자 위치에 할당한다는 것입니다. (백 스피커 5.1 구성입니다.) 그러나 Windows Vista, WINDOWS Server 2003 SP1 및 WINDOWS XP SP2의 해석은 다릅니다. 규칙에 따라 채널 마스크 0x3F 5.1 형식은 백 스피커 5.1 구성 대신 사이드 스피커 5.1 구성을 의미하는 것으로 해석됩니다.

이러한 방식으로 채널 마스크를 해석하면 사이드 스피커 5.1 구성과 백 스피커 5.1 구성을 구분하기 위해 두 번째 5.1 채널 형식 설명자를 도입할 필요가 없습니다. 이러한 두 구성은 매우 유사하기 때문에 일반적인 사용자가 구분하기가 어려울 수 있습니다. 단일 5.1 채널 형식 설명자만 있으면 사용자에게 혼동을 주지 않지만 하드웨어 공급업체는 0x3F 채널 마스크를 해석해야 합니다. 즉, 채널 5와 6이 BL 및 BR 위치 대신 SL 및 SR 화자 위치에 할당됩니다. 5.1 스트림에 대한 채널 마스크의 특수 사례 해석을 기억해야 하는 대가로 공급업체는 사용자에게 매우 유사한 5.1 채널 형식 설명자 두 개를 구분하는 데 어려움을 덜어줄 수 있습니다.

적어도 일부 사용자가 사이드 스피커 5.1 구성과 백 스피커 5.1 구성을 구분하려고 할 수 있다고 생각하는 공급업체에는 이러한 목적을 위해 UI(사용자 인터페이스) 프로그램을 제공하는 옵션이 있습니다. 사용자는 UI를 통해 5.1 채널 스트림의 채널 4와 5가 7.1 홈 시어터 스피커 구성의 사이드 스피커가 아닌 백 스피커를 구동할지 여부를 선택할 수 있습니다.

5.1 Speaker Configuration에서 7.1 채널 스트림 재생

다음 그림에서는 5.1 서라운드 사운드 스피커 구성(오른쪽)을 통해 재생되는 7.1 홈 시어터 스피커 구성(왼쪽)에 대해 기록된 스트림을 보여 줍니다. 7.1 채널 스트림의 채널 마스크가 0x63F.

두 개의 삭제된 채널이 있는 5.1 화자 구성에서 재생된 7.1 스트림을 보여 주는 다이어그램

이 예제에서는 7.1 구성의 사이드 스피커 위치에 대한 데이터를 포함하는 채널 6과 7이 5.1 구성의 사이드 스피커 위치를 통해 재생됩니다. 오디오 디바이스는 5.1 구성에서 스트림을 재생할 때 7.1 구성의 후방 스피커 위치에 대한 데이터를 포함하는 채널 4와 5를 삭제합니다. 앞에서 설명한 것처럼 디바이스가 5.1 구성의 측면 스피커를 통해 재생하기 전에 채널 6 및 7과 혼합하여 채널 4 및 5의 콘텐츠를 보존하려고 시도하는 또 다른 대안이 있습니다.

시스템 믹서 동작

Windows Server 2003, Windows XP, Windows 2000 및 Windows Me/98에서는 오디오 디바이스가 재생되는 다중 채널 오디오 스트림은 일반적으로 소프트웨어 시스템 믹서인 Kmixer.sys 의해 생성됩니다. 스트림 재생을 시작하기 전에 시스템 믹서와 오디오 드라이버는 믹서와 드라이버가 모두 처리할 수 있는 스트림 형식을 협상해야 합니다.

오디오 장치의 스피커 구성과 일치하지 않는 형식으로 다중 채널 스트림을 재생하라는 메시지가 표시되면 오디오 드라이버가 요청을 거부할 수 있으며, 이 경우 협상이 계속됩니다.

시스템 믹서는 5.1채널 입력 스트림의 콘텐츠를 7.1채널 출력 스트림(오디오 디바이스)으로 변환할 수 있지만, 입력 스트림의 품질을 유지하기 위해 이러한 변환을 방지하는 것을 선호합니다. 따라서 시스템 믹서는 드라이버에 최고 품질의 입력 스트림과 동일한 형식의 스트림을 시스템 믹서에 수락하도록 요청하여 협상을 시작합니다. 일반적으로 시스템 믹서에 5.1 또는 7.1 채널 형식의 입력 스트림이 있는 경우 드라이버에 동일한 형식의 스트림을 수락하도록 요청합니다. 드라이버가 이 형식을 거부하는 경우 시스템 믹서는 다른 스트림 형식을 처리할 수 있는지 드라이버에 요청하여 협상을 계속합니다.

예를 들어 5.1 화자 구성이 있는 오디오 디바이스의 드라이버가 시스템 믹서에서 7.1 채널 스트림을 재생하라는 요청을 거부하는 경우 시스템 믹서는 7.1 채널 스트림을 5.1 채널 스트림으로 변환하도록 제공하여 협상을 계속합니다. 드라이버가 이 형식을 수락하면 시스템 믹서가 드라이버에 대한 스트림 변환을 수행합니다.

오디오 드라이버를 디자인할 때 드라이버 작성기는 자체 형식 변환을 처리할지 아니면 시스템 믹서에 의존하여 변환을 수행할지 결정해야 합니다. 드라이버는 다음 상황 중 하나에서 변환을 처리해야 할 수 있습니다.

  • 드라이버가 시스템 믹서에서 수행하는 변환과 다른 방식으로 변환을 수행해야 하는 경우.

  • 드라이버가 시스템 믹서 를 우회하는 스트림을 재생해야 하는 경우.

두 번째 상황에서 스트림은 Microsoft DirectSound 하드웨어 가속 버퍼에서 오디오 디바이스의 하드웨어 혼합 핀으로 직접 재생되는 경우 시스템 믹서 를 무시할 수 있습니다. 또한 일부 "프로 오디오" 애플리케이션은 시스템 믹서의 대기 시간을 방지하거나 혼합 프로세스가 원래 오디오 스트림의 디지털 샘플 값을 변경하지 못하도록 스트림을 오디오 디바이스로 직접 보냅니다.

WINDOWS Server 2003 SP1 및 WINDOWS XP SP2에서 시스템 믹서가 5.1 채널 출력 스트림을 생성하는 경우 믹서는 항상 스트림의 채널 마스크를 0x3F 설정합니다. 시스템 믹서는 채널 마스크가 0x60F 5.1 채널 입력 스트림을 수신하더라도 이런 방식으로 작동합니다. 이 동작으로 오디오 드라이버는 믹서에서 0x60F 채널 마스크가 있는 5.1 채널 스트림을 수신하지 않습니다.

시스템 믹서가 0x63F 채널 마스크를 사용하여 7.1 채널 입력 스트림을 수신하고 5.1 채널 출력 스트림(0x3F 채널 마스크)을 생성하는 경우 믹서는 입력 스트림의 채널 6과 7을 출력 스트림의 채널 4와 5에 복사합니다. 믹서는 7.1 채널 입력 스트림에서 채널 4와 5(두 개의 백 스피커용)를 삭제합니다. 이 동작은 7.1 채널 스트림의 두 사이드 스피커에 대한 콘텐츠가 포함된 채널이 5.1 화자 구성의 사이드 스피커를 통해 재생되도록 합니다.