javascript - 如何将编码为字节字符串的音频文件解码为 numpy 数组?
问题描述
目前,我有一个 React.js 前端与 Flask 后端配对的项目。我正在使用前端从麦克风收集短音轨并将该数据提供给我的后端进行处理。现在,前端在 POST 请求中将麦克风数据作为 base64 字符串发送,而我的后端需要在将数据作为带有 librosa 的 python ndarray 加载回之前,将数据解码并保存到“temp.wav”的磁盘中。出于隐私和效率的原因,我不想在将文件加载回内存之前将其保存在本地,但我似乎无法弄清楚如何将数据从 byte64 表示形式转换为 numpy.ndarray librosa 输出。
这是前端代码的片段:
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)
});
};
和我的 Flask 后端代码:
@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
.
推荐阅读
- java - CDI 事件已触发,但并非所有线程/会话都接收到
- google-bigquery - BQ (Big Query) SSH / 从本地机器上传文件到表
- sql - 在分解子查询中使用自定义函数调用时出现“不是 GROUP BY 表达式”错误
- python - 如何对列表中的列表执行数学函数
- ffmpeg - 单词结束时绘制文本ffmpeg不结束
- kvm - 我通过 Ubuntu 存储库中的突触安装了 KVM,现在我的计算机无法启动。
- swift - Swift Eureka ActionSheetRow 选项基于另一行的值
- ruby-on-rails - 在多语言 Rails 应用程序中重定向控制器操作的最佳方法是什么?
- php - PHP DOM 返回为 html
- vba - 将具有固定起始单元格的列与最后一列 VBA 相加