# (ja)timidity.cfg

- 情報源
- 基本の書式

- 一行一命令
- 書式でみた分類
- パスの書式
- 変数

- 具体的な書式と用法

- source
- dir
- default
- bank
- drumset
- progbase
- map
- soundfont
- font exclude
- font order
- プログラム指定

- バンク指定付きプログラム指定

- ++拡張命令

- comm
- timeout
- copydrumset
- copybank
- copymap
- HTTPproxy
- FTPproxy
- mailaddr
- opt
- undef
- altassign
- legato
- level
- damper
- playnote
- reverbsend / chorussend / delaysend
- rnddelay

- 既定の変数

- $basedir

timidity.cfg の書式についてまとめてみよう

## 情報源

- timidity.cfg(5) : 古すぎ。今となってはほとんど役に立たんすげー頑張って書き直した。up-to-dateのはず。
- TiMidity++ 設定ファイル詳解 : man ページよりはやや詳細。でもやっぱり古い。
- ソースファイルの timidity/timidity.c : 関数 read_config_file が本体。ソースだけにバグも含めて最新の情報が完全に記述されている……が、人間に読める形式じゃない。

## 基本の書式

### 一行一命令

基本的に一行にひとつの命令が書いてあります

     # 例
     dir ~/.timidity.d/eawplus
     bank 0
     0 GUS/acpiano.pat amp=60

### 書式でみた分類

効能はさておいて、書式だけから見ると、 timidity.cfg の命令には以下の書式があります

コメント
  行頭が # で始まってるやつ*1

     # コメントの例

++拡張命令
  行頭が #extension で始まってるやつ

     # 例
     #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

     source path/to/cfg [...]

コンフィグファイル path/to/cfg の内容を読み込みます。source のネストは 50 段まで可能です。

### dir

     dir /path/to/dir [...]

source などでパスを指定するときの、相対パスの基準を指定します。 複数の dir 命令がある場合、最後に指定したディレクトリから順にファイルが見つかるまで検索が行われます。

dir の振る舞いはコマンドラインオプションの -L と同じです

### default

     default path/to/patch

他のどこにも設定がないような音に出会った場合、このファイルが代理として発音されます。

### bank

     bank num

対象のバンクを num に指定します。

     bank mapid num

対象のバンクを mapid マップの num に指定します。 mapidに使える値についてはmap命令を参照してください。

timidity.cfg はステートフルです。大部分の命令にはバンクを記述する箇所がないので、同一コンフィグファイル内で最後に指定された対象バンクが暗黙のうちに採用されます。

### drumset

     drumset num

対象のドラムセットを num に指定します。 bank のドラムセット版と思ってください。

     drumset mapid num

対象のドラムセットを mapid マップの num に指定します。 mapidに使える値についてはmap命令を参照してください。

### progbase

     progbase num

バンク・ドラムセット・プログラム番号（ドラムセットを除く）が num から始まるようにします。 TiMidity のデフォルトでは0番から始まりますが、 progbase に 1 を指定すると 1 番から開始になります。

但し、bank / drumset / font exclude / font order / map 命令以外のパラメータには効果がありません（バグ？）。以降のsourceで読み込むコンフィグファイルにも影響を与えるので注意してください。

この命令を使ったことがないので、どのへんが嬉しいのかよく分かりません。

### map

     map <mapid> frombank fromprog tobank toprog

GM2/GS/XG各マップの音色として既存の音色を割り当てます。 <mapid>には以下の値をとり得ます

- バンク
  - gm2
  - sc55
  - sc88
  - sc88pro
  - sc8850
  - xg
  - xgsfx64
- ドラムセット
  - gm2drum
  - sc55drum
  - sc88drum
  - sc88prodrum
  - sc8850drum
  - xgdrum
  - xgsfx126

### soundfont

     soundfont path/to/soundfont [options ...]

SoundFont path/to/soundfont を最初から最後まで読み込みます(部分的に読み込むにはプログラム指定で %font を使う)。以下のオプションをとります。

remove
  対象の SoundFont を逆にメモリ上から廃棄します
order=num
  音色データを探す順番を設定します。
  order=0のときは、まずサウンドフォントを読み込んで、その後に足りないサンプルに付いてはGUSパッチから探します。 order=1のときは、GUSパッチを読んだ後にサウンドフォントを読み込みます
amp=num
  全体の音量を num % にします。無指定なら100%に設定されます。
cutoff=(0|1)
  サウンドフォントに設定されたLPFの有効(1)無効(0)を指定します。無指定なら有効。
reso=(0|1)
  サウンドフォントに設定されたレゾナンスの有効(1)無効(0)を指定します。無指定なら有効。

### font exclude

     font exclude bnum [pnum [knum]]

SoundFont の検索を、バンク bnum 上のプログラム pnum で行わないように指定します。ドラムの場合はバンクが 128 でドラムセットが pnum、キー番号が knum になります。

