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

用Bass库绘制音频频谱
EN

Stack Overflow用户
提问于 2015-03-17 21:43:57
回答 1查看 2.8K关注 0票数 0

如何使用 低音库为给定的音频文件绘制频谱

我指的是类似于Audacity生成的图表:

我知道我可以在给定的时间(当我播放音频时)获得快速傅立叶变换的数据:

代码语言:javascript
复制
float fft[1024];
BASS_ChannelGetData(chan, fft, BASS_DATA_FFT2048); // get the FFT data

这样,每次t的数组中就有1024个值。那个阵列中的值是信号振幅(dB),对吗?如果是,频率(Hz)是如何与这些值相关联的?根据指数?

我是一个程序员,但我对音频处理完全没有经验。所以我不知道该怎么做,用我掌握的数据来绘制所需的光谱。

我正在使用C++版本,但其他语言中的示例很好(我可以转换它们)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-17 22:15:01

从文档中,该标志将导致计算FFT的幅度,从它的声音,它是线性的幅度。

代码语言:javascript
复制
dB = 10 * log10(intensity);
dB = 20 * log10(pressure);

(我不确定音频文件样本是强度测量还是压力测量。传声器输出与什么线性相关?)

同时,它指示输入的长度和FFT匹配的长度,但是有一半的FFT (对应于负频率)被丢弃。因此,最高的FFT频率将是一半的采样频率。这发生在N/2上。

例如,使用2048样本FFT,将返回1024个浮点值.如果使用BASS_DATA_FIXED标志,那么FFT值将是8.24定点形式,而不是浮点。每个值,或"bin",范围从0到1(如果样本数据是浮点而不是剪裁的话,实际上可以更高)。第一桶含有直流分量,第二桶含有通道采样率的1/2048幅度,其次是2/2048,3/2048等

这似乎很清楚。

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

https://stackoverflow.com/questions/29110288

复制
相关文章

相似问题

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