Resample a numpy array

前端 未结 5 1248
梦如初夏
梦如初夏 2020-12-14 03:06

It\'s easy to resample an array like

 a = numpy.array([1,2,3,4,5,6,7,8,9,10])

with an integer resampling factor. For instance, wi

5条回答
  •  离开以前
    2020-12-14 03:34

    As scipy.signal.resample can be very slow, I searched for other algorithms adapted for audio.

    It seems that Erik de Castro Lopo's SRC (a.k.a. Secret Rabbit Code a.k.a. libsamplerate) is one of the best resampling algorithms available.

    • It is used by scikit's scikit.samplerate, but this library seems to be complicated to install (I gave up on Windows).

    • Fortunately, there is an easy-to-use and easy-to-install Python wrapper for libsamplerate, made by Tino Wagner: https://pypi.org/project/samplerate/. Installation with pip install samplerate. Usage:

      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')  
      

    Interesting reading / comparison of many resampling solutions: http://signalsprocessed.blogspot.com/2016/08/audio-resampling-in-python.html


    Addendum: comparison of spectrograms of a resampled frequency sweep (20hz to 20khz):

    1) Original

    2) Resampled with libsamplerate / samplerate module

    3) Resampled with numpy.interp ("One-dimensional linear interpolation"):

提交回复
热议问题