monisankha commited on
Commit
11c9807
·
1 Parent(s): f36ec23
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. app.py +379 -0
  2. final_epoch_500_batch_id_113.model +3 -0
  3. requirements.txt +5 -0
  4. samples/SA1_timit_train_DR7_MTLC0.WAV +0 -0
  5. samples/SA1_timit_train_DR7_MWRP0.WAV +0 -0
  6. samples/SA1_timit_train_DR8_FCLT0.WAV +0 -0
  7. samples/SA1_timit_train_DR8_FJRB0.WAV +0 -0
  8. samples/SA1_timit_train_DR8_FNKL0.WAV +0 -0
  9. samples/SA1_timit_train_DR8_FPLS0.WAV +0 -0
  10. samples/SA1_timit_train_DR8_MCXM0.WAV +0 -0
  11. samples/SA1_timit_train_DR8_MKDD0.WAV +0 -0
  12. samples/SA1_timit_train_DR8_MMPM0.WAV +0 -0
  13. samples/SA1_timit_train_DR8_MRLK0.WAV +0 -0
  14. samples/SA2_timit_train_DR7_MTLC0.WAV +0 -0
  15. samples/SA2_timit_train_DR7_MWRP0.WAV +0 -0
  16. samples/SA2_timit_train_DR8_FCLT0.WAV +0 -0
  17. samples/SA2_timit_train_DR8_FJRB0.WAV +0 -0
  18. samples/SA2_timit_train_DR8_FNKL0.WAV +0 -0
  19. samples/SA2_timit_train_DR8_FPLS0.WAV +0 -0
  20. samples/SA2_timit_train_DR8_MCXM0.WAV +0 -0
  21. samples/SA2_timit_train_DR8_MKDD0.WAV +0 -0
  22. samples/SA2_timit_train_DR8_MMPM0.WAV +0 -0
  23. samples/SA2_timit_train_DR8_MRLK0.WAV +0 -0
  24. samples/SI1061_timit_train_DR8_MMPM0.WAV +0 -0
  25. samples/SI1313_timit_train_DR7_MTLC0.WAV +0 -0
  26. samples/SI1351_timit_train_DR8_MCXM0.WAV +0 -0
  27. samples/SI1443_timit_train_DR7_MWRP0.WAV +0 -0
  28. samples/SI1468_timit_train_DR8_MRLK0.WAV +0 -0
  29. samples/SI1477_timit_train_DR7_MTLC0.WAV +0 -0
  30. samples/SI1522_timit_train_DR8_FNKL0.WAV +0 -0
  31. samples/SI1567_timit_train_DR8_MKDD0.WAV +0 -0
  32. samples/SI1590_timit_train_DR8_FPLS0.WAV +0 -0
  33. samples/SI1691_timit_train_DR8_MMPM0.WAV +0 -0
  34. samples/SI1932_timit_train_DR8_FJRB0.WAV +0 -0
  35. samples/SI1981_timit_train_DR8_MCXM0.WAV +0 -0
  36. samples/SI2073_timit_train_DR7_MWRP0.WAV +0 -0
  37. samples/SI2140_timit_train_DR8_MRLK0.WAV +0 -0
  38. samples/SI2152_timit_train_DR8_FNKL0.WAV +0 -0
  39. samples/SI2197_timit_train_DR8_MKDD0.WAV +0 -0
  40. samples/SI2321_timit_train_DR8_MMPM0.WAV +0 -0
  41. samples/SI721_timit_train_DR8_MCXM0.WAV +0 -0
  42. samples/SI808_timit_train_DR8_FCLT0.WAV +0 -0
  43. samples/SI892_timit_train_DR8_FNKL0.WAV +0 -0
  44. samples/SI937_timit_train_DR8_MKDD0.WAV +0 -0
  45. samples/SI960_timit_train_DR8_FPLS0.WAV +0 -0
  46. samples/SX123_timit_train_DR8_MRLK0.WAV +0 -0
  47. samples/SX132_timit_train_DR8_FJRB0.WAV +0 -0
  48. samples/SX150_timit_train_DR8_FPLS0.WAV +0 -0
  49. samples/SX172_timit_train_DR8_FNKL0.WAV +0 -0
  50. samples/SX178_timit_train_DR8_FCLT0.WAV +0 -0
