USB-MIDI (6)

MIDIStreaming インターフェース・サブクラスの例として、規格書の付録 B "Example: Simple MIDI Adapter (Informative)" のディスクリプタで示されている (外部) MIDI 入力 1 系統、(外部) MIDI 出力 1 系統の最も基本的な USB-MIDI 機能を実現するトポロジーの図を下に示します。
(2015/01/05 追記: 規格書の付録 B の内容に合わせ、MIDI Jack の ID 番号の振り方を変更しました)

破線で囲ってある下側の長方形の部分が「MIDI-USB 機能」を実現している実体で、上側の逆 U 字型に破線で囲ってある (仮想) USB-MIDI コンバータ部分で USB に対してのデータのやり取りを行うものとします。
この図は、「MIDI 信号」の流れについて表現したもので、たとえば内蔵シンセサイザのオーディオ出力を USB 側からコントロールする必要がある場合には、その部分は AudioControl インターフェース・サブクラスのエレメントとして、別に表記します。
この場合は「MIDI ジャック」間を MIDI データ・ストリームが流れるだけなので、コントロール可能な AudioContorl エレメントはありません。
MIDI データ・ストリームを流す「ターミナル」を抽象化したものが「MIDI ジャック」(MIDI Jack) で、埋め込み (Embedded) / 外部 (External) の別、入力 (IN) / 出力 (OUT) の別の計 4 種

  • 埋め込み MIDI IN ジャック (Embedded MIDI IN Jack)
  • 埋め込み MIDI OUT ジャック (Embedded MIDI OUT Jack)
  • 外部 MIDI IN ジャック (External MIDI IN Jack)
  • 外部 MIDI OUT ジャック (External MIDI OUT Jack)

MIDI ジャックが存在します。 各ジャックや「エレメント」には ID 番号を割り振っておき、接続先の指定に使用します。
「外部」(External) は、その名の通り、「リアル・ワールド」に対して開いている MIDI の口です。 上の図では実線の円で囲まれています。
「埋め込み」(Embedded) の方は、仮想 MIDI-USB コンバータと MIDI-USB 機能本体との「界面」のみに存在し、実際の世界に対しては開いていません。 上の図では破線の円で囲まれています。
USB のエンドポイントと接続してデータをやり取り可能なのは「埋め込み」(Embedded) MIDI ジャックだけです。
埋め込み/外部ともに MIDI IN ジャックには「出力ピン」が 1 本だけあり、入力側の接続先の指定はありません。
これは、外部 MIDI IN ジャックに「何」を接続するかは使用者の自由であり、USB-MIDIバイス側では特定できないという性質によります。
埋め込み MIDI IN ジャックは USB の出力エンドポイントとつながるわけですが、その接続先の指定は MIDI IN ジャック側ではなく、出力エンドポイントのクラス固有ディスクリプタの中のフィールドで行います。
埋め込み/外部ともに MIDI IN ジャックは「入力ピン」を 1 本以上 (複数) 持つことができ、出力側の接続先の指定はありません。
これも、外部 MIDI OUT ジャックに「何」を接続するかは使用者の自由であり、USB-MIDIバイス側では特定できないという性質によります。

埋め込み MIDI OUT ジャックは USB の入力エンドポイントとつながるわけですが、その接続先の指定は MIDI OUT ジャック側ではなく、入力エンドポイントのクラス固有ディスクリプタの中のフィールドで行います。
左の図のように、ひとつの「出力ピン」に複数の「入力ピン」を接続して「パラレル出力」にすることも可能です。
この方法で「MIDI THRU」の接続を表現できます。


また、左の図のように、出力 MIDI ジャックの複数の入力ピンに接続すると、各入力を「マージ」して出力することを意味します。
ただし、これは「トポロジー」を表しているだけなので、実際の「マージ」は USB-MIDI のプログラム上で処理する必要があります。
ひとつの USB エンドポイントを複数の埋め込み MIDI ジャックに「関連付ける」ことができ、後で説明する「MIDI パケット」のケーブル・ナンバー (CN: Cable Number) によって入出力先が割り振られます。
この「関連付け」はクラス固有エンドポイント・ディスクリプタの中で行い、関連付けリストの先頭の埋め込み MIDI ジャックに対してケーブル・ナンバー 0 (CN = 0) の MIDI パケットが送られ、リストの 2 番目の埋め込み MIDI ジャックに対しては CN = 1 の MIDI パケットが送られることになります。
これも、「トポロジー」を示すだけなので、実際の「割り振り」は USB-MIDI のプログラム上で実現する必要があります。
ホスト PC 上のアプリケーションからは、埋め込み MIDI ジャック 1 個に対応して「MIDI ポート」が 1 個見えます。
上の図の例では、エンドポイントは入出力どちらも 1 個の埋め込み MIDI ジャックと関連付けられているので、ホスト PC のアプリケーションからは MIDI 入力ポート 1 個、MIDI 出力ポート 1 個と認識されます。