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