timidity.cfg の書式についてまとめてみよう
基本的に一行にひとつの命令が書いてあります
# 例 dir ~/.timidity.d/eawplus bank 0 0 GUS/acpiano.pat amp=60
効能はさておいて、書式だけから見ると、 timidity.cfg の命令には以下の書式があります
# コメントの例
# 例 #extension altassign 42 44 46
# 例 81 inst/tamupat/sawwave.pat amp=100
# 例 source goemon/goemon.cfg
パスを指定する命令などで、パスに空白が含まれていてどうしましょう、という場合は、パス全体を "" や '' でくくるとよいです。
# 例 dir "/cygdrive/c/Program Files/TiMidity" # ← Win の人にありがちなパターン
パスに "#" を含めることで、アーカイブファイルを扱うことができます。
# 例 dir ~/gus.tar.gz# 0 acpiano.pat # ← gus.tar.gz の中の acpiano.pat が読み込まれる #*.cfgファイルたちも一緒にしておけば, source /usr/share/timidity/patchset.tar.gz#timidity.cfg #で行けるでしょう。
ネットワーク経由でファイルを取得することもできます。
# 例 source http://example.com/timidity/patchset.tar.gz#timidity.cfg # ↑このようにネットワーク越しアーカイブとかもOK
(UN*X系 および Cygwin 限定)パスの先頭が "|" で始まっている場合はパイプを生成します。この機能はセキュリティホールになり得るので使用には注意が必要です。
ドル記号($)に続けて英数字やアンダースコア(_)が続いている場合、その文字列は変数と見なされ、cfgファイルを処理する際に別の文字列に置き換えられます。 この変数名は後続の文字と区別するために、中括弧付きで表記することもできます。
# 例 $variable ${variable} # $variable と同義
変数を新たに定義する命令は今のところ用意されていません。未定義の変数は空文字に置き換えられます。
source path/to/cfg [...]
コンフィグファイル path/to/cfg の内容を読み込みます。source のネストは 50 段まで可能です。
dir /path/to/dir [...]
source などでパスを指定するときの、相対パスの基準を指定します。 複数の dir 命令がある場合、最後に指定したディレクトリから順にファイルが見つかるまで検索が行われます。
dir の振る舞いはコマンドラインオプションの -L と同じです
default path/to/patch
他のどこにも設定がないような音に出会った場合、このファイルが代理として発音されます。
bank num
対象のバンクを num に指定します。
bank mapid num
対象のバンクを mapid マップの num に指定します。 mapidに使える値についてはmap命令を参照してください。
timidity.cfg はステートフルです。大部分の命令にはバンクを記述する箇所がないので、同一コンフィグファイル内で最後に指定された対象バンクが暗黙のうちに採用されます。
drumset num
対象のドラムセットを num に指定します。 bank のドラムセット版と思ってください。
drumset mapid num
対象のドラムセットを mapid マップの num に指定します。 mapidに使える値についてはmap命令を参照してください。
progbase num
バンク・ドラムセット・プログラム番号(ドラムセットを除く)が num から始まるようにします。 TiMidity のデフォルトでは0番から始まりますが、 progbase に 1 を指定すると 1 番から開始になります。
但し、bank / drumset / font exclude / font order / map 命令以外のパラメータには効果がありません(バグ?)。以降のsourceで読み込むコンフィグファイルにも影響を与えるので注意してください。
この命令を使ったことがないので、どのへんが嬉しいのかよく分かりません。
map <mapid> frombank fromprog tobank toprog
GM2/GS/XG各マップの音色として既存の音色を割り当てます。 <mapid>には以下の値をとり得ます
soundfont path/to/soundfont [options ...]
SoundFont path/to/soundfont を最初から最後まで読み込みます(部分的に読み込むにはプログラム指定で %font を使う)。以下のオプションをとります。
font exclude bnum [pnum [knum]]
SoundFont の検索を、バンク bnum 上のプログラム pnum で行わないように指定します。ドラムの場合はバンクが 128 でドラムセットが pnum、キー番号が knum になります。
font order onum bnum [pnum [knum]]
SoundFont 検索順序(上記参照) を個別に指定するためのもの。引数の意味は font exclude と同じです
指定するファイルの種類によって3つの書式があります。
GUSパッチの場合
prog path/to/file [options ...]
path/to/file を現在のバンク(またはドラムセット)の prog 番目に割り当てます。拡張子.patは省略可能です。「現在のバンク(またはドラムセット)」を変更するには bank 命令とか drumset 命令を使ってください。
SoundFontの場合
prog %font path/to/file bnum pnum [knum] [options ...]
サウンドフォントから特定のバンク/プログラム/キー番号の音色データのみを取り出して、それを現在のバンク(またはドラムセット)の prog 番目に割り当てます。
サンプルファイルの場合
prog %sample path/to/file [options ...]
サンプルファイルを現在のバンク(またはドラムセット)の prog 番目に割り当てます。無圧縮のWAV形式とAIFF形式に対応しています。
この命令がとりうるオプションは以下の通り。
0 piano.pat tune=+1
0 piano.pat tune=+0.2
6 GUS/hrpschrd.pat rate=::60
6 GUS/hrpschrd.pat rate=255
現在のバンク(またはドラムセット)の代わりに特定のバンクを指定することもできます。
bank num prog [%font|%sample] path/to/file [options ...] drumset num prog [%font|%sample] path/to/file [options ...]
これは bank / drumset 命令の拡張ですが、「現在のバンク(またはドラムセット)」は変更されません。
# 例: bank 0 24 GUS/nyguitar.pat bank 24 24 GUS/nyguitar.pat amp=80 bank 32 24 GUS/nyguitar.pat amp=95 25 GUS/cleangtr.pat # ← bank 0にセットされる
#extension なんとかかんとか
++拡張命令における接頭辞 "#extension" は、古い TiMidity (++より前)でこれらの命令をコメントアウトするためのものですので、実は現在の実装では単に無視されます。なので、極端な話
opt -A 100 #extension bank 0 comm 0 AcousticGrandPiano?
とか書いても valid ですし、ちゃんと機能します。
以下のタイプがあります。
#extension comm prog str
プログラム prog にコメント str を設定します。このコメントは主にトレース系インターフェースで表示されます。 パラメータを""で括れなかった頃の名残で str 中の","は空白に置換されます。
#extension timeout prog msec
プログラム番号progでmsecミリ秒以上 サステイン状態が続いた場合、音を止めるようにします。
#extension copydrumset drumset
ドラムセット番号drumsetのすべてを現在のドラムセットにコピーします。
#extension copybank bank
バンク番号bankのすべてを現在のバンクにコピーします。
#extension copymap tomap frommap
frommapマップの全てのバンクの音色をtomapマップにコピーします。 frommap, tomapに使える値についてはmap命令を参照してください。
#extension HTTPproxy hostname:port
HTTPプロクシを設定します。プロクシのホスト名をhostnameに、 ポート番号をportに指定します。
#extension FTPproxy hostname:port
FTPプロクシを設定します。プロクシのホスト名をhostnameに、 ポート番号をportに指定します。
#extension mailaddr mail-address
ユーザのメールアドレスをmail-addressに指定します。 このメールアドレスは、FTP接続をプロクシを介さずにダイレクトに行う場合に使用されます。
#extension opt --option=arg
起動時のコマンドラインオプションと同じものがコンフィグファイルからも指定できます。意味、用法、効能ともにコマンドラインから指定するものと一緒です
#extension undef prog
現在のバンクのプログラム番号progを未定義にします。
#extension altassign prog1 prog2 ...
現在のドラムセットについて、オルタネートアサインを設定します。
# 例: drumset 0 #extension altassign 42 44 46
と書くと、ドラムセット0の42/44/46が同時に鳴らなくなります。 概念としてはMIDI音源のアサイングループと同じようなものといえるでしょう。 ドラムセット0で定義されたオルタネートアサインはデフォルトで使用されます。 また、以下のように記述することも可能です。
#extension altassign clear # (すべてのアサイングループを破棄) #extension altassign - # (note 0からnote 127までをアサイングループに) #extension altassign -n # (note 0からnote nまでをアサイングループに) #extension altassign n- # (note nからnote 127までをアサイングループに) #extension altassign m-n # (note mからnote nまでをアサイングループに)
#extension legato prog (0|1)
プログラム prog でレガートをかける(1)、かけない(0)の指定。
#extension level progs tva_level
NRPNのDrum Instrument TVA Levelを処理する際、音量を変化させる基準となる値を設定します。
曲中でDrum Instrument TVA Levelが指定されないかぎり音量には一切影響しません。あくまで基準値です。
progsは","や[start]-[end]で一括指定できます。start、endは省略すると0、127と見なされます。
#extension damper prog (0|1)
プログラム prog でリダンパー効果およびハーフダンパーを有効にする(1)、無効にする(0)の指定。
#extension playnote progs note
ドラムセット音色の出音周波数を note とします。GS SysEx Play Noteで出音周波数が指定された場合にこの設定値を元にピッチを適切に変化させます。
progsは","や[start]-[end]で一括指定できます。start、endは省略すると0、127と見なされます。
# 例: drumset 0 #extension playnote -37,39,44-46,55- 60
#extension reverbsend progs level #extension chorussend progs level #extension delaysend progs level
ドラムパート・エフェクトがオンの場合のセンドレベルを設定します。 初期値は全て127ですが、reverb、chorus、delayのどれかひとつでも設定されていれば、その音色に設定されていないエフェクトは初期値0になります。
progsは","や[start]-[end]で一括指定できます。start、endは省略すると0、127と見なされます。
#extension rnddelay prog msec
最大msecミリ秒以内のディレイを、発音毎にランダムで付加します。 ランダム値の分布はホワイトノイズというよりむしろピンクノイズ(1/fゆらぎ)です。
定義されている変数は次の1つだけです。
cfgファイルのあるディレクトリを表します。主にパスを指定する命令でcfgファイルからの相対パスを指定する目的で使います。
$basedirに空白が含まれるかもしれない場合は""で括る必要があります。
# 例 gm/gm.cfg内で source $basedir/tones.cfg # source gm/tones.cfgと解釈される source $basedir/drums.cfg # source gm/drums.cfgと解釈される
*1 コメントは必ずしも行頭から始まってる必要はありませんが
Keyword(s):
References:[FrontPage.ja]