为何同一WAV文件使用不同Python库获取的采样率不一致?
为什么librosa获取的WAV采样率和wave、scipy不一样?
这是个非常常见的问题,核心原因在于librosa.load的默认行为和另外两个库存在本质区别:
1. wave和scipy.io.wavfile的行为
wave和scipy.io.wavfile.read都是直接读取WAV文件的原始元数据,不会对音频数据做任何修改。它们返回的采样率就是文件本身录制/保存时的原始采样率(也就是你这里的16000Hz),完全忠实于源文件。
2. librosa.load的默认逻辑
librosa作为专门用于音频分析的库,默认会对加载的音频做重采样处理——它的load函数有一个默认参数sr=22050,意思是不管源文件的采样率是多少,都会自动把音频重采样到22050Hz(这是librosa设定的“标准采样率”)。所以你得到的sample_rate=22050其实是重采样后的结果,不是源文件的原始采样率。
3. 如何让librosa返回原始采样率?
有两种简单的方法可以获取源文件的真实采样率:
- 调用
librosa.load时显式指定sr=None,这样它就会跳过重采样步骤,返回原始采样率:import librosa X, sample_rate = librosa.load(fname, sr=None) # 此时sample_rate会等于16000,和另外两个库结果一致 - 如果只是想获取采样率而不需要加载音频数据,可以用更高效的
librosa.get_samplerate函数:import librosa original_sr = librosa.get_samplerate(fname) # original_sr直接返回16000,无需加载整个音频
简单总结:wave和scipy是“原样读取”,librosa默认是“标准化读取”,调整sr参数就能让三者的结果统一啦。
内容的提问来源于stack exchange,提问作者Boom
相关产品推荐
相关产品推荐

