다음을 통해 공유


Speaker-Configuration 설정 적용

참고 이 정보는 Windows XP 및 이전 운영 체제에 적용됩니다. Windows Vista부터 IDirectSound::GetSpeakerConfigIDirectSound::SetSpeakerConfig 는 더 이상 사용되지 않습니다.

DirectSound는 레지스트리에서 현재 스피커 구성 설정을 추적하고 새 DirectSound 디바이스를 만들 때마다 해당 설정을 오디오 하드웨어에 적용합니다.

애플리케이션 프로그램은 레지스트리의 스피커 구성 설정을 업데이트하는 IDirectSound::SetSpeakerConfig 메서드를 호출하여 시스템 전체 스피커 구성을 변경할 수 있습니다. 또한 DirectSound 개체가 있는 동안 오디오 장치는 일반적으로 스피커 설정을 변경할 수 없지만 메서드는 하드웨어에 새 설정을 즉시 적용하려고 시도합니다. DirectSound가 이 메서드에 대해 정의하는 화자 구성 목록은 Speaker-Configuration 요청 번역을 참조하세요.

사용자는 제어판 멀티미디어 속성 페이지(mmsys.cpl)에서 스피커 구성 대화 상자를 통해 구성을 변경할 수 있습니다. 예를 들어 Windows XP에서 DirectSound 스피커 구성 대화 상자를 찾으려면 다음 단계를 수행합니다.

  1. 제어판 소리 및 오디오 장치 아이콘을 두 번 클릭합니다.

  2. 오디오 탭의 소리 재생 목록에서 디바이스를 선택합니다.

  3. 고급 단추를 선택합니다.

  4. 스피커 탭을 선택합니다.

이때 선택할 수 있는 화자 구성 목록 옆에 Speaker Setup 레이블이 표시됩니다.

DirectSound는 KSPROPERTY_AUDIO_CHANNEL_CONFIG set-property 요청을 사용하여 오디오 필터 그래프의 3D 노드 또는 DAC 노드(KSNODETYPE_3D_EFFECTS 또는 KSNODETYPE_DAC)로 스피커 구성 정보를 보냅니다. 3D 노드의 경우 속성 요청의 대상은 실제로 노드를 피드하는 핀(3D 스트림 개체)입니다. DAC 노드의 경우 대상은 DAC 노드를 포함하는 필터 개체입니다. 두 경우 모두 스피커 구성 설정은 전역이며 오디오 디바이스 전체에 영향을 줍니다. 이후에 실행되는 모든 오디오 애플리케이션은 DirectSound가 설정을 다시 변경할 때까지 새 설정의 적용을 받습니다.

Windows Me 및 Windows XP 이상과 함께 제공되는 DirectSound 버전만 DAC 노드에 스피커 구성 속성 요청을 보냅니다. 이전 버전의 DirectSound는 이 기능을 지원하지 않습니다. 그러나 모든 버전의 DirectSound는 이러한 요청을 3D 노드로 보냅니다.

애플리케이션 프로그램이 둘 이상의 3D 노드를 만든 경우 DirectSound는 생성할 첫 번째 3D 노드로만 스피커 구성 요청을 보냅니다.

DirectSound는 애플리케이션이 DirectSound 개체를 만들거나 IDirectSound::SetSpeakerConfig 메서드를 호출할 때마다 3D 및 DAC 노드에 스피커 구성 요청을 보냅니다. 오디오 디바이스는 일반적으로 활성 스트림을 관리하는 동안 스피커 구성을 변경할 수 없으며 DirectSound는 가능한 경우 이 제한을 피하려고 합니다. 예를 들어 DirectSound 개체를 만들 때 DirectSound는 필터를 인스턴스화한 후 필터에 핀을 인스턴스화하기 전에, 즉 스트림을 만들기 전에 스피커 구성 요청을 보냅니다.

SetSpeakerConfig를 호출하는 경우 이 제한을 피하기가 더 어렵습니다. 애플리케이션이 SetSpeakerConfig를 호출하면 어댑터 드라이버가 일반적으로 DirectSound의 스피커 구성 요청에 실패합니다. DirectSound 개체가 이미 존재하기 때문입니다. 즉, 디바이스에 이미 관리할 활성 스트림이 있습니다.

이 경우 어댑터 드라이버에는 실패한 스피커 구성 요청을 처리하기 위한 두 가지 옵션이 있습니다.

  • 드라이버는 요청된 구성을 기억하고 모든 스트림이 제거되는 즉시 적용할 수 있습니다.

  • 드라이버는 요청을 무시하고 DirectSound를 사용하여 다음에 DirectSound 개체를 만들 때 다른 스피커 구성 요청을 보낼 수 있습니다.

첫 번째 옵션은 사용자가 스피커 구성 대화 상자를 통해 새 설정을 선택하는 경우 변경 내용이 DirectSound 애플리케이션뿐만 아니라 모든 애플리케이션에서 즉시 적용되기 때문에 더 나은 사용자 환경을 제공합니다. 물론 새 설정을 선택할 때 오디오 애플리케이션이 실행 중인 경우 모든 오디오 애플리케이션이 종료될 때까지 변경 내용이 지연됩니다. 그러나 두 번째 옵션을 사용하면 DirectSound 애플리케이션이 실행될 때까지 변경 내용이 적용되지 않습니다. 예를 들어 Windows 멀티미디어 waveOut API를 사용하는 애플리케이션이 제어판 설정을 변경한 후 실행되는 첫 번째 애플리케이션인 경우 사용자는 새 설정이 명백한 효과가 없는 이유를 궁금해할 수 있습니다.

3D 또는 DAC 노드로 전송된 스피커 구성 요청에 대한 응답으로 일반적인 어댑터 드라이버는 현재 오디오 애플리케이션에서 핀을 인스턴스화하지 않은 경우에만 오디오 하드웨어의 스피커 구성을 업데이트합니다. 예를 들어 waveOut 애플리케이션에 두 번째 애플리케이션이 DirectSoundCreate를 호출할 때 하나 이상의 핀이 열려 있는 경우 드라이버는 나중에 오디오 장치의 스피커 구성에 대한 보류 중인 변경 내용을 연기해야 할 수 있습니다.

드라이버가 디바이스의 스피커 구성을 변경하라는 요청을 이행할 수 없는 경우 단순히 요청에 실패해야 합니다. DirectSound 개체를 만들거나 SetSpeakerConfig 를 호출하는 동안 스피커 구성 요청이 실패해도 DirectSound 개체 만들기 또는 SetSpeakerConfig 호출이 실패하지 않습니다.

부팅 시 오디오 어댑터 드라이버는 하드웨어의 스피커 구성을 기본 설정(일반적으로 스테레오)으로 초기화합니다. 모든 애플리케이션이 DirectSound 개체를 만드는 즉시 DirectSound는 레지스트리에 저장된 설정을 하드웨어에 적용합니다. 애플리케이션 프로그램은 SetSpeakerConfig 를 호출하여 레지스트리의 스피커 구성 설정을 변경하기 전에 DirectSound 디바이스를 만들어야 하지만, 이 레지스트리 설정은 일반적으로 DirectSound 디바이스가 해제되고 두 번째 DirectSound 디바이스를 만든 후에만 하드웨어에서 적용됩니다.

오디오 디바이스를 설치한 직후 또는 스피커 구성 오류가 발생하는 즉시 DirectSound 스피커 구성은 기본적으로 스테레오로 설정됩니다.