api - 我想通过Web音频API获取当前频率

标签 api audio web real-time frequency

我不需要可视化,只想获取频率的实际当前数字。但是使用getFloatFrequencyData(freqDomain),我将获得一个数组。我如何才能从实时中获得一个准确变化的频率?因此,在这里我使用freqDomain [1]作为频率值。但是值(value)是错误的。总是大约-100。我认为我们的语气应该是最小的。 250 Hz。有人可以帮我吗?

这是我的代码:

 MicrophoneSample.prototype.visualize = function() {
  this.canvas.width = this.WIDTH;
  this.canvas.height = this.HEIGHT;
  var drawContext = this.canvas.getContext('2d');

  var freqDomain = new Float32Array(this.analyser.frequencyBinCount);
  this.analyser.getFloatFrequencyData(freqDomain);

  var f = Math.round(freqDomain[1]);

    var text = f + ' Hz';
    document.getElementById('frequency').innerHTML = text ;

  requestAnimFrame(this.visualize.bind(this));
};

非常感谢!

最佳答案

这种基本技术仅适用于人工信号。它在任何种类的实词音频信号上都会惨遭失败,尤其是对于几乎任何一种依靠空气或弦的振动柱或人类声音的乐器所产生的声音信号而言。

通过使用STFT,您可以通过计算先前FFT中来自bin的每个bin的相位差,来获得比每个bin的中心频率更好的分辨率。这取决于关系

F = dPhi/dt

换句话说,该频率是相位变化率。

但是,您将需要2048点FFT才能在100Hz以下获得良好的分辨率。

关于api - 我想通过Web音频API获取当前频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20494829/

相关文章:

javascript - m.facebook.com 如何能够运行原生移动操作,如相机和图库?

api - 概念:API级别测试

android - Ruby on Rails REST API 与可离线工作的 Android 客户端

python - 在Windows上的Python 2.7中将标签应用于WAV文件

audio - 在 ffmpeg 中将 m4a 转换为 WAV 文件(包含签名的 16 位 PCM 样本)

javascript - Google Drive音频流而不影响下载数量?

css - 手机网站捉襟见肘

api - 在 NetLogo 扩展中执行原语中的命令 block

python - 403 使用 python 的 gmail api 权限不足

javascript - 如何使用正则表达式替换字符串中的两个连续特殊字符?