| import os | |
| import argparse | |
| import librosa | |
| import numpy as np | |
| import soundfile as sf | |
| from pedalboard import Pedalboard, Reverb, Delay, HighpassFilter, LowpassFilter | |
| from random import uniform | |
| from tqdm import tqdm | |
| def random_effect(audio, sr): | |
| reverb = Pedalboard([ | |
| Delay( | |
| delay_seconds=uniform(0.001, 0.100), | |
| feedback=0.0, | |
| mix=1.0 | |
| ), | |
| Reverb( | |
| room_size=uniform(0.1, 0.8), | |
| damping=uniform(0.1, 0.8), | |
| wet_level=1.0, | |
| dry_level=0.0, | |
| width=uniform(0.6, 1.0) | |
| ), | |
| HighpassFilter(cutoff_frequency_hz=uniform(100, 1000)), | |
| LowpassFilter(cutoff_frequency_hz=uniform(4000, 12000)) | |
| ]) | |
| delay = Pedalboard([ | |
| Delay( | |
| delay_seconds=uniform(0.05, 0.500), | |
| feedback=uniform(0.1, 0.5), | |
| mix=1.0 | |
| ), | |
| Reverb( | |
| room_size=uniform(0.05, 0.3), | |
| damping=uniform(0.1, 0.8), | |
| wet_level=0.2, | |
| dry_level=0.8, | |
| width=uniform(0.6, 1.0) | |
| ), | |
| HighpassFilter(cutoff_frequency_hz=uniform(100, 1000)), | |
| LowpassFilter(cutoff_frequency_hz=uniform(3000, 10000)) | |
| ]) | |
| effect = uniform(0.1, 0.4) * reverb(audio, sr) + uniform(0.1, 0.4) * delay(audio, sr) | |
| mix = effect + audio | |
| return mix, effect | |
| if __name__ == '__main__': | |
| argparser = argparse.ArgumentParser(description='Add random reverb and delay effects to an audio file.') | |
| argparser.add_argument('-i', '--input_folder', type=str, default="train", help='Path to the input audio file.') | |
| argparser.add_argument('-o', '--output_folder', type=str, default="dataset_train", help='Path to the output audio file.') | |
| args = argparser.parse_args() | |
| index = 1 | |
| sr = 44100 | |
| for file in tqdm(os.listdir(args.input_folder)): | |
| try: | |
| audio, _ = librosa.load(os.path.join(args.input_folder, file), sr=sr) | |
| if len(audio.shape) == 1: | |
| audio = np.stack([audio, audio], axis=1) | |
| effect = random_effect(audio.T, sr) | |
| except: | |
| print(f"Failed to process file: {file}") | |
| continue | |
| os.makedirs(os.path.join(args.output_folder, str(index)), exist_ok=True) | |
| sf.write(os.path.join(args.output_folder, str(index), "mixture.wav"), effect[0].T, sr, subtype='PCM_16') | |
| sf.write(os.path.join(args.output_folder, str(index), "other.wav"), effect[1].T, sr, subtype='PCM_16') | |
| sf.write(os.path.join(args.output_folder, str(index), "dry.wav"), audio, sr, subtype='PCM_16') | |
| index += 1 | |