gpt4 book ai didi

javascript - ScriptProcessorNode 跳过

转载 作者:行者123 更新时间:2023-11-29 15:32:49 31 4
gpt4 key购买 nike

我有以下 javascript 代码:

var audio = null;

try {
window.AudioContext = window.AudioContext || window.webkitAudioContext;
audio = new AudioContext();
} catch (e) {
alert("Web Audio API is not supported in this browser");
}

var scriptNode = audio.createScriptProcessor(1024, 0, 1);

var pos = 0.0;

scriptNode.onaudioprocess = function(audioProcessingEvent) {
var output = audioProcessingEvent.outputBuffer;

for (var channel = 0; channel < output.numberOfChannels; channel++) {
var data = output.getChannelData(channel);

for (var i = 0; i < data.length; i++) {
data[i] = Math.sin(pos);

pos += 2.0 * 3.14159 * 440.0 / audio.sampleRate;

while (pos >= 2.0 * 3.14159) {
pos -= 2.0 * 3.14159;
}
}
}
}

scriptNode.connect(audio.destination);

我正在尝试访问网络音频的音频循环,这与低级音频流 API 在 C 中的工作方式很相似。这段代码应该连续播放 440 Hz 的音调,直到页面关闭。代码将播放音调,但一两秒后声音会反复跳动,这表明我的缓冲区空间已用完并且脚本不会在每个缓冲期都被调用。

我确信这个问题的解决方案很简单,但到底是什么导致了跳过?我怎样才能让这个脚本持续运行?

编辑:如果我刷新页面,跳过就会消失。这是浏览器错误吗?

最佳答案

将 ScriptProcessor 节点的缓冲区大小从 1024 增加到更大的值。或者使用 0 让浏览器为您选择一个值。

另请注意,ScriptProcessors 已弃用,但替代品尚不可用。替换应该表现得更好。

关于javascript - ScriptProcessorNode 跳过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32873044/

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