Рендеринг аудио в HTML из массива numpy

#python #html #numpy #html5-audio

#python #HTML #numpy #html5-аудио

Вопрос:

Чтобы отобразить изображение в HTML из массива numpy, я могу сделать

 def numpy_to_b64(array):
    im_pil = Image.fromarray(array)
    buff = BytesIO()
    im_pil.save(buff, format="png")
    im_b64 = base64.b64encode(buff.getvalue()).decode("utf-8")

    return im_b64
 

и используйте img тег

 array_b64 = numpy_to_b64(array)
html.Img(src='data:image/png;base64,{}'.format(array_b64))
 

Интересно, существует ли аналогичный подход для аудио, или как я могу преобразовать одномерный массив numpy, который представляет форму звукового сигнала, в формат, который можно поместить в audio тег?

Ответ №1:

Не необработанные данные формы сигнала, поскольку браузер не может их интерпретировать (он не будет знать частоту дискретизации и т. Д.). Вам необходимо преобразовать аудиоданные, например, в формат OGG, который поддерживается HTML5. Библиотека, подобная pydub, может быть самым простым способом добиться этого.

Комментарии:

1. Спасибо, я изучаю pydub и работаю над этим. В принципе, я получаю AudioSegment часть массива с помощью audio_seg = AudioSegment(array.tobytes(), frame_rate=22050, sample_width=array.dtype.itemsize, channels=1) and audio_seg.export('test.ogg', format='ogg', codec='libvorbis') . Но есть ли способ сохранить его в буфере вместо экспорта файла на диск, как это делается для image ( im_pil.save(buff, format="png") ) ?