我在 C 中创建了一个结构并使用 fread 函数读取 dat 结构中的所有数据,实际上我对此感到困惑,什么是实际的“音频数据”是指原始样本数据?以及我们如何从 dat 音频数据中提取频率。而且我可以成功读取该数据,但无法理解我必须进一步做什么。请解释一下。
问问题
4142 次
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 中显示结果。
于 2013-06-09T17:57:13.507 回答