Microsoft DirectX 8.0 (C++)

MIDI チャンネル メッセージ

チャンネル メッセージは、音楽の 1 つのパートに対応する特定の MIDI チャンネルにアドレス指定される。

チャンネル メッセージは、モード メッセージボイス メッセージのどちらかである。

モード メッセージは、チャンネルがそれ以降のボイス メッセージを取り扱う方法を決定する。たとえば、モード メッセージは、何か通知があるまではすべてのノートオン メッセージを無視して、無音状態を保つようチャンネルに指示することがある。

ほとんどのチャンネル メッセージはボイス メッセージである。これらはチャンネルにノートの演奏の開始または停止、何らかの方法でのノートの変更を指示し、チャンネルにほかの MIDI パッチ番号を割り当てることによりティンバーを変更する。

次の表は、ボイス メッセージの種類を示している。

ボイス メッセージ 目的
ノートオン ノートを演奏する。
ノートオフ ノートの演奏を停止する。
コントロール チェンジ ペダル、レバー、その他のデバイスからのデータを使って楽音を変更する。ボリュームやバンク セレクトなど、さまざまなコントロールにも使われる。
プログラム (パッチ) チェンジ パッチ番号を割り当てることにより、チャンネルの音色を選択する。
アフタータッチ キーのアフタータッチに従って、個別のノートまたはチャンネルのすべてのノートを変更する。
ピッチ ベンド チェンジ チャンネルで演奏されるすべてのノートのピッチを変更する。

これらの説明は、スタンダード MIDI メッセージに適用され、パフォーマンス メッセージ形式に変換された MIDI データには適用されないことに注意する。たとえば、ノートの演奏を開始および停止するための 2 つの MIDI メッセージは、DirectMusic によって、ノートの継続時間を指定する 1 つのパフォーマンス メッセージに結合される。DirectMusic メッセージには、タイミングやルーティングに関する多くの追加情報も含まていれる。

MIDI ノート

ノートオン メッセージのデータ バイトは、ピッチとベロシティを表す。ほとんどの場合、ピッチの値 (キーナンバー) 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) と呼び、これらを組み合わせてバンクを識別する。バンクを選択した後、それ以降のプログラム チェンジではそのバンクから音色が選択される。

DirectMusic パッチ番号

MIDI の定める 7 ビット パッチ番号とは異なり、DirectMusic の音色パッチ番号は 32 ビット値であり、その中に MIDI パッチ番号、バンク セレクトの MSB と LSB、およびドラム キット用の 1 ビット フラグが含まれている。IDirectMusicCollection8::EnumInstrumentIDirectMusicCollection8::GetInstrument、および IDirectMusicInstrument8::GetPatch の各メソッドは、この拡張番号を返す。IDirectMusicInstrument8::SetPatch メソッドを使うと、音色を変更できる。

DirectMusic でのパッチの値をまとめたものを以下に示す。

ビット 目的
0-7 MIDI パッチ番号 (ビット 7 は常に 0)
8-15 LSB バンク セレクト (ビット 15 は常に 0)
16-23 MSB バンク セレクト (ビット 23 は常に 0)
24-30 未使用
31 ドラム キット用のフラグ