GSとXG、ここが違う

MIDIの話をしていると、必ず話題に上がるのが音源による音の違いです。
よく「GS(XG)専用」などと書かれているHPやデータがあります(ウチにもいくつかあります)が、防ぐ手段がない以上、意図しない音源で聞かれてしまうのは仕方のない事です。

ここでは代表的な規格であるGSとXGについて、どこが違うのかまとめておきます。
最低限の互換性を持たせるための参考になれば幸です。
「私はGMで作っているので大丈夫」と思っている人も、気が付かないうちにやらかしているかもしれませんので、是非読んでみてください。

なお、XG音源はGSモード(正式にはTG-300モード)があるので、システムリセットがちゃんと入ったデータであればGS音源として動作します。
逆に、システムリセットが入っていなかったり、間違った物を入れるとXG音源なのにXGの機能が使えない、という事も起きるので注意が必要です。
また、GSの場合、音源によって微妙に違いがあります。詳しくはお使いの音源のマニュアルを参照してください。
XGでもレベル2、3という拡張規格がありますが、GSの方は規格というより「音源の仕様」色が濃いですね。

ちなみに、私はGS音源についてはVSC-88(Ver3)しか持ってないので、記述の誤り、不十分な所があるかもしれません。もし変な所を発見したらお知らせ頂けると幸です。

音名が違う

いきなりこれです。先が思い遣られます。
GSとXGでは1オクターブ違う場合があるんですねえ。具体的には、「ト音記号とヘ音記号の間のド(中央ド)」が、XGでは「C4」、GSでは「C3」になります。
どっちが正しいのかは知りませんけど、両ユーザが話をする時は気を付けないと「あいつ、オクターブ間違えやがった」という事になりかねません。

ちなみに、AMEIの「MIDI検定」の問題ではGSの表記でした。
ローランドが販売しているシーケンサ「Cakewalk」ではXGの表記です。また。PDFで公開されているGSの資料もXGの表記だったので、ひょっとしたらGSとは関係無いかもしれません。情報求む。
(追記)
Sonarがバグだらけで使い物にならなかったので、新たにCakeWalkのバージョン7(英語版)を入手して使ってますけど、何とこれでは中央ドが「C5」という表記になってます。
もう訳が分かりません。一つだけ言える事は、「音名のオクターブは当てにならない」ですね。

音色やベロシティ、コントロールの効き具合が違う

音源毎に違うのは仕方ないですね。それがMIDIの「お約束」ですから。
XGでは音高やベロシティによってかなり細かく波形データを変えているようですが、GSはそうでもないようです。
ベロシティに関しては、XGの方がよりリニアな特性を持っているようです。

