このサイト( Jeff Glatt-MIDI情報)には、MIDIに関する多くの情報があります。
MIDIデータストリームプロトコル(ワイヤー)はバイトのストリームです(値00000000-1111111バイナリ= 0-25510進数= 0-FF 16進数)。
値00-7F(0-127)はデータバイト、使用例ノート番号や他の多くのパラメータの場合。
値80-FF(128-255)はステータス/コマンドバイトであり、MIDIコマンドに使用されます。
- 8x:ノートオン
- 9x:ノートオフ
- Ax:キープレッシャー/アフタータッチ(ポリフォニック-キーごと)
- Bx:コントロールチェンジ(例:モジュレーションホイール)
- Cx:プログラムの変更(楽器/サウンド/ボイスを選択するため)
- Dx:キープレッシャー/アフタータッチ(チャンネルごと)
- 例:ピッチベンド
ここで、xはチャンネル番号です。
80〜EFの範囲のステータスバイトは、チャンネル番号をエンコードします。下位4ビット(0000-1111 = 0-15 = 0-F)。たとえば、82はチャネル2のノートオンコマンドです。これらのステータスバイトは、MIDIデバイスの特定の1つのチャネルに送信されるため、チャネルメッセージです。
ステータスバイトF0 -FFはシステムメッセージです。MIDIデバイスのすべてのチャンネルに送信されるためです。
従来の(非USB)ハードウェアを使用したMIDI接続では、丸い5ピンDINコネクタを使用します。ケーブル。デバイスA(キーボードなど)からデバイスB(音源など)にMIDIデータを送信するには、デバイスAのMIDI-OUTポートをデバイスBのMIDI-INポートに接続します。
次に、キーボードのMIDI送信チャンネルをチャンネル0に設定し、キーを押します。キーボードは、ケーブルを介して値80(8 = NoteOn、0 =チャネル0)のバイトをトーンジェネレーターに送信し、その後にノート番号とベロシティの2つのデータバイトが続きます。トーンジェネレータはこれらの3バイトを受信します。最初のバイトでチャンネル0が指定されているため、音源はチャンネル0で現在選択されているサウンドを使用してノートを再生します。 2番目のバイトはノート番号(0-127)を指定し、3番目のバイトはベロシティを指定します。
キーボードを右手と左手用に2つの独立した領域に分割できる場合は、送信チャネルを各地域、例えば右側の領域のチャネル0と左側の領域のチャネル1。次に、右側の領域で再生されたキーはチャネル0(ステータスバイト80)に送信され、左側の領域で再生されたキーはチャネル1(ステータスバイト81)に送信されます。トーンジェネレータは、これらのノートを2つのチャネルで独立して受信し、チャネル0で右側のノートを再生できます。ピアノの声、およびチャンネル1の左側の音符。弦の声。
古い電子オルガンでは通常、上下の手動とペダルが徒歩で演奏され、それぞれが独自のチャンネルで送信されていました(例:0 =上、1 =下、2 =ペダル)。したがって、接続されたトーンジェネレータは、3つのチャネルで3つの異なる音声を再生できます。マニュアルを分割できる場合は、さらに多くのチャンネルを制御できます(たとえば、0 =右上、1 =左上、2 =右下、3 =左下、4 =ペダル)。古い教会や劇場のオルガンでさえ、さらに多くのマニュアルがありました。
ただし、チャネルのエンコードに使用できるビットは4ビットしかないため、 1つのポートで最大16チャネルを送信できます。より多くのチャネルが必要な場合は、より多くのポートが必要です。チャネル17〜32を送信するための2番目のMIDI-OUTポート。
最近、MIDIデバイスは従来のポートの代わりにUSBケーブルを使用することがよくあります。これにより、複数の仮想ポートが可能になります。たとえば、Yamaha PSR-S950キーボードをUSB経由でPCに接続すると、PCにはキーボードに接続された2つの仮想MIDI-OUTポートAとBが表示され、それぞれに16チャンネルがあります。シーケンサープログラムを使用すると、32の独立したチャンネル(ポートA経由で0〜15、ポートB経由で16〜31)でデータを送信して、32の異なる楽器を同時に演奏できます。
シーケンサープログラムはトラック内のMIDIデータ。各トラックには、最大16チャンネルのMIDIデータを含めることができます。 32の楽器で曲を再生するには、少なくとも2つのトラックが必要です(トラック1のポートAのチャンネル0〜15、トラック2のポートBのチャンネル16〜32 ...)。
A SMF0ファイル(スタンダードMIDIファイル-フォーマット0)にはトラックが1つしかありません。すべてのチャネルメッセージとチャネルに依存しないシステムメッセージは、1つのトラックに保存されます。すべてが1つの大きなデータの山であるため、トラックの編集が難しくなります。
SMF1ファイル(スタンダードMIDIファイル-フォーマット1)には、複数のトラックを含めることができます。例:
- トラック1には、チャンネル0でピアノの声で右手で演奏された音が含まれます。
- トラック2には、同じピアノで左手で演奏された音が含まれます。チャネル0の音声も。
- トラック3にはチャンネル1のベースボイスが含まれています。
- トラック4にはチャンネル2のクラリネットボイスが含まれています。
- トラック5にはチャンネル9のドラムが含まれています。
..など..
チャンネルをトラックにマップすることができます。
たとえば、トラック3と4を1つのトラックにマージできます。低音はチャンネル1を使用し、クラリネットはチャンネル2を使用するため、両方の声を互いに独立して再生できます。ベースとクラリネットを1つのトラックにマージすることは、音楽的にはそれほど意味がありませんが、技術的には可能です。
または、トラック1と2をマージすることもできます。どちらも、同じチャネルと同じ音声を使用しているためです。しかし、右手と左手に2つの異なるピアノの声を使用したい場合があります。トラック1をポートAに、トラック2をポートBに割り当てると、2つの異なるボイスを選択できます。
または、トラック2をチャンネル0からチャンネル3に変更します。両方のトラックが同じポートに割り当てられている場合でも、2つの異なるボイスを使用できます。
制限は、トラックあたり最大16チャンネルです。 。
2つのトラックが同じポートで同じチャンネルを使用している場合、シーケンサーで個別に編集できますが、シーケンサーがデータを送信するときに互いに独立して再生することはできません。トラックでは、ポートAに割り当てられたすべてのトラックが1つのデータストリームにマージされます。ポートBに割り当てられたすべてのトラックが別のデータストリームにマージされます。
上記の例では、トラック1の小節4でピアノから弦にプログラムを変更すると、トラック2の弦も選択されます。ポートAでチャネル0を使用します。
したがって、正しいマッピングは、接続されているトーンジェネレータのアーキテクチャによって異なります。