我正在尝试实现一个使用低音音频(http://www.un4seen.com/)绘制音频频谱的应用。我的理解是,我将不得不:
从流中获取FFT数据 float [] buffer = new float [256]; Bass.BASS_ChannelGetData(句柄,缓冲区,(int)(BASS_DATA_FFT_COMPLEX | BASS_DATA_FFT_NOWINDOW));
对于每个fft,计算它的大小
将一个窗口函数应用于FFT(汉宁或汉明会做)
然后,绘制一个漂亮的光谱分析
问题是:
注意:我不确定这是否有帮助,但这就是我正在使用的: 使用Microsoft Chart控件绘图。 使用BASS.NET API的C# http://www.bass.radio42.com/ 非常感谢任何帮助和建议
答案 0 :(得分:2)
您已经混合了步骤的顺序 - 您需要在计算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%。