Download clean/audio/shiftyspeech/data_utils.py from deepsafe/model-code: direct link, hf CLI and curl.
- Browser
- Download file 7.56 kB
-
https://huggingface.co/deepsafe/model-code/resolve/main/clean/audio/shiftyspeech/data_utils.py
- Command line
-
hf download hf://deepsafe/model-code/clean/audio/shiftyspeech/data_utils.py
-
curl -L -o data_utils.py https://huggingface.co/deepsafe/model-code/resolve/main/clean/audio/shiftyspeech/data_utils.py
7.56 kB
| import os | |
| import random | |
| from random import randrange | |
| import librosa | |
| import numpy as np | |
| import torch | |
| import torch.nn as nn | |
| from RawBoost import ( | |
| ISD_additive_noise, | |
| LnL_convolutive_noise, | |
| SSI_additive_noise, | |
| normWav, | |
| ) | |
| from torch import Tensor | |
| from torch.utils.data import Dataset | |
| __author__ = "Hemlata Tak" | |
| __email__ = "tak@eurecom.fr" | |
| def genSpoof_list(dir_meta, is_train=False, is_eval=False): | |
| d_meta = {} | |
| file_list = [] | |
| with open(dir_meta, "r") as f: | |
| l_meta = f.readlines() | |
| if is_train: | |
| for line in l_meta: | |
| key, label = line.strip().split() | |
| file_list.append(key) | |
| d_meta[key] = 1 if label == "bonafide" else 0 | |
| return d_meta, file_list | |
| elif is_eval: | |
| for line in l_meta: | |
| key, _ = line.strip().split(" ") | |
| file_list.append(key) | |
| return file_list | |
| else: | |
| for line in l_meta: | |
| key, label = line.strip().split() | |
| file_list.append(key) | |
| d_meta[key] = 1 if label == "bonafide" else 0 | |
| return d_meta, file_list | |
| def pad(x, max_len=64600): | |
| x_len = x.shape[0] | |
| if x_len >= max_len: | |
| return x[:max_len] | |
| # need to pad | |
| num_repeats = int(max_len / x_len) + 1 | |
| padded_x = np.tile(x, (1, num_repeats))[:, :max_len][0] | |
| return padded_x | |
| class Dataset_ASVspoof2019_train(Dataset): | |
| def __init__(self, args, metafile, algo): | |
| """self.list_IDs : list of strings (each string: utt key), | |
| self.labels: dictionary (key: utt key, value: label integer)""" | |
| self.uttpath_labels = [] | |
| with open(metafile, "r") as f: | |
| for line in f: | |
| items = line.strip().split() | |
| lb = 1 if items[-1] == "bonafide" else 0 | |
| self.uttpath_labels.append((items[0], lb)) | |
| self.algo = algo | |
| self.args = args | |
| self.cut = 64600 # take ~4 sec audio (64600 samples) | |
| def __len__(self): | |
| return len(self.uttpath_labels) | |
| def __getitem__(self, index): | |
| path, target = self.uttpath_labels[index] | |
| X, fs = librosa.load(path, sr=16000) | |
| Y = process_Rawboost_feature(X, fs, self.args, self.algo) | |
| X_pad = pad(Y, self.cut) | |
| x_inp = Tensor(X_pad) | |
| return x_inp, target | |
| class Dataset_ASVspoof2021_eval(Dataset): | |
| def __init__(self, list_IDs): | |
| """self.list_IDs : list of strings (each string: utt key),""" | |
| self.list_IDs = list_IDs | |
| self.cut = 64600 # take ~4 sec audio (64600 samples) | |
| def __len__(self): | |
| return len(self.list_IDs) | |
| def __getitem__(self, index): | |
| utt_id = self.list_IDs[index] | |
| X, fs = librosa.load(utt_id, sr=16000) | |
| X_pad = pad(X, self.cut) | |
| x_inp = Tensor(X_pad) | |
| return x_inp, utt_id | |
| # --------------RawBoost data augmentation algorithms---------------------------## | |
| def process_Rawboost_feature(feature, sr, args, algo): | |
| # Data process by Convolutive noise (1st algo) | |
| if algo == 1: | |
| feature = LnL_convolutive_noise( | |
| feature, | |
| args.N_f, | |
| args.nBands, | |
| args.minF, | |
| args.maxF, | |
| args.minBW, | |
| args.maxBW, | |
| args.minCoeff, | |
| args.maxCoeff, | |
| args.minG, | |
| args.maxG, | |
| args.minBiasLinNonLin, | |
| args.maxBiasLinNonLin, | |
| sr, | |
| ) | |
| # Data process by Impulsive noise (2nd algo) | |
| elif algo == 2: | |
| feature = ISD_additive_noise(feature, args.P, args.g_sd) | |
| # Data process by coloured additive noise (3rd algo) | |
| elif algo == 3: | |
| feature = SSI_additive_noise( | |
| feature, | |
| args.SNRmin, | |
| args.SNRmax, | |
| args.nBands, | |
| args.minF, | |
| args.maxF, | |
| args.minBW, | |
| args.maxBW, | |
| args.minCoeff, | |
| args.maxCoeff, | |
| args.minG, | |
| args.maxG, | |
| sr, | |
| ) | |
| # Data process by all 3 algo. together in series (1+2+3) | |
| elif algo == 4: | |
| feature = LnL_convolutive_noise( | |
| feature, | |
| args.N_f, | |
| args.nBands, | |
| args.minF, | |
| args.maxF, | |
| args.minBW, | |
| args.maxBW, | |
| args.minCoeff, | |
| args.maxCoeff, | |
| args.minG, | |
| args.maxG, | |
| args.minBiasLinNonLin, | |
| args.maxBiasLinNonLin, | |
| sr, | |
| ) | |
| feature = ISD_additive_noise(feature, args.P, args.g_sd) | |
| feature = SSI_additive_noise( | |
| feature, | |
| args.SNRmin, | |
| args.SNRmax, | |
| args.nBands, | |
| args.minF, | |
| args.maxF, | |
| args.minBW, | |
| args.maxBW, | |
| args.minCoeff, | |
| args.maxCoeff, | |
| args.minG, | |
| args.maxG, | |
| sr, | |
| ) | |
| # Data process by 1st two algo. together in series (1+2) | |
| elif algo == 5: | |
| feature = LnL_convolutive_noise( | |
| feature, | |
| args.N_f, | |
| args.nBands, | |
| args.minF, | |
| args.maxF, | |
| args.minBW, | |
| args.maxBW, | |
| args.minCoeff, | |
| args.maxCoeff, | |
| args.minG, | |
| args.maxG, | |
| args.minBiasLinNonLin, | |
| args.maxBiasLinNonLin, | |
| sr, | |
| ) | |
| feature = ISD_additive_noise(feature, args.P, args.g_sd) | |
| # Data process by 1st and 3rd algo. together in series (1+3) | |
| elif algo == 6: | |
| feature = LnL_convolutive_noise( | |
| feature, | |
| args.N_f, | |
| args.nBands, | |
| args.minF, | |
| args.maxF, | |
| args.minBW, | |
| args.maxBW, | |
| args.minCoeff, | |
| args.maxCoeff, | |
| args.minG, | |
| args.maxG, | |
| args.minBiasLinNonLin, | |
| args.maxBiasLinNonLin, | |
| sr, | |
| ) | |
| feature = SSI_additive_noise( | |
| feature, | |
| args.SNRmin, | |
| args.SNRmax, | |
| args.nBands, | |
| args.minF, | |
| args.maxF, | |
| args.minBW, | |
| args.maxBW, | |
| args.minCoeff, | |
| args.maxCoeff, | |
| args.minG, | |
| args.maxG, | |
| sr, | |
| ) | |
| # Data process by 2nd and 3rd algo. together in series (2+3) | |
| elif algo == 7: | |
| feature = ISD_additive_noise(feature, args.P, args.g_sd) | |
| feature = SSI_additive_noise( | |
| feature, | |
| args.SNRmin, | |
| args.SNRmax, | |
| args.nBands, | |
| args.minF, | |
| args.maxF, | |
| args.minBW, | |
| args.maxBW, | |
| args.minCoeff, | |
| args.maxCoeff, | |
| args.minG, | |
| args.maxG, | |
| sr, | |
| ) | |
| # Data process by 1st two algo. together in Parallel (1||2) | |
| elif algo == 8: | |
| feature1 = LnL_convolutive_noise( | |
| feature, | |
| args.N_f, | |
| args.nBands, | |
| args.minF, | |
| args.maxF, | |
| args.minBW, | |
| args.maxBW, | |
| args.minCoeff, | |
| args.maxCoeff, | |
| args.minG, | |
| args.maxG, | |
| args.minBiasLinNonLin, | |
| args.maxBiasLinNonLin, | |
| sr, | |
| ) | |
| feature2 = ISD_additive_noise(feature, args.P, args.g_sd) | |
| feature_para = feature1 + feature2 | |
| feature = normWav(feature_para, 0) # normalized resultant waveform | |
| # original data without Rawboost processing | |
| else: | |
| feature = feature | |
| return feature | |