def augment(input_dir: Path, output_dir: Path): seed(SEED) if not input_dir.exists: raise Exception('Input directory does not exist.') if not output_dir.exists: print("Making output directory {}".format(output_dir)) output_dir.mkdir(parents=True) filelist = set([x for x in input_dir.glob('*.wav')]) print("{} input files found".format(len(filelist))) while len(filelist) > 1: print("{} files remaining...".format(len(filelist))) f1 = choice(tuple(filelist)) filelist.remove(f1) f2 = choice(tuple(filelist)) filelist.remove(f2) # load audio files and apply a random amount of: # gain reduction in steps of -3 db from [-15 db, 0 db] # varispeed between [0.9, 1.1] reduction = [0, -3, -6, -12, -15] f1 = AudioFile(path=f1).varispeed(uniform(0.9, 1.1)).gain(choice(reduction)) f2 = AudioFile(path=f2).varispeed(uniform(0.9, 1.1)).gain(choice(reduction)) # mix two audio files - random amount of overlap from [0.5 to 1.5] f1.mix(audio=f2, relative_start=uniform(0.5, 1.5)) # add a random amounts of silence [0 sec, 5 sec] before and after audio f1.add_silence(sec_before=uniform(0, 5), sec_after=uniform(0, 5)) # save as new clean file filename = f1.filename.split(".wav")[0] + "_" + f2.filename f1.save(output_path=output_dir, filename=filename)
def augment(input_dir: Path, noise_dir: Path, output_dir: Path): seed(SEED) if not input_dir.exists: raise Exception('Input directory does not exist.') if not noise_dir.exists: raise Exception('Noise directory does not exist.') if not output_dir.exists: print("Making output directory {}".format(output_dir)) output_dir.mkdir(parents=True) filelist = [x for x in input_dir.glob('*.wav')] print("{} input files found".format(len(filelist))) noiselist = set([x for x in noise_dir.glob('*.wav')]) print("{} noise files found".format(len(noiselist))) print("Loading noise files into memory...") noise_files = [AudioFile(path=x) for x in noiselist] print("Done loading noise files.") irs = [x for x in Path('./IMreverbs-realistic').glob('*.wav')] while len(filelist) > 0: print("{} files remaining...".format(len(filelist))) f1 = filelist.pop() noise = choice(noise_files) # load audio files and apply a random amount of processing to noisy file: # gain reduction in steps of -6 db # varispeed between [0.9, 1.1] # start position of audio in noise file (trimming start of file) gain = [6, 3, 1.5, 0, -1.5, -3, -6] f1 = AudioFile(path=f1) noise = noise.copy() \ .trim_start(relative_start=uniform(0.0, 0.5)) \ .trim_to_n_samples(n=f1.length) # noise = noise.varispeed(uniform(0.9, 1.1)) noise = noise.gain(choice(gain)).clip() # add dynamic lpf to simulate speaker turning away filter_start = random() filter_end = random() if filter_start < filter_end: f1.dynamic_lpf(cutoff=uniform(1000, 8000), order=randint(0, 3), relative_start=filter_start, relative_end=filter_end, exponential=random()) # add noise to audio f1.mix(noise, maintain_length=True) # choose random impulse response and add reverb to noisy audio ir = AudioFile(path=choice(irs)) f1.conv_reverb(ir, wet_db=uniform(-70, -30), predelay=uniform(0, 50)) # filtering f1.lpf(uniform(5000, 8000)) f1.hpf(uniform(0, 250)) # clipping clipping = [0.0, 1.0, 2.0, 3.0] f1.clip(choice(clipping)) # save f1.save(output_path=output_dir)