【发布时间】:2021-04-25 11:21:32
【问题描述】:
我正在尝试创建一个可循环播放单个声音实例以创建一种延音效果的 audioworklet。无论我循环输入多少个部分,我都会不断听到一种跳动的声音。一个实例可以调用多少次处理器?
为了给你一个想法,这是我目前所拥有的:
constructor() {
super();
this.sound = [];
this.count = 20;
this.step = [0, 0];
}
process(inputs, outputs, parameters) {
if (inputs && inputs.length) {
for (var i = 0; i < inputs[0].length; i++) {
var input = inputs[0][i];
var output = outputs[0][i];
if (!this.sound[i]) {
this.sound[i] = [];
}
if (this.sound[i].length < this.count) {
this.sound[i].push([]);
for (var j = 0; j < input.length; j++) {
this.sound[i][this.sound[i].length - 1][j] = input[j];
}
} else if (this.sound[i]) {
var s = this.sound[i][this.step[i] % this.sound[i].length];
for (var j = 0; j < s.length; j++) {
output[j] = s[j];
}
this.step[i]++;
}
}
}
return true;
}
所以我的想法是,我在每个通道的长度为 N 的数组中捕获输入输入(在我的例子中,有 2 个通道)。然后,一旦该数组已满,我会循环遍历该数组以填充输出,直到该节点被禁用。
【问题讨论】:
-
您必须提供有关您正在做什么的更多详细信息。
-
@RaymondToy,我添加了一些代码来给你一个更好的主意。如果这有帮助,请告诉我。
-
这有帮助,但我看不出有什么问题。如果可以,您能否在 jsfiddle.net 或 codepen.io 上创建一个更完整(但仍然很简单)的示例?对于测试,您不需要麦克风输入。只需使用振荡器或其他东西作为输入。这会很有帮助!
-
@RaymondToy,我创建了一个使用脚本处理器的 jsfiddle,因为我无法在该站点上创建一个 audioworklet。但它给出了我面临的相同结果和问题。 jsfiddle.net/5jh0qcoe 要关注的代码是第 31-51 行。谢谢
标签: web-audio-api audio-worklet