我对某些正在解析的WAV文件的错误十六进制输出感到困惑。我的问题是:如何解释和/或纠正以下示例中的异常数据帧?
我正在使用Python标准库从WAV文件读取数据帧。
来自IDLE的十二个示例框架打印输出的示例输入/输出,以及我的右侧注释,如下所示:
在darwin类型的Python 3.3.2(v3.3.2:d047928ae3f6,2013年5月13日,13:52:24)[GCC 4.2.1(Apple Inc. build 5666)(dot 3)] license()”以获取更多信息。
>>> import wave
>>> sound = wave.open("/Users/Fergus_Home/Desktop/DmytroK.wav",mode = None)
>>> sound.setpos(100000)
>>> sound.readframes(1)
b'\x15\xff\x15\xff' #<----Clearly hexadecimal
>>> sound.readframes(1)
b'\xfd\xfe\xfd\xfe'
>>> sound.readframes(1)
b'\xdc\xfe\xdc\xfe'
>>> sound.readframes(1)
b'\xbc\xfe\xbc\xfe'
>>> sound.readframes(1)
b'\x9b\xfe\x9b\xfe'
>>> sound.readframes(1)
b'\x88\xfe\x88\xfe'
>>> sound.readframes(1)
b'}\xfe}\xfe' #<------- Corrupted? Compressed? Junk data/padding?
#Text editor interpreting a hexadecimal as a character?
>>> sound.readframes(1)
b'g\xfeg\xfe' #<------- ???
>>> sound.readframes(1)
b'N\xfeN\xfe' #<------- ???
>>> sound.readframes(1)
b';\xfe;\xfe' #<------- ???
>>> sound.readframes(1)
b"'\xfe'\xfe" #<------- ???
>>> sound.readframes(1)
b'\x0f\xfe\x0f\xfe' #<----Clearly hexadecimal
注意:
1)第一对十六进制组形成左通道,第二对十六进制组形成右通道。因此,在第一帧中,左通道十六进制样本为15 FF,右通道十六进制样本也为15 FF。
2)默认情况下,WAV文件为小尾数格式。这意味着最高有效位将保留在不规则的打印输出中。最低有效位是被字符替换的位。
3)查询表明未压缩数据。
4)我发现用于解析AIFF文件的Python标准库存在相同的问题。来自各种设备的其他录音也会发生这种情况。
对于每帧打印输出中的最低有效位有什么想法?
您所看到的只是4字节帧的ASCII表示。
>>> len(b'}\xfe}\xfe')
4
>>> b'}\xfe}\xfe' == b'\x7d\xfe\x7d\xfe'
True
>>> b'\x7d\xfe\x7d\xfe'
b'}\xfe}\xfe'
>>> b'}' == b'\x7d'
True
>>> b'g' == b'\x67'
True
>>> b'N' == b'\x4e'
True
>>> b';' == b'\x3b'
True
>>> b"'" == b'\x27'
True
但是也许binascii
可以为您提供更好的表示形式:
>>> import binascii
>>> binascii.hexlify(b'\x7d\xfe\x7d\xfe')
b'7dfe7dfe'
>>> binascii.hexlify(b'}\xfe}\xfe')
b'7dfe7dfe'
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句