僕も「非常に短いコードから音楽を生成して再生するやつ」つくった


非常に短いコードから音楽を生成して再生するやつ - hitode909のダイアリー
http://d.hatena.ne.jp/hitode909/20111024/1319204646


これを見て面白かったので僕もやってみた。


ONE-LINER-ORCHESTRA
http://mohayonao.herokuapp.com/one-liner-orchestra



同じものを作ってもしょうがないので、いくつか機能をつけたら、たったひとつの式で全てを生み出す無骨さが無くなった代わりに非常に複雑な音楽が簡単に作れるようになった。


非常に長い周期のノコギリ波はフェードイン/アウトっぽいし、三角波はオートパンっぽい、それらのパラメータも同じような式で操作できたら面白そう。それをターミナルのようなインターフェイスで式(コマンド)を次々に入力していくことで、複数トラックを制御すれば...!!というものです。


Chrome(Web Audio API)とFirefox(Audio Data API)ハイブリッドに動く。
たまにブラウザが落ちる.. そうなったらごめんなさい。


リファレンス

システムコマンド

start プレイヤーの開始
stop プレイヤーの停止


ミキサーコマンド

add (exp) トラックを追加 (addは省略可)
del [id] トラックを削除
sel (id) トラックを選択
ch (id) トラックを選択 (selと同じ)
mute [id] ミュート
solo [id] ソロ

[id]は省略可能、その場合は選択中のトラックに適用される


トラックコマンド

vol (exp) ボリューム1を設定
amp (exp) ボリューム2を設定
pan (exp) パンを設定
pitch [num] ピッチシフトを設定 (1=1オクターブ, 省略時は0と同じ)
filter (NONE,LP,HP,BP,BR) フィルタを設定
cutoff (exp) カットオフを設定
res (exp) レゾナンスを設定
famp (exp) フィルターデプスを設定


exp の部分は t<<1 とかの式を入れられる。単純に数値でもOK。128が真ん中。


つくった曲

冒頭デモのスコア

t*(((t>>12)|(t>>8))&(63&(t>>4)))
filter HP
cutoff t<<1|t>>5
pan t<<3
t<<1|t>>5
pitch 4
filter LP
res t<<1|t>>7
cutoff t<<2
(t<<1)/(~t&(1<<(t&15)))
pan 224
del 1
del 0
amp 64
amp 32
amp 16
amp 8
del
stop

ビート感あるやつ

(t>>4)&((t<<5)|(Math.sin(t)*3000))
filter LP
cutoff t<<1|t>>5
res 224
t<<5|t>>2
pan t<<1|t>>6
pitch 1
amp t

id:hitode909 のモチーフを使った曲

t&(t<<(t/800)) | (t-16000)*((t-16000)<<((t-16000)/800)) | (t-32000)&((t-32000)<<((t-32000)/800))
(Math.sin(t/((t>>10)%7+2))*0.7 + Math.sin(t/((t>>11)%4+3)) + Math.sin(t/((t>>13)%6+4)))*30+128
ch 0
amp t<<5
pan (t>>2)|(t&0x0f0)<<2
filter BP
ch 1
pan 96
(t<<5)|(t>>2)|(t<<3)
amp 64
pan 240

参考

countercomplex: Algorithmic symphonies from one line of code -- how and why?
http://countercomplex.blogspot.com/2011/10/algorithmic-symphonies-from-one-line-of.html


1行のコードからアルゴリズム交響曲 - どのように、そしてなぜ? - 閉村観光
http://d.hatena.ne.jp/miujun/20111003


非常に短いコードから音楽を生成して再生するやつ - hitode909のダイアリー
http://d.hatena.ne.jp/hitode909/20111024/1319204646


Pythonインタプリタを楽器にしてしまう簡単な方法。 - 蟲!虫!蟲! - #!/usr/bin/bugrammer
http://bugrammer.g.hatena.ne.jp/nisemono_san/20111022/1319289787