从 Flask 服务器获取音频并在 React 上以可播放的格式显示音频

Get audio from a Flask server and showing audio in a playable format on React

背景故事

我正在从事一个音乐项目,该项目接收一个音频文件并将钢琴主干与该音频分开。分离音频后,它会将文件本地保存在 api 文件夹中。然后我从我的 React 应用程序向我的烧瓶 api 发送一个 GET 请求,return 音频文件。


我需要什么

问题是二进制格式的 flask returns 音频(我不确定是否看到下图),我想知道如何 以可播放的格式显示它反应或至少在本地 以音频格式保存。感谢您的任何帮助。

axios 配置

import axios from "axios";

export default axios.create({
  baseURL: "http://localhost:5000"
});

反应端的代码

try {
     const res = await api.get("/download");
     console.log(res);
   } catch (error) {
     console.log(error);
   }

Flask 上的代码 api

@app.route('/download')
  @cross_origin()
   def download():
       
       instrument = 'piano'
   
       stem_path = f"backend/audio/{instrument}.wav"
       if os.path.isfile(stem_path):
           return send_file(stem_path, mimetype="audio/wav", as_attachment=True)
       else:
          return {"message": "cannot download stem"}, 401

正确,这是二进制 RIFF/WAV header。您的客户端可以将二进制响应解析为 ArrayBuffer 并创建一个 Blob 来播放或保存:

setAudio(
  document.querySelector('audio'),
  'https://opus-bitrates.anthum.com/audio/music-96.opus',
)

async function setAudio(audio, url) {
  audio.src = URL.createObjectURL(
    new Blob([ await (await fetch(url)).arrayBuffer() ])
  )
}
<audio controls></audio>