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