TiMidity++をWineのMIDIデバイスとして使用する
(2016/1/15)本記事は主にTiMidity++の音源と設定についてを扱っている。Wine関係については「WineにおけるMIDIデバイスの扱い」を参照。
Wineの設定(winecfg)から、オーディオをALSAライブラリ経由で出力する設定にすることで、ALSAのMIDIデバイスをそのままWineの中のMIDIデバイスとして使用できる。
ハードウェアMIDI音源があって、ALSA用のMIDIプレーヤーからMIDIデータの再生ができる状態であれば、普通にWineでアプリケーションを起動させればよいのだが、MIDI音源が無い場合、TiMidity++をALSA MIDIデバイスとして動作させることで、Wineの中からソフトウェアMIDIデバイスとして使用することが可能。
- 音源データの選択
- Eawpatchesの入手
- Eawpatchesの設定(Gentoo Linux以外)
- TiMidity++の設定(Gentoo Linux)
- TiMidity++の設定(Debian/Ubuntu)
- TiMidity++をALSA MIDIデバイスとして動作させる
- TiMidity++の設定を使い分ける
- 問題点(TiMidity++自体とは関係がない)
音源データの選択
TiMidity++は、「サウンドフォント」という種類の(ものによっては)巨大な音源データを使用することで、比較的高品質な音を出すことができるのだが、これはメモリを非常に多く使用する上に、CPUにも結構負荷をかけてしまうため、例えばゲームのBGMにMIDIデータを使用しているような場合には適さない。そうでなくても、メモリ使用量や遅延がネックになって、結構厳しいのではないかという気がする。そこで、データのサイズが小さく、動作も軽い割に、音もバランスも良い「Eawpatches」を選択することにする。
(2008/3/21)EawpatchesをベースにしたEawplusについてを「Eawplus音色セット(GUS/patch)について」にまとめた。
(2008/4/9)サウンドフォントを使用する場合は「TiMidity++でサウンドフォントを使用するための設定ファイルを自動生成するツール(cfgforsf)について」のツールで設定ファイルを自動生成し、必要に応じて編集して使用する。
Eawpatchesの入手
残念ながら、一次配布元にはアクセスできない。Gentoo Linuxではパッケージが用意されているので、$ sudo emerge -av timidity-eawpatches
でインストールされるのだが、他のディストリの場合、TiMidity++本体やfreepatsはあったりしてもEawpatchesはパッケージ化されていないことが多い。そこで
- Gentoo Linuxのパッケージサーバのミラー(ftp.ecc.u-tokyo.ac.jp/GENTOO/distfiles/eawpats12_full.tar.gz など)から取得
- Internet ArchiveのWayback Machine上のページで一次配布元から分割rarファイルを取得してunrarで展開
のいずれかの方法で取得する。後者については次のようにコマンドを実行すればよい。
wget http://web.archive.org/web/20031208184211/http://www.stardate.bc.ca/eawpatches/eawpats12.rar seq -f "http://web.archive.org/web/20031208184211/http://www.stardate.bc.ca/eawpatches/eawpats12.r%02g" 0 16 | wget -i - mkdir eawpatches unrar x *.rar eawpatches rm eawpats12.* -f
Eawpatchesのディレクトリは、後で場所を指定するので、忘れない場所に配置しておく。ここでは、Gentoo Linuxのパッケージにならって/usr/share/timidity/eawpatches/というディレクトリに移動するものとする。
$ sudo mv eaw* /usr/share/timidity/eawpatches
Debian/Ubuntuでは、freepatsの配置場所(/usr/share/midi/freepats)にならって、以降/usr/share/midi/eawpatches/に読み替えるとよい。
(2008/12/4)その後、「TiMidity++向けの音色パッチ(EawpatchesとEawplus)のRPMパッケージを作成」でMandriva Linux向けのRPMパッケージを作成している。設定ファイルについては下の記述とは異なるので、リンク先の記事の説明を参照。
Eawpatchesの設定(Gentoo Linux以外)
eawpats12_full.tar.gzをダウンロードした場合と分割ファイルをダウンロードした場合とで、含まれているtimidity.cfgの場所と内容が異なる*1のだが、以下の内容のtimidity.cfgを用意*2すればよい。Gentoo Linuxの場合、「timidity-eawpatches」パッケージをインストールするとここまで自動でやってくれる。ファイル名: /usr/share/timidity/eawpatches/timidity.cfg
dir /usr/share/timidity/eawpatches source gravis.cfg source gsdrums.cfg source gssfx.cfg source xgmap2.cfg
TiMidity++の設定(Gentoo Linux)
Gentoo Linuxの場合、eselectのtimidityモジュールにより、別の音色パッケージとの切り替えができるようになっているため、「eawpatches」が有効になっていることを確認。/etc/timidity.cfgはいじらないで以下の内容のままにしておく。dir /usr/share/timidity dir ~/.timidity source current/timidity.cfg
TiMidity++の設定(Debian/Ubuntu)
(2007/6/16)/etc/timidity/timidity.cfgから、freepatsの設定をコメントアウトした上で、Eawpatchesの設定を読ませる記述を追加。更に、ホームディレクトリ以下にユーザごとの設定を置けるようにしておくと便利かも。[diff]ファイル名: /etc/timidity/timidity.cfg
-source /etc/timidity/freepats.cfg +# source /etc/timidity/freepats.cfg +dir ~/.timidity +source /usr/share/midi/eawpatches/timidity.cfg
TiMidity++をALSA MIDIデバイスとして動作させる
$ timidity --sequencer-ports=2 -iA
を実行すると、Ctrl+Cなどで止めるまで、表示されたMIDIポート番号で、ALSA対応のMIDIプレーヤーやMIDIシーケンサで使用できるようになる。確保されるMIDIポートの数のデフォルトは4だが、ここでは2に指定している。ALSA MIDIポートの一覧表示には、alsa-utilsに含まれるaplaymidiが便利。pmidiというパッケージでも同様のことができる。ハードウェアMIDI音源がある場合には、それも一緒に表示される。
$ aplaymidi -l Port Client name Port name 20:0 SC-8820 SC-8820 Part A 20:1 SC-8820 SC-8820 Part B 20:2 SC-8820 SC-8820 MIDI 128:0 TiMidity TiMidity port 0 128:1 TiMidity TiMidity port 1
この場合、TiMidity++からMIDIファイルを再生させるには
$ aplaymidi -p 128:0,128:1 (MIDIファイルの場所)
と実行する。この場合、2ポートまで演奏ができる。
$ timidity --sequencer-ports=2 -iAD
のように、後ろにDオプションを付けて実行させると、バックグラウンドで動作するので、常用する場合、ログイン時の自動起動スクリプトに記述させるとよいかも知れない。
また、--realtime-priorityオプションで、値に0から100までの値をセットすることで、SCHED_FIFO方式で優先度を指定できるが、一般ユーザ権限では優先度は変更できない。
(2008/1/31)一般ユーザの場合、優先度は変更できるが、
ファイル名: /etc/security/limits.conf
@audio - rtprio 90 もしくは [ユーザ名] - rtprio 90
のように、リアルタイム優先度の許可をする設定を記述する必要がある。上の場合、--realtime-priority=90まで指定でき、91以上は指定できない。
TiMidity++の設定を使い分ける
上では、軽めのEawpatchesを使用しているが、サウンドフォントを使用して、高音質な音で再生させたり、オーディオファイルへの変換を行ったりしたいことも出てくる。その際には、-c(--config-file)オプションを使い、別の設定ファイルを指し示すようにすることで、Eawpatches用(Wineでの使用を想定)とサウンドフォント用設定(MIDIファイル観賞やオーディオ変換を想定)とを使い分けることができる。例として、[ホームディレクトリ]/.timidity/custom/以下に設定ファイル群があるとした場合、
$ timidity -c ~/.timidity/custom/timidity.cfg (MIDIファイルの場所)
のように実行する。一例として、シェルのエイリアスを
alias timidity-sf='timidity -c ~/.timidity/custom/timidity.cfg'
のように設定しておくと便利かも。
問題点(TiMidity++自体とは関係がない)
(2007/6/17)この問題は、Wine 0.9.39に上げたところ、多少改善されたように感じる。完全ではないが、テンポが乱れることなく、以前より安定してMIDIデータを再生できるようになった気がする。*3「Several improvements to the sound support.」と公式サイトにコメントがあるが、この改善は非常に嬉しい。これでGUIのMIDIプレーヤーとしてWine+TMIDI Playerを使用したりもできそう。
使用したバージョン:
- Wine 0.9.38, 0.9.39