
CTK-671 MIDI インプリメンテーション
9
12 ..... <data> Parameter Data (Action = Parameter Change / Send のとき)
・ Act = 1(IPR)、3(BDR)、5(HDR) または 7(HDA,HDJ,HDE,NOP) のとき
このフィールドは空となります。
・ Act = 0(IPC) のとき
Parameter の値そのものを示し、以下に示すように、dlen フィールドで示される
データのサイズによって長さが異なります。
Parameter リクエストの時は存在しないフィールドです。
ddddd + 1 <data> の数
-----------------------------------+---------------------------
1 ∼ 7 1
8 ∼ 14 2
15 ∼ 21 3
22 ∼ 28 4
29 ∼ 32 5
これらは下位バイトから下詰めで転送する。
すなわち複数バイトにまたがるデータの場合、もっとも重みの小さいビットは最
初の<data>のLSBとなり、もっとも重みの大きいビットは最後の<data>のうち
の意味のあるビットのうち、もっとも上位に位置するビットです。
たとえば 32bit データは下記のように分割されて転送されます。
7 65432 10
----------------------------------------------------------------------------------
data0: 0 [bit06] [bit05] [bit04] [bit03] [bit02] [bit01] [bit00]
data1: 0 [bit13] [bit12] [bit11] [bit10] [bit09] [bit08] [bit07]
data2: 0 [bit20] [bit19] [bit18] [bit17] [bit16] [bit15] [bit14]
data3: 0 [bit27] [bit26] [bit25] [bit24] [bit23] [bit22] [bit21]
data4: 0 0 0 0 [bit31] [bit30] [bit29] [bit28]
・ Act = 2(BDS) または 4(HDS) のとき
Bulkでデータを転送する際には転送したいParameter Setのデータを先頭アドレ
スから順次16ビット単位で読み出し、 その値を以下の様式で3バイトに分解し、
羅列して送ります。
変換フォーマットは上記の Individual Parameter の転送の 16bit の場合と同じで、
以下のようになります。
メモリイメージ 16bit
MSB: abcccccc
LSB: cddddddd
↓
<data> フィールド 3bytes
data0: 0ddddddd
data1: 0ccccccc
data2: 000000ab
ただし、1つのパケットで転送できるのは128バイト以下のParameter Set イメー
ジであり、それを越える場合は複数のパケットに分割して転送されます。
すなわち <data> フィールドの最大長は
128/2 * 3 = 192 バイト
となります。
また、1 つのセッションで転送できるのは 1 つの Parameter Set に限られ、複数
のParameter Setを送る場合でも、1つのパケット内に別のParameter Setのデー
タが混在することはありません。
Parameter Set が異なればかならずパケットを分割します。
13 ..... <sum> Check Sum
・ Act = 0(IPC), 1(IPR)、3(BDR)、5(HDR) または 7(HDA,HDJ,HDE,NOP) のとき
このフィールドは空となります。
・ Act = 2(BDS) または 4(HDS) のとき
<data>フィールドの合計値にこのsumの値を加算することで下位7ビットが0に
なるような値を入れます。
受信側ではこれをチェックして値が正しくない場合はエラー処理(再要求など)を
行います。
14 ..... EOX : End of System Exclusive Message
Format : 11110111
End of System Exclusive message Status = F7H
2.2 Parameter 単体の操作
Parameter単体の操作は個別のParameter の転送と、転送リクエストの 2 種類の動作が
あります。
1 つのセッションは IPR(Individual Parameter Request)の要求に対して IPC (Individual
Parameter Change)を返送するか、IPC を送るだけで完結します。
IPR を受信した場合、対応する Parameter の IPC を送り返します。
IPC を受信した場合、対応する Parameter の値を変更します。
また、本体に対してなんらかのコマンドを与えたりするのに Individual Parameter
Change を使用したり、また本体の何らかのステータス情報を調べたりするのに Indi-
vidual Parameter Request を使用したりすることもあります。
データ受信側 データ送信側 動作
------------------- ------------------- -----------------------------
IPR → 送信要求(オプション)
← IPC データ転送
実際にどのような Parameter が転送できるかは後述の「Parameter List」を参照して
下さい。
2.3 Parameter Set の転送方式
2.3.1 通信方式
Parameter Setの転送は以下のようなメッセージのやり取りを使用したバルクダンプを
使用します。
・Oneway 方式による Parameter Set の送信 / 受信
・Oneway 方式による Parameter Set の送信要求の送信 / 受信
・Handshake 方式による Parameter Set の送信 / 受信
・Handshake 方式による Parameter Set の送信要求 /受信拒否 /エラー通告の送信/ 受信
Oneway方式は、データの送信側がその受信側の反応を意識せずにデータを送信した時
点でセッションを終了してしまう方式です。 シーケンサなどから一方的に転送するのに
適しています。
Handshake方式は、データの送信側がデータを送信した後に、その受信側の反応を確認
してから次のセッションに進む方式です。
無駄な待ち時間が発生しないという速度的メリットがあります。
実際にどのようなParameter Setが割り当てられるかは後述の「Parameter Set List」を
参照して下さい。
なおParameter Setのバルクダンプは、高速化の為に、Individual Parameter Change の
データフォーマットとは異なり、本体のメモリ・イメージをそのままの形で転送します。
1 つのセッションでは 1 つの Parameter Set の転送が可能です。
1 つの Parameter Set のサイズが大きい場合は複数のパケットに分割して転送すること
が可能です。
その際の分割情報として <index> フィールドの Packet Number を使用します。
また、複数組の小さな Parameter Set を転送する際にも、1 パケットで複数転送するこ
とはできず、必ずParameter Setの区切りがパケットの区切りとなるように転送します。
2.3.2 Oneway 方式 の通信フロー
1つのセッションはデータ受信側のBDRによる要求送信または、 データ送信側のBDSの
データ送信で始まります。 データ送信側が転送するParameter Setに依存したサイズを
転送し終わると終了します。
本機が BDR を受信した場合、対応する Parameter Set を BDS によって送り返します。
本機が BDS を受信すると、対応する Parameter Set の値を変更します。
Kommentare zu diesen Handbüchern