在c中读取.WAV文件并从中提取频率

时间:2013-06-09 17:35:34

标签: c++ c

我在C中创建了一个结构并使用fread函数读取了dat结构中的所有数据,实际上我很困惑,实际的“音频数据”是什么意思是原始样本数据? 以及如何从dat音频数据中提取频率。 我可以成功阅读这些数据,但无法理解我还需要做些什么。 Pl解释。

3 个答案:

答案 0 :(得分:2)

音频文件通常由标题和“样本”组成。样本可以是8位,16位或32位以及整数或浮点。一些音频文件以压缩形式(例如mp3)存储音频样本,其他人将数据存储为“原始样本”。

要分析频率,您需要执行“傅立叶变换”,这将为您提供“此频率多少”的数组。实际的傅里叶变换要描述起来非常复杂(它肯定超过几十行)。

如果样本是整数形式,则必须通过将每个样本除以最大值(255,32767或2 31 -1)将整数转换为浮点。

这是一个用于进行FFT的C ++代码包。还有其他几个。 http://fftwpp.sourceforge.net/

答案 1 :(得分:2)

您可以轻松阅读wav文件,只需按照此文档操作即可。 https://ccrma.stanford.edu/courses/422/projects/WaveFormat/

至于从文件中提取频率,您需要对数据应用傅里叶变换,这会将数据从幅度时间转换为频率时域。 http://en.wikipedia.org/wiki/Fast_Fourier_transform

答案 2 :(得分:0)

这是执行FFT的另一个例子。这个在Windows GUI中显示结果。

http://www.relisoft.com/Freeware/index.htm

相关问题