-2

我在 C 中创建了一个结构并使用 fread 函数读取 dat 结构中的所有数据,实际上我对此感到困惑,什么是实际的“音频数据”是指原始样本数据?以及我们如何从 dat 音频数据中提取频率。而且我可以成功读取该数据,但无法理解我必须进一步做什么。请解释一下。

4

3 回答 3

3

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

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

于 2013-06-09T17:45:33.090 回答
2

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

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

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

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

于 2013-06-09T17:45:20.337 回答
0

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

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

于 2013-06-09T17:57:13.507 回答