0

我在 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>

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

4

1 回答 1

0

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

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

w.addEventListener('touchstart', myFunctionThatPlaysAnyWebAudioSound);
于 2012-11-14T01:07:20.387 回答