app.py ADDED
@@ -0,0 +1,379 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import random
2
+ import torch
3
+ import numpy as np
4
+ import math, torchaudio
5
+ import torch.nn as nn
6
+ import torch.nn.functional as F
7
+ import librosa
8
+ import gradio as gr
9
+ import os, glob
10
+ from torchaudio.sox_effects import apply_effects_file
11
+ from pathlib import Path
12
+
13
+ '''
14
+ This is the ECAPA-TDNN model.
15
+ This model is modified and combined based on the following three projects:
16
+ 1. https://github.com/clovaai/voxceleb_trainer/issues/86
17
+ 2. https://github.com/lawlict/ECAPA-TDNN/blob/master/ecapa_tdnn.py
18
+ 3. https://github.com/speechbrain/speechbrain/blob/96077e9a1afff89d3f5ff47cab4bca0202770e4f/speechbrain/lobes/models/ECAPA_TDNN.py
19
+ '''
20
+
21
+
22
+ class SEModule(nn.Module):
23
+ def __init__(self, channels, bottleneck=128):
24
+ super(SEModule, self).__init__()
25
+ self.se = nn.Sequential(
26
+ nn.AdaptiveAvgPool1d(1),
27
+ nn.Conv1d(channels, bottleneck, kernel_size=1, padding=0),
28
+ nn.ReLU(),
29
+ # nn.BatchNorm1d(bottleneck), # I remove this layer
30
+ nn.Conv1d(bottleneck, channels, kernel_size=1, padding=0),
31
+ nn.Sigmoid(),
32
+ )
33
+
34
+ def forward(self, input):
35
+ x = self.se(input)
36
+ return input * x
37
+
38
+
39
+ class Bottle2neck(nn.Module):
40
+
41
+ def __init__(self, inplanes, planes, kernel_size=None, dilation=None, scale=8):
42
+ super(Bottle2neck, self).__init__()
43
+ width = int(math.floor(planes / scale))
44
+ self.conv1 = nn.Conv1d(inplanes, width * scale, kernel_size=1)
45
+ self.bn1 = nn.BatchNorm1d(width * scale)
46
+ self.nums = scale - 1
47
+ convs = []
48
+ bns = []
49
+ num_pad = math.floor(kernel_size / 2) * dilation
50
+ for i in range(self.nums):
51
+ convs.append(nn.Conv1d(width, width, kernel_size=kernel_size, dilation=dilation, padding=num_pad))
52
+ bns.append(nn.BatchNorm1d(width))
53
+ self.convs = nn.ModuleList(convs)
54
+ self.bns = nn.ModuleList(bns)
55
+ self.conv3 = nn.Conv1d(width * scale, planes, kernel_size=1)
56
+ self.bn3 = nn.BatchNorm1d(planes)
57
+ self.relu = nn.ReLU()
58
+ self.width = width
59
+ self.se = SEModule(planes)
60
+
61
+ def forward(self, x):
62
+ residual = x
63
+ out = self.conv1(x)
64
+ out = self.relu(out)
65
+ out = self.bn1(out)
66
+
67
+ spx = torch.split(out, self.width, 1)
68
+ for i in range(self.nums):
69
+ if i == 0:
70
+ sp = spx[i]
71
+ else:
72
+ sp = sp + spx[i]
73
+ sp = self.convs[i](sp)
74
+ sp = self.relu(sp)
75
+ sp = self.bns[i](sp)
76
+ if i == 0:
77
+ out = sp
78
+ else:
79
+ out = torch.cat((out, sp), 1)
80
+ out = torch.cat((out, spx[self.nums]), 1)
81
+
82
+ out = self.conv3(out)
83
+ out = self.relu(out)
84
+ out = self.bn3(out)
85
+
86
+ out = self.se(out)
87
+ out += residual
88
+ return out
89
+
90
+
91
+ class SpeechEmbedder(nn.Module):
92
+
93
+ def __init__(self, C=1024):
94
+ super(SpeechEmbedder, self).__init__()
95
+
96
+ self.conv1 = nn.Conv1d(40, C, kernel_size=5, stride=1, padding=2)
97
+ self.relu = nn.ReLU()
98
+ self.bn1 = nn.BatchNorm1d(C)
99
+ self.layer1 = Bottle2neck(C, C, kernel_size=3, dilation=2, scale=8)
100
+ self.layer2 = Bottle2neck(C, C, kernel_size=3, dilation=3, scale=8)
101
+ self.layer3 = Bottle2neck(C, C, kernel_size=3, dilation=4, scale=8)
102
+ # I fixed the shape of the output from MFA layer, that is close to the setting from ECAPA paper.
103
+ self.layer4 = nn.Conv1d(3 * C, 1536, kernel_size=1)
104
+ self.attention = nn.Sequential(
105
+ nn.Conv1d(4608, 256, kernel_size=1),
106
+ nn.ReLU(),
107
+ nn.BatchNorm1d(256),
108
+ nn.Tanh(), # I add this layer
109
+ nn.Conv1d(256, 1536, kernel_size=1),
110
+ nn.Softmax(dim=2),
111
+ )
112
+ self.bn5 = nn.BatchNorm1d(3072)
113
+ self.fc6 = nn.Linear(3072, 192)
114
+ self.bn6 = nn.BatchNorm1d(192)
115
+
116
+ def forward(self, x, aug=False):
117
+ #x = x.permute(0, 2, 1)
118
+ x = self.conv1(x)
119
+ x = self.relu(x)
120
+ x = self.bn1(x)
121
+
122
+ x1 = self.layer1(x)
123
+ x2 = self.layer2(x + x1)
124
+ x3 = self.layer3(x + x1 + x2)
125
+
126
+ x = self.layer4(torch.cat((x1, x2, x3), dim=1))
127
+ x = self.relu(x)
128
+
129
+ t = x.size()[-1]
130
+
131
+ global_x = torch.cat((x, torch.mean(x, dim=2, keepdim=True).repeat(1, 1, t),
132
+ torch.sqrt(torch.var(x, dim=2, keepdim=True).clamp(min=1e-4)).repeat(1, 1, t)), dim=1)
133
+
134
+ w = self.attention(global_x)
135
+
136
+ mu = torch.sum(x * w, dim=2)
137
+ sg = torch.sqrt((torch.sum((x ** 2) * w, dim=2) - mu ** 2).clamp(min=1e-4))
138
+
139
+ x = torch.cat((mu, sg), 1)
140
+ x = self.bn5(x)
141
+ x = self.fc6(x)
142
+ x = self.bn6(x)
143
+
144
+ return x
145
+
146
+
147
+ def feature_extractor(input_file):
148
+ """ Function for resampling to ensure that the speech input is sampled at 16KHz.
149
+ """
150
+ # read the file
151
+ speech, sample_rate = librosa.load(input_file)
152
+ sr = 16000
153
+ #speech, sample_rate = librosa.core.load(input_file, sr)
154
+
155
+ # make it 1-D
156
+ if len(speech.shape) > 1:
157
+ speech = speech[:, 0] + speech[:, 1]
158
+
159
+ # Resampling at 16KHz
160
+ if sample_rate != 16000:
161
+ speech = librosa.resample(speech, sample_rate, 16000)
162
+
163
+ intervals = librosa.effects.split(speech, top_db=30) # voice activity detection
164
+
165
+ utterances_spec = []
166
+ tisv_frame = 180 # Max number of time steps in input after preprocess
167
+ hop = 0.01
168
+ window = 0.025
169
+ sr = 16000
170
+ nfft = 512 # For mel spectrogram preprocess
171
+ nmels = 40 # Number of mel energies
172
+ utter_min_len = (tisv_frame * hop + window) * sr # lower bound of utterance length
173
+ for interval in intervals:
174
+ if (interval[1] - interval[0]) > utter_min_len: # If partial utterance is sufficient long,
175
+ utter_part = speech[interval[0]:interval[1]] # save first and last 180 frames of spectrogram.
176
+ S = librosa.core.stft(y=utter_part, n_fft=nfft, win_length = int(window * sr), hop_length = int(
177
+ hop * sr))
178
+ S = np.abs(S) ** 2
179
+ mel_basis = librosa.filters.mel(sr=sr, n_fft=nfft, n_mels=nmels)
180
+ S = np.log10(np.dot(mel_basis, S) + 1e-6) # log mel spectrogram of utterances
181
+ a = S[:, :tisv_frame] # first 180 frames of partial utterance
182
+ b = S[:, -tisv_frame:] # last 180 frames of partial utterance
183
+ utterances_spec = np.concatenate((a, b), axis=1)
184
+
185
+ utterances_spec = np.array(utterances_spec)
186
+
187
+ return utterances_spec
188
+
189
+ def similarity_fn(path1, path2):
190
+ # path1 = 'path of the first wav file'
191
+ # path2 = 'path of the second wav file'
192
+ if not (path1 and path2):
193
+ return 'ERROR: Please record audio for *both* speakers!'
194
+
195
+ # Applying the effects to both the audio input files
196
+ #wav1, _ = apply_effects_file(path1, EFFECTS)
197
+ #wav2, _ = apply_effects_file(path2, EFFECTS)
198
+
199
+ # Extracting features
200
+ input1 = feature_extractor(path1)
201
+ input1 = torch.from_numpy(input1).float()
202
+ input1 = torch.unsqueeze(input1, 0)
203
+
204
+ spk_name1 = path1.split('/')[-1].split('_')[-1].split('.')[0]
205
+ #spk_name1 = os.path.basename(path1)
206
+
207
+ print(spk_name1)
208
+
209
+ emb1 = model(input1)
210
+ emb1 = torch.nn.functional.normalize(emb1, dim=-1).to(device)
211
+
212
+ target_count, nontarget_count, correct_detection, fr, fa = 0, 0, 0, 0, 0
213
+ #audio_list = glob.glob(os.path.dirname(path2))
214
+ path = os.getcwd()
215
+ #audio_list = glob.glob(os.path.join(path, path2)+'/*.WAV')
216
+ a = os.path.join(path, path2)
217
+ audio_list = glob.glob(os.path.join(path, path2))
218
+
219
+ for i in range(len(audio_list)):
220
+ #print(audio_list[i])
221
+ #print(i)
222
+ input2 = feature_extractor(audio_list[i])
223
+ input2 = torch.from_numpy(input2).float()
224
+ input2 = torch.unsqueeze(input2, 0)
225
+ spk_name2 = audio_list[i].split('/')[-1].split('_')[-1].split('.')[0]
226
+ #spk_name2 = os.path.basename(audio_list[i])
227
+
228
+ emb2 = model(input2)
229
+ emb2 = torch.nn.functional.normalize(emb2, dim=-1).to(device)
230
+
231
+ similarity = F.cosine_similarity(emb1, emb2).detach().numpy()[0]
232
+ print(spk_name1)
233
+ print(spk_name2)
234
+
235
+ if spk_name1 == spk_name2:
236
+ target_count += 1
237
+ if similarity >= THRESHOLD:
238
+ correct_detection += 1
239
+ #output = OUTPUT_OK.format(similarity * 100)
240
+ else:
241
+ fr += 1
242
+ #output = f"Similarity score (same speaker) is {similarity:.0%} and below the threshold. This is False Rejection!"
243
+ else:
244
+ nontarget_count += 1
245
+ if similarity >= THRESHOLD:
246
+ fa += 1
247
+ #output = f"Similarity (different speakers) score is {similarity:.0%} and above the threshold. Audio doesn't belong to the same person, but falsely accepted"
248
+ else:
249
+ output = OUTPUT_FAIL.format(similarity * 100)
250
+
251
+ print(target_count)
252
+ print(nontarget_count)
253
+ print(fa)
254
+ print(correct_detection)
255
+ correct_detection1 = (correct_detection / target_count) * 100
256
+
257
+ FAR = (fa/nontarget_count) * 100
258
+ FRR = (fr/target_count) * 100
259
+
260
+ output = OUTPUT_METRIC.format(correct_detection1, FAR, FRR)
261
+
262
+ return output
263
+ #return f"Performance metrics on total 108 test files: Correct speaker detection rate is {correct_detection1:.}, FAR is {FAR:.0%}, FRR is {FRR:.0%}"
264
+
265
+
266
+ if __name__ == "__main__":
267
+ random.seed(1234)
268
+ torch.manual_seed(1234)
269
+ np.random.seed(1234)
270
+
271
+ device = "cuda" if torch.cuda.is_available() else "cpu"
272
+
273
+ STYLE = """
274
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" integrity="sha256-YvdLHPgkqJ8DVUxjjnGVlMMJtNimJ6dYkowFFvp4kKs=" crossorigin="anonymous">
275
+ """
276
+ OUTPUT_OK = (
277
+ STYLE
278
+ + """
279
+ <div class="container">
280
+ <div class="row"><h1 style="text-align: center">The speakers are</h1></div>
281
+ <div class="row"><h1 class="display-1 text-success" style="text-align: center">{:.1f}%</h1></div>
282
+ <div class="row"><h1 style="text-align: center">similar</h1></div>
283
+ <div class="row"><h1 class="text-success" style="text-align: center">Welcome, human!</h1></div>
284
+ <div class="row"><small style="text-align: center">(You must get at least 85% to be considered the same person)</small><div class="row">
285
+ </div>
286
+ """
287
+ )
288
+ OUTPUT_METRIC = (
289
+ STYLE
290
+ + """
291
+ <div class="container">
292
+ <div class="row"><h1 style="text-align: center">Performance metrics:</h1></div>
293
+ <div class="row"><h1 class="display-1 text-success" style="text-align: center"> Accuracy is {:.1f}%,</h1></div>
294
+ <div class="row"><h1 style="text-align: center">FAR is {:.1f}%,</h1></div>
295
+ <div class="row"><h1 class="text-success" style="text-align: center">FRR is {:.1f}%</h1></div>
296
+ </div>
297
+ """
298
+ )
299
+ OUTPUT_FAIL = (
300
+ STYLE
301
+ + """
302
+ <div class="container">
303
+ <div class="row"><h1 style="text-align: center">The speakers are</h1></div>
304
+ <div class="row"><h1 class="display-1 text-danger" style="text-align: center">{:.1f}%</h1></div>
305
+ <div class="row"><h1 style="text-align: center">similar</h1></div>
306
+ <div class="row"><h1 class="text-danger" style="text-align: center">You shall not pass!</h1></div>
307
+ <div class="row"><small style="text-align: center">(You must get at least 85% to be considered the same person)</small><div class="row">
308
+ </div>
309
+ """
310
+ )
311
+
312
+ EFFECTS = [
313
+ ['remix', '-'], # to merge all the channels
314
+ ["channels", "1"], # channel-->mono
315
+ ["rate", "16000"], # resample to 16000 Hz
316
+ ["gain", "-1.0"], # Attenuation -1 dB
317
+ ["silence", "1", "0.1", "0.1%", "-1", "0.1", "0.1%"],
318
+ # ['pad', '0', '1.5'], # for adding 1.5 seconds at the end
319
+ ['trim', '0', '10'], # get the first 10 seconds
320
+ ]
321
+
322
+ # Setting the threshold value
323
+ THRESHOLD = 0.85
324
+
325
+ model = SpeechEmbedder().to(device)
326
+ e = 500
327
+ batch_id = 112
328
+ save_model_filename = "final_epoch_" + str(e) + "_batch_id_" + str(batch_id + 1) + ".model"
329
+
330
+ # Load the model
331
+ # -------------------------
332
+ model.load_state_dict(torch.load(save_model_filename))
333
+ model.eval()
334
+
335
+ inputs = [
336
+ #gr.inputs.Audio(source="microphone", type="filepath", optional=True, label="Speaker #1"),
337
+ #gr.inputs.Audio(source="microphone", type="filepath", optional=True, label="Speaker #2"),
338
+ "text",
339
+ "text",
340
+ ]
341
+
342
+ path1 = 'samples/SA1_timit_train_DR7_MWRP0.WAV'
343
+ path2 = 'samples/*.WAV'
344
+ similarity_fn(path1, path2)
345
+
346
+ #output = gr.outputs.Textbox(label="Output Text")
347
+ output = gr.outputs.HTML(label="")
348
+ description = ("This app evaluates whether the given audio speech inputs belong to the same individual based on Cosine Similarity score.")
349
+
350
+ path = os.getcwd()
351
+ print(path)
352
+
353
+ examples = [
354
+ #["samples/SA1_timit_train_DR7_MTLC0.WAV", "samples/SA1_timit_train_DR7_MWRP0.WAV"],
355
+ ["samples/SA1_timit_train_DR7_MTLC0.WAV", "samples/*.WAV"],
356
+ ["samples/SA1_timit_train_DR7_MWRP0.WAV", "samples/*.WAV"],
357
+ #["samples/SA1_timit_train_DR8_FBCG1.WAV", "samples/*.WAV"],
358
+ # ["samples/SA1_timit_train_DR8_FCLT0.WAV", "samples/"],
359
+ # ["samples/SA1_timit_train_DR8_FJRB0.WAV", "samples/"],
360
+ # ["samples/SA1_timit_train_DR8_FNKL0.WAV", "samples/"],
361
+ # ["samples/SA1_timit_train_DR8_MBCG0.WAV", "samples/"],
362
+ # ["samples/SA1_timit_train_DR8_MCXM0.WAV", "samples/"],
363
+ # ["samples/SA1_timit_train_DR8_MKDD0.WAV", "samples/"],
364
+ # ["samples/SA1_timit_train_DR8_MMPM0.WAV", "samples/"],
365
+ ]
366
+
367
+ interface = gr.Interface(
368
+ fn=similarity_fn,
369
+ inputs=inputs,
370
+ outputs=output,
371
+ title="Voice Authentication with ECAPA-TDNN",
372
+ description=description,
373
+ layout="horizontal",
374
+ theme="grass",
375
+ allow_flagging=False,
376
+ live=False,
377
+ examples=examples,
378
+ )
379
+ interface.launch(enable_queue=True)
final_epoch_500_batch_id_113.model ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1d761f49aa4682c2a9c2170a52e23b9cd0c07341e33c2a44d6588b20b0acba72
3
+ size 61136499
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ torch==1.11.0
2
+ torchaudio==0.11.0
3
+ numpy==1.22.4
4
+ tqdm==4.64.0
5
+ librosa==0.9.1
samples/SA1_timit_train_DR7_MTLC0.WAV ADDED
Binary file (103 kB). View file
 
