音の鳴るブログ

鳴らないこともある

iOS6 の Web Audio API を使う

朝起きたら timbre.js が iOS6 で鳴らないやんけみたいなメールが来ていたので慌てて対応しました。スケールするマリオホーミーiPhone で、iPad で鳴ります!!


ただ、まだ不安定な感じで、すごくブチブチに鳴ってしまうときと、奇麗に鳴るときがある感じです。UIWebView だと確実にブチブチになる。


僕は JavaScriptNode でゼロから信号処理を行う派ですが、こんな感じにしたら使えるようになりました。 AudioBufferSourceNode を JavaScriptAudioNode に入力してあげないといけないみたいです。


追記
ちゃんと確認していないですが、画面読み込み後等に自動でスタートするのはダメっぽい。
ボタンとか画面をタッチしてから音を鳴らすとかしたほうが良さそうです。


    ctx = new webkitAudioContext()
    src = ctx.createBufferSource() # ← これが必要!!
    node = ctx.createJavaScriptNode 1024, 1, 1

    node.onaudioprocess = (e)->
        out = e.outputBuffer.getChannelData 0
        for i in [0...out.length]
            out[i] = Math.random()

    isPlaying = false
    $('#play').on 'click', ->
        if not isPlaying
            src.noteOn 0      # ← これが必要!!!!
            src.connect node  # ← これが必要!!!!!!
            node.connect ctx.destination
            isPlaying = true
        else
            src.disconnect()
            node.disconnect()
            isPlaying = false