読者です 読者をやめる 読者になる 読者になる

AcrionScript でからくりショパン

ActionScript3 SiON wonderfl


GIMMICK – FANTAISIE IMPROMPTU | Si+ (wonderfl.net)

SiON v0.652 で MIDI データ読込に対応しました

MIDIデータは、「音楽データとしては圧倒的に容量が小さい」という大きな特徴があります。このため、まだフロッピーがメインの外部記憶媒体だった時代から、ストレージ容量が限られていた時代、ネット回線が細かった時代、携帯電話のインフラが十分でなかった時代、それぞれの時代/場所で少しずつ形を変えながら、しぶとく長く広く普及してきました(今でもカラオケなどの領域では現役です)。
これら MIDI 普及の大きな要因は「圧倒的に容量が小さい」という特徴によるものでしたが、近年では扱える情報量が大きくなったため、このメリットはほとんど得られなくなりました。結果、所詮「楽譜」でしかない MIDI データが録音した音そのものに勝てるわけも無く(これに関しては後述)音楽データとしての役割を終え現在に至ります。
このような背景から「動画配信が主流の時代に、今更 MIDI データ対応とかナイワーwww」と思われがちですが、自分はそうは思っていません。
MIDI データは、上述の経緯から「音楽データ」として扱われていますが、本来は「楽譜データ」です。楽譜データにしか出来ないことはいっぱいあるはずです。今回はこの点について書いてみようと思います。

MIDI ファイルがこの先生きのこるには

MMLのときと論調が全く同じ件はおいといて。MIDIMML と異なり windows と重なってる部分があるので、別にほっといても膨大な資産は失われること無く生き残ると思ってますが。
MIDI は「楽譜データ」です。まず、典型的な音楽データとしてmp3と比べた短所/長所を考えます。

  • 短所
    • 楽譜を再生する環境によって聞こえ方が大きく異なる
    • 楽器演奏のみ。今のところ歌とかムリ
    • ギターの奏法による違い、ブラスの息による違い、打楽器の打点による違い、その他もろもろムリ
    • ようするに、どんなに細かく打ち込んでも、演奏の「模倣」に過ぎない
    • リアルタイムで再生する場合、波形データ再生よりも複雑で負荷が高い
  • 長所
    • 音の高さ、大きさ、出音タイミングを完全に把握・制御できる
    • パート毎に消音など、データ再生時にさまざまな加工が可能
    • 再生側で音を自由に差し替えることが出来る
    • いかに演奏の模倣ができるかという点で技術差が出る
    • 情報がシンプルで、容量が小さい
    • 普及率が高く、基本的オープンソース文化

なんというか。
世間的には MIDI データは「音楽データ」という認識なのでこのように並べていますが、本質的に全然違うものを比べてるのでムリがあるように感じます。
mp3データは、例えば完成済みのプラモデルです。そこから設計図をおこすのは職人技となります(いわゆる耳コピ職人)。逆にmidiデータは設計図だと思います。ただし素材は自分で調達しなければなりません(Windows標準搭載のソフト音源「ゲイツシンセ」もありますが...)。普通、この素材は音源メーカーが提供してくれますが、奏者なら1パートを楽譜として使用すれば唯一無二の完成品となります。
プラモデルと設計図を比較するのはナンセンスだと思います。


さて、次に MIDI の利用方法を考えてみます。

音の高さ、大きさ、出音タイミングを完全に把握・制御できる
パート毎に消音など、データ再生時にさまざまな加工が可能

今回のGIMMICK – FANTAISIE IMPROMPTU | Si+もそうですが、楽譜を用いれば「より密に音楽と連携したインタラクション」が可能になります。これはそもそも SiON のコンセプトそのものなので、これまで SiON で作ってきた様々な音楽同期ミニアプリのベースを MIDI に差し替えるとイメージしやすいかもしれません。

再生側で音を自由に差し替えることが出来る

これは「楽譜を再生する環境によって聞こえ方が大きく異なる」という短所の裏返しですが、SiON のシンセエンジンを使えば、音源チップエミュレータMIDIデータから鳴らす事が可能となります。これまで職人が VSTi と 音楽作成環境 を駆使して実現していたことが、リアルタイムにFlash上で実現できる事になります。

情報がシンプルで、容量が小さい

MIDIデータには様々な「聞こえない情報」を仕込むことが出来ます。これを使って、例えばゲーム用途の譜面データを仕込めば音ゲーが出来ます。というか、レイテンシに難がありますが、やろうと思えば BMS プレイヤーだって作れます。また、どんなに扱えるデータ容量が増えたとはいえ、複数の音楽ファイルを落とすとなると時間が掛かるし、MIDIファイルの容量の小ささはやはり魅力です。

普及率が高く、基本的オープンソース文化

言うまでも無く、ネット上にある膨大なフリーMIDI素材を録音せずに直に扱えるというのは、非常に大きなメリットです。ノベルゲームのBGMなんかで特に威力を発揮すると思います。ただしリアルタイム再生の負荷は高いので過信は禁物。

SiON の高度な音インタラクション機能をMIDIファイルで

MIDI ファイルを扱う方法は簡単で、SiON が出来る大半の事を MIDI 演奏に合わせて行えます。ここでは基本的な使い方だけにとどめておいて、細かい使い方は後続エントリで書きたいと思います。

// 各種インスタンス
var driver:SiONDriver = new SiONDriver();
var smfData:SMFData = new SMFData();

// Standard MIDI file を読み込む
smfData.load(new URLRequest(MIDI_FILE_URL));
smfData.addEventListener(Event.COMPLETE, onComplete);

function onComplete(e:Event) : void {
    // MIDI event handler の登録
    driver.addEventListener(SiONMIDIEvent.NOTE_ON,  onNoteOn);
    driver.addEventListener(SiONMIDIEvent.NOTE_OFF, onNoteOff);
    driver.addEventListener(SiONMIDIEvent.PROGRAM_CHANGE, onProgramChange);
    driver.addEventListener(SiONMIDIEvent.CONTROL_CHANGE, onControlChange);
    driver.addEventListener(SiONMIDIEvent.PITCH_BEND, onPitchBend);
    // Standard MIDI file の再生
    driver.play(smfFile);
}

使い古されたはずのMIDIデータで手垢がついていない領域

GIMMICK – FANTAISIE IMPROMPTU | Si+ では SiONMIDIEvent.NOTE_ON くらいしか使っていません。言ってしまえば、単なるMIDIプレイヤーの鍵盤表示の延長です。
しかし、たったこれだけでも、相当インパクトが強いものを作れるなと感じました。これまでMIDIデータは音楽データとして扱われてきたため、今回のように楽譜データとして応用される例が少なかったのが原因だと考えています。
MIDI 演奏を Event Handler で簡単に取れるライブラリは、全言語で見てもかなり珍しい部類だと思います(そもそも MML 演奏情報を取得できるライブラリはもっと珍しい訳ですが)。アイディア次第でまだまだできると思うので、ぜひ色々試してみてください。