僕も「非常に短いコードから音楽を生成して再生するやつ」つくった
非常に短いコードから音楽を生成して再生するやつ - 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