| import os | |
| import librosa | |
| import soundfile as sf | |
| def get_slices(file_path, sample_rate=44100, slice_duration=10, output_dir='slices'): | |
| os.makedirs(output_dir, exist_ok=True) | |
| audio, sr = librosa.load(file_path, sr=sample_rate) | |
| slice_samples = slice_duration * sample_rate | |
| existing_slices = [f for f in os.listdir(output_dir) if f.endswith('.wav')] | |
| if existing_slices: | |
| max_index = max(int(f.split('_')[1].split('.')[0]) for f in existing_slices) | |
| start_index = max_index + 1 | |
| else: | |
| start_index = 0 | |
| num_slices = len(audio) // slice_samples | |
| for i in range(num_slices): | |
| start_sample = i * slice_samples | |
| end_sample = start_sample + slice_samples | |
| audio_slice = audio[start_sample:end_sample] | |
| output_file = os.path.join(output_dir, f'slice_{start_index + i:04d}.wav') | |
| sf.write(output_file, audio_slice, sample_rate) | |
| if len(audio) % slice_samples != 0: | |
| start_sample = num_slices * slice_samples | |
| audio_slice = audio[start_sample:] | |
| output_file = os.path.join(output_dir, f'slice_{start_index + num_slices:04d}.wav') | |
| sf.write(output_file, audio_slice, sample_rate) | |
| if __name__ == "__main__": | |
| get_slices('rock_song_009.wav') | |