最初に断っておきますが、ほぼ自分用のメモです。プログラミングには直接関係ないのですが、これに関するプログラムを行う場合には必要な情報です。たとえば、会計プログラムを作るには会計の知識無しには作れないわけで。
某DTMグループで以下のような質問しました。
「質問です。今、YAMAHAのハードXG音源(MUやQY、ポケットミクなど)でSysEXのMIDIイベントを打ち込むときに、それを補助するようなエディターってありますでしょうか? XGのエフェクターなどを使いたいのですが、その程度のSysEXイベントを手打ちで打ち込むのがしんどそうなので。CuBaseにはあるらしいのですが、ウチはあいにくLogic Proで。イベントだけ生成してそれをコピペで貼り付けるようなエディタでもいいですし、AUとかで用意されているならそれでもいいです。というか、QYみたいに自力完結できないハード音源を使っているかたは今でもXG WORKSとか使っていらっしゃるのでしょうか?」
しかし、コメントもイイネも全くつかなかったので、自分で調べることにしました。(念のため言っておきますが、だからといってそのグループに恨みがあるかとか、失望したとかそういうことは一切ありません。かなりニッチな話題ですし、仕方がないでしょう)
結局、エディタのようなものは見つからなくて、手打ちでダンプリストみたいな呪文を打ち込むしかないようでした。このとき見つかった最も有益な資料は以下です。
YAMAHA | XG READING PAGE - ヤマハ
「Dr.青山のXG解体新書」ともいうようです。
https://jp.yamaha.com/files/download/other_assets/9/321739/read_aoyama.pdf
これの(図4-5)

XGの仕様書だけでこのようなエフェクトを設定するのはなかなか厄介で、この図がなかったら途方に暮れてました。
最初の4行が大事です。後はMIDIイベントが読める人なら普通に読めるかと思いますし、読めなくてもDAWなどを使っている人でしたらなんとなく分かるかと思います。(ちなみに、5,6,7行目は音色切り替えのバンク設定のことで、「Dr.青山のXG解体新書」の最初の方に説明があります)
最初の4行ではValue1列の通り、Delay L.C.R.というエフェクトについて、左チャンネルのディレイを333.3ms、右チャンネルのディレイを0.3ms、これをシステムエフェクトとして設定しています。右の16進数がなぜこれを意味しているのかをこれから説明していきます。
1行目
F0 43 10 4C 02 01 40 05 00 F7
XG READING PAGEのページには次のようにあります。
「SysEx.では図3-6のアドレスやデータの前と後ろに (F0 43 10 4C) 30 38 02 6D (F7)
のように「F0 43 10 4C」と「F7」を付けます(43 10 4CはXG固有の情報、 F0とF7はSysEx.の始まりと終わりを表わす情報)。」
さらに細かく言うと、SysExは必ず「F0」で始まり、「F7」で終了します。「43」はヤマハのメーカーID、「10」はデバイス番号、「4C」はXGを意味するモデルIDというのだそうです。とにかくXG音源の場合は「F0 43 10 4C」と「F7」をつける、と覚えてしまっていいです。(詳細は省きますが検索すればすぐにわかります)
その先はこちらの検索ページから辿っていきます。(これはヤマハの資料検索で”XG”と打ち込んだだけです。)
https://jp.yamaha.com/products/contents/pianos/downloads/technical_docs/index.html?l=ja&c=&k=XG
これの
XG仕様書V1.35(XG Parameter Change Table)
https://jp.yamaha.com/files/download/other_assets/8/321748/xgparameterchangetable.pdf
を見ます。
<別表3-3>


02 01 40 2 00-7F VARIATION TYPE MSB XG EFFECT MAP 参照 05(=DELAY L,C,R)
00-7F VARIATION TYPE LSB 00 : basic type 00
なるほど、 02 01 40 というのがバリエーションエフェクトを表す値ということのようです。
そして、そのひとつとして、DELAY L,C,Rがあると。
DELAY L,C,R以外には何があるか、これを見るにはまた別のファイルを開きます。
XG仕様書V1.35(Effect Map)
https://jp.yamaha.com/files/download/other_assets/3/321743/efctmap.pdf

