我需要分析.wav文件中的声音。为此,我需要将这个文件转换成一组数字(例如数组)。我想我需要用波浪包。但是,我不知道它到底是怎么工作的。例如,我执行了以下操作:
import wave
w = wave.open('/usr/share/sounds/ekiga/voicemail.wav', 'r')
for i in range(w.getnframes()):
frame = w.readframes(i)
print frame
作为这个代码的结果,我希望看到声压是时间的函数。相比之下,我看到了很多奇怪、神秘的符号(它们不是十六进制数字)。有人能帮我吗?
今天晚上我做了一些调查,发现:
希望这段代码能帮助别人。 细节: 使用struct module,您可以使用wave帧(在-32768;0x8000和32767;0x7FFF之间的2个互补二进制文件中)来读取单声道16位wave文件。 我发现this webpage在表述这一点时非常有用。
此片段读取1帧。要读取多个帧(如13),请使用
每the sources,
scipy.io.wavfile.read(somefile)
返回两个项目的元组:第一个是每秒采样率,第二个是从文件中读取所有数据的numpy
数组。看起来很好用!例如:
要读取wav的不同python模块:
至少有以下库可读取wave音频文件:
最简单的例子:
这是Pysoundfile的一个简单示例:
输出格式:
警告,数据的格式并不总是相同的,这取决于库。 例如:
使用scikits.audiolab.wavread读取:[0。0个。0。。。,-0.00097656-0.00079346 -0.00097656] 使用scipy.io.wavfile.read读取:[0 0 0…,-32-26-32]
PySoundFile和Audiolab返回的浮点值介于-1和1之间(与matab一样,这是音频信号的约定)。Scipy和wave返回整数,可以根据编码位的位数以浮点形式转换。
例如:
相关问题 更多 >
编程相关推荐