Audio 绘制音频频谱图

Audio 绘制音频频谱图,audio,signal-processing,bass.dll,Audio,Signal Processing,Bass.dll,我正在尝试实现一个应用程序,它使用bass audio()绘制音频频谱。我的理解是,我必须: 从流中获取FFT数据 浮点[]缓冲区=新浮点[256]; Bass.Bass_ChannelGetData(句柄,缓冲区,(int)(Bass_DATA_FFT_复数| Bass_DATA_FFT_NOWINDOW)) 对于每个fft,计算其大小 将窗口函数应用于FFT(汉宁或汉明即可) 然后,画出漂亮的光谱分析图 但问题是: 似乎无法访问BASS_数据\u FFT_复BASS数据。我可以在文档中看到

我正在尝试实现一个应用程序,它使用bass audio()绘制音频频谱。我的理解是,我必须:

  • 从流中获取FFT数据 浮点[]缓冲区=新浮点[256]; Bass.Bass_ChannelGetData(句柄,缓冲区,(int)(Bass_DATA_FFT_复数| Bass_DATA_FFT_NOWINDOW))

  • 对于每个fft,计算其大小

  • 将窗口函数应用于FFT(汉宁或汉明即可)

  • 然后,画出漂亮的光谱分析图

  • 但问题是:

    • 似乎无法访问BASS_数据\u FFT_复BASS数据。我可以在文档中看到它,但是我不能使用它,因为我得到一个错误,BassData不包含这样的枚举
    • 此外,我想知道我所做的是否正确。要绘制频谱,我应该简单地绘制fft的幅度,还是将fft的幅度与fft的频率对应起来?在这种情况下,我如何得到对应于fft的频率?我不介意从任何语言(C/C++、C#、VB、Java等)截取任何代码
    注意:我不确定这是否有帮助,但我使用的是: 使用Microsoft图表控件打印。 C#使用BASS.NET API
    非常感谢您提供的任何帮助和建议。您混淆了步骤的顺序-在计算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%