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

2024-05-21 04:39:05 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我使用python标准库从WAV文件中读取数据帧。

IDLE的12个示例帧打印输出的示例输入/输出,以及右侧的符号,如下所示:

Python3.3.2(v3.3.2:d047928ae3f6,2013年5月13日,13:52:24) 达尔文上的[GCC 4.2.1(Apple Inc.build 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

请注意:

1)第一对十六进制组形成左侧通道,第二对形成右侧通道。所以在第一帧中,左声道十六进制采样是15ff,而右声道十六进制也是15ff。

2)WAV文件默认为little-endian格式。这意味着最重要的位被保存在不规则的打印输出中。最低有效位是被字符替换的位。

3)查询表明数据未被压缩。

4)我在Python解析AIFF文件的标准库中发现了同样的问题。其他各种设备的录音也会发生这种情况。

对每帧打印输出中最低有效位发生了什么有什么想法?


Tags: 文件数据示例标准wavewavxffsound
1条回答
网友
1楼 · 发布于 2024-05-21 04:39:05

您看到的只是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会给你更好的表现:

^{pr2}$

相关问题 更多 >