# Timidity (日本語)

TiMidity++ はハードウェアシンセサイザを使わずに MIDI ファイルを再生するためのソフトウェアシンセサイザです。リアルタイムにサウンドカードにレンダリングすることも、PCM .wav ファイルなどに保存することも、どちらも可能です。

## インストール

公式リポジトリから timidity++ パッケージをインストールしてください。

また、音を出すために SoundFont もインストールする必要があります。SoundFont の一覧:

- timidity-freepats - 公式リポジトリにあります。
- soundfont-fluid - AUR にあります。

## 設定

まずユーザーを audio グループに追加する必要があります。

    # gpasswd -a <user> audio

### SoundFont

選択した SoundFont を設定してください。

#### Freepats

Freepats プロジェクトは TiMidity++ と互換性のあるインストサンプルセットを提供しています。

TiMidity と一緒に Freepats を使うには、以下の行を `timidity.cfg` に追加してください:

    /etc/timidity++/timidity.cfg

    dir /usr/share/timidity/freepats
    source /etc/timidity++/freepats/freepats.cfg

#### Fluidr3

他にも利用できる SoundFont があります。以下は soundfont-fluid SoundFont のインストール方法です。

パッケージをインストールしたらパスを TiMidity++ 設定ファイルに追加する必要があります。次の行を追加してください:

    /etc/timidity++/timidity.cfg

    soundfont /usr/share/soundfonts/FluidR3_GM2-2.sf2

### デーモン

`timidity.service` を実行するように設定してください。詳しくはデーモンを読んで下さい。

PulseAudio を使っている場合、動作しないことがあります。デスクトップ環境の自動実行プログラムに以下の行を追加することができます。もしくは、デーモンモードで TiMidity++ を起動したい場合、以下のコマンドを使うことでコンソールに出力させることが可能です:

    $ timidity -iA

Systemd/User を使ってユーザーの TiMidity++ サービスを書き込むことも可能です。`/etc/systemd/user/` に以下のように `timidity.service` ファイルを書いて下さい:

    /etc/systemd/user/timidity.service

    [Unit]
    Description=TiMidity++ Daemon
    After=sound.target

    [Service]
    ExecStart=/usr/bin/timidity -iA -OO &

    [Install]
    WantedBy=multi-user.target

systemd を使ってユーザーとしてサービスを起動・有効できるはずです。

## 使用方法

### ファイルの再生

TiMidity++ を使う方法は2つあります。MIDI プレイヤーとしてか ALSA の MIDI デーモンとしてかです。

#### スタンドアロンモード

TiMidity++ を使って簡単に MIDI ファイルを再生できます:

    $ timidity example.midi

`-in` もしくは `-ig` オプションを加えることでテキストベース・GTK+ のインターフェースが表示されます。例えば Xfce/GNOME ユーザーは MIDI ファイルをカスタムコマンド `timidity -ig` で開くように設定することができます。TiMidity++ には他にも多くのオプションが存在します。`man timidity` を見るか `-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 は AUR からインストール可能です。

    $ vkeybd --addr 128:0

オプション `--addr 128:0` は vkeybd による入力 (読み込み可能) ソフトウェア MIDI ポートを Timidity による最初の出力 (書き込み可能) ALSA ポートに接続します。また aconnect, aconnectgui, 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 を見て下さい。

### デーモンモードが起動しない

まず、あなたが audio グループに含まれているか確認してください。含まれていない場合、グループに追加してください:

    # gpasswd audio -a username

グループを変更した後は、ログインし直す必要があります。

PulseAudio を使っている場合、`timidity.service` を有効にする代わりに、TiMidity++ をユーザーで起動してください:

    $ timidity -iA -OO

TiMidity++ をバッググラウンドで実行したい場合は、TiMidity++ のデーモン化オプションを使う代わりに、`&` を加えて下さい。

### デーモンモードで再生速度がおかしい

この問題 は TiMidity++ の (デフォルトの) ALSA 出力モジュールを ALSA サーバーモードで使った時に発生します。libao など、他の出力オプションを試して下さい:

    $ timidity -iA -OO

オプションを変えた後 aplaymidi を使ってテストしてください。これで問題が修正されない場合は、JACK を設定して TiMidity++ の出力先を jack にすると良いかもしれません。

## Tips and tricks

### ファイルの変換

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++ を使う方法

Note: 以下の方法は 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 で初期化が成功してデバッグメッセージが表示されるはずです。

## 関連項目

- USB Midi キーボード

Category:

- Audio/Video (日本語)