将音频数据从 JS 发送到 Python

nov*_*ain 7 javascript python audio blob flask

我正在尝试使用 Flask 将 .wav 音频文件(blob)fr\xc3\xa5n JS 发送到 Python。我只是想将文件保存在Python端并能够在我的电脑上播放。这是我的尝试:

\n\n

JS:

\n\n
fetch(serverUrl, {\n  method: "post",\n  body: blob\n});\n
Run Code Online (Sandbox Code Playgroud)\n\n

其中 blob 的类型为Blob {size: 5040, type: "audio/wav;"}

\n\n

Python:

\n\n
@app.route(\'/messages\', methods = [\'POST\'])\ndef api_message():\n      # Open file and write binary (blob) data\n      f = open(\'./file.wav\', \'wb\')\n      f.write(request.data)\n      f.close()\n      return "Binary message written!"\n
Run Code Online (Sandbox Code Playgroud)\n\n

文件已保存,但只包含大量内容[object BlobEvent]. 我做错了什么以及如何解决它?

\n\n

编辑: \n音频样本是使用收集的MediaRecorder()

\n\n
const mediaRecorder = new MediaRecorder(stream);\n// Start\nconst chunks = [];\nmediaRecorder.ondataavailable = e => {\n    chunks.push(e);\n}\n// On stop\nblob = new Blob(chunks, {\'type\': \'audio/wav;\'});\n
Run Code Online (Sandbox Code Playgroud)\n\n

我尝试在客户端再次播放音频,效果很好:

\n\n
const audio = document.createElement(\'audio\');\nconst audioURL = window.URL.createObjectURL(blob);\naudio.src = audioURL;\n
Run Code Online (Sandbox Code Playgroud)\n

Mus*_*usa 5

您将事件对象数组传递给 Blob 构造函数,而不是音频数据。
数据是e.data,所以你的代码应该是

mediaRecorder.ondataavailable = e => {
    chunks.push(e.data);
}
Run Code Online (Sandbox Code Playgroud)