我在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>
我希望这是有道理的。 亲切的问候, 杰米。
答案 0 :(得分:0)
这个问题与No sound on iOS 6 Web Audio API非常相似。 WebAudio API需要初始化用户输入,并且在以这种方式播放第一个声音之后,WebAudioAPI可以在当前会话期间无需任何操作的情况下工作。
您可以通过向第一个窗口touchstart事件添加侦听器来初始化API,如下所示:
w.addEventListener('touchstart', myFunctionThatPlaysAnyWebAudioSound);