gpt4 book ai didi

javascript - Safari 是否支持 Web Audio API source.start(0)(它在 Chrome 上运行良好)?

转载 作者:搜寻专家 更新时间:2023-10-31 08:07:43 25 4
gpt4 key购买 nike

我正在尝试实现网络音频 API。该代码适用于 Chrome 29.0.1547.76,但不适用于 Safari 6.0.5 (8536.30.1)。关键是我是用 noteOn(0) 还是 start(0)。

我想使用 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)。] 我在 start(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>

最佳答案

在较新的 Web Audio API 版本中,方法 noteOn 被重命名为 start。 Safari 仍然使用旧版本,而 Chrome 使用更新版本。

试试看:

asource.start ? asource.start(0, 2, 1) : asource.noteOn(0, 2, 1);

关于javascript - Safari 是否支持 Web Audio API source.start(0)(它在 Chrome 上运行良好)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19083202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com