Microsoft DirectX 8.0 (C++) |
ここでは、オーディオパスを使用しないアプリケーションによる DirectMusic ポートへのアクセスについて説明する。推奨されているように、アプリケーションが IDirectMusicPerformance8::InitAudio を使ってパフォーマンスを初期化する場合、オーディオパスによって、ポートおよびパフォーマンス チャンネルのポートへのマッピングが管理される。
ポートは、データの送信または受信を行うデバイスである。ハードウェア デバイス、ソフトウェア シンセサイザ、ソフトウェア フィルタのいずれかを表す。
DirectMusic アプリケーション内の各ポートは、IDirectMusicPort8 インターフェイスによって表される。このインターフェイスのメソッドを使って、デバイスに関する情報の取得、デバイス内のメモリの管理、DLS 音色のダウンロードとアンロード、流入データの読み込み、再生バッファの挿入を行う。
どのパフォーマンスも少なくとも 1 つのポートを備えていなければならない。デフォルト ポート以外のポートを使う場合や、デフォルト ポートの特別なパラメータを設定する場合は、まず DMUS_PORTPARAMS8 構造体を設定する。すべてのメンバに値を入力する必要はないが、dwValidParams メンバに適切なフラグを書き込むことにより、どのメンバが有効な情報を持っているのか DirectMusic に知らせなければならない。次に、この構造体を IDirectMusic8::CreatePort メソッドに渡す。
次の C++ サンプル コードでは、デフォルトの出力ポート用のオブジェクトを作成し、ポートに 5 つのチャンネル グループを設定する方法を示している。pDirectMusic は有効な IDirectMusic8 インターフェイス ポインタであると仮定する。
IDirectMusicPort8* pPort; DMUS_PORTPARAMS dmos; ZeroMemory( &dmos, sizeof(DMUS_PORTPARAMS) ); dmos.dwSize = sizeof(DMUS_PORTPARAMS); dmos.dwValidParams = DMUS_PORTPARAMS_CHANNELGROUPS; dmos.dwChannelGroups = 5; HRESULT hr = pDirectMusic->CreatePort( GUID_NULL, &dmos, &pPort, NULL )
設定したポートは IDirectMusic8::Activate または IDirectMusicPort8::Activate を呼び出してアクティブにし、IDirectMusicPerformance8::AddPort メソッドを使ってパフォーマンスに付加する。
ポートをパフォーマンスに付加するときに、IDirectMusicPerformance8::AssignPChannelBlock メソッドを呼び出して、P チャンネルのブロックを割り当てる。IDirectMusicPerformance8::AddPort に NULL を渡してデフォルト ポートを追加するときだけ、この処理は必要ない。この場合、P チャンネル 0-15 は、ポートの最初のグループの MIDI チャンネルに割り当てられる。
IDirectMusicPerformance8::AssignPChannelBlock および IDirectMusicPerformance8::AssignPChannel の各メソッドを使うと、これらのP チャンネルを異なった方法で割り当て、ほかの P チャンネルを追加し、P チャンネルをほかのポートに割り当てることができる。
ポートの詳細については、次のトピックを参照すること。