数值错误:缓冲区大小必须是元素大小的倍数。

4

我是Python的新手,正在尝试使用API去除音频文件中的噪声。以下是我正在使用的代码,在执行时它给出了错误“ValueError:缓冲区大小必须是元素大小的倍数”。请问有谁能帮助我解决这个问题吗?

import requests
import scipy.io.wavfile
import numpy as np

file_name = 'audio.mp3'
files = {'file': open(file_name, 'rb')}

denoise_level = 20
querystring = {"denoise_control": denoise_level}

headers = {
    'x-api-key': "my-api-key"
}

url = "https://noise-reduction-service.p.rapidapi.com/denoise"

response = requests.request("POST", url, files=files, headers=headers, params=querystring)

content = np.frombuffer(response.content, dtype=np.int32)

sample_rate = 44100
scipy.io.wavfile.write('denoised_speech.wav', sample_rate, content)

提前感谢你!

1个回答

3
np.frombuffer()试图将API的响应解释为4字节整数(32位)序列时,就会发生这种情况。在这种情况下,响应需要是4字节的倍数。如果不是这种情况,numpy会引发异常。(例如,在流的末尾有3个字节剩余时,它应该怎么办?)
没有更多关于API的信息,很难调查这个问题。您检查了响应吗?我可以想到三个可能的问题:
- 响应可能是错误消息。还要检查response.status_code。 - 响应是否仅由二进制流组成?处理后的数据可能嵌入在json文档中。 - 返回的音频是否真的编码为原始的4字节整数?它可以编码为2字节整数。(或者它可能是mp3格式。在这种情况下,请将响应保存到文件中,而不使用scipy.io.wavfile.write())。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接