Mabinogi MML Emulatorの開発の経緯
このプログラムは、Imaya氏のsmfPlayer.jsとsf2synth.jsと、以前開発したJavaScript MML Player(PSGConverter.js)を組み合わせて作ったプログラムである。
PSGConverter.jsは、しっぽのうたなどで使われていたMMLをMIDIに変換するPHPプログラムをJavaScriptに移植したものである。本来ならば、コンテンツデリバリーネットワークにこのスクリプトを置いて、自分でサイトでスクリプトを呼び出して、MMLの書かれた<pre>タグから自動的にプレイヤーを生成し、再生するという感じで使われることを想定していたが、QuickTimeのブラウザMIDIサポートの終了に伴い、時代遅れになってしまった。
そこで、まず、最初に候補に上がったのはMIDI.jsである。しかし、どうもこのアプリは、音色をすべてwavを埋め込んだJSONで管理しているようである。これじゃあ、容量と手間が計り知れないことになる・・・。また、もう一つmidi.jsというのがあるが、これはこれでどうも、サーバーサイドかemscriptenなのかは知らないが生成したオーディオファイルを送ってるだけのようなのであてにならない。
そんななか、imaya氏がSoundFont.sf2を用いたMIDIプレイヤーsmfplayer.jsを作っていた。これは衝撃だった、DTMでよく使われるSoundFontをそのまま音色集として呼び出し、ブラウザ上からとは思えないほど多彩な楽器を出すことができることが判明したのだ。ぱっとみた仕様だとsmfplayer.jsで読み込み可能なデータ形式は、Uint8ArrayでMIDIデーターを解析するようである。このため、バイナリ変換したMIDIを出力したときにUint8ArrayのarrayBufferをsmfplayer.jsにながしこむという実装になるだろう・
まぁ、わかりやすく説明すると、PSGConverter.jsで生成したMIDIファイルをバイナリからArrayBufferに流し込んでからMIDIプレイヤーにならさせるといった動作になっている。我ながら結構まどろっこしいことをやっているな。
SoundFontが使えるということは、MSXsplit.dlsをSoundFontに変換してしまえば、理論上同じ音で再生されるはずである。そんなこんなで作ったアプリがこれなわけです。
実際に作業にとりかかる
まず、MSXspirit.dlsをsoundfont形式に変換するところから始まる。
- 0
- 0pt