gpt4 book ai didi

python - 结构错误 : unpack requires a string argument of length 4 - audio file

转载 作者:太空宇宙 更新时间:2023-11-03 15:13:36 24 4
gpt4 key购买 nike

我是编程初学者,我使用 Ubuntu。

但现在我正在尝试使用 Python 执行声音分析。

在下面的代码中我使用了wav包来打开wav文件和转换信息的struct:

from wav import *
from struct import *
fp = wave.open(sound.wav, "rb")
total_num_samps = fp.getnframes()
num_fft = (total_num_samps / 512) - 2 #for a fft lenght of 512
for i in range(num_fft):
tempb = fp.readframes(512);
tempb2 = struct.unpack('f', tempb)
print (tempb2)

所以在终端中出现的消息是:

struct.error: unpack requires a string argument of length 4

拜托,有人可以帮我解决这个问题吗?有人对解释声音文件的其他策略有建议吗?

最佳答案

提供给 struct 的格式字符串必须准确地告诉它第二个参数的格式。例如,“有一百零三条未签名的短裤”。按照您编写的方式,格式字符串表示“恰好有一个 float ”。但是随后您向它提供了一个包含比这更多数据的字符串,它就吐了。

因此,第一个问题是您需要在字节字符串中指定确切 打包的 c 类型的数量。在这种情况下,512(帧数)乘以 channel 数(可能是 2,但您的代码没有考虑到这一点)。

第二个问题是您的 .wav 文件根本不包含 float 。如果它是 8 位的,它包含无符号的 chars,如果它是 16 位的它包含有符号的 shorts,等等。您可以通过以下方式检查 .wav 的实际样本宽度执行 fp.getsampwidth()

那么:假设您有 512 帧的双 channel 16 位音频;您可以将对 struct 的调用编写为:

channels = fp.getnchannels()
...

tempb = fp.readframes(512);
tempb2 = struct.unpack('{}h'.format(512*channels), tempb)

关于python - 结构错误 : unpack requires a string argument of length 4 - audio file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23631579/

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