いろいろ苦労したので自分用に、UbuntuでのTimidityの使い方をまとめてみることにする。
ここではUbuntu Studio 10.04(x86-64版,カーネルは2.6.32-24-preempt)を利用している。

○前置き

あえて説明しておくと、Timidityは音源内蔵型?ソフトウェアシーケンサーである。
TimidityがSoundFont(音色データ、後述)を用いてMIDIファイル(楽譜データ)を演奏する。また、演奏だけでなくwav形式等でファイルに出力することもできる。
(今やMIDIファイルのやりとりはあまり見かけなくなってきたが。)

SoundFontは音色データフォーマットで、音色の種類や量、配置(マップ)はSoundFontによって様々、エフェクトのかかり具合などを決めることもできる。
もともとの使い方は、あらかじめSoundFontをメモリ上に配置して(ユーザーが下の画像のように設定画面で読み込むSoundFontを指定)、Sound Blaster AWE64等のサウンドボードがそれを読み込んでMIDIを演奏する、というものだった。演奏をハードウェアに任せることでPCの負担を抑えつつ、音色データの入れ替えを可能にして、低スペックのPCでもソフトウェアシーケンサーのようなことができる、ということを売り文句の一つにしたかったのだろうが、この機能が十分に活用されることは少なかった。


○timidityを導入

Ubuntuでは既にTimidityが入ってるはず(パッケージはtimidityとtimidity-daemonの2つ)
GUIで利用するにはさらにtimidity-interfaces-extraを導入する必要がある。

○とりあえず何か演奏させよう
本来はコンフィグファイルの設定を先に行うのだが、ここでは設定を変えずにtimidityで演奏させてみる。

まずMIDIファイルを用意して、デスクトップなど適当な場所に置く。
端末を起動して、timidity ~/Desktop/example.mid のように入力・実行する。
一部音が出ないこともあるが、GMマップであればおそらく音が出ると思う。
これは、timidityと共に既に音色データが入っていて、コンフィグファイルでそれを使うように設定されているからである。
もし音が出なかければ、選んだMIDIが指定する音色に対応した音色が元からある音色データに含まれていないのか、timidityとは全く関係ない部分(音量設定、サウンドドライバ等)の問題だろう。


○SoundFontとコンフィグファイルについて

演奏はできたものの、音は本来意図していたものとはかなり違うであろう。
それは当たり前な話で、製作者の意図した音を鳴らすにはそれにあった音源を使う必要がある。
今もなおネットに出回るMIDIファイルは、SCシリーズやMUシリーズ等のハードウェア音源を使うことを前提としたものが多い。この音源に完璧に対応したSoundFontは存在せず、自分でそれに合った複数のSoundFontを探して入れなければならない。
SoundFontはhttp://soundfonts.homemusician.net/から探すといいだろう。

SoundFontファイルの拡張子は.sf2がほとんど。時々.sfArkという拡張子のファイルを見かけるが、これはSoundFont用に最適化された圧縮形式で圧縮されていて、timidityで扱うにはあらかじめ専用の解凍ソフトを用いて解凍しておく必要がある。

コンフィグファイルには、timidity自体の設定や読み込むSoundFont、SoundFontの各音色についての音量やパンの設定を記述する。
詳細な設定をコンフィグファイルに記述して、音源を意図したものに合うように微調整を行う。
そういった味付けは後回しでよいが、最低限timidityで演奏するためには読み込むSoundFontのファイルパスを記述する必要がある。

○コンフィグ(cfg)ファイルの準備
コンフィグファイルは/etc/timidity/timidity.cfgにあるが、この場所はroot権限がないとファイルを操作できない。cfgファイルの書き換えの度にrootになるのは面倒なので、いつも使うcfgファイルは別の場所に置いておくことにする。
ここではcfgファイルを~/Music(ホームディレクトリ下のMusicフォルダ)に置き、SoundFontを~/Music/sfに置くことにする。

root権限で/etc/timidity/timidity.cfgを次のように書き換えて保存する。

source /etc/timidity/freepats.cfg

#source /etc/timidity/freepats.cfg
source ~/Music/timidity.cfg

ここで1行目は先頭に#を付けてコメント文にしている(つまりこの行は無効になる)
2行目はcfgファイル(~/Music/timidity.cfg)を読み込んでここに挿入しろ、と指定している。
(マニュアルによればcfgファイルの挿入は50段まで有効。つまり、sourceで指定したcfgファイルの中でさらにsourceでcfgファイルを指定してさらにその中で…が49回までOKてこと)

