首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebAudio API:如何访问AudioWorkletProcessor中的时间/采样率?

WebAudio API:如何访问AudioWorkletProcessor中的时间/采样率?
EN

Stack Overflow用户
提问于 2020-06-30 06:37:07
回答 1查看 496关注 0票数 0

我想实现一个知道时间的AudioWorkletProcessor。例如:如何将DelayNode重新实现为处理器?

MDN文档说:

根据规范,process()函数接收的每个音频块包含128个帧(即每个通道的128个样本),但计划在将来改变这个值,并且实际上可能会根据情况而有所不同,因此您应该始终检查数组的长度,而不是假设特定大小。

我可以得到输入长度的帧数,但是如何得到使用的采样率?这样我就可以知道这个输入有多长时间(以秒为单位)。

我的最终目标是能够计算出信号在某个时间窗口的平均能量。

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-30 06:40:29

MDN说

..。驻留在AudioWorkletGlobalScope中,并在Web呈现线程上运行。

据说AudioWorkletGlobalScope引用了它的上下文

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

所以你也许可以简单地,神奇地

代码语言:javascript
复制
console.log(sampleRate)

或者你需要做的任何事。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62651602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档