### font order

     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形式に対応しています。

この命令がとりうるオプションは以下の通り。

amp=num
  音量を num にします。単位は %
note=num
  再生時に鳴らすノートをnoteに固定します。 noteを0とすると、最初にノート・オンイベントが発生した時点でのノートを使用します。パーカッション音色でnoteが指定されない場合、パッチファイルの標準値が利用されます。
pan=panning
  パンの初期値の指定。固定ではありません。 MIDI イベントでパニングが変更されたときには従いますので注意。値としては"center"、"left"、"right"という言葉での指定と、100(右端)から-100(左端)のあいだの数値での指定のいずれかが可能です。
tune=num[,num[, ...]]
  パッチファイルの音程を調整します。例えば、

     0 piano.pat tune=+1

  とすれば1半音上がります。 numberには小数が利用可能なので、

     0 piano.pat tune=+0.2

  などの微調整も可能です。二つ目以降の引数は音域別に複数のサンプルデータが含まれている場合に、それぞれに別の値を指定できます。
fc=num[,num[, ...]]
  フィルター・カットオフ周波数の基準値を設定します。単位はHzです。 tune と同じく、","で区切ることで複数のサンプルに対する設定が可能です。
q=num[,num[, ...]]
  フィルターのQ（レゾナンス）を設定します。単位はcBです。tuneと同じく、","で区切ることで複数のサンプルに対する設定が可能です。
trempitch=num[,num[, ...]]
  トレモロに従ってピッチを変化させる深度を設定します。効果そのものはビブラートと一緒ですが、別系統で動作させたいときに利用します。単位は+-centです。tuneと同じく、","で区切ることで複数のサンプルに対する設定が可能です。
tremfc=num[,num[, ...]]
  トレモロに従ってフィルター・カットオフ周波数を変化させる深度を設定します。いわゆる「グロウル効果」を表現できます。単位その他はtrempitchと同一です。
modpitch=num[,num[, ...]]
  モジュレーション・エンベロープに従ってピッチを変化させる深度を設定します。アタック時だけ一時的に音程が上がるなどの表現が可能です。単位その他はtrempitchと同一です。
modfc=num[,num[, ...]]
  モジュレーション・エンベロープに従ってフィルター・カットオフ周波数を変化させる深度を設定します。単位その他はtrempitchと同一です。
fckeyf=num
  フィルター・キーフォローを設定します。note=60を基準として、noteに従いカットオフ周波数を変化させます。単位は+-cent/keyで、例えば100を指定すれば音程と同じだけ変化します。
fcvelf=num
  フィルター・ベロシティフォローを設定します。velocity=127を基準として、velocityに従いカットオフ周波数を変化させます。 単位は+-centで、SoundFontでは-2400が固有値として設定されています。
qvelf=num
  レゾナンス・ベロシティフォローを設定します。velocity=0を基準として、velocityに従いレゾナンスを変化させます。単位は+-cBです。
keep=(loop|env)
  通常、パーカッション音色のループとエンベロープは破棄され、 一般の音色でも不正なエンベロープは取り除かれます。keep=を使うと、こういった ループやエンベロープを強制的に維持することができます。
strip=(loop|env|tail)
  パッチファイルのループやエンベロープの情報を強制的に破棄することができます。 またstrip=tailを指定すると、 ループの後が除去されます。これは主にクリック・ノイズ対策に利用されるものです。
comm=str
  コメントが指定できます。 #extension comm と同じ効果です
rate=attack:decay:sustain:release1:release2:release3?
  パッチファイルのADSR変化速度を設定するオプションです。0〜255の値が指定できます。サステインレートだけを補正したい場合など、

     6 GUS/hrpschrd.pat rate=::60

  のような狙い撃ち設定も可能です。 また、アタックタイムを速くしたいだけであれば、

     6 GUS/hrpschrd.pat rate=255

  という書き方ができます。
  ここでも、a1:d1:s1:r1 1:r21:r31,a2:d2:s2:r12:r22:r32,a3:d3:s3:r13:r23:r33 のように“,”で区切ることで，複数のサンプルに対する設定が可能です。
offset=attack:decay:sustain:release1:release2:release3?
  パッチファイルのADSRオフセットを設定するオプションです。0〜255の値が指定できます。 書式についてはほぼrate=と同様です。複数サンプルに対する "," での指定も有効です
tremolo=sweep_increment:phase_increment:depth?
  トレモロを設定するオプションです。0〜255の値が指定できます。 rate=同様狙い撃ち設定や不要部分の省略が可能です。
  sweep_incrementは発音してからトレモロが掛かり始めるまでの時間、 phase_incrementは振幅 / 周波数が変化する速さ、depthは振幅 / 周波数が変化する深さです。
  ここでも、rate=同様複数のサンプルに対する設定が可能です。
