Platform SDK: DirectX

MIDI チャンネル メッセージ

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

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

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

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

発音メッセージは、次のいずれかのタイプを取る。

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

これらの説明は、スタンダード MIDI メッセージに適用され、パフォーマンス メッセージ形式に変換された MIDI データには適用されない。たとえば、音符の演奏を開始および停止するための 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 パッチ番号

[Visual Basic]

ここでは、C++ で記述されたアプリケーションに関連のある内容だけを説明する。DirectX for Visual Basic では、DirectMusicPerformance.SendPatchPMSG メソッドを使う方法を除いて、アプリケーションでパッチ番号を変更することは認められていない。

[C++]

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

DirectMusic パッチの値は、次のように構成されている。

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