AudioParamDescriptor - 指定了 AudioParam 对象的属性
AudioParamDescriptor
是 Web Audio API 的字典,指定了 AudioParam
对象的属性。它用于在 AudioWorkletNode
上创建自定义 AudioParam
。如果底层的 AudioWorkletProcessor
具有 parameterDescriptors
静态 getter,则 AudioWorkletNode
构造函数在内部使用基于此字典的返回对象数组来相应地填充其 parameters
属性。
属性
name
一个 DOMString
,表示 AudioParam
的名称。在该名称下,AudioParam
将在节点的 parameters
属性中可用,并在此名称下,AudioWorkletProcessor.process
方法将获取此 AudioParam
的计算值。
automationRate
可选
"a-rate
" 或 "k-rate
" 字符串,表示此 AudioParam
的自动化速率。默认为 "a-rate
"。
minValue
可选
一个 float
,表示 AudioParam
的最小值。默认为 -3.4028235e38
。
maxValue
可选
一个 float
,表示 AudioParam
的最大值。默认为 3.4028235e38
。
defaultValue
可选
一个 float
,,表示 AudioParam
的初始值。默认为 0
。
实例
为了演示自定义 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])
// 注意:参数包含 128 个值的数组(128 个样本中的每个值一个值),
// 但是,如果当前未计划自动化,则它可能包含单个值,该值将用于所有 128 个样本。
}
})
return true
}
}
registerProcessor('white-noise-processor', WhiteNoiseProcessor)
接下来,在主脚本文件中,我们将加载处理器,创建一个 AudioWorkletNode
实例,并为其传递处理器名称,然后将该节点连接到音频图。
const audioContext = new AudioContext()
await audioContext.audioWorklet.addModule('white-noise-processor.js')
const whiteNoiseNode = new AudioWorkletNode(audioContext, 'white-noise-processor')
whiteNoiseNode.connect(audioContext.destination)
现在我们可以像这样更改节点上的增益:
const gainParam = whiteNoiseNode.parameters.get('customGain')
gainParam.setValueAtTime(0, audioContext.currentTime)
gainParam.linearRampToValueAtTime(0.5, audioContext.currentTime + 0.5)
规范
规范 | 状态 | 备注 |
---|---|---|
Web Audio API AudioParamDescriptor 的定义 |
工作草案 | 初始定义。 |
桌面浏览器兼容性
暂无兼容数据