流式传输来自http请求的二进制音频数据,用于librosa分析

2021-05-16 08:41:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个来自网络服务的大音频文件流。在

我想将音频数据加载到librosa中进行批处理流分析。在

我看了一眼^{},上面的描述提到:

Any codec supported by soundfile is permitted here.

但我似乎不知道如何从请求中提供二进制批处理数据:

import requests
import numpy as np

audio_url = "http://localhost/media/audioplayback.m4a"

response = requests.get(
    audio_url,
    stream=True,
)

for chunk in response.iter_content(chunk_size=4096):
    npChunk = np.frombuffer(chunk, dtype=np.float64)
    # Load chunk data into librosa

我知道我需要转换音频格式,但我不确定推荐的方法是什么。我知道可以直接将数据加载到numpy数组中,而不是调用librosa.stream。但是我无法找到^{}^{}或{a4}的组合来进行格式转换。在

我使用的是python==3.6.5 inside conda environment insideWindows Subsystem for Linux

任何帮助将不胜感激!谢谢您!在

1条回答
网友
1楼 ·

我目前的解决方案是:

你需要安装pydub

from pydub import AudioSegment

audio_bytes = []
for b in request.files['audio_data'].stream.read():
    audio_bytes += [b]
audio_bytes = bytes(audio_bytes)    
s = io.BytesIO(audio_bytes)
audioObj = AudioSegment.from_file(s)
audioObj = audioObj.set_sample_width(2).set_frame_rate(16000).set_channels(1)
audioObj.export("input_audio.wav")
wav, sr = librosa.load("input_audio.wav")
wav = librosa.core.resample(wav, sr, 16000)
return wav

我的前端代码是:

^{pr2}$

相关问题