DirectSound 클라이언트에 대한 세부 정보

Microsoft Windows 2000 및 Windows 98에서 DirectSound는 DirectSound 버전에 관계없이 비 PCM 형식을 지원하지 않습니다. 그러나 DirectSound 8은 Windows 2000 SP2 및 Windows 98 SE + 핫픽스 모두에서 비 PCM 형식을 지원합니다. 또한 Windows XP 이상과 함께 제공되는 DirectSound 버전 및 Windows Me는 PCM이 아닌 형식을 지원합니다.)

WDM 드라이버가 특정 웨이브 형식을 지원하는지 여부를 확인하기 위해 클라이언트는 드라이버에서 해당 형식의 DSBCAPS_LOCHARDWARE 버퍼를 만들고 시도가 성공했는지 확인할 수 있습니다. DirectSound API는 지원되는 비 PCM 데이터 형식을 검색하는 다른 방법을 제공하지 않습니다.

DirectSound를 사용하면 보조 DSBCAPS_LOCHARDWARE 버퍼가 선택한 드라이버에서 지원하는 유효한 WAVEFORMATEX 또는 WAVEFORMATEXTENSIBLE 형식을 가질 수 있습니다. 드라이버의 지원되는 형식 목록에서 형식을 검색할 때 DirectSound는 KSDATAFORMAT_SPECIFIER_DSOUND 지정자가 포함된 형식만 확인합니다.

먼저 형식을 설명하는 WAVEFORMATEX 또는 WAVEFORMATEXTENSIBLE 구조를 만들어 비 PCM 형식을 사용하도록 DirectSound 애플리케이션을 확장할 수 있습니다. 다음으로, CreateSoundBuffer 메서드에 전달되는 DSBUFFERDESC 구조체의 lpwfxFormat 멤버에 구조체에 대한 포인터를 로드합니다. PCM이 아닌 형식을 사용하려면 기존 DirectSound 코드를 변경할 필요가 없습니다. 드라이버가 일반적으로 PCM 데이터에 대해 지원하는 컨트롤은 일부 비 PCM 형식에 대해 지원되지 않을 수 있습니다. 예를 들어 AC-3 또는 WMA Pro 형식으로 인코딩된 데이터의 디지털 출력을 지원하는 카드 해당 데이터에 대한 DSBCAPS_CTRLPAN 또는 DSBCAPS_CTRLVOLUME 컨트롤을 지원하지 않을 수 있습니다. 따라서 해당 플래그를 사용하여 DirectSound 버퍼를 만들려고 시도하면 실패할 수 있습니다.

VxD 드라이버 또는 레거시 웨이브를 통한 DirectSound 재생Out 드라이버는 여전히 PCM으로 제한됩니다. PCM이 아닌 형식은 지원되지 않습니다.