非常に短いコードから音楽を生成するのがおもしろかったので,理解を深めようと思って,プレイヤーを作った.
勉強用に作っただけで,既存のプレイヤーと比べて,何か機能が増えたりしているわけではない.
http://hitode909.appspot.com/one-liner-music/
Web Audioを使っている.Google Chromeで動く.
参考
意見
- 音を出しながら関数書き換えられるので,ライブで使うのに向いてる
- サンプリングレートを落とすと変な音を聞き取りやすくなる
- WAVファイルを生成して再生する形式のプレイヤーと音がちょっと違う気がする,8ビットで計算したのを16ビットに変換して再生するときに劣化している?
- 波形の可視化,フーリエ変換して周波数ごとに表示しているのかと思ったら,そうではなくて,普通に波形を縦→横の順に並べているだけだった
- Web Audioもずっと音を出してると音が出なくなる,リロードしたりブラウザを再起動したりすると直る,原因不明
- WAVファイルを作りまくってページに埋め込むより,Web Audioを使ったほうがいい音が出るし,そんなに重くならなくて良い.ただし,使えるブラウザが限られている.Firefoxにもなんかあるけど,使い方が違う.
- 音を出すためのJavaScriptの関数を入力できるのだけど,alert(1)とか書くと延々とalertが出たりする.曲を共有とか言ってcookie取られたりすると嫌だったので,共有機能はなくしてある
- Web AudioのAPI,ながめてるといろいろありそうだった,リズムマシンのやつとか,ごちゃごちゃ書いてあって,サンプルを登録して再生とか,エフェクトをかけるとか,ありそうだった
作品
(t<<2|t<<3 ) | (t | (t / 15))
t&(t<<(t/800)) | (t-16000)*((t-16000)<<((t-16000)/800)) | (t-32000)&((t-32000)<<((t-32000)/800))
公園で作った曲
(t<<2 & t>>2) | (t<<3 & t>>3) | (t<<7 & t>>7)
静かな曲
(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