所以在这里,我一直在玩一些C#编码试图看看当我反转每个样本的越来越多的位时,.WAV音频文件听起来有多大,但当我到达时我翻转整个文件的位,期望更多的噪音,甚至原始音频将不再清晰听到的步骤。但是当我尝试播放原始音频的补码(所有位都被反转)时,我很惊讶前面步骤中的噪声(反转的位数减少而不是所有的位置)甚至消失了,文件再次像原始音频一样响起。 / p>
我想知道背后的原因是什么。
答案 0 :(得分:2)
其实的原因实际上与C#无关,而是人类对声音的感知
人耳仅响应其接收到的声音的强度
I
(更具体地说,响应于不同频率上的强度分布),这或多或少类似于幅度的平方,
I~A^2
。
的直接引用更改波形符号会更改
A
的符号,这对I
无效。
答案 1 :(得分:1)
我的猜测是WAV文件值是使用有符号整数存储的。
查看此页面:https://en.wikipedia.org/wiki/Signed_number_representations
如果反转有符号整数的所有位,则具有相反的值。
所以你刚刚创建了一个对称的WaveForm,它与原始声音相同。
答案 2 :(得分:0)
您需要从第一原则开始 - 考虑44KHz的采样频率和一位采样分辨率;纯22KHz声音的部分流将读作:
010101010101
如果反转所有位,则变为:
101010101010
该流仍然是纯22KHz音调(虽然具有相位差)
在现实世界中,声波的形状与正弦波的形状更接近,但原理仍然存在 - 与录制的声音相反,它与原始声音的相似性更低。如果你在不同的立体声声道中对着原声进行倒置会更加明显(在2nd Hand on their www.pitchshifter.com album上有一首Pitchshifter歌曲,并在同一时间解释它(arond 2:20-> 2:30)如果你喜欢听)