Search code examples
pythonnumpyaudioscipypydub

How to create a pydub AudioSegment using an numpy array?


I have the following code in python

from scipy.io.wavfile import read
rate, signal = read('./data/input.wav')
# get only one channel
signal = signal[:,0] 
# do a bunch of processing here

Now I want to create an pydub segment using 'signal' and 'rate'

audio_segment = pydub.AudioSegment()

So how can I create this audio segment, and after that, how can I get back my signal as an numpy array?


Solution

  • I was able to run this code on my machine:

    from scipy.io.wavfile import read
    from pydub import AudioSegment
    
    rate, signal = read("./test/data/test1.wav")
    channel1 = signal[:,0]
    
    audio_segment = pydub.AudioSegment(
        channel1.tobytes(), 
        frame_rate=rate,
        sample_width=channel1.dtype.itemsize, 
        channels=1
    )
    
    # test that it sounds right (requires ffplay, or pyaudio):
    from pydub.playback import play
    play(audio_segment)