2013-03-24 136 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文件的噪音。

希望有幫助。