首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绘制音频频谱

绘制音频频谱
EN

Stack Overflow用户
提问于 2013-05-13 07:52:41
回答 1查看 1.5K关注 0票数 0

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

  1. 从float[]缓冲器=新float256;Bass.BASS_ChannelGetData(句柄、缓冲区、float256)中获取快速傅立叶变换数据
  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图表控件进行绘图。C#与BASS.NET API由http://www.bass.radio42.com/提供的任何帮助和建议都非常感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-13 10:00:00

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

代码语言:javascript
复制
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轴使用log震级可以有效地提供一个dB标度,这是一种比线性震级尺度更自然和有用的方法来查看声音的振幅。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16517183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档