ValueError: размер буфера должен быть кратным размеру элемента - PullRequest
0 голосов
/ 06 ноября 2019

Я новичок в 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 Ответ

0 голосов
/ 07 ноября 2019

Это происходит, когда np.frombuffer() пытается получить ответ от API и интерпретировать его как последовательность 4-байтовых целых чисел (32 бита). В этом случае ответ должен быть кратным 4 байтам. Если это не так, numpy выдвигает исключение. (Например, что делать, если в конце потока осталось 3 байта?)

Без дополнительной информации об API это сложно исследовать. Вы проверили ответ? Я могу думать о трех возможных проблемах:

  • Ответ может быть сообщением об ошибке. Также проверьте response.status_code.
  • Содержит ли ответ только двоичный поток? Обработанные данные могут быть встроены в документ json.
  • Действительно ли возвращаемое аудио кодируется как необработанные 4-байтовые целые числа? Это может быть закодировано как 2-байтовые целые числа. (Или это может быть mp3. В этом случае сохраните ответ в файл, не используя scipy.io.wavfile.write()).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...