Lame wav to array并返回wav with c / c ++

时间:2012-12-01 11:56:19

标签: c++ c encoding wav lame

我可以将wav文件转换为简单的c double或int数组并转换回新的wav文件吗?我想在wav文件中使用一些c过滤器。我瘸了red那是可能的。但我不知道怎么做。有人可以链接一些文档或代码片段,我可以如何使用它?

wav文件 - >数组 - >一些操作 - > wav文件

感谢您的回答。

2 个答案:

答案 0 :(得分:3)

这与Lame无关。 Lame是一个编码MP3文件的工具。

有许多用于读写WAV文件的库。你甚至可以编写自己的,但这很不方便,因为WAV文件有很多不同的样本格式:8位,16位,24位,浮点,ADPCM,μlaw等。

您可以使用libsndfile来阅读WAV文件。

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);
}