def test_background_noise(self): # noise > audio aug = naa.NoiseAug(noises=[self.noise]) augmented_audio = aug.augment(self.audio) self.assertTrue(augmented_audio is not None) # audio > noise aug = naa.NoiseAug(noises=[self.audio]) augmented_audio = aug.augment(self.noise) self.assertTrue(augmented_audio is not None)
def test_color_noise(self): colors = naa.NoiseAug().model.COLOR_NOISES for color in colors: aug = naa.NoiseAug(color=color) augmented_audio = aug.augment(self.audio) self.assertFalse(np.array_equal(self.audio, augmented_audio)) self.assertTrue(len(self.audio), len(augmented_audio)) self.assertTrue(self.sampling_rate > 0)
def test_substitute(self): aug = naa.NoiseAug() augmented_audio = aug.augment(self.audio) self.assertFalse(np.array_equal(self.audio, augmented_audio)) self.assertTrue(len(self.audio), len(augmented_audio)) self.assertTrue(self.sampling_rate > 0)
def augment_audio(data, sampling_rate, loudness_factor, speed_range, pitch_range, shift_max, noise_factor): """ OPTIONS: LOUDNESS AUGMENTER: naa.LoudnessAug() MASK AUGMENTER: naa.MaskAug() SPEED AUGMENTER: naa.SpeedAug() SHIFT AUGMENTER: naa.ShiftAug() NOISE AUGMENTER: naa.NoiseAug() CROP AUGMENTER: naa.CropAug() PITCH AUGMENTER_ naa.PitchAug() """ flow = naf.Sequential([naa.LoudnessAug(loudness_factor), naa.SpeedAug(speed_range), naa.PitchAug(sampling_rate = sampling_rate, pitch_range = pitch_range), naa.ShiftAug(sampling_rate = sampling_rate, shift_max = shift_max), naa.NoiseAug(noise_factor), ]) augmented_audio = flow.augment(data) return augmented_audio
def testSubsitute(self): audio, sampling_rate = librosa.load(self.sample_wav_file) aug = naa.NoiseAug() augmented_audio = aug.substitute(audio) self.assertFalse(np.array_equal(audio, augmented_audio)) self.assertTrue(len(audio), len(augmented_audio))
def load(audio_path): y, sr = librosa.load(audio_path) aug_noise = naa.NoiseAug(noise_factor=sr / 1000) augmented_noise = aug_noise.substitute(y) y_trim = librosa.effects.remix(augmented_noise, intervals=librosa.effects.split(y)) mfcc = librosa.feature.mfcc(y=y_trim, sr=sr) return mfcc.T
def test_zone(self): zone = (0, 1) coverage = 1. expected_aug_data_size = int(len(self.audio) * (zone[1] - zone[0]) * coverage) # background noise aug = naa.NoiseAug(zone=zone, noises=[self.noise], coverage=coverage) aug.model.stateless = False aug.augment(self.audio) self.assertTrue(-1 <= len(aug.model.aug_data) - expected_aug_data_size <= 1) # colored noise aug = naa.NoiseAug(zone=zone, color='pink', coverage=coverage) aug.model.stateless = False aug.augment(self.audio) self.assertTrue(-1 <= len(aug.model.aug_data) - expected_aug_data_size <= 1)
def noise_injection(self): """ define a noise augmentation instance using nlpaug :return: noise augmentation instance """ # pick randomly k samples from aug_noises sampling = random.choices(self.aug_noises, k=3) # define instance for noise augmentation noise_injection = naa.NoiseAug(zone=(0.0, 1.0), noises=sampling) return noise_injection
def gen_augmented(original, sample_rate): # list of augmentors available from the nlpaug library augment_list = [ #naa.CropAug(sampling_rate=sample_rate) naa.NoiseAug(), naa.SpeedAug(), naa.LoudnessAug(factor=(0.5, 2)), naa.VtlpAug(sampling_rate=sample_rate, zone=(0.0, 1.0)), naa.PitchAug(sampling_rate=sample_rate, factor=(-1, 3)) ] # sample augmentation randomly aug_idx = random.randint(0, len(augment_list) - 1) augmented_data = augment_list[aug_idx].augment(original) return augmented_data
def test_audio(self): audio, sampling_rate = AudioLoader.load_audio(self.sample_wav_file) flow = naf.Sequential([ naa.NoiseAug(), naa.PitchAug(sampling_rate=sampling_rate, factor=(0.2, 1.5)), naa.ShiftAug(sampling_rate=sampling_rate, duration=2), naa.SpeedAug(factor=(1.5, 3)) ]) augmented_audio = flow.augment(audio) self.assertFalse(np.array_equal(audio, augmented_audio)) self.assertTrue(len(audio), len(augmented_audio))
def process_audio_files_with_aug(filename, dirpath): sr = 16000 audio_array, sample_rate = librosa.load(os.path.join(dirpath, 'flac', filename), sr=sr) aug_crop = naa.CropAug(sampling_rate=sr) audio_array_crop = aug_crop.augment(audio_array) aug_loud = naa.LoudnessAug(loudness_factor=(2, 5)) audio_array_loud = aug_loud.augment(audio_array) aug_noise = naa.NoiseAug(noise_factor=0.03) audio_array_noise = aug_noise.augment(audio_array) audio_array_list= [audio_array,audio_array_crop,audio_array_loud, audio_array_noise ] out_list = convert_audio_to_processed_list(audio_array_list, filename, dirpath) return out_list
def test_audio(self): # https://freewavesamples.com/yamaha-v50-rock-beat-120-bpm sample_wav_file = os.path.abspath(os.path.join( os.path.dirname(__file__), '..', '..', 'data', 'Yamaha-V50-Rock-Beat-120bpm.wav')) audio, sampling_rate = librosa.load(sample_wav_file) flow = naf.Sequential([ naa.NoiseAug(), naa.PitchAug(sampling_rate=sampling_rate, factor=(0.2, 1.5)), naa.ShiftAug(sampling_rate=sampling_rate, duration=2), naa.SpeedAug(factor=(1.5, 3)) ]) augmented_audio = flow.augment(audio) self.assertFalse(np.array_equal(audio, augmented_audio)) self.assertTrue(len(audio), len(augmented_audio))
def test_audio(self): # https://freewavesamples.com/yamaha-v50-rock-beat-120-bpm sample_wav_file = os.path.join(os.environ.get("TEST_DIR"), 'res', 'audio', 'Yamaha-V50-Rock-Beat-120bpm.wav') audio, sampling_rate = AudioLoader.load_audio(sample_wav_file) flow = naf.Sequential([ naa.NoiseAug(), naa.PitchAug(sampling_rate=sampling_rate, factor=(0.2, 1.5)), naa.ShiftAug(sampling_rate=sampling_rate, duration=2), naa.SpeedAug(factor=(1.5, 3)) ]) augmented_audio = flow.augment(audio) self.assertFalse(np.array_equal(audio, augmented_audio)) self.assertTrue(len(audio), len(augmented_audio))
def process_audio_files_with_aug(self, audio_path): sr = 16000 audio_array, sample_rate = librosa.load(audio_path, sr=sr) aug_crop = naa.CropAug(sampling_rate=sr) audio_array_crop = aug_crop.augment(audio_array) aug_loud = naa.LoudnessAug(loudness_factor=(2, 5)) audio_array_loud = aug_loud.augment(audio_array) aug_noise = naa.NoiseAug(noise_factor=0.03) audio_array_noise = aug_noise.augment(audio_array) mel_spec_array_load = melspectrogram(audio_array_loud, hparams=hparams) mel_spec_array_noise = melspectrogram(audio_array_noise, hparams=hparams) audio_array_list = [mel_spec_array_load, mel_spec_array_noise] # audio_array_list= [audio_array_crop,audio_array_loud, # audio_array_noise ] return audio_array_list
def augmentation(): doss = 0 for dossier in os.listdir( '.'): # on parcourt tous les dossiers du répertoire courant if os.path.isdir(dossier): # si c'est bien un dossier cpt = 0 doss += 1 print("Dossier " + str(doss) + " sur 28") if doss >= 14: for file in os.listdir( './' + dossier + '/' ): # on parcours tous les fichiers .wav de ce repertoire if not os.path.isdir( file): # si c'est bien un fichier .wav path = './' + dossier + '/' + file audio, sampling_rate = librosa.load(path) freq = sampling_rate """ Noise injection It simply add some random value into data. """ liste_factor = [0.03, 0.02, 0.01] for fact in liste_factor: cpt += 1 aug = naa.NoiseAug(nosie_factor=fact) augmented_audio = aug.substitute(audio) path = './' + dossier + '/' + str(cpt) + '_' + file out_f = path wavf.write(out_f, freq, augmented_audio) liste_factor = [0.5, 2, 5] for fact in liste_factor: cpt += 1 aug = naa.PitchAug(sampling_rate=sampling_rate, pitch_factor=fact) augmented_audio = aug.substitute(audio) path = './' + dossier + '/' + str(cpt) + '_' + file out_f = path wavf.write(out_f, freq, augmented_audio)
def test_coverage_and_zone(self): params = [ ((0.3, 0.7), 1), ((0, 1), 1) ] for zone, coverage in params: augs = [ naa.LoudnessAug(zone=zone, coverage=coverage, stateless=False), naa.MaskAug(zone=zone, coverage=coverage, stateless=False), naa.NoiseAug(zone=zone, coverage=coverage, stateless=False), naa.PitchAug(zone=zone, coverage=coverage, stateless=False, sampling_rate=self.sampling_rate), naa.SpeedAug(zone=zone, coverage=coverage, stateless=False), naa.VtlpAug(zone=zone, coverage=coverage, stateless=False, sampling_rate=self.sampling_rate), naa.NormalizeAug(zone=zone, coverage=coverage, stateless=False), naa.PolarityInverseAug(zone=zone, coverage=coverage, stateless=False) ] for aug in augs: aug_data = aug.augment(self.audio) self.assertTrue(len(aug_data[aug.start_pos:aug.end_pos]), int(len(self.audio) * (zone[1] - zone[0]) * coverage))
augment data for one audio recording """ import librosa from nlpaug.util.visual.wave import VisualWave import nlpaug.augmenter.audio as naa import nlpaug.flow as naf path = '/home/akomaty/Documents/Projets/Co-encadrement_Emna_Rejaibi/Audio_files/300_P/split/Participant/300_AUDIO_fixed_5.wav' audio, sampling_rate = librosa.load(path) VisualWave.visual('Original', audio, sampling_rate) """ Noise injection It simply add some random value into data. """ aug = naa.NoiseAug(nosie_factor=0.05) augmented_audio = aug.substitute(audio) VisualWave.visual('Noise', augmented_audio, sampling_rate) """ Pitch Augmenter This augmentation is a wrapper of librosa function. It change pitch randomly """ aug = naa.PitchAug(sampling_rate=sampling_rate, pitch_factor=0.5) augmented_audio = aug.substitute(audio) VisualWave.visual('Pitch', augmented_audio, sampling_rate) """ Shift Augmenter The idea of shifting time is very simple. It just shift audio to left/right with a random second.
def aug_noise(data, noise_factor=0.03): aug = naa.NoiseAug(noise_factor=noise_factor) augmented_data = aug.augment(data) return augmented_data
def test_empty_input(self): audio = np.array([]) aug = naa.NoiseAug() augmented_audio = aug.augment(audio) self.assertTrue(np.array_equal(audio, augmented_audio))
csv_file_path = 'D:/Emna/DAIC WOZ # EMNA/DAIC WOZ # EMNA/' + participant_ID + '_P/split/Participant/' path = 'C:/Users/yobitrust/Desktop/DAIC_augmented/' + participant_ID + '_P/split/Participant/' try: os.makedirs(path) except OSError: print("Creation of the directory %s failed" % path) else: print("Creation of the directory %s success" % path) if os.path.exists(csv_file_path): input_directory = Path(csv_file_path) for my_filename in input_directory.glob("*_AUDIO_*.wav"): audio, sampling_rate = librosa.load(my_filename) VisualWave.visual('Original', audio, sampling_rate) flow = naf.Sequential([ naa.NoiseAug(), naa.PitchAug(sampling_rate=sampling_rate, pitch_factor=1.5), naa.ShiftAug(sampling_rate=sampling_rate, shift_max=2), naa.SpeedAug(speed_factor=1.5) ]) augmented_audio = flow.augment(audio) VisualWave.visual('augment', augmented_audio, sampling_rate) my_filename = my_filename.stem librosa.output.write_wav(path + my_filename + '.wav', augmented_audio, sampling_rate, norm=False) except ValueError: print("Skipping the following line: ", row[0])
def add_noise(data, sr): aug = naa.NoiseAug(noise_factor=0.03) return aug.augment(data)