■前置き■・この記事は以前書いた「DominoとTiMidity++をつないでサウンドフォントを使う」
http://hanihoni.seesaa.net/article/139060187.htmlの続きです。単体でも読めると思います。
・Windows XPの話です
・この説明で扱っているTiMidity++はsaurceforge版です
・TiMidity++の中でもMIDIプレーヤの使い方です。この説明がMIDIドライバでも当てはまるかどうかは私は分かりません
・説明といっても、自分が使う為に試行錯誤した結果を、辻褄が合うように解釈したものなので、この説明が正しいかどうかはかなり怪しいです。とりあえず、何かの参考になればということでまとめました
・指摘歓迎です(というかこちらが正しいこと教えて頂きたいくらいです)
■本題■TiMidity++では、cfgファイルをいじることで、複数のサウンドフォントを組み合わせて使うことができるようになります。
今回は例として、SGM-V2.01と Airfont380finalというサウンドフォントを組み合わせて使うことを目標とします。
例えば「バイオリンとトランペットだけはAirfont380finalの音色を使い、残りはSGM-V2.01の音色を使う」といったことも可能です。
**********************概要**************************
●準備
●cfgファイルには何が書いてあるのか?
●「プログラムナンバー」、「バンクナンバー」とは
●MIDIにおける音色指定のルール
●音源によってナンバーの割り当てが違うと
●SGM-V2.01とAirfont380finalを組み合わせて使う
●ドラムについて
****************************************************
●準備説明のための準備として、SGM-V2.01とAirfont380finalの本体ファイル(SGM-V2.01.sf2、Airfont380final.sf2)と、そのTiMidity++用cfgファイル(SGM-V2.01.cfg、Airfont380final.cfg)がそれぞれ用意されているものとします。今回用意したcfgファイルはcfgforsfとCreateCFGを用いて作成したものです。
そして、TiMidity++にSGM-V2.01.cfgを読み込ませればSGM-V2.01の音色を、Airfont380final.cfgを読み込ませればAirfont380finalの音色を鳴らすことができる状況だとします。
図のように4つのファイルを用意。「C:\timidity\sf2\temp」のフォルダに置かれている。
●cfgファイルには何が書いてあるのか?(注:cfgファイルはドラムだけは他の音色と書き方が少し違います。この説明で使っている図等はドラム以外の音色についてのものです。ドラムについては後述します。)
図はcfgファイルの中身をキャプチャーしたものです。cfgファイルはテキストエディタで開くことができます。
(a)検索パス:使いたいサウンドフォンファイルがおいてあるフォルダを指定します。サウンドフォントファイルはここで指定したフォルダまたは、twsyng.exeと同じフォルダ置く必要があります。「dir $basedir/」と書くと相対パスで指定することができるので便利かと思います。($basedirはTiMidity++に読ませているcfgファイルがあるフォルダを表すようです)
(b)編集後のバンクナンバー:cfgファイルで組んだ音色の並びにおけるバンクナンバーを表します。例えばシーケンサからバンクナンバー0、プログラムナンバー
(c)編集後のプログラムナンバー:cfgファイルで組んだ音色の並びにおけるバンクナンバーを表します。
(d)使うサウンドフォントの指定:「%font サウンドフォント名」と書く決まりだそうです。
(e)使う音色の元ファイル中のバンクナンバー:使いたい音色の、元のサウンドフォントファイル(〜.sf2)中でのバンクナンバー
(f)使う音色の元ファイル中のプログラムナンバー:使いたい音色の、元のサウンドフォントファイル(〜.sf2)中でのプログラムナンバー
一言で説明すると、cfgファイルには「各プログラムナンバー、バンクナンバーに対してどのサウンドフォントファイル(〜.sf2)のどの音色を割り当てるか」が書かれています。この意味は後ほど噛み砕いて説明しますが、そのために先にいくつか理解しておくとよいことがあるので説明します。
●「プログラムナンバー」、「バンクナンバー」とは「プログラムナンバー」と「バンクナンバー」の意味を説明します。
プログラムナンバーとバンクナンバーは、音色に割り当てられた識別番号のようなものと考えればよいと思います。
あるいは、音色が音源の中どこに保存されているかを表す住所のようなものと考えてもよいかと思います。
全ての音色にはプログラムナンバーとバンクナンバーが割り当てられています。
プログラムナンバーとバンクナンバーはそれぞれ0〜127までの数字を使うことができるようです。
図のように128×128=16384個の箱に、音色が入れられているとイメージすると分かりやすいかもしれません。
(バンクナンバーは本当は0〜128まで使えるようです。ただし、バンクナンバー128はドラム専用のようなので、ドラム以外の音色に使えるのは実質的には0〜127の128個と考えてよいと思います)
この図はMSGS(Microsoft GS Wavetable SW Synth)の例です。
MSGSでは、プログラムナンバーとバンクナンバーがこのように割り当てられています。
例えば
プログラムナンバーが0、バンクナンバーが0の音色はPiano 1
プログラムナンバーが4、バンクナンバーが8の音色はDetuned EP1
プログラムナンバーが127、バンクナンバーが2の音色はLaser Gun
です。
同系統の音色には同じプログラムナンバーを割り当てるようです。(表を横に見ると同系統の音色があります)
図を見ると割とスカスカなのがわかるかと思います。(私の知る限り、一つの音源にはせいぜい千種類位しか音色が用意されていないので当然ではありますが)
以上がプログラムナンバーとバンクナンバーの説明です。
●MIDIにおける音色指定のルールプログラムナンバーとバンクナンバーの意味自体は先ほど説明しましたが、ここで重要なのは、「MIDIでは音色の指定をプログラムナンバーとバンクナンバーで行う」ということです。
例として、シーケンサが音源に対して、鳴らす音色をどのように指定するのかを説明します。
シーケンサの例としてDominoを、音源の例としてMSGS(Microsoft GS Wavetable SW Synth)を用います。
図はDominoで音色を選ぶためのウィンドウです。ここでDetuned EP1の音色を選んだとしましょう。
すると曲を再生するときには、Dominoは音源に対して「プログラムナンバー4、バンクナンバー8が割り当てられている音色を鳴らしてくれ」という命令を出すことになります。
そして、その命令を受け取ったMSGSは、自身の中から「プログラムナンバーが4、バンクナンバーが8の音色」を探してきて鳴らします。
音色を指定するのに、その音色の名前ではなくて、その音色に割り当てられたプログラムナンバーとバンクナンバーを使っていることが重要です。
MSGSは「Detuned EP1の音色鳴らしてくれ」のように音色の名前で言われても、その音色がどこにあるのかが分かりません。
MSGSに出来るのは「指定されたプログラムナンバー、バンクナンバーに対応する音色を鳴らす」ことです。
これを例えるならば、学校の靴箱から、他人に自分の靴を取ってきてもらう時のお願いの仕方に似ています。
自分が小学校の生徒とします。校舎が土足厳禁で、入り口で上履きに履き替えるものとします。この状況で、友達に自分の靴を取ってきてもらいたい時にどのようにお願いするかを考えてみましょう。普通、他人の靴が靴箱のどこに置いてあるかをいちいち覚えていません。
なので、「靴箱の上から何段目、左から何列目のところにある靴を取ってきて欲しい」というように、靴が置いてある場所を指定してお願いするはずです。
「靴箱から私の靴を取ってきて欲しい」とお願いしても、友達は「私の靴」がどこに置いてあるか分かりません。
この例え話と音色指定の話は次のように対応します。
私=Domino
友達=MSGS
私の靴=Detuned EP1の音色
「自分の靴は上から何段目、左から何列目にあるか」=「Detuned EP1はプログラムナンバーが何番、バンクナンバーが何番であるか」
例え話は以上です。
以上が、シーケンサが音源に対して、鳴らす音色をどのように指定するのかという説明です。
言いたいことは、「MIDIでは音色の指定をプログラムナンバーとバンクナンバーで行う」ということです。
この音色の指定の仕方はMIDIファイルをMIDIプレーヤで再生するときも同じです。
MIDIファイルには「このプログラムナンバー、このバンクナンバーの音色を鳴らしてくれ」という命令が書いてあります。
それをMIDIプレーヤが読み込んで、音源に伝えることになります。
●音源によってナンバーの割り当てが違うと次に少し話は脱線しますが、cfgファイルの理解のために別の説明をします。
先ほど説明した通り、MIDIでは音色の指定をプログラムナンバーとバンクナンバーで行います。ということは、「プログラムナンバーとバンクナンバーの割り当て方が違う音源を使った場合、同じMIDIファイルを再生しても、鳴る音色が全く別のものになる」ということがおこり得ます。
このことについて具体的に説明します。
例としてMSGSと、別のある音源Aについて考えてみましょう。MSGSでは図のようにプログラムナンバーとコントロールナンバーが割り当てられています。
音源Aでは図のようにプログラムナンバーとコントロールナンバーが割り当てられているとします。
例えばMIDIファイルに「プログラムナンバー2、バンクナンバー0の音色を鳴らせ」という命令が書いてあったとします。
すると、MSGSではPiano 3の音が鳴るのに対して、音源AではXylophoneという別の楽器の音が鳴ります。
あるいはMIDIファイルに「プログラムナンバー4、バンクナンバー8の音色を鳴らせ」という命令が書いてあったとします。
すると、MSGSではDetuned EP1の音が鳴るのに対して、音源Aでは音が鳴りません。なぜなら、音源Bではプログラムナンバー7、バンクナンバー1には音色が割りてられていないからです。
このように音色に対するプログラムナンバーとバンクナンバーの割り当て方が違う音源を使うと、同じ命令を受け取っても、違う楽器の音色が鳴ったり、場合によっては音が鳴らなかったりすることがあります。(このようなことが頻繁にあると面倒なので、実際の音源はどれもある程度は似たような割り当てがされています。それを取り決めているのが。GM、GS、XGなどの規格です)
脱線は以上です。
●SGM-V2.01とAirfont380final組み合わせて使うcfgファイルの説明に戻ります。『cfgファイルには「各プログラムナンバー、バンクナンバーに対してどのサウンドフォントファイル(〜.sf2)のどの音色を割り当てるか」が書かれている』と説明しましたが、これをもう少し噛み砕いて説明します。
サウンドフォントの音色の情報が実際に保存されているのは、「〜.sf2」というファイルです。そのファイルの中には、MSGSと同様にそれぞれのやり方で各音色にプログラムナンバー、バンクナンバーが割り当てられて音色が保存されています。
例えばSGM-V2.01.sf2とAirfont380final.sf2では、図のように割り当てられています。
(もしこれらの「〜.sf2」ファイルを、MSGSなどの他の音源と同じように使うことができるとしたら、(cfgファイルやTiMidity++を経由せずにMSGS等のように直接使うことができたらという意味で)
例えば、再生するMIDIファイルに「プログラムナンバー2、バンクナンバー0の音色を鳴らせ」という命令が書いてあったとしたら、SGM-V2.01.sf2ではPiano3の音色が、Airfont380final.sf2ではCP-80Pianoの音色が鳴るはずです)
cfgファイルはそれらを組み合わせて、新たに音色にプログラムナンバーとバンクナンバーを割り当て直す役割を持っているのです。
例えば、SGM-V2.01.sf2とAirfont380final.sf2の音色を組み合わせて、図の様に割り当て直すことが可能です。
これを意識しながらcfgファイルの中身を詳しく説明していきます。
図は、先ほどのように割り当てるために書かれたcfgファイルのキャプチャです。
新しいプログラムナンバーとバンクナンバーの割り当てをひたすら並べてあります。青字の部分はベースにしたSGM-V2.01.cfgから書き換えた部分です。
例えば青字でかかれた4行について、その意味を説明します。上の行から順に、
バンクナンバーが0、プログラムナンバーが3の音色としては、Airfont380final.sf2のバンクナンバーが0、プログラムナンバーが3の音色を使う。
バンクナンバーが1、プログラムナンバーが5の音色としては、Airfont380final.sf2のバンクナンバーが0、プログラムナンバーが4の音色を使う。
バンクナンバーが1、プログラムナンバーが6の音色としては、Airfont380final.sf2のバンクナンバーが0、プログラムナンバーが6の音色を使う。
バンクナンバーが2、プログラムナンバーが5の音色としては、Airfont380final.sf2のバンクナンバーが0、プログラムナンバーが5の音色を使う。
という意味です。
このように好きなように割り当て直すことが可能です。
ちなみに、SGM-V2.01.cfg、Airfont380final.cfgは、元のサウンドフォントファイルにおけるプログラムナンバーとバンクナンバーの割り当て方と同じになるように書かれています(多分)。
●ドラムについてドラムだけはcfgファイルの書き方が少し違うので個別に説明しまします。ドラムの各音色にはプログラムナンバーとバンクナンバーの他に、キーナンバーという数字が、割り当てられています。これは、ドラムの音色はキーによって(音の高さによって)スネアドラムだったり、シンバルだったりと音色が違うからだと思われます。キーナンバーがあることによって、キーごとにどのサウンドフォントのどの音色を使うかを指定することが可能になります。キーナンバーは0〜127を使うことができます。音の高さで言えば、0が一番低く、127が一番高いです(ドラムの打ち込みをする際のピアノロール画面をイメージするとわかりやすいかもしれません)。
ドラムの場合、バンクナンバーは宣言不要で、全ての音色に自動的に128を割り当てるようです(多分)。
図はSGM-V2.01.cfgのドラムの割り当てが書かれた部分をキャプチャしたものです。
(g)がプログラムナンバー、(h)がキーナンバーを表しており、ドラム以外の音色の指定の時とは、変わっている点に注意してください。
意味は例えば一行目は
バンクナンバーが128、プログラムナンバーが0、キーナンバーが0の音色としては、SGM-V2.01.sf2のバンクナンバーが128、プログラムナンバーが0、キーナンバーが0の音色を使う。
という意味です。キーごとに違うサウンドフォントの音色を使うことも可能です。
■最後に■この記事を書くにあたって、というか私自身が使えるようになるために
「羽根のあるところ」様
http://bluewing.usamimi.info/timidity/intro.htmlの説明をかなり参考にさせて頂きました。特にcfgファイルの図は真似させて頂いています。こちらのサイトも是非ご参照下さい。
気が向いたら、次は「自分で組み合わせたサウンドフォントをDominoで楽に使うにはどうするか(定義ファイルの書き換え)」をまとめてみようかなと思います。