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 tell me how should I interpret this strings? Can I transform them into integer?
It's a two byte string:
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.
This strings represent bytes. I guess you can turn them into an integer with struct package, which allows interpreting strings of bytes.
The interactive interpreter echoes unprintable characters like that. The string contains two bytes, 0x1E and 0x00. You can convert it to an (WORD-size) integer with
struct.unpack("<H", x)
(little endian!).