Timidity++
TiMidity++ はハードウェアシンセサイザを使わずに MIDI ファイルを再生するためのソフトウェアシンセサイザです。リアルタイムにサウンドカードにレンダリングすることも、PCM .wav ファイルなどに保存することも、どちらも可能です。
目次
インストール
timidity++ パッケージをインストールしてください。
また、音を出すために SoundFont もインストールする必要があります。SoundFont の一覧:
設定
まずユーザーを audio グループに追加する必要があります。
# gpasswd -a <user> audio
SoundFont
選択した SoundFont を設定してください。
Freepats
Freepats プロジェクトは TiMidity++ と互換性のあるインストサンプルセットを提供しています。
TiMidity と一緒に Freepats を使うには、以下の行を timidity.cfg
に追加してください:
/etc/timidity/timidity.cfg
soundfont /usr/share/soundfonts/freepats-general-midi.sf2
Fluidr3
他にも利用できる SoundFont があります。以下は soundfont-fluid SoundFont のインストール方法です。
パッケージをインストールしたらパスを TiMidity++ 設定ファイルに追加する必要があります。次の行を追加してください:
/etc/timidity/timidity.cfg
soundfont /usr/share/soundfonts/FluidR3_GM.sf2
デーモン
timidity.service
を実行するように設定してください。詳しくはデーモンを読んで下さい。
PulseAudio を使っている場合、動作しないことがあります。デスクトップ環境の自動実行プログラムに以下の行を追加することができます。もしくは、デーモンモードで TiMidity++ を起動したい場合、以下のコマンドを使うことでコンソールに出力させることが可能です:
$ timidity -iA
Systemd/ユーザー を使ってユーザーの TiMidity++ サービスを書き込むことも可能です。~/.config/systemd/user/
に以下のように timidity.service
ファイルを書いて下さい:
~/.config/systemd/user/timidity.service
[Unit] Description=TiMidity++ Daemon After=sound.target [Service] ExecStart=/usr/bin/timidity -iA -Os [Install] WantedBy=default.target
以下のコマンドを実行することでユーザーがログインしたときに自動的に Timidity++ が起動するようになります:
$ systemctl --user enable timidity.service:
使用方法
ファイルの再生
TiMidity++ を使う方法は2つあります。MIDI プレイヤーとしてか ALSA の MIDI デーモンとしてかです。
スタンドアロンモード
TiMidity++ を使って簡単に MIDI ファイルを再生できます:
$ timidity example.midi
-in
もしくは -ig
オプションを加えることでテキストベース・GTK+ のインターフェースが表示されます。例えば Xfce/GNOME ユーザーは MIDI ファイルをカスタムコマンド timidity -ig
で開くように設定することができます。TiMidity++ には他にも多くのオプションが存在します。timidity(1) を見るか -h
を使ってヘルプを見て下さい。
GTK+ インターフェースには、プレイリスト・音量コントロール・ピッチや再生速度の変更オプションなどの機能があります。
デーモンモード
デーモン (ALSA sequencer client) として TiMidity++ を実行している場合 rosegarden, aplaymidi, vkeybd など他のプログラムに MIDI 出力のサポートを提供します。
デーモンモードでは4つのソフトウェア MIDI ポートが作られます:
$ aconnect -o
client 128: 'TiMidity' [type=user] 0 'TiMidity port 0 ' 1 'TiMidity port 1 ' 2 'TiMidity port 2 ' 3 'TiMidity port 3 '
aplaymidi を使って MIDI ファイルを再生するには:
$ aplaymidi filename.mid --port 128:0
他に X の仮想 MIDI キーボード vkeybd を使うこともできます。
$ vkeybd --addr 128:0
オプション --addr 128:0
は vkeybd による入力 (読み込み可能) ソフトウェア MIDI ポートを Timidity による最初の出力 (書き込み可能) ALSA ポートに接続します。また aconnect, patchage, kaconnect を使うこともできます。これで vkeybd のキーで演奏すると TiMidity++ が対応する音を再生します。
仮想 MIDI デバイスに接続
TiMidity++ デーモンを動作させ aplaymidi で動くようにできたのならば、rosegarden や scala などのプログラムで動作する仮想 MIDI デバイスに接続することができます。
snd-virmidi
カーネルモジュールをロードして、(任意で)起動時にロードするように設定してください。詳しくはカーネルモジュールを読んで下さい。
aconnect を使ってポート番号を確認します:
$ aconnect -o
client 14: 'Midi Through' [type=kernel] 0 'Midi Through Port-0' client 20: 'Virtual Raw MIDI 1-0' [type=kernel] 0 'VirMIDI 1-0 ' client 21: 'Virtual Raw MIDI 1-1' [type=kernel] 0 'VirMIDI 1-1 ' client 22: 'Virtual Raw MIDI 1-2' [type=kernel] 0 'VirMIDI 1-2 ' client 23: 'Virtual Raw MIDI 1-3' [type=kernel] 0 'VirMIDI 1-3 ' client 128: 'TiMidity' [type=user] 0 'TiMidity port 0 ' 1 'TiMidity port 1 ' 2 'TiMidity port 2 ' 3 'TiMidity port 3 '
そして接続を作成してください:
$ aconnect 20:0 128:0
これでシステム上に動作する MIDI 出力デバイスができたはずです (/dev/snd/midiC1D0
)。
トラブルシューティング
TiMidity++ が MIDI ファイルを再生しない
SoundFile が正しく設定されていないのかもしれません。次を実行してください:
$ timidity example.midi
次のような表示が端末出力にあったら、あなたの SoundFile は正しく設定されていません。
No instrument mapped to tone bank 0, program XX - \ this instrument will not be heard
サンプルをインストールして SoundFile を /etc/timidity/timidity.cfg
に追加してください。詳しくは SoundFont を見て下さい。
デーモンモードで再生速度がおかしい
この問題 は TiMidity++ の (デフォルトの) ALSA 出力モジュールを ALSA サーバーモードで使った時に発生します。libao など、他の出力オプションを試して下さい:
$ timidity -iA -OO
オプションを変えた後 aplaymidi を使ってテストしてください。これで問題が修正されない場合は、JACK を設定して TiMidity++ の出力先を jack にすると良いかもしれません。
ヒントとテクニック
ファイルの変換
TiMidity++ は MIDI ファイルを他のフォーマットに変換することもできます。次のコマンドでは生成されたサウンドを WAV ファイルに保存します:
$ timidity input.mid -Ow -o out.wav
他のフォーマットに変換するために FFmpeg を使うことも可能です。次のコマンドは mp3 に変換します:
$ timidity input.mid -Ow -o - | ffmpeg -i - -acodec libmp3lame -ab 256k out.mp3
DOSBox で TiMidity++ を使う方法
まず最初に、設定ファイルを書く必要があります。DOSBox で次を入力して設定ファイルを作成してください:
config -writeconf dosbox.conf
dosbox.conf
は好きな名前に置き換えることができます。隠しファイルにしたいときは名前の前にドットを加えて下さい。
上で説明しているように aconnect を使ってデーモンとして TiMidity++ を起動してください。
設定ファイルを好きなエディタで編集して、次のセクションを見て下さい:
dosbox.conf
[midi] mpu401=intelligent device=default config=
config= の後ろに ALSA の接続ポートを書いて下さい、デフォルトでは:
config=128:0
ターミナルの DOSBox を再起動すればポート 128:0 で初期化が成功してデバッグメッセージが表示されるはずです。