What is returned by wave.readframes?
I assign a value to a variable x
in the following way:
import wave
w = wave.open('/usr/share/sounds/ekiga/voicemail.wav', 'r')
x = w.readframes(1)
When I type x I get:
'\x1e\x00'
So x
got a value. But what is that? Is it hexadecimal? type(x)
and type(x[0])
tell me that x
and x[0]
a strings. Can anybody 开发者_StackOverflowtell me how should I interpret this strings? Can I transform them into integer?
The interactive interpreter echoes unprintable characters like that. The string contains two bytes, 0x1E and 0x00. You can convert it to an integer with struct.unpack("<h", x)
(little endian, 2 bytes, signed).
Yes, it is in hexadecimal, but what it means depends on the other outputs of the wav file e.g. the sample width and number of channels. Your data could be read in two ways, 2 channels and 1 byte sample width (stereo sound) or 1 channel and 2 byte sample width (mono sound). Use x.getparams()
: the first number will be the number of channels and the second will be the sample width.
This Link explains it really well.
It's a two byte string:
>>> x='\x1e\x00'
>>> map(ord, list(x))
[30, 0]
>>> [ord(i) for i in x]
[30, 0]
This strings represent bytes. I guess you can turn them into an integer with struct package, which allows interpreting strings of bytes.
精彩评论