How to splice an audio file (wav format) into 1 sec splices in python?

Have you thought about just using numpy to cut the file into slices the length of the samplerate, appending each to a list of numpy arrays maybe. Then you can iterate through your list of np.arrays writing each one as a soundfile using your audio tool of choice, I like soundfile personally.

import numpy as np
import soundfile as sf

# read into a numpy array
data, sr = sf.read('filename.format')

# split
split = []
noSections = int(np.ceil(len(data) / sr))

for i in range(noSections):
    # get 1 second
    temp = data[i*sr:i*sr + sr] # this is for mono audio
    # temp = data[i*sr:i*sr + sr, :] # this is for stereo audio; uncomment and comment line above
    # add to list
    split.append(temp)

for i in range(noSections):
    # format filename
    filename = 'filename_{}.format'.format()
    # write to file
    sf.write(filename, split[i], sr)
 

I know there has been a few other answers using different library-functions but this is nice and pure and will be good for anything I'd hope


Its real simple and easy using pydub module, details of which are over here and here

pydub has a method called make_chunks to which you can specify chunk length in milliseconds.

make_chunks(your_audio_file_object, chunk_length_ms)

Here is a working code that splits wav file in one sec chunks. I had a 8.5 seconds file, so the program created 9 one seconds chunks that are playable. Last chunk will be smaller depending on audio duration.

from pydub import AudioSegment
from pydub.utils import make_chunks

myaudio = AudioSegment.from_file("myAudio.wav" , "wav") 
chunk_length_ms = 1000 # pydub calculates in millisec
chunks = make_chunks(myaudio, chunk_length_ms) #Make chunks of one sec

#Export all of the individual chunks as wav files

for i, chunk in enumerate(chunks):
    chunk_name = "chunk{0}.wav".format(i)
    print "exporting", chunk_name
    chunk.export(chunk_name, format="wav")

Output

Python 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>> 
exporting chunk0.wav
exporting chunk1.wav
exporting chunk2.wav
exporting chunk3.wav
exporting chunk4.wav
exporting chunk5.wav
exporting chunk6.wav
exporting chunk7.wav
exporting chunk8.wav
>>> 

Tags:

Python

Audio