我正在尝试处理涉及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

这个错误是什么意思?它失败的第一个值是'\ x00',这是一个合法的整个帧,因此我不明白为什么它会抛出此异常。

最佳答案

至少有2个问题:

  • 您正在遍历数据,因此向audioop.avg()发送单个字节。这就是为什么它抱怨。只需摆脱for并将数据直接发送到audioop.avg()即可。
  • audioop.avg()的第二个参数应该是样本宽度,可以是4,也可以不是4。您应该使用wf.getsampwidth()进行查找。
  • 关于python - 如何使用audioop平均声音数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36896961/

    10-12 18:45