TiMidity++
TiMidity++はMIDIプレーヤーで,MIDIデータをPCMに変換しながら演奏する。
あらかじめ用意された音色データ・ファイル(SoundFont)とMIDIファイルから,リアルタイムに音を合成しながら再生することが出来る。
再生だけではなく,各種の音声フォーマットのファイルとして書き出すことも出来る。
使用する音色データ・ファイルによるが,市販されている音源モジュールに匹敵する音を出すことも可能。
音色ファイルもインターネットで無料で使用できるデータや,有料の高品質のデータなど多くの音色データを使用できる。
元はTuukka Toivonen氏が作ったTiMidity 0.2iで1995年にリリースされたが,それ以降TiMidityの開発は行われなくなった。
その後出雲正尚氏らに開発が引き継がれ,プロジェクト名もTiMidity++と変更された。
以下のような特徴がある。
- 外部のハードウェアを一切使わずにMIDIファイルを演奏することが出来る
- いろいろなフォーマットのファイルの読み込みに対応している
- SMF (Format 0, 1, 2)
- MODファイル
- RCP, R36, G18, G36 (レコンポーザ形式)
- MFi (Version 3)
- 対応している出力フォーマット
- RIFF WAVE (*.wav)
- SUN AU (*.au)
- Apple Interchange File Format (*.aiff)
- Ogg Vorbis (*.ogg)
- MPEG-1 Audio layer 3 (*.mp3)
- 音色データして以下のフォーマットが使える
- Gravis Ultrasound互換パッチファイル
- SoundFont
- AIFFおよびWAVデータ(多少制限がある)
- 演奏中に楽曲の情報を表示
- 演奏中にスペクトログラムの表示
- 演奏をトレースして表示
- マルチプラットフォーム対応
Windows,Linux,MacOS Xでも使用できる。
GUIとコマンドライン版がある。
- URIを指定することでのネットワーク上のMIDIファイルを直接演奏出来る
- アーカイブファイルから解凍せずに直接演奏出来る
- tarアーカイブ (*.tar)
- gzip圧縮済みtarアーカイブ (*.tar.gz, *.tgz)
- Zip圧縮ファイル (*.zip)
- LHa圧縮ファイル (*.lzh)
TiMidity++のMIDIプレーヤーから,発音部を独立させて音源モジュールとしても使用できるようにしたソフトウェアも派生版として開発されている。
TiMidity++のインストール
Windowsで動作するTiMidity++は出雲氏オリジナルのもの,その派生版のMIDI音源モジュール対応のもの,さらにそれらの派生版のものなど,いくつかある。
TWSYNTHプロジェクトの最終版をインストールする場合
オリジナルのTiMidity++から単独の音源モジュールとして使用できるようにした派生版。
twsynthプロジェクトのリリースファイルのページから,TiMidity-CVS081206_setup_JPN.exeがダウンロードできる。
ダウンロードしたTiMidity-CVS081206_setup_JPN.exeを実行しインストールする。
Windows 10だとTimidity++ Driver(MIDI Driver)はデジタル署名されていないので,マークを外してインストールしないようにする。
次へをクリックして終了すれば,インストールは完了。
MIDIプレーヤーのtimw32g.exeを起動して,MIDIファイルをドラッグ&ドロップして演奏されればインストールはうまくいっている。(インストール時にサイズ9MBのA320U.sf2のSoundFontがインストールされているので,音がでる。)
twsyng.exeは,TiMidity++のMIDIプレーヤーから発音部を独立させたシンセサイザー音源モジュール。
MIDIマッパーやloopMIDI等のMIDI Driver(Virtual MIDI Cable)を使って接続すれば,音源モジュールとして他のアプリケーションから使用できる。
好きなSoundFontを読み込むようにtimidity.cfgで設定する。
TiMidity++ 41版をインストールする場合
TiMidity++ 41版は,TiMidity++の非公式フォーク版。時々更新されている。
開発はこちらのサイトで続けられているのでおすすめ。
インストールするには,TiMidity++ 41版開発サイトのreleasesから,使用しているPCに合っているファイル(例:
tim41.7.2-x64-sse42.zip)をダウンロードして任意のディレクトリに解凍する。
timw32g.exeをダブルクリックして起動すると,初期設定ファイルのtimpp32g.iniファイルが作成される。
設定>設定ファイルでtimidity.cfgファイルの場所の指定ができるので,timidity.cfgファイルを作成して,指定しておく。
timidity.cfgファイルの例:
dir "C:\WinApl\Sound\SoundFont\SGM"
soundfont "SGM.sf2"
x86(32bit版)とx64(64bit版)があり,それぞれのMIDIプレーヤーのtimw32g.exeを実行して,MIDIファイルをドラッグ&ドロップして演奏されればインストールは完了。
発音部を独立させたシンセサイザーモジュールtwsyng.exeも入っている。
Timidity++ Driver(MIDI Driver)はサポートされていないが,loopMIDI等を使えば各種アプリから利用できる。
UbuntuにTiMidity++をインストール
パッケージ管理ツールでインストールできる。
# apt install timidity timidity-interfaces-extra
音色データもパッケージ化されているものがある。
# apt install freepats fluid-soundfont-gm fluid-soundfont-gs
MIDIプレーヤーを起動するには,
とします。この場合,音色データはfreepatsを標準で使用します。
$ timidity -ig -Oe -x 'source /etc/timidity/fluidr3_gs.cfg'
とすれば,音色データにFluid R3を使うようになる。
Timidity++の設定ファイル
Timidity++の動作設定は,timpp32g.iniで指定されている設定ファイルtimidity.cfgで行います。
音源モジュール・シンセサイザーでもtwsyng32.iniで指定されていて通常は同じtimidity.cfgで行います。
timidity.cfgでは,音色データ(SoundFontやGUS Patch)の置き場所,音色自体の設定,その他の設定することが出きます。
TiMidity++は起動時にコマンドラインオプションを見る前に,timidity.cfgを参照しに行きます。
このファイルにアクセスできない場合,またライブラリパスがコマンドラインで-Lオプションによって変更されている場合は,すべてのオプションを見た後に,新しいライブラリパスに従ってデフォルトファイルを(-c オプションで別の設定ファイルが指定されていないならば)再度参照しに行きます。
設定ファイルでは,MIDIプログラムのインスツルメントへのマッピングを定義します。
もし複数のファイルが指定された場合には,後に読み込まれた設定によって前の設定が上書きされるようです。
timidity.cfgの例
dir "C:\WinApl\Sound\soundfont"
#soundfont "FluidR3 GM.SF2"
#soundfont "FluidR3 GS.SF2"
#soundfont "GeneralUser GS.sf2"
soundfont "SGM.sf2"
最初のdirで,SoundFontがあるディレクトリを指定する。
#は通常はコメントとして処理される。
ファイルは,Shift-JISで保存する。
変数
ドル記号$に続けて英数字やアンダースコア_が続いている場合その文字列は変数と見なされて,設定ファイルを処理する際に別の文字列に置き換えられます。
この変数名は後続の文字と区別するために,中括弧付きで表記することもできます。
例:
$variable
${variable} # $variable と同義
変数を新たに定義する命令は特に用意されていません。未定義の変数は空文字に置き換えられます。
規定の変数として定義されている変数は,次の1つだけです。
これは設定ファイルが存在するディレクトリを表します。設定ファイルからの相対パスを指定する目的で使います。
$basedirに空白が含まれるかも知れない場合は,""で括る必要があります。
例:
C:\WinApl\Sound\timidity\timidity.cfgが,
とした場合は,
dir C:\WinApl\Sound\timidity\inst
と解釈される。
文法
設定ファイル中には以下の書式が指定出来る。
- dir directory [...]
directoryを探索パスに加えます。加え方は-Lオプションと同様です。
TiMidity++では,アーカイブファイルを音色データのファイルに指定できます。
例:
dir C:\WinApl\Sound\timidity\inst\foo.zip#
bank 0
0 bar.pat
1 baz.pat
2 zoo.pat
まずdirで通常のディレクトリのようにアーカイブファイル(上の例ではC:\WinApl\Sound\timidity\inst\foo.zip)を指定します。
このときアーカイブファイル名の最後に#を付けるようにする。#があることでアーカイブファイルであることをTiMidity++は認識するようだ。
こうしておくとdirで指定されたアーカイブファイルの中のパッチファイルも読み込み対象になります。
上の例では,foo.zipの中にあるbar.pat,baz.pat,zoo.patが読み込まれます。
- source file [...]
他の設定ファイルをその場所に挿入し,続行します。
sourceのネストは50段まで可能。
- progbase number
これ以降,プログラム番号をnumberからnumber+128で設定・表示します。
例えば,progbase 1とした場合は,それ以降プログラム番号は1から128で設定・表示されます。
- bank [MapID1] number
これ以降,変更するトーンバンクを選択します。
これ以後のpatchの対応付けは,指定されたトーンバンクに対して行われます。
MapID1にgm2,sc55,sc88,sc88pro,sc8850,xg,xgsfx64 のいずれかを指定することで,特定のマップを対象にできます。
- drumset [MapID2] number
変更するドラムセットを選択します。
これ以後のpatchの対応付けは,指定されたドラムセットに対して行われます。
MapID2にgm2drum,sc55drum,sc88drum,sc88prodrum,sc8850drum,xgdrum,xgsfx126 のいずれかを指定することで,特定のマップを対象にできます。
- number file [options]
- number %font file bank prog [key] [options]
- number %sample file [options]
現在のトーンバンクやドラムセットで,MIDIプログラムナンバーnumberで使用するpatchファイルを指定します。
fileがSoundFontの場合は,number %font の書式で特定のbank,prog,keyの音色データを取り出します。
fileが無圧縮のWAV形式またはAIFF形式のサンプルファイルの場合は,number %sampleの書式で指定します。
optionsは,次のものが使用可能です。
- amp=amplification
インスツルメントのボリュームをamplification%にします。
もし値が指定されていない場合,インスツルメントが読み込まれる時に自動的に設定されます。
- note=note
インスツルメントを演奏する時に決まったMIDIノート(音階)を使用します。
noteを0にすると,最初にNote Onイベントが発生した時点でのノートを使用します。
パーカッションインスツルメントに対しては,もし設定ファイルで値が設定されていなければ,patchファイルに入っている値を使用します。
- pan=panning
インスツルメントのデフォルトのパンニングを設定します。
panningは,left,right,center,あるいは-100から100までの整数値を指定できます。
- 100が最も左,100が最も右になります。
値が与えられていない場合には,patchファイルに入っている値を使用します。
もちろん,MIDIファイル中のパンニングコントロールの方が優先されます。
- tune=tuning[,...]
インスツルメントのルート周波数を調整します。
tune=1とすれば1半音上がります。
tuningには小数が利用可能なので,tune=-0.2などの微調整も可能です。
二つ目以降の引数は音域別に複数のサンプルデータが含まれている場合に,それぞれ別の値を指定できます。
- rate=attack:decay:sustain:release1:release2:release3[,...]
インスツルメントのADSRレートを設定するオプションです。
0から255までの値が指定できます。
サステインレートだけを補正したい場合など,
6 GUS/hrpschrd.pat rate=::60
のような特定な設定も可能です。
また,アタックタイムを速くしたいだけであれば,
6 GUS/hrpschrd.pat rate=255
という書き方ができます。
二つ目以降の引数は音域別に複数のサンプルデータが含まれている場合に,それぞれ別の値を指定できます。
- offset=attack:decay:sustain:release1:release2:release3[,...]
インスツルメントのADSRオフセットを設定するオプションです。
0から255までの値が指定できます。
書式についてはほぼrate=と同様です。
- keep={loop|env}
パーカッションインスツルメントでは,デフォルトでループ情報とエンベロープ情報が破棄されます。
またメロディーインスツルメントに異常なエンベロープが存在した場合にも,エンベロープ情報は自動的に破棄されます。
keep=を指定することで,ループ情報やエンベロープ情報が破棄されるのを防ぎます。
例えば,Short,Long Whistle パーカッションインスツルメント(General MIDIの71,72 番)に対しては,設定ファイルでkeep=loop keep=envとしておく必要があります。
- strip={loop|env|tail}
インスツルメントとして使用するpatchのループ情報やエンベロープ情報やテール(ループの後にあるデータ)をすべて強制的に破棄します。
サードパーティーのインスツルメントには,ループの後にゴミが付いているものがあり,インスツルメントを演奏する度にクリッキングノイズが入ってしまうことがあります。
その場合,strip=tailオプションを指定すれば音質が改善されます。
- tremolo=sweep_increment:control_ratio:depth[,...]
トレモロを設定するオプションです。
0から255までの値が指定できます。
rate=同様,狙い撃ち設定や不要部分の省略が可能です。
sweep_incrementは発音してからトレモロが掛かり始めるまでの時間,control_ratioは振幅が変化する速さ,depthは振幅が変化する深さです。
rate=同様,複数のサンプルに対する設定が可能です。
- vibrato=sweep_increment:phase_increment:depth[,...]
ビブラートを設定するオプションです。
0から255までの値が指定できます。
rate=同様,狙い撃ち設定や不要部分の省略が可能です。
sweep_incrementは音してからビブラートが掛かり始めるまでの時間,phase_incrementは周波数が変化する速さ,depthは周波数が変化する深さです。
rate= 同様,複数のサンプルに対する設定が可能です。
- sclnote=note[,...]
インスツルメントのスケールチューニングの基準とするノートを設定します。
例えば,sclnote=60とすれば,真ん中のドを中心にスケールチューニングが行われます。
二つ目以降の引数は音域別に複数のサンプルデータが含まれている場合に,それぞれ別の値を指定できます。
- scltune=tune[,...]
インスツルメントのスケールチューニングの度合いをcent単位で設定します。
例えば,scltune=50とすれば,ノート間隔が50 centになります。
二つ目以降の引数は音域別に複数のサンプルデータが含まれている場合に,それぞれ別の値を指定できます。
- comm=comment
commentが指定できます。
#extension commと同じ効果です。
- modrate=attack:decay:sustain:release1:release2:release3[,...]
- modoffset=attack:decay:sustain:release1:release2:release3[,...]
モジュレーション・エンベロープの変化の仕方を設定します。
設定方法や値は基本的にボリューム・エンベロープと同じです。
一部のSoundFontを除けば,このオプションだけを指定しても何も起こりません。
- envkeyf=attack:decay:sustain:release1:release2:release3[,...]
ボリューム・エンベロープ・キーフォローを設定します。
note=60を基準として,ノートに従いエンベロープ・タイムを変化させます。
単位は+-cent/keyです。
例えばenvkeyf=100と指定すると,1オクターブ上がるたびにアタック・タイムが2倍になります。
rate=同様,複数のサンプルに対する設定が可能です。
一部のSoundFontでは,decayとsustainのパラメータが予め設定されている場合があります。
- envvelf=attack:decay:sustain:release1:release2:release3[,...]
ボリューム・エンベロープ・ベロシティフォローを設定します。
velocity=64を基準として,ベロシティに従いエンベロープ・タイムを変化させます。
単位は+-cent/velocityです。
例えばenvvelf=100と指定すると,velocity=127でアタック・タイムが約38倍になります。
rate=同様,複数のサンプルに対する設定が可能です。
このオプションは近い将来仕様変更される可能性があります。
- modkeyf=attack:decay:sustain:release1:release2:release3[,...]
モジュレーション・エンベロープ・キーフォローを設定します。
note=60を基準として,ノートに従いエンベロープ・タイムを変化させます。
単位は+-cent/keyです。
例えばmodkeyf=100と指定すると,1オクターブ上がるたびにアタック・タイムが2倍になります。
rate=同様,複数のサンプルに対する設定が可能です。
一部のSoundFontでは,decayとsustainのパラメータが予め設定されている場合があります。
- modvelf=attack:decay:sustain:release1:release2:release3[,...]
モジュレーション・エンベロープ・ベロシティフォローを設定します。
velocity=64 を基準として,ベロシティに従いエンベロープ・タイムを変化させます。
単位は +-cent/velocity です。
例えば modvelf=100 と指定すると,velocity=127 でアタック・タイムが約38倍になります。
rate= 同様,複数のサンプルに対する設定が可能です。
このオプションは近い将来仕様変更される可能性があります。
- trempitch=num[,...]
トレモロに従って,ピッチを変化させる深度を設定します。
効果そのものはビブラートと一緒ですが,別系統で動作させたいときに利用します。
単位は +-cent です。
rate= と同様,複数のサンプルに対する設定が可能です。
- tremfc=num[,...]
トレモロに従って,フィルタ・カットオフ周波数を変化させる深度を設定します。
いわゆる「グロウル効果」を表現できます。
単位その他は trempitch= と同一です。
- modpitch=num[,...]
モジュレーション・エンベロープに従って,ピッチを変化させる深度を設定します。
アタック時だけ一時的に音程が上がるなどの表現が可能です。
単位その他は trempitch= と同一です。
- modfc=num[,...]
モジュレーション・エンベロープに従って,フィルタ・カットオフ周波数を変化させる深度を設定します。
単位その他はtrempitch=と同一です。
- fc=num[,...]
フィルタ・カットオフ周波数の基準値を設定します。
単位はHzです。
rate=と同様,複数のサンプルに対する設定が可能です。
- q=num[,...]
フィルターのQ(レゾナンス)を設定します。
単位はcBです。
rate=と同様,複数のサンプルに対する設定が可能です。
- fckeyf=num
フィルタ・キーフォローを設定します。
note=60 を基準として,ノートに従いカットオフ周波数を変化させます。
単位は +-cent/key で,例えば100を指定すれば,音程と同じだけ変化します。
- fcvelf=num
フィルタ・ベロシティフォローを設定します。
velocity=127 を基準とし て,ベロシティに従いカットオフ周波数を変化させます。
単位は +-cent で,SoundFontでは -2400 が固有値として設定されています。
- qvelf=num
レゾナンス・ベロシティフォローを設定します。
velocity=0 を基準として,ベロシティに従いレゾナンスを変化させます。
単位は +-cB です。
- default file
他のどこにも設定がないような音に出合った場合,このファイルが代理として発音されます。
- map MapID1 from-bank from-prog to-bank to-prog
GS/XG各マップのトーン音色として既存のトーン音色を割り当てます。
MapID1には,gm2, sc55,sc88,sc88pro,sc8850,xg,xgsfx64が指定できます。
- map MapID2 from-drumset from-keynote to-drumset to-keynote
GS/XG各マップのドラム音色として既存のドラム音色を割り当てます。
MapID2には,gm2drum, sc55drum,sc88drum,sc88prodrum,sc8850drum,xgdrum,xgsfx126が指定できます。
- soundfont file [options]
SoundFontを最初から最後まで読み込みます(部分的に読み込むには,number %fontを使います)。
optionsは次のものが使用可能です。
- order=number
音色データを探す順番を設定します。
order=0のときは,まずSoundFontを読み込んで,その後に足りないサンプルをGUS/patchから探します。
order=1 のときは,GUS/patchを読み込んだ後にSoundFontを読み込みます。
- amp=amplification
SoundFont全体の音量を amplification% にします。
もし値が指定されていない場合,100% に設定されます。
- cutoff=number
SoundFontに設定されたLPFの有効(1)/無効(0)を指定します。
もし値が指定されていない場合,有効となります。
- reso=number
SoundFontに設定されたレゾナンスの有効(1)/無効(0)を指定します。
もし値が指定されていない場合,有効となります。
- remove
対象のSoundFontを逆にメモリ上から廃棄します。
- font exclude bank [prog [key]]
SoundFontの検索を,bank上のprogで行わないように指定します。
ドラムの場合はバンクが128でドラムセットがprog,キー番号がkeyになります。
- font order number bank [prog [key]]
SoundFontの検索順序(上記参照)を,個別に指定するためのものです。
引数の意味はfont excludeと同じです。
TiMidity++では,以下の拡張命令があります。
- #extension altassign program1 program2 ...
ドラムセットについて,オルタネートアサインを設定します。
drumset 0
altassign 42 44 46
と書くと,drumset 0の42,44,46が排他的に鳴ります。
drumset 0で定義されたオルタネートアサインはデフォルトで使用されます。
- #extension comm program comment
インスツルメント番号 program にコメントcommentを指定します。
ここで設定したcommentは,-intや-iTtオプションで起動した時に表示されます。
- #extension timeout program second
インスツルメント番号programで,second秒以上サスペンド状態が続いた場合,その音をオフにします。
- #extension copydrumset drumset
drumset番号の状態すべてを,現在のdrumsetにコピーします。
- #extension copybank bank
bank番号の状態すべてを,現在のbankにコピーします。
- #extension copymap to-MapID from-MapID
マップfrom-MapIDに定義されたバンクの状態すべてを,マップto-MapIDにコピーします。
- #extension HTTPproxy hostname:port
HTTPのプロキシを設定します。プロキシのホスト名をhostnameに,ポート番号をportに指定します。
- #extension FTPproxy hostname:port
FTPのプロキシを設定します。プロキシのホスト名をhostnameに,ポート番号をportに指定します。
- #extension mailaddr your-mail-address
ユーザーのメールアドレスを,your-mail-addressに指定します。
このメールアドレスは,FTP接続をプロキシを介さずにダイレクトに繋ぐ場合に用いられます。
- #extension opt option
起動時のオプションを指定します。
- #extension undef progno
現在のバンクのプログラム番号prognoを未定義にします。
- #extension legato progno {0|1}
prognoでレガートを掛ける(1),掛けない(0)を指定します。
- #extension level progno tva_level
NRPNのDrum Instrument TVA Levelを処理する際,音量を変化させる基準となる値を設定します。
曲中でDrum Instrument TVA Levelが指定されない限り,音量には一切影響しません。
あくまで基準値です。
prognoは,や[start]-[end]で一括指定できます。
start,endは省略すると,それぞれ0,127と見なされます。
- #extension damper progno {0|1}
prognoでリダンパー効果およびハーフダンパーを有効にする(1), 無効にする(0)を指定します。
- #extension playnote progno note
ドラムセット音色の出音周波数をnoteとします。
GS SysEx Play Noteで出音周波数が指定された場合に,この設定値を元にピッチを適切に変化させます。
prognoは,や[start]-[end]で一括指定できます。
start,endは省略すると,それぞれ0,127と見なされます。
例:
drumset 0
#extension playnote -37,39,44-46,55-60
- #extension delaysend progno level
- #extension chorussend progno level
- #extension reverbsend progno level
ドラムパート・エフェクトがオンの場合のセンドレベルを設定します。
初期値はすべて127ですが,delay,chorus,reverbのどれか一つでも設定されていれば,その音色に設定されていないエフェクトは初期値0になります。
prognoは,や[start]-[end]で一括指定できます。
start,endは省略すると,それぞれ0, 127と見なされます。
- #extension rnddelay progno msec
最大msec以内のディレイを,発音毎にランダムで付加します。
ランダム値の分布はホワイトノイズというより,むしろピンクノイズ(1/fゆらぎ)です。
これらの拡張命令は#から始まっており,古いTiMidityでは単なるコメントと扱われ無視されます。
これで古いTiMidityとの互換性を保つことがで きます。
なお,TiMidity++では#extensionは空白として扱われるようになっています。
TiMidity++の設定ファイル(*.cfg)中のsourceの引数にUNIXのコマンドからの出力を利用できます(UNIX のみ)。
ファイル名の最後に|(ASCII 0x7c)を記述するとUNIXコマンドとみなされ,そのコマンドの出力がsourceの引数になります。
source command| のようにすると,commandの出力がsourceの引数になります。
環境によってTiMidity++の設定を選択したい場合などに便利です。
なお,command | のように,途中にスペースが入ると,設定ファイル読み込み時に区切られてしまい,コマンドと見なされなくなってしまいます。
この機能はファイル名を指定できるすべての場所に適用できます。
は,cat fild.midの出力結果から読み取ります。
リンク
新しくコメントをつける