RubyVST
これはなにか
肝であるフィルタ処理の部分だけをスクリプト言語Rubyで記述できるVST。あるいはCUI LoverのためのVST。あるいはVSTプロトタイプ環境。
MIDIフィルタ仕様
グローバル変数$mにMIDIメッセージが入っている。スクリプト一周終了時の$mがそのまま後段のVSTに送られるので、適宜これを編集すればMIDIフィルタになる。
$mはMIDIメッセージのArrayになっており、オーディオの処理周期に合わせているのでとても周期が早く、手弾きならたいがいは1イベントしか入ってないはず。
MIDIメッセージは最大4つの整数からなるArrayで表現されている。詳細MIDI規格がすばらしくまとまっているので参考にされたし。たとえば0x90,0x80がノートオン/オフであることを知っていれば十分だろう。
ノートオンメッセージは[0x90, note_number,vel]のようになっている。よく使うであろうノートオンオフについてはマクロを用意していて、m.note, m.vel などが使える。これらはm[1],m[2]と同じだが、0x80か0x90の時にしか作用しないようにしてある。
たとえば入ってくるメッセージのノートを一斉に+3変更したければ以下のように書くだけでよい。
$m.each do |m| m.note+=3 end
Arrayのまま処理するならば、これは以下と同じである。
$m.each do |m| if (m==0x80 || m==0x90) m[1]+=3 end end
すべてのノートに+3でハモリを入れるには以下のようにすればよい。(もちろん、すべて+3ではハモりとはいえない)。
$a=[] $m.each do |m| a=m.dup a.note+=3 $a.push a end $a.each do |a| $m.push a end
追加すべきノートからなるArrayである$aを作っておいて、最後に追加している。 うーん、これはせめて$m.push $aと書けるようにしたいなあ。
まてよ、一番目の例も、$m.note+=3で済むようにできるんじゃないか? そうすれば最後のやつも、
$a=$m.dup $a.note+=3 $m.push $a
か。うーん、これいいね。---