2010-01-14 98 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解釋得很好。