AudioWorkletNode:parameters 属性
基线 广泛可用
此功能非常成熟,并在许多设备和浏览器版本中运行。它自 2021 年 4 月.
值
AudioWorkletNode
接口的只读parameters
属性返回关联的AudioParamMap
,即一个类似于Map
的AudioParam
对象集合。它们在创建基础AudioWorkletProcessor
时根据其parameterDescriptors
静态 getter 实例化。
示例
包含AudioParam
实例的AudioParamMap
对象。它们可以像默认AudioNode
一样进行自动化,并且它们的计算值可以在process
方法中使用你的AudioWorkletProcessor
。
为了演示自定义AudioParam
的创建和使用,我们将扩展AudioWorkletNode
页面中的示例。我们在那里创建了一个输出白噪声的简单节点。在这里,我们还将创建一个自定义增益参数,以便我们可以直接更改输出的音量(尽管也可以使用GainNode
来实现这一点)。
首先,我们需要定义一个自定义AudioWorkletProcessor
,并将其注册。请注意,这应该在单独的文件中完成。
我们通过添加一个静态
parameterDescriptors
getter 来扩展处理器。它将在内部由AudioWorkletNode
构造函数使用,以用实例化的AudioParam
对象填充其parameters
。// white-noise-processor.js
class WhiteNoiseProcessor extends AudioWorkletProcessor {
static get parameterDescriptors() {
return [
{
name: "customGain",
defaultValue: 1,
minValue: 0,
maxValue: 1,
automationRate: "a-rate",
},
];
}
process(inputs, outputs, parameters) {
const output = outputs[0];
output.forEach((channel) => {
for (let i = 0; i < channel.length; i++) {
channel[i] =
(Math.random() * 2 - 1) *
(parameters["customGain"].length > 1
? parameters["customGain"][i]
: parameters["customGain"][0]);
// note: a parameter contains an array of 128 values (one value for each of 128 samples),
// however it may contain a single value which is to be used for all 128 samples
// if no automation is scheduled for the moment.
}
});
return true;
}
}
registerProcessor("white-noise-processor", WhiteNoiseProcessor);
js
我们通过添加一个静态
parameterDescriptors
getter 来扩展处理器。它将在内部由AudioWorkletNode
构造函数使用,以用实例化的AudioParam
对象填充其parameters
。const audioContext = new AudioContext();
await audioContext.audioWorklet.addModule("white-noise-processor.js");
const whiteNoiseNode = new AudioWorkletNode(
audioContext,
"white-noise-processor",
);
whiteNoiseNode.connect(audioContext.destination);
接下来,在我们的主脚本文件中,我们将加载处理器,创建一个AudioWorkletNode
实例,并将处理器名称传递给它,并将节点连接到音频图。
我们通过添加一个静态
parameterDescriptors
getter 来扩展处理器。它将在内部由AudioWorkletNode
构造函数使用,以用实例化的AudioParam
对象填充其parameters
。const gainParam = whiteNoiseNode.parameters.get("customGain");
gainParam.setValueAtTime(0, audioContext.currentTime);
gainParam.linearRampToValueAtTime(0.5, audioContext.currentTime + 0.5);
规范
现在我们可以像这样更改节点上的增益 |
---|
Web 音频 API # 规范 |
浏览器兼容性
dom-audioworkletnode-parameters