Exemple #1
0
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)
Exemple #2
0
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)