I am looking for a python function to splice an audio file (wav format) into 1 sec duration splices and store each of the new splices (of 1 sec duration ) into a new .wav file.
-
I would start with `numpy.io.wavfile` – M.T Apr 22 '16 at 17:36
-
It doesn't exist in numpy, you probably are referring to [`scipy.io.wavfile`](http://docs.scipy.org/doc/scipy/reference/io.html). – Frank Zalkow Apr 25 '16 at 08:00
-
1If you are open to using an external library, do see my answer below which is clean and simple. – Anil_M Apr 25 '16 at 23:00
2 Answers
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
>>>

- 10,893
- 6
- 47
- 74
-
1Instead using python , sox is a good tool for playing with audio files : http://stackoverflow.com/questions/16125614/trying-to-split-wav-file-into-two-pieces-with-sox – Steven Du Jun 24 '16 at 01:43
-
1
-
-
1`chunk.export ` method exports playable audio chunks to files (.wav here) that you can later use for audio processing.Above chunks (chunk0.wav ... through .. chunk8.wav) are saved in the same folder that you run above scripts from. – Anil_M Nov 12 '19 at 05:55
-
I am using the same code to slice audio files. But I keep getting the following error : AttributeError: 'str' object has no attribute 'export'. Can someone tell me what is wrong here? – Soumya C Jul 20 '20 at 07:28
-
I retried above code in python 2.7.16 & 3.7.5, it still works as intended. Can u check for any typos or post your code in separate question and provide link here? – Anil_M Jul 20 '20 at 22:27
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

- 21
- 1