首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ValueError:缓冲区大小必须是元素大小的倍数

ValueError:缓冲区大小必须是元素大小的倍数
EN

Stack Overflow用户
提问于 2019-11-06 15:09:43
回答 1查看 5.2K关注 0票数 2

我是python的新手,我正在尝试使用API对音频文件进行去噪。下面是我正在使用的代码,在执行时它给出了错误"ValueError:缓冲区大小必须是元素大小的倍数“。有人能帮我解决这个问题吗?

代码语言:javascript
复制
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)

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2019-11-06 21:35:20

np.frombuffer()尝试从API中获取响应并将其解释为由4字节整数(32位)组成的序列时,就会发生这种情况。在这种情况下,响应需要是4字节的倍数。如果不是这样,numpy就会引发异常。(例如,如果流的末尾还有3个字节,它应该做什么?)

如果没有更多关于API的信息,就很难对此进行调查。你查过回复了吗?我可以想到三个可能的问题:

  • 响应可能是错误消息。还检查response.status_code.
  • Does --响应只包含二进制流?处理过的数据可能嵌入到json文档中。
  • 是返回的音频是否真的被编码为原始的4字节整数?它可以被编码为2字节整数。(或者可能是mp3。在这种情况下,不使用scipy.io.wavfile.write()).

保存对文件的响应

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58733168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档