我需要分析写入.wav文件的声音。为此,我需要将此文件转换为一组数字(例如,数组)。我想我需要使用wave包。但是,我不知道它是如何工作的。例如,我做了以下工作:import wavew = wave.open('/usr/share/sounds/ekiga/voicemail.wav', 'r')for i in range(w.getnframes()): frame = w.readframes(i) print frame作为此代码的结果,我希望将声压视为时间的函数。相比之下,我看到了许多奇怪的神秘符号(不是十六进制数字)。有人可以请我帮忙吗?
3 回答

繁星coding
TA贡献1797条经验 获得超4个赞
我今天晚上做了一些研究,并弄清楚了:
import wave, struct
waveFile = wave.open('sine.wav', 'r')
length = waveFile.getnframes()
for i in range(0,length):
waveData = waveFile.readframes(1)
data = struct.unpack("<h", waveData)
print(int(data[0]))
希望此代码段对某人有所帮助。详细信息:使用struct模块,可以获取波形帧(在-32768; 0x8000和32767; 0x7FFF之间为2s互补二进制),这将读取MONO,16位WAVE文件。我发现此网页在制定方面非常有用。
该代码段读取1帧。要读取一个以上的帧(例如13个),请使用
waveData = waveFile.readframes(13)
data = struct.unpack("<13h", waveData)
添加回答
举报
0/150
提交
取消