永久にバッハのインベンションを演奏するやつをつくった

Endless Invention
http://mohayonao.herokuapp.com/invention


何かを自動生成するようなプログラムを書くときマルコフ連鎖を使いたくなることは多いと思う。で、それ自体はそんなに難しくないんだけど、大体微妙な感じに仕上がってしまうので、なかったことにしてしまうことが多い。でも今回は諦めずに調整して比較的うまくいった。

工夫したところ

  • 八分音符は十六分音符ふたつといった具合に音の長さをいったん揃えている
  • ラが鳴っているときはミが鳴っていることが多いみたいな、二声がどう重なっているかも調べた。先の音長の正規化を行っているので簡単だった。
  • 正規化を行っているため、頻繁に同じ音の繰り返しが発生する。同じ音が続いたら無視する?ベロシティ下げてMIDIディレイっぽくする?今回は後者
  • ファミコンっぽい音
  • 半分現実で半分夢みたいな雰囲気を出すためにエフェクトをつけた
  • 悪夢っぽいインターフェイス

お知らせ

JavaScriptでリアルタイムに音を出す簡単便利なやつ、CoffeeScriptで無駄が多いので JavaScript だけで書き直した最新版を gist に pico-player.js として置いています。昨日の今日でごめんなさい。
https://gist.github.com/1342081