hitode909の日記

以前はプログラミング日記でしたが、今は子育て日記です

非常に短いコードから音楽を生成して再生するやつ

非常に短いコードから音楽を生成するのがおもしろかったので,理解を深めようと思って,プレイヤーを作った.
勉強用に作っただけで,既存のプレイヤーと比べて,何か機能が増えたりしているわけではない.


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