samples/SA1_timit_train_DR7_MWRP0.WAV ADDED
Binary file (99.1 kB). View file
 
samples/SA1_timit_train_DR8_FCLT0.WAV ADDED
Binary file (107 kB). View file
 
samples/SA1_timit_train_DR8_FJRB0.WAV ADDED
Binary file (93.6 kB). View file
 
samples/SA1_timit_train_DR8_FNKL0.WAV ADDED
Binary file (100 kB). View file
 
samples/SA1_timit_train_DR8_FPLS0.WAV ADDED
Binary file (95 kB). View file
 
samples/SA1_timit_train_DR8_MCXM0.WAV ADDED
Binary file (99.5 kB). View file
 
samples/SA1_timit_train_DR8_MKDD0.WAV ADDED
Binary file (117 kB). View file
 
samples/SA1_timit_train_DR8_MMPM0.WAV ADDED
Binary file (110 kB). View file
 
samples/SA1_timit_train_DR8_MRLK0.WAV ADDED
Binary file (89.7 kB). View file
 
samples/SA2_timit_train_DR7_MTLC0.WAV ADDED
Binary file (83.8 kB). View file
 
samples/SA2_timit_train_DR7_MWRP0.WAV ADDED
Binary file (95.4 kB). View file
 
samples/SA2_timit_train_DR8_FCLT0.WAV ADDED
Binary file (91.8 kB). View file
 
