DirectSound クライアントの詳細
Microsoft Windows 2000 および Windows 98 では、DirectSound のバージョンに関係なく、DirectSound は非 PCM 形式をサポートしません。 (ただし、DirectSound 8 は、Windows 2000 SP2 と Windows 98 SE + hotfix の両方で非 PCM フォーマットをサポートします。また、Windows XP 以降および Windows Me に同梱されている DirectSound のバージョンは、非 PCM 形式をサポートしています。)
WDM ドライバーが特定の Wave 形式をサポートしているかどうかを判断するには、クライアントはドライバー上でその形式で DSBCAPS_LOCHARDWARE バッファーの作成を試み、それが成功するかどうかを確認できます。 DirectSound API には、どの非 PCM データ形式がサポートされているかを検出する他の方法はありません。
DirectSound では、セカンダリ DSBCAPS_LOCHARDWARE バッファーに、選択したドライバーがサポートする有効な WAVEFORMATEX または WAVEFORMATEXTENSIBLE 形式を含めることができます。 ドライバーのサポートされている形式のリストで形式を検索する場合、DirectSound は KSDATAFORMAT_SPECIFIER_DSOUND 指定子を含む形式のみをチェックします。
最初に形式を記述する WAVEFORMATEX または WAVEFORMATEXTENSIBLE 構造体を作成することで、DirectSound アプリケーションを拡張して非 PCM 形式を使用できます。 次に、CreateSoundBuffer 方式に渡される DSBUFFERDESC 構造体の lpwfxFormat メンバーに構造体へのポインターを読み込みます。 非 PCM 形式を使用するために、既存の DirectSound コードを他に変更する必要はありません。 ドライバーが通常 PCM データに対してサポートするコントロールは、一部の非 PCM 形式ではサポートされない可能性があることに注意してください。 たとえば、AC-3 または WMA Pro 形式でエンコードされたデータのデジタル出力をサポートするカードは、そのデータに対する DSBCAPS_CTRLPAN または DSBCAPS_CTRLVOLUME コントロールをサポートする可能性は低いです。 したがって、これらのフラグを使用して DirectSound バッファーを作成しようとすると失敗する可能性があります。
VxD ドライバーまたは従来の waveOut ドライバーを介した DirectSound の再生は依然として PCM に限定されています。非 PCM 形式はサポートされていません。