MIDI Show Control (MSC)

MIDI Show Control (MSC)は、システムをリモートコントロールするための方法の1つです。

MSC は、1991年にMIDIプロトコルの拡張としてリリースされました。grandMA2 システムは、MSCを送受信できます。

MSC には多くの設定があります。これらの多くは、送受信デバイスを照合するためのものです。詳しくは、後述を参照してください。

MSCの設定について述べた後には、MSCの概要イーサネットによるMIDI についての説明があります。

 

MSCの設定

これらの設定にアクセスするには、Setup キーを押し、Console タブで Midi Show Control ボタンをタップしてください。下のような設定画面が開きます。


MIDI Show Control

ここには、4行の種々の設定と、2つのモニタ領域があります。

モニタ領域には、MSC入力とMSC出力が表示されます。データは、解釈されたデータとして表示され、生の16進データは表示されません。

一番上の行には、2つの入力欄と1つのトグルボタンがあります。

重要
同じMIDIチャンネルでMSCコマンドを送受信すると、ループが形成されてしまいます。

次の2行の設定内容は、入出力の違いを除けば同じです。

 

一番下の行には、Send to というボタンがあります。これをタップすると、Select Send to ポップアップが開きます。


Select Send to ポップアップ

ここには、以下の3つの選択肢があります。

 

MSCの概要

MSCのコマンド構造と構文は、MMA(MIDI Manufacturers Association)によって定義された一般的な SysEx 構造に基づいています。これは、一般的なMIDIの拡張として、1991年にリリースされました。

生のMIDI情報は、16進オクテット(2桁の16進数、バイトとほぼ同義)で表されます。ソフトウェアメーカによっては、独自の解釈で、より可読性が高い形式でMSCデータを表している場合があります。もちろんこれは有用ですが、それらのすべてを説明することはできませんので、このユーザマニュアルでは生データとして見ていきます。

メッセージのフォーマットは以下のようになります。

F0 7F デバイスID 02 コマンド・フォーマット コマンド データ F7
             

デバイスID

デバイスIDは、以下の3つのセクションに分けられたオクテットです。

grandMA2 では、送受信メッセージの両方に対して、デバイスIDやグループIDを設定できます。

MSCでは、デバイスIDの指定に1オクテットしか送信できません。前述の Send to 設定では、送信すべきIDを3つセクションから選択できます。

 

コマンド・フォーマット

コマンド・フォーマットのオクテットは、メッセージを受信(または少なくとも応答)する機器タイプを表しています。grandMA2 は、3種類のフォーマットに対してのみ、送信や応答を行います。

 

コマンド

コマンド・オクテットは、メッセージ内でコマンド・タイプを表しています。コマンド・タイプによって、必要なデータ情報が決められています。

grandMA2 は、以下の7種類のコマンド・タイプに対応しています。

 

データ

01 (Go):

前述のように、これは GOTO コマンドと解釈されます。
コマンドの後に、キュー番号を指定する必要があります。キュー番号も16進オクテットで送信する必要があり、また、小数点を含む完全なキュー番号を送らなければなりません。例えばキュー番号4の場合、ドット区切りの完全な番号は 4.000 になります。10進数の数字をASCIIフォーマットの16進数に変換するには、先頭に3を付加します。10進数の 4 は、16進数の 34 になります。またドットは、16進数で 2E になります。ドットを含む完全なキュー番号は、34 2E 30 30 30 になります。

10進数から16進数へのすべての変換については、10進-16進変換表 を参照してください。

MSC In Exec オプションでステーションが Default Only に設定されている場合、コマンドの後に追加すべきものは、これですべてです。

例: デフォルトのエクゼキュータで、キュー番号 21.5 をトリガーします(All デバイス (7F)、All フォーマット(7F)、および Default Only の場合)。

F0 7F デバイスID 02 コマンド・フォーマット コマンド データ F7
F0 7F 7F 02 7F 01 32 31 2E 35 30 30 F7

設定が Default Only でない場合は、エクゼキュータとページを指定する必要があります。エクゼキュータ番号とページ番号は、ドット(16進数=2E)または空白(16進数=20)のいずれかで区切ります。キュー番号と、エクゼキュータ/ページのデータは、16進数の 00 で区切ってください。

例: ページ1のエクゼキュータ5で、キュー番号 37.2 をトリガーします(All デバイス (7F)、All フォーマット(7F)、および Exec.Page の場合)。

