Streamlit麦克风录音后Librosa加载音频报LibsndfileError求助
问题解决方法
st_audiorec返回的是WAV格式的字节流数据,而librosa.load()默认无法直接解析原始字节流,这就是报错的原因。你需要用io.BytesIO将字节流包装成类文件对象,再传给librosa。
修改后的代码如下:
import streamlit as st from st_audiorec import st_audiorec import librosa import io wav_audio_data = st_audiorec() if wav_audio_data is not None: # 将字节流包装为类文件对象 audio_file = io.BytesIO(wav_audio_data) y, sr = librosa.load(audio_file, sr=None) # 可添加验证代码确认加载成功 st.write(f"采样率: {sr}, 音频长度: {len(y)/sr:.2f}秒")
原理说明:
io.BytesIO把字节数据转换成符合文件接口的对象,让librosa底层的libsndfile可以正常读取解析WAV格式的头部和音频数据。- 保持
sr=None可保留录制音频的原始采样率,避免自动重采样。
内容的提问来源于stack exchange,提问作者kulon one
相关产品推荐
相关产品推荐