今後は/etc/timidity/timidity.cfgは一切弄る必要はなく、~/Music/timidity.cfgを扱う。
先ほど指定した場所に空のファイルを作成して指定した通りのファイル名に変える(~/Music/timidity.cfgを作る)。
これを開いて次のように編集する。

dir [SoundFontが置いてあるフォルダ]
soundfont [読み込むSoundFontのファイルパス]

dir文でフォルダパスを指定すれば、以後そこにあるSoundFontを指定する時にsoundfont文やsource文でフォルダパスを省略できる。
SoundFontにcfgファイルが付属する場合、soundfont文の代わりにsource [cfgファイル]を入れる。
SoundFontやcfgファイルを複数指定した場合は、後に読み込まれた設定が前の設定を上書きする。つまり後に書いた設定が優先。

cfgファイル設定例:

dir ~/Music/sf
soundfont sfexample.sf2
source anothorexample.cfg

編集を終えて保存したらもう一度timidityコマンドで演奏してみる。音色が変わっていれば大成功。
MIDIファイルを再生するだけであればこれだけ知っていれば十分。問題はどのSoundFontを入れたらいいのかということなのだが、これについてはここでは語らないことにする(人によって好みは様々。これから作るor聴く楽曲にあったsfを入れればよい。)

○timidityのマニュアルを読む
「man timidity」および「man timidity.cfg」コマンドでtimidityやcfgファイルの説明を読むことができる。


○GUIでtimidityを使ってMIDIを再生

・timidity-interfaces-extraを導入
元から入っているtimidityにはGUIを利用するためのプログラムが含まれていないのでサポートしていない。
GUIを扱うにはtimidityのソースコードを入手しconfigureにオプションを付けてビルドする必要があるが、
わざわざそんなことをしなくてもtimidity-interfaces-extraというパッケージがあり、これを導入するだけでGUIを扱えるようになる。


・timidityを起動
メインメニュー(上にあるバー)を アプリケーション→サウンドとビデオ とたどると TiMidity++ MIDIシーケンサ が追加されているのでこれを開く。
端末では「timidity -ia」で実行しても同じ。また、「timidity -ig」を実行するとGTK+を使用したウィンドウが現れる。
-iaオプションのXAWインターフェースは多くのdistroで動く。-igオプションのGTK+インターフェースはGNOMEのスキンが適用される。
機能面では、XAW版では再生のリピートやシャッフルができ、GTK+版ではテンポの変更やキーシフトができる。
timidity XAWインターフェースtimidity GTK+インターフェース


○高度な利用法 - TimidityをMIDI音源として利用する

