【问题标题】:WebAudio API: How to access time / sample rate in a AudioWorkletProcessor?WebAudio API:如何在 AudioWorkletProcessor 中访问时间/采样率?
【发布时间】: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


    【解决方案1】:

    The MDN says那个

    [...] 位于 AudioWorkletGlobalScope 并在 Web Audio 渲染线程上运行。

    AudioWorkletGlobalScope 据说引用了它的上下文

    sampleRate:只读
    返回一个浮点数,表示关联的 BaseAudioContext 的采样率。

    所以你可能可以简单,神奇地

    console.log(sampleRate)
    

    或者你需要做的任何事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-25
      • 2021-12-25
      • 2011-06-09
      • 2016-11-06
      • 1970-01-01
      • 2020-12-31
      • 1970-01-01
      • 2011-04-05
      相关资源
      最近更新 更多