Вот один из способов:
import numpy as np
from scipy.io import wavfile
frequency, signal = wavfile.read(path)
slice_length = 4 # in seconds
overlap = 1 # in seconds
slices = np.arange(0, len(signal), slice_length-overlap, dtype=np.int)
for start, end in zip(slices[:-1], slices[1:]):
start_audio = start * frequency
end_audio = end * frequency
audio_slice = audio[start_audio: end_audio]
По сути, мы делаем следующее:
- Загрузите файл и его соответствующую частоту. В качестве примера я предполагаю, что его одноканальный, с многоканальным, он будет работать одинаково, просто больше кода.
- Определите желаемую длину среза и перекрытие. Массив даст нам начало каждой аудио части. Заставив его на шаг вперед и добавив перекрытие, мы получим нужные куски.
Чтобы убедиться, что нарезка работает, проверьте этот фрагмент:
slice_length = 4 # in seconds
overlap = 1 # in seconds
slices = np.arange(0, 26, slice_length-overlap, dtype=np.int) # 26 is arbitrary
frequency = 1
for start, end in zip(slices[:-1], slices[1:]):
start_audio = start * frequency
end_audio = end * frequency + overlap
print(start_audio, end_audio)
Выход:
0 4
3 7
6 10
9 13
12 16
15 19
18 22
21 25