gpt4 book ai didi

python - 如何使用python从音频wav文件获取rms?

转载 作者:行者123 更新时间:2023-12-03 01:31:49 25 4
gpt4 key购买 nike

如何使用宽度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: not a whole number of frames"

最佳答案

我不使用Python,所以请告诉我这些可能的选项之一是否可以解决问题...

选项1:

根据Audioop docs:

"It operates on sound fragments consisting of signed integer samples 8, 16 or 32 bits wide."



考虑以下:
  • f.getsampwidth()以字节长度给出宽度,因此您有 2字节
  • 1个字节包含8位,因此2个字节的将为16位宽。

  • 尝试为:
    print(audioop.rms(str(wav).encode("ascii"),16))

    选项2:

    "If I change it to 1, I can get a result from the code but it's incorrect."



    也许是原始行: print(audioop.rms(str(wav).encode("ascii"),2))是正确的,真正的问题是 not enough bytes除以2(宽度)。

    确保WAV'a音频格式确实是16位和/或立体声。

    关于python - 如何使用python从音频wav文件获取rms?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57106076/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com