NetWalkerでMidiを演奏するのに苦労しました

NetWalkerで.mp3や.wmaなどのオーディオファイルを演奏するのにはさほど苦労を感じなかったのですが、Midiを鳴らすのに苦労してしまいました。スタンダードMidiファイルを演奏しようとしたときに提案されたパッケージで一応音は出るようにはなったのですが、どうも楽器によっては音が出ません。いろいろ調べた結果、freepatsにはGMの楽器が全部揃っているわけではなく、定義されていないものがかなりあるようです。確かにfreepats.cfgを見ても抜けているものがずいぶんあります。

それではTiMidityを入れようと、timidityパッケージとtimidity-interfaces-extraパッケージをインストールしたら、TiMidityどころか他のプログラムでもあらゆるオーディオファイルが演奏できなくなってしまいました。起動した後、曲の最初で止まってしまっていつまでたっても演奏が始まりません。両パッケージをアンインストールすると元通りTotemが動作するようになります。

何度やり直しても同じなので、ターミナルから一個ずつパッケージをインストールすることにしました。

sudo apt-get install timidity

上記のようにまずtimidityパッケージをインストール。インストール終了後依存関係がなくなって使われないパッケージをアンインストールするよう提案されるので、余分なパッケージを下記のように消去。

sudo apt-get autoclean

次に、/etc/timidity/timidity.cfgを編集。

# opt EFresamp=l
# opt EFreverb=g,42
# opt EFchorus=s
# opt s32kHz
# opt p64a

以上の各行のコメントを外して記述を有効にしました。さらにfluid-soundfont-gmパッケージとfluid-soundfont-gsパッケージをインストールしてもう一度/etc/timidity/timidity.cfgを編集。

source /etc/timidity/freepats.cfg

以上の行をコメントアウトし、

soundfont /usr/share/sounds/sf2/FluidR3_GM.sf2 order=0

上記の記述を追加。

ここまでやってコマンドラインからMidiファイルを演奏してみました。結果、音は出たのですが、左チャネルからしか音が出ず、その上曲の速さが半分に。しかし、-OsSオプションを追加したところ、正常に音が出るようになりました。ALSAオーディオデバイスに出力、というのが肝要だったようです。

しかし、コマンドラインからしか演奏できないのでは不便なので、GUIツール導入に再挑戦。ターミナルから以下のように入力してtimidity-interfaces-extraパッケージを再導入。

sudo apt-get install timidity-interfaces-extra

今度はGUIツールが立ち上がったのですが、やはり演奏できません。曲の最初で止まってしまいます。そして、他のプログラムも起動後曲の最初で演奏が止まったままになってしまいます。

仕方が無いので、GUIツールはあきらめ、ターミナルから対話的に曲の入っているフォルダ*1(私の場合は/media/disk/data/music/midi/の下)を指定し、そのフォルダの中の.midファイルを全部演奏するようなスクリプトを書きました。フォルダの位置が個々人の設定に依存するので余りいいスクリプトではないと思いますが、以下のようなスクリプトでも使えないことは無いです。

!/bin/sh
CURRENTDIR=\$PWD
echo '演奏するディレクトリを以下のリストから選んで入力'
ls /media/disk/data/music/midi/
echo -n '>'
read PLAYDIR
cd /media/disk/data/music/midi/\$PLAYDIR
for file in *.mid
do
timidity -OsS -A56,80a \$file
done
cd \$CURRENTDIR

以上、timidityパッケージをtimidity-interfaces-extraパッケージを入れずにインストールし、-OsSオプションを追加してコマンドラインから演奏することとし、さらにフォルダ内の.midファイルを順番にすべて演奏するようなシェルスクリプトを書くことで、どうにかNetWalkerでMidiが演奏できるようになりました。現状CPU負荷も60〜90%に収まっているようで、一杯一杯ということは無いようです。また、サウンドフォントをSGM-180に変えてみましたが、メモリにもまだ若干の余裕はあるようです。思ったほどTiMidityそのものは重くないようでした。