samples/SA2_timit_train_DR8_FJRB0.WAV ADDED
Binary file (79.9 kB). View file
 
samples/SA2_timit_train_DR8_FNKL0.WAV ADDED
Binary file (86 kB). View file
 
samples/SA2_timit_train_DR8_FPLS0.WAV ADDED
Binary file (81.3 kB). View file
 
samples/SA2_timit_train_DR8_MCXM0.WAV ADDED
Binary file (109 kB). View file
 
samples/SA2_timit_train_DR8_MKDD0.WAV ADDED
Binary file (97.7 kB). View file
 
samples/SA2_timit_train_DR8_MMPM0.WAV ADDED
Binary file (87.7 kB). View file
 
samples/SA2_timit_train_DR8_MRLK0.WAV ADDED
Binary file (90.1 kB). View file
 
samples/SI1061_timit_train_DR8_MMPM0.WAV ADDED
Binary file (84.4 kB). View file
 
samples/SI1313_timit_train_DR7_MTLC0.WAV ADDED
Binary file (136 kB). View file
 
samples/SI1351_timit_train_DR8_MCXM0.WAV ADDED
Binary file (90.3 kB). View file
 
samples/SI1443_timit_train_DR7_MWRP0.WAV ADDED
Binary file (137 kB). View file
 
