Microsoft DirectX 8.0 (C++)

DirectMusic ポートの使い方

ここでは、オーディオパスを使用しないアプリケーションによる 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 チャンネルをほかのポートに割り当てることができる。

ポートの詳細については、次のトピックを参照すること。