次の方法で共有


シンセサイザーと Wave シンク

レンダリング エンジンには 2 つの部分があります。

  • シンセサイザー。MIDI メッセージを受け取り、それを Wave オーディオ サンプルに変換します。

  • 波シンク。波サンプルの宛先を提供し、出力の同期に役立ちます。

デフォルトでは、DirectMusic アプリケーションは Microsoft ソフトウェア シンセサイザー (dmsynth.dll) をシンセサイザーとして使用し、DirectSound を波形出力デバイスとして使用します。

DirectX 6.1 および DirectX 7 では、DirectMusic アプリケーションはこれらのデフォルトをオーバーライドできます。 たとえば、アプリケーションは Microsoft ソフトウェア シンセサイザーを使用し、出力を .wav ファイルに送信する場合や、デフォルトのウェーブ シンクで動作するカスタム シンセサイザーを実装する場合があります。 デフォルトのウェーブ シンクはほとんどのシンセサイザーで適切に機能するはずであるため、後者のシナリオの可能性が高くなります。

DirectX 8 以降では、DirectMusic は常に内蔵のウェーブ シンクを使用してユーザー モード シンセからデータを出力しますが、アプリケーションはデフォルトのソフトウェア シンセをオーバーライドできます。 つまり、DirectMusic アプリケーションはカスタム ユーザー モード シンセサイザーを実装できますが、シンセサイザーは DirectMusic の組み込みウェーブ シンクを使用する必要があります。

以下の図は、DirectMusic アーキテクチャにユーザー モード シンセサイザーとウェーブ シンクがどのように組み込まれているかを示しています。 次の図で「DirectMusic Port」というラベルが付いているブロックを、PortCls システム ドライバー モジュール portcls.sys のカーネル モード DMus ポート ドライバーと混同しないように注意してください。 DirectMusic ポートは、IDirectMusicPort インターフェイス (DirectMusic API の一部) を備えたユーザー モード オブジェクトであり、dmusic.dll に実装されています。 DirectMusic ポートの詳細情報は、Microsoft Windows SDK のドキュメントを参照してください。

Diagram illustrating DirectMusic architecture for user-mode synthesizers and wave sinks.

上の図では、アプリケーションはユーザーモードの DirectMusic ポートにデータを送信し、このポートがデータ (MIDI または DLS) をソフトウェア シンセ (デフォルトでは dmsynth.dll) に渡して、ノートを Wave データにレンダリングできるようにします。 ウェーブ シンクはタイミングを管理し、データのバーストを受信する準備ができたときに、シンセサイザーにバッファを渡して埋めるようにします。 シンセサイザーは、DirectSound に渡せるように、バッファ (デフォルトでは IDirectSoundBuffer オブジェクト) にデータを埋めます。 DirectSound は、KMixer システム ドライバーを通じてデータを再生するか、オーディオ デバイス上の DirectSound ハードウェア アクセラレーション レンダリング ピン (利用可能な場合) を通じてデータを再生します (DirectSound ハードウェア アクセラレーションの概要を参照)。

これと同じ基本アーキテクチャは、ウェーブ シンクがデータ バッファをハードウェアまたは KMixer システム ドライバーに直接渡す点を除いて、カーネル モード実装にも適用されます。 DMus ポート ドライバーは、カーネル モード ソフトウェア シンセサイザーのウェーブ シンクを実装します。 詳細情報は、カーネル モード ソフトウェア シンセサイザーの波シンクを参照してください。

これらの手順が完了すると、ユーザー モードの DirectMusic ポートが開き、使用できるようにアクティブ化されます。 これだけのドライバー コードが動作するとすぐに、機能の実装を開始できます。 ユーザーモードの Microsoft ソフトウェア シンセサイザーのソース コードをテンプレートとして使用し、新しい機能の追加を開始します。

ユーザー モード ソフトウェア シンセサイザーは、IDirectMusicSynth インターフェイスを備えたオブジェクトとして実装できます。 ユーザー モード ウェーブ シンクは、IDirectMusicSynthSink インターフェイスを備えたオブジェクトとして実装できます。 詳細情報は、IDirectMusicSynth と IDirectMusicSynthSink を参照してください。