F0 7F デバイスID 02 コマンド・フォーマット コマンド データ F7
F0 7F 7F 02 7F 01 33 37 2E 32 30 30 00 35 2E 31 F7

同じ内容で、エクゼキュータ/ページ区切りに空白を用いると、以下のようになります。

F0 7F デバイスID 02 コマンド・フォーマット コマンド データ F7
F0 7F 7F 02 7F 01 33 37 2E 32 30 30 00 35 20 31 F7

 

02 (Stop):

これは Pause ボタンを押すのと同様です。16進数によるキュー番号の指定方法については、上述を参照してください。

Default Only オプションが設定されている場合、休止しているエクゼキュータが対象となるため、追加データは必要ありません。

例: デフォルトのエクゼキュータを停止します(All デバイス、All フォーマット、および Default Only の場合)。

F0 7F デバイスID 02 コマンド・フォーマット コマンド データ F7
F0 7F 7F 02 7F 02   F7

ステーションがMSCを送信している場合、キュー番号 0.000 が送られます。これは、「動作中のキーを停止」するコマンドを送るのと同じです。

Default Only ではなく、Exec.PageExec Page オプションが設定されている場合は、キュー0も送信する必要があります。

例: ページ1のエクゼキュータ5を停止します(All デバイス、All フォーマット、および Exec.Page の場合)。

F0 7F デバイスID 02 コマンド・フォーマット コマンド データ F7
F0 7F 7F 02 7F 02 30 2E 30 30 30 00 35 2E 31 F7

 

03 (Resume):

これは、休止しているキューを再開させる唯一の方法です。Stop コマンドとの違いは、"02" が "03" になるだけです。

例: Stop の例で休止したフェードを再開します(All デバイス、All フォーマット、および Exec.Page の場合)。

F0 7F デバイスID 02 コマンド・フォーマット コマンド データ F7
F0 7F 7F 02 7F 03 30 2E 30 30 30 00 35 2E 31 F7

Default Only が設定されている場合、フェードを再開するコマンドは F0 7F 7F 02 7F 03 F7 になります。

 

04 (Timed_Go):

01 (Go) コマンドと同様ですが、タイムを指定します。01 (GO) コマンドとデータについては上述を参照してください。説明を簡単にするために、MSCの設定で Default Only が有効になっているとします。

このコマンドでは、まずタイムを指定してから、次にキュー番号を指定する必要があります。タイムは、HourMinuteSecondFrame、および Fraction の順に5桁の16進数で表し、これらのセクションを正しく送信する必要があります。

なお、タイムは通常範囲を超える値で指定することもできます。例えば64秒(16進数=40)とすると、ステーションはこれを1分4秒として送信します。

今のところ卓は、Frame と Fraction セクションで指定されたタイムは受け入れませんが、Frame セクションで秒未満の値を送信できます。1秒は24フレームに分割されますので、0.5秒は12フレームとなり、送信データは16進数で 0C となります。

例: 20秒のフェードタイムで、キュー75に移ります(All デバイス、All フォーマット、および Default Only の場合)。

F0 7F デバイスID 02 コマンド・フォーマット コマンド データ F7
F0 7F 7F 02 7F 04 00 00 14 00 00 37 35 2E 30 30 30 F7

例: ページ1のエクゼキュータ3において、1分のフェードタイムで、キュー5.4に移ります(All デバイス、All フォーマット、および Exec.Page の場合)。

F0 7F デバイスID 02 コマンド・フォーマット コマンド データ F7
F0 7F 7F 02 7F 04 00 01 00 00 00 35 2E 34 30 30 00 33 2E 31 F7

 

06 (Set):

このコマンドは、フェーダを特定の位置に動かすために用いられます。コマンドの後に、フェーダを表す2オクテットと、位置を指定する2オクテットが続きます。

 

最初のオクテットは、(1ページ上の)フェーダ番号です。最初のフェーダは16進数で 00、2番目は 01 というようになります。16進数なので、フェーダ16は 0F、フェーダ17 は 10 となることに注意してください。

2番目のオクテットは、フェーダに対するページ番号です。フェーダ番号の場合と少し異なり、ページ1は16進数の 01、ページ2は16進数の 02 というようになります。

したがって、ページ1のエクゼキュータ1は、00 01 となります。

 

