我正在嘗試實現Web Audio API。該代碼適用於Chrome 29.0.1547.76,但不適用於Safari 6.0.5(8536.30.1)。關鍵是我使用noteOn(0)還是start(0)。Safari上是否支持Web Audio API source.start(0)(在Chrome上它工作得很好)?
我想用start()方法,這樣我可以播放聲音的一部分:
asource.start(0, 2, 1);
在Chrome中工作正常(立即播放,在2秒大關開始,效力於1秒),但是結果在
TypeError: 'undefined' is not a function (evaluating 'asource.start(0, 2, 1)')
在Safari上。用
代替asource.noteOn(0);
工作。 [嗯,我需要調用noteOff(0)而不是stop(0)。]我得到與開始(0)相同的錯誤。那麼,我假設Safari不會實現start(0)?但是如果是這樣,爲什麼HTML5 Rocks中的一些使用start(0)的例子有效?
僅供參考,以下是完整的網頁。我嘗試了很多不同的聲音/格式;都會導致相同的錯誤。
<!DOCTYPE html>
<html lang=en>
<head>
<meta charset="utf-8">
<title>Web Audio API Issue</title>
</head>
<body>
<p>Example working on Chrome but not Safari when using start()</p>
<button id="Load" onclick="init()" >Load</button>
<button id="Play" onclick="playSound()" disabled>Play</button>
<button id="Stop" onclick="stopSound()" disabled>Stop</button>
<script>
var web_audio_context;
var abuffer;
var asource;
function init() {
contextClass = (window.AudioContext ||
window.webkitAudioContext ||
window.mozAudioContext ||
window.msAudioContext);
web_audio_context = new contextClass();
var theURL = './digits.mp3';
var xhr = new XMLHttpRequest();
xhr.open('GET', theURL, true);
xhr.responseType = 'arraybuffer';
xhr.onload = function(e) {
finishedLoading(this.response);
};
xhr.send();
}
function finishedLoading(arrayBuffer) {
web_audio_context.decodeAudioData(arrayBuffer, function(buffer) {
abuffer = buffer;
document.getElementById('Load').disabled = true;
document.getElementById('Play').disabled = false;
document.getElementById('Stop').disabled = false;
}, function(e) {
console.log('Error decoding file', e);
});
}
function playSound() {
asource = web_audio_context.createBufferSource();
asource.buffer = abuffer;
asource.connect(web_audio_context.destination);
asource.start(0, 2, 1);
}
function stopSound() {
asource.stop(0);
}
</script>
</body>
</html>
根據https://developer.mozilla.org/en/docs/Web/API/AudioBufferSourceNode的AudioBufferSourceNode有狀態上的Safari瀏覽器 「不明」。 在這種情況下,我想這不是完全實施。 –
Safari 6.1(10月22日發佈)解決了這個問題。該代碼現在可以在Chrome和Safari中使用。 – RPW