最初のREVERBとCHORUSはバリエーションエフェクトではなく、次のVARIATION/INSERTION
という表からです。

「05, 00」ならばDELAY L,C,R、
「06 00」ならばDELAY LR
「01 01」ならばHALL 2
ということですね。
ここまでの説明で最初の行の意味がわかるかと思います。
F0 43 10 4C 02 01 40 05 00 F7
コード | 意味 |
---|---|
F0 43 10 4C | XGの始まり(お約束) |
02 01 40 | バリエーションエフェクトを表す。 |
05 00 | DELAY L,C,Rを表す。 |
F7 | XGの終了(お約束) |
となります。
2行目
F0 43 10 4C 02 01 42 1A 05 F7
1行目との違いは「42 1A 05」だけですね。
まず、先ほどの
XG仕様書V1.35(XG Parameter Change Table)
を見ると、
「02 01 42」の部分がひとかたまりで、バリエーションエフェクトのパラメータ1を表しています。
これが何を意味しているのかは、
XG仕様書V1.35(Effect Parameter List)
https://jp.yamaha.com/files/download/other_assets/5/321745/efctparamlist.pdf

ここにあります。この表からパラメタの意味、設定できる値、単位、デフォルト値がわかります。
注意点としては、このパラメタ全てが使えるかどうかはXG音源次第ということです。たとえば、QY70ではDELAY L,C,Rは第5パラメタまでしかありません。
次の「1A 05」はパラメタの値を示しています。このパラメタでは素直に値そのものがパラメタ値となっていますが、たとえば、上の表でいえば、第13パラメタのEQ Low Frequencyはさらに、table3という別表を探してくることになります。「1A 05」の意味ですが、素直に10進数に変換すると「6661」となり、最初の図4-5の「333.3ms」とは値が合致しません。
これは値が8bitではなく7bitだからのようです。(裏付ける文書は見つかりませんでしたが)
なので、1A(=26) x 128 + 05 = 3333となります。
コード | 意味 |
---|---|
F0 43 10 4C | XGの始まり(お約束) |
02 01 42 | バリエーションエフェクトの第1パラメタを表す。 |
1A 05 | パラメタの値:1A(=26) x 128 + 05 = 3333 |
F7 | XGの終了(お約束) |
3行目
F0 43 10 4C 02 01 44 0003 F7
これは簡単ですね。
コード | 意味 |
---|---|
F0 43 10 4C | XGの始まり(お約束) |
02 01 44 | バリエーションエフェクトの第2パラメタを表す。 |
00 03 | パラメタの値:0.3msを表す。 |
F7 | XGの終了(お約束) |
4行目
「F0 43 10 4C 02 01 5A 01 F7」
これは、XG READING PAGEに説明があり通り、「システムエフェクト」を表しています。
エフェクトの使い方として、「インサーションエフェクト」と「システムエフェクト」があります。
「02 01 5A 00」インサーションエフェクト
「02 01 5A 01」システムエフェクト
「インサーションエフェクト」は特定のチャンネルだけに影響を及ぼします。他のチャンネルには一切無関係です。「システムエフェクト」はいわゆるセンドリターンエフェクトのことです。ディレイやリバーブなどを全体で決めておいて、それに対してどれだけエフェクトに配分するかを全てのチャンネルに対して決めます。実は図4-5ではその配分量も図の中にあって、下から2行目の「Variation Send【94】」とのいうのがその値です。実はこれは単なるコントロールチェンジイベント#94です。配分量は、その隣にある Value 2の【64】となります。
コード | 意味 |
---|---|
F0 43 10 4C | XGの始まり(お約束) |
02 01 5A | バリエーションエフェクトのパラメタ(インサーションエフェクトかシステムエフェクトかを決定する) |
01 | 00: インサーションエフェクト 01: システムエフェクト |
F7 | XGの終了(お約束) |