vibrato=sweep_increment:phase_increment:depth?
  ビブラートを設定するオプションです。0〜255の値が指定できます。 書式についてはほぼtremolo=と同様です。複数サンプルに対する "," での指定も有効です
sclnote=note[,...]
  スケールチューニングの基準とするノートを設定します。例えば，sclnote=60 とすれば，真ん中のドを中心にスケールチューニングが行われます。
scltune=tune[,...]
  スケールチューニングの度合いを cent 単位で設定します。例えば， scltune=50 とすれば，ノート間隔が50 cent になります。
modrate=attack:decay:sustain:release1:release2:release3?
modoffset=attack:decay:sustain:release1:release2:release3?
  モジュレーション・エンベロープの変化のしかたを設定します。
  設定方法や値は基本的にボリューム・エンベロープと同じです。一部のSoundFontを除けば、このオプションだけを指定しても何も起こりません

#### バンク指定付きプログラム指定

現在のバンク(またはドラムセット)の代わりに特定のバンクを指定することもできます。

     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 ですし、ちゃんと機能します。

以下のタイプがあります。

#### comm

     #extension comm prog str

プログラム prog にコメント str を設定します。このコメントは主にトレース系インターフェースで表示されます。 パラメータを""で括れなかった頃の名残で str 中の","は空白に置換されます。

#### timeout

     #extension timeout prog msec

プログラム番号progでmsecミリ秒以上 サステイン状態が続いた場合、音を止めるようにします。

#### copydrumset

     #extension copydrumset drumset

ドラムセット番号drumsetのすべてを現在のドラムセットにコピーします。

#### copybank

     #extension copybank bank

バンク番号bankのすべてを現在のバンクにコピーします。

#### copymap

     #extension copymap tomap frommap

frommapマップの全てのバンクの音色をtomapマップにコピーします。 frommap, tomapに使える値についてはmap命令を参照してください。

#### HTTPproxy

     #extension HTTPproxy hostname:port

HTTPプロクシを設定します。プロクシのホスト名をhostnameに、 ポート番号をportに指定します。

#### FTPproxy

     #extension FTPproxy hostname:port

FTPプロクシを設定します。プロクシのホスト名をhostnameに、 ポート番号をportに指定します。

#### mailaddr

     #extension mailaddr mail-address

ユーザのメールアドレスをmail-addressに指定します。 このメールアドレスは、FTP接続をプロクシを介さずにダイレクトに行う場合に使用されます。

#### opt

     #extension opt --option=arg

起動時のコマンドラインオプションと同じものがコンフィグファイルからも指定できます。意味、用法、効能ともにコマンドラインから指定するものと一緒です

#### undef

     #extension undef prog

現在のバンクのプログラム番号progを未定義にします。

#### altassign

     #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までをアサイングループに)

#### legato

     #extension legato prog (0|1)

プログラム prog でレガートをかける(1)、かけない(0)の指定。

#### level

     #extension level progs tva_level

NRPNのDrum Instrument TVA Levelを処理する際、音量を変化させる基準となる値を設定します。

曲中でDrum Instrument TVA Levelが指定されないかぎり音量には一切影響しません。あくまで基準値です。

progsは","や[start]-[end]で一括指定できます。start、endは省略すると0、127と見なされます。

#### damper

     #extension damper prog (0|1)

プログラム prog でリダンパー効果およびハーフダンパーを有効にする(1)、無効にする(0)の指定。

#### playnote

     #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

#### reverbsend / chorussend / delaysend

     #extension reverbsend progs level
     #extension chorussend progs level
     #extension delaysend progs level

ドラムパート・エフェクトがオンの場合のセンドレベルを設定します。 初期値は全て127ですが、reverb、chorus、delayのどれかひとつでも設定されていれば、その音色に設定されていないエフェクトは初期値0になります。

progsは","や[start]-[end]で一括指定できます。start、endは省略すると0、127と見なされます。

#### rnddelay

     #extension rnddelay prog msec

最大msecミリ秒以内のディレイを、発音毎にランダムで付加します。 ランダム値の分布はホワイトノイズというよりむしろピンクノイズ（1/fゆらぎ）です。

### 既定の変数

定義されている変数は次の1つだけです。

#### $basedir

cfgファイルのあるディレクトリを表します。主にパスを指定する命令でcfgファイルからの相対パスを指定する目的で使います。

$basedirに空白が含まれるかもしれない場合は""で括る必要があります。

     # 例 gm/gm.cfg内で
     source $basedir/tones.cfg  # source gm/tones.cfgと解釈される
     source $basedir/drums.cfg  # source gm/drums.cfgと解釈される

Last modified:2006/09/10 12:54:11
Keyword(s):
References:[FrontPage.ja]

*1 コメントは必ずしも行頭から始まってる必要はありませんが