波形文件如何存储多个通道?
我用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位时使用了抖动技术。