如何使用Bass library 为给定音频文件绘制光谱?
我的意思是类似于Audacity生成的图表:
我知道我可以在给定时间t
(当我播放音频时)获得FFT数据:
float fft[1024];
BASS_ChannelGetData(chan, fft, BASS_DATA_FFT2048); // get the FFT data
这样我每次都会在数组中获得1024个值t
。我是对的,那个数组中的值是信号幅度(dB
)?如果是这样,频率(Hz
)如何与这些值相关联?按指数?
我是程序员,但我根本没有音频处理经验。所以我不知道用我的数据做什么来绘制所需的光谱。
我正在使用C ++版本,但其他语言的示例很好(我可以转换它们)。
答案 0 :(得分:2)
从文档中,该标志将导致计算FFT幅度,并且根据它的声音,它是线性幅度。
dB = 10 * log10(intensity);
dB = 20 * log10(pressure);
(我不确定音频文件样本是强度还是压力的测量。麦克风输出与线性相关的是什么?)
此外,它表示输入的长度和FFT匹配的长度,但FFT的一半(对应于负频率)被丢弃。因此,最高FFT频率将是采样频率的一半。这发生在N / 2。文档实际上说
例如,使用2048样本FFT,将返回1024个浮点值。如果使用BASS_DATA_FIXED标志,则FFT值将以8.24定点形式而不是浮点形式。每个值或&#34; bin&#34;的范围从0到1(如果样本数据是浮点且未剪切,则实际上可以更高)。 第1个bin包含DC分量,第2个bin包含通道采样率的1/2048幅度,然后是2/2048,3 / 2048等的幅度 < / p>
这似乎很清楚。