iPhoneの加速度センサーを使ってマラカス作成
WebMusicHackathon #3 に参加したので、WebAudio を使っておもちゃを作りました。
- 作ったコード > https://github.com/yoya/maracas
- 発表資料
http://diary.awm.jp/~yoya/data/2014/09/13/iPhoneMaracas.pdf
http://diary.awm.jp/~yoya/data/2014/09/13/iPhoneMaracas.pptx
マラカスを振ると音が鳴るのを加速度センサーを使ってシミュレーションしようという話です。
ハマったところ
- Mobile Safari は Performance.now() が使えない。
- 代わりに AudioContext の currentTime を使ったら、当初 0 しか返さず
- Oscillatorを作る等しないとタイマーが動き出さないらしい。
- 恐らく AudioParam のスケジューラで必要になるまで用意しないって事だろうけど。
- 尚、Mobile Safari はタッチイベント等から呼び出さないと Oscillator を作っても無駄。osc.start() もそうなので似た話だと思う。
addEventListener("touchstart", function() {
var osc = audioctx.createOscillator();
});
で解決。connect しなくても大丈夫。start さえ要らない。