wave.readframes 返回什么?
我通过以下方式为变量 x
赋值:
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])
告诉我 x
和 x[0]
a字符串。谁能告诉我应该如何解释这个字符串?我可以将它们转换为整数吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
交互式解释器会回显这样的不可打印字符。该字符串包含两个字节:0x1E 和 0x00。您可以使用 struct.unpack(" 将其转换为整数(小尾数,2 字节,有符号)。
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).是的,它是十六进制的,但它的含义取决于 wav 文件的其他输出,例如样本宽度和通道数。您的数据可以通过两种方式读取:2 通道和 1 字节样本宽度(立体声)或 1 通道和 2 字节样本宽度(单声道)。使用 x.getparams():第一个数字是通道数,第二个数字是样本宽度。
此链接解释得很好。
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:
该字符串代表字节。我想你可以使用 struct 包将它们转换为整数,它允许解释以下字符串字节。
This strings represent bytes. I guess you can turn them into an integer with struct package, which allows interpreting strings of bytes.