フェーダ位置の指定には、若干の計算が必要です。フェーダ位置は、Coarse および Fine 値によって定義されます。これらの値のスケールは128ステップです(ほとんどのMIDIデータは128ステップ)。最初に Fine 値が送信され、それに Coarse 値が続きます。

まず、指定したいフェーダ位置(10進数)に1.28を掛けます。この結果の整数部が Coarse 値になります。そして、残りの小数点以下の値に128を掛けると、Fine 値が得られます。これら2つの10進数値を、16進数に変換してください。

例: ページ2のフェーダ3を45%にします。まずフェーダ位置を変換します。

  1. 45 × 1.28 = 57.6
  2. Coarse 値は 57 です。
  3. 0.6 × 128 = 76.8
  4. Fine 値は 76 です。
  5. 57 を16進数に変換すると 39 になります。
  6. 76 を16進数に変換すると 4C になります。
  7. 送信データは Fine、Coarse の順なので 4C 39 となります。

MSC メッセージは以下のようになります(All デバイス、All フォーマットの場合)。

F0 7F デバイスID 02 コマンド・フォーマット コマンド データ F7
F0 7F 7F 02 7F 06 02 02 4C 39 F7

 

フェーダと位置データの後に、フェードタイムを付加できます。タイムは、04 (Timed_Go) コマンドと同じ形式で指定します。

例: ページ1のフェーダ15を、5秒で100%にします(All デバイス、All フォーマットの場合)。

F0 7F デバイスID 02 コマンド・フォーマット コマンド データ F7
F0 7F 7F 02 7F 06 0E 01 7F 7F 00 00 05 00 00 F7

 

卓は、シーケンスが割り当てられているエクゼキュータ、および(選択されているエクゼキュータに対する)緑の特殊マスターについてのみ、それらのフェーダ位置を送信しますが、何かが割り当てられているすべてのフェーダに対する位置を受け入れます。

 

07 (Fire):

このコマンドによって、マクロを実行できます。コマンドの後に続く1オクテットで、マクロ番号を指定します。

マクロ番号1は16進数の01に、マクロ番号255は16進数のFFになります。

: マクロ番号64をトリガーします(All デバイス、All フォーマットの場合)。

F0 7F デバイスID 02 コマンド・フォーマット コマンド データ F7
F0 7F 7F 02 7F 07 40 F7

 

0B (Go_Off):

このコマンドによって、エクゼキュータをオフにできます。コマンドの後に、キュー番号を指定する必要があります。キュー0を用いることもできます。

: ページ5のエクゼキュータ9に Off コマンドを送ります(All デバイス、All フォーマット、および Exec.Page の場合)。

F0 7F デバイスID 02 コマンド・フォーマット コマンド データ F7
F0 7F 7F 02 7F 0B 30 2E 30 30 30 00 39 2E 35 F7

 

イーサネットによるMIDI

MSCは、イーサネットを利用して送信できます。この場合、UDPメッセージとして送られます。

MSCメッセージは前述と同じですが、grandMA2 がデータを受け入れるためのヘッダが必要となります。

ヘッダは2つの部分に分かれています。最初の部分で 47 4D 41 00 4D 53 43 00 ("GMA MSC ")で、メッセージを grandMA2 MSC メッセージとして識別しています。

2番目の部分は、ヘッダを含むメッセージ長をリトルエンディアン形式で表した4オクテットです。
全体のオクテット数を計算し、それを16進数に変換します。4オクテットをすべて送信する必要がありますが、通常必要とされるのは最初のオクテット部分だけです(最大255オクテットまでのメッセージが可能)。

 

例:

キュー35に Go コマンドを送信します。MSC メッセージは次のようになります。
F0 7F 7F 02 7F 01 33 35 2E 30 30 30 F7.

これは13オクテットあります。ヘッダは常に12オクテットですので、合わせた長さは、25オクテットになります。10進数の 25 は、16進数では 18 です。メッセージ全体は次のようになります。
47 4D 41 00 4D 53 43 00 18 00 00 00 F0 7F 7F 02 7F 01 33 35 2E 30 30 30 F7

 

マクロ1のトリガーは、F0 7F 7F 02 7F 07 01 F7 になります(8オクテット)。

これにヘッダ長の12を足すと、20(10進) = 13(16進)になり、メッセージ全体は次のようになります。
47 4D 41 00 4D 53 43 00 13 00 00 00 F0 7F 7F 02 7F 07 01 F7