What is returned by wave.readframes?

為{幸葍}努か 提交于 2020-01-20 07:55:09

问题


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?


回答1:


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!).




回答2:


It's a two byte string:

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



回答3:


This strings represent bytes. I guess you can turn them into an integer with struct package, which allows interpreting strings of bytes.




回答4:


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.



来源:https://stackoverflow.com/questions/2063565/what-is-returned-by-wave-readframes

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!