samples/SI1468_timit_train_DR8_MRLK0.WAV ADDED
Binary file (148 kB). View file
 
samples/SI1477_timit_train_DR7_MTLC0.WAV ADDED
Binary file (151 kB). View file
 
samples/SI1522_timit_train_DR8_FNKL0.WAV ADDED
Binary file (82.5 kB). View file
 
samples/SI1567_timit_train_DR8_MKDD0.WAV ADDED
Binary file (135 kB). View file
 
samples/SI1590_timit_train_DR8_FPLS0.WAV ADDED
Binary file (77.8 kB). View file
 
samples/SI1691_timit_train_DR8_MMPM0.WAV ADDED
Binary file (93.6 kB). View file
 
samples/SI1932_timit_train_DR8_FJRB0.WAV ADDED
Binary file (76.4 kB). View file
 
samples/SI1981_timit_train_DR8_MCXM0.WAV ADDED
Binary file (127 kB). View file
 
samples/SI2073_timit_train_DR7_MWRP0.WAV ADDED
Binary file (125 kB). View file
 
samples/SI2140_timit_train_DR8_MRLK0.WAV ADDED
Binary file (126 kB). View file
 
samples/SI2152_timit_train_DR8_FNKL0.WAV ADDED
Binary file (83.2 kB). View file
 
