【发布时间】:2020-06-30 14:40:29
【问题描述】:
我想实现一个可感知时间的 AudioWorkletProcessor。例如:如何将DelayNode重新实现为Processor?
MDN 文档说:
根据规范,您的 process() 函数接收的每个音频块包含 128 帧(即每个通道 128 个样本),但计划该值将来会改变,实际上可能会根据因此,您应该始终检查数组的长度,而不是假设特定的大小。
我可以获得输入长度的帧数,但是如何获得使用的采样率?这样我就可以知道这个输入有多长(以秒为单位)。
我的最终目标是能够计算某个时间窗口内信号的平均能量。
class EnergyProcessor extends AudioWorkletProcessor {
process(inputs, outputs, parameters) {
if (inputs.length !== 1) {
throw 'invalid inputs'
}
// how much time is covered by inputs?
inputs[0].forEach((channel, channelID) => {
let sum = 0
let count = 0
channel.forEach((value, i) => {
sum += value * value
count += 1
for (let o = 0; o < outputs.length; o++) {
// skip when writing x channels to x - 1
if (channelID >= outputs[o].length) {
continue
}
outputs[o][channelID][i] = sum / count
}
})
})
return true
}
}
registerProcessor('EnergyProcessor', EnergyProcessor)
【问题讨论】:
标签: javascript html web-audio-api