2013-03-24 265 views
0

我正在写一个程序(C++,vs2010,win7),它将音频记录到一个wav文件中。 当我尝试听到音频时,它有很多白色噪音。 我试图用我编写的另一个程序重新打开该文件。这个程序做的唯一的事情是:Wav文件噪声消除

Char buffer[8000*60*2] = {} 
File *wav, *out 
Wav = fopen ("raw", "r+") 
Out = fopen("out", "a+") 
fread(buffer, sizeof (char) *8000*60*2,1,wav) 
fwrite(buffer, sizeof (char) *8000*60*2,1,out) 
fclose (wav) 
fclose (out) 

我通过这个节目,我可以听到原wav文件的一小部分,没有任何噪音传递的原始数据后(我在大胆作为原始数据打开此)。 我的问题是,我没有改变数据中的任何东西,只是再次写入数据,就像我能清晰地听到的魔法一样。 我错过了什么? 我不做任何数据更改。 当我写入数据时,我把它写成一个简短的变量。 data is short fwrite(data,1024,1,wav)

+0

你意识到你正在附加到该输出文件,而不是重写它? – 2013-03-24 10:02:54

+0

是的,无论如何这是一个新文件。我可以将其更改为w +,但它会得到相同的结果 – David 2013-03-24 10:11:22

+0

那么,如果您只是使用资源管理器来复制文件,那么您是否会得到相同的效果? – 2013-03-24 10:13:09

回答

0

写入WAVE文件时,很多事情可能会导致它产生噪音。这里有几件事情你应该寻找:

封顶值

香草WAVE文件有一个16位的数据值(或两个值,如果它是立体声),所以你必须做出如果你放大这些值,并且它们超过了这个限制,那么你所有的值都在(32768,-32768)的范围内,那么你会得到一个随机的*值,因此当写入文件时会得到噪声。

写作二进制

如前所述由Roger在原来的问题是很重要的意见,你在二进制写,因为如果你试图写入与标准“R”文件,你只听到很多白噪声。

缺少头

有时候,如果你忘记了一个头,你也可能得到在输出WAVE文件的噪音。

希望有帮助。