Microsoft DirectX 8.0 (Visual Basic) |
チャンネル メッセージは、音楽の 1 つのパートに対応する特定の MIDI チャンネルにアドレス指定される。
チャンネル メッセージは、モード メッセージかボイス メッセージのどちらかである。
モード メッセージは、チャンネルがそれ以降のボイス メッセージを取り扱う方法を決定する。たとえば、モード メッセージは、何か通知があるまではすべてのノートオン メッセージを無視して、無音状態を保つようチャンネルに指示することがある。
ほとんどのチャンネル メッセージはボイス メッセージである。これらはチャンネルにノートの演奏の開始または停止、何らかの方法でのノートの変更を指示し、チャンネルにほかの MIDI パッチ番号を割り当てることによりティンバーを変更する。
次の表は、ボイス メッセージの種類を示している。
ボイス メッセージ | 目的 |
---|---|
ノートオン | ノートを演奏する。 |
ノートオフ | ノートの演奏を停止する。 |
コントロール チェンジ | ペダル、レバー、その他のデバイスからのデータを使って楽音を変更する。ボリュームやバンク セレクトなど、さまざまなコントロールにも使われる。 |
プログラム (パッチ) チェンジ | パッチ番号を割り当てることにより、チャンネルの音色を選択する。 |
アフタータッチ | キーのアフタータッチに従って、個別のノートまたはチャンネルのすべてのノートを変更する。 |
ピッチ ベンド チェンジ | チャンネルで演奏されるすべてのノートのピッチを変更する。 |
これらの説明は、スタンダード MIDI メッセージに適用され、パフォーマンス メッセージ形式に変換された MIDI データには適用されないことに注意する。たとえば、ノートの演奏を開始および停止するための 2 つの MIDI メッセージは、DirectMusic によって、ノートの継続時間を指定する 1 つのパフォーマンス メッセージに結合される。DirectMusic メッセージには、タイミングやルーティングに関する多くの追加情報も含まていれる。
ノートオン メッセージのデータ バイトは、ピッチとベロシティを表す。ほとんどの場合、ピッチの値 (キーナンバー) 0 は 2 オクターブ下の C 音 (MIDI では C0 と表記) であり、12 は 1 オクターブ下の C (MIDI の C1)、60 はピアノでいう中央の C (MIDI の C5) を意味する。ドラム キットの場合、データ バイトは特定のドラム サウンドを意味する。たとえば、GM (General MIDI) のパーカッション キー マップでは、値 60 はハイ ボンゴのサウンドを意味する。チャンネル 10 はドラム キットに予約されているので、シンセサイザはこのチャンネルでのノートオン メッセージをほかのチャンネルとは異なった方法で扱うことを知っている。
DirectMusic が MIDI ノートを変換する方法については、「ミュージック値と MIDI ノート」を参照すること。
プログラム チェンジとパッチ番号は、MIDI 再生と DirectMusic において重要な概念である。プログラム チェンジは特定の音色 (プログラムまたはティンバーとも呼ぶ) をチャンネルに割り当てるので、チャンネルに送信されたノートは適切なサウンドで演奏される。音色はパッチ番号によって識別される。GM 音色セットをロードする場合、パッチ番号 1 を指定するプログラム チェンジでは、チャンネルは必ずアコースティック グランド ピアノのノートで演奏される。スピーカで生成される実際のサウンドは、音色の合成方法に依存する。
プログラム チェンジの際に 1 バイトのデータ バイトを使ってパッチ番号を選択しているが、MIDI メッセージの各データ バイトで有効なのは 7 ビットだけなので、プログラム チェンジでは最大 128 の音色を選択することができる。より多くの選択肢を提供するために、MIDI 規格では最大 16,384 の音色バンクの使用が認められ、各バンクに最大 128 の音色を含めることができる。
ほかのバンクから音色を選択するには、MIDI シーケンサは最初にバンク セレクトと呼ばれるコントロール チェンジ メッセージを送信しなければならない。このメッセージのデータ バイトのうち 2 バイトを、最上位バイト (MSB) および最下位バイト (LSB) と呼び、これらを組み合わせてバンクを識別する。バンクを選択した後、それ以降のプログラム チェンジではそのバンクから音色が選択される。
ここでは、C++ でのアプリケーション開発について説明する。DirectX for Visual Basic では、DirectMusicPerformance8.SendPatchPMSG メソッドを使う方法を除いて、アプリケーションでパッチ番号を変更することはできない。