2010-01-14 96 views
10

我以下列方式赋值给变量xwave.readframes返回什么?

import wave 
w = wave.open('/usr/share/sounds/ekiga/voicemail.wav', 'r') 
x = w.readframes(1) 

当我键入x,我得到:

'\x1e\x00' 

所以x得到的值。但那是什么?它是十六进制的吗? type(x)type(x[0])告诉我,xx[0]一个字符串。任何人都可以告诉我该如何解释这些字符串?我可以将它们转换为整数吗?

回答

0

该字符串表示字节。我想你可以用struct包把它们变成一个整数,它允许解释字节串。

7

交互式解释器回应这样的不可打印的字符。该字符串包含两个字节,0x1E和0x00。您可以将它转换为(WORD大小)整数struct.unpack("<H", x)(小尾数!)。

+0

在这之后,如何将整数数组转换回字符串格式相同? – quano 2011-05-07 10:09:24

+0

@quano:数组有[[.tostring()'](http://docs.python.org/library/array.html#array.array.tostring)方法。对于简单的序列,可以使用'struct.pack(“<4H”,1,2,3,4)'。 numpy也应该有类似的方法。 – AndiDog 2011-05-07 10:42:20

1

这两个字节的字符串:

>>> x='\x1e\x00' 
>>> map(ord, list(x)) 
[30, 0] 
>>> [ord(i) for i in x] 
[30, 0] 
0

是的,这是十六进制的,但它的意思依赖于wav文件的其它输出例如样品宽度和通道数量。您的数据可以通过两种方式读取,2通道和1字节采样宽度(立体声)或1通道和2字节采样宽度(单声道)。使用x.getparams():第一个数字是通道数量,第二个数字是样品宽度。

This Link解释得很好。