Platform SDK: DirectX |
チャンネル メッセージは、音楽の 1 つのパートに対応する特定のチャンネルをアドレス指定される。
チャンネル メッセージは、モード メッセージか発音メッセージのどちらかである。
モード メッセージは、チャンネルがそれ以降の発音メッセージを取り扱う方法を決定する。たとえば、モード メッセージは、何か通知があるまではすべてのノートオン メッセージを無視して、無音状態を保つようチャンネルに指示することがある。
ほとんどのチャンネル メッセージは発音メッセージである。これらはチャンネルに音符の演奏の開始または停止、何らかの方法での音符の変更を指示し、チャンネルにほかの MIDI パッチ番号を割り当てることにより音色を変更する。
発音メッセージは、次のいずれかのタイプを取る。
発音メッセージ | 目的 |
---|---|
ノートオン | 音符を演奏する。 |
ノートオフ | 音符の演奏を停止する。 |
コントロール チェンジ | ペダル、レバー、その他のデバイスからのデータを使って楽音を変更する。ボリュームやバンク セレクトなど、さまざまなコントロールにも使われる。 |
プログラム (パッチ) チェンジ | パッチ番号を割り当てることにより、チャンネルの音色を選択する。 |
アフタータッチ | キーのアフタータッチに従って、個別の音符またはチャンネルのすべての音符を変更する。 |
ピッチ ベンド チェンジ | チャンネルで演奏されるすべての音符のピッチを変更する。 |
これらの説明は、スタンダード MIDI メッセージに適用され、パフォーマンス メッセージ形式に変換された MIDI データには適用されない。たとえば、音符の演奏を開始および停止するための 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 では、DirectMusicPerformance.SendPatchPMSG メソッドを使う方法を除いて、アプリケーションでパッチ番号を変更することは認められていない。
MIDI の定める 7 ビット パッチ番号とは異なり、DirectMusic の音色パッチ番号は 32 ビット値であり、その中に MIDI パッチ番号、バンク セレクトの MSB と LSB、およびドラム キット用の 1 ビット フラグが含まれている。IDirectMusicCollection::EnumInstrument、IDirectMusicCollection::GetInstrument、およびIDirectMusicInstrument::GetPatch の各メソッドはこの拡張パッチ番号を返す。IDirectMusicInstrument::SetPatch メソッドを使うと、音色を変更できる。
DirectMusic パッチの値は、次のように構成されている。
ビット | 目的 |
---|---|
0-7 | MIDI パッチ番号 (ビット 7 は常に 0) |
8-15 | LSB バンク セレクト (ビット 15 は常に 0) |
16-23 | MSB バンク セレクト (ビット 23 は常に 0) |
24-30 | 未使用 |
31 | ドラム キット用のフラグ |