また、ハーモニックコンテンツ(コントロール#71)、ブライトネス(#74)については、GSの仕様書にもインプリメンテーションチャートにも記述がありませんが、GSで受信するらしいです。

バンクの使い方が違う

GM(レベル1)にはバンクという概念はありません。従って、両音源ともにGMモードになっている時はバンクセレクトは無視されます。

GSでは、バンクセレクトのMSBは0で固定、LSBでバンクを指定します。指定したバンクが間違い、あるいはその音源でサポートされていない場合、音色が「ピアノ」になってしまいます。

XGでは、MSBとLSBの両方を使います。無効なバンクを指定した場合、どちらも0として扱われます。つまり、バンクセレクトをしなかったのと同じですね。ただし、FX(効果音)バンクの場合は、発音しません。

ドラムトラックの指定が違う

もちろん、どちらもデフォルトではトラック10がドラムトラックです。トラック10をドラムとして使うぶんには問題ありません。
では、チャンネル10以外をドラムトラックにするにはどうしたらよいのでしょうか。
GSでは、sysExによってドラムトラックを指定します。
XGでは、バンクセレクトのMSBが127だとドラムトラックになります。
ここで、ちょっと困るのはXG用のデータで明示的にドラムトラックを指定した場合です。
これをGSで再生すると「サポートしていないバンク」と見なされ、ピアノになってしまいます。
GSリセットを忘れたGS用のデータをXGで再生した場合も、同様の現象が発生してしまいます。
なので、特に必要のない場合はバンクセレクトは入れない方がよいでしょう。

ドラムの楽器が違う

チャンネル10で使うドラムセットは、GMでは35(バスドラム)〜81(オープントライアングル)までです。
当然、これはGS/XGで共通です。
82〜84はGMで定義していませんが、GS/XG共通です。

13〜21は、XGだけが定義しています。なので、XG用のデータでこれらを使ってもGSでは鳴らないだけで、比較的害がありません。
13 Surdo Mute
14 Surdo Open
15 Hi Q
16 Whip Slap
17 Scratch H
18 Scratch L
19 Finger Snap
20 Click Noise
21 Metronome Click

同様に、85〜88はGSだけが定義しています。GS用にこれらを使ってもXGでは鳴りません。
85 Castanets
86 Mute Surdo
87 Open Surdo
88 Applause 2

問題は、両者が別々の楽器を定義している部分です。

Note# GS XG
22 MC-500 Beep 1 Metronome Bell
23 MC-500 Beep 2 Seq Click H
24 Concert SD Seq Click L
25 Snare Roll Brush Tap
26 Finger Snap 2 Brush Swirl
27 High Q Brush Slap
28 Slap Brush Tap Swirl
29 Scratch Push Snare Roll
30 Scratch Pull Castanet
31 Sticks Snare Soft
32 Square Click Sticks
33 Metronome Click Kick Soft
34 Metronome Bell Open Rim Shot

例えば、XGのデータでカスタネットを鳴らしたとします。これをGSで再生すると「ウニャ」という音になってしまいますね。困ったものです。

こうやって改めて見てみると、使われている楽器は大体同じで、並び順が違うだけなのが分かります。
どうして同じにしなかったのか、悔やまれる所です。
これに関しては後発のXGの方に責任あり、という所でしょうか。
まあ、こんなにネットが発達してMIDIファイルが気軽にやりとりできる用になるとは予想できなかったんでしょうね。

互換性の無いパーカッションを両方の音源で鳴らす

さて、この部分をどうしても使いたい場合、どうすればいいのでしょうか。
一番簡単なのはXGとGSで別々にデータを作る事です。
それも大変なので、1つのデータでGS/XG両方で目的の楽器が鳴るようにしたいですね。
ここでは、実際にこのデータで使用した方法をご紹介します。対象は、カスタネット(XGで#30、GSで#85)です。

  1. とりあえず、自分の音源で使える方のカスタネットを作ります(私の場合#30)。
  2. 出来上がったら別のトラック(チャンネルはもちろんどちらも10)にコピーします。
  3. コピーしたデータのノートを、もう一個の音源用に移動します(#85に変更する)。
  4. 上の2つの工程は、MIDI Espressivoを使っている方は、「Edit」メニューの「Drum/Notes changer」を使うと簡単におこなえます。

これで、両方ともカスタネットの音色は鳴ります。
XGでは#80に楽器は割りつけられていないので、このままでOKなんですが、問題はGSです。
XGのカスタネットはGSではスクラッチになるので、カスタネットと一緒に「ウニャ」という音が入ってしまい、このままではお馬鹿データになってしまいます。
なので、次の操作を追加します。

  1. NRPN(26,30,0,0)を送信します。これは、「パーカッションの#30のボリュームを0にしなさい」という意味です。
  2. その後ろに、#30のボリュームを設定するXGのsysExを追加します。

GSでは最初のNRPNしか受信しないので、#30のボリュームは0になります。
XGは後ろのsysExも受信するので、設定したボリュームになります。
#80は前述したようにXGでは鳴らないので、何もしなくてかまいません。それぞれ別のに割りつけられてる楽器を使う場合は、同じくNRPNとsysExを使って設定します。

結論

両方のフォーマットで共通なデータを作るためには、以下の点に注意します。

ホームページに戻る


Copyright Mag., 2001