1

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

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

谢谢你的回答。

4

2 回答 2

3

这与跛脚无关。Lame 是一种用于编码 MP3 文件的工具。

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

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

WAV 文件中的字段没有固定的偏移量

这是粗体+大的原因是因为很多人认为WAV文件中的数据总是以44字节开始。这是不正确的。WAV 文件是 RIFF 文件,可以包含任意数量的数据块,其中一个或多个包含样本数据。您无法处理深奥的 WAV 文件是可以原谅的,但如果您对文件中数据的位置做出假设,您最终可能会得到垃圾。

于 2012-12-01T11:59:42.717 回答
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);
}
于 2012-12-01T12:05:14.497 回答