如何使用audioop来平均声音数据

时间:2016-04-27 17:33:45

标签: python audio pyaudio

我试图处理涉及audioop.avg()的WAV文件中的声音数据,但它失败了:

>>> import audioop, wave
>>> wf = wave.open('sound.wav', 'rb')
>>> averages = [audioop.avg(frame, 4) for frame in wf.readframes(1024)]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
audioop.error: not a whole number of frames

这个错误是什么意思?它失败的第一个价值是&#39; \ x00&#39;这是一个合法的整体框架,所以我不明白为什么它会抛出这个例外。

1 个答案:

答案 0 :(得分:0)

(至少)有两个问题:

  • 您正在迭代数据,因此将单个字节发送到audioop.avg()。这就是为什么它在抱怨。只需删除for并将数据直接发送到audioop.avg()
  • audioop.avg()的第二个参数应该是样本宽度,可能是也可能不是4.您应该使用wf.getsampwidth()来查找。