由于 scipy.signal.resample 可能 非常慢 ,我搜索了其他适用于音频的算法。 Erik de Castro Lopo 的 SRC (又名 Secret Rabbit Code 又名 libsamplerate)似乎是可用的最佳重采样算法之一。 它被 scikit 的 scikit.samplerate 使用,但是这个库安装起来似乎很复杂(我放弃了 Windows)。 幸运的是,有一个易于使用且易于安装的 libsamplerate 的 Python 包装器,由 Tino Wagner 制作: https ://pypi.org/project/samplerate/。使用 pip install samplerate 安装。用法: import samplerate from scipy.io import wavfile sr, x = wavfile.read('input.wav') # 48 khz file y = samplerate.resample(x, 44100 * 1.0 / 48000, 'sinc_best') 许多重采样解决方案的有趣阅读/比较:http: //signalsprocessed.blogspot.com/2016/08/audio-resampling-in-python.html 附录: 重采样频率扫描(20hz 到 20khz)的频谱图比较: 原文由 Basj 发布,翻译遵循 CC BY-SA 4.0 许可协议
NumPy 有 numpy.interp 进行线性插值: In [1]: numpy.interp(np.arange(0, len(a), 1.5), np.arange(0, len(a)), a) Out[1]: array([ 1. , 2.5, 4. , 5.5, 7. , 8.5, 10. ]) SciPy 有 scipy.interpolate.interp1d 可以进行线性和最近插值(尽管哪个点最近可能并不明显): In [2]: from scipy.interpolate import interp1d In [3]: xp = np.arange(0, len(a), 1.5) In [4]: lin = interp1d(np.arange(len(a)), a) In [5]: lin(xp) Out[5]: array([ 1. , 2.5, 4. , 5.5, 7. , 8.5, 10. ]) In [6]: nearest = interp1d(np.arange(len(a)), a, kind='nearest') In [7]: nearest(xp) Out[7]: array([ 1., 2., 4., 5., 7., 8., 10.])