(2016/07/29-2)cfgファイルの扱い方


bat4cfg4sfの解説ついでにcfgファイル自体の解説もしちゃうぜ系ページです。
ここでは具体例として、個人的に好きな総合サウンドフォント "SGM-V2.01.sf2" と、
それから生成したcfgファイル "SGM-V2.01.cfg" を元に解説をします。



  1. とりあえずcfgをTimidity++に追加

  2. 生成したcfgファイルは、Timidity++の詳細設定の設定ファイル編集画面にて、
    サウンドフォントを指定するのと同じように音源として指定し追加することができます。
    ただし、設定ファイルをエディタなどで直接記述する場合は、以下のように記法に注意してください。
    soundfont "SGM-V2.01.sf2"
    soundfont "SGM-V2.01.cfg"
    source "SGM-V2.01.cfg"
    ← サウンドフォントならこう書くが…
    ← cfgファイルはこれではダメ
    ← こう書けばOK

    といっても、生成したcfgファイルをそのまま使うのでは意味がありません。
    cfgファイルは、複数のサウンドフォントから特定の音色を抜き出し組み合わせて使うためにあるのですから。


  3. cfgファイルの書式

  4. 生成したcfgファイルをメモ帳などで開くと、ファイルの中身は↓画像↓のような記述がされています。

    早速この画像の2行目の意味を読み解くと、こういう内容になっています。
    "SGM-V2.01.sf2"プログラムチェンジ番号0番バンク0番の音色を、
    このcfgファイル("SGM-V2.01.cfg")のプログラムチェンジ番号0番バンク0番に割り当てるヨ!」

    そうなんだ、すごいね。


    より一般化した形で中身の書式について説明すると、各行の記述は以下の二種類に大分されます。
    BPbpはそれぞれ0以上の整数として見てください。

    そういうわけで、画像の2行目の「0 %font SGM-V2.01.sf2 0 0」というのは、
    この行自体が同ファイル1行目の「bank 0」の段落内にありますから、
    上に書いたような意味の記述になっているということです。

    まぁ、文章でお固く説明するより上記の画像の手書き解説を見た方がわかりやすいでしょう。見てネ。
    仮に理解できなくても、習うより慣れろでとりあえず次の章に進んでみてください。


  5. 音色の割り当てを個別に編集

  6. ここからがcfgファイルの本領発揮です。
    例として、以下の実現を考えます。
    「MIDIデータ側でPC2番・バンク1番の音色を選択した時、
    実際には "SGM-V2.01.sf2" のPC0番・バンク0番の音色を鳴らすぜ!」

    まぁ大したことではありません。
    以下のような手順でcfgファイルを編集することで可能となります。


    これによって、「bank 1」の段落内に「2 %font SGM-V2.01.sf2 0 0」という行ができれば試合終了です。
    もし「bank 1」という段落を持たないファイルだったとしたら、勝手にそういう段落を作っちゃって大丈夫です。


    また、こういうこともできます。
    「"SGM-V2.01.sf2" のPC0番・バンク0番の音色を、全く使わないぜ!」

    これは、該当の行を単純に削除してももちろんいいのですが、
    後でやっぱり使うぜとなった場合にも備えると、なるたけ復元可能な書き方で無効にできた方が賢いです。
    こういう時、「#」記号でコメントアウト(記号から行末までの記述の無効化)が使えます。
    今回なら2行目の頭につけて「# 0 %font SGM-V2.01.sf2 0 0」という書き方にするだけでOKです。


    コメントアウトの効果が及ぶのは行末までですから、
    例えば3行目で「1 %font SGM-V2.01.sf2 0 1 # うんこ」と書いたとしても、
    うんこの部分は無効化されますがそれより前の音色指定記述は有効ですので、
    別にエラーとかは出ずにちゃんと鳴ります。
    これを利用して、自分がやった変更の備忘録として文末にコメントを記録しておくような使い方もできます
    (というか、そっちが本来の使い方でしょうね)。


  7. 複数のcfgファイルで音色を自由に割り当て

  8. 以上が理解できれば、例えば
    「基礎となる総合音源には "SGM-V2.01.sf2" を使うけど、
    PC0番・バンク0番のピアノだけは "ClavinovaPiano1V2.0" の音色を使い、
    元のSGMでそこにあったピアノの音色はPC0番・バンク1番に避難させておくぜ!」

    みたいな高度な組み合わせも、自由自在に可能となるわけです。
    さあレッツチャレンジ。
    変更のたびにTimidity++の再起動は必要ですけどね、たぶん。




余談ですが、少なくとも私の環境ではsf2ファイルよりcfgファイルの方が優先されるらしく、
各ファイルで同じ番号の音色が重複して存在する場合に、
設定ファイル内でsf2の方を高順位に置いてもcfgファイルの音色が鳴ってしまいます。

そのため、重複する番号の音色は必ずコメントアウトするか、
音色の割り当てを全く変更しないサウンドフォントも必ずcfgファイル化して適用せざるを得ません。
個人的には、いちいち重複音色を特定してコメントアウトするのは面倒ですし汎用性も下がるので、
ファイルが多少増えて煩雑になるとしても後者のやり方でやっています。

Timidity++そのものの仕様なのか、私の環境でのバグなのかはわかりませんが、
一例として書き記しておきます。


そんなかんじで。