我正在编写一个将音频录制到wav文件中的程序(c ++,vs2010,win7)。 当我试图听到音频时,它会产生很多白噪声。 我尝试用我编写的另一个程序重新打开该文件。该计划唯一的作用是:
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文件的一小部分没有任何噪音(我以大胆的形式打开它作为原始数据)。 我的问题是,我没有改变数据中的任何内容只是再次写它,就像我能清楚听到的魔法一样。 我错过了什么? 我没有对数据进行任何更改。 当我写数据时,我将其写为短变量。 数据很短 fwrite(data,1024,1,wav)
答案 0 :(得分:0)
写WAVE文件时,很多事情可能会导致噪音。以下是您应该寻找的一些事项:
限制值
vanilla WAVE文件具有16位数据值(如果是立体声,则为两个值),因此如果向上扩展,则必须确保所有值都在(32768,-32768)范围内这些值超过了那个限制,那么你将获得一个随机*值,因此当写入文件时会产生噪音。
以二进制文字书写
正如Roger在原始问题的评论中所提到的,因为如果你试图用标准" r"来写一个文件,那么用二进制写是很重要的。你会得到很多白噪声。
缺少标题
有时,如果您忘记了标题,也可能会在输出WAVE文件中出现噪音。
希望这会有所帮助。