Python wav格式解析:非标准数据帧输出

Python wav格式解析:非标准数据帧输出,python,parsing,hex,output,wav,Python,Parsing,Hex,Output,Wav,我对正在解析的一些WAV文件的错误十六进制输出感到困惑。我的问题是:如何解释和/或纠正下面所示示例中的异常数据帧 我正在使用Python标准库从WAV文件中读取数据帧 12个样本帧打印输出的空闲样本输入/输出,以及我右侧的符号,如下所示: Python 3.3.2(v3.3.2:d047928ae3f6,2013年5月13日,13:52:24) [GCC 4.2.1(苹果公司建造5666)(dot 3)]关于达尔文 有关详细信息,请键入“copyright”、“credits”或“license

我对正在解析的一些WAV文件的错误十六进制输出感到困惑。我的问题是:如何解释和/或纠正下面所示示例中的异常数据帧

我正在使用Python标准库从WAV文件中读取数据帧

12个样本帧打印输出的空闲样本输入/输出,以及我右侧的符号,如下所示:

Python 3.3.2(v3.3.2:d047928ae3f6,2013年5月13日,13:52:24) [GCC 4.2.1(苹果公司建造5666)(dot 3)]关于达尔文 有关详细信息,请键入“copyright”、“credits”或“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
导入wave >>>sound=wave.open(“/Users/Fergus_Home/Desktop/DmytroK.wav”,mode=None) >>>声音。设置位置(100000) >>>声音。阅读框(1) b'\x15\xff\x15\xff'#>>声音.读框(1) b'\xfd\xfe\xfd\xfe' >>>声音。阅读框(1) b'\xdc\xfe\xdc\xfe' >>>声音。阅读框(1) b'\xbc\xfe\xbc\xfe' >>>声音。阅读框(1) b'\x9b\xfe\x9b\xfe' >>>声音。阅读框(1) b'\x88\xfe\x88\xfe' >>>声音。阅读框(1) b'}\xfe}\xfe'#>>sound.readframes(1) b'g\xfeg\xfe'#>>声音.读框(1) b'N\xfeN\xfe'#>>声音.读框(1) b'\xfe\xfe'#>>声音.读框(1) b“'\xfe'\xfe”#>>声音.读框(1)
b'\x0f\xfe\x0f\xfe'#您看到的只是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'

谢谢你,cpburnz!我怀疑是这样的。在您看来,这可能是文本编辑器误解数据的结果,还是我必须创建一个ASCII值库来将4字节帧转换为正确的格式?@user3830794这根本不表示有问题。编辑正在正确地解释数据。这只是python显示字节表示的方式,这很有意义。因此,所有其他4字节帧保留其十六进制值的唯一原因是它们没有ASCII等价物?@user3830794。此外,ASCII控制字符将显示为十六进制。