DirectSound ドライバー モデル
VXD ドライバー モデルでは、すべての DirectSound ミキシングが Dsound.vxd、すなわち仮想デバイス ドライバーで実行されます。Dsound.vxd は、サウンド カードがホスト CPU からデータを取得するために使用する実際の DMA バッファーへの緊密なアクセスも提供します。これは DirectSound プライマリ バッファーと同じです。DirectSound アプリケーションでは、サンプリング レートやビット深度など、プライマリ バッファーの特定のプロパティを設定できます。そのため、ハードウェア自体のプロパティも変化します。
Windows Driver Model (WDM) では、DirectSound は、ハードウェアで高速化されたバッファーの場合を除いて、サウンド ハードウェアには直接アクセスできません。代わりに、DirectSound はカーネル ミキサーにデータを送信します。カーネル ミキサーの役割は、さまざまなオーディオ ストリームのフォーマットを共通のフォーマットに変換し、それらをミキシングして、結果をハードウェアに送信することです。ある意味で、Dsound.vxd と同じ機能を果たします。大きな違いの 1 つは、Dsound.vxd が DirectSound バッファー データのみをミキシングするのに対して、カーネル ミキサーは、Win32 waveOut 関数を使用するアプリケーションのデータも含め、すべての Windows オーディオ データをミキシングすることです。DirectSound と Wave フォーム オーディオ出力デバイスを同時に開くことができないという規則は、WDM ドライバーを使用するシステムには適用されません。
特に注目すべきことは、カーネール ミキサーとオーディオ ハードウェアの関係です。カーネル ミキサーは、システムにおいて、ハードウェアの DMA バッファーのフォーマットを指定できる唯一のソフトウェアです。カーネル ミキサーは、ミキシングを要求されたサウンドに基づいてフォーマットを選択します。出力フォーマットは、ミキシングを要求されたサウンドの最高品質のフォーマットか、またはハードウェアでサポートされている最高品質に最も近いフォーマットに設定されます。
これには非常に重要な意味があります。DirectSound はハードウェアの DMA バッファーのフォーマットを設定できません。アプリケーションにとって、これは、ハードウェアのフォーマットが、実際に再生されるデータに基づいて決定されることを意味します。44 kHz のファイルを再生した場合、Kmixer では 44 kHz までのすべてのデータがミキシングされ、ハードウェアは確実に 44 kHz で実行されます。
使用するドライバー モデルの選択は、アプリケーション開発者は行いません。この選択は、サウンド カードの種類、Windows のバージョン、およびインストールされているドライバーによって完全に決まります。そのため、アプリケーションをテストするときは、すべての可能性を網羅することが大変重要になります。DirectSound は、Dsound.vxd を使用する場合もあれば、カーネル ミキサーを使用する場合もあるので、開発者は、アプリケーションの動作とパフォーマンスがどちらの場合も満足できるものであることを確認する必要があります。