在iOS 6中自动播放WebAudio API

时间:2012-09-18 14:04:54

标签: html audio ios6

我在iOS6中使用WebAudio API执行了一些测试。看来当你点击一个按钮时,AudioBufferSourceNode将被正确创建并连接到Contexts目的地。

我只是想知道在加载页面时是否有任何方式可以自动播放声音,因为iOS6设备似乎正确构建了SourceNode,但没有声音出现。

我在下面发布了我的代码:

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>HTML 5 WebAudio API Tests</title>

    <script type="text/javascript">
        var audioContext,
            audioBuffer;

        function init() {
            try {
                audioContext = new webkitAudioContext();
                initBuffer('resources/dogBarking.mp3');
            } catch(e) {
                console.error('webkitAudioContext is not supported in this browser');
            }
        }

        function initBuffer(desiredUrl) {
            var url = desiredUrl || '';
            var request = new XMLHttpRequest();
            request.open("GET", url, true);
            request.responseType = "arraybuffer";
            request.onload = function() {
                audioContext.decodeAudioData(request.response, function(buffer) {
                    audioBuffer = buffer;
                }, onError);
            }

            request.send();
        }

        function playSound(startTime, endTime) {
            var audioSource = audioContext.createBufferSource();
            audioSource.buffer = audioBuffer;
            audioSource.connect(audioContext.destination);
            audioSource.noteOn(0);
            audioSource.noteOff(10);
        }
    </script>
</head>

<body onload="init()">
    <script type="text/javascript">
        (function() { 
            var buttonNode = document.createElement('input');
            buttonNode.setAttribute('type', 'button');
            buttonNode.setAttribute('name', 'playButton');
            buttonNode.setAttribute('onclick', 'playSound(0, 1)')
            buttonNode.setAttribute('value', 'playSound()');
            document.body.appendChild(buttonNode);

            document.write('<a id="test" onclick="playSound(0, 2)">hello</a>');

            var testLink = document.getElementById('test');
            var dispatch = document.createEvent('HTMLEvents');
            dispatch.initEvent("click", true, true);
            testLink.dispatchEvent(dispatch);
        }());
    </script>
</body>
</html>

我希望这是有道理的。 亲切的问候, 杰米。

1 个答案:

答案 0 :(得分:0)

这个问题与No sound on iOS 6 Web Audio API非常相似。 WebAudio API需要初始化用户输入,并且在以这种方式播放第一个声音之后,WebAudioAPI可以在当前会话期间无需任何操作的情况下工作。

您可以通过向第一个窗口touchstart事件添加侦听器来初始化API,如下所示:

w.addEventListener('touchstart', myFunctionThatPlaysAnyWebAudioSound);