Flask接收WAV文件后如何用librosa加载?解决加载报错问题
Flask接收WAV文件后用librosa加载的报错解决办法
直接用librosa.load()加载Flask的FileStorage对象会报错,因为它只接受文件路径、字节串(但会被当作路径解析)或类文件对象。你之前用read()得到字节串后报错,是因为librosa把字节串当成了文件路径去处理,自然不符合要求。
正确的做法是把FileStorage对象转换成类文件对象(比如BytesIO),让librosa可以直接读取:
from flask import request from io import BytesIO import librosa # 获取前端传来的FileStorage对象 audio_file = request.files.get('file') # 将文件内容读取为字节流,并用BytesIO包装成类文件对象 audio_stream = BytesIO(audio_file.read()) # 用librosa加载这个类文件对象 data, sampling_rate = librosa.load(audio_stream)
原理:BytesIO会把字节数据包装成一个具备文件操作接口的对象,完全符合librosa.load()对输入的要求,这样就能正常解析WAV文件内容了。
内容的提问来源于stack exchange,提问作者Sheyh
相关产品推荐
相关产品推荐

