Linux で MIDI を再生する方法

Linux上で、SoundBlaster Live!のWaveTable音源を使ってMIDIを再生する方法について調べてみました。rosegarden と組合わせれば、フリーソフトだけで DTMができそうです。

必要なファイル/ツールの準備

  • 8mbgmsfx.sf2

音源のデータファイルです。Sound Blaster のCDROMからコピーするか、http://alsa.opensrc.org/8MBGMSFX.SF2 からdownloadします

  • awesfx

WaveTableのデータをサウンドカードに upload するためのツールです
http://www.alsa-project.org/~tiwai/awedrv.html

必要なツールは awesfx だけですが、そのままではコンパイルが通らないので awesfx-0.5.0d.tar.gz と awedrv-0.4.4.tgz をdownloadし以下の手順でコンパイルします。

$ tar xvfz awesfx-0.5.0d.tar.gz
$ tar xvfz awedrv-0.4.4.tgz 

$ cd awesfx-0.5.0d
$ ./configure

つづけてソースコードの修正

$ cp ../awedrv-0.4.4/awe_voice.h  include

さらに、ソースコード中の "linux/awe_voice.h" を "awe_voice.h" に置換します

$  find -name "*.c" -o -name "*.h" | xargs sed  --in-place s,linux/awe_voice.h,awe_voice.h,g

あとは、make 一発です

$ make
  • pmidi

MIDI再生用のプログラムです。
http://www.parabola.me.uk/alsa/pmidi.html

こちらは、./configure && make するだけです。

$ ./configure
$ make

使い方

まず midiバイスの状況を確認します

$ pmidi -l

pmidi コマンドは以下のように、MIDIバイスの一覧を出力します。出力されない場合は alsa のドライバ回りの設定を見直しましょう。

Port     Client name                       Port name
 16:0     SBLive! Value [CT4832]            EMU10K1 MPU-401 (UART)
 17:0     Emu10k1 WaveTable                 Emu10k1 Port 0
 17:1     Emu10k1 WaveTable                 Emu10k1 Port 1
 17:2     Emu10k1 WaveTable                 Emu10k1 Port 2
 17:3     Emu10k1 WaveTable                 Emu10k1 Port 3


次に音源データをロードします

$ sfxload 8mbgmsfx.sf2

これで、"Emu10k1 WaveTable" でMIDIが再生できます

再生

$ pmidi -p 17:0  hogehoge.mid 

"-p" でポートを指定します。"Emu10k1 Port"のいずれかを指定します。