如何使用宽度2来获得无错误的结果?
宽度为2,但会出现错误。
如果将其更改为1,我可以从代码中获得结果,但是它不正确。
import wave
import contextlib
import audioop
fname = "some.wav"
with contextlib.closing(wave.open(fname,'r')) as f:
frames = f.getnframes()
rate = f.getframerate()
duration = frames / float(rate)
width = f.getsampwidth()
channel = f.getnchannels()
size = width*channel
# f.rewind()
wav = f.readframes(f.getnframes())
# print(duration)
print(audioop.rms(str(wav).encode("ascii"),2))
“ audioop.error:不是全部帧”
答案 0 :(得分:0)
我不使用Python,所以请告诉我它是否可以解决...
根据Audioop docs:
“它对由8、16或32位宽的有符号整数样本组成的声音片段进行操作。”
请考虑以下内容:
f.getsampwidth()
以字节为单位给出宽度,因此您有 2个字节。
1个字节包含8位,因此2个字节的宽度为 16位。
尝试方式:
print(audioop.rms(str(wav).encode("ascii"),16))
答案 1 :(得分:0)
可能会晚一点,但是我遇到了另一个问题的答案: audioop.rms() - why does it differ from normal RMS?
也许尝试使用:
audioop.rms(wav, 2)
其中2代表字节数(在本例中为int16)