S-760 Unofficial Database
Roland Exclusive Message Format
このページの内容は、ローランド社からの許諾に基づき A-880 のマニュアルから転載したものです。
1.メッセージのフォーマット
ローランドのエクスクルーシブフォーマット(Type-4)はすべて以下の表のようになっています。
バイト
説明
0xF0
エクスクルーシブ ステータス
0x41
ローランドID
DEV
デバイスID
MDL
モデルID
CMD
コマンドID
[BODY]
データ本体
0xF7
エンドオブエクスクルーシブ
■ MIDIステータス [MIDI status] 0xF0 , 0xF7
エクスクルーシブメッセージは2つのステータスによって囲まれ、0xF0 の次には「メーカーID」を必要とします。これはMIDI規格Ver.1.0に定められています。
■ メーカーID [Maker ID] 0x41
ローランド固有のIDです。メーカーIDにより、どのメーカー用のエクスクルーシブメッセージかを判断することができます。
■ デバイスID [Device ID] DEV
複数の機器を区別するためにあります。通常「ベーシックチャンネル」から1を引いた値(0x00~0x0F)が使用されますが、複数のベーシックチャンネルを持つ機器などでは 0x00 ~ 0x1F などの広い範囲を使用することもあります。
■ モデルID [Model ID] MDL
機種ごとに決まった値を持ちます。ただし、機種が違っても同じデータを扱うものは共通に使用されます。
拡張のために 0x00 を使用し、0x00 の個数によっても違うモデルと区別されます。たとえば、
0x01
0x02
0x00 , 0x01
0x00 , 0x02
0x00 , 0x00 , 0x01
は別のモデルを表します。
0x16
CM-64
0x20
A-880
0x34
S-760
0x42
GS
0x45
LCDパネル付きGS
0x00 0x0D
SPD-20
■ コマンドID [Command ID] CMD
メッセージの役割を表します。
モデルIDと同様に 0x00 を拡張コマンドの識別として使用します。
■ データ本体 [BODY]
送受信されるデータ本体は、モデルIDやコマンドIDによってサイズや内容が変わります。
2.アドレスマッピング方式によるデータ転送
アドレスマッピング方式とは、
1.
のフォーマットに従ったデータ転送方式です。この方式では、波形データ、スイッチ情報やパラメータなどを、その機器ごとに設定したアドレス空間に割り付けることによって、さまざまなデータを、そのアドレスを指定することで情報の転送を行います。
以上により、機種やデータの種類によってデータの転送方法が変わることはありません。転送方法としては、ワンウェイ方式とハンドシェイク方式があります。
機器によって、データの種類によりこれらの2方式を使い分けたり、1つの方式しかできない場合もあります。
■ ワンウェイ方式
この方式は、比較的少ないデータの転送に適しており、一方的にエクスクルーシブメッセージを送信することによってデータ転送を行っています。
接続図
データ要求のメッセージを使用する時以外は、2の接続は必要ありません。
■ ハンドシェイク方式
この方式は、送る側と受ける側でお互いにハンドシェイクをしながらデータ転送を行います。大量のデータ転送では信頼性が高く、転送速度も速くなります。
接続図
2本の接続が必ず必要です。
上記の2方式について
* 転送方式により使用できるコマンドIDが決まっています。
* お互いの機器が同じ転送方法を採用しており、デバイスIDとモデルIDが一致していないとデータ転送はできません。
3.ワンウェイ方式によるデータ転送
この方式は比較的少量のデータを転送するときにメッセージごとの確認を行わず一方的に送る方法です。ただし多量のデータを続けて送るときは、適当な時間間隔(20msec以上)を取って送ります。この方式では受信側はその時間間隔内で正しくデータを受信、処理しなければいけません。
メッセージの種類
メッセージ
コマンドID
データ要求 1
RQ1 (0x11)
データセット 1
DT1 (0x12)
■ データ要求 1 [Request data 1] RQ1 (0x11)
相手の機器からデータを送ってもらうときに送信します。アドレスとサイズで要求するデータと量を示しています。
このメッセージを受信した場合、その機器がデータを送られる状態にあり、アドレスとサイズが適当なものであれば、要求されたデータを「データセット 1」メッセージで送信します。そうでない場合は何も送信しません。
バイト
説明
0xF0
エクスクルーシブステータス
0x41
ローランドID
DEV
デバイスID
MDL
モデルID
0x11
コマンドID
aa
aa
aa
aa
アドレス MSB
LSB
ss
ss
ss
ss
サイズ MSB
LSB
sum
チェックサム
0xF7
エンドオブエクスクルーシブ
サイズは要求するデータ本体のサイズを示しており、「データセット1」メッセージのバイト数ではありません。
機種ごとにデータの種類によって一度に転送するデータの数があらかじめ決まっていたり、決められたアドレスで区切って送受信しなければいけない場合もあります。
アドレスとサイズは同じバイト数で、「モデルID」ごとに決められます。
チェックサムは、128からアドレス、サイズを加算した値の上位 7 ビット目が 0 になる値を引いたものになります。
■ データセット 1 [Request set 1] DT1 (0x12)
実際のデータ転送を行います。
データはそれぞれ1バイトごとにアドレスを持ちますが、このメッセージでは、1つまたは複数データの先頭のアドレスとデータだけをアドレス順に並べたものを送ることができます。
MIDI規格により、リアルタイムメッセージ以外のメッセージはエクスクルーシブメッセージには割り込めません。ローランドでは、ソフトスルーをする機器を考えて、1つの「データセット1」メッセージで転送するデータを最大256バイトとしていますので、256バイトを超えるような多量のデータは、区切って何回かに分けて送ります。
バイト
説明
0xF0
エクスクルーシブステータス
0x41
ローランドID
DEV
デバイスID
MDL
モデルID
0x12
コマンドID
aa
aa
aa
aa
アドレス MSB
LSB
dd
データ MSB
LSB
sum
チェックサム
0xF7
エンドオブエクスクルーシブ
このメッセージは、「データ要求1」メッセージで示される範囲の中で、有効な部分のみを転送することができます。
機種ごとにデータの種類によって一度に転送するデータの数があらかじめ決まっていたり、決められたアドレスで区切って送受信しなければいけない場合もあります。
アドレスのバイト数は、「モデルID」ごとに決められます。
チェックサムは、アドレス、データを加算した値の上位 7 ビット目が 0 になる値になっています。
■ 送受信の例
機器 A が機器 B にデータを転送するとき。
単に「データセット1」のメッセージを送信します。
機器 A
方向
機器 B
データセット 1
----→
受信
20msec以上の間隔
データセット 1
----→
受信
20msec以上の間隔
:
:
:
機器 B が機器 A にデータを要求して転送してもらうとき。
最初に「データ要求1」メッセージを送信します。そして、機器 A は「データセット1」メッセージを送信します。
機器 A
方向
機器 B
受信
←----
データ要求 1
データセット 1
----→
受信
20msec以上の間隔
データセット 1
----→
受信
20msec以上の間隔
:
:
:
4.ハンドシェイク方式によるデータ転送
ハンドシェイク方式では、2台の機器が相互に確認を取りながらデータの転送を行います。正しく転送できたかどうかを確認しながらデータをやり取りするので信頼性が高く、また受信側の準備が出来次第データが送られるので、時間間隔を待つワンウェイ方式よりも短い時間で転送が終わります。
サンプラーの波形データやシンセサイザーの全音色データなど、多量のデータをMIDIで転送するときにはデータチェックのあるハンドシェイク方式のほうが適しています。
メッセージの種類
メッセージ
コマンドID
データ送信要求
WSD (0x40)
データ要求
RQD (0x41)
データセット
DAT (0x42)
了解
ACK (0x43)
データ終了
EOD (0x45)
通信エラー
ERR (0x4E)
拒否
RJC (0x4F)
■ データ送信要求 [Want to send data] WSD (0x40)
相手の機器にデータを送りたいときに送信します。アドレスとサイズで送りたいデータと量を示しています。
このメッセージを受信した場合、その機器がデータを送られる状態にあり、アドレスとサイズが適当なものであれば、「了解」メッセージを送り、そうでない場合は「拒否」メッセージを送信します。
バイト
説明
0xF0
エクスクルーシブステータス
0x41
ローランドID
DEV
デバイスID
MDL
モデルID
0x40
コマンドID
aa
aa
aa
aa
アドレス MSB
LSB
ss
ss
ss
ss
サイズ MSB
LSB
sum
チェックサム
0xF7
エンドオブエクスクルーシブ
サイズは要求するデータ本体のサイズを示しており、「データセット」メッセージのバイト数ではありません。
機種ごとにデータの種類によって一度に転送するデータの数があらかじめ決まっていたり、決められたアドレスで区切って送受信しなければいけない場合もあります。
アドレスとサイズは同じバイト数で、「モデルID」ごとに決められます。
チェックサムは、アドレス、サイズを加算した値の上位 7 ビット目が 0 になる値になっています。
■ データ要求 [Request data] RQD (0x41)
相手の機器からデータを送ってもらうときに送信します。アドレスとサイズで要求するデータと量を示しています。
このメッセージを受信した場合、その機器がデータを送られる状態にあり、アドレスとサイズが適当なものであれば、要求されたデータを「データセット」で送信し、そうでない場合は「拒否」メッセージを送信します。
バイト
説明
0xF0
エクスクルーシブステータス
0x41
ローランドID
DEV
デバイスID
MDL
モデルID
0x41
コマンドID
aa
aa
aa
aa
アドレス MSB
LSB
ss
ss
ss
ss
サイズ MSB
LSB
sum
チェックサム
0xF7
エンドオブエクスクルーシブ
サイズは要求するデータ本体のサイズを示しており、「データセット」メッセージのバイト数ではありません。
機種ごとにデータの種類によって一度に転送するデータの数があらかじめ決まっていたり、決められたアドレスで区切って送受信しなければいけない場合もあります。
アドレスとサイズは同じバイト数で、「モデルID」ごとに決められます。
チェックサムは、アドレス、サイズを加算した値の上位 7 ビット目が 0 になる値になっています。
■ データセット [Data set] DAT (0x42)
実際のデータ転送を行います。
データはそれぞれ1バイトごとにアドレスを持ちますが、このメッセージでは、1つまたは複数データの先頭のアドレスとデータだけをアドレス順に並べたものを送ることができます。
MIDI規格により、リアルタイムメッセージ以外のメッセージはエクスクルーシブメッセージには割り込めません。ローランドでは、ソフトスルーをする機器を考えて、1つの「データセット1」メッセージで転送するデータを最大256バイトとしていますので、256バイトを超えるような多量のデータは、区切って何回かに分けて送ります。
バイト
説明
0xF0
エクスクルーシブステータス
0x41
ローランドID
DEV
デバイスID
MDL
モデルID
0x42
コマンドID
aa
aa
aa
aa
アドレス MSB
LSB
dd
データ MSB
LSB
sum
チェックサム
0xF7
エンドオブエクスクルーシブ
このメッセージでは、「データ要求」や「データ送信要求」メッセージで示される範囲の中で有効な部分のみを転送することができます。
機種ごとにデータの種類によって一度に転送するデータの数があらかじめ決まっていたり、決められたアドレスで区切って送受信しなければいけない場合もあります。
アドレスとサイズは同じバイト数で、「モデルID」ごとに決められます。
チェックサムは、アドレス、データを加算した値の上位 7 ビット目が 0 になる値になっています。
■ 了解 [Acknowledge] ACK (0x43)
「データ送信要求」「データセット」「データ終了」などのメッセージを受信したときに、どのメッセージが正しく受信でき、それに応じた準備や処理が完了したときに送信します。相手の機器は、このメッセージを受信してから次の動作に移ります。
バイト
説明
0xF0
エクスクルーシブステータス
0x41
ローランドID
DEV
デバイスID
MDL
モデルID
0x43
コマンドID
0xF7
エンドオブエクスクルーシブ
■ データ終了 [End of data] EOD (0x45)
データの終了を相手の機器に知らせるために送信します。このメッセージの後、相手の機器から「了解」メッセージを受信して通信は終了します。
バイト
説明
0xF0
エクスクルーシブステータス
0x41
ローランドID
DEV
デバイスID
MDL
モデルID
0x45
コマンドID
0xF7
エンドオブエクスクルーシブ
■ 通信エラー [Communication error] ERR (0x4E)
チェックサムの値が合わないなど、メッセージを正しく受信できなかったとき、相手の機器に異常を知らせるために送信します。ただし、このメッセージの変わりに「拒否」のメッセージを送って通信を終了してもかまいません。
このメッセージを受信した場合、最後に送ったメッセージをもう一度送りなおしてもよく、「拒否」メッセージを送って通信を終了させることもできます。
バイト
説明
0xF0
エクスクルーシブステータス
0x41
ローランドID
DEV
デバイスID
MDL
モデルID
0x4E
コマンドID
0xF7
エンドオブエクスクルーシブ
■ 拒否 [Rejection] RJC (0x4F)
何らかの理由で、通信を強制的に終了したいときに送ります。このメッセージが送られるのは、次のようなことが考えられます。
「データ送信要求」「データ要求」で指定されたサイズ、アドレスの値が適切でないか、データを送受信できる状態に無いとき。
送られてきたデータのアドレスや個数が適切でなかったとき。
パネルの操作などで、データの送受信を中止したとき。
通信エラーが起こったとき。
このメッセージは、いつでもどちらからでも送ることができ、受け取った側はすぐに通信を中止しなければなりません。
バイト
説明
0xF0
エクスクルーシブステータス
0x41
ローランドID
DEV
デバイスID
MDL
モデルID
0x4F
コマンドID
0xF7
エンドオブエクスクルーシブ
■ 送受信の例
●機器 A が機器 B にデータを転送するとき。
「データ送信要求」が受け入れられてからデータを送信します。
機器 A
方向
機器 B
データ送信要求
----→
受信
受信
←----
了解
データセット
----→
受信
受信
←----
了解
データセット
----→
受信
受信
←----
了解
:
:
:
データ終了
----→
受信
受信
←----
了解
●機器 A が機器 B にデータ転送をしてもらうとき。
「データ要求」が受け入れられたらデータが送られてきます。
機器 A
方向
機器 B
データ要求
----→
受信
受信
←----
データセット
了解
----→
受信
受信
←----
データセット
了解
----→
受信
:
:
:
受信
←----
データ終了
了解
----→
受信
●機器 A が機器 B からデータを受信中にエラーが発生した場合。
1.機器 B からデータの再送をしてもらう場合。
機器 A
方向
機器 B
:
:
:
受信
←----
データセット
了解
----→
受信
受信NG
×←エラー発生--
データセット
通信エラー
----→
受信
受信
←----
データセット
(前回と同じデータ)
了解
----→
受信
:
:
:
2.機器 B がデータの再送を拒否して終了する場合。
機器 A
方向
機器 B
:
:
:
受信
←----
データセット
了解
----→
受信
受信NG
×←エラー発生--
データセット
通信エラー
----→
受信
終了
←----
拒否
3.機器 A が即座に終了する場合。
機器 A
方向
機器 B
:
:
:
受信
←----
データセット
了解
----→
受信
受信NG
×←エラー発生--
データセット
拒否
----→
終了
Update 2004/12/26