Ubuntu Weekly Recipe

第149回 MIDIとUbuntuの素敵な出会い(1) MIDIファイルを演奏してみる

この記事を読むのに必要な時間:およそ 4 分

別なバックエンドを使ってみる

バックエンドというのは,アプリケーションが作り出した音データの送り先です。timidity++においては「-O」オプションで指定します。これまではオプション「-Oe」として,ESounD (Enlightened Sound Daemon)を指定しました。ESounDというのはPulseAudioの前身と考えていただいて構いません。PulseAudioはこのESounDのエミュレーションをおこなえるため,事実上PulseAudioを直接指定していることになります。

PulseAudioサウンドサーバをバックエンドに指定(ESounDエミュレーション)

$ timidity -ig -Oe;

図2 GNOMEのサウンド設定ウィンドウ。timidityがPulseAudioの直接のクライアントとなっているのがわかる

図2 GNOMEのサウンド設定ウィンドウ。timidityがPulseAudioの直接のクライアントとなっているのがわかる

この他のバックエンド指定方法として,ALSAライブラリやJACKサウンドサーバを指定できます。

ALSAライブラリをバックエンドに指定

$ timidity -ig -Os;

図3 GNOMEのサウンド設定ウィンドウ。ALSAライブラリをバックエンドとするtimidityが,ALSA Plugin経由でPulseAudioのクライアントとなっていることがわかる

図3 GNOMEのサウンド設定ウィンドウ

JACKサウンドサーバをバックエンドに指定

$ timidity -ig -Oj;

図4 JACK CONTROL (qjackctl) のConnectionウィンドウ。timidityがJACKサウンドサーバにポートを開いているのがわかる

図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規格に,一部の音色を除いてほぼ対応しています。

注5
正確には,RolandのGSはGM以前のものであり,GSから他社との共通部分を抜き出して策定されたものがGMとなります。

ハードウェア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シーケンサ機能についても解説したいと思います。

著者プロフィール

坂本貴史(さかもとたかし)

Ubuntuのマルチメディア編集環境であるUbuntu Studioのユーザ。主にUbuntu日本コミュニティとUbuntu Studioコミュニティで活動。いつかユーザ同士で合作するのが夢。