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