如何将经pydub修改后的AudioSegment直接加载到librosa?
解决方案
你可以直接用BytesIO包装audio_clip.raw_data,因为BytesIO本身就属于BinaryIO类型,完全符合librosa.load()的输入要求。不过要注意,raw_data是未经编码的PCM原始数据,调用librosa.load()时需要手动指定音频的采样率、声道数等参数,否则librosa无法正确解析。
直接上可用代码:
from pydub import AudioSegment import librosa from io import BytesIO audio_clip = AudioSegment.from_mp3("example.mp3") # ... 执行你的音频修改操作 # 将原始音频字节数据包装成BytesIO对象 audio_bytes = BytesIO(audio_clip.raw_data) # 调用librosa.load并指定必要参数 # sr传入音频原始采样率,mono根据原音频声道数设置(True转单声道,False保留原声道) y, sr = librosa.load(audio_bytes, sr=audio_clip.frame_rate, mono=(audio_clip.channels == 1))
关键说明
BytesIO是Python标准库io中的类,它实现了BinaryIO接口,所以能直接作为librosa.load()的输入。audio_clip.frame_rate是音频的原始采样率,传给sr参数可以保证librosa解析时的采样率和原始数据一致。mono参数:设为True会自动将多声道音频转为单声道;设为False则保留原声道结构,此时返回的y是二维数组(每列对应一个声道)。
内容的提问来源于stack exchange,提问作者Lazzza
相关产品推荐
相关产品推荐

