XNP2とMIDI
廃棄したPC-98機のソフトウェア資産の活用に、フリーでオープンソースなねこープロジェクトII(NP2)からフォークしたXNP2 20120302(要ビルド)というエミュレーターを利用している。今回、XNP2からMIDIで音を鳴らしたくなったため、ホストOSのUbuntuに、フリーでオープンソースなFluidSynthというソフトウェアシンセサイザーをインストールすることにした。
まずはターミナルからFluidSynthやサウンドフォント(音色のデータファイル)等をインストールし、仮想MIDIポートをロード後、FluidSynthを起動する。なお、以下では公式パッケージのサウンドフォントを利用しているが、対応しているsf2サウンドフォントはネットから選び放題で、定番とされているSGM-V2.01(無料)を利用することもできる。ただし、SGM-V2.01のほうがファイルサイズが大きいため、マシンパワーやメモリーを考慮し、今回は利用を控えた。
$ sudo apt-get install --no-install-recommends alsa-utils fluid-soundfont-gm fluidsynth
$ sudo modprobe snd-virmidi
$ fluidsynth -s -i -a alsa -r 48000 -g 1 /usr/share/sounds/sf2/FluidR3_GM.sf2 &
次に、ALSA上の仮想MIDIポートとFluidSynthを確認したら、仮想MIDIポート(下例の場合24:0
)とFluidSynth(下例の場合128:0
)を接続する。
$ aconnect -l
client 0: 'System' [type=カーネル]
0 'Timer '
1 'Announce '
client 14: 'Midi Through' [type=カーネル]
0 'Midi Through Port-0'
client 24: 'Virtual Raw MIDI 2-0' [type=カーネル,card=2]
0 'VirMIDI 2-0 '
client 25: 'Virtual Raw MIDI 2-1' [type=カーネル,card=2]
0 'VirMIDI 2-1 '
client 26: 'Virtual Raw MIDI 2-2' [type=カーネル,card=2]
0 'VirMIDI 2-2 '
client 27: 'Virtual Raw MIDI 2-3' [type=カーネル,card=2]
0 'VirMIDI 2-3 '
client 128: 'FLUID Synth (123456)' [type=ユーザ,pid=123456]
0 'Synth input port (123456:0)'
$ aconnect 24:0 128:0
第三に、MIDIポートのデバイス名を確認する。
$ ls /dev/snd/midi*
/dev/snd/midiC2D0 /dev/snd/midiC2D1 /dev/snd/midiC2D2 /dev/snd/midiC2D3
最後に、XNP2を起動し、XNP2のMIDIポートを設定する。具体的にはMIDI option
で、Device
のMIDI-OUT
に/dev/snd/midiC2D0
、Assign
のMIDI-OUT
にMIDI-OUT Device
を設定する。あとAssign
のModule
にGM
を選択したが、正直何を選択していいか分からなかった。

そうして、XNP2でBLACK PACKAGEの『殻の中の小鳥』とマイクロキャビンの『幻影都市 ILLUSION CITY』というゲームソフトを起動して確認したところ、いずれも音楽がMIDIで鳴ったので、そのうち上述のターミナルでの入力をスクリプト化しようと思う。ちなみに、事が終わってFluidSynthを終了するときは、以下のとおり。
$ aconnect -x
$ killall fluidsynth
なお、同様にTiMidity++も試したが、こちらはFluidSynthより動作が重く感じたので、今回は採用を見送った。
Comments