波形文件如何存储多个通道?

1 投票
5 回答
3152 浏览
提问于 2025-04-15 23:34

我用Audacity创建了两个波形文件。它们的采样率都是44100赫兹,样本是32位浮点,保存为WAV(微软)16位有符号格式,并且根据Audacity的说法,里面都有1秒的静音。它们的不同之处在于,一个文件只有一个声道,而另一个文件有两个声道(立体声)。在读取单声道文件时,我得到了这样的数据:

0x00 0x00  
...  ...  

这正是我预期的结果,但在读取第二个文件时,我得到了:

0x00 0x00 0x00 0x00  
0x01 0x00 0xff 0xff  
0x00 0x00 0x00 0x00  
0x00 0x00 0x01 0x00  
0xff 0xff 0x01 0x00  
0xfe 0xff 0x03 0x00  

这看起来对我来说是一个随机的模式。这和声道在波形文件中的存储方式有关吗?难道不应该是这样的:

0x00 0x00 0x00 0x00  
...  ...  ...  ...  

?

附言:我使用了Python内置的'wave'模块来读取这些文件。

5 个回答

1

我记得这些通道应该是交替的,所以1秒钟的44.1千赫会有88,200个样本,左右声道交替,或者按照规范的要求来。

另外,Audacity在处理浮点数转整数时应该不会出错,反而是整数转浮点数可能会有问题。可以试着先用整数样本,而不是浮点数。或者可以让一个声道保持在一个已知的值(比如Ox8f8f),另一个声道设为0,这样可能更容易搞清楚。

3

数据不是随机的

从我看到的情况来看,每行似乎有两个整数值,每个值占用2个字节,并且是小端格式:

0x00 0x00 0x00 0x00  
0x01 0x00 0xff 0xff  
0x00 0x00 0x00 0x00  
0x00 0x00 0x01 0x00  
0xff 0xff 0x01 0x00  
0xfe 0xff 0x03 0x00  

解码后是:

 0  0
 1 -1
 0  0
 0  1
-1  1
-2  3

所以你会发现那些非常接近0的数字(几乎是静音),看起来像是抖动,就像其他人提到的那样。

1

在本来应该是安静的地方,出现了非常微弱的信号,这可能是因为在把32位的音频转换成16位时使用了抖动技术。

撰写回答