【问题标题】:Plotting an audio spectrum绘制音频频谱
【发布时间】:2013-05-07 04:47:21
【问题描述】:

我正在尝试实现一个使用低音音频 (http://www.un4seen.com/) 绘制音频频谱的应用程序。我的理解是我必须:

  1. 从流中获取 FFT 数据 浮动[]缓冲区=新浮动[256]; Bass.BASS_ChannelGetData(handle, buffer, (int)(BASS_DATA_FFT_COMPLEX|BASS_DATA_FFT_NOWINDOW));

  2. 对于每个 fft,计算它的大小

  3. 对 FFT 应用窗口函数(汉宁或汉明都可以)

  4. 然后,画一个漂亮的频谱分析

但问题是:

  • BASS_DATA_FFT_COMPLEX BassData 似乎无法访问。我可以看到它应该在文档http://www.bass.radio42.com/help/html/a13cfef0-1056-bb94-81c4-a4fdf21bd463.htm 中可用,但我无法使用它,因为我收到 BassData 不包含此类枚举的错误
  • 此外,我想知道我所做的是否正确。要绘制频谱,我应该简单地绘制 fft 的幅度还是绘制 fft 的幅度与该 fft 的频率?在这种情况下,我将如何获得与该 fft 对应的频率?我不介意从任何语言(C/C++、C#、VB、Java 等)截取的任何代码

注意:我不确定这是否有帮助,但这是我正在使用的: 使用 Microsoft Chart 控件进行绘图。 带有 BASS.NET API 的 C# http://www.bass.radio42.com/ 非常感谢任何帮助和建议

【问题讨论】:

    标签: audio signal-processing bass.dll


    【解决方案1】:

    您混淆了步骤的顺序 - 您需要在计算 FFT 之前对时域数据应用窗口函数。这些步骤通常是:

    1. acquire time domain data
    2. apply window function
    3. calculate FFT
    4. calculate log magnitude of FFT (log(re*re+im*im))
    5. plot log magnitude (with appropriate scaling) against frequency
    

    请注意,在 Y 轴上使用对数幅度可以有效地为您提供dB 刻度,这是一种比线性幅度刻度更自然、更有用的方式来查看声音幅度。

    通常,为了可视化音频等,您将上述步骤 1 - 5 应用于连续的时域数据块,通常重叠 50%。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-05
      • 1970-01-01
      • 2014-10-21
      • 2013-03-12
      • 2015-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多