Timidity++

提供: ArchWiki
2021年8月13日 (金) 10:21時点におけるKusanaginoturugi (トーク | 投稿記録)による版 (→‎Freepats: パスが違うようなので修正)
ナビゲーションに移動 検索に移動

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 を使うこともできます。

vkeybdAURAUR からインストール可能です。

$ 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 バージョン 0.72 でテストしています。

まず最初に、設定ファイルを書く必要があります。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 で初期化が成功してデバッグメッセージが表示されるはずです。

関連項目