samples/SI2197_timit_train_DR8_MKDD0.WAV ADDED
Binary file (144 kB). View file
 
samples/SI2321_timit_train_DR8_MMPM0.WAV ADDED
Binary file (82.3 kB). View file
 
samples/SI721_timit_train_DR8_MCXM0.WAV ADDED
Binary file (71.1 kB). View file
 
samples/SI808_timit_train_DR8_FCLT0.WAV ADDED
Binary file (143 kB). View file
 
samples/SI892_timit_train_DR8_FNKL0.WAV ADDED
Binary file (151 kB). View file
 
samples/SI937_timit_train_DR8_MKDD0.WAV ADDED
Binary file (134 kB). View file
 
samples/SI960_timit_train_DR8_FPLS0.WAV ADDED
Binary file (148 kB). View file
 
samples/SX123_timit_train_DR8_MRLK0.WAV ADDED
Binary file (105 kB). View file
 
samples/SX132_timit_train_DR8_FJRB0.WAV ADDED
Binary file (80.3 kB). View file
 
samples/SX150_timit_train_DR8_FPLS0.WAV ADDED
Binary file (67.4 kB). View file
 
samples/SX172_timit_train_DR8_FNKL0.WAV ADDED
Binary file (105 kB). View file
 
samples/SX178_timit_train_DR8_FCLT0.WAV ADDED
Binary file (106 kB). View file