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