Microsoft DirectX 8.0 (C++) |
一般的に、DirectX Audio アプリケーションは、次に示すような 1 つまたは複数のソースからミュージック データを取得する。
注 これらのデータ ソースは、個別のファイルではなく、リソースとしてアプリケーションに格納することができる。
これらのソースからのデータは、セグメント オブジェクトにカプセル化される。各セグメント オブジェクトは、1 つのソースからのデータを表す。パフォーマンスのある時点では、1 つのプライマリ セグメントと任意の数のセカンダリ セグメントを再生できる。ソース ファイルは混在させることができる。たとえば、ウェーブ ファイルに基づくセカンダリ セグメントを、オーサリングされたセグメント ファイルと共に演奏することができる。
1 つのセグメントには 1 つ以上のトラックが含まれ、それぞれがノートやテンポの変更など、特定の種類のタイム データを含んでいる。ほとんどのトラックは、セグメントがパフォーマンスによって再生されるときに、タイムスタンプ メッセージを生成する。一部のトラックは、パフォーマンスから問い合わせがあったときに、データだけを提供する。
まず、パフォーマンスは、アプリケーションが定義したツールにメッセージをディスパッチする。それらのツールはセグメント ツールグラフにグループ化される。セグメント ツールグラフは、特定のセグメントからのメッセージ、そのオーディオパスで再生されるすべてのセグメントからのメッセージのオーディオパス ツールグラフ、すべてのセグメントからのメッセージを受信するパフォーマンス ツールグラフのみを処理する。ツールでメッセージを変更して渡したり、削除したり、新しいメッセージを送信することができる。
最終的に、メッセージは出力ツールに到達する。出力ツールで、データは MIDI フォーマットに変換されてからシンセサイザに渡される。チャンネル固有の MIDI メッセージは、シンセサイザの適切なチャンネル グループに転送される。シンセサイザはサウンド ウェーブを作成し、シンクと呼ばれるデバイスにストリーミングする。シンクは、バスを介した DirectSound バッファへのデータの配信を管理する。
バッファには、以下の 3 つの種類がある。
注 アプリケーションでは、DirectMusic のパフォーマンスの一部であるセカンダリ バッファを介してデータをストリーミングする必要はない。アプリケーションでは、エフェクトを追加したり、プロパティを変更するために、バッファ オブジェクトを取得できるが、DirectSound API を使用してウェーブ サウンドを再生する場合のように、バッファをロックして書き込むことはできない。
次の図は、ファイルからスピーカへのデータ フローの概略図である。複数のセグメントを同時に再生できるが、ここでは 1 つのセグメントだけが示されている。セグメントは、4 つのソースのいずれかのみからデータを取り出す。使用できるソースは、ウェーブ ファイル、MIDI ファイル、DirectMusic Producer で作成したセグメント ファイル、およびコンポーザ オブジェクトによって結合されたコンポーネント ファイルのいずれかである。
注 いずれの場合も、ファイルではなく、リソースのデータを使用できる。
パフォーマンスにおけるメッセージの流れを詳細に確認するには、「DirectMusic メッセージの使い方」を参照すること。
この図に示されているプロセスの実装方法については、「オーディオ データのロード」および「サウンドの再生」を参照すること。