由于旧的 Webaudio 脚本处理器自 2014 年以来已被弃用,并且 Audioworklets 在 Chrome 64 中出现,因此我决定尝试一下。但是我在移植我的应用程序时遇到了困难。我将从一篇好文章中举两个例子来证明我的观点。
首先是脚本处理器方式:
var node = context.createScriptProcessor(1024, 1, 1);
node.onaudioprocess = function (e) {
var output = e.outputBuffer.getChannelData(0);
for (var i = 0; i < output.length; i++) {
output[i] = Math.random();
}
};
node.connect(context.destination);
Run Code Online (Sandbox Code Playgroud)
另一种填充缓冲区然后播放它:
var node = context.createBufferSource(), buffer =
context.createBuffer(1, 4096, context.sampleRate), data = buffer.getChannelData(0);
for (var i = 0; i < 4096; i++) {
data[i] = Math.random();
}
node.buffer = buffer;
node.loop = true;
node.connect(context.destination);
node.start(0);
Run Code Online (Sandbox Code Playgroud)
两者之间的最大区别是第一个在播放期间用新数据填充缓冲区,而第二个则预先生成所有数据。 …