Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将编码为字节字符串的音频文件解码到numpy数组中?_Javascript_Python_Wav_Numpy Ndarray_Librosa - Fatal编程技术网

Javascript 如何将编码为字节字符串的音频文件解码到numpy数组中?

Javascript 如何将编码为字节字符串的音频文件解码到numpy数组中?,javascript,python,wav,numpy-ndarray,librosa,Javascript,Python,Wav,Numpy Ndarray,Librosa,目前,我有一个项目是React.js前端和Flask后端。我正在使用前端从麦克风收集短音轨,并将数据传送到后端进行处理。现在,前端在POST请求中以Base64字符串的形式发送麦克风数据,我的后端需要在“temp.wav”下解码并将数据保存到磁盘,然后再使用librosa将数据加载回python ndarray。出于隐私和效率的考虑,我不想在将文件加载回内存之前将其保存在本地,但我似乎不知道如何将数据从字节64表示加载到librosa输出的numpy.ndarray 以下是前端代码的片段: le

目前,我有一个项目是React.js前端和Flask后端。我正在使用前端从麦克风收集短音轨,并将数据传送到后端进行处理。现在,前端在POST请求中以Base64字符串的形式发送麦克风数据,我的后端需要在“temp.wav”下解码并将数据保存到磁盘,然后再使用librosa将数据加载回python ndarray。出于隐私和效率的考虑,我不想在将文件加载回内存之前将其保存在本地,但我似乎不知道如何将数据从字节64表示加载到librosa输出的numpy.ndarray

以下是前端代码的片段:

let blob = new Blob(audio.audioChunks, {type: 'audio/wav'});
const reader = new FileReader();
reader.readAsDataURL(blob);
reader.onload = () => {
  let base64data = reader.result.split(',')[1];
  fetch('/api/task', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ message: base64data })
  }).then(res => res.json()).then(data =>{
    console.log(data)
  });
};
和我的代码:

@app.route('/api/task', methods=['POST'])
def hello_world(): #just a filler name
    content = request.get_json()
    ans = base64.b64decode(bytes(content["message"], 'utf-8'))

    with open("temp.wav", "wb") as fh:
        fh.write(ans)

    audio_input, _ = librosa.load("temp.wav", sr=16000)
    #do something with audio_input

我真的需要使用Flask后端,因为我需要访问其他语言中不可用的不同Python工具。

您将使用
librosa.stream
而不是
librosa.load