javascript - 如何使用网络音频 api 获取麦克风输入音量值?

标签 javascript html google-chrome html5-audio web-audio-api

我正在使用带有网络音频 api 的麦克风输入,需要获取音量值。

现在我已经让麦克风工作了: http://updates.html5rocks.com/2012/09/Live-Web-Audio-Input-Enabled

此外,我知道有一种方法可以控制音频文件的音量: http://www.html5rocks.com/en/tutorials/webaudio/intro/

    // Create a gain node.
    var gainNode = context.createGain();
    // Connect the source to the gain node.
    source.connect(gainNode);
    // Connect the gain node to the destination.
    gainNode.connect(context.destination);
   // Reduce the volume.
   gainNode.gain.value = 0.5;

但是如何将这两者结合起来得到输入音量值呢? 我只需要这个值,不需要操纵它。

有人知道吗?

最佳答案

想要获得“音量”的主要原因有两个:

  1. 检测 源何时“削波” - 即信号的绝对值超过预设水平(通常非常接近 1.0),此时它将开始削波。
  2. 让用户感觉他们的信号有多大

我之所以单独列出这些是因为第一个要求您处理每个 样本——否则您可能会错过一个短暂的瞬变。为此,您需要使用 ScriptProcessor 节点,并且必须遍历 onaudioprocess 内缓冲区中的每个样本,以查找剪辑上方的绝对值等级。您可以然后也只确定 RMS 水平 - 只需将每个样本的平方相加,除以 N,然后取平方根。 不要onaudioprocess 中渲染,不过 - 设置您在 requestAnimationFrame 上访问的值。

您还可以使用 AnalyserNode 进行电平检测,然后对数据进行平均,有点像 other answer does使用 getAverageVolume。然而,另一个答案是 NOT ScriptProcessor 的良好使用 - 事实上,它根本不处理脚本节点,甚至不传递数据,它只是像定时器回调一样使用它。通过使用 requestAnimationFrame 作为视觉回调,您可以FAR 得到更好的服务;永远不要像这样从 onaudioprocess 内部设置布局或视觉参数,否则你会乞求破坏你的音频系统。如果您不需要剪辑检测,只需在 AnalyserNode 上执行 getByteFrequencyCount/getAverageVolume(但您应该尽量减少频段数量在分析器中 - 64 是最小值,我认为),你应该预先分配和重用 Uint8Array 而不是每次都分配它(这会增加垃圾收集)。

关于javascript - 如何使用网络音频 api 获取麦克风输入音量值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21247571/

相关文章:

javascript - SQL更新时推送数据

javascript - 从 ajax 调用请求返回值的函数

javascript - 如果 SQL 中有数据则显示一个按钮,否则隐藏

javascript - 通过 JQuery 的表单显示不起作用

javascript - 在流行的浏览器中, "console.log"关于执行延迟的最新行为是什么?

javascript - 第二个 yAxes 值未使用 Chart.js 正确绘制图表

HTML 控件垂直对齐

html - 如何隐藏滚动条但保持内部 div 的滚动能力?

css - 我的阴影过滤器语法不正确吗?

jquery - Chrome/Safari模糊功能支持在jquery中检查