・MIDIデータを外部アプリケーションから入力する
LinuxにはオーディオをサポートするカーネルコンポーネントとしてOSSとALSAがあり、Ubuntuでは両方を扱える。ただし現在MIDIデバイスやMIDIデータをサポートするのはALSAだけである。
TimidityはALSAに対応しており、ALSAに対応するシーケンスソフトウェアなどを用いてTimidityにMIDIデータを演奏させることができる。
Timidityとは関係ないが、USBオーディオインターフェースやUSB-MIDIインターフェースでもALSAに対応してさえいれば、アプリケーションからデバイスにオーディオやMIDIを出力することができる。
ALSAに対応しているデバイスの一覧はここ(http://www.alsa-project.org/main/index.php/Matrix:Main)を参照


・方法1:デーモンを使う
timidty-daemonというパッケージにtimidityのデーモンが含まれていて、通常はtimidityをインストールするとこれも一緒にインストールされる。
Ubuntu Studioでは最初から既にデーモンが起動しているはずだが、一度「ps aux|grep timidity」を実行してデーモンが動作しているかどうか確認する。
動作していなければ「sudo /etc/init.d/timidity start」でデーモンを起動させる。

これでRosegardenなどのALSA対応シーケンスソフトウェアからtimidityに出力できる。
timidityシーケンサーのポートは標準では4ポートなので、ソフトウェア側からはtimidityのポートが4つ見える。
ポートの数は --sequencer-ports=n のように指定することができる。
cfgファイルを書き換えた時は「sudo /etc/init.d/timidity restart」を実行してデーモンを再起動。

音のテンポが一定にならない場合は方法1をあきらめて方法2や方法3をやってみる。

・方法2:デーモンを使わず一時的に常駐させる
「timidity -iA -Os」を実行する。これはALSAインターフェースから入力しALSAオーディオデバイスに出力する、というコマンド。

これを実行するとソフトウェア側からは同じく4つのポートが見えるようになるはず。
デーモンを使った場合とは違い、timidityの詳細なオプションが使用でき、またファイルに出力することもできる。
例えば安定性を重視して音を鳴らしたいのであれば「timidity -iA -Os -B4,9」のように、-Bn,mオプションを使用する。
例えばアプリケーションからMIDIを入力してwavファイルに出力するなら、
「timidity -iA -Ow -o ~/Desktop/output.wav --sequencer-ports=1」などと実行し、アプリケーションでMIDIを再生する。
MIDI再生を終えたら端末でCtrl+Cキーを押すとファイルへの記録を終える。
最初にMIDI再生が始まるまではファイルへの記録は始まらず、また、MIDI再生を終えた後もファイルに無音部分が記録されることはない。
ただしCtrl+Cキーを押す前にもう一度MIDI再生を始めてしまうと、一度停止した時からもう一度再生を始めた時までの無音部分も含めてファイルに記録されるので注意。

・方法3:JACK Audio Connection Kit(JACK)を使う(一時的な常駐)
JACKとは簡単に言えば、ソフトウェアやデバイスの入出力を自由に、低レイテンシー(標準設定では21ms)に接続してしまおう、というサーバーアプリケーション。
JACK上でシーケンスソフトやオーディオ編集ソフトを動かすことで入出力をJACKで一括管理できる。
また、1つの入出力ポートを複数の入出力ポートと接続できる。これはWindowsでは到底できないことだろう。

JACKにはCUIベースで動作するjackdとGUIベース(フレームワークはQtを使用)で動作するqjackctlがある(qjackctl自体は単にjackdを実行しているだけ。)
まずはqjackctl上でRosegardenとtimidityを動かして、RosegardenからtimidityにMIDIデータを送って演奏させてみる。

1. 端末を開いて「sudo /etc/init.d/timidity stop」を実行。timidityのデーモンを終了しておく。
2. メインメニュー→サウンドとビデオ→JACK Control を開く
3. Setupボタンをクリックしてhttps://wiki.ubuntulinux.jp/UbuntuStudioTips/Install/UbuntuStudioSetupを参考に設定を行う。
※カーネルの種類について : 端末上で「uname -r」を実行すると表示されるバージョン番号の後ろにある英文字がカーネルの種類を表している。
Ubuntu Desktopではgeneric、Ubuntu Studio x86-64版ではpreemptが標準。
4. 設定を終えたらStartボタンをクリックする。
5. 端末上で「timidity -iA -B2,7」を実行する。
6. Rosegardenを開いて再生するMIDIファイルを開く。
ついでにRosegardenの設定も行う。
「スタジオ」→「MIDIデバイスの管理」を開く。MIDI出力で「xxx:0 TiMidity port 0」を選択。設定画面を閉じる。

ここで「スタジオ」→「ドキュメントを既定値のスタジオに保存」を実行しておくと、新たにRosegardenを開いた時に設定し直す必要がなくなる。
また、「編集」→「設定」を開いて「JACKトランスポートを使用」にチェックを入れるとJACKから再生をコントロールできるようになるが、負荷も大きくなるのであまりお勧めしない。
7. MIDIファイルを再生する。「JACKトランスポートを使用」にチェックを入れてない場合はJACKの緑のカウンタが00:00:00のままだが、これは正常。チェックを入れてある場合はカウンタも変わるはず。


次にjackd上でRosegardenとtimidityを動かしてみる。
qjackdctl自体がjackdを実行しているのだから(qjackdctlのStatusでわかる)、やることはほとんど変わらない。

1. 端末を開いて「sudo /etc/init.d/timidity stop」を実行。上には書かなかったが、timidityがビジー状態になっていることがあるので「killall timidity」も実行しておくとよい。
2. 「jackd -P89 -d alsa -r44100 -p256 -n3」を実行する
(コマンドは上のUbuntu Wikiの画面の通りに設定する場合。リアルタイム動作をさせない場合は-rオプションを-d alsaオプションより前に付ける。)
あとの手順は5-7と同じ。端末を2つ開くので、それらが邪魔になるならワークスペースを有効活用しよう。
(Ubuntu StudioではGNOMEバーにワークスペース切替器が追加されてないので、GNOMEバーを右クリック→パネルへ追加 より、ワークスペース切替器を追加しておくとよい。)

※コメント欄が表示されない場合はdisqusについてJavascriptが有効であることを確認して下さい。コメントはスパム防止フィルターによる承認制のため、投稿してもすぐに反映されない場合があります。

管理人 : Akamaki (akm)

は、PCとVTuberに夢中になっている電気技術者です。

私はレトロコンピューティングの愛好家ですが、そのようなリグはもう収集していません。

私の活動はトップページで見ることができます。読んでくれてありがとう!