今回から2回にわたり、電子音楽フォーマットであるMIDIをUbuntuで扱うレシピを、MIDI音源ソフトウェアであるtimidity++と共にお届けします。今回はMIDIファイルの再生とMIDIの概要を、次回でUbuntuを楽器にしてリアルタイム演奏してみたいと思います。
timidity++とは
timidityは1995年に、Tuukka Toivonen氏がリリースしました。その後、日本の開発者がソースコードを引き継いで開発を継続し、timidity++ として再リリースしました。2004年のリリースを最後に新機能の追加は止め、田向正一氏と卜部昌平氏がメンテナンスのみ継続しています。
Windows、MacOS X、Unix、Linuxなど、様々なプラットフォームに対応しており、Ubuntuにおいてはパッケージの形で提供されています。パッケージ名「timidity」です。また、入力ウィンドウを追加するためのパッケージ「timidity-interfaces-extra」をインストールすることで、さまざまな入力画面で利用することができます[1] 。今回はGTK+(Ubuntu標準のデスクトップ環境であるGNOMEが利用しているGUIツールキット)のウィンドウを使っていきたいと思います。
まずは、timidity++をインストールしてみましょう。Synapticパッケージマネジャーでパッケージ名「timidity」および「timidity-interfaces-extra」をインストールしてください。端末での操作が好きな方は、以下のコマンドを実行しても構いません。
$ sudo apt-get install timidity timidity-interfaces-extra;
timidity++単体では音が出せませんので、音源パッケージもインストールします。Ubuntu 10.10時点で、利用できるサンプリング音源のパッケージは3種類提供されています。パッケージ名「freepats」「 fluid-soundfont-gm」「 fluid-soundfont-gs」です。これらも同様に、Synapticパッケージマネジャーでインストールしてください。端末操作であれば以下を実行します。
$ sudo apt-get install freepats fluid-soundfont-gm fluid-soundfont-gs;
なお、Ubuntu Studio環境では上記パッケージはすべてインストールされていますが、これに加えて「timidity-daemon」も標準状態でインストールされています。このパッケージをインストールすると、timidity++をシステム起動時に常駐ソフトウェア(デーモン)として実行するようになりますが、この場合、細かなオプション指定をして起動できないため、筆者はいつもアンインストールしてしまいます[2] 。
MIDIファイルを再生してみる
MIDIの詳細は後述することにして、まずはMIDIファイル[3] から音を出してみましょう。端末(gnome-terminal)を起動し、以下を実行してください[4] 。
$ timidity -ig -Oe;
すると、ウィンドウ「timidity MIDI Player」が開きます。ツールバーの項目「File」をクリックして表示される項目「Open」を選択し、表示されるダイアログでMIDIファイルを選択してください。選択すると、メインウィンドウ「timidity MIDI Player」下部のリストに追加されます。ファイル名をクリックすると演奏を開始します。
図1 timidityのGTK+インターフェイス
timidity++は標準状態では、パッケージ「freepats」で提供される音源ファイルを使います。パッケージ「fluid-soundfont-gm」や「fluid-soundfont-gs」で提供される音源ファイルを使いたい場合は、以下のように「-x」オプション付きで実行します。
パッケージ名「fluid-soundfont-gm」で提供される音源を使う場合
$ timidity -ig -Oe -x 'source /etc/timidity/fluidr3_gm.cfg';
パッケージ名「fluid-soundfont-gm」で提供される音源を使う場合
$ timidity -ig -Oe -x 'source /etc/timidity/fluidr3_gs.cfg';
Freepatsを使う場合(標準)
$ timidity -ig -Oe -x 'source /etc/timidity/freepats.cfg';
freepatsの方は素直な感じの音を、fluid-soundfont-gmの方は迫力がある感じの音を出してくれます。「 -x」オプションは、標準の設定ファイルであるファイル「/etc/timidity/timidity.cfg」に記述されている設定を上書きするのに用います。標準の音源ファイルを変更したい場合は、このファイルを直接編集するのがよいでしょう。
timidity++は日本の開発者が中心ということもあり、timidity++本体の説明や設定ファイルの解説などすべて日本語版が提供されています。マニュアルを参照するには、以下のコマンドを実行します。
timidity++本体のマニュアル
$ man timidity;
timidity++の設定ファイルに関するマニュアル
$ man timidity.cfg;
別なバックエンドを使ってみる
バックエンドというのは、アプリケーションが作り出した音データの送り先です。timidity++においては「-O」オプションで指定します。これまではオプション「-Oe」として、ESounD (Enlightened Sound Daemon)を指定しました。ESounDというのはPulseAudioの前身と考えていただいて構いません。PulseAudioはこのESounDのエミュレーションをおこなえるため、事実上PulseAudioを直接指定していることになります。
PulseAudioサウンドサーバをバックエンドに指定(ESounDエミュレーション)
$ timidity -ig -Oe;
図2 GNOMEのサウンド設定ウィンドウ。timidityがPulseAudioの直接のクライアントとなっているのがわかる
この他のバックエンド指定方法として、ALSAライブラリやJACKサウンドサーバを指定できます。
ALSAライブラリをバックエンドに指定
$ timidity -ig -Os;
図3 GNOMEのサウンド設定ウィンドウ。ALSAライブラリをバックエンドとするtimidityが、ALSA Plugin経由でPulseAudioのクライアントとなっていることがわかる
JACKサウンドサーバをバックエンドに指定
$ timidity -ig -Oj;
図4 JACK CONTROL (qjackctl) のConnectionウィンドウ。timidityがJACKサウンドサーバにポートを開いているのがわかる
ALSAライブラリやJACKサウンドサーバを指定すると、バッファサイズを用途に合わせて調整できます。この調整は、リアルタイム演奏をする際に必須となります。これに関しては次回説明しようと思います。
なおUbuntuの標準状態では、ALSAライブラリをバックエンドに指定した場合でも、本連載の第137回 でお伝えしたとおり音データはPulseAudioを経由します。PulseAudioを標準でインストールしないXubuntu環境などは、ALSAライブラリを指定する必要があります。また、JACKサウンドサーバをバックエンドに指定したい場合は、先にJACKサウンドサーバを起動しておいてください。
WAVEやOgg FLACファイルに変換してみる
バックエンドを指定する方法と同じ方法で、ファイルへの書き出しができます。実はこちらが本来の使い方だったりします。いくつかのフォーマットを利用できますが、今回はwavファイル(RIFF WAVEフォーマット)とOggのFLACフォーマットへ変換してみます。
RIFF WAVEの場合
$timidity -ig -Ow -o 出力ファイルへのパス;
Ogg FLACの場合
$timidity -ig -OF -o 出力ファイルへのパス;
出力ファイルへのパスにファイル名のみ指定した場合は、端末のカレントディレクトリに保存されます。
他のフォーマットへの変換も可能なので、興味のある方はマニュアルを参照してみるとよいでしょう。
MIDI規格について
さて、ここまで散々「MIDI」という単語を連呼してきましたので、簡単に解説したいと思います。MIDIとはMusical Instrument Digital Interfaceという規格の略称で、電子楽器を演奏する際にやりとりされる信号の規格や、その信号を乗せるハードウェア一式の規格を意味します。日本においては1999年のJIS X 6054-1とX 6054-2によって規格化されています。
GM (General MIDI System)対応音源
このMIDI規格にはこれ以外にも、音源データに関する規定も含まれています。それがGM(General MIDI System)で、最新はバージョン2(Gneral MIDI System Version 2)です。同時発音数32音以上、1つのMIDIポートに対して16チャンネルを設け、メロディチャンネルであれば256音色からひとつを選び、リズムチャンネルであればチャンネル番号10か11に9つのドラムセットを持つなどの約束が定められています。それぞれの音色はバンクと番号(プログラム)が振られ、番号によって特定の音色を定めています。例えばバンク0のプログラム25にはナイロン弦のアコースティックギターを入れるよう定められています。
GM以外にもメーカーが独自に策定したものがあり、RolandはGS[5] を、ヤマハはXGをリリースしています。しかしどれもGMを拡張したものであり、GM規格に基づいて作られたMIDIファイルは適切に演奏できます。
timidity++の音源として配布されているパッケージは、freepatsとfluid-soundfont-gmがGM規格に、fluid-soundfont-gsがGS規格に、一部の音色を除いてほぼ対応しています。
ハードウェアMIDI音源の利用
timidity++はこのような規格に対応したMIDI音源をソフトウェア的に使えるようにしたものですが、ハードウェア音源として作られたものも発売されています。例えばRoland/Edirol社が発売しているデバイスに限って調べると、RS232C接続(いわゆるシリアル接続)のものや、USB接続のものがいくつも発売されています。Ubuntuを含むLinux環境では、このようなハードウェアMIDI音源も利用することが可能です。
現在Ubuntu日本コミュニティのWikiでは、RS232C接続のハードウェアMIDI音源を設定する手順 という記事が公開されています。これは、Ubuntu日本語フォーラムに寄せられた相談の解決事例を元にして書かれたもので、1993年にRoland社から発売されたSC-55mkIIをUbuntuで利用する方法を説明しています。
こういったデバイスも通常のサウンドデバイスと同じように、ALSA(Advanced Linux Sound Architecture)によって利用することが可能となっています。ALSAはLinux標準のサウンドドライバ兼サウンド環境です。現在リリースされているALSAにおいてどのサウンドデバイスが使えるのか気になるところですが、ALSAウェブサイトのMatrix:Main - AlsaProject で、対応しているサウンドデバイス一覧表を見ることができます。これによると、Roland/Edirol社ならSCシリーズ、SKシリーズ、SDシリーズ、XVシリーズ、Fantom-Xシリーズなどの多くが、Yamaha社ならMUシリーズ、MOTIF/MOTIF-Xシリーズなどの多くがサポートされているようです。
MIDIファイル演奏からリアルタイム演奏へ
一般的に「MIDI」と呼ばれているものは、MIDI規格に基づいて作成されたファイル(SMF=Standard MIDI File)のことを意味していることの方が多いかもしれません。これは、インターネットが低速だった時代に、音データをやり取りするための標準的な方法だったためです。お互いに共通のMIDI音源を持っていてさえいれば、音の演奏データであり軽量なMIDIファイルだけやり取りすることで、音データへの変換を双方で行うことができました。timidityの本来の用途はここにあったわけです。
現在はインターネットの高速化でこのような必要性がなくなり、圧縮された音データでやりとりできるようになりました。MIDIファイルは携帯するデバイス内で使われる程度となりましたが、さらにここ数年の大容量メモリの低価格化やフラッシュメモリの一般化が影響し、MIDIファイルはその出番をどんどん減らしつつあります。しかし、MIDIはファイルを交換するためだけの規格ではありません。
というわけで、次回はMIDIコントローラやMIDIシーケンサを導入して、timidity++を使ってリアルタイム演奏をする方法をお伝えします。timidity++以外にもUbuntuで利用できるソフトウェアシンセサイザはたくさんあり、その基本となるシステムであるALSAシーケンサ機能についても解説したいと思います。