我可以将wav文件转换为简单的c double或int数组并转换回新的wav文件吗?我想在wav文件中使用一些c过滤器。我瘸了red那是可能的。但我不知道怎么做。有人可以链接一些文档或代码片段,我可以如何使用它?
wav文件 - >数组 - >一些操作 - > wav文件
感谢您的回答。
答案 0 :(得分:3)
这与Lame无关。 Lame是一个编码MP3文件的工具。
有许多用于读写WAV文件的库。你甚至可以编写自己的,但这很不方便,因为WAV文件有很多不同的样本格式:8位,16位,24位,浮点,ADPCM,μlaw等。
您可以使用libsndfile来阅读WAV文件。
这是粗体+大的原因是因为很多人认为WAV文件中的数据总是以44字节开始。这是不正确的。 WAV文件是RIFF文件,可以包含任意数量的数据块,其中一个或更多包含样本数据。你无法处理深奥的WAV文件,你会被原谅,但如果你对文件中的数据位置做出假设,你最终会得到垃圾。
答案 1 :(得分:0)
是的,这是可能的。 Wav格式非常明确,它通常使用2个16位采样通道。这些可以完全表示为整数,浮点数和双精度数。
正如评论中的 simonc 所述,典型的格式非常简单,使用库学习真的不值得。如果wav的长度没有改变,转换/过滤可以简单地通过:
完成fread(header,1,44,in_file); fwrite(header,1,44,out_file);
short int block[1024]; // left and right channel will be interleaved.
while (c=fread(block, 2, 1024, fp))
{
filter_in_place(block,c);
fwrite(block, 2,c, out_file);
}