[编辑:总之,这个问题是我对字节序的含义做出(显然不正确)假设的结果(我假设它是 00000001 与 10000000,即反转位,而不是字节)。非常感谢@tripleee 解决了我的困惑。]
据我所知,Python 3 wave 模块 [1](我现在将其称为 pywave)返回的帧的字节顺序没有记录。我已经查看了源代码 [2] [3],但还没有完全弄清楚。
首先,看起来 pywave 只支持“RIFF”波形文件 [2]。'RIFF' 文件使用小端;8 位或更低比特率的无符号,否则有符号(二进制补码)。
但是,看起来 pywave 将从文件中读取的字节转换为 sys.byteorder [2]:
data = self._data_chunk.read(nframes * self._framesize)
if self._sampwidth != 1 and sys.byteorder == 'big':
data = audioop.byteswap(data, self._sampwidth)
的情况除外sampwidth==1,它对应于一个 8 位文件。所以 8 位文件不会转换为 sys.byteorder?为什么会这样?(也许是因为他们没有签名?)
目前我的逻辑如下:
if sampwidth == 1:
signed = False
byteorder = 'little'
else:
signed = True
byteorder = sys.byteorder
它是否正确?
8 位 wav 文件现在非常罕见,所以这不是一个真正的问题。但我还是想找到答案...
[1] https://docs.python.org/3/library/wave.html