Microsoft DirectX 8.0 (C++) |
チャンネル メッセージは、音楽の 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) と呼び、これらを組み合わせてバンクを識別する。バンクを選択した後、それ以降のプログラム チェンジではそのバンクから音色が選択される。
MIDI の定める 7 ビット パッチ番号とは異なり、DirectMusic の音色パッチ番号は 32 ビット値であり、その中に MIDI パッチ番号、バンク セレクトの MSB と LSB、およびドラム キット用の 1 ビット フラグが含まれている。IDirectMusicCollection8::EnumInstrument、IDirectMusicCollection8::GetInstrument、および IDirectMusicInstrument8::GetPatch の各メソッドは、この拡張番号を返す。IDirectMusicInstrument8::SetPatch メソッドを使うと、音色を変更できる。
DirectMusic でのパッチの値をまとめたものを以下に示す。
ビット | 目的 |
---|---|
0-7 | MIDI パッチ番号 (ビット 7 は常に 0) |
8-15 | LSB バンク セレクト (ビット 15 は常に 0) |
16-23 | MSB バンク セレクト (ビット 23 は常に 0) |
24-30 | 未使用 |
31 | ドラム キット用のフラグ |