如何禁用过滤高频率的Web-Audio分析器

时间:2015-07-09 00:49:19

标签: html5 web-audio

我正在研究html5音频API。 我注意到分析模块在处理高频时遇到了问题。 好像里面有一个构建过滤器。 例如,如果我发出20Khz音并绘制getFloatFrequencyData的结果,我会看到以下频谱: enter image description here 但是,如果我使用Audacity,相同的信号如下所示:(注意峰值@ 20khz) enter image description here

我可以禁用分析模型的内置过滤器吗? 附:根据上下文画布,采样率足够高,所以我不会怀疑别名问题。

3 个答案:

答案 0 :(得分:2)

@cwilso有它,输入默认过滤,你需要将一个正确形成的约束对象传递给getUserMedia。格式有点繁琐,但考虑到它的职权范围,这是不可避免的。规范还没有完全由每个人实现,每个浏览器都有自己的一组前缀未记录的预处理器。这就是我用来获得最新音频的消息(2016年10月中旬)。这个列表可能也不完整 - 到目前为止我只看过FF和Ch。有没有其他人?

let constraints = {
  audio: {
    optional: [
      {echoCancellation: false},
      {mozAutoGainControl: false},
      {mozNoiseSuppression: false},
      {googEchoCancellation: false},
      {googAutoGainControl: false},
      {googNoiseSuppression: false},
      {googHighpassFilter: false}
    ]
  }
};

let mediaInput = navigator.mediaDevices.getUserMedia( constraints );

答案 1 :(得分:0)

听起来你正在使用音频(例如麦克风)输入?如果是这样,请确保关闭回声消除 - 将约束对象传递给getUserMedia,并将回声消除设置为false,la https://github.com/cwilso/Audio-Input-Effects/blob/master/js/effects.js#L52-L57https://github.com/cwilso/Audio-Input-Effects/blob/master/js/effects.js#L160-L163。否则,内置处理将剥离一些东西,包括高频。

答案 2 :(得分:0)

2018年更新:Chrome不再需要goog前缀,高通滤波器也消失了(我已通过支持DC输入的声卡对此进行了验证):

let constraints = {
  audio: {
    echoCancellation: false,
    autoGainControl: false,
    noiseSuppression: false
  }
};

let mediaInput = navigator.mediaDevices.getUserMedia( constraints );