【问题标题】:Analyser node bad data on oscillator振荡器上的分析器节点错误数据
【发布时间】:2018-10-28 04:25:41
【问题描述】:

let ctx = new AudioContext(),
  analyser = ctx.createAnalyser(),
  oscillator = ctx.createOscillator(),
  data = new Float32Array(analyser.frequencyBinCount);

oscillator.connect(analyser);
oscillator.start();

setTimeout(()=>{
  analyser.getFloatFrequencyData(data);
  console.log(oscillator.frequency, data);
}, 1000);

振荡器默认产生 440hz 正弦波(oscillator.frequency 详细信息),但分析仪不会将其检测为主波。在我的情况下,大约 440hz 的值是 -200db,但大约 220hz 是 -180db,更大声。

如何通过分析仪检测主频?就我而言,我首先使用了麦克风,但振荡器不起作用。 FFT 有什么问题?

【问题讨论】:

  • 在采样率为 44.1 kHz 的机器上运行您的 sn-p。相关的分析器输出为:“20”:-28.359,“21”:-28.948。 Bin 20 对应于大约 430 Hz 的频率。 Bin 21 为 452 赫兹。这是合理的,默认 FFT 大小为 2048,其中每个 bin 的宽度约为 21 Hz。
  • @RaymondToy,如何计算 bin 数量?

标签: javascript fft web-audio-api


【解决方案1】:

Bin 编号不是频率。您需要检查编号为 2 * bin count * frequency / sampling rate 的 bin,其中 bin count = fft size / 2

@Raymond 玩具,谢谢

【讨论】:

    猜你喜欢
    • 2020-07-12
    • 2019-01-24
    • 1970-01-01
    • 2015-11-16
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多