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)です。
これで、両方ともカスタネットの音色は鳴ります。
XGでは#80に楽器は割りつけられていないので、このままでOKなんですが、問題はGSです。
XGのカスタネットはGSではスクラッチになるので、カスタネットと一緒に「ウニャ」という音が入ってしまい、このままではお馬鹿データになってしまいます。
なので、次の操作を追加します。
GSでは最初のNRPNしか受信しないので、#30のボリュームは0になります。
XGは後ろのsysExも受信するので、設定したボリュームになります。
#80は前述したようにXGでは鳴らないので、何もしなくてかまいません。それぞれ別のに割りつけられてる楽器を使う場合は、同じくNRPNとsysExを使って設定します。
両方のフォーマットで共通なデータを作るためには、以下の点に注意します。