我想实现一个知道时间的AudioWorkletProcessor。例如:如何将DelayNode重新实现为处理器?
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)发布于 2020-06-30 06:40:29
MDN说说
..。驻留在AudioWorkletGlobalScope中,并在Web呈现线程上运行。
据说AudioWorkletGlobalScope引用了它的上下文
sampleRate:只读 返回一个浮点数,该浮点数表示关联BaseAudioContext的采样率。
所以你也许可以简单地,神奇地
console.log(sampleRate)或者你需要做的任何事。
https://stackoverflow.com/questions/62651602
复制相似问题