Spaces:
Runtime error
Runtime error
allthingssecurity
commited on
Commit
•
64db264
1
Parent(s):
7ad9a78
test
Browse files- .gitattributes +9 -0
- Configs/config.yml +54 -0
- Data/train_list.txt +2725 -0
- Data/val_list.txt +303 -0
- Demo/.gitattributes +1 -0
- Demo/VCTK-corpus/.gitattributes +3 -0
- Demo/VCTK-corpus/p228/p228_023.wav +3 -0
- Demo/VCTK-corpus/p230/p230_023.wav +3 -0
- Demo/VCTK-corpus/p233/p233_023.wav +3 -0
- Demo/VCTK-corpus/p236/p236_023.wav +3 -0
- Demo/VCTK-corpus/p243/p243_023.wav +3 -0
- Demo/VCTK-corpus/p244/p244_023.wav +3 -0
- Demo/VCTK-corpus/p254/p254_023.wav +3 -0
- Demo/VCTK-corpus/p258/p258_023.wav +3 -0
- Demo/VCTK-corpus/p259/p259_023.wav +3 -0
- Demo/VCTK-corpus/p273/p273_023.wav +3 -0
- Demo/inference.ipynb +471 -0
- README.md +77 -5
- Utils/ASR/config.yml +28 -0
- app.py +3 -3
- convert_parallel_wavegan_weights_to_paddle.ipynb +177 -0
- convert_starganv2_vc_weights_to_paddle.ipynb +236 -0
- prepare_data.ipynb +179 -0
- starganv2vc_paddle/LICENSE +21 -0
- starganv2vc_paddle/Utils/ASR/__init__.py +1 -0
- starganv2vc_paddle/Utils/ASR/layers.py +359 -0
- starganv2vc_paddle/Utils/ASR/models.py +187 -0
- starganv2vc_paddle/Utils/JDC/__init__.py +1 -0
- starganv2vc_paddle/Utils/JDC/model.py +174 -0
- starganv2vc_paddle/Utils/__init__.py +1 -0
- starganv2vc_paddle/fbank_matrix.pd +0 -0
- starganv2vc_paddle/losses.py +215 -0
- starganv2vc_paddle/meldataset.py +155 -0
- starganv2vc_paddle/models.py +391 -0
- starganv2vc_paddle/optimizers.py +80 -0
- starganv2vc_paddle/trainer.py +276 -0
- starganv2vc_paddle/transforms.py +120 -0
- test_arch.py +65 -0
- train.py +149 -0
.gitattributes
CHANGED
@@ -29,3 +29,12 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
29 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
30 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
31 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
30 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
31 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
32 |
+
Demo/VCTK-corpus/p244/p244_023.wav filter=lfs diff=lfs merge=lfs -text
|
33 |
+
Demo/VCTK-corpus/p258/p258_023.wav filter=lfs diff=lfs merge=lfs -text
|
34 |
+
Demo/VCTK-corpus/p259/p259_023.wav filter=lfs diff=lfs merge=lfs -text
|
35 |
+
Demo/VCTK-corpus/p273/p273_023.wav filter=lfs diff=lfs merge=lfs -text
|
36 |
+
Demo/VCTK-corpus/p230/p230_023.wav filter=lfs diff=lfs merge=lfs -text
|
37 |
+
Demo/VCTK-corpus/p233/p233_023.wav filter=lfs diff=lfs merge=lfs -text
|
38 |
+
Demo/VCTK-corpus/p236/p236_023.wav filter=lfs diff=lfs merge=lfs -text
|
39 |
+
Demo/VCTK-corpus/p243/p243_023.wav filter=lfs diff=lfs merge=lfs -text
|
40 |
+
Demo/VCTK-corpus/p228/p228_023.wav filter=lfs diff=lfs merge=lfs -text
|
Configs/config.yml
ADDED
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
log_dir: "Models/VCTK20"
|
2 |
+
save_freq: 2
|
3 |
+
epochs: 150
|
4 |
+
batch_size: 5
|
5 |
+
pretrained_model: ""
|
6 |
+
load_only_params: false
|
7 |
+
fp16_run: true
|
8 |
+
|
9 |
+
train_data: "Data/train_list.txt"
|
10 |
+
val_data: "Data/val_list.txt"
|
11 |
+
|
12 |
+
F0_path: "Utils/JDC/bst.pd"
|
13 |
+
ASR_config: "Utils/ASR/config.yml"
|
14 |
+
ASR_path: "Utils/ASR/epoch_00100.pd"
|
15 |
+
|
16 |
+
preprocess_params:
|
17 |
+
sr: 24000
|
18 |
+
spect_params:
|
19 |
+
n_fft: 2048
|
20 |
+
win_length: 1200
|
21 |
+
hop_length: 300
|
22 |
+
|
23 |
+
model_params:
|
24 |
+
dim_in: 64
|
25 |
+
style_dim: 64
|
26 |
+
latent_dim: 16
|
27 |
+
num_domains: 20
|
28 |
+
max_conv_dim: 512
|
29 |
+
n_repeat: 4
|
30 |
+
w_hpf: 0
|
31 |
+
F0_channel: 256
|
32 |
+
|
33 |
+
loss_params:
|
34 |
+
g_loss:
|
35 |
+
lambda_sty: 1.
|
36 |
+
lambda_cyc: 5.
|
37 |
+
lambda_ds: 1.
|
38 |
+
lambda_norm: 1.
|
39 |
+
lambda_asr: 10.
|
40 |
+
lambda_f0: 5.
|
41 |
+
lambda_f0_sty: 0.1
|
42 |
+
lambda_adv: 2.
|
43 |
+
lambda_adv_cls: 0.5
|
44 |
+
norm_bias: 0.5
|
45 |
+
d_loss:
|
46 |
+
lambda_reg: 1.
|
47 |
+
lambda_adv_cls: 0.1
|
48 |
+
lambda_con_reg: 10.
|
49 |
+
|
50 |
+
adv_cls_epoch: 50
|
51 |
+
con_reg_epoch: 30
|
52 |
+
|
53 |
+
optimizer_params:
|
54 |
+
lr: 0.0001
|
Data/train_list.txt
ADDED
@@ -0,0 +1,2725 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
./Data/p225/22.wav|0
|
2 |
+
./Data/p239/163.wav|7
|
3 |
+
./Data/p227/144.wav|11
|
4 |
+
./Data/p258/67.wav|16
|
5 |
+
./Data/p259/74.wav|17
|
6 |
+
./Data/p230/103.wav|3
|
7 |
+
./Data/p225/7.wav|0
|
8 |
+
./Data/p226/67.wav|10
|
9 |
+
./Data/p228/27.wav|1
|
10 |
+
./Data/p243/23.wav|13
|
11 |
+
./Data/p228/3.wav|1
|
12 |
+
./Data/p244/61.wav|9
|
13 |
+
./Data/p230/178.wav|3
|
14 |
+
./Data/p240/120.wav|8
|
15 |
+
./Data/p228/154.wav|1
|
16 |
+
./Data/p230/146.wav|3
|
17 |
+
./Data/p240/149.wav|8
|
18 |
+
./Data/p254/56.wav|14
|
19 |
+
./Data/p240/81.wav|8
|
20 |
+
./Data/p226/27.wav|10
|
21 |
+
./Data/p256/59.wav|15
|
22 |
+
./Data/p231/74.wav|4
|
23 |
+
./Data/p231/9.wav|4
|
24 |
+
./Data/p240/1.wav|8
|
25 |
+
./Data/p236/135.wav|6
|
26 |
+
./Data/p232/85.wav|12
|
27 |
+
./Data/p230/69.wav|3
|
28 |
+
./Data/p256/35.wav|15
|
29 |
+
./Data/p239/6.wav|7
|
30 |
+
./Data/p254/70.wav|14
|
31 |
+
./Data/p244/135.wav|9
|
32 |
+
./Data/p254/114.wav|14
|
33 |
+
./Data/p236/117.wav|6
|
34 |
+
./Data/p225/78.wav|0
|
35 |
+
./Data/p236/66.wav|6
|
36 |
+
./Data/p228/155.wav|1
|
37 |
+
./Data/p239/83.wav|7
|
38 |
+
./Data/p240/22.wav|8
|
39 |
+
./Data/p225/2.wav|0
|
40 |
+
./Data/p230/75.wav|3
|
41 |
+
./Data/p239/17.wav|7
|
42 |
+
./Data/p239/147.wav|7
|
43 |
+
./Data/p273/125.wav|19
|
44 |
+
./Data/p270/17.wav|18
|
45 |
+
./Data/p233/74.wav|5
|
46 |
+
./Data/p233/112.wav|5
|
47 |
+
./Data/p228/1.wav|1
|
48 |
+
./Data/p258/125.wav|16
|
49 |
+
./Data/p231/56.wav|4
|
50 |
+
./Data/p227/101.wav|11
|
51 |
+
./Data/p232/108.wav|12
|
52 |
+
./Data/p239/82.wav|7
|
53 |
+
./Data/p270/160.wav|18
|
54 |
+
./Data/p227/58.wav|11
|
55 |
+
./Data/p233/111.wav|5
|
56 |
+
./Data/p259/146.wav|17
|
57 |
+
./Data/p230/77.wav|3
|
58 |
+
./Data/p256/104.wav|15
|
59 |
+
./Data/p228/140.wav|1
|
60 |
+
./Data/p231/143.wav|4
|
61 |
+
./Data/p270/20.wav|18
|
62 |
+
./Data/p225/62.wav|0
|
63 |
+
./Data/p229/11.wav|2
|
64 |
+
./Data/p259/66.wav|17
|
65 |
+
./Data/p239/53.wav|7
|
66 |
+
./Data/p239/23.wav|7
|
67 |
+
./Data/p240/115.wav|8
|
68 |
+
./Data/p233/41.wav|5
|
69 |
+
./Data/p270/61.wav|18
|
70 |
+
./Data/p232/50.wav|12
|
71 |
+
./Data/p239/56.wav|7
|
72 |
+
./Data/p244/117.wav|9
|
73 |
+
./Data/p233/6.wav|5
|
74 |
+
./Data/p227/31.wav|11
|
75 |
+
./Data/p231/134.wav|4
|
76 |
+
./Data/p243/12.wav|13
|
77 |
+
./Data/p226/14.wav|10
|
78 |
+
./Data/p240/45.wav|8
|
79 |
+
./Data/p231/91.wav|4
|
80 |
+
./Data/p259/163.wav|17
|
81 |
+
./Data/p236/41.wav|6
|
82 |
+
./Data/p231/66.wav|4
|
83 |
+
./Data/p233/122.wav|5
|
84 |
+
./Data/p244/8.wav|9
|
85 |
+
./Data/p232/41.wav|12
|
86 |
+
./Data/p232/101.wav|12
|
87 |
+
./Data/p273/70.wav|19
|
88 |
+
./Data/p270/168.wav|18
|
89 |
+
./Data/p226/80.wav|10
|
90 |
+
./Data/p270/178.wav|18
|
91 |
+
./Data/p225/39.wav|0
|
92 |
+
./Data/p258/29.wav|16
|
93 |
+
./Data/p231/46.wav|4
|
94 |
+
./Data/p244/41.wav|9
|
95 |
+
./Data/p227/115.wav|11
|
96 |
+
./Data/p228/14.wav|1
|
97 |
+
./Data/p239/116.wav|7
|
98 |
+
./Data/p259/13.wav|17
|
99 |
+
./Data/p254/51.wav|14
|
100 |
+
./Data/p256/36.wav|15
|
101 |
+
./Data/p254/108.wav|14
|
102 |
+
./Data/p226/46.wav|10
|
103 |
+
./Data/p258/39.wav|16
|
104 |
+
./Data/p273/106.wav|19
|
105 |
+
./Data/p228/104.wav|1
|
106 |
+
./Data/p256/1.wav|15
|
107 |
+
./Data/p258/109.wav|16
|
108 |
+
./Data/p259/123.wav|17
|
109 |
+
./Data/p258/99.wav|16
|
110 |
+
./Data/p256/61.wav|15
|
111 |
+
./Data/p231/17.wav|4
|
112 |
+
./Data/p227/74.wav|11
|
113 |
+
./Data/p256/21.wav|15
|
114 |
+
./Data/p226/1.wav|10
|
115 |
+
./Data/p231/129.wav|4
|
116 |
+
./Data/p231/79.wav|4
|
117 |
+
./Data/p226/74.wav|10
|
118 |
+
./Data/p233/69.wav|5
|
119 |
+
./Data/p227/44.wav|11
|
120 |
+
./Data/p239/141.wav|7
|
121 |
+
./Data/p228/28.wav|1
|
122 |
+
./Data/p239/101.wav|7
|
123 |
+
./Data/p258/106.wav|16
|
124 |
+
./Data/p236/49.wav|6
|
125 |
+
./Data/p230/46.wav|3
|
126 |
+
./Data/p244/118.wav|9
|
127 |
+
./Data/p227/25.wav|11
|
128 |
+
./Data/p243/25.wav|13
|
129 |
+
./Data/p270/96.wav|18
|
130 |
+
./Data/p228/130.wav|1
|
131 |
+
./Data/p230/62.wav|3
|
132 |
+
./Data/p227/114.wav|11
|
133 |
+
./Data/p228/116.wav|1
|
134 |
+
./Data/p233/40.wav|5
|
135 |
+
./Data/p230/147.wav|3
|
136 |
+
./Data/p240/71.wav|8
|
137 |
+
./Data/p233/29.wav|5
|
138 |
+
./Data/p230/13.wav|3
|
139 |
+
./Data/p239/63.wav|7
|
140 |
+
./Data/p228/19.wav|1
|
141 |
+
./Data/p233/63.wav|5
|
142 |
+
./Data/p227/50.wav|11
|
143 |
+
./Data/p270/6.wav|18
|
144 |
+
./Data/p228/106.wav|1
|
145 |
+
./Data/p236/86.wav|6
|
146 |
+
./Data/p240/129.wav|8
|
147 |
+
./Data/p273/21.wav|19
|
148 |
+
./Data/p256/83.wav|15
|
149 |
+
./Data/p240/85.wav|8
|
150 |
+
./Data/p258/43.wav|16
|
151 |
+
./Data/p273/41.wav|19
|
152 |
+
./Data/p270/192.wav|18
|
153 |
+
./Data/p230/134.wav|3
|
154 |
+
./Data/p228/44.wav|1
|
155 |
+
./Data/p231/102.wav|4
|
156 |
+
./Data/p270/73.wav|18
|
157 |
+
./Data/p239/153.wav|7
|
158 |
+
./Data/p270/36.wav|18
|
159 |
+
./Data/p273/145.wav|19
|
160 |
+
./Data/p228/107.wav|1
|
161 |
+
./Data/p244/12.wav|9
|
162 |
+
./Data/p270/181.wav|18
|
163 |
+
./Data/p231/35.wav|4
|
164 |
+
./Data/p233/132.wav|5
|
165 |
+
./Data/p226/19.wav|10
|
166 |
+
./Data/p239/91.wav|7
|
167 |
+
./Data/p225/66.wav|0
|
168 |
+
./Data/p229/40.wav|2
|
169 |
+
./Data/p227/48.wav|11
|
170 |
+
./Data/p225/44.wav|0
|
171 |
+
./Data/p229/108.wav|2
|
172 |
+
./Data/p227/47.wav|11
|
173 |
+
./Data/p270/78.wav|18
|
174 |
+
./Data/p259/77.wav|17
|
175 |
+
./Data/p239/51.wav|7
|
176 |
+
./Data/p230/58.wav|3
|
177 |
+
./Data/p233/81.wav|5
|
178 |
+
./Data/p230/150.wav|3
|
179 |
+
./Data/p227/141.wav|11
|
180 |
+
./Data/p243/121.wav|13
|
181 |
+
./Data/p244/11.wav|9
|
182 |
+
./Data/p270/63.wav|18
|
183 |
+
./Data/p236/81.wav|6
|
184 |
+
./Data/p229/89.wav|2
|
185 |
+
./Data/p231/83.wav|4
|
186 |
+
./Data/p233/33.wav|5
|
187 |
+
./Data/p227/107.wav|11
|
188 |
+
./Data/p228/48.wav|1
|
189 |
+
./Data/p259/44.wav|17
|
190 |
+
./Data/p228/131.wav|1
|
191 |
+
./Data/p227/20.wav|11
|
192 |
+
./Data/p256/98.wav|15
|
193 |
+
./Data/p273/45.wav|19
|
194 |
+
./Data/p239/137.wav|7
|
195 |
+
./Data/p232/93.wav|12
|
196 |
+
./Data/p239/38.wav|7
|
197 |
+
./Data/p243/161.wav|13
|
198 |
+
./Data/p258/3.wav|16
|
199 |
+
./Data/p273/132.wav|19
|
200 |
+
./Data/p230/15.wav|3
|
201 |
+
./Data/p259/155.wav|17
|
202 |
+
./Data/p256/125.wav|15
|
203 |
+
./Data/p256/7.wav|15
|
204 |
+
./Data/p231/58.wav|4
|
205 |
+
./Data/p256/75.wav|15
|
206 |
+
./Data/p236/116.wav|6
|
207 |
+
./Data/p233/10.wav|5
|
208 |
+
./Data/p270/39.wav|18
|
209 |
+
./Data/p254/48.wav|14
|
210 |
+
./Data/p270/121.wav|18
|
211 |
+
./Data/p240/139.wav|8
|
212 |
+
./Data/p240/121.wav|8
|
213 |
+
./Data/p244/13.wav|9
|
214 |
+
./Data/p243/148.wav|13
|
215 |
+
./Data/p240/125.wav|8
|
216 |
+
./Data/p259/14.wav|17
|
217 |
+
./Data/p273/139.wav|19
|
218 |
+
./Data/p233/123.wav|5
|
219 |
+
./Data/p225/34.wav|0
|
220 |
+
./Data/p244/10.wav|9
|
221 |
+
./Data/p258/4.wav|16
|
222 |
+
./Data/p236/111.wav|6
|
223 |
+
./Data/p259/59.wav|17
|
224 |
+
./Data/p258/85.wav|16
|
225 |
+
./Data/p227/73.wav|11
|
226 |
+
./Data/p273/107.wav|19
|
227 |
+
./Data/p231/94.wav|4
|
228 |
+
./Data/p231/34.wav|4
|
229 |
+
./Data/p270/200.wav|18
|
230 |
+
./Data/p273/74.wav|19
|
231 |
+
./Data/p232/45.wav|12
|
232 |
+
./Data/p227/37.wav|11
|
233 |
+
./Data/p256/101.wav|15
|
234 |
+
./Data/p233/64.wav|5
|
235 |
+
./Data/p228/52.wav|1
|
236 |
+
./Data/p254/104.wav|14
|
237 |
+
./Data/p236/103.wav|6
|
238 |
+
./Data/p233/73.wav|5
|
239 |
+
./Data/p243/146.wav|13
|
240 |
+
./Data/p258/60.wav|16
|
241 |
+
./Data/p254/8.wav|14
|
242 |
+
./Data/p226/64.wav|10
|
243 |
+
./Data/p243/63.wav|13
|
244 |
+
./Data/p226/70.wav|10
|
245 |
+
./Data/p233/37.wav|5
|
246 |
+
./Data/p254/78.wav|14
|
247 |
+
./Data/p227/123.wav|11
|
248 |
+
./Data/p240/55.wav|8
|
249 |
+
./Data/p229/126.wav|2
|
250 |
+
./Data/p254/54.wav|14
|
251 |
+
./Data/p243/163.wav|13
|
252 |
+
./Data/p273/79.wav|19
|
253 |
+
./Data/p230/9.wav|3
|
254 |
+
./Data/p270/50.wav|18
|
255 |
+
./Data/p243/64.wav|13
|
256 |
+
./Data/p229/100.wav|2
|
257 |
+
./Data/p240/100.wav|8
|
258 |
+
./Data/p239/139.wav|7
|
259 |
+
./Data/p236/65.wav|6
|
260 |
+
./Data/p243/97.wav|13
|
261 |
+
./Data/p258/37.wav|16
|
262 |
+
./Data/p233/9.wav|5
|
263 |
+
./Data/p243/10.wav|13
|
264 |
+
./Data/p244/53.wav|9
|
265 |
+
./Data/p259/162.wav|17
|
266 |
+
./Data/p236/131.wav|6
|
267 |
+
./Data/p227/134.wav|11
|
268 |
+
./Data/p228/5.wav|1
|
269 |
+
./Data/p273/18.wav|19
|
270 |
+
./Data/p243/115.wav|13
|
271 |
+
./Data/p256/113.wav|15
|
272 |
+
./Data/p243/103.wav|13
|
273 |
+
./Data/p273/133.wav|19
|
274 |
+
./Data/p244/90.wav|9
|
275 |
+
./Data/p258/45.wav|16
|
276 |
+
./Data/p229/16.wav|2
|
277 |
+
./Data/p244/25.wav|9
|
278 |
+
./Data/p225/95.wav|0
|
279 |
+
./Data/p230/18.wav|3
|
280 |
+
./Data/p270/196.wav|18
|
281 |
+
./Data/p229/58.wav|2
|
282 |
+
./Data/p239/125.wav|7
|
283 |
+
./Data/p225/27.wav|0
|
284 |
+
./Data/p239/13.wav|7
|
285 |
+
./Data/p259/121.wav|17
|
286 |
+
./Data/p240/12.wav|8
|
287 |
+
./Data/p270/40.wav|18
|
288 |
+
./Data/p258/17.wav|16
|
289 |
+
./Data/p270/123.wav|18
|
290 |
+
./Data/p258/93.wav|16
|
291 |
+
./Data/p229/43.wav|2
|
292 |
+
./Data/p243/152.wav|13
|
293 |
+
./Data/p236/11.wav|6
|
294 |
+
./Data/p232/38.wav|12
|
295 |
+
./Data/p225/9.wav|0
|
296 |
+
./Data/p270/128.wav|18
|
297 |
+
./Data/p258/22.wav|16
|
298 |
+
./Data/p227/113.wav|11
|
299 |
+
./Data/p228/128.wav|1
|
300 |
+
./Data/p228/56.wav|1
|
301 |
+
./Data/p239/19.wav|7
|
302 |
+
./Data/p273/134.wav|19
|
303 |
+
./Data/p231/144.wav|4
|
304 |
+
./Data/p231/16.wav|4
|
305 |
+
./Data/p259/141.wav|17
|
306 |
+
./Data/p227/9.wav|11
|
307 |
+
./Data/p273/114.wav|19
|
308 |
+
./Data/p225/94.wav|0
|
309 |
+
./Data/p273/42.wav|19
|
310 |
+
./Data/p236/72.wav|6
|
311 |
+
./Data/p240/58.wav|8
|
312 |
+
./Data/p258/78.wav|16
|
313 |
+
./Data/p227/129.wav|11
|
314 |
+
./Data/p254/9.wav|14
|
315 |
+
./Data/p226/43.wav|10
|
316 |
+
./Data/p228/103.wav|1
|
317 |
+
./Data/p232/114.wav|12
|
318 |
+
./Data/p254/80.wav|14
|
319 |
+
./Data/p240/144.wav|8
|
320 |
+
./Data/p227/55.wav|11
|
321 |
+
./Data/p254/2.wav|14
|
322 |
+
./Data/p273/101.wav|19
|
323 |
+
./Data/p243/67.wav|13
|
324 |
+
./Data/p227/94.wav|11
|
325 |
+
./Data/p227/121.wav|11
|
326 |
+
./Data/p259/153.wav|17
|
327 |
+
./Data/p258/40.wav|16
|
328 |
+
./Data/p239/32.wav|7
|
329 |
+
./Data/p270/83.wav|18
|
330 |
+
./Data/p226/103.wav|10
|
331 |
+
./Data/p258/18.wav|16
|
332 |
+
./Data/p243/155.wav|13
|
333 |
+
./Data/p229/117.wav|2
|
334 |
+
./Data/p231/127.wav|4
|
335 |
+
./Data/p256/30.wav|15
|
336 |
+
./Data/p240/90.wav|8
|
337 |
+
./Data/p254/133.wav|14
|
338 |
+
./Data/p240/51.wav|8
|
339 |
+
./Data/p239/105.wav|7
|
340 |
+
./Data/p226/85.wav|10
|
341 |
+
./Data/p254/31.wav|14
|
342 |
+
./Data/p258/57.wav|16
|
343 |
+
./Data/p230/95.wav|3
|
344 |
+
./Data/p226/52.wav|10
|
345 |
+
./Data/p258/79.wav|16
|
346 |
+
./Data/p273/49.wav|19
|
347 |
+
./Data/p259/82.wav|17
|
348 |
+
./Data/p227/126.wav|11
|
349 |
+
./Data/p243/158.wav|13
|
350 |
+
./Data/p273/130.wav|19
|
351 |
+
./Data/p243/7.wav|13
|
352 |
+
./Data/p228/137.wav|1
|
353 |
+
./Data/p233/103.wav|5
|
354 |
+
./Data/p254/37.wav|14
|
355 |
+
./Data/p240/39.wav|8
|
356 |
+
./Data/p225/28.wav|0
|
357 |
+
./Data/p227/139.wav|11
|
358 |
+
./Data/p244/130.wav|9
|
359 |
+
./Data/p243/22.wav|13
|
360 |
+
./Data/p228/69.wav|1
|
361 |
+
./Data/p231/64.wav|4
|
362 |
+
./Data/p233/129.wav|5
|
363 |
+
./Data/p232/68.wav|12
|
364 |
+
./Data/p231/87.wav|4
|
365 |
+
./Data/p240/83.wav|8
|
366 |
+
./Data/p232/55.wav|12
|
367 |
+
./Data/p259/54.wav|17
|
368 |
+
./Data/p270/125.wav|18
|
369 |
+
./Data/p239/169.wav|7
|
370 |
+
./Data/p229/39.wav|2
|
371 |
+
./Data/p273/110.wav|19
|
372 |
+
./Data/p233/93.wav|5
|
373 |
+
./Data/p225/79.wav|0
|
374 |
+
./Data/p230/140.wav|3
|
375 |
+
./Data/p228/36.wav|1
|
376 |
+
./Data/p230/4.wav|3
|
377 |
+
./Data/p259/88.wav|17
|
378 |
+
./Data/p243/86.wav|13
|
379 |
+
./Data/p227/90.wav|11
|
380 |
+
./Data/p254/83.wav|14
|
381 |
+
./Data/p240/150.wav|8
|
382 |
+
./Data/p232/118.wav|12
|
383 |
+
./Data/p270/35.wav|18
|
384 |
+
./Data/p231/126.wav|4
|
385 |
+
./Data/p239/59.wav|7
|
386 |
+
./Data/p243/47.wav|13
|
387 |
+
./Data/p254/105.wav|14
|
388 |
+
./Data/p258/72.wav|16
|
389 |
+
./Data/p228/72.wav|1
|
390 |
+
./Data/p270/136.wav|18
|
391 |
+
./Data/p230/51.wav|3
|
392 |
+
./Data/p227/67.wav|11
|
393 |
+
./Data/p259/151.wav|17
|
394 |
+
./Data/p232/66.wav|12
|
395 |
+
./Data/p254/40.wav|14
|
396 |
+
./Data/p273/12.wav|19
|
397 |
+
./Data/p229/130.wav|2
|
398 |
+
./Data/p270/156.wav|18
|
399 |
+
./Data/p230/177.wav|3
|
400 |
+
./Data/p270/169.wav|18
|
401 |
+
./Data/p258/1.wav|16
|
402 |
+
./Data/p229/103.wav|2
|
403 |
+
./Data/p270/127.wav|18
|
404 |
+
./Data/p226/72.wav|10
|
405 |
+
./Data/p229/99.wav|2
|
406 |
+
./Data/p232/8.wav|12
|
407 |
+
./Data/p236/1.wav|6
|
408 |
+
./Data/p230/85.wav|3
|
409 |
+
./Data/p236/99.wav|6
|
410 |
+
./Data/p231/139.wav|4
|
411 |
+
./Data/p256/67.wav|15
|
412 |
+
./Data/p240/38.wav|8
|
413 |
+
./Data/p233/16.wav|5
|
414 |
+
./Data/p243/13.wav|13
|
415 |
+
./Data/p227/86.wav|11
|
416 |
+
./Data/p233/110.wav|5
|
417 |
+
./Data/p243/77.wav|13
|
418 |
+
./Data/p227/77.wav|11
|
419 |
+
./Data/p230/7.wav|3
|
420 |
+
./Data/p270/175.wav|18
|
421 |
+
./Data/p254/38.wav|14
|
422 |
+
./Data/p227/71.wav|11
|
423 |
+
./Data/p229/104.wav|2
|
424 |
+
./Data/p231/101.wav|4
|
425 |
+
./Data/p229/105.wav|2
|
426 |
+
./Data/p225/49.wav|0
|
427 |
+
./Data/p230/137.wav|3
|
428 |
+
./Data/p226/42.wav|10
|
429 |
+
./Data/p233/92.wav|5
|
430 |
+
./Data/p243/58.wav|13
|
431 |
+
./Data/p239/45.wav|7
|
432 |
+
./Data/p233/135.wav|5
|
433 |
+
./Data/p244/89.wav|9
|
434 |
+
./Data/p243/166.wav|13
|
435 |
+
./Data/p240/59.wav|8
|
436 |
+
./Data/p254/86.wav|14
|
437 |
+
./Data/p243/60.wav|13
|
438 |
+
./Data/p227/19.wav|11
|
439 |
+
./Data/p231/45.wav|4
|
440 |
+
./Data/p227/140.wav|11
|
441 |
+
./Data/p236/129.wav|6
|
442 |
+
./Data/p240/67.wav|8
|
443 |
+
./Data/p227/61.wav|11
|
444 |
+
./Data/p228/77.wav|1
|
445 |
+
./Data/p236/52.wav|6
|
446 |
+
./Data/p258/33.wav|16
|
447 |
+
./Data/p244/104.wav|9
|
448 |
+
./Data/p259/84.wav|17
|
449 |
+
./Data/p236/127.wav|6
|
450 |
+
./Data/p228/150.wav|1
|
451 |
+
./Data/p233/85.wav|5
|
452 |
+
./Data/p270/147.wav|18
|
453 |
+
./Data/p229/83.wav|2
|
454 |
+
./Data/p226/68.wav|10
|
455 |
+
./Data/p229/94.wav|2
|
456 |
+
./Data/p270/46.wav|18
|
457 |
+
./Data/p258/129.wav|16
|
458 |
+
./Data/p270/191.wav|18
|
459 |
+
./Data/p227/106.wav|11
|
460 |
+
./Data/p239/136.wav|7
|
461 |
+
./Data/p239/14.wav|7
|
462 |
+
./Data/p239/71.wav|7
|
463 |
+
./Data/p232/74.wav|12
|
464 |
+
./Data/p225/75.wav|0
|
465 |
+
./Data/p244/143.wav|9
|
466 |
+
./Data/p259/173.wav|17
|
467 |
+
./Data/p243/140.wav|13
|
468 |
+
./Data/p273/48.wav|19
|
469 |
+
./Data/p230/111.wav|3
|
470 |
+
./Data/p240/94.wav|8
|
471 |
+
./Data/p258/20.wav|16
|
472 |
+
./Data/p227/52.wav|11
|
473 |
+
./Data/p244/4.wav|9
|
474 |
+
./Data/p227/109.wav|11
|
475 |
+
./Data/p230/55.wav|3
|
476 |
+
./Data/p232/92.wav|12
|
477 |
+
./Data/p240/75.wav|8
|
478 |
+
./Data/p229/82.wav|2
|
479 |
+
./Data/p270/103.wav|18
|
480 |
+
./Data/p254/87.wav|14
|
481 |
+
./Data/p259/38.wav|17
|
482 |
+
./Data/p240/147.wav|8
|
483 |
+
./Data/p227/111.wav|11
|
484 |
+
./Data/p228/2.wav|1
|
485 |
+
./Data/p230/82.wav|3
|
486 |
+
./Data/p239/33.wav|7
|
487 |
+
./Data/p259/65.wav|17
|
488 |
+
./Data/p273/102.wav|19
|
489 |
+
./Data/p227/116.wav|11
|
490 |
+
./Data/p258/61.wav|16
|
491 |
+
./Data/p228/68.wav|1
|
492 |
+
./Data/p244/116.wav|9
|
493 |
+
./Data/p240/9.wav|8
|
494 |
+
./Data/p273/64.wav|19
|
495 |
+
./Data/p273/9.wav|19
|
496 |
+
./Data/p230/8.wav|3
|
497 |
+
./Data/p230/172.wav|3
|
498 |
+
./Data/p243/32.wav|13
|
499 |
+
./Data/p258/117.wav|16
|
500 |
+
./Data/p236/43.wav|6
|
501 |
+
./Data/p243/29.wav|13
|
502 |
+
./Data/p231/86.wav|4
|
503 |
+
./Data/p231/6.wav|4
|
504 |
+
./Data/p236/166.wav|6
|
505 |
+
./Data/p270/174.wav|18
|
506 |
+
./Data/p229/123.wav|2
|
507 |
+
./Data/p243/132.wav|13
|
508 |
+
./Data/p228/91.wav|1
|
509 |
+
./Data/p273/100.wav|19
|
510 |
+
./Data/p243/61.wav|13
|
511 |
+
./Data/p233/14.wav|5
|
512 |
+
./Data/p256/5.wav|15
|
513 |
+
./Data/p228/135.wav|1
|
514 |
+
./Data/p254/21.wav|14
|
515 |
+
./Data/p230/96.wav|3
|
516 |
+
./Data/p240/142.wav|8
|
517 |
+
./Data/p259/63.wav|17
|
518 |
+
./Data/p243/37.wav|13
|
519 |
+
./Data/p228/136.wav|1
|
520 |
+
./Data/p254/126.wav|14
|
521 |
+
./Data/p225/51.wav|0
|
522 |
+
./Data/p258/9.wav|16
|
523 |
+
./Data/p270/85.wav|18
|
524 |
+
./Data/p228/149.wav|1
|
525 |
+
./Data/p236/152.wav|6
|
526 |
+
./Data/p259/124.wav|17
|
527 |
+
./Data/p244/1.wav|9
|
528 |
+
./Data/p259/104.wav|17
|
529 |
+
./Data/p227/64.wav|11
|
530 |
+
./Data/p230/70.wav|3
|
531 |
+
./Data/p256/122.wav|15
|
532 |
+
./Data/p258/30.wav|16
|
533 |
+
./Data/p244/54.wav|9
|
534 |
+
./Data/p270/198.wav|18
|
535 |
+
./Data/p258/15.wav|16
|
536 |
+
./Data/p254/52.wav|14
|
537 |
+
./Data/p228/85.wav|1
|
538 |
+
./Data/p230/1.wav|3
|
539 |
+
./Data/p230/71.wav|3
|
540 |
+
./Data/p259/147.wav|17
|
541 |
+
./Data/p243/68.wav|13
|
542 |
+
./Data/p226/79.wav|10
|
543 |
+
./Data/p243/123.wav|13
|
544 |
+
./Data/p229/85.wav|2
|
545 |
+
./Data/p270/5.wav|18
|
546 |
+
./Data/p226/12.wav|10
|
547 |
+
./Data/p231/82.wav|4
|
548 |
+
./Data/p230/120.wav|3
|
549 |
+
./Data/p225/31.wav|0
|
550 |
+
./Data/p236/130.wav|6
|
551 |
+
./Data/p239/111.wav|7
|
552 |
+
./Data/p230/60.wav|3
|
553 |
+
./Data/p232/121.wav|12
|
554 |
+
./Data/p259/27.wav|17
|
555 |
+
./Data/p228/65.wav|1
|
556 |
+
./Data/p231/92.wav|4
|
557 |
+
./Data/p236/160.wav|6
|
558 |
+
./Data/p258/145.wav|16
|
559 |
+
./Data/p231/20.wav|4
|
560 |
+
./Data/p226/47.wav|10
|
561 |
+
./Data/p258/110.wav|16
|
562 |
+
./Data/p231/93.wav|4
|
563 |
+
./Data/p270/30.wav|18
|
564 |
+
./Data/p227/97.wav|11
|
565 |
+
./Data/p231/31.wav|4
|
566 |
+
./Data/p273/55.wav|19
|
567 |
+
./Data/p239/12.wav|7
|
568 |
+
./Data/p240/63.wav|8
|
569 |
+
./Data/p254/57.wav|14
|
570 |
+
./Data/p244/35.wav|9
|
571 |
+
./Data/p239/127.wav|7
|
572 |
+
./Data/p226/130.wav|10
|
573 |
+
./Data/p225/83.wav|0
|
574 |
+
./Data/p259/56.wav|17
|
575 |
+
./Data/p273/85.wav|19
|
576 |
+
./Data/p244/129.wav|9
|
577 |
+
./Data/p273/83.wav|19
|
578 |
+
./Data/p270/45.wav|18
|
579 |
+
./Data/p273/23.wav|19
|
580 |
+
./Data/p233/15.wav|5
|
581 |
+
./Data/p256/34.wav|15
|
582 |
+
./Data/p273/38.wav|19
|
583 |
+
./Data/p244/73.wav|9
|
584 |
+
./Data/p243/43.wav|13
|
585 |
+
./Data/p270/26.wav|18
|
586 |
+
./Data/p239/87.wav|7
|
587 |
+
./Data/p233/120.wav|5
|
588 |
+
./Data/p236/14.wav|6
|
589 |
+
./Data/p227/5.wav|11
|
590 |
+
./Data/p258/104.wav|16
|
591 |
+
./Data/p227/45.wav|11
|
592 |
+
./Data/p229/35.wav|2
|
593 |
+
./Data/p273/36.wav|19
|
594 |
+
./Data/p240/82.wav|8
|
595 |
+
./Data/p254/20.wav|14
|
596 |
+
./Data/p232/128.wav|12
|
597 |
+
./Data/p254/47.wav|14
|
598 |
+
./Data/p270/102.wav|18
|
599 |
+
./Data/p230/41.wav|3
|
600 |
+
./Data/p225/23.wav|0
|
601 |
+
./Data/p258/38.wav|16
|
602 |
+
./Data/p233/137.wav|5
|
603 |
+
./Data/p254/94.wav|14
|
604 |
+
./Data/p244/122.wav|9
|
605 |
+
./Data/p229/51.wav|2
|
606 |
+
./Data/p244/96.wav|9
|
607 |
+
./Data/p273/119.wav|19
|
608 |
+
./Data/p227/80.wav|11
|
609 |
+
./Data/p225/1.wav|0
|
610 |
+
./Data/p244/80.wav|9
|
611 |
+
./Data/p233/108.wav|5
|
612 |
+
./Data/p259/119.wav|17
|
613 |
+
./Data/p226/8.wav|10
|
614 |
+
./Data/p228/60.wav|1
|
615 |
+
./Data/p233/71.wav|5
|
616 |
+
./Data/p243/168.wav|13
|
617 |
+
./Data/p226/136.wav|10
|
618 |
+
./Data/p236/110.wav|6
|
619 |
+
./Data/p228/23.wav|1
|
620 |
+
./Data/p244/137.wav|9
|
621 |
+
./Data/p240/33.wav|8
|
622 |
+
./Data/p256/13.wav|15
|
623 |
+
./Data/p243/6.wav|13
|
624 |
+
./Data/p227/30.wav|11
|
625 |
+
./Data/p244/28.wav|9
|
626 |
+
./Data/p228/24.wav|1
|
627 |
+
./Data/p243/147.wav|13
|
628 |
+
./Data/p231/39.wav|4
|
629 |
+
./Data/p254/93.wav|14
|
630 |
+
./Data/p256/29.wav|15
|
631 |
+
./Data/p258/119.wav|16
|
632 |
+
./Data/p240/69.wav|8
|
633 |
+
./Data/p232/102.wav|12
|
634 |
+
./Data/p233/101.wav|5
|
635 |
+
./Data/p270/29.wav|18
|
636 |
+
./Data/p233/47.wav|5
|
637 |
+
./Data/p259/17.wav|17
|
638 |
+
./Data/p228/94.wav|1
|
639 |
+
./Data/p231/21.wav|4
|
640 |
+
./Data/p230/143.wav|3
|
641 |
+
./Data/p270/204.wav|18
|
642 |
+
./Data/p229/71.wav|2
|
643 |
+
./Data/p232/13.wav|12
|
644 |
+
./Data/p227/127.wav|11
|
645 |
+
./Data/p258/105.wav|16
|
646 |
+
./Data/p227/112.wav|11
|
647 |
+
./Data/p270/59.wav|18
|
648 |
+
./Data/p232/47.wav|12
|
649 |
+
./Data/p236/112.wav|6
|
650 |
+
./Data/p273/115.wav|19
|
651 |
+
./Data/p236/20.wav|6
|
652 |
+
./Data/p258/115.wav|16
|
653 |
+
./Data/p256/24.wav|15
|
654 |
+
./Data/p273/76.wav|19
|
655 |
+
./Data/p231/3.wav|4
|
656 |
+
./Data/p225/56.wav|0
|
657 |
+
./Data/p259/150.wav|17
|
658 |
+
./Data/p227/70.wav|11
|
659 |
+
./Data/p230/2.wav|3
|
660 |
+
./Data/p226/22.wav|10
|
661 |
+
./Data/p243/127.wav|13
|
662 |
+
./Data/p258/31.wav|16
|
663 |
+
./Data/p233/89.wav|5
|
664 |
+
./Data/p259/64.wav|17
|
665 |
+
./Data/p259/96.wav|17
|
666 |
+
./Data/p227/57.wav|11
|
667 |
+
./Data/p232/132.wav|12
|
668 |
+
./Data/p236/46.wav|6
|
669 |
+
./Data/p232/70.wav|12
|
670 |
+
./Data/p273/138.wav|19
|
671 |
+
./Data/p244/99.wav|9
|
672 |
+
./Data/p240/18.wav|8
|
673 |
+
./Data/p243/145.wav|13
|
674 |
+
./Data/p230/125.wav|3
|
675 |
+
./Data/p243/49.wav|13
|
676 |
+
./Data/p256/71.wav|15
|
677 |
+
./Data/p258/133.wav|16
|
678 |
+
./Data/p236/50.wav|6
|
679 |
+
./Data/p270/122.wav|18
|
680 |
+
./Data/p230/25.wav|3
|
681 |
+
./Data/p236/124.wav|6
|
682 |
+
./Data/p273/35.wav|19
|
683 |
+
./Data/p258/98.wav|16
|
684 |
+
./Data/p270/51.wav|18
|
685 |
+
./Data/p229/121.wav|2
|
686 |
+
./Data/p270/15.wav|18
|
687 |
+
./Data/p270/193.wav|18
|
688 |
+
./Data/p239/138.wav|7
|
689 |
+
./Data/p273/108.wav|19
|
690 |
+
./Data/p254/139.wav|14
|
691 |
+
./Data/p256/23.wav|15
|
692 |
+
./Data/p243/84.wav|13
|
693 |
+
./Data/p273/93.wav|19
|
694 |
+
./Data/p240/21.wav|8
|
695 |
+
./Data/p240/109.wav|8
|
696 |
+
./Data/p230/76.wav|3
|
697 |
+
./Data/p232/61.wav|12
|
698 |
+
./Data/p233/48.wav|5
|
699 |
+
./Data/p233/133.wav|5
|
700 |
+
./Data/p239/28.wav|7
|
701 |
+
./Data/p230/149.wav|3
|
702 |
+
./Data/p240/46.wav|8
|
703 |
+
./Data/p243/74.wav|13
|
704 |
+
./Data/p256/88.wav|15
|
705 |
+
./Data/p228/61.wav|1
|
706 |
+
./Data/p236/87.wav|6
|
707 |
+
./Data/p236/2.wav|6
|
708 |
+
./Data/p239/159.wav|7
|
709 |
+
./Data/p231/44.wav|4
|
710 |
+
./Data/p236/161.wav|6
|
711 |
+
./Data/p256/19.wav|15
|
712 |
+
./Data/p258/5.wav|16
|
713 |
+
./Data/p243/83.wav|13
|
714 |
+
./Data/p228/30.wav|1
|
715 |
+
./Data/p226/65.wav|10
|
716 |
+
./Data/p258/127.wav|16
|
717 |
+
./Data/p254/60.wav|14
|
718 |
+
./Data/p273/97.wav|19
|
719 |
+
./Data/p228/50.wav|1
|
720 |
+
./Data/p243/135.wav|13
|
721 |
+
./Data/p228/111.wav|1
|
722 |
+
./Data/p229/7.wav|2
|
723 |
+
./Data/p229/3.wav|2
|
724 |
+
./Data/p258/11.wav|16
|
725 |
+
./Data/p258/6.wav|16
|
726 |
+
./Data/p259/148.wav|17
|
727 |
+
./Data/p232/30.wav|12
|
728 |
+
./Data/p256/70.wav|15
|
729 |
+
./Data/p259/160.wav|17
|
730 |
+
./Data/p239/113.wav|7
|
731 |
+
./Data/p229/109.wav|2
|
732 |
+
./Data/p231/29.wav|4
|
733 |
+
./Data/p258/25.wav|16
|
734 |
+
./Data/p239/148.wav|7
|
735 |
+
./Data/p239/78.wav|7
|
736 |
+
./Data/p239/107.wav|7
|
737 |
+
./Data/p239/99.wav|7
|
738 |
+
./Data/p259/32.wav|17
|
739 |
+
./Data/p239/11.wav|7
|
740 |
+
./Data/p226/139.wav|10
|
741 |
+
./Data/p229/88.wav|2
|
742 |
+
./Data/p239/9.wav|7
|
743 |
+
./Data/p229/26.wav|2
|
744 |
+
./Data/p229/128.wav|2
|
745 |
+
./Data/p244/119.wav|9
|
746 |
+
./Data/p259/76.wav|17
|
747 |
+
./Data/p239/129.wav|7
|
748 |
+
./Data/p256/115.wav|15
|
749 |
+
./Data/p230/102.wav|3
|
750 |
+
./Data/p236/42.wav|6
|
751 |
+
./Data/p225/16.wav|0
|
752 |
+
./Data/p240/140.wav|8
|
753 |
+
./Data/p226/36.wav|10
|
754 |
+
./Data/p226/78.wav|10
|
755 |
+
./Data/p225/37.wav|0
|
756 |
+
./Data/p256/51.wav|15
|
757 |
+
./Data/p254/112.wav|14
|
758 |
+
./Data/p236/24.wav|6
|
759 |
+
./Data/p228/164.wav|1
|
760 |
+
./Data/p225/63.wav|0
|
761 |
+
./Data/p259/25.wav|17
|
762 |
+
./Data/p226/133.wav|10
|
763 |
+
./Data/p244/107.wav|9
|
764 |
+
./Data/p270/32.wav|18
|
765 |
+
./Data/p270/56.wav|18
|
766 |
+
./Data/p226/62.wav|10
|
767 |
+
./Data/p228/95.wav|1
|
768 |
+
./Data/p259/112.wav|17
|
769 |
+
./Data/p229/114.wav|2
|
770 |
+
./Data/p273/16.wav|19
|
771 |
+
./Data/p236/60.wav|6
|
772 |
+
./Data/p256/128.wav|15
|
773 |
+
./Data/p273/144.wav|19
|
774 |
+
./Data/p236/142.wav|6
|
775 |
+
./Data/p231/130.wav|4
|
776 |
+
./Data/p258/7.wav|16
|
777 |
+
./Data/p225/96.wav|0
|
778 |
+
./Data/p225/91.wav|0
|
779 |
+
./Data/p232/115.wav|12
|
780 |
+
./Data/p270/157.wav|18
|
781 |
+
./Data/p273/104.wav|19
|
782 |
+
./Data/p233/136.wav|5
|
783 |
+
./Data/p240/78.wav|8
|
784 |
+
./Data/p243/17.wav|13
|
785 |
+
./Data/p240/62.wav|8
|
786 |
+
./Data/p243/48.wav|13
|
787 |
+
./Data/p232/29.wav|12
|
788 |
+
./Data/p244/42.wav|9
|
789 |
+
./Data/p259/93.wav|17
|
790 |
+
./Data/p240/136.wav|8
|
791 |
+
./Data/p226/117.wav|10
|
792 |
+
./Data/p239/131.wav|7
|
793 |
+
./Data/p270/54.wav|18
|
794 |
+
./Data/p228/98.wav|1
|
795 |
+
./Data/p270/166.wav|18
|
796 |
+
./Data/p240/145.wav|8
|
797 |
+
./Data/p270/14.wav|18
|
798 |
+
./Data/p240/43.wav|8
|
799 |
+
./Data/p258/107.wav|16
|
800 |
+
./Data/p270/167.wav|18
|
801 |
+
./Data/p259/62.wav|17
|
802 |
+
./Data/p231/65.wav|4
|
803 |
+
./Data/p240/5.wav|8
|
804 |
+
./Data/p230/50.wav|3
|
805 |
+
./Data/p256/3.wav|15
|
806 |
+
./Data/p231/27.wav|4
|
807 |
+
./Data/p229/27.wav|2
|
808 |
+
./Data/p240/96.wav|8
|
809 |
+
./Data/p225/82.wav|0
|
810 |
+
./Data/p236/125.wav|6
|
811 |
+
./Data/p254/71.wav|14
|
812 |
+
./Data/p244/138.wav|9
|
813 |
+
./Data/p254/89.wav|14
|
814 |
+
./Data/p236/91.wav|6
|
815 |
+
./Data/p244/38.wav|9
|
816 |
+
./Data/p232/116.wav|12
|
817 |
+
./Data/p270/11.wav|18
|
818 |
+
./Data/p236/162.wav|6
|
819 |
+
./Data/p228/127.wav|1
|
820 |
+
./Data/p227/96.wav|11
|
821 |
+
./Data/p226/98.wav|10
|
822 |
+
./Data/p270/155.wav|18
|
823 |
+
./Data/p236/143.wav|6
|
824 |
+
./Data/p254/77.wav|14
|
825 |
+
./Data/p273/26.wav|19
|
826 |
+
./Data/p270/1.wav|18
|
827 |
+
./Data/p273/51.wav|19
|
828 |
+
./Data/p243/21.wav|13
|
829 |
+
./Data/p231/68.wav|4
|
830 |
+
./Data/p230/169.wav|3
|
831 |
+
./Data/p226/56.wav|10
|
832 |
+
./Data/p233/79.wav|5
|
833 |
+
./Data/p273/58.wav|19
|
834 |
+
./Data/p231/70.wav|4
|
835 |
+
./Data/p228/42.wav|1
|
836 |
+
./Data/p273/141.wav|19
|
837 |
+
./Data/p256/91.wav|15
|
838 |
+
./Data/p259/70.wav|17
|
839 |
+
./Data/p236/69.wav|6
|
840 |
+
./Data/p228/16.wav|1
|
841 |
+
./Data/p270/44.wav|18
|
842 |
+
./Data/p230/16.wav|3
|
843 |
+
./Data/p244/97.wav|9
|
844 |
+
./Data/p254/42.wav|14
|
845 |
+
./Data/p225/53.wav|0
|
846 |
+
./Data/p230/59.wav|3
|
847 |
+
./Data/p226/140.wav|10
|
848 |
+
./Data/p232/7.wav|12
|
849 |
+
./Data/p229/47.wav|2
|
850 |
+
./Data/p231/13.wav|4
|
851 |
+
./Data/p258/49.wav|16
|
852 |
+
./Data/p226/92.wav|10
|
853 |
+
./Data/p227/81.wav|11
|
854 |
+
./Data/p230/162.wav|3
|
855 |
+
./Data/p240/20.wav|8
|
856 |
+
./Data/p236/88.wav|6
|
857 |
+
./Data/p236/79.wav|6
|
858 |
+
./Data/p236/39.wav|6
|
859 |
+
./Data/p233/97.wav|5
|
860 |
+
./Data/p232/96.wav|12
|
861 |
+
./Data/p273/82.wav|19
|
862 |
+
./Data/p230/123.wav|3
|
863 |
+
./Data/p230/126.wav|3
|
864 |
+
./Data/p258/75.wav|16
|
865 |
+
./Data/p232/78.wav|12
|
866 |
+
./Data/p231/48.wav|4
|
867 |
+
./Data/p244/110.wav|9
|
868 |
+
./Data/p258/71.wav|16
|
869 |
+
./Data/p256/116.wav|15
|
870 |
+
./Data/p231/63.wav|4
|
871 |
+
./Data/p258/26.wav|16
|
872 |
+
./Data/p243/18.wav|13
|
873 |
+
./Data/p243/55.wav|13
|
874 |
+
./Data/p270/162.wav|18
|
875 |
+
./Data/p244/33.wav|9
|
876 |
+
./Data/p226/77.wav|10
|
877 |
+
./Data/p270/98.wav|18
|
878 |
+
./Data/p230/121.wav|3
|
879 |
+
./Data/p226/94.wav|10
|
880 |
+
./Data/p270/84.wav|18
|
881 |
+
./Data/p270/53.wav|18
|
882 |
+
./Data/p243/124.wav|13
|
883 |
+
./Data/p228/86.wav|1
|
884 |
+
./Data/p229/25.wav|2
|
885 |
+
./Data/p230/68.wav|3
|
886 |
+
./Data/p240/29.wav|8
|
887 |
+
./Data/p236/63.wav|6
|
888 |
+
./Data/p270/129.wav|18
|
889 |
+
./Data/p229/79.wav|2
|
890 |
+
./Data/p233/102.wav|5
|
891 |
+
./Data/p228/34.wav|1
|
892 |
+
./Data/p230/163.wav|3
|
893 |
+
./Data/p228/64.wav|1
|
894 |
+
./Data/p233/115.wav|5
|
895 |
+
./Data/p243/88.wav|13
|
896 |
+
./Data/p244/14.wav|9
|
897 |
+
./Data/p243/174.wav|13
|
898 |
+
./Data/p229/74.wav|2
|
899 |
+
./Data/p258/27.wav|16
|
900 |
+
./Data/p259/86.wav|17
|
901 |
+
./Data/p273/92.wav|19
|
902 |
+
./Data/p239/81.wav|7
|
903 |
+
./Data/p254/109.wav|14
|
904 |
+
./Data/p232/103.wav|12
|
905 |
+
./Data/p230/21.wav|3
|
906 |
+
./Data/p226/10.wav|10
|
907 |
+
./Data/p240/2.wav|8
|
908 |
+
./Data/p256/102.wav|15
|
909 |
+
./Data/p240/127.wav|8
|
910 |
+
./Data/p259/138.wav|17
|
911 |
+
./Data/p254/123.wav|14
|
912 |
+
./Data/p270/92.wav|18
|
913 |
+
./Data/p254/30.wav|14
|
914 |
+
./Data/p273/86.wav|19
|
915 |
+
./Data/p244/106.wav|9
|
916 |
+
./Data/p226/107.wav|10
|
917 |
+
./Data/p240/4.wav|8
|
918 |
+
./Data/p228/97.wav|1
|
919 |
+
./Data/p258/32.wav|16
|
920 |
+
./Data/p232/79.wav|12
|
921 |
+
./Data/p259/154.wav|17
|
922 |
+
./Data/p231/19.wav|4
|
923 |
+
./Data/p259/91.wav|17
|
924 |
+
./Data/p244/45.wav|9
|
925 |
+
./Data/p240/97.wav|8
|
926 |
+
./Data/p259/45.wav|17
|
927 |
+
./Data/p270/197.wav|18
|
928 |
+
./Data/p229/1.wav|2
|
929 |
+
./Data/p259/11.wav|17
|
930 |
+
./Data/p228/29.wav|1
|
931 |
+
./Data/p230/72.wav|3
|
932 |
+
./Data/p228/145.wav|1
|
933 |
+
./Data/p244/71.wav|9
|
934 |
+
./Data/p230/66.wav|3
|
935 |
+
./Data/p226/51.wav|10
|
936 |
+
./Data/p270/10.wav|18
|
937 |
+
./Data/p254/96.wav|14
|
938 |
+
./Data/p256/64.wav|15
|
939 |
+
./Data/p243/65.wav|13
|
940 |
+
./Data/p228/148.wav|1
|
941 |
+
./Data/p243/41.wav|13
|
942 |
+
./Data/p228/57.wav|1
|
943 |
+
./Data/p239/92.wav|7
|
944 |
+
./Data/p256/124.wav|15
|
945 |
+
./Data/p259/116.wav|17
|
946 |
+
./Data/p233/70.wav|5
|
947 |
+
./Data/p227/1.wav|11
|
948 |
+
./Data/p231/59.wav|4
|
949 |
+
./Data/p243/30.wav|13
|
950 |
+
./Data/p254/41.wav|14
|
951 |
+
./Data/p228/123.wav|1
|
952 |
+
./Data/p239/20.wav|7
|
953 |
+
./Data/p229/77.wav|2
|
954 |
+
./Data/p239/132.wav|7
|
955 |
+
./Data/p243/144.wav|13
|
956 |
+
./Data/p227/137.wav|11
|
957 |
+
./Data/p239/134.wav|7
|
958 |
+
./Data/p240/108.wav|8
|
959 |
+
./Data/p256/118.wav|15
|
960 |
+
./Data/p256/126.wav|15
|
961 |
+
./Data/p226/110.wav|10
|
962 |
+
./Data/p236/29.wav|6
|
963 |
+
./Data/p236/74.wav|6
|
964 |
+
./Data/p231/77.wav|4
|
965 |
+
./Data/p256/45.wav|15
|
966 |
+
./Data/p256/39.wav|15
|
967 |
+
./Data/p228/66.wav|1
|
968 |
+
./Data/p232/35.wav|12
|
969 |
+
./Data/p273/37.wav|19
|
970 |
+
./Data/p240/135.wav|8
|
971 |
+
./Data/p236/73.wav|6
|
972 |
+
./Data/p256/38.wav|15
|
973 |
+
./Data/p243/109.wav|13
|
974 |
+
./Data/p227/33.wav|11
|
975 |
+
./Data/p259/87.wav|17
|
976 |
+
./Data/p225/55.wav|0
|
977 |
+
./Data/p243/138.wav|13
|
978 |
+
./Data/p227/3.wav|11
|
979 |
+
./Data/p254/74.wav|14
|
980 |
+
./Data/p254/137.wav|14
|
981 |
+
./Data/p228/43.wav|1
|
982 |
+
./Data/p270/71.wav|18
|
983 |
+
./Data/p243/56.wav|13
|
984 |
+
./Data/p228/119.wav|1
|
985 |
+
./Data/p244/136.wav|9
|
986 |
+
./Data/p259/94.wav|17
|
987 |
+
./Data/p259/120.wav|17
|
988 |
+
./Data/p230/74.wav|3
|
989 |
+
./Data/p227/100.wav|11
|
990 |
+
./Data/p228/143.wav|1
|
991 |
+
./Data/p225/98.wav|0
|
992 |
+
./Data/p256/2.wav|15
|
993 |
+
./Data/p273/146.wav|19
|
994 |
+
./Data/p230/99.wav|3
|
995 |
+
./Data/p243/20.wav|13
|
996 |
+
./Data/p258/96.wav|16
|
997 |
+
./Data/p226/87.wav|10
|
998 |
+
./Data/p240/64.wav|8
|
999 |
+
./Data/p243/114.wav|13
|
1000 |
+
./Data/p273/77.wav|19
|
1001 |
+
./Data/p256/48.wav|15
|
1002 |
+
./Data/p258/120.wav|16
|
1003 |
+
./Data/p240/111.wav|8
|
1004 |
+
./Data/p226/73.wav|10
|
1005 |
+
./Data/p229/15.wav|2
|
1006 |
+
./Data/p270/165.wav|18
|
1007 |
+
./Data/p226/124.wav|10
|
1008 |
+
./Data/p254/53.wav|14
|
1009 |
+
./Data/p239/97.wav|7
|
1010 |
+
./Data/p236/71.wav|6
|
1011 |
+
./Data/p243/66.wav|13
|
1012 |
+
./Data/p230/26.wav|3
|
1013 |
+
./Data/p233/17.wav|5
|
1014 |
+
./Data/p273/143.wav|19
|
1015 |
+
./Data/p229/6.wav|2
|
1016 |
+
./Data/p258/41.wav|16
|
1017 |
+
./Data/p240/10.wav|8
|
1018 |
+
./Data/p244/115.wav|9
|
1019 |
+
./Data/p256/8.wav|15
|
1020 |
+
./Data/p243/133.wav|13
|
1021 |
+
./Data/p236/145.wav|6
|
1022 |
+
./Data/p240/110.wav|8
|
1023 |
+
./Data/p270/100.wav|18
|
1024 |
+
./Data/p230/167.wav|3
|
1025 |
+
./Data/p270/27.wav|18
|
1026 |
+
./Data/p243/149.wav|13
|
1027 |
+
./Data/p228/139.wav|1
|
1028 |
+
./Data/p256/96.wav|15
|
1029 |
+
./Data/p230/61.wav|3
|
1030 |
+
./Data/p258/42.wav|16
|
1031 |
+
./Data/p236/94.wav|6
|
1032 |
+
./Data/p230/42.wav|3
|
1033 |
+
./Data/p270/144.wav|18
|
1034 |
+
./Data/p228/141.wav|1
|
1035 |
+
./Data/p232/4.wav|12
|
1036 |
+
./Data/p229/8.wav|2
|
1037 |
+
./Data/p230/39.wav|3
|
1038 |
+
./Data/p256/47.wav|15
|
1039 |
+
./Data/p229/54.wav|2
|
1040 |
+
./Data/p239/168.wav|7
|
1041 |
+
./Data/p227/7.wav|11
|
1042 |
+
./Data/p227/93.wav|11
|
1043 |
+
./Data/p240/13.wav|8
|
1044 |
+
./Data/p270/172.wav|18
|
1045 |
+
./Data/p243/45.wav|13
|
1046 |
+
./Data/p259/30.wav|17
|
1047 |
+
./Data/p270/116.wav|18
|
1048 |
+
./Data/p240/48.wav|8
|
1049 |
+
./Data/p227/24.wav|11
|
1050 |
+
./Data/p229/80.wav|2
|
1051 |
+
./Data/p233/2.wav|5
|
1052 |
+
./Data/p228/87.wav|1
|
1053 |
+
./Data/p240/105.wav|8
|
1054 |
+
./Data/p239/60.wav|7
|
1055 |
+
./Data/p244/39.wav|9
|
1056 |
+
./Data/p240/124.wav|8
|
1057 |
+
./Data/p259/145.wav|17
|
1058 |
+
./Data/p227/76.wav|11
|
1059 |
+
./Data/p254/58.wav|14
|
1060 |
+
./Data/p230/156.wav|3
|
1061 |
+
./Data/p229/42.wav|2
|
1062 |
+
./Data/p273/68.wav|19
|
1063 |
+
./Data/p228/146.wav|1
|
1064 |
+
./Data/p236/165.wav|6
|
1065 |
+
./Data/p229/34.wav|2
|
1066 |
+
./Data/p239/123.wav|7
|
1067 |
+
./Data/p273/121.wav|19
|
1068 |
+
./Data/p270/176.wav|18
|
1069 |
+
./Data/p258/74.wav|16
|
1070 |
+
./Data/p254/84.wav|14
|
1071 |
+
./Data/p259/157.wav|17
|
1072 |
+
./Data/p258/130.wav|16
|
1073 |
+
./Data/p244/18.wav|9
|
1074 |
+
./Data/p229/59.wav|2
|
1075 |
+
./Data/p229/10.wav|2
|
1076 |
+
./Data/p273/89.wav|19
|
1077 |
+
./Data/p259/23.wav|17
|
1078 |
+
./Data/p256/6.wav|15
|
1079 |
+
./Data/p227/8.wav|11
|
1080 |
+
./Data/p258/59.wav|16
|
1081 |
+
./Data/p232/91.wav|12
|
1082 |
+
./Data/p258/137.wav|16
|
1083 |
+
./Data/p258/122.wav|16
|
1084 |
+
./Data/p230/89.wav|3
|
1085 |
+
./Data/p232/58.wav|12
|
1086 |
+
./Data/p231/11.wav|4
|
1087 |
+
./Data/p273/120.wav|19
|
1088 |
+
./Data/p232/39.wav|12
|
1089 |
+
./Data/p236/44.wav|6
|
1090 |
+
./Data/p254/12.wav|14
|
1091 |
+
./Data/p270/95.wav|18
|
1092 |
+
./Data/p270/153.wav|18
|
1093 |
+
./Data/p230/164.wav|3
|
1094 |
+
./Data/p225/30.wav|0
|
1095 |
+
./Data/p240/126.wav|8
|
1096 |
+
./Data/p230/54.wav|3
|
1097 |
+
./Data/p270/87.wav|18
|
1098 |
+
./Data/p225/14.wav|0
|
1099 |
+
./Data/p231/145.wav|4
|
1100 |
+
./Data/p254/81.wav|14
|
1101 |
+
./Data/p244/55.wav|9
|
1102 |
+
./Data/p259/3.wav|17
|
1103 |
+
./Data/p273/50.wav|19
|
1104 |
+
./Data/p228/84.wav|1
|
1105 |
+
./Data/p244/3.wav|9
|
1106 |
+
./Data/p239/55.wav|7
|
1107 |
+
./Data/p232/5.wav|12
|
1108 |
+
./Data/p229/111.wav|2
|
1109 |
+
./Data/p236/141.wav|6
|
1110 |
+
./Data/p233/54.wav|5
|
1111 |
+
./Data/p240/88.wav|8
|
1112 |
+
./Data/p236/16.wav|6
|
1113 |
+
./Data/p239/154.wav|7
|
1114 |
+
./Data/p240/72.wav|8
|
1115 |
+
./Data/p236/75.wav|6
|
1116 |
+
./Data/p230/166.wav|3
|
1117 |
+
./Data/p231/122.wav|4
|
1118 |
+
./Data/p273/24.wav|19
|
1119 |
+
./Data/p233/30.wav|5
|
1120 |
+
./Data/p226/9.wav|10
|
1121 |
+
./Data/p240/65.wav|8
|
1122 |
+
./Data/p228/80.wav|1
|
1123 |
+
./Data/p232/46.wav|12
|
1124 |
+
./Data/p239/109.wav|7
|
1125 |
+
./Data/p231/67.wav|4
|
1126 |
+
./Data/p233/67.wav|5
|
1127 |
+
./Data/p228/162.wav|1
|
1128 |
+
./Data/p229/134.wav|2
|
1129 |
+
./Data/p239/27.wav|7
|
1130 |
+
./Data/p227/145.wav|11
|
1131 |
+
./Data/p225/67.wav|0
|
1132 |
+
./Data/p232/99.wav|12
|
1133 |
+
./Data/p270/140.wav|18
|
1134 |
+
./Data/p225/70.wav|0
|
1135 |
+
./Data/p259/21.wav|17
|
1136 |
+
./Data/p230/28.wav|3
|
1137 |
+
./Data/p230/80.wav|3
|
1138 |
+
./Data/p243/34.wav|13
|
1139 |
+
./Data/p254/61.wav|14
|
1140 |
+
./Data/p236/58.wav|6
|
1141 |
+
./Data/p239/21.wav|7
|
1142 |
+
./Data/p230/91.wav|3
|
1143 |
+
./Data/p256/68.wav|15
|
1144 |
+
./Data/p225/21.wav|0
|
1145 |
+
./Data/p233/49.wav|5
|
1146 |
+
./Data/p236/114.wav|6
|
1147 |
+
./Data/p228/134.wav|1
|
1148 |
+
./Data/p231/114.wav|4
|
1149 |
+
./Data/p239/18.wav|7
|
1150 |
+
./Data/p227/132.wav|11
|
1151 |
+
./Data/p236/115.wav|6
|
1152 |
+
./Data/p254/99.wav|14
|
1153 |
+
./Data/p243/143.wav|13
|
1154 |
+
./Data/p270/49.wav|18
|
1155 |
+
./Data/p239/152.wav|7
|
1156 |
+
./Data/p232/120.wav|12
|
1157 |
+
./Data/p256/25.wav|15
|
1158 |
+
./Data/p229/116.wav|2
|
1159 |
+
./Data/p239/130.wav|7
|
1160 |
+
./Data/p254/124.wav|14
|
1161 |
+
./Data/p270/118.wav|18
|
1162 |
+
./Data/p244/46.wav|9
|
1163 |
+
./Data/p231/105.wav|4
|
1164 |
+
./Data/p231/115.wav|4
|
1165 |
+
./Data/p239/144.wav|7
|
1166 |
+
./Data/p226/39.wav|10
|
1167 |
+
./Data/p233/78.wav|5
|
1168 |
+
./Data/p227/53.wav|11
|
1169 |
+
./Data/p239/146.wav|7
|
1170 |
+
./Data/p256/77.wav|15
|
1171 |
+
./Data/p259/37.wav|17
|
1172 |
+
./Data/p258/36.wav|16
|
1173 |
+
./Data/p254/13.wav|14
|
1174 |
+
./Data/p229/69.wav|2
|
1175 |
+
./Data/p231/90.wav|4
|
1176 |
+
./Data/p226/84.wav|10
|
1177 |
+
./Data/p259/48.wav|17
|
1178 |
+
./Data/p233/88.wav|5
|
1179 |
+
./Data/p228/153.wav|1
|
1180 |
+
./Data/p254/43.wav|14
|
1181 |
+
./Data/p231/97.wav|4
|
1182 |
+
./Data/p273/44.wav|19
|
1183 |
+
./Data/p233/27.wav|5
|
1184 |
+
./Data/p232/90.wav|12
|
1185 |
+
./Data/p254/36.wav|14
|
1186 |
+
./Data/p232/27.wav|12
|
1187 |
+
./Data/p230/113.wav|3
|
1188 |
+
./Data/p254/130.wav|14
|
1189 |
+
./Data/p254/62.wav|14
|
1190 |
+
./Data/p239/118.wav|7
|
1191 |
+
./Data/p230/109.wav|3
|
1192 |
+
./Data/p227/102.wav|11
|
1193 |
+
./Data/p226/48.wav|10
|
1194 |
+
./Data/p230/175.wav|3
|
1195 |
+
./Data/p231/60.wav|4
|
1196 |
+
./Data/p259/105.wav|17
|
1197 |
+
./Data/p233/28.wav|5
|
1198 |
+
./Data/p229/36.wav|2
|
1199 |
+
./Data/p256/111.wav|15
|
1200 |
+
./Data/p230/133.wav|3
|
1201 |
+
./Data/p233/125.wav|5
|
1202 |
+
./Data/p228/59.wav|1
|
1203 |
+
./Data/p239/58.wav|7
|
1204 |
+
./Data/p273/116.wav|19
|
1205 |
+
./Data/p230/97.wav|3
|
1206 |
+
./Data/p273/88.wav|19
|
1207 |
+
./Data/p228/93.wav|1
|
1208 |
+
./Data/p259/81.wav|17
|
1209 |
+
./Data/p228/144.wav|1
|
1210 |
+
./Data/p230/32.wav|3
|
1211 |
+
./Data/p240/6.wav|8
|
1212 |
+
./Data/p230/17.wav|3
|
1213 |
+
./Data/p259/98.wav|17
|
1214 |
+
./Data/p227/75.wav|11
|
1215 |
+
./Data/p231/26.wav|4
|
1216 |
+
./Data/p231/103.wav|4
|
1217 |
+
./Data/p236/67.wav|6
|
1218 |
+
./Data/p270/107.wav|18
|
1219 |
+
./Data/p226/24.wav|10
|
1220 |
+
./Data/p273/34.wav|19
|
1221 |
+
./Data/p236/90.wav|6
|
1222 |
+
./Data/p256/14.wav|15
|
1223 |
+
./Data/p236/140.wav|6
|
1224 |
+
./Data/p273/39.wav|19
|
1225 |
+
./Data/p270/163.wav|18
|
1226 |
+
./Data/p239/77.wav|7
|
1227 |
+
./Data/p230/148.wav|3
|
1228 |
+
./Data/p273/113.wav|19
|
1229 |
+
./Data/p254/140.wav|14
|
1230 |
+
./Data/p239/46.wav|7
|
1231 |
+
./Data/p243/51.wav|13
|
1232 |
+
./Data/p231/10.wav|4
|
1233 |
+
./Data/p231/104.wav|4
|
1234 |
+
./Data/p270/132.wav|18
|
1235 |
+
./Data/p228/108.wav|1
|
1236 |
+
./Data/p233/39.wav|5
|
1237 |
+
./Data/p259/130.wav|17
|
1238 |
+
./Data/p239/85.wav|7
|
1239 |
+
./Data/p240/37.wav|8
|
1240 |
+
./Data/p270/58.wav|18
|
1241 |
+
./Data/p243/78.wav|13
|
1242 |
+
./Data/p273/61.wav|19
|
1243 |
+
./Data/p230/144.wav|3
|
1244 |
+
./Data/p233/21.wav|5
|
1245 |
+
./Data/p225/35.wav|0
|
1246 |
+
./Data/p228/158.wav|1
|
1247 |
+
./Data/p259/26.wav|17
|
1248 |
+
./Data/p230/33.wav|3
|
1249 |
+
./Data/p258/128.wav|16
|
1250 |
+
./Data/p233/61.wav|5
|
1251 |
+
./Data/p225/97.wav|0
|
1252 |
+
./Data/p259/143.wav|17
|
1253 |
+
./Data/p226/50.wav|10
|
1254 |
+
./Data/p243/71.wav|13
|
1255 |
+
./Data/p230/22.wav|3
|
1256 |
+
./Data/p226/58.wav|10
|
1257 |
+
./Data/p239/110.wav|7
|
1258 |
+
./Data/p258/136.wav|16
|
1259 |
+
./Data/p226/102.wav|10
|
1260 |
+
./Data/p258/88.wav|16
|
1261 |
+
./Data/p233/94.wav|5
|
1262 |
+
./Data/p258/77.wav|16
|
1263 |
+
./Data/p231/2.wav|4
|
1264 |
+
./Data/p273/40.wav|19
|
1265 |
+
./Data/p239/133.wav|7
|
1266 |
+
./Data/p270/33.wav|18
|
1267 |
+
./Data/p254/132.wav|14
|
1268 |
+
./Data/p270/99.wav|18
|
1269 |
+
./Data/p227/84.wav|11
|
1270 |
+
./Data/p226/132.wav|10
|
1271 |
+
./Data/p239/165.wav|7
|
1272 |
+
./Data/p270/23.wav|18
|
1273 |
+
./Data/p270/41.wav|18
|
1274 |
+
./Data/p236/28.wav|6
|
1275 |
+
./Data/p231/76.wav|4
|
1276 |
+
./Data/p231/28.wav|4
|
1277 |
+
./Data/p236/56.wav|6
|
1278 |
+
./Data/p236/146.wav|6
|
1279 |
+
./Data/p244/125.wav|9
|
1280 |
+
./Data/p256/55.wav|15
|
1281 |
+
./Data/p232/40.wav|12
|
1282 |
+
./Data/p239/64.wav|7
|
1283 |
+
./Data/p240/130.wav|8
|
1284 |
+
./Data/p239/41.wav|7
|
1285 |
+
./Data/p240/138.wav|8
|
1286 |
+
./Data/p226/118.wav|10
|
1287 |
+
./Data/p228/62.wav|1
|
1288 |
+
./Data/p244/16.wav|9
|
1289 |
+
./Data/p244/20.wav|9
|
1290 |
+
./Data/p226/125.wav|10
|
1291 |
+
./Data/p270/74.wav|18
|
1292 |
+
./Data/p229/129.wav|2
|
1293 |
+
./Data/p227/142.wav|11
|
1294 |
+
./Data/p228/38.wav|1
|
1295 |
+
./Data/p258/97.wav|16
|
1296 |
+
./Data/p233/77.wav|5
|
1297 |
+
./Data/p232/84.wav|12
|
1298 |
+
./Data/p229/17.wav|2
|
1299 |
+
./Data/p227/18.wav|11
|
1300 |
+
./Data/p239/94.wav|7
|
1301 |
+
./Data/p239/1.wav|7
|
1302 |
+
./Data/p225/52.wav|0
|
1303 |
+
./Data/p270/82.wav|18
|
1304 |
+
./Data/p232/53.wav|12
|
1305 |
+
./Data/p258/51.wav|16
|
1306 |
+
./Data/p258/132.wav|16
|
1307 |
+
./Data/p229/66.wav|2
|
1308 |
+
./Data/p270/19.wav|18
|
1309 |
+
./Data/p227/88.wav|11
|
1310 |
+
./Data/p231/96.wav|4
|
1311 |
+
./Data/p239/72.wav|7
|
1312 |
+
./Data/p225/73.wav|0
|
1313 |
+
./Data/p240/146.wav|8
|
1314 |
+
./Data/p236/97.wav|6
|
1315 |
+
./Data/p227/43.wav|11
|
1316 |
+
./Data/p232/119.wav|12
|
1317 |
+
./Data/p231/53.wav|4
|
1318 |
+
./Data/p239/42.wav|7
|
1319 |
+
./Data/p259/115.wav|17
|
1320 |
+
./Data/p244/105.wav|9
|
1321 |
+
./Data/p256/33.wav|15
|
1322 |
+
./Data/p231/100.wav|4
|
1323 |
+
./Data/p240/8.wav|8
|
1324 |
+
./Data/p256/57.wav|15
|
1325 |
+
./Data/p227/130.wav|11
|
1326 |
+
./Data/p226/30.wav|10
|
1327 |
+
./Data/p233/80.wav|5
|
1328 |
+
./Data/p232/17.wav|12
|
1329 |
+
./Data/p259/167.wav|17
|
1330 |
+
./Data/p227/122.wav|11
|
1331 |
+
./Data/p239/128.wav|7
|
1332 |
+
./Data/p231/133.wav|4
|
1333 |
+
./Data/p273/129.wav|19
|
1334 |
+
./Data/p243/15.wav|13
|
1335 |
+
./Data/p243/44.wav|13
|
1336 |
+
./Data/p259/161.wav|17
|
1337 |
+
./Data/p243/94.wav|13
|
1338 |
+
./Data/p244/62.wav|9
|
1339 |
+
./Data/p270/180.wav|18
|
1340 |
+
./Data/p258/126.wav|16
|
1341 |
+
./Data/p229/137.wav|2
|
1342 |
+
./Data/p233/105.wav|5
|
1343 |
+
./Data/p244/79.wav|9
|
1344 |
+
./Data/p254/46.wav|14
|
1345 |
+
./Data/p240/95.wav|8
|
1346 |
+
./Data/p259/135.wav|17
|
1347 |
+
./Data/p259/52.wav|17
|
1348 |
+
./Data/p229/68.wav|2
|
1349 |
+
./Data/p254/33.wav|14
|
1350 |
+
./Data/p230/83.wav|3
|
1351 |
+
./Data/p256/89.wav|15
|
1352 |
+
./Data/p254/90.wav|14
|
1353 |
+
./Data/p270/182.wav|18
|
1354 |
+
./Data/p226/18.wav|10
|
1355 |
+
./Data/p270/145.wav|18
|
1356 |
+
./Data/p231/128.wav|4
|
1357 |
+
./Data/p239/140.wav|7
|
1358 |
+
./Data/p228/100.wav|1
|
1359 |
+
./Data/p227/49.wav|11
|
1360 |
+
./Data/p240/53.wav|8
|
1361 |
+
./Data/p258/108.wav|16
|
1362 |
+
./Data/p226/83.wav|10
|
1363 |
+
./Data/p270/106.wav|18
|
1364 |
+
./Data/p243/11.wav|13
|
1365 |
+
./Data/p229/12.wav|2
|
1366 |
+
./Data/p228/7.wav|1
|
1367 |
+
./Data/p243/8.wav|13
|
1368 |
+
./Data/p227/128.wav|11
|
1369 |
+
./Data/p230/118.wav|3
|
1370 |
+
./Data/p227/78.wav|11
|
1371 |
+
./Data/p244/30.wav|9
|
1372 |
+
./Data/p231/98.wav|4
|
1373 |
+
./Data/p230/38.wav|3
|
1374 |
+
./Data/p244/47.wav|9
|
1375 |
+
./Data/p270/138.wav|18
|
1376 |
+
./Data/p259/109.wav|17
|
1377 |
+
./Data/p270/112.wav|18
|
1378 |
+
./Data/p227/82.wav|11
|
1379 |
+
./Data/p228/161.wav|1
|
1380 |
+
./Data/p273/127.wav|19
|
1381 |
+
./Data/p232/72.wav|12
|
1382 |
+
./Data/p227/95.wav|11
|
1383 |
+
./Data/p236/105.wav|6
|
1384 |
+
./Data/p239/52.wav|7
|
1385 |
+
./Data/p273/135.wav|19
|
1386 |
+
./Data/p236/136.wav|6
|
1387 |
+
./Data/p228/113.wav|1
|
1388 |
+
./Data/p229/56.wav|2
|
1389 |
+
./Data/p240/34.wav|8
|
1390 |
+
./Data/p230/79.wav|3
|
1391 |
+
./Data/p232/48.wav|12
|
1392 |
+
./Data/p240/101.wav|8
|
1393 |
+
./Data/p229/112.wav|2
|
1394 |
+
./Data/p273/46.wav|19
|
1395 |
+
./Data/p273/27.wav|19
|
1396 |
+
./Data/p239/103.wav|7
|
1397 |
+
./Data/p259/117.wav|17
|
1398 |
+
./Data/p230/37.wav|3
|
1399 |
+
./Data/p233/138.wav|5
|
1400 |
+
./Data/p228/125.wav|1
|
1401 |
+
./Data/p230/115.wav|3
|
1402 |
+
./Data/p240/42.wav|8
|
1403 |
+
./Data/p231/99.wav|4
|
1404 |
+
./Data/p236/54.wav|6
|
1405 |
+
./Data/p233/104.wav|5
|
1406 |
+
./Data/p270/4.wav|18
|
1407 |
+
./Data/p226/122.wav|10
|
1408 |
+
./Data/p230/56.wav|3
|
1409 |
+
./Data/p244/58.wav|9
|
1410 |
+
./Data/p229/133.wav|2
|
1411 |
+
./Data/p270/64.wav|18
|
1412 |
+
./Data/p225/88.wav|0
|
1413 |
+
./Data/p240/104.wav|8
|
1414 |
+
./Data/p244/78.wav|9
|
1415 |
+
./Data/p254/113.wav|14
|
1416 |
+
./Data/p259/144.wav|17
|
1417 |
+
./Data/p236/100.wav|6
|
1418 |
+
./Data/p230/81.wav|3
|
1419 |
+
./Data/p259/53.wav|17
|
1420 |
+
./Data/p239/155.wav|7
|
1421 |
+
./Data/p236/148.wav|6
|
1422 |
+
./Data/p270/8.wav|18
|
1423 |
+
./Data/p225/90.wav|0
|
1424 |
+
./Data/p236/64.wav|6
|
1425 |
+
./Data/p236/159.wav|6
|
1426 |
+
./Data/p232/63.wav|12
|
1427 |
+
./Data/p244/2.wav|9
|
1428 |
+
./Data/p258/28.wav|16
|
1429 |
+
./Data/p259/5.wav|17
|
1430 |
+
./Data/p225/42.wav|0
|
1431 |
+
./Data/p256/49.wav|15
|
1432 |
+
./Data/p233/24.wav|5
|
1433 |
+
./Data/p270/146.wav|18
|
1434 |
+
./Data/p243/131.wav|13
|
1435 |
+
./Data/p229/91.wav|2
|
1436 |
+
./Data/p229/76.wav|2
|
1437 |
+
./Data/p227/22.wav|11
|
1438 |
+
./Data/p244/59.wav|9
|
1439 |
+
./Data/p236/17.wav|6
|
1440 |
+
./Data/p240/32.wav|8
|
1441 |
+
./Data/p232/23.wav|12
|
1442 |
+
./Data/p230/20.wav|3
|
1443 |
+
./Data/p232/111.wav|12
|
1444 |
+
./Data/p230/159.wav|3
|
1445 |
+
./Data/p244/15.wav|9
|
1446 |
+
./Data/p229/86.wav|2
|
1447 |
+
./Data/p240/54.wav|8
|
1448 |
+
./Data/p229/132.wav|2
|
1449 |
+
./Data/p239/126.wav|7
|
1450 |
+
./Data/p240/91.wav|8
|
1451 |
+
./Data/p244/51.wav|9
|
1452 |
+
./Data/p254/19.wav|14
|
1453 |
+
./Data/p244/32.wav|9
|
1454 |
+
./Data/p258/114.wav|16
|
1455 |
+
./Data/p254/106.wav|14
|
1456 |
+
./Data/p243/111.wav|13
|
1457 |
+
./Data/p226/106.wav|10
|
1458 |
+
./Data/p244/26.wav|9
|
1459 |
+
./Data/p225/57.wav|0
|
1460 |
+
./Data/p243/24.wav|13
|
1461 |
+
./Data/p259/127.wav|17
|
1462 |
+
./Data/p256/50.wav|15
|
1463 |
+
./Data/p239/100.wav|7
|
1464 |
+
./Data/p273/10.wav|19
|
1465 |
+
./Data/p229/2.wav|2
|
1466 |
+
./Data/p270/70.wav|18
|
1467 |
+
./Data/p254/95.wav|14
|
1468 |
+
./Data/p256/120.wav|15
|
1469 |
+
./Data/p233/107.wav|5
|
1470 |
+
./Data/p226/90.wav|10
|
1471 |
+
./Data/p258/55.wav|16
|
1472 |
+
./Data/p233/99.wav|5
|
1473 |
+
./Data/p230/6.wav|3
|
1474 |
+
./Data/p273/131.wav|19
|
1475 |
+
./Data/p273/52.wav|19
|
1476 |
+
./Data/p236/158.wav|6
|
1477 |
+
./Data/p232/62.wav|12
|
1478 |
+
./Data/p233/20.wav|5
|
1479 |
+
./Data/p270/90.wav|18
|
1480 |
+
./Data/p240/11.wav|8
|
1481 |
+
./Data/p258/66.wav|16
|
1482 |
+
./Data/p258/65.wav|16
|
1483 |
+
./Data/p270/94.wav|18
|
1484 |
+
./Data/p270/9.wav|18
|
1485 |
+
./Data/p228/82.wav|1
|
1486 |
+
./Data/p236/96.wav|6
|
1487 |
+
./Data/p229/33.wav|2
|
1488 |
+
./Data/p229/19.wav|2
|
1489 |
+
./Data/p239/54.wav|7
|
1490 |
+
./Data/p232/106.wav|12
|
1491 |
+
./Data/p231/138.wav|4
|
1492 |
+
./Data/p230/57.wav|3
|
1493 |
+
./Data/p270/89.wav|18
|
1494 |
+
./Data/p273/95.wav|19
|
1495 |
+
./Data/p231/131.wav|4
|
1496 |
+
./Data/p236/107.wav|6
|
1497 |
+
./Data/p228/122.wav|1
|
1498 |
+
./Data/p226/109.wav|10
|
1499 |
+
./Data/p270/117.wav|18
|
1500 |
+
./Data/p230/110.wav|3
|
1501 |
+
./Data/p270/37.wav|18
|
1502 |
+
./Data/p225/29.wav|0
|
1503 |
+
./Data/p233/8.wav|5
|
1504 |
+
./Data/p227/4.wav|11
|
1505 |
+
./Data/p232/97.wav|12
|
1506 |
+
./Data/p243/14.wav|13
|
1507 |
+
./Data/p254/91.wav|14
|
1508 |
+
./Data/p256/62.wav|15
|
1509 |
+
./Data/p229/110.wav|2
|
1510 |
+
./Data/p233/34.wav|5
|
1511 |
+
./Data/p226/81.wav|10
|
1512 |
+
./Data/p230/29.wav|3
|
1513 |
+
./Data/p240/84.wav|8
|
1514 |
+
./Data/p270/201.wav|18
|
1515 |
+
./Data/p239/157.wav|7
|
1516 |
+
./Data/p270/158.wav|18
|
1517 |
+
./Data/p236/80.wav|6
|
1518 |
+
./Data/p232/54.wav|12
|
1519 |
+
./Data/p239/29.wav|7
|
1520 |
+
./Data/p225/33.wav|0
|
1521 |
+
./Data/p273/7.wav|19
|
1522 |
+
./Data/p273/98.wav|19
|
1523 |
+
./Data/p227/63.wav|11
|
1524 |
+
./Data/p230/174.wav|3
|
1525 |
+
./Data/p270/28.wav|18
|
1526 |
+
./Data/p233/13.wav|5
|
1527 |
+
./Data/p273/99.wav|19
|
1528 |
+
./Data/p229/81.wav|2
|
1529 |
+
./Data/p273/124.wav|19
|
1530 |
+
./Data/p230/129.wav|3
|
1531 |
+
./Data/p259/133.wav|17
|
1532 |
+
./Data/p270/24.wav|18
|
1533 |
+
./Data/p226/35.wav|10
|
1534 |
+
./Data/p236/118.wav|6
|
1535 |
+
./Data/p254/121.wav|14
|
1536 |
+
./Data/p270/120.wav|18
|
1537 |
+
./Data/p231/30.wav|4
|
1538 |
+
./Data/p240/102.wav|8
|
1539 |
+
./Data/p243/53.wav|13
|
1540 |
+
./Data/p230/47.wav|3
|
1541 |
+
./Data/p233/55.wav|5
|
1542 |
+
./Data/p226/11.wav|10
|
1543 |
+
./Data/p239/120.wav|7
|
1544 |
+
./Data/p226/49.wav|10
|
1545 |
+
./Data/p239/44.wav|7
|
1546 |
+
./Data/p244/140.wav|9
|
1547 |
+
./Data/p258/63.wav|16
|
1548 |
+
./Data/p232/52.wav|12
|
1549 |
+
./Data/p273/109.wav|19
|
1550 |
+
./Data/p259/72.wav|17
|
1551 |
+
./Data/p259/164.wav|17
|
1552 |
+
./Data/p256/78.wav|15
|
1553 |
+
./Data/p243/107.wav|13
|
1554 |
+
./Data/p258/62.wav|16
|
1555 |
+
./Data/p239/31.wav|7
|
1556 |
+
./Data/p256/41.wav|15
|
1557 |
+
./Data/p273/63.wav|19
|
1558 |
+
./Data/p258/112.wav|16
|
1559 |
+
./Data/p243/116.wav|13
|
1560 |
+
./Data/p254/29.wav|14
|
1561 |
+
./Data/p229/45.wav|2
|
1562 |
+
./Data/p244/101.wav|9
|
1563 |
+
./Data/p232/34.wav|12
|
1564 |
+
./Data/p243/154.wav|13
|
1565 |
+
./Data/p231/33.wav|4
|
1566 |
+
./Data/p243/35.wav|13
|
1567 |
+
./Data/p236/38.wav|6
|
1568 |
+
./Data/p270/16.wav|18
|
1569 |
+
./Data/p270/187.wav|18
|
1570 |
+
./Data/p239/114.wav|7
|
1571 |
+
./Data/p244/24.wav|9
|
1572 |
+
./Data/p228/75.wav|1
|
1573 |
+
./Data/p226/26.wav|10
|
1574 |
+
./Data/p259/136.wav|17
|
1575 |
+
./Data/p236/147.wav|6
|
1576 |
+
./Data/p239/135.wav|7
|
1577 |
+
./Data/p270/43.wav|18
|
1578 |
+
./Data/p244/132.wav|9
|
1579 |
+
./Data/p243/129.wav|13
|
1580 |
+
./Data/p236/9.wav|6
|
1581 |
+
./Data/p232/109.wav|12
|
1582 |
+
./Data/p225/84.wav|0
|
1583 |
+
./Data/p227/27.wav|11
|
1584 |
+
./Data/p259/8.wav|17
|
1585 |
+
./Data/p259/67.wav|17
|
1586 |
+
./Data/p239/57.wav|7
|
1587 |
+
./Data/p243/69.wav|13
|
1588 |
+
./Data/p231/62.wav|4
|
1589 |
+
./Data/p259/140.wav|17
|
1590 |
+
./Data/p227/66.wav|11
|
1591 |
+
./Data/p230/44.wav|3
|
1592 |
+
./Data/p229/63.wav|2
|
1593 |
+
./Data/p256/4.wav|15
|
1594 |
+
./Data/p258/24.wav|16
|
1595 |
+
./Data/p240/80.wav|8
|
1596 |
+
./Data/p270/72.wav|18
|
1597 |
+
./Data/p240/47.wav|8
|
1598 |
+
./Data/p229/98.wav|2
|
1599 |
+
./Data/p244/111.wav|9
|
1600 |
+
./Data/p231/111.wav|4
|
1601 |
+
./Data/p243/91.wav|13
|
1602 |
+
./Data/p239/36.wav|7
|
1603 |
+
./Data/p259/103.wav|17
|
1604 |
+
./Data/p232/2.wav|12
|
1605 |
+
./Data/p236/3.wav|6
|
1606 |
+
./Data/p236/57.wav|6
|
1607 |
+
./Data/p233/109.wav|5
|
1608 |
+
./Data/p236/122.wav|6
|
1609 |
+
./Data/p270/76.wav|18
|
1610 |
+
./Data/p243/167.wav|13
|
1611 |
+
./Data/p228/20.wav|1
|
1612 |
+
./Data/p243/72.wav|13
|
1613 |
+
./Data/p239/2.wav|7
|
1614 |
+
./Data/p226/21.wav|10
|
1615 |
+
./Data/p256/43.wav|15
|
1616 |
+
./Data/p259/129.wav|17
|
1617 |
+
./Data/p231/15.wav|4
|
1618 |
+
./Data/p231/85.wav|4
|
1619 |
+
./Data/p226/29.wav|10
|
1620 |
+
./Data/p230/131.wav|3
|
1621 |
+
./Data/p259/97.wav|17
|
1622 |
+
./Data/p240/68.wav|8
|
1623 |
+
./Data/p233/84.wav|5
|
1624 |
+
./Data/p236/10.wav|6
|
1625 |
+
./Data/p244/120.wav|9
|
1626 |
+
./Data/p270/18.wav|18
|
1627 |
+
./Data/p231/24.wav|4
|
1628 |
+
./Data/p256/37.wav|15
|
1629 |
+
./Data/p233/11.wav|5
|
1630 |
+
./Data/p230/93.wav|3
|
1631 |
+
./Data/p230/73.wav|3
|
1632 |
+
./Data/p239/66.wav|7
|
1633 |
+
./Data/p230/40.wav|3
|
1634 |
+
./Data/p228/13.wav|1
|
1635 |
+
./Data/p231/49.wav|4
|
1636 |
+
./Data/p270/62.wav|18
|
1637 |
+
./Data/p236/78.wav|6
|
1638 |
+
./Data/p258/73.wav|16
|
1639 |
+
./Data/p236/35.wav|6
|
1640 |
+
./Data/p254/120.wav|14
|
1641 |
+
./Data/p258/53.wav|16
|
1642 |
+
./Data/p227/16.wav|11
|
1643 |
+
./Data/p232/33.wav|12
|
1644 |
+
./Data/p256/42.wav|15
|
1645 |
+
./Data/p233/68.wav|5
|
1646 |
+
./Data/p225/74.wav|0
|
1647 |
+
./Data/p244/127.wav|9
|
1648 |
+
./Data/p243/118.wav|13
|
1649 |
+
./Data/p273/128.wav|19
|
1650 |
+
./Data/p239/7.wav|7
|
1651 |
+
./Data/p243/50.wav|13
|
1652 |
+
./Data/p226/23.wav|10
|
1653 |
+
./Data/p270/199.wav|18
|
1654 |
+
./Data/p254/45.wav|14
|
1655 |
+
./Data/p254/11.wav|14
|
1656 |
+
./Data/p244/66.wav|9
|
1657 |
+
./Data/p270/152.wav|18
|
1658 |
+
./Data/p227/131.wav|11
|
1659 |
+
./Data/p270/38.wav|18
|
1660 |
+
./Data/p229/57.wav|2
|
1661 |
+
./Data/p227/35.wav|11
|
1662 |
+
./Data/p244/7.wav|9
|
1663 |
+
./Data/p226/32.wav|10
|
1664 |
+
./Data/p230/152.wav|3
|
1665 |
+
./Data/p239/161.wav|7
|
1666 |
+
./Data/p256/123.wav|15
|
1667 |
+
./Data/p231/14.wav|4
|
1668 |
+
./Data/p243/38.wav|13
|
1669 |
+
./Data/p229/102.wav|2
|
1670 |
+
./Data/p229/38.wav|2
|
1671 |
+
./Data/p233/116.wav|5
|
1672 |
+
./Data/p254/35.wav|14
|
1673 |
+
./Data/p254/118.wav|14
|
1674 |
+
./Data/p225/15.wav|0
|
1675 |
+
./Data/p230/132.wav|3
|
1676 |
+
./Data/p273/84.wav|19
|
1677 |
+
./Data/p254/122.wav|14
|
1678 |
+
./Data/p273/3.wav|19
|
1679 |
+
./Data/p270/68.wav|18
|
1680 |
+
./Data/p232/42.wav|12
|
1681 |
+
./Data/p225/93.wav|0
|
1682 |
+
./Data/p227/34.wav|11
|
1683 |
+
./Data/p270/22.wav|18
|
1684 |
+
./Data/p231/4.wav|4
|
1685 |
+
./Data/p227/125.wav|11
|
1686 |
+
./Data/p244/95.wav|9
|
1687 |
+
./Data/p236/18.wav|6
|
1688 |
+
./Data/p273/25.wav|19
|
1689 |
+
./Data/p259/169.wav|17
|
1690 |
+
./Data/p233/56.wav|5
|
1691 |
+
./Data/p270/203.wav|18
|
1692 |
+
./Data/p259/41.wav|17
|
1693 |
+
./Data/p233/38.wav|5
|
1694 |
+
./Data/p229/22.wav|2
|
1695 |
+
./Data/p256/17.wav|15
|
1696 |
+
./Data/p270/3.wav|18
|
1697 |
+
./Data/p231/5.wav|4
|
1698 |
+
./Data/p240/60.wav|8
|
1699 |
+
./Data/p227/21.wav|11
|
1700 |
+
./Data/p259/1.wav|17
|
1701 |
+
./Data/p259/4.wav|17
|
1702 |
+
./Data/p232/11.wav|12
|
1703 |
+
./Data/p259/114.wav|17
|
1704 |
+
./Data/p226/45.wav|10
|
1705 |
+
./Data/p236/27.wav|6
|
1706 |
+
./Data/p239/47.wav|7
|
1707 |
+
./Data/p244/85.wav|9
|
1708 |
+
./Data/p243/87.wav|13
|
1709 |
+
./Data/p258/89.wav|16
|
1710 |
+
./Data/p233/57.wav|5
|
1711 |
+
./Data/p228/78.wav|1
|
1712 |
+
./Data/p256/60.wav|15
|
1713 |
+
./Data/p232/83.wav|12
|
1714 |
+
./Data/p232/88.wav|12
|
1715 |
+
./Data/p231/120.wav|4
|
1716 |
+
./Data/p226/101.wav|10
|
1717 |
+
./Data/p236/102.wav|6
|
1718 |
+
./Data/p226/123.wav|10
|
1719 |
+
./Data/p259/85.wav|17
|
1720 |
+
./Data/p227/124.wav|11
|
1721 |
+
./Data/p259/80.wav|17
|
1722 |
+
./Data/p227/10.wav|11
|
1723 |
+
./Data/p233/26.wav|5
|
1724 |
+
./Data/p273/75.wav|19
|
1725 |
+
./Data/p243/73.wav|13
|
1726 |
+
./Data/p244/22.wav|9
|
1727 |
+
./Data/p243/126.wav|13
|
1728 |
+
./Data/p244/108.wav|9
|
1729 |
+
./Data/p243/134.wav|13
|
1730 |
+
./Data/p226/100.wav|10
|
1731 |
+
./Data/p231/123.wav|4
|
1732 |
+
./Data/p228/47.wav|1
|
1733 |
+
./Data/p243/42.wav|13
|
1734 |
+
./Data/p233/131.wav|5
|
1735 |
+
./Data/p273/2.wav|19
|
1736 |
+
./Data/p254/24.wav|14
|
1737 |
+
./Data/p236/123.wav|6
|
1738 |
+
./Data/p240/24.wav|8
|
1739 |
+
./Data/p244/63.wav|9
|
1740 |
+
./Data/p236/149.wav|6
|
1741 |
+
./Data/p236/83.wav|6
|
1742 |
+
./Data/p258/131.wav|16
|
1743 |
+
./Data/p243/120.wav|13
|
1744 |
+
./Data/p259/159.wav|17
|
1745 |
+
./Data/p258/8.wav|16
|
1746 |
+
./Data/p258/34.wav|16
|
1747 |
+
./Data/p243/33.wav|13
|
1748 |
+
./Data/p256/18.wav|15
|
1749 |
+
./Data/p232/73.wav|12
|
1750 |
+
./Data/p244/49.wav|9
|
1751 |
+
./Data/p258/12.wav|16
|
1752 |
+
./Data/p225/18.wav|0
|
1753 |
+
./Data/p258/68.wav|16
|
1754 |
+
./Data/p270/134.wav|18
|
1755 |
+
./Data/p228/54.wav|1
|
1756 |
+
./Data/p236/139.wav|6
|
1757 |
+
./Data/p225/6.wav|0
|
1758 |
+
./Data/p259/57.wav|17
|
1759 |
+
./Data/p243/70.wav|13
|
1760 |
+
./Data/p240/122.wav|8
|
1761 |
+
./Data/p259/69.wav|17
|
1762 |
+
./Data/p258/124.wav|16
|
1763 |
+
./Data/p226/138.wav|10
|
1764 |
+
./Data/p231/51.wav|4
|
1765 |
+
./Data/p259/126.wav|17
|
1766 |
+
./Data/p227/119.wav|11
|
1767 |
+
./Data/p254/136.wav|14
|
1768 |
+
./Data/p240/107.wav|8
|
1769 |
+
./Data/p254/4.wav|14
|
1770 |
+
./Data/p228/117.wav|1
|
1771 |
+
./Data/p244/92.wav|9
|
1772 |
+
./Data/p239/151.wav|7
|
1773 |
+
./Data/p259/131.wav|17
|
1774 |
+
./Data/p273/96.wav|19
|
1775 |
+
./Data/p254/69.wav|14
|
1776 |
+
./Data/p259/16.wav|17
|
1777 |
+
./Data/p244/86.wav|9
|
1778 |
+
./Data/p236/30.wav|6
|
1779 |
+
./Data/p230/34.wav|3
|
1780 |
+
./Data/p230/142.wav|3
|
1781 |
+
./Data/p244/37.wav|9
|
1782 |
+
./Data/p239/40.wav|7
|
1783 |
+
./Data/p232/87.wav|12
|
1784 |
+
./Data/p270/115.wav|18
|
1785 |
+
./Data/p232/124.wav|12
|
1786 |
+
./Data/p233/127.wav|5
|
1787 |
+
./Data/p228/70.wav|1
|
1788 |
+
./Data/p254/66.wav|14
|
1789 |
+
./Data/p232/16.wav|12
|
1790 |
+
./Data/p256/109.wav|15
|
1791 |
+
./Data/p243/169.wav|13
|
1792 |
+
./Data/p228/112.wav|1
|
1793 |
+
./Data/p254/82.wav|14
|
1794 |
+
./Data/p231/119.wav|4
|
1795 |
+
./Data/p236/59.wav|6
|
1796 |
+
./Data/p239/69.wav|7
|
1797 |
+
./Data/p225/12.wav|0
|
1798 |
+
./Data/p232/18.wav|12
|
1799 |
+
./Data/p229/32.wav|2
|
1800 |
+
./Data/p228/126.wav|1
|
1801 |
+
./Data/p270/171.wav|18
|
1802 |
+
./Data/p236/13.wav|6
|
1803 |
+
./Data/p228/12.wav|1
|
1804 |
+
./Data/p228/96.wav|1
|
1805 |
+
./Data/p256/11.wav|15
|
1806 |
+
./Data/p233/83.wav|5
|
1807 |
+
./Data/p256/99.wav|15
|
1808 |
+
./Data/p225/69.wav|0
|
1809 |
+
./Data/p254/7.wav|14
|
1810 |
+
./Data/p227/59.wav|11
|
1811 |
+
./Data/p273/136.wav|19
|
1812 |
+
./Data/p239/3.wav|7
|
1813 |
+
./Data/p256/119.wav|15
|
1814 |
+
./Data/p226/99.wav|10
|
1815 |
+
./Data/p256/56.wav|15
|
1816 |
+
./Data/p243/82.wav|13
|
1817 |
+
./Data/p227/69.wav|11
|
1818 |
+
./Data/p273/29.wav|19
|
1819 |
+
./Data/p233/100.wav|5
|
1820 |
+
./Data/p230/173.wav|3
|
1821 |
+
./Data/p240/132.wav|8
|
1822 |
+
./Data/p239/143.wav|7
|
1823 |
+
./Data/p231/40.wav|4
|
1824 |
+
./Data/p256/10.wav|15
|
1825 |
+
./Data/p229/75.wav|2
|
1826 |
+
./Data/p240/15.wav|8
|
1827 |
+
./Data/p228/102.wav|1
|
1828 |
+
./Data/p270/52.wav|18
|
1829 |
+
./Data/p270/7.wav|18
|
1830 |
+
./Data/p270/164.wav|18
|
1831 |
+
./Data/p233/91.wav|5
|
1832 |
+
./Data/p244/27.wav|9
|
1833 |
+
./Data/p244/48.wav|9
|
1834 |
+
./Data/p239/24.wav|7
|
1835 |
+
./Data/p226/113.wav|10
|
1836 |
+
./Data/p227/72.wav|11
|
1837 |
+
./Data/p270/67.wav|18
|
1838 |
+
./Data/p231/25.wav|4
|
1839 |
+
./Data/p229/120.wav|2
|
1840 |
+
./Data/p273/67.wav|19
|
1841 |
+
./Data/p230/67.wav|3
|
1842 |
+
./Data/p227/120.wav|11
|
1843 |
+
./Data/p239/121.wav|7
|
1844 |
+
./Data/p228/88.wav|1
|
1845 |
+
./Data/p254/15.wav|14
|
1846 |
+
./Data/p270/114.wav|18
|
1847 |
+
./Data/p254/14.wav|14
|
1848 |
+
./Data/p259/75.wav|17
|
1849 |
+
./Data/p236/126.wav|6
|
1850 |
+
./Data/p228/92.wav|1
|
1851 |
+
./Data/p230/127.wav|3
|
1852 |
+
./Data/p229/93.wav|2
|
1853 |
+
./Data/p233/82.wav|5
|
1854 |
+
./Data/p239/122.wav|7
|
1855 |
+
./Data/p229/72.wav|2
|
1856 |
+
./Data/p232/131.wav|12
|
1857 |
+
./Data/p239/67.wav|7
|
1858 |
+
./Data/p225/36.wav|0
|
1859 |
+
./Data/p254/3.wav|14
|
1860 |
+
./Data/p244/109.wav|9
|
1861 |
+
./Data/p230/112.wav|3
|
1862 |
+
./Data/p230/5.wav|3
|
1863 |
+
./Data/p256/87.wav|15
|
1864 |
+
./Data/p232/15.wav|12
|
1865 |
+
./Data/p244/67.wav|9
|
1866 |
+
./Data/p236/48.wav|6
|
1867 |
+
./Data/p232/110.wav|12
|
1868 |
+
./Data/p243/156.wav|13
|
1869 |
+
./Data/p231/140.wav|4
|
1870 |
+
./Data/p239/89.wav|7
|
1871 |
+
./Data/p229/53.wav|2
|
1872 |
+
./Data/p256/97.wav|15
|
1873 |
+
./Data/p256/79.wav|15
|
1874 |
+
./Data/p236/6.wav|6
|
1875 |
+
./Data/p236/106.wav|6
|
1876 |
+
./Data/p227/15.wav|11
|
1877 |
+
./Data/p273/20.wav|19
|
1878 |
+
./Data/p239/49.wav|7
|
1879 |
+
./Data/p254/134.wav|14
|
1880 |
+
./Data/p228/4.wav|1
|
1881 |
+
./Data/p227/117.wav|11
|
1882 |
+
./Data/p259/7.wav|17
|
1883 |
+
./Data/p258/91.wav|16
|
1884 |
+
./Data/p259/128.wav|17
|
1885 |
+
./Data/p236/61.wav|6
|
1886 |
+
./Data/p230/165.wav|3
|
1887 |
+
./Data/p225/20.wav|0
|
1888 |
+
./Data/p232/122.wav|12
|
1889 |
+
./Data/p230/130.wav|3
|
1890 |
+
./Data/p228/58.wav|1
|
1891 |
+
./Data/p227/38.wav|11
|
1892 |
+
./Data/p239/34.wav|7
|
1893 |
+
./Data/p240/137.wav|8
|
1894 |
+
./Data/p258/90.wav|16
|
1895 |
+
./Data/p258/138.wav|16
|
1896 |
+
./Data/p244/124.wav|9
|
1897 |
+
./Data/p239/167.wav|7
|
1898 |
+
./Data/p233/90.wav|5
|
1899 |
+
./Data/p239/172.wav|7
|
1900 |
+
./Data/p254/97.wav|14
|
1901 |
+
./Data/p259/29.wav|17
|
1902 |
+
./Data/p229/92.wav|2
|
1903 |
+
./Data/p227/11.wav|11
|
1904 |
+
./Data/p258/118.wav|16
|
1905 |
+
./Data/p244/69.wav|9
|
1906 |
+
./Data/p232/3.wav|12
|
1907 |
+
./Data/p256/28.wav|15
|
1908 |
+
./Data/p229/49.wav|2
|
1909 |
+
./Data/p236/82.wav|6
|
1910 |
+
./Data/p239/171.wav|7
|
1911 |
+
./Data/p254/127.wav|14
|
1912 |
+
./Data/p259/43.wav|17
|
1913 |
+
./Data/p228/21.wav|1
|
1914 |
+
./Data/p256/74.wav|15
|
1915 |
+
./Data/p226/76.wav|10
|
1916 |
+
./Data/p243/170.wav|13
|
1917 |
+
./Data/p239/39.wav|7
|
1918 |
+
./Data/p233/124.wav|5
|
1919 |
+
./Data/p229/13.wav|2
|
1920 |
+
./Data/p231/71.wav|4
|
1921 |
+
./Data/p229/118.wav|2
|
1922 |
+
./Data/p231/88.wav|4
|
1923 |
+
./Data/p231/55.wav|4
|
1924 |
+
./Data/p270/104.wav|18
|
1925 |
+
./Data/p270/110.wav|18
|
1926 |
+
./Data/p228/41.wav|1
|
1927 |
+
./Data/p258/2.wav|16
|
1928 |
+
./Data/p230/78.wav|3
|
1929 |
+
./Data/p231/80.wav|4
|
1930 |
+
./Data/p243/9.wav|13
|
1931 |
+
./Data/p239/16.wav|7
|
1932 |
+
./Data/p239/76.wav|7
|
1933 |
+
./Data/p226/126.wav|10
|
1934 |
+
./Data/p226/63.wav|10
|
1935 |
+
./Data/p233/46.wav|5
|
1936 |
+
./Data/p270/202.wav|18
|
1937 |
+
./Data/p239/164.wav|7
|
1938 |
+
./Data/p231/22.wav|4
|
1939 |
+
./Data/p259/24.wav|17
|
1940 |
+
./Data/p256/73.wav|15
|
1941 |
+
./Data/p259/10.wav|17
|
1942 |
+
./Data/p232/94.wav|12
|
1943 |
+
./Data/p273/30.wav|19
|
1944 |
+
./Data/p244/29.wav|9
|
1945 |
+
./Data/p226/129.wav|10
|
1946 |
+
./Data/p243/81.wav|13
|
1947 |
+
./Data/p236/121.wav|6
|
1948 |
+
./Data/p228/89.wav|1
|
1949 |
+
./Data/p231/81.wav|4
|
1950 |
+
./Data/p243/57.wav|13
|
1951 |
+
./Data/p236/40.wav|6
|
1952 |
+
./Data/p226/89.wav|10
|
1953 |
+
./Data/p244/44.wav|9
|
1954 |
+
./Data/p254/88.wav|14
|
1955 |
+
./Data/p227/108.wav|11
|
1956 |
+
./Data/p258/123.wav|16
|
1957 |
+
./Data/p233/95.wav|5
|
1958 |
+
./Data/p259/142.wav|17
|
1959 |
+
./Data/p231/73.wav|4
|
1960 |
+
./Data/p258/52.wav|16
|
1961 |
+
./Data/p236/89.wav|6
|
1962 |
+
./Data/p229/67.wav|2
|
1963 |
+
./Data/p258/46.wav|16
|
1964 |
+
./Data/p231/132.wav|4
|
1965 |
+
./Data/p227/41.wav|11
|
1966 |
+
./Data/p256/114.wav|15
|
1967 |
+
./Data/p232/10.wav|12
|
1968 |
+
./Data/p225/46.wav|0
|
1969 |
+
./Data/p231/61.wav|4
|
1970 |
+
./Data/p229/30.wav|2
|
1971 |
+
./Data/p236/101.wav|6
|
1972 |
+
./Data/p256/20.wav|15
|
1973 |
+
./Data/p226/60.wav|10
|
1974 |
+
./Data/p259/18.wav|17
|
1975 |
+
./Data/p236/151.wav|6
|
1976 |
+
./Data/p233/130.wav|5
|
1977 |
+
./Data/p273/91.wav|19
|
1978 |
+
./Data/p225/59.wav|0
|
1979 |
+
./Data/p227/83.wav|11
|
1980 |
+
./Data/p226/127.wav|10
|
1981 |
+
./Data/p270/137.wav|18
|
1982 |
+
./Data/p258/95.wav|16
|
1983 |
+
./Data/p227/42.wav|11
|
1984 |
+
./Data/p230/108.wav|3
|
1985 |
+
./Data/p243/137.wav|13
|
1986 |
+
./Data/p228/157.wav|1
|
1987 |
+
./Data/p243/105.wav|13
|
1988 |
+
./Data/p228/133.wav|1
|
1989 |
+
./Data/p270/93.wav|18
|
1990 |
+
./Data/p256/86.wav|15
|
1991 |
+
./Data/p254/17.wav|14
|
1992 |
+
./Data/p227/135.wav|11
|
1993 |
+
./Data/p228/118.wav|1
|
1994 |
+
./Data/p239/142.wav|7
|
1995 |
+
./Data/p273/137.wav|19
|
1996 |
+
./Data/p259/79.wav|17
|
1997 |
+
./Data/p259/108.wav|17
|
1998 |
+
./Data/p226/15.wav|10
|
1999 |
+
./Data/p231/43.wav|4
|
2000 |
+
./Data/p256/16.wav|15
|
2001 |
+
./Data/p232/20.wav|12
|
2002 |
+
./Data/p258/35.wav|16
|
2003 |
+
./Data/p243/141.wav|13
|
2004 |
+
./Data/p232/104.wav|12
|
2005 |
+
./Data/p259/58.wav|17
|
2006 |
+
./Data/p258/82.wav|16
|
2007 |
+
./Data/p233/76.wav|5
|
2008 |
+
./Data/p270/126.wav|18
|
2009 |
+
./Data/p236/70.wav|6
|
2010 |
+
./Data/p240/49.wav|8
|
2011 |
+
./Data/p256/106.wav|15
|
2012 |
+
./Data/p254/55.wav|14
|
2013 |
+
./Data/p270/2.wav|18
|
2014 |
+
./Data/p270/143.wav|18
|
2015 |
+
./Data/p229/48.wav|2
|
2016 |
+
./Data/p244/6.wav|9
|
2017 |
+
./Data/p233/65.wav|5
|
2018 |
+
./Data/p233/18.wav|5
|
2019 |
+
./Data/p244/87.wav|9
|
2020 |
+
./Data/p236/133.wav|6
|
2021 |
+
./Data/p227/2.wav|11
|
2022 |
+
./Data/p227/17.wav|11
|
2023 |
+
./Data/p273/111.wav|19
|
2024 |
+
./Data/p230/98.wav|3
|
2025 |
+
./Data/p226/120.wav|10
|
2026 |
+
./Data/p226/112.wav|10
|
2027 |
+
./Data/p230/161.wav|3
|
2028 |
+
./Data/p254/79.wav|14
|
2029 |
+
./Data/p230/101.wav|3
|
2030 |
+
./Data/p239/96.wav|7
|
2031 |
+
./Data/p228/159.wav|1
|
2032 |
+
./Data/p230/24.wav|3
|
2033 |
+
./Data/p240/28.wav|8
|
2034 |
+
./Data/p254/125.wav|14
|
2035 |
+
./Data/p259/168.wav|17
|
2036 |
+
./Data/p228/18.wav|1
|
2037 |
+
./Data/p270/88.wav|18
|
2038 |
+
./Data/p270/25.wav|18
|
2039 |
+
./Data/p231/89.wav|4
|
2040 |
+
./Data/p230/14.wav|3
|
2041 |
+
./Data/p254/63.wav|14
|
2042 |
+
./Data/p233/53.wav|5
|
2043 |
+
./Data/p225/54.wav|0
|
2044 |
+
./Data/p243/19.wav|13
|
2045 |
+
./Data/p259/139.wav|17
|
2046 |
+
./Data/p229/87.wav|2
|
2047 |
+
./Data/p232/56.wav|12
|
2048 |
+
./Data/p270/97.wav|18
|
2049 |
+
./Data/p232/95.wav|12
|
2050 |
+
./Data/p232/86.wav|12
|
2051 |
+
./Data/p259/137.wav|17
|
2052 |
+
./Data/p228/147.wav|1
|
2053 |
+
./Data/p273/112.wav|19
|
2054 |
+
./Data/p243/80.wav|13
|
2055 |
+
./Data/p233/72.wav|5
|
2056 |
+
./Data/p233/114.wav|5
|
2057 |
+
./Data/p240/23.wav|8
|
2058 |
+
./Data/p236/164.wav|6
|
2059 |
+
./Data/p236/144.wav|6
|
2060 |
+
./Data/p254/116.wav|14
|
2061 |
+
./Data/p273/105.wav|19
|
2062 |
+
./Data/p239/48.wav|7
|
2063 |
+
./Data/p236/68.wav|6
|
2064 |
+
./Data/p233/87.wav|5
|
2065 |
+
./Data/p239/50.wav|7
|
2066 |
+
./Data/p256/66.wav|15
|
2067 |
+
./Data/p270/159.wav|18
|
2068 |
+
./Data/p273/53.wav|19
|
2069 |
+
./Data/p254/28.wav|14
|
2070 |
+
./Data/p259/28.wav|17
|
2071 |
+
./Data/p227/89.wav|11
|
2072 |
+
./Data/p243/1.wav|13
|
2073 |
+
./Data/p239/61.wav|7
|
2074 |
+
./Data/p226/28.wav|10
|
2075 |
+
./Data/p232/113.wav|12
|
2076 |
+
./Data/p225/38.wav|0
|
2077 |
+
./Data/p236/128.wav|6
|
2078 |
+
./Data/p225/3.wav|0
|
2079 |
+
./Data/p258/83.wav|16
|
2080 |
+
./Data/p270/195.wav|18
|
2081 |
+
./Data/p231/69.wav|4
|
2082 |
+
./Data/p254/49.wav|14
|
2083 |
+
./Data/p226/135.wav|10
|
2084 |
+
./Data/p230/3.wav|3
|
2085 |
+
./Data/p228/124.wav|1
|
2086 |
+
./Data/p233/119.wav|5
|
2087 |
+
./Data/p229/31.wav|2
|
2088 |
+
./Data/p256/54.wav|15
|
2089 |
+
./Data/p258/121.wav|16
|
2090 |
+
./Data/p231/57.wav|4
|
2091 |
+
./Data/p244/84.wav|9
|
2092 |
+
./Data/p244/113.wav|9
|
2093 |
+
./Data/p228/71.wav|1
|
2094 |
+
./Data/p270/86.wav|18
|
2095 |
+
./Data/p254/98.wav|14
|
2096 |
+
./Data/p225/19.wav|0
|
2097 |
+
./Data/p258/21.wav|16
|
2098 |
+
./Data/p259/60.wav|17
|
2099 |
+
./Data/p227/105.wav|11
|
2100 |
+
./Data/p258/142.wav|16
|
2101 |
+
./Data/p230/52.wav|3
|
2102 |
+
./Data/p227/6.wav|11
|
2103 |
+
./Data/p244/139.wav|9
|
2104 |
+
./Data/p226/128.wav|10
|
2105 |
+
./Data/p239/70.wav|7
|
2106 |
+
./Data/p273/28.wav|19
|
2107 |
+
./Data/p230/171.wav|3
|
2108 |
+
./Data/p270/113.wav|18
|
2109 |
+
./Data/p259/19.wav|17
|
2110 |
+
./Data/p225/68.wav|0
|
2111 |
+
./Data/p239/73.wav|7
|
2112 |
+
./Data/p254/44.wav|14
|
2113 |
+
./Data/p240/113.wav|8
|
2114 |
+
./Data/p244/77.wav|9
|
2115 |
+
./Data/p259/49.wav|17
|
2116 |
+
./Data/p225/86.wav|0
|
2117 |
+
./Data/p258/94.wav|16
|
2118 |
+
./Data/p244/17.wav|9
|
2119 |
+
./Data/p227/12.wav|11
|
2120 |
+
./Data/p239/150.wav|7
|
2121 |
+
./Data/p225/10.wav|0
|
2122 |
+
./Data/p230/114.wav|3
|
2123 |
+
./Data/p258/69.wav|16
|
2124 |
+
./Data/p231/117.wav|4
|
2125 |
+
./Data/p244/23.wav|9
|
2126 |
+
./Data/p273/60.wav|19
|
2127 |
+
./Data/p259/156.wav|17
|
2128 |
+
./Data/p239/158.wav|7
|
2129 |
+
./Data/p244/102.wav|9
|
2130 |
+
./Data/p236/85.wav|6
|
2131 |
+
./Data/p259/2.wav|17
|
2132 |
+
./Data/p259/83.wav|17
|
2133 |
+
./Data/p226/40.wav|10
|
2134 |
+
./Data/p270/34.wav|18
|
2135 |
+
./Data/p240/99.wav|8
|
2136 |
+
./Data/p259/95.wav|17
|
2137 |
+
./Data/p240/79.wav|8
|
2138 |
+
./Data/p239/102.wav|7
|
2139 |
+
./Data/p273/57.wav|19
|
2140 |
+
./Data/p243/85.wav|13
|
2141 |
+
./Data/p239/149.wav|7
|
2142 |
+
./Data/p232/28.wav|12
|
2143 |
+
./Data/p254/25.wav|14
|
2144 |
+
./Data/p233/42.wav|5
|
2145 |
+
./Data/p227/39.wav|11
|
2146 |
+
./Data/p270/77.wav|18
|
2147 |
+
./Data/p233/51.wav|5
|
2148 |
+
./Data/p256/100.wav|15
|
2149 |
+
./Data/p258/140.wav|16
|
2150 |
+
./Data/p229/131.wav|2
|
2151 |
+
./Data/p243/52.wav|13
|
2152 |
+
./Data/p258/84.wav|16
|
2153 |
+
./Data/p229/138.wav|2
|
2154 |
+
./Data/p240/61.wav|8
|
2155 |
+
./Data/p254/27.wav|14
|
2156 |
+
./Data/p232/21.wav|12
|
2157 |
+
./Data/p226/38.wav|10
|
2158 |
+
./Data/p230/158.wav|3
|
2159 |
+
./Data/p256/52.wav|15
|
2160 |
+
./Data/p243/95.wav|13
|
2161 |
+
./Data/p243/89.wav|13
|
2162 |
+
./Data/p226/61.wav|10
|
2163 |
+
./Data/p230/117.wav|3
|
2164 |
+
./Data/p230/92.wav|3
|
2165 |
+
./Data/p236/55.wav|6
|
2166 |
+
./Data/p254/18.wav|14
|
2167 |
+
./Data/p254/129.wav|14
|
2168 |
+
./Data/p259/113.wav|17
|
2169 |
+
./Data/p225/25.wav|0
|
2170 |
+
./Data/p240/134.wav|8
|
2171 |
+
./Data/p230/86.wav|3
|
2172 |
+
./Data/p256/84.wav|15
|
2173 |
+
./Data/p228/99.wav|1
|
2174 |
+
./Data/p239/90.wav|7
|
2175 |
+
./Data/p230/155.wav|3
|
2176 |
+
./Data/p228/40.wav|1
|
2177 |
+
./Data/p254/72.wav|14
|
2178 |
+
./Data/p231/38.wav|4
|
2179 |
+
./Data/p225/32.wav|0
|
2180 |
+
./Data/p228/22.wav|1
|
2181 |
+
./Data/p231/7.wav|4
|
2182 |
+
./Data/p254/39.wav|14
|
2183 |
+
./Data/p240/112.wav|8
|
2184 |
+
./Data/p270/183.wav|18
|
2185 |
+
./Data/p270/60.wav|18
|
2186 |
+
./Data/p236/120.wav|6
|
2187 |
+
./Data/p239/145.wav|7
|
2188 |
+
./Data/p240/31.wav|8
|
2189 |
+
./Data/p229/115.wav|2
|
2190 |
+
./Data/p233/121.wav|5
|
2191 |
+
./Data/p228/33.wav|1
|
2192 |
+
./Data/p228/83.wav|1
|
2193 |
+
./Data/p258/58.wav|16
|
2194 |
+
./Data/p239/106.wav|7
|
2195 |
+
./Data/p273/123.wav|19
|
2196 |
+
./Data/p244/50.wav|9
|
2197 |
+
./Data/p229/50.wav|2
|
2198 |
+
./Data/p270/131.wav|18
|
2199 |
+
./Data/p236/8.wav|6
|
2200 |
+
./Data/p244/114.wav|9
|
2201 |
+
./Data/p230/153.wav|3
|
2202 |
+
./Data/p226/53.wav|10
|
2203 |
+
./Data/p240/93.wav|8
|
2204 |
+
./Data/p229/122.wav|2
|
2205 |
+
./Data/p256/90.wav|15
|
2206 |
+
./Data/p231/112.wav|4
|
2207 |
+
./Data/p270/48.wav|18
|
2208 |
+
./Data/p230/36.wav|3
|
2209 |
+
./Data/p230/135.wav|3
|
2210 |
+
./Data/p259/172.wav|17
|
2211 |
+
./Data/p229/55.wav|2
|
2212 |
+
./Data/p244/60.wav|9
|
2213 |
+
./Data/p232/75.wav|12
|
2214 |
+
./Data/p259/68.wav|17
|
2215 |
+
./Data/p233/7.wav|5
|
2216 |
+
./Data/p233/3.wav|5
|
2217 |
+
./Data/p226/141.wav|10
|
2218 |
+
./Data/p254/32.wav|14
|
2219 |
+
./Data/p239/26.wav|7
|
2220 |
+
./Data/p226/119.wav|10
|
2221 |
+
./Data/p239/173.wav|7
|
2222 |
+
./Data/p230/157.wav|3
|
2223 |
+
./Data/p236/157.wav|6
|
2224 |
+
./Data/p226/13.wav|10
|
2225 |
+
./Data/p254/68.wav|14
|
2226 |
+
./Data/p225/87.wav|0
|
2227 |
+
./Data/p231/118.wav|4
|
2228 |
+
./Data/p240/98.wav|8
|
2229 |
+
./Data/p233/5.wav|5
|
2230 |
+
./Data/p227/56.wav|11
|
2231 |
+
./Data/p239/93.wav|7
|
2232 |
+
./Data/p240/25.wav|8
|
2233 |
+
./Data/p243/142.wav|13
|
2234 |
+
./Data/p254/110.wav|14
|
2235 |
+
./Data/p230/138.wav|3
|
2236 |
+
./Data/p226/16.wav|10
|
2237 |
+
./Data/p270/189.wav|18
|
2238 |
+
./Data/p229/95.wav|2
|
2239 |
+
./Data/p231/37.wav|4
|
2240 |
+
./Data/p240/44.wav|8
|
2241 |
+
./Data/p228/46.wav|1
|
2242 |
+
./Data/p236/62.wav|6
|
2243 |
+
./Data/p226/20.wav|10
|
2244 |
+
./Data/p228/105.wav|1
|
2245 |
+
./Data/p258/44.wav|16
|
2246 |
+
./Data/p258/23.wav|16
|
2247 |
+
./Data/p270/108.wav|18
|
2248 |
+
./Data/p243/151.wav|13
|
2249 |
+
./Data/p239/170.wav|7
|
2250 |
+
./Data/p244/100.wav|9
|
2251 |
+
./Data/p258/81.wav|16
|
2252 |
+
./Data/p236/153.wav|6
|
2253 |
+
./Data/p229/5.wav|2
|
2254 |
+
./Data/p256/112.wav|15
|
2255 |
+
./Data/p258/70.wav|16
|
2256 |
+
./Data/p240/57.wav|8
|
2257 |
+
./Data/p244/36.wav|9
|
2258 |
+
./Data/p273/19.wav|19
|
2259 |
+
./Data/p233/75.wav|5
|
2260 |
+
./Data/p259/111.wav|17
|
2261 |
+
./Data/p243/100.wav|13
|
2262 |
+
./Data/p226/86.wav|10
|
2263 |
+
./Data/p256/26.wav|15
|
2264 |
+
./Data/p236/22.wav|6
|
2265 |
+
./Data/p229/124.wav|2
|
2266 |
+
./Data/p229/62.wav|2
|
2267 |
+
./Data/p258/87.wav|16
|
2268 |
+
./Data/p232/22.wav|12
|
2269 |
+
./Data/p259/158.wav|17
|
2270 |
+
./Data/p229/135.wav|2
|
2271 |
+
./Data/p233/118.wav|5
|
2272 |
+
./Data/p236/134.wav|6
|
2273 |
+
./Data/p226/34.wav|10
|
2274 |
+
./Data/p236/93.wav|6
|
2275 |
+
./Data/p243/108.wav|13
|
2276 |
+
./Data/p270/177.wav|18
|
2277 |
+
./Data/p239/30.wav|7
|
2278 |
+
./Data/p273/17.wav|19
|
2279 |
+
./Data/p231/110.wav|4
|
2280 |
+
./Data/p229/119.wav|2
|
2281 |
+
./Data/p243/130.wav|13
|
2282 |
+
./Data/p256/127.wav|15
|
2283 |
+
./Data/p226/105.wav|10
|
2284 |
+
./Data/p229/52.wav|2
|
2285 |
+
./Data/p226/54.wav|10
|
2286 |
+
./Data/p273/87.wav|19
|
2287 |
+
./Data/p270/57.wav|18
|
2288 |
+
./Data/p240/131.wav|8
|
2289 |
+
./Data/p273/117.wav|19
|
2290 |
+
./Data/p240/77.wav|8
|
2291 |
+
./Data/p233/32.wav|5
|
2292 |
+
./Data/p236/25.wav|6
|
2293 |
+
./Data/p227/79.wav|11
|
2294 |
+
./Data/p258/64.wav|16
|
2295 |
+
./Data/p240/92.wav|8
|
2296 |
+
./Data/p244/74.wav|9
|
2297 |
+
./Data/p228/120.wav|1
|
2298 |
+
./Data/p230/45.wav|3
|
2299 |
+
./Data/p225/89.wav|0
|
2300 |
+
./Data/p226/95.wav|10
|
2301 |
+
./Data/p270/80.wav|18
|
2302 |
+
./Data/p226/111.wav|10
|
2303 |
+
./Data/p243/2.wav|13
|
2304 |
+
./Data/p259/6.wav|17
|
2305 |
+
./Data/p227/85.wav|11
|
2306 |
+
./Data/p233/106.wav|5
|
2307 |
+
./Data/p227/14.wav|11
|
2308 |
+
./Data/p231/50.wav|4
|
2309 |
+
./Data/p230/139.wav|3
|
2310 |
+
./Data/p229/70.wav|2
|
2311 |
+
./Data/p258/14.wav|16
|
2312 |
+
./Data/p240/116.wav|8
|
2313 |
+
./Data/p225/64.wav|0
|
2314 |
+
./Data/p225/8.wav|0
|
2315 |
+
./Data/p243/113.wav|13
|
2316 |
+
./Data/p254/102.wav|14
|
2317 |
+
./Data/p270/148.wav|18
|
2318 |
+
./Data/p232/12.wav|12
|
2319 |
+
./Data/p259/22.wav|17
|
2320 |
+
./Data/p273/4.wav|19
|
2321 |
+
./Data/p244/133.wav|9
|
2322 |
+
./Data/p228/101.wav|1
|
2323 |
+
./Data/p273/31.wav|19
|
2324 |
+
./Data/p258/76.wav|16
|
2325 |
+
./Data/p227/146.wav|11
|
2326 |
+
./Data/p231/54.wav|4
|
2327 |
+
./Data/p236/37.wav|6
|
2328 |
+
./Data/p244/82.wav|9
|
2329 |
+
./Data/p225/17.wav|0
|
2330 |
+
./Data/p243/76.wav|13
|
2331 |
+
./Data/p273/140.wav|19
|
2332 |
+
./Data/p239/15.wav|7
|
2333 |
+
./Data/p230/19.wav|3
|
2334 |
+
./Data/p240/117.wav|8
|
2335 |
+
./Data/p244/94.wav|9
|
2336 |
+
./Data/p236/26.wav|6
|
2337 |
+
./Data/p259/99.wav|17
|
2338 |
+
./Data/p225/77.wav|0
|
2339 |
+
./Data/p244/31.wav|9
|
2340 |
+
./Data/p244/98.wav|9
|
2341 |
+
./Data/p243/59.wav|13
|
2342 |
+
./Data/p228/163.wav|1
|
2343 |
+
./Data/p270/141.wav|18
|
2344 |
+
./Data/p230/94.wav|3
|
2345 |
+
./Data/p228/110.wav|1
|
2346 |
+
./Data/p243/160.wav|13
|
2347 |
+
./Data/p239/162.wav|7
|
2348 |
+
./Data/p232/112.wav|12
|
2349 |
+
./Data/p273/54.wav|19
|
2350 |
+
./Data/p259/110.wav|17
|
2351 |
+
./Data/p244/64.wav|9
|
2352 |
+
./Data/p259/170.wav|17
|
2353 |
+
./Data/p230/53.wav|3
|
2354 |
+
./Data/p228/8.wav|1
|
2355 |
+
./Data/p232/80.wav|12
|
2356 |
+
./Data/p273/56.wav|19
|
2357 |
+
./Data/p256/93.wav|15
|
2358 |
+
./Data/p258/50.wav|16
|
2359 |
+
./Data/p231/41.wav|4
|
2360 |
+
./Data/p236/76.wav|6
|
2361 |
+
./Data/p229/65.wav|2
|
2362 |
+
./Data/p243/46.wav|13
|
2363 |
+
./Data/p228/31.wav|1
|
2364 |
+
./Data/p240/89.wav|8
|
2365 |
+
./Data/p240/119.wav|8
|
2366 |
+
./Data/p243/31.wav|13
|
2367 |
+
./Data/p273/122.wav|19
|
2368 |
+
./Data/p236/113.wav|6
|
2369 |
+
./Data/p232/67.wav|12
|
2370 |
+
./Data/p270/188.wav|18
|
2371 |
+
./Data/p256/46.wav|15
|
2372 |
+
./Data/p230/12.wav|3
|
2373 |
+
./Data/p236/156.wav|6
|
2374 |
+
./Data/p243/157.wav|13
|
2375 |
+
./Data/p239/22.wav|7
|
2376 |
+
./Data/p232/107.wav|12
|
2377 |
+
./Data/p229/28.wav|2
|
2378 |
+
./Data/p236/31.wav|6
|
2379 |
+
./Data/p254/50.wav|14
|
2380 |
+
./Data/p232/43.wav|12
|
2381 |
+
./Data/p244/142.wav|9
|
2382 |
+
./Data/p270/186.wav|18
|
2383 |
+
./Data/p258/139.wav|16
|
2384 |
+
./Data/p228/156.wav|1
|
2385 |
+
./Data/p256/12.wav|15
|
2386 |
+
./Data/p256/63.wav|15
|
2387 |
+
./Data/p230/116.wav|3
|
2388 |
+
./Data/p254/131.wav|14
|
2389 |
+
./Data/p243/139.wav|13
|
2390 |
+
./Data/p226/93.wav|10
|
2391 |
+
./Data/p239/98.wav|7
|
2392 |
+
./Data/p256/94.wav|15
|
2393 |
+
./Data/p243/102.wav|13
|
2394 |
+
./Data/p240/3.wav|8
|
2395 |
+
./Data/p258/86.wav|16
|
2396 |
+
./Data/p227/28.wav|11
|
2397 |
+
./Data/p228/49.wav|1
|
2398 |
+
./Data/p270/47.wav|18
|
2399 |
+
./Data/p226/88.wav|10
|
2400 |
+
./Data/p232/36.wav|12
|
2401 |
+
./Data/p259/90.wav|17
|
2402 |
+
./Data/p244/5.wav|9
|
2403 |
+
./Data/p243/122.wav|13
|
2404 |
+
./Data/p254/10.wav|14
|
2405 |
+
./Data/p254/64.wav|14
|
2406 |
+
./Data/p273/47.wav|19
|
2407 |
+
./Data/p243/171.wav|13
|
2408 |
+
./Data/p243/4.wav|13
|
2409 |
+
./Data/p230/128.wav|3
|
2410 |
+
./Data/p229/84.wav|2
|
2411 |
+
./Data/p259/39.wav|17
|
2412 |
+
./Data/p236/5.wav|6
|
2413 |
+
./Data/p225/47.wav|0
|
2414 |
+
./Data/p258/134.wav|16
|
2415 |
+
./Data/p259/12.wav|17
|
2416 |
+
./Data/p244/9.wav|9
|
2417 |
+
./Data/p227/98.wav|11
|
2418 |
+
./Data/p227/65.wav|11
|
2419 |
+
./Data/p226/114.wav|10
|
2420 |
+
./Data/p229/113.wav|2
|
2421 |
+
./Data/p240/16.wav|8
|
2422 |
+
./Data/p227/118.wav|11
|
2423 |
+
./Data/p258/56.wav|16
|
2424 |
+
./Data/p270/150.wav|18
|
2425 |
+
./Data/p256/85.wav|15
|
2426 |
+
./Data/p259/92.wav|17
|
2427 |
+
./Data/p239/84.wav|7
|
2428 |
+
./Data/p240/86.wav|8
|
2429 |
+
./Data/p225/11.wav|0
|
2430 |
+
./Data/p226/25.wav|10
|
2431 |
+
./Data/p270/65.wav|18
|
2432 |
+
./Data/p239/79.wav|7
|
2433 |
+
./Data/p240/76.wav|8
|
2434 |
+
./Data/p270/190.wav|18
|
2435 |
+
./Data/p236/163.wav|6
|
2436 |
+
./Data/p236/36.wav|6
|
2437 |
+
./Data/p240/41.wav|8
|
2438 |
+
./Data/p226/2.wav|10
|
2439 |
+
./Data/p230/104.wav|3
|
2440 |
+
./Data/p243/106.wav|13
|
2441 |
+
./Data/p243/90.wav|13
|
2442 |
+
./Data/p240/27.wav|8
|
2443 |
+
./Data/p240/30.wav|8
|
2444 |
+
./Data/p231/121.wav|4
|
2445 |
+
./Data/p239/8.wav|7
|
2446 |
+
./Data/p230/10.wav|3
|
2447 |
+
./Data/p239/104.wav|7
|
2448 |
+
./Data/p233/96.wav|5
|
2449 |
+
./Data/p236/33.wav|6
|
2450 |
+
./Data/p254/85.wav|14
|
2451 |
+
./Data/p227/26.wav|11
|
2452 |
+
./Data/p233/134.wav|5
|
2453 |
+
./Data/p230/48.wav|3
|
2454 |
+
./Data/p232/59.wav|12
|
2455 |
+
./Data/p239/156.wav|7
|
2456 |
+
./Data/p236/84.wav|6
|
2457 |
+
./Data/p228/63.wav|1
|
2458 |
+
./Data/p229/24.wav|2
|
2459 |
+
./Data/p236/155.wav|6
|
2460 |
+
./Data/p228/138.wav|1
|
2461 |
+
./Data/p270/185.wav|18
|
2462 |
+
./Data/p228/76.wav|1
|
2463 |
+
./Data/p254/115.wav|14
|
2464 |
+
./Data/p231/52.wav|4
|
2465 |
+
./Data/p273/8.wav|19
|
2466 |
+
./Data/p228/132.wav|1
|
2467 |
+
./Data/p273/59.wav|19
|
2468 |
+
./Data/p229/73.wav|2
|
2469 |
+
./Data/p259/152.wav|17
|
2470 |
+
./Data/p230/31.wav|3
|
2471 |
+
./Data/p230/35.wav|3
|
2472 |
+
./Data/p258/80.wav|16
|
2473 |
+
./Data/p225/61.wav|0
|
2474 |
+
./Data/p236/21.wav|6
|
2475 |
+
./Data/p232/127.wav|12
|
2476 |
+
./Data/p256/72.wav|15
|
2477 |
+
./Data/p244/123.wav|9
|
2478 |
+
./Data/p244/141.wav|9
|
2479 |
+
./Data/p270/69.wav|18
|
2480 |
+
./Data/p227/51.wav|11
|
2481 |
+
./Data/p273/11.wav|19
|
2482 |
+
./Data/p243/112.wav|13
|
2483 |
+
./Data/p254/16.wav|14
|
2484 |
+
./Data/p226/3.wav|10
|
2485 |
+
./Data/p231/36.wav|4
|
2486 |
+
./Data/p243/159.wav|13
|
2487 |
+
./Data/p228/55.wav|1
|
2488 |
+
./Data/p229/18.wav|2
|
2489 |
+
./Data/p273/22.wav|19
|
2490 |
+
./Data/p270/101.wav|18
|
2491 |
+
./Data/p227/62.wav|11
|
2492 |
+
./Data/p270/111.wav|18
|
2493 |
+
./Data/p254/73.wav|14
|
2494 |
+
./Data/p256/81.wav|15
|
2495 |
+
./Data/p226/116.wav|10
|
2496 |
+
./Data/p236/154.wav|6
|
2497 |
+
./Data/p233/98.wav|5
|
2498 |
+
./Data/p239/68.wav|7
|
2499 |
+
./Data/p273/69.wav|19
|
2500 |
+
./Data/p236/92.wav|6
|
2501 |
+
./Data/p273/81.wav|19
|
2502 |
+
./Data/p225/43.wav|0
|
2503 |
+
./Data/p230/27.wav|3
|
2504 |
+
./Data/p227/54.wav|11
|
2505 |
+
./Data/p233/113.wav|5
|
2506 |
+
./Data/p236/23.wav|6
|
2507 |
+
./Data/p236/51.wav|6
|
2508 |
+
./Data/p233/50.wav|5
|
2509 |
+
./Data/p225/76.wav|0
|
2510 |
+
./Data/p244/21.wav|9
|
2511 |
+
./Data/p228/53.wav|1
|
2512 |
+
./Data/p240/148.wav|8
|
2513 |
+
./Data/p243/173.wav|13
|
2514 |
+
./Data/p270/105.wav|18
|
2515 |
+
./Data/p227/13.wav|11
|
2516 |
+
./Data/p228/121.wav|1
|
2517 |
+
./Data/p233/128.wav|5
|
2518 |
+
./Data/p256/82.wav|15
|
2519 |
+
./Data/p244/76.wav|9
|
2520 |
+
./Data/p232/9.wav|12
|
2521 |
+
./Data/p239/4.wav|7
|
2522 |
+
./Data/p240/106.wav|8
|
2523 |
+
./Data/p270/81.wav|18
|
2524 |
+
./Data/p225/48.wav|0
|
2525 |
+
./Data/p254/67.wav|14
|
2526 |
+
./Data/p240/66.wav|8
|
2527 |
+
./Data/p259/47.wav|17
|
2528 |
+
./Data/p230/63.wav|3
|
2529 |
+
./Data/p230/141.wav|3
|
2530 |
+
./Data/p231/137.wav|4
|
2531 |
+
./Data/p227/133.wav|11
|
2532 |
+
./Data/p259/100.wav|17
|
2533 |
+
./Data/p259/171.wav|17
|
2534 |
+
./Data/p240/56.wav|8
|
2535 |
+
./Data/p273/126.wav|19
|
2536 |
+
./Data/p256/32.wav|15
|
2537 |
+
./Data/p270/79.wav|18
|
2538 |
+
./Data/p227/46.wav|11
|
2539 |
+
./Data/p228/51.wav|1
|
2540 |
+
./Data/p243/54.wav|13
|
2541 |
+
./Data/p258/141.wav|16
|
2542 |
+
./Data/p226/31.wav|10
|
2543 |
+
./Data/p236/137.wav|6
|
2544 |
+
./Data/p230/30.wav|3
|
2545 |
+
./Data/p236/34.wav|6
|
2546 |
+
./Data/p228/35.wav|1
|
2547 |
+
./Data/p244/56.wav|9
|
2548 |
+
./Data/p230/107.wav|3
|
2549 |
+
./Data/p240/36.wav|8
|
2550 |
+
./Data/p233/62.wav|5
|
2551 |
+
./Data/p239/112.wav|7
|
2552 |
+
./Data/p231/42.wav|4
|
2553 |
+
./Data/p256/9.wav|15
|
2554 |
+
./Data/p227/23.wav|11
|
2555 |
+
./Data/p236/32.wav|6
|
2556 |
+
./Data/p228/67.wav|1
|
2557 |
+
./Data/p225/72.wav|0
|
2558 |
+
./Data/p232/82.wav|12
|
2559 |
+
./Data/p244/68.wav|9
|
2560 |
+
./Data/p230/145.wav|3
|
2561 |
+
./Data/p239/5.wav|7
|
2562 |
+
./Data/p230/154.wav|3
|
2563 |
+
./Data/p232/98.wav|12
|
2564 |
+
./Data/p243/136.wav|13
|
2565 |
+
./Data/p228/115.wav|1
|
2566 |
+
./Data/p226/5.wav|10
|
2567 |
+
./Data/p240/52.wav|8
|
2568 |
+
./Data/p270/170.wav|18
|
2569 |
+
./Data/p243/93.wav|13
|
2570 |
+
./Data/p243/26.wav|13
|
2571 |
+
./Data/p230/136.wav|3
|
2572 |
+
./Data/p226/97.wav|10
|
2573 |
+
./Data/p229/136.wav|2
|
2574 |
+
./Data/p227/136.wav|11
|
2575 |
+
./Data/p236/119.wav|6
|
2576 |
+
./Data/p232/14.wav|12
|
2577 |
+
./Data/p254/138.wav|14
|
2578 |
+
./Data/p240/143.wav|8
|
2579 |
+
./Data/p259/122.wav|17
|
2580 |
+
./Data/p270/205.wav|18
|
2581 |
+
./Data/p254/100.wav|14
|
2582 |
+
./Data/p270/149.wav|18
|
2583 |
+
./Data/p259/9.wav|17
|
2584 |
+
./Data/p226/96.wav|10
|
2585 |
+
./Data/p230/23.wav|3
|
2586 |
+
./Data/p244/72.wav|9
|
2587 |
+
./Data/p259/73.wav|17
|
2588 |
+
./Data/p227/68.wav|11
|
2589 |
+
./Data/p226/75.wav|10
|
2590 |
+
./Data/p236/109.wav|6
|
2591 |
+
./Data/p258/102.wav|16
|
2592 |
+
./Data/p232/44.wav|12
|
2593 |
+
./Data/p243/27.wav|13
|
2594 |
+
./Data/p232/126.wav|12
|
2595 |
+
./Data/p240/14.wav|8
|
2596 |
+
./Data/p226/71.wav|10
|
2597 |
+
./Data/p230/88.wav|3
|
2598 |
+
./Data/p233/45.wav|5
|
2599 |
+
./Data/p244/103.wav|9
|
2600 |
+
./Data/p232/26.wav|12
|
2601 |
+
./Data/p229/101.wav|2
|
2602 |
+
./Data/p229/44.wav|2
|
2603 |
+
./Data/p232/123.wav|12
|
2604 |
+
./Data/p228/129.wav|1
|
2605 |
+
./Data/p273/32.wav|19
|
2606 |
+
./Data/p232/125.wav|12
|
2607 |
+
./Data/p240/103.wav|8
|
2608 |
+
./Data/p254/128.wav|14
|
2609 |
+
./Data/p254/34.wav|14
|
2610 |
+
./Data/p240/19.wav|8
|
2611 |
+
./Data/p232/89.wav|12
|
2612 |
+
./Data/p273/73.wav|19
|
2613 |
+
./Data/p231/109.wav|4
|
2614 |
+
./Data/p270/124.wav|18
|
2615 |
+
./Data/p244/112.wav|9
|
2616 |
+
./Data/p256/117.wav|15
|
2617 |
+
./Data/p244/88.wav|9
|
2618 |
+
./Data/p228/17.wav|1
|
2619 |
+
./Data/p233/86.wav|5
|
2620 |
+
./Data/p254/23.wav|14
|
2621 |
+
./Data/p233/59.wav|5
|
2622 |
+
./Data/p232/25.wav|12
|
2623 |
+
./Data/p231/108.wav|4
|
2624 |
+
./Data/p258/103.wav|16
|
2625 |
+
./Data/p232/69.wav|12
|
2626 |
+
./Data/p230/65.wav|3
|
2627 |
+
./Data/p240/73.wav|8
|
2628 |
+
./Data/p243/125.wav|13
|
2629 |
+
./Data/p256/92.wav|15
|
2630 |
+
./Data/p270/31.wav|18
|
2631 |
+
./Data/p256/44.wav|15
|
2632 |
+
./Data/p236/98.wav|6
|
2633 |
+
./Data/p228/90.wav|1
|
2634 |
+
./Data/p231/125.wav|4
|
2635 |
+
./Data/p232/64.wav|12
|
2636 |
+
./Data/p273/80.wav|19
|
2637 |
+
./Data/p227/32.wav|11
|
2638 |
+
./Data/p226/17.wav|10
|
2639 |
+
./Data/p226/69.wav|10
|
2640 |
+
./Data/p231/142.wav|4
|
2641 |
+
./Data/p225/65.wav|0
|
2642 |
+
./Data/p229/64.wav|2
|
2643 |
+
./Data/p240/70.wav|8
|
2644 |
+
./Data/p225/85.wav|0
|
2645 |
+
./Data/p259/166.wav|17
|
2646 |
+
./Data/p230/119.wav|3
|
2647 |
+
./Data/p258/135.wav|16
|
2648 |
+
./Data/p225/60.wav|0
|
2649 |
+
./Data/p239/74.wav|7
|
2650 |
+
./Data/p233/117.wav|5
|
2651 |
+
./Data/p226/44.wav|10
|
2652 |
+
./Data/p227/103.wav|11
|
2653 |
+
./Data/p228/45.wav|1
|
2654 |
+
./Data/p244/52.wav|9
|
2655 |
+
./Data/p230/168.wav|3
|
2656 |
+
./Data/p259/71.wav|17
|
2657 |
+
./Data/p270/109.wav|18
|
2658 |
+
./Data/p243/164.wav|13
|
2659 |
+
./Data/p243/36.wav|13
|
2660 |
+
./Data/p270/12.wav|18
|
2661 |
+
./Data/p229/125.wav|2
|
2662 |
+
./Data/p259/51.wav|17
|
2663 |
+
./Data/p225/81.wav|0
|
2664 |
+
./Data/p240/133.wav|8
|
2665 |
+
./Data/p270/130.wav|18
|
2666 |
+
./Data/p228/37.wav|1
|
2667 |
+
./Data/p228/39.wav|1
|
2668 |
+
./Data/p240/35.wav|8
|
2669 |
+
./Data/p231/124.wav|4
|
2670 |
+
./Data/p244/121.wav|9
|
2671 |
+
./Data/p270/133.wav|18
|
2672 |
+
./Data/p227/110.wav|11
|
2673 |
+
./Data/p244/134.wav|9
|
2674 |
+
./Data/p254/59.wav|14
|
2675 |
+
./Data/p239/35.wav|7
|
2676 |
+
./Data/p236/150.wav|6
|
2677 |
+
./Data/p227/40.wav|11
|
2678 |
+
./Data/p258/13.wav|16
|
2679 |
+
./Data/p240/123.wav|8
|
2680 |
+
./Data/p231/141.wav|4
|
2681 |
+
./Data/p228/151.wav|1
|
2682 |
+
./Data/p236/45.wav|6
|
2683 |
+
./Data/p273/5.wav|19
|
2684 |
+
./Data/p231/113.wav|4
|
2685 |
+
./Data/p256/103.wav|15
|
2686 |
+
./Data/p227/87.wav|11
|
2687 |
+
./Data/p270/173.wav|18
|
2688 |
+
./Data/p243/104.wav|13
|
2689 |
+
./Data/p240/141.wav|8
|
2690 |
+
./Data/p240/128.wav|8
|
2691 |
+
./Data/p259/50.wav|17
|
2692 |
+
./Data/p231/8.wav|4
|
2693 |
+
./Data/p226/82.wav|10
|
2694 |
+
./Data/p243/110.wav|13
|
2695 |
+
./Data/p243/101.wav|13
|
2696 |
+
./Data/p259/132.wav|17
|
2697 |
+
./Data/p227/99.wav|11
|
2698 |
+
./Data/p259/42.wav|17
|
2699 |
+
./Data/p229/29.wav|2
|
2700 |
+
./Data/p236/104.wav|6
|
2701 |
+
./Data/p259/34.wav|17
|
2702 |
+
./Data/p254/117.wav|14
|
2703 |
+
./Data/p227/29.wav|11
|
2704 |
+
./Data/p258/111.wav|16
|
2705 |
+
./Data/p229/9.wav|2
|
2706 |
+
./Data/p240/26.wav|8
|
2707 |
+
./Data/p259/89.wav|17
|
2708 |
+
./Data/p270/21.wav|18
|
2709 |
+
./Data/p254/101.wav|14
|
2710 |
+
./Data/p259/40.wav|17
|
2711 |
+
./Data/p240/7.wav|8
|
2712 |
+
./Data/p240/114.wav|8
|
2713 |
+
./Data/p230/176.wav|3
|
2714 |
+
./Data/p231/47.wav|4
|
2715 |
+
./Data/p239/37.wav|7
|
2716 |
+
./Data/p232/51.wav|12
|
2717 |
+
./Data/p270/142.wav|18
|
2718 |
+
./Data/p254/6.wav|14
|
2719 |
+
./Data/p225/50.wav|0
|
2720 |
+
./Data/p227/91.wav|11
|
2721 |
+
./Data/p259/149.wav|17
|
2722 |
+
./Data/p259/125.wav|17
|
2723 |
+
./Data/p229/107.wav|2
|
2724 |
+
./Data/p228/10.wav|1
|
2725 |
+
./Data/p231/107.wav|4
|
Data/val_list.txt
ADDED
@@ -0,0 +1,303 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
./Data/p270/13.wav|18
|
2 |
+
./Data/p273/94.wav|19
|
3 |
+
./Data/p229/97.wav|2
|
4 |
+
./Data/p232/117.wav|12
|
5 |
+
./Data/p226/55.wav|10
|
6 |
+
./Data/p259/102.wav|17
|
7 |
+
./Data/p226/7.wav|10
|
8 |
+
./Data/p254/26.wav|14
|
9 |
+
./Data/p239/115.wav|7
|
10 |
+
./Data/p239/86.wav|7
|
11 |
+
./Data/p229/106.wav|2
|
12 |
+
./Data/p244/43.wav|9
|
13 |
+
./Data/p270/179.wav|18
|
14 |
+
./Data/p273/6.wav|19
|
15 |
+
./Data/p258/101.wav|16
|
16 |
+
./Data/p273/62.wav|19
|
17 |
+
./Data/p228/11.wav|1
|
18 |
+
./Data/p273/103.wav|19
|
19 |
+
./Data/p230/49.wav|3
|
20 |
+
./Data/p233/23.wav|5
|
21 |
+
./Data/p230/122.wav|3
|
22 |
+
./Data/p239/80.wav|7
|
23 |
+
./Data/p226/4.wav|10
|
24 |
+
./Data/p240/50.wav|8
|
25 |
+
./Data/p243/28.wav|13
|
26 |
+
./Data/p236/95.wav|6
|
27 |
+
./Data/p244/126.wav|9
|
28 |
+
./Data/p244/40.wav|9
|
29 |
+
./Data/p239/108.wav|7
|
30 |
+
./Data/p273/72.wav|19
|
31 |
+
./Data/p254/92.wav|14
|
32 |
+
./Data/p231/116.wav|4
|
33 |
+
./Data/p231/32.wav|4
|
34 |
+
./Data/p243/117.wav|13
|
35 |
+
./Data/p256/121.wav|15
|
36 |
+
./Data/p243/3.wav|13
|
37 |
+
./Data/p226/91.wav|10
|
38 |
+
./Data/p256/53.wav|15
|
39 |
+
./Data/p254/75.wav|14
|
40 |
+
./Data/p243/150.wav|13
|
41 |
+
./Data/p231/95.wav|4
|
42 |
+
./Data/p228/81.wav|1
|
43 |
+
./Data/p226/33.wav|10
|
44 |
+
./Data/p232/71.wav|12
|
45 |
+
./Data/p236/4.wav|6
|
46 |
+
./Data/p236/132.wav|6
|
47 |
+
./Data/p254/119.wav|14
|
48 |
+
./Data/p236/7.wav|6
|
49 |
+
./Data/p227/104.wav|11
|
50 |
+
./Data/p226/59.wav|10
|
51 |
+
./Data/p233/35.wav|5
|
52 |
+
./Data/p231/23.wav|4
|
53 |
+
./Data/p273/71.wav|19
|
54 |
+
./Data/p240/74.wav|8
|
55 |
+
./Data/p259/33.wav|17
|
56 |
+
./Data/p259/118.wav|17
|
57 |
+
./Data/p273/15.wav|19
|
58 |
+
./Data/p226/115.wav|10
|
59 |
+
./Data/p236/19.wav|6
|
60 |
+
./Data/p226/57.wav|10
|
61 |
+
./Data/p229/14.wav|2
|
62 |
+
./Data/p243/98.wav|13
|
63 |
+
./Data/p243/79.wav|13
|
64 |
+
./Data/p231/12.wav|4
|
65 |
+
./Data/p230/170.wav|3
|
66 |
+
./Data/p228/114.wav|1
|
67 |
+
./Data/p254/103.wav|14
|
68 |
+
./Data/p256/108.wav|15
|
69 |
+
./Data/p256/58.wav|15
|
70 |
+
./Data/p229/23.wav|2
|
71 |
+
./Data/p270/151.wav|18
|
72 |
+
./Data/p259/36.wav|17
|
73 |
+
./Data/p230/64.wav|3
|
74 |
+
./Data/p226/134.wav|10
|
75 |
+
./Data/p230/84.wav|3
|
76 |
+
./Data/p270/91.wav|18
|
77 |
+
./Data/p230/160.wav|3
|
78 |
+
./Data/p236/15.wav|6
|
79 |
+
./Data/p225/45.wav|0
|
80 |
+
./Data/p239/62.wav|7
|
81 |
+
./Data/p256/107.wav|15
|
82 |
+
./Data/p258/144.wav|16
|
83 |
+
./Data/p229/37.wav|2
|
84 |
+
./Data/p226/108.wav|10
|
85 |
+
./Data/p225/92.wav|0
|
86 |
+
./Data/p227/138.wav|11
|
87 |
+
./Data/p230/151.wav|3
|
88 |
+
./Data/p229/90.wav|2
|
89 |
+
./Data/p244/131.wav|9
|
90 |
+
./Data/p231/1.wav|4
|
91 |
+
./Data/p243/40.wav|13
|
92 |
+
./Data/p226/131.wav|10
|
93 |
+
./Data/p226/121.wav|10
|
94 |
+
./Data/p270/119.wav|18
|
95 |
+
./Data/p225/4.wav|0
|
96 |
+
./Data/p243/39.wav|13
|
97 |
+
./Data/p233/1.wav|5
|
98 |
+
./Data/p239/117.wav|7
|
99 |
+
./Data/p259/101.wav|17
|
100 |
+
./Data/p228/73.wav|1
|
101 |
+
./Data/p273/78.wav|19
|
102 |
+
./Data/p256/22.wav|15
|
103 |
+
./Data/p244/65.wav|9
|
104 |
+
./Data/p240/17.wav|8
|
105 |
+
./Data/p258/47.wav|16
|
106 |
+
./Data/p239/95.wav|7
|
107 |
+
./Data/p243/119.wav|13
|
108 |
+
./Data/p259/106.wav|17
|
109 |
+
./Data/p233/22.wav|5
|
110 |
+
./Data/p232/60.wav|12
|
111 |
+
./Data/p270/55.wav|18
|
112 |
+
./Data/p230/87.wav|3
|
113 |
+
./Data/p270/139.wav|18
|
114 |
+
./Data/p225/5.wav|0
|
115 |
+
./Data/p243/128.wav|13
|
116 |
+
./Data/p258/10.wav|16
|
117 |
+
./Data/p230/100.wav|3
|
118 |
+
./Data/p239/43.wav|7
|
119 |
+
./Data/p232/57.wav|12
|
120 |
+
./Data/p256/27.wav|15
|
121 |
+
./Data/p232/130.wav|12
|
122 |
+
./Data/p243/153.wav|13
|
123 |
+
./Data/p258/92.wav|16
|
124 |
+
./Data/p232/81.wav|12
|
125 |
+
./Data/p256/65.wav|15
|
126 |
+
./Data/p259/107.wav|17
|
127 |
+
./Data/p239/10.wav|7
|
128 |
+
./Data/p233/4.wav|5
|
129 |
+
./Data/p259/165.wav|17
|
130 |
+
./Data/p225/41.wav|0
|
131 |
+
./Data/p229/61.wav|2
|
132 |
+
./Data/p227/36.wav|11
|
133 |
+
./Data/p243/62.wav|13
|
134 |
+
./Data/p259/31.wav|17
|
135 |
+
./Data/p231/75.wav|4
|
136 |
+
./Data/p233/31.wav|5
|
137 |
+
./Data/p273/66.wav|19
|
138 |
+
./Data/p226/6.wav|10
|
139 |
+
./Data/p243/162.wav|13
|
140 |
+
./Data/p229/21.wav|2
|
141 |
+
./Data/p230/11.wav|3
|
142 |
+
./Data/p231/84.wav|4
|
143 |
+
./Data/p273/118.wav|19
|
144 |
+
./Data/p227/92.wav|11
|
145 |
+
./Data/p256/110.wav|15
|
146 |
+
./Data/p230/105.wav|3
|
147 |
+
./Data/p239/75.wav|7
|
148 |
+
./Data/p229/78.wav|2
|
149 |
+
./Data/p254/111.wav|14
|
150 |
+
./Data/p232/24.wav|12
|
151 |
+
./Data/p233/19.wav|5
|
152 |
+
./Data/p233/52.wav|5
|
153 |
+
./Data/p258/143.wav|16
|
154 |
+
./Data/p254/135.wav|14
|
155 |
+
./Data/p232/37.wav|12
|
156 |
+
./Data/p244/81.wav|9
|
157 |
+
./Data/p270/161.wav|18
|
158 |
+
./Data/p233/43.wav|5
|
159 |
+
./Data/p240/40.wav|8
|
160 |
+
./Data/p244/70.wav|9
|
161 |
+
./Data/p254/1.wav|14
|
162 |
+
./Data/p229/96.wav|2
|
163 |
+
./Data/p243/99.wav|13
|
164 |
+
./Data/p259/20.wav|17
|
165 |
+
./Data/p233/66.wav|5
|
166 |
+
./Data/p239/88.wav|7
|
167 |
+
./Data/p225/71.wav|0
|
168 |
+
./Data/p227/143.wav|11
|
169 |
+
./Data/p228/142.wav|1
|
170 |
+
./Data/p231/135.wav|4
|
171 |
+
./Data/p254/107.wav|14
|
172 |
+
./Data/p233/36.wav|5
|
173 |
+
./Data/p232/19.wav|12
|
174 |
+
./Data/p258/113.wav|16
|
175 |
+
./Data/p243/96.wav|13
|
176 |
+
./Data/p273/90.wav|19
|
177 |
+
./Data/p225/13.wav|0
|
178 |
+
./Data/p228/32.wav|1
|
179 |
+
./Data/p229/60.wav|2
|
180 |
+
./Data/p273/14.wav|19
|
181 |
+
./Data/p239/25.wav|7
|
182 |
+
./Data/p256/31.wav|15
|
183 |
+
./Data/p225/40.wav|0
|
184 |
+
./Data/p273/43.wav|19
|
185 |
+
./Data/p270/206.wav|18
|
186 |
+
./Data/p244/19.wav|9
|
187 |
+
./Data/p244/83.wav|9
|
188 |
+
./Data/p259/134.wav|17
|
189 |
+
./Data/p244/91.wav|9
|
190 |
+
./Data/p225/80.wav|0
|
191 |
+
./Data/p227/60.wav|11
|
192 |
+
./Data/p244/128.wav|9
|
193 |
+
./Data/p256/80.wav|15
|
194 |
+
./Data/p256/15.wav|15
|
195 |
+
./Data/p244/34.wav|9
|
196 |
+
./Data/p256/69.wav|15
|
197 |
+
./Data/p228/15.wav|1
|
198 |
+
./Data/p232/65.wav|12
|
199 |
+
./Data/p273/65.wav|19
|
200 |
+
./Data/p239/124.wav|7
|
201 |
+
./Data/p259/15.wav|17
|
202 |
+
./Data/p226/137.wav|10
|
203 |
+
./Data/p243/75.wav|13
|
204 |
+
./Data/p258/16.wav|16
|
205 |
+
./Data/p232/6.wav|12
|
206 |
+
./Data/p231/106.wav|4
|
207 |
+
./Data/p228/6.wav|1
|
208 |
+
./Data/p243/172.wav|13
|
209 |
+
./Data/p236/77.wav|6
|
210 |
+
./Data/p256/95.wav|15
|
211 |
+
./Data/p256/76.wav|15
|
212 |
+
./Data/p239/119.wav|7
|
213 |
+
./Data/p236/108.wav|6
|
214 |
+
./Data/p243/92.wav|13
|
215 |
+
./Data/p232/129.wav|12
|
216 |
+
./Data/p230/124.wav|3
|
217 |
+
./Data/p228/9.wav|1
|
218 |
+
./Data/p232/100.wav|12
|
219 |
+
./Data/p254/5.wav|14
|
220 |
+
./Data/p273/1.wav|19
|
221 |
+
./Data/p236/47.wav|6
|
222 |
+
./Data/p240/87.wav|8
|
223 |
+
./Data/p229/127.wav|2
|
224 |
+
./Data/p228/152.wav|1
|
225 |
+
./Data/p225/24.wav|0
|
226 |
+
./Data/p229/20.wav|2
|
227 |
+
./Data/p233/12.wav|5
|
228 |
+
./Data/p259/46.wav|17
|
229 |
+
./Data/p231/72.wav|4
|
230 |
+
./Data/p254/65.wav|14
|
231 |
+
./Data/p231/18.wav|4
|
232 |
+
./Data/p270/66.wav|18
|
233 |
+
./Data/p233/44.wav|5
|
234 |
+
./Data/p233/126.wav|5
|
235 |
+
./Data/p233/58.wav|5
|
236 |
+
./Data/p273/142.wav|19
|
237 |
+
./Data/p228/26.wav|1
|
238 |
+
./Data/p230/106.wav|3
|
239 |
+
./Data/p228/109.wav|1
|
240 |
+
./Data/p232/76.wav|12
|
241 |
+
./Data/p226/37.wav|10
|
242 |
+
./Data/p226/66.wav|10
|
243 |
+
./Data/p270/75.wav|18
|
244 |
+
./Data/p229/4.wav|2
|
245 |
+
./Data/p239/166.wav|7
|
246 |
+
./Data/p228/79.wav|1
|
247 |
+
./Data/p230/43.wav|3
|
248 |
+
./Data/p258/100.wav|16
|
249 |
+
./Data/p244/93.wav|9
|
250 |
+
./Data/p256/105.wav|15
|
251 |
+
./Data/p236/12.wav|6
|
252 |
+
./Data/p270/154.wav|18
|
253 |
+
./Data/p244/75.wav|9
|
254 |
+
./Data/p239/160.wav|7
|
255 |
+
./Data/p239/174.wav|7
|
256 |
+
./Data/p225/26.wav|0
|
257 |
+
./Data/p232/49.wav|12
|
258 |
+
./Data/p258/19.wav|16
|
259 |
+
./Data/p273/13.wav|19
|
260 |
+
./Data/p232/32.wav|12
|
261 |
+
./Data/p270/42.wav|18
|
262 |
+
./Data/p270/194.wav|18
|
263 |
+
./Data/p259/174.wav|17
|
264 |
+
./Data/p236/53.wav|6
|
265 |
+
./Data/p232/77.wav|12
|
266 |
+
./Data/p240/118.wav|8
|
267 |
+
./Data/p239/175.wav|7
|
268 |
+
./Data/p225/58.wav|0
|
269 |
+
./Data/p232/1.wav|12
|
270 |
+
./Data/p243/5.wav|13
|
271 |
+
./Data/p229/41.wav|2
|
272 |
+
./Data/p233/60.wav|5
|
273 |
+
./Data/p236/138.wav|6
|
274 |
+
./Data/p258/54.wav|16
|
275 |
+
./Data/p254/22.wav|14
|
276 |
+
./Data/p254/76.wav|14
|
277 |
+
./Data/p228/25.wav|1
|
278 |
+
./Data/p259/61.wav|17
|
279 |
+
./Data/p270/135.wav|18
|
280 |
+
./Data/p231/136.wav|4
|
281 |
+
./Data/p232/105.wav|12
|
282 |
+
./Data/p259/35.wav|17
|
283 |
+
./Data/p244/57.wav|9
|
284 |
+
./Data/p226/104.wav|10
|
285 |
+
./Data/p258/48.wav|16
|
286 |
+
./Data/p229/139.wav|2
|
287 |
+
./Data/p239/65.wav|7
|
288 |
+
./Data/p228/74.wav|1
|
289 |
+
./Data/p233/25.wav|5
|
290 |
+
./Data/p243/16.wav|13
|
291 |
+
./Data/p243/165.wav|13
|
292 |
+
./Data/p229/46.wav|2
|
293 |
+
./Data/p226/41.wav|10
|
294 |
+
./Data/p228/160.wav|1
|
295 |
+
./Data/p230/90.wav|3
|
296 |
+
./Data/p270/184.wav|18
|
297 |
+
./Data/p259/55.wav|17
|
298 |
+
./Data/p232/31.wav|12
|
299 |
+
./Data/p231/78.wav|4
|
300 |
+
./Data/p259/78.wav|17
|
301 |
+
./Data/p273/33.wav|19
|
302 |
+
./Data/p256/40.wav|15
|
303 |
+
./Data/p258/116.wav|16
|
Demo/.gitattributes
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
VCTK-corpus/** filter=lfs diff=lfs merge=lfs -text
|
Demo/VCTK-corpus/.gitattributes
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:d940ee763b72a87fabd2b372968adae8f7118c939ffbc0fe6941ea766a2e138d
|
3 |
+
size 43
|
Demo/VCTK-corpus/p228/p228_023.wav
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:a422bc638dc3985ebc90025f3a3a08d49529f67f9f84fc6d0f13ececb39f6310
|
3 |
+
size 1257866
|
Demo/VCTK-corpus/p230/p230_023.wav
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:60d04b8db463daece0bf5c729a0822293405bccf9071e250b6f133bd340d7168
|
3 |
+
size 1446444
|
Demo/VCTK-corpus/p233/p233_023.wav
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:9dfc6e549906660d6161d52f12d5dc272a39ff69fa03248c55d2fbd08a596a72
|
3 |
+
size 1044596
|
Demo/VCTK-corpus/p236/p236_023.wav
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:c4d3320af416654711e1fda7cd18acac9613c80f8c31274b49bbf5b1bf991e66
|
3 |
+
size 1003618
|
Demo/VCTK-corpus/p243/p243_023.wav
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:ffeaef1bc0e3f1c6536ff93dcf0971e9dfd8bea93a7b3db53ecaaa2b6154aeb0
|
3 |
+
size 1212914
|
Demo/VCTK-corpus/p244/p244_023.wav
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:cd3e4a9f8efcfaa55c98b8e46efe3a7f5179f5187924e7f24a16918882891cb3
|
3 |
+
size 1012254
|
Demo/VCTK-corpus/p254/p254_023.wav
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:753d64f7bc521bfd3653609dd7d235d9e1f71bc135afd37615049f5e847d78f4
|
3 |
+
size 991396
|
Demo/VCTK-corpus/p258/p258_023.wav
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:77658736eb3161446f8f54910e82914ec1cec24ede9f3373bb9e23c6af0f2344
|
3 |
+
size 1101942
|
Demo/VCTK-corpus/p259/p259_023.wav
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:8451f3f93080ec8ed51f0efa721ab0a2533e2aec8fb6607822cb4e660b424a64
|
3 |
+
size 1098022
|
Demo/VCTK-corpus/p273/p273_023.wav
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:0648181067db465708038e5b33f583961075cf7858456fc46bcf7d899d996a6d
|
3 |
+
size 1221146
|
Demo/inference.ipynb
ADDED
@@ -0,0 +1,471 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "markdown",
|
5 |
+
"metadata": {
|
6 |
+
"id": "HwaQq4GRU_Nw"
|
7 |
+
},
|
8 |
+
"source": [
|
9 |
+
"# StarGANv2-VC Demo (VCTK 20 Speakers)"
|
10 |
+
]
|
11 |
+
},
|
12 |
+
{
|
13 |
+
"cell_type": "markdown",
|
14 |
+
"metadata": {
|
15 |
+
"id": "hCpoXuZeGKAn"
|
16 |
+
},
|
17 |
+
"source": [
|
18 |
+
"### Utils"
|
19 |
+
]
|
20 |
+
},
|
21 |
+
{
|
22 |
+
"cell_type": "code",
|
23 |
+
"execution_count": null,
|
24 |
+
"metadata": {},
|
25 |
+
"outputs": [],
|
26 |
+
"source": [
|
27 |
+
"%cd .."
|
28 |
+
]
|
29 |
+
},
|
30 |
+
{
|
31 |
+
"cell_type": "code",
|
32 |
+
"execution_count": null,
|
33 |
+
"metadata": {
|
34 |
+
"colab": {
|
35 |
+
"base_uri": "https://localhost:8080/"
|
36 |
+
},
|
37 |
+
"executionInfo": {
|
38 |
+
"elapsed": 24923,
|
39 |
+
"status": "ok",
|
40 |
+
"timestamp": 1613984920200,
|
41 |
+
"user": {
|
42 |
+
"displayName": "Yinghao Li",
|
43 |
+
"photoUrl": "",
|
44 |
+
"userId": "12798981472803960591"
|
45 |
+
},
|
46 |
+
"user_tz": 300
|
47 |
+
},
|
48 |
+
"id": "3on9IjGhVGTP",
|
49 |
+
"outputId": "63a799f8-564d-48c2-fb0f-e66c0cd9fdb8"
|
50 |
+
},
|
51 |
+
"outputs": [],
|
52 |
+
"source": [
|
53 |
+
"# load packages\n",
|
54 |
+
"import random\n",
|
55 |
+
"import yaml\n",
|
56 |
+
"from munch import Munch\n",
|
57 |
+
"import numpy as np\n",
|
58 |
+
"import paddle\n",
|
59 |
+
"from paddle import nn\n",
|
60 |
+
"import paddle.nn.functional as F\n",
|
61 |
+
"import paddleaudio\n",
|
62 |
+
"import librosa\n",
|
63 |
+
"\n",
|
64 |
+
"from starganv2vc_paddle.Utils.ASR.models import ASRCNN\n",
|
65 |
+
"from starganv2vc_paddle.Utils.JDC.model import JDCNet\n",
|
66 |
+
"from starganv2vc_paddle.models import Generator, MappingNetwork, StyleEncoder\n",
|
67 |
+
"\n",
|
68 |
+
"%matplotlib inline"
|
69 |
+
]
|
70 |
+
},
|
71 |
+
{
|
72 |
+
"cell_type": "code",
|
73 |
+
"execution_count": null,
|
74 |
+
"metadata": {},
|
75 |
+
"outputs": [],
|
76 |
+
"source": [
|
77 |
+
"# Source: http://speech.ee.ntu.edu.tw/~jjery2243542/resource/model/is18/en_speaker_used.txt\n",
|
78 |
+
"# Source: https://github.com/jjery2243542/voice_conversion\n",
|
79 |
+
"\n",
|
80 |
+
"speakers = [225,228,229,230,231,233,236,239,240,244,226,227,232,243,254,256,258,259,270,273]\n",
|
81 |
+
"\n",
|
82 |
+
"to_mel = paddleaudio.features.MelSpectrogram(\n",
|
83 |
+
" n_mels=80, n_fft=2048, win_length=1200, hop_length=300)\n",
|
84 |
+
"to_mel.fbank_matrix[:] = paddle.load('starganv2vc_paddle/fbank_matrix.pd')['fbank_matrix']\n",
|
85 |
+
"mean, std = -4, 4\n",
|
86 |
+
"\n",
|
87 |
+
"def preprocess(wave):\n",
|
88 |
+
" wave_tensor = paddle.to_tensor(wave).astype(paddle.float32)\n",
|
89 |
+
" mel_tensor = to_mel(wave_tensor)\n",
|
90 |
+
" mel_tensor = (paddle.log(1e-5 + mel_tensor.unsqueeze(0)) - mean) / std\n",
|
91 |
+
" return mel_tensor\n",
|
92 |
+
"\n",
|
93 |
+
"def build_model(model_params={}):\n",
|
94 |
+
" args = Munch(model_params)\n",
|
95 |
+
" generator = Generator(args.dim_in, args.style_dim, args.max_conv_dim, w_hpf=args.w_hpf, F0_channel=args.F0_channel)\n",
|
96 |
+
" mapping_network = MappingNetwork(args.latent_dim, args.style_dim, args.num_domains, hidden_dim=args.max_conv_dim)\n",
|
97 |
+
" style_encoder = StyleEncoder(args.dim_in, args.style_dim, args.num_domains, args.max_conv_dim)\n",
|
98 |
+
" \n",
|
99 |
+
" nets_ema = Munch(generator=generator,\n",
|
100 |
+
" mapping_network=mapping_network,\n",
|
101 |
+
" style_encoder=style_encoder)\n",
|
102 |
+
"\n",
|
103 |
+
" return nets_ema\n",
|
104 |
+
"\n",
|
105 |
+
"def compute_style(speaker_dicts):\n",
|
106 |
+
" reference_embeddings = {}\n",
|
107 |
+
" for key, (path, speaker) in speaker_dicts.items():\n",
|
108 |
+
" if path == \"\":\n",
|
109 |
+
" label = paddle.to_tensor([speaker], dtype=paddle.int64)\n",
|
110 |
+
" latent_dim = starganv2.mapping_network.shared[0].weight.shape[0]\n",
|
111 |
+
" ref = starganv2.mapping_network(paddle.randn([1, latent_dim]), label)\n",
|
112 |
+
" else:\n",
|
113 |
+
" wave, sr = librosa.load(path, sr=24000)\n",
|
114 |
+
" audio, index = librosa.effects.trim(wave, top_db=30)\n",
|
115 |
+
" if sr != 24000:\n",
|
116 |
+
" wave = librosa.resample(wave, sr, 24000)\n",
|
117 |
+
" mel_tensor = preprocess(wave)\n",
|
118 |
+
"\n",
|
119 |
+
" with paddle.no_grad():\n",
|
120 |
+
" label = paddle.to_tensor([speaker], dtype=paddle.int64)\n",
|
121 |
+
" ref = starganv2.style_encoder(mel_tensor.unsqueeze(1), label)\n",
|
122 |
+
" reference_embeddings[key] = (ref, label)\n",
|
123 |
+
" \n",
|
124 |
+
" return reference_embeddings"
|
125 |
+
]
|
126 |
+
},
|
127 |
+
{
|
128 |
+
"cell_type": "markdown",
|
129 |
+
"metadata": {},
|
130 |
+
"source": [
|
131 |
+
"### Load models"
|
132 |
+
]
|
133 |
+
},
|
134 |
+
{
|
135 |
+
"cell_type": "code",
|
136 |
+
"execution_count": null,
|
137 |
+
"metadata": {},
|
138 |
+
"outputs": [],
|
139 |
+
"source": [
|
140 |
+
"# load F0 model\n",
|
141 |
+
"\n",
|
142 |
+
"F0_model = JDCNet(num_class=1, seq_len=192)\n",
|
143 |
+
"params = paddle.load(\"Models/bst.pd\")['net']\n",
|
144 |
+
"F0_model.set_state_dict(params)\n",
|
145 |
+
"_ = F0_model.eval()"
|
146 |
+
]
|
147 |
+
},
|
148 |
+
{
|
149 |
+
"cell_type": "code",
|
150 |
+
"execution_count": null,
|
151 |
+
"metadata": {
|
152 |
+
"executionInfo": {
|
153 |
+
"elapsed": 43003,
|
154 |
+
"status": "ok",
|
155 |
+
"timestamp": 1613984938321,
|
156 |
+
"user": {
|
157 |
+
"displayName": "Yinghao Li",
|
158 |
+
"photoUrl": "",
|
159 |
+
"userId": "12798981472803960591"
|
160 |
+
},
|
161 |
+
"user_tz": 300
|
162 |
+
},
|
163 |
+
"id": "NZA3ot-oF5t-"
|
164 |
+
},
|
165 |
+
"outputs": [],
|
166 |
+
"source": [
|
167 |
+
"# load vocoder\n",
|
168 |
+
"\n",
|
169 |
+
"import yaml\n",
|
170 |
+
"import paddle\n",
|
171 |
+
"\n",
|
172 |
+
"from yacs.config import CfgNode\n",
|
173 |
+
"from paddlespeech.t2s.models.parallel_wavegan import PWGGenerator\n",
|
174 |
+
"\n",
|
175 |
+
"with open('Vocoder/config.yml') as f:\n",
|
176 |
+
" voc_config = CfgNode(yaml.safe_load(f))\n",
|
177 |
+
"voc_config[\"generator_params\"].pop(\"upsample_net\")\n",
|
178 |
+
"voc_config[\"generator_params\"][\"upsample_scales\"] = voc_config[\"generator_params\"].pop(\"upsample_params\")[\"upsample_scales\"]\n",
|
179 |
+
"vocoder = PWGGenerator(**voc_config[\"generator_params\"])\n",
|
180 |
+
"vocoder.remove_weight_norm()\n",
|
181 |
+
"vocoder.eval()\n",
|
182 |
+
"vocoder.set_state_dict(paddle.load('Vocoder/checkpoint-400000steps.pd'))"
|
183 |
+
]
|
184 |
+
},
|
185 |
+
{
|
186 |
+
"cell_type": "code",
|
187 |
+
"execution_count": null,
|
188 |
+
"metadata": {
|
189 |
+
"colab": {
|
190 |
+
"base_uri": "https://localhost:8080/"
|
191 |
+
},
|
192 |
+
"executionInfo": {
|
193 |
+
"elapsed": 24462,
|
194 |
+
"status": "ok",
|
195 |
+
"timestamp": 1613985522414,
|
196 |
+
"user": {
|
197 |
+
"displayName": "Yinghao Li",
|
198 |
+
"photoUrl": "",
|
199 |
+
"userId": "12798981472803960591"
|
200 |
+
},
|
201 |
+
"user_tz": 300
|
202 |
+
},
|
203 |
+
"id": "Ou4367LCyefA",
|
204 |
+
"outputId": "19c61f6f-f39a-43b9-9275-09418c2aebb4"
|
205 |
+
},
|
206 |
+
"outputs": [],
|
207 |
+
"source": [
|
208 |
+
"# load starganv2\n",
|
209 |
+
"\n",
|
210 |
+
"model_path = 'Models/vc_ema.pd'\n",
|
211 |
+
"\n",
|
212 |
+
"with open('Models/config.yml') as f:\n",
|
213 |
+
" starganv2_config = yaml.safe_load(f)\n",
|
214 |
+
"starganv2 = build_model(model_params=starganv2_config[\"model_params\"])\n",
|
215 |
+
"params = paddle.load(model_path)\n",
|
216 |
+
"params = params['model_ema']\n",
|
217 |
+
"_ = [starganv2[key].set_state_dict(params[key]) for key in starganv2]\n",
|
218 |
+
"_ = [starganv2[key].eval() for key in starganv2]\n",
|
219 |
+
"starganv2.style_encoder = starganv2.style_encoder\n",
|
220 |
+
"starganv2.mapping_network = starganv2.mapping_network\n",
|
221 |
+
"starganv2.generator = starganv2.generator"
|
222 |
+
]
|
223 |
+
},
|
224 |
+
{
|
225 |
+
"cell_type": "markdown",
|
226 |
+
"metadata": {},
|
227 |
+
"source": [
|
228 |
+
"### Conversion"
|
229 |
+
]
|
230 |
+
},
|
231 |
+
{
|
232 |
+
"cell_type": "code",
|
233 |
+
"execution_count": null,
|
234 |
+
"metadata": {},
|
235 |
+
"outputs": [],
|
236 |
+
"source": [
|
237 |
+
"# load input wave\n",
|
238 |
+
"selected_speakers = [273, 259, 258, 243, 254, 244, 236, 233, 230, 228]\n",
|
239 |
+
"k = random.choice(selected_speakers)\n",
|
240 |
+
"wav_path = 'Demo/VCTK-corpus/p' + str(k) + '/p' + str(k) + '_023.wav'\n",
|
241 |
+
"audio, source_sr = librosa.load(wav_path, sr=24000)\n",
|
242 |
+
"audio = audio / np.max(np.abs(audio))\n",
|
243 |
+
"audio.dtype = np.float32"
|
244 |
+
]
|
245 |
+
},
|
246 |
+
{
|
247 |
+
"cell_type": "markdown",
|
248 |
+
"metadata": {},
|
249 |
+
"source": [
|
250 |
+
"#### Convert by style encoder"
|
251 |
+
]
|
252 |
+
},
|
253 |
+
{
|
254 |
+
"cell_type": "code",
|
255 |
+
"execution_count": null,
|
256 |
+
"metadata": {},
|
257 |
+
"outputs": [],
|
258 |
+
"source": [
|
259 |
+
"# with reference, using style encoder\n",
|
260 |
+
"speaker_dicts = {}\n",
|
261 |
+
"for s in selected_speakers:\n",
|
262 |
+
" k = s\n",
|
263 |
+
" speaker_dicts['p' + str(s)] = ('Demo/VCTK-corpus/p' + str(k) + '/p' + str(k) + '_023.wav', speakers.index(s))\n",
|
264 |
+
"\n",
|
265 |
+
"reference_embeddings = compute_style(speaker_dicts)"
|
266 |
+
]
|
267 |
+
},
|
268 |
+
{
|
269 |
+
"cell_type": "code",
|
270 |
+
"execution_count": null,
|
271 |
+
"metadata": {
|
272 |
+
"colab": {
|
273 |
+
"base_uri": "https://localhost:8080/",
|
274 |
+
"height": 333
|
275 |
+
},
|
276 |
+
"executionInfo": {
|
277 |
+
"elapsed": 1424,
|
278 |
+
"status": "ok",
|
279 |
+
"timestamp": 1613986299525,
|
280 |
+
"user": {
|
281 |
+
"displayName": "Yinghao Li",
|
282 |
+
"photoUrl": "",
|
283 |
+
"userId": "12798981472803960591"
|
284 |
+
},
|
285 |
+
"user_tz": 300
|
286 |
+
},
|
287 |
+
"id": "T5tahObUyN-d",
|
288 |
+
"outputId": "f4f38742-2235-4f59-cb2a-5008912cd870",
|
289 |
+
"scrolled": true
|
290 |
+
},
|
291 |
+
"outputs": [],
|
292 |
+
"source": [
|
293 |
+
"# conversion \n",
|
294 |
+
"import time\n",
|
295 |
+
"start = time.time()\n",
|
296 |
+
" \n",
|
297 |
+
"source = preprocess(audio)\n",
|
298 |
+
"keys = []\n",
|
299 |
+
"converted_samples = {}\n",
|
300 |
+
"reconstructed_samples = {}\n",
|
301 |
+
"converted_mels = {}\n",
|
302 |
+
"\n",
|
303 |
+
"for key, (ref, _) in reference_embeddings.items():\n",
|
304 |
+
" with paddle.no_grad():\n",
|
305 |
+
" f0_feat = F0_model.get_feature_GAN(source.unsqueeze(1))\n",
|
306 |
+
" out = starganv2.generator(source.unsqueeze(1), ref, F0=f0_feat)\n",
|
307 |
+
" \n",
|
308 |
+
" c = out.transpose([0,1,3,2]).squeeze()\n",
|
309 |
+
" y_out = vocoder.inference(c)\n",
|
310 |
+
" y_out = y_out.reshape([-1])\n",
|
311 |
+
"\n",
|
312 |
+
" if key not in speaker_dicts or speaker_dicts[key][0] == \"\":\n",
|
313 |
+
" recon = None\n",
|
314 |
+
" else:\n",
|
315 |
+
" wave, sr = librosa.load(speaker_dicts[key][0], sr=24000)\n",
|
316 |
+
" mel = preprocess(wave)\n",
|
317 |
+
" c = mel.transpose([0,2,1]).squeeze()\n",
|
318 |
+
" recon = vocoder.inference(c)\n",
|
319 |
+
" recon = recon.reshape([-1]).numpy()\n",
|
320 |
+
"\n",
|
321 |
+
" converted_samples[key] = y_out.numpy()\n",
|
322 |
+
" reconstructed_samples[key] = recon\n",
|
323 |
+
"\n",
|
324 |
+
" converted_mels[key] = out\n",
|
325 |
+
" \n",
|
326 |
+
" keys.append(key)\n",
|
327 |
+
"end = time.time()\n",
|
328 |
+
"print('total processing time: %.3f sec' % (end - start) )\n",
|
329 |
+
"\n",
|
330 |
+
"import IPython.display as ipd\n",
|
331 |
+
"for key, wave in converted_samples.items():\n",
|
332 |
+
" print('Converted: %s' % key)\n",
|
333 |
+
" display(ipd.Audio(wave, rate=24000))\n",
|
334 |
+
" print('Reference (vocoder): %s' % key)\n",
|
335 |
+
" if reconstructed_samples[key] is not None:\n",
|
336 |
+
" display(ipd.Audio(reconstructed_samples[key], rate=24000))\n",
|
337 |
+
"\n",
|
338 |
+
"print('Original (vocoder):')\n",
|
339 |
+
"wave, sr = librosa.load(wav_path, sr=24000)\n",
|
340 |
+
"mel = preprocess(wave)\n",
|
341 |
+
"c = mel.transpose([0,2,1]).squeeze()\n",
|
342 |
+
"with paddle.no_grad():\n",
|
343 |
+
" recon = vocoder.inference(c)\n",
|
344 |
+
" recon = recon.reshape([-1]).numpy()\n",
|
345 |
+
"display(ipd.Audio(recon, rate=24000))\n",
|
346 |
+
"print('Original:')\n",
|
347 |
+
"display(ipd.Audio(wav_path, rate=24000))"
|
348 |
+
]
|
349 |
+
},
|
350 |
+
{
|
351 |
+
"cell_type": "markdown",
|
352 |
+
"metadata": {
|
353 |
+
"id": "SWh3o9hvGvJt"
|
354 |
+
},
|
355 |
+
"source": [
|
356 |
+
"#### Convert by mapping network"
|
357 |
+
]
|
358 |
+
},
|
359 |
+
{
|
360 |
+
"cell_type": "code",
|
361 |
+
"execution_count": null,
|
362 |
+
"metadata": {},
|
363 |
+
"outputs": [],
|
364 |
+
"source": [
|
365 |
+
"# no reference, using mapping network\n",
|
366 |
+
"speaker_dicts = {}\n",
|
367 |
+
"selected_speakers = [273, 259, 258, 243, 254, 244, 236, 233, 230, 228]\n",
|
368 |
+
"for s in selected_speakers:\n",
|
369 |
+
" k = s\n",
|
370 |
+
" speaker_dicts['p' + str(s)] = ('', speakers.index(s))\n",
|
371 |
+
"\n",
|
372 |
+
"reference_embeddings = compute_style(speaker_dicts)"
|
373 |
+
]
|
374 |
+
},
|
375 |
+
{
|
376 |
+
"cell_type": "code",
|
377 |
+
"execution_count": null,
|
378 |
+
"metadata": {
|
379 |
+
"scrolled": true
|
380 |
+
},
|
381 |
+
"outputs": [],
|
382 |
+
"source": [
|
383 |
+
"# conversion \n",
|
384 |
+
"import time\n",
|
385 |
+
"start = time.time()\n",
|
386 |
+
" \n",
|
387 |
+
"source = preprocess(audio)\n",
|
388 |
+
"keys = []\n",
|
389 |
+
"converted_samples = {}\n",
|
390 |
+
"reconstructed_samples = {}\n",
|
391 |
+
"converted_mels = {}\n",
|
392 |
+
"\n",
|
393 |
+
"for key, (ref, _) in reference_embeddings.items():\n",
|
394 |
+
" with paddle.no_grad():\n",
|
395 |
+
" f0_feat = F0_model.get_feature_GAN(source.unsqueeze(1))\n",
|
396 |
+
" out = starganv2.generator(source.unsqueeze(1), ref, F0=f0_feat)\n",
|
397 |
+
" \n",
|
398 |
+
" c = out.transpose([0,1,3,2]).squeeze()\n",
|
399 |
+
" y_out = vocoder.inference(c)\n",
|
400 |
+
" y_out = y_out.reshape([-1])\n",
|
401 |
+
"\n",
|
402 |
+
" if key not in speaker_dicts or speaker_dicts[key][0] == \"\":\n",
|
403 |
+
" recon = None\n",
|
404 |
+
" else:\n",
|
405 |
+
" wave, sr = librosa.load(speaker_dicts[key][0], sr=24000)\n",
|
406 |
+
" mel = preprocess(wave)\n",
|
407 |
+
" c = mel.transpose([0,2,1]).squeeze()\n",
|
408 |
+
" recon = vocoder.inference(c)\n",
|
409 |
+
" recon = recon.reshape([-1]).numpy()\n",
|
410 |
+
"\n",
|
411 |
+
" converted_samples[key] = y_out.numpy()\n",
|
412 |
+
" reconstructed_samples[key] = recon\n",
|
413 |
+
"\n",
|
414 |
+
" converted_mels[key] = out\n",
|
415 |
+
" \n",
|
416 |
+
" keys.append(key)\n",
|
417 |
+
"end = time.time()\n",
|
418 |
+
"print('total processing time: %.3f sec' % (end - start) )\n",
|
419 |
+
"\n",
|
420 |
+
"import IPython.display as ipd\n",
|
421 |
+
"for key, wave in converted_samples.items():\n",
|
422 |
+
" print('Converted: %s' % key)\n",
|
423 |
+
" display(ipd.Audio(wave, rate=24000))\n",
|
424 |
+
" print('Reference (vocoder): %s' % key)\n",
|
425 |
+
" if reconstructed_samples[key] is not None:\n",
|
426 |
+
" display(ipd.Audio(reconstructed_samples[key], rate=24000))\n",
|
427 |
+
"\n",
|
428 |
+
"print('Original (vocoder):')\n",
|
429 |
+
"wave, sr = librosa.load(wav_path, sr=24000)\n",
|
430 |
+
"mel = preprocess(wave)\n",
|
431 |
+
"c = mel.transpose([0,2,1]).squeeze().to('cuda')\n",
|
432 |
+
"with paddle.no_grad():\n",
|
433 |
+
" recon = vocoder.inference(c)\n",
|
434 |
+
" recon = recon.reshape([-1]).numpy()\n",
|
435 |
+
"display(ipd.Audio(recon, rate=24000))\n",
|
436 |
+
"print('Original:')\n",
|
437 |
+
"display(ipd.Audio(wav_path, rate=24000))"
|
438 |
+
]
|
439 |
+
}
|
440 |
+
],
|
441 |
+
"metadata": {
|
442 |
+
"accelerator": "GPU",
|
443 |
+
"colab": {
|
444 |
+
"collapsed_sections": [
|
445 |
+
"hCpoXuZeGKAn"
|
446 |
+
],
|
447 |
+
"name": "Starganv2_vc.ipynb",
|
448 |
+
"provenance": [],
|
449 |
+
"toc_visible": true
|
450 |
+
},
|
451 |
+
"kernelspec": {
|
452 |
+
"display_name": "Python 3",
|
453 |
+
"language": "python",
|
454 |
+
"name": "python3"
|
455 |
+
},
|
456 |
+
"language_info": {
|
457 |
+
"codemirror_mode": {
|
458 |
+
"name": "ipython",
|
459 |
+
"version": 3
|
460 |
+
},
|
461 |
+
"file_extension": ".py",
|
462 |
+
"mimetype": "text/x-python",
|
463 |
+
"name": "python",
|
464 |
+
"nbconvert_exporter": "python",
|
465 |
+
"pygments_lexer": "ipython3",
|
466 |
+
"version": "3.7.10"
|
467 |
+
}
|
468 |
+
},
|
469 |
+
"nbformat": 4,
|
470 |
+
"nbformat_minor": 1
|
471 |
+
}
|
README.md
CHANGED
@@ -1,12 +1,84 @@
|
|
1 |
---
|
2 |
-
title:
|
3 |
-
emoji:
|
4 |
colorFrom: green
|
5 |
-
colorTo:
|
6 |
sdk: gradio
|
7 |
-
sdk_version:
|
8 |
app_file: app.py
|
9 |
pinned: false
|
|
|
10 |
---
|
11 |
|
12 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
---
|
2 |
+
title: StarGANv2 Voice Conversion on PaddlePaddle
|
3 |
+
emoji: 🗣️
|
4 |
colorFrom: green
|
5 |
+
colorTo: blue
|
6 |
sdk: gradio
|
7 |
+
sdk_version: 2.9.4
|
8 |
app_file: app.py
|
9 |
pinned: false
|
10 |
+
license: mit
|
11 |
---
|
12 |
|
13 |
+
# StarGANv2-VC-Paddle
|
14 |
+
[![Baidu AI Studio](https://img.shields.io/static/v1?label=Baidu&message=AI%20Studio%20Free%20A100&color=blue)](https://aistudio.baidu.com/aistudio/projectdetail/3955253)
|
15 |
+
[![Hugging Face Spaces](https://img.shields.io/badge/%F0%9F%A4%97%20Hugging%20Face-Spaces-blue)](https://huggingface.co/spaces/HighCWu/starganv2vc-paddle)
|
16 |
+
|
17 |
+
A paddlepaddle version of [StarGANv2-VC](https://github.com/yl4579/StarGANv2-VC).
|
18 |
+
|
19 |
+
Download pretrained models [here](https://aistudio.baidu.com/aistudio/datasetdetail/145012).
|
20 |
+
|
21 |
+
Getting started with free v100/a100 in [AI Studio](https://aistudio.baidu.com/aistudio/projectdetail/3955253) or fast try with [HugginFace Spaces](https://huggingface.co/spaces/HighCWu/starganv2vc-paddle).
|
22 |
+
|
23 |
+
---
|
24 |
+
|
25 |
+
Original PyTorch Repo [README](https://github.com/yl4579/StarGANv2-VC) 👇
|
26 |
+
|
27 |
+
---
|
28 |
+
|
29 |
+
|
30 |
+
# StarGANv2-VC: A Diverse, Unsupervised, Non-parallel Framework for Natural-Sounding Voice Conversion
|
31 |
+
|
32 |
+
### Yinghao Aaron Li, Ali Zare, Nima Mesgarani
|
33 |
+
|
34 |
+
> We present an unsupervised non-parallel many-to-many voice conversion (VC) method using a generative adversarial network (GAN) called StarGAN v2. Using a combination of adversarial source classifier loss and perceptual loss, our model significantly outperforms previous VC models. Although our model is trained only with 20 English speakers, it generalizes to a variety of voice conversion tasks, such as any-to-many, cross-lingual, and singing conversion. Using a style encoder, our framework can also convert plain reading speech into stylistic speech, such as emotional and falsetto speech. Subjective and objective evaluation experiments on a non-parallel many-to-many voice conversion task revealed that our model produces natural sounding voices, close to the sound quality of state-of-the-art text-tospeech (TTS) based voice conversion methods without the need for text labels. Moreover, our model is completely convolutional and with a faster-than-real-time vocoder such as Parallel WaveGAN can perform real-time voice conversion.
|
35 |
+
|
36 |
+
Paper: https://arxiv.org/abs/2107.10394
|
37 |
+
|
38 |
+
Audio samples: https://starganv2-vc.github.io/
|
39 |
+
|
40 |
+
## Pre-requisites
|
41 |
+
1. Python >= 3.7
|
42 |
+
2. Clone this repository:
|
43 |
+
```bash
|
44 |
+
git https://github.com/yl4579/StarGANv2-VC.git
|
45 |
+
cd StarGANv2-VC
|
46 |
+
```
|
47 |
+
3. Install python requirements:
|
48 |
+
```bash
|
49 |
+
pip install SoundFile torchaudio munch parallel_wavegan torch pydub
|
50 |
+
```
|
51 |
+
4. Download and extract the [VCTK dataset](https://datashare.ed.ac.uk/handle/10283/3443)
|
52 |
+
and use [VCTK.ipynb](https://github.com/yl4579/StarGANv2-VC/blob/main/Data/VCTK.ipynb) to prepare the data (downsample to 24 kHz etc.). You can also [download the dataset](https://drive.google.com/file/d/1t7QQbu4YC_P1mv9puA_KgSomSFDsSzD6/view?usp=sharing) we have prepared and unzip it to the `Data` folder, use the provided `config.yml` to reproduce our models.
|
53 |
+
|
54 |
+
## Training
|
55 |
+
```bash
|
56 |
+
python train.py --config_path ./Configs/config.yml
|
57 |
+
```
|
58 |
+
Please specify the training and validation data in `config.yml` file. Change `num_domains` to the number of speakers in the dataset. The data list format needs to be `filename.wav|speaker_number`, see [train_list.txt](https://github.com/yl4579/StarGANv2-VC/blob/main/Data/train_list.txt) as an example.
|
59 |
+
|
60 |
+
Checkpoints and Tensorboard logs will be saved at `log_dir`. To speed up training, you may want to make `batch_size` as large as your GPU RAM can take. However, please note that `batch_size = 5` will take around 10G GPU RAM.
|
61 |
+
|
62 |
+
## Inference
|
63 |
+
|
64 |
+
Please refer to [inference.ipynb](https://github.com/yl4579/StarGANv2-VC/blob/main/Demo/inference.ipynb) for details.
|
65 |
+
|
66 |
+
The pretrained StarGANv2 and ParallelWaveGAN on VCTK corpus can be downloaded at [StarGANv2 Link](https://drive.google.com/file/d/1nzTyyl-9A1Hmqya2Q_f2bpZkUoRjbZsY/view?usp=sharing) and [ParallelWaveGAN Link](https://drive.google.com/file/d/1q8oSAzwkqi99oOGXDZyLypCiz0Qzn3Ab/view?usp=sharing). Please unzip to `Models` and `Vocoder` respectivey and run each cell in the notebook.
|
67 |
+
|
68 |
+
## ASR & F0 Models
|
69 |
+
|
70 |
+
The pretrained F0 and ASR models are provided under the `Utils` folder. Both the F0 and ASR models are trained with melspectrograms preprocessed using [meldataset.py](https://github.com/yl4579/StarGANv2-VC/blob/main/meldataset.py), and both models are trained on speech data only.
|
71 |
+
|
72 |
+
The ASR model is trained on English corpus, but it appears to work when training StarGANv2 models in other languages such as Japanese. The F0 model also appears to work with singing data. For the best performance, however, training your own ASR and F0 models is encouraged for non-English and non-speech data.
|
73 |
+
|
74 |
+
You can edit the [meldataset.py](https://github.com/yl4579/StarGANv2-VC/blob/main/meldataset.py) with your own melspectrogram preprocessing, but the provided pretrained models will no longer work. You will need to train your own ASR and F0 models with the new preprocessing. You may refer to repo [Diamondfan/CTC_pytorch](https://github.com/Diamondfan/CTC_pytorch) and [keums/melodyExtraction_JDC](https://github.com/keums/melodyExtraction_JDC) to train your own the ASR and F0 models, for example.
|
75 |
+
|
76 |
+
## References
|
77 |
+
- [clovaai/stargan-v2](https://github.com/clovaai/stargan-v2)
|
78 |
+
- [kan-bayashi/ParallelWaveGAN](https://github.com/kan-bayashi/ParallelWaveGAN)
|
79 |
+
- [tosaka-m/japanese_realtime_tts](https://github.com/tosaka-m/japanese_realtime_tts)
|
80 |
+
- [keums/melodyExtraction_JDC](https://github.com/keums/melodyExtraction_JDC)
|
81 |
+
- [Diamondfan/CTC_pytorch](https://github.com/Diamondfan/CTC_pytorch)
|
82 |
+
|
83 |
+
## Acknowledgement
|
84 |
+
The author would like to thank [@tosaka-m](https://github.com/tosaka-m) for his great repository and valuable discussions.
|
Utils/ASR/config.yml
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
log_dir: "logs"
|
2 |
+
save_freq: 20
|
3 |
+
epochs: 180
|
4 |
+
batch_size: 48
|
5 |
+
pretrained_model: ""
|
6 |
+
train_data: "asr_train_list.txt"
|
7 |
+
val_data: "asr_val_list.txt"
|
8 |
+
|
9 |
+
dataset_params:
|
10 |
+
data_augmentation: true
|
11 |
+
|
12 |
+
preprocess_parasm:
|
13 |
+
sr: 24000
|
14 |
+
spect_params:
|
15 |
+
n_fft: 2048
|
16 |
+
win_length: 1200
|
17 |
+
hop_length: 300
|
18 |
+
mel_params:
|
19 |
+
n_mels: 80
|
20 |
+
|
21 |
+
model_params:
|
22 |
+
input_dim: 80
|
23 |
+
hidden_dim: 256
|
24 |
+
n_token: 80
|
25 |
+
token_embedding_dim: 256
|
26 |
+
|
27 |
+
optimizer_params:
|
28 |
+
lr: 0.0005
|
app.py
CHANGED
@@ -33,11 +33,11 @@ from starganv2vc_paddle.Utils.JDC.model import JDCNet
|
|
33 |
from starganv2vc_paddle.models import Generator, MappingNetwork, StyleEncoder
|
34 |
|
35 |
|
36 |
-
speakers = [225,228,229,230,231,233,236,239,240,244,226,227,232,243,254,256,258,259,270,
|
37 |
|
38 |
to_mel = paddleaudio.features.MelSpectrogram(
|
39 |
n_mels=80, n_fft=2048, win_length=1200, hop_length=300)
|
40 |
-
to_mel.fbank_matrix[:] = paddle.load('fbank_matrix.pd')['fbank_matrix']
|
41 |
mean, std = -4, 4
|
42 |
|
43 |
def preprocess(wave):
|
@@ -148,4 +148,4 @@ iface = gr.Interface(app, [gr.inputs.Audio(source="microphone", type="filepath")
|
|
148 |
gr.inputs.Radio(list(speaker_dicts.keys()), type="value", default='p228', label='speaker id')],
|
149 |
"audio", title=title, description=description, examples=examples)
|
150 |
|
151 |
-
iface.launch()
|
|
|
33 |
from starganv2vc_paddle.models import Generator, MappingNetwork, StyleEncoder
|
34 |
|
35 |
|
36 |
+
speakers = [225,228,229,230,231,233,236,239,240,244,226,227,232,243,254,256,258,259,270,273]
|
37 |
|
38 |
to_mel = paddleaudio.features.MelSpectrogram(
|
39 |
n_mels=80, n_fft=2048, win_length=1200, hop_length=300)
|
40 |
+
to_mel.fbank_matrix[:] = paddle.load('starganv2vc_paddle/fbank_matrix.pd')['fbank_matrix']
|
41 |
mean, std = -4, 4
|
42 |
|
43 |
def preprocess(wave):
|
|
|
148 |
gr.inputs.Radio(list(speaker_dicts.keys()), type="value", default='p228', label='speaker id')],
|
149 |
"audio", title=title, description=description, examples=examples)
|
150 |
|
151 |
+
iface.launch()
|
convert_parallel_wavegan_weights_to_paddle.ipynb
ADDED
@@ -0,0 +1,177 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"nbformat": 4,
|
3 |
+
"nbformat_minor": 0,
|
4 |
+
"metadata": {
|
5 |
+
"colab": {
|
6 |
+
"name": "ParallelWaveGAN to paddle.ipynb",
|
7 |
+
"provenance": [],
|
8 |
+
"collapsed_sections": [],
|
9 |
+
"private_outputs": true
|
10 |
+
},
|
11 |
+
"kernelspec": {
|
12 |
+
"name": "python3",
|
13 |
+
"display_name": "Python 3"
|
14 |
+
},
|
15 |
+
"language_info": {
|
16 |
+
"name": "python"
|
17 |
+
},
|
18 |
+
"accelerator": "GPU"
|
19 |
+
},
|
20 |
+
"cells": [
|
21 |
+
{
|
22 |
+
"cell_type": "code",
|
23 |
+
"execution_count": null,
|
24 |
+
"metadata": {
|
25 |
+
"id": "gZNDsJweNp1L"
|
26 |
+
},
|
27 |
+
"outputs": [],
|
28 |
+
"source": [
|
29 |
+
"!pip install parallel_wavegan paddlepaddle-gpu==2.2.2 \"paddlespeech<1\" pytest-runner"
|
30 |
+
]
|
31 |
+
},
|
32 |
+
{
|
33 |
+
"cell_type": "code",
|
34 |
+
"source": [
|
35 |
+
"!gdown https://drive.google.com/uc?id=1q8oSAzwkqi99oOGXDZyLypCiz0Qzn3Ab\n",
|
36 |
+
"!unzip -qq Vocoder.zip"
|
37 |
+
],
|
38 |
+
"metadata": {
|
39 |
+
"id": "HqA0VNKEOGfv"
|
40 |
+
},
|
41 |
+
"execution_count": null,
|
42 |
+
"outputs": []
|
43 |
+
},
|
44 |
+
{
|
45 |
+
"cell_type": "code",
|
46 |
+
"source": [
|
47 |
+
"# load torch vocoder\n",
|
48 |
+
"import torch\n",
|
49 |
+
"from parallel_wavegan.utils import load_model\n",
|
50 |
+
"\n",
|
51 |
+
"device = 'cuda' if torch.cuda.is_available() else 'cpu'\n",
|
52 |
+
"\n",
|
53 |
+
"vocoder_torch = load_model(\"Vocoder/checkpoint-400000steps.pkl\").to(device).eval()\n",
|
54 |
+
"vocoder_torch.remove_weight_norm()\n",
|
55 |
+
"_ = vocoder_torch.eval()"
|
56 |
+
],
|
57 |
+
"metadata": {
|
58 |
+
"id": "9F0yA_dyPOVe"
|
59 |
+
},
|
60 |
+
"execution_count": null,
|
61 |
+
"outputs": []
|
62 |
+
},
|
63 |
+
{
|
64 |
+
"cell_type": "code",
|
65 |
+
"source": [
|
66 |
+
"import yaml\n",
|
67 |
+
"import paddle\n",
|
68 |
+
"\n",
|
69 |
+
"from yacs.config import CfgNode\n",
|
70 |
+
"from paddlespeech.s2t.utils.dynamic_import import dynamic_import\n",
|
71 |
+
"from paddlespeech.t2s.models.parallel_wavegan import PWGGenerator\n",
|
72 |
+
"\n",
|
73 |
+
"with open('Vocoder/config.yml') as f:\n",
|
74 |
+
" voc_config = CfgNode(yaml.safe_load(f))\n",
|
75 |
+
"voc_config[\"generator_params\"].pop(\"upsample_net\")\n",
|
76 |
+
"voc_config[\"generator_params\"][\"upsample_scales\"] = voc_config[\"generator_params\"].pop(\"upsample_params\")[\"upsample_scales\"]\n",
|
77 |
+
"vocoder_paddle = PWGGenerator(**voc_config[\"generator_params\"])\n",
|
78 |
+
"vocoder_paddle.remove_weight_norm()\n",
|
79 |
+
"vocoder_paddle.eval()\n",
|
80 |
+
"\n",
|
81 |
+
"\n",
|
82 |
+
"@paddle.no_grad()\n",
|
83 |
+
"def convert_weights(torch_model, paddle_model):\n",
|
84 |
+
" _ = torch_model.eval()\n",
|
85 |
+
" _ = paddle_model.eval()\n",
|
86 |
+
" dense_layers = []\n",
|
87 |
+
" for name, layer in torch_model.named_modules():\n",
|
88 |
+
" if isinstance(layer, torch.nn.Linear):\n",
|
89 |
+
" dense_layers.append(name)\n",
|
90 |
+
" torch_state_dict = torch_model.state_dict()\n",
|
91 |
+
" for name, param in paddle_model.named_parameters():\n",
|
92 |
+
" name = name.replace('._mean', '.running_mean')\n",
|
93 |
+
" name = name.replace('._variance', '.running_var')\n",
|
94 |
+
" name = name.replace('.scale', '.weight')\n",
|
95 |
+
" target_param = torch_state_dict[name].detach().cpu().numpy()\n",
|
96 |
+
" if '.'.join(name.split('.')[:-1]) in dense_layers:\n",
|
97 |
+
" if len(param.shape) == 2:\n",
|
98 |
+
" target_param = target_param.transpose((1,0))\n",
|
99 |
+
" param.set_value(paddle.to_tensor(target_param))\n",
|
100 |
+
"\n",
|
101 |
+
"convert_weights(vocoder_torch, vocoder_paddle)"
|
102 |
+
],
|
103 |
+
"metadata": {
|
104 |
+
"id": "ch2uVW8OdKN0"
|
105 |
+
},
|
106 |
+
"execution_count": null,
|
107 |
+
"outputs": []
|
108 |
+
},
|
109 |
+
{
|
110 |
+
"cell_type": "code",
|
111 |
+
"source": [
|
112 |
+
"import os\n",
|
113 |
+
"import librosa\n",
|
114 |
+
"import torchaudio\n",
|
115 |
+
"import paddleaudio\n",
|
116 |
+
"import numpy as np\n",
|
117 |
+
"import IPython.display as ipd\n",
|
118 |
+
"\n",
|
119 |
+
"\n",
|
120 |
+
"to_mel = torchaudio.transforms.MelSpectrogram(\n",
|
121 |
+
" n_mels=80, n_fft=2048, win_length=1200, hop_length=300)\n",
|
122 |
+
"fb = to_mel.mel_scale.fb.detach().cpu().numpy().transpose([1,0])\n",
|
123 |
+
"to_mel = paddleaudio.features.MelSpectrogram(\n",
|
124 |
+
" n_mels=80, n_fft=2048, win_length=1200, hop_length=300)\n",
|
125 |
+
"to_mel.fbank_matrix[:] = fb\n",
|
126 |
+
"mean, std = -4, 4\n",
|
127 |
+
"\n",
|
128 |
+
"device = 'cuda' if torch.cuda.is_available() else 'cpu'\n",
|
129 |
+
"\n",
|
130 |
+
"def preprocess(wave):\n",
|
131 |
+
" wave_tensor = paddle.to_tensor(wave).astype(paddle.float32)\n",
|
132 |
+
" mel_tensor = 2*to_mel(wave_tensor)\n",
|
133 |
+
" mel_tensor = (paddle.log(1e-5 + mel_tensor.unsqueeze(0)) - mean) / std\n",
|
134 |
+
" return mel_tensor\n",
|
135 |
+
"\n",
|
136 |
+
"if not os.path.exists('p228_023.wav'):\n",
|
137 |
+
" !wget https://github.com/yl4579/StarGANv2-VC/raw/main/Demo/VCTK-corpus/p228/p228_023.wav\n",
|
138 |
+
"audio, source_sr = librosa.load('p228_023.wav', sr=24000)\n",
|
139 |
+
"audio = audio / np.max(np.abs(audio))\n",
|
140 |
+
"audio.dtype = np.float32\n",
|
141 |
+
"mel = preprocess(audio)\n",
|
142 |
+
"\n",
|
143 |
+
"import numpy as np\n",
|
144 |
+
"with torch.no_grad():\n",
|
145 |
+
" with paddle.no_grad():\n",
|
146 |
+
" c = mel.transpose([0, 2, 1]).squeeze()\n",
|
147 |
+
" recon_paddle = vocoder_paddle.inference(c)\n",
|
148 |
+
" recon_paddle = recon_paddle.reshape([-1]).numpy()\n",
|
149 |
+
" recon_torch = vocoder_torch.inference(torch.from_numpy(c.numpy()).to(device))\n",
|
150 |
+
" recon_torch = recon_torch.view(-1).cpu().numpy()\n",
|
151 |
+
" print(np.mean((recon_paddle - recon_torch)**2))\n",
|
152 |
+
"\n",
|
153 |
+
"print('Paddle recon:')\n",
|
154 |
+
"display(ipd.Audio(recon_paddle, rate=24000))\n",
|
155 |
+
"print('Torch recon:')\n",
|
156 |
+
"display(ipd.Audio(recon_torch, rate=24000))"
|
157 |
+
],
|
158 |
+
"metadata": {
|
159 |
+
"id": "Q9dK5j1CleJM"
|
160 |
+
},
|
161 |
+
"execution_count": null,
|
162 |
+
"outputs": []
|
163 |
+
},
|
164 |
+
{
|
165 |
+
"cell_type": "code",
|
166 |
+
"source": [
|
167 |
+
"paddle.save(vocoder_paddle.state_dict(), 'checkpoint-400000steps.pd')\n",
|
168 |
+
"paddle.save({ 'fbank_matrix': to_mel.fbank_matrix }, 'fbank_matrix.pd')"
|
169 |
+
],
|
170 |
+
"metadata": {
|
171 |
+
"id": "HwaLd_Eq3JrH"
|
172 |
+
},
|
173 |
+
"execution_count": null,
|
174 |
+
"outputs": []
|
175 |
+
}
|
176 |
+
]
|
177 |
+
}
|
convert_starganv2_vc_weights_to_paddle.ipynb
ADDED
@@ -0,0 +1,236 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"nbformat": 4,
|
3 |
+
"nbformat_minor": 0,
|
4 |
+
"metadata": {
|
5 |
+
"colab": {
|
6 |
+
"name": "starganv2_vc_weights_converter.ipynb",
|
7 |
+
"private_outputs": true,
|
8 |
+
"provenance": [],
|
9 |
+
"collapsed_sections": []
|
10 |
+
},
|
11 |
+
"kernelspec": {
|
12 |
+
"name": "python3",
|
13 |
+
"display_name": "Python 3"
|
14 |
+
},
|
15 |
+
"language_info": {
|
16 |
+
"name": "python"
|
17 |
+
},
|
18 |
+
"accelerator": "GPU"
|
19 |
+
},
|
20 |
+
"cells": [
|
21 |
+
{
|
22 |
+
"cell_type": "code",
|
23 |
+
"execution_count": null,
|
24 |
+
"metadata": {
|
25 |
+
"id": "CA5i7YAlagUA"
|
26 |
+
},
|
27 |
+
"outputs": [],
|
28 |
+
"source": [
|
29 |
+
"!git clone https://github.com/yl4579/StarGANv2-VC\n",
|
30 |
+
"!pip install SoundFile torchaudio munch\n",
|
31 |
+
"!git clone https://github.com/HighCWu/starganv2vc-paddle\n",
|
32 |
+
"!cd starganv2vc-paddle && pip install paddlepaddle-gpu==2.2.2 paddleaudio munch pydub\n",
|
33 |
+
"!cp -r starganv2vc-paddle/starganv2vc_paddle StarGANv2-VC/"
|
34 |
+
]
|
35 |
+
},
|
36 |
+
{
|
37 |
+
"cell_type": "code",
|
38 |
+
"source": [
|
39 |
+
"!gdown https://drive.google.com/uc?id=1nzTyyl-9A1Hmqya2Q_f2bpZkUoRjbZsY"
|
40 |
+
],
|
41 |
+
"metadata": {
|
42 |
+
"id": "ac4g4L1Bbx1t"
|
43 |
+
},
|
44 |
+
"execution_count": null,
|
45 |
+
"outputs": []
|
46 |
+
},
|
47 |
+
{
|
48 |
+
"cell_type": "code",
|
49 |
+
"source": [
|
50 |
+
"!unzip -qq Models.zip\n",
|
51 |
+
"!rm -rf Models.zip\n",
|
52 |
+
"!mv Models StarGANv2-VC/Models"
|
53 |
+
],
|
54 |
+
"metadata": {
|
55 |
+
"id": "EJ3vG_RvcOD8"
|
56 |
+
},
|
57 |
+
"execution_count": null,
|
58 |
+
"outputs": []
|
59 |
+
},
|
60 |
+
{
|
61 |
+
"cell_type": "code",
|
62 |
+
"source": [
|
63 |
+
"%cd StarGANv2-VC"
|
64 |
+
],
|
65 |
+
"metadata": {
|
66 |
+
"id": "rKovh1Egi4mJ"
|
67 |
+
},
|
68 |
+
"execution_count": null,
|
69 |
+
"outputs": []
|
70 |
+
},
|
71 |
+
{
|
72 |
+
"cell_type": "code",
|
73 |
+
"source": [
|
74 |
+
"import os\n",
|
75 |
+
"import yaml\n",
|
76 |
+
"import numpy as np\n",
|
77 |
+
"import torch\n",
|
78 |
+
"import warnings\n",
|
79 |
+
"warnings.simplefilter('ignore')\n",
|
80 |
+
"\n",
|
81 |
+
"from munch import Munch\n",
|
82 |
+
"\n",
|
83 |
+
"from models import build_model\n",
|
84 |
+
"\n",
|
85 |
+
"from Utils.ASR.models import ASRCNN\n",
|
86 |
+
"from Utils.JDC.model import JDCNet\n",
|
87 |
+
"\n",
|
88 |
+
"torch.backends.cudnn.benchmark = True #\n",
|
89 |
+
"\n",
|
90 |
+
"def main(config_path):\n",
|
91 |
+
" config = yaml.safe_load(open(config_path))\n",
|
92 |
+
" \n",
|
93 |
+
" device = config.get('device', 'cpu')\n",
|
94 |
+
"\n",
|
95 |
+
" # load pretrained ASR model\n",
|
96 |
+
" ASR_config = config.get('ASR_config', False)\n",
|
97 |
+
" ASR_path = config.get('ASR_path', False)\n",
|
98 |
+
" with open(ASR_config) as f:\n",
|
99 |
+
" ASR_config = yaml.safe_load(f)\n",
|
100 |
+
" ASR_model_config = ASR_config['model_params']\n",
|
101 |
+
" ASR_model = ASRCNN(**ASR_model_config)\n",
|
102 |
+
" params = torch.load(ASR_path, map_location='cpu')['model']\n",
|
103 |
+
" ASR_model.load_state_dict(params)\n",
|
104 |
+
" ASR_model.to(device)\n",
|
105 |
+
" _ = ASR_model.eval()\n",
|
106 |
+
" \n",
|
107 |
+
" # load pretrained F0 model\n",
|
108 |
+
" F0_path = config.get('F0_path', False)\n",
|
109 |
+
" F0_model = JDCNet(num_class=1, seq_len=192)\n",
|
110 |
+
" params = torch.load(F0_path, map_location='cpu')['net']\n",
|
111 |
+
" F0_model.load_state_dict(params)\n",
|
112 |
+
" F0_model.to(device)\n",
|
113 |
+
" \n",
|
114 |
+
" # build model\n",
|
115 |
+
" _, model_ema = build_model(Munch(config['model_params']), F0_model, ASR_model)\n",
|
116 |
+
" pretrained_path = 'Models/epoch_00150.pth'# config.get('pretrained_model', False)\n",
|
117 |
+
" params = torch.load(pretrained_path, map_location='cpu')['model_ema']\n",
|
118 |
+
" [model_ema[key].load_state_dict(state_dict) for key, state_dict in params.items()]\n",
|
119 |
+
" _ = [model_ema[key].to(device) for key in model_ema]\n",
|
120 |
+
"\n",
|
121 |
+
" return ASR_model, F0_model, model_ema\n",
|
122 |
+
"\n",
|
123 |
+
"ASR_model_torch, F0_model_torch, model_ema_torch = main('./Models/config.yml')\n"
|
124 |
+
],
|
125 |
+
"metadata": {
|
126 |
+
"id": "UpMuk5kni67B"
|
127 |
+
},
|
128 |
+
"execution_count": null,
|
129 |
+
"outputs": []
|
130 |
+
},
|
131 |
+
{
|
132 |
+
"cell_type": "code",
|
133 |
+
"source": [
|
134 |
+
"import os\n",
|
135 |
+
"import yaml\n",
|
136 |
+
"import numpy as np\n",
|
137 |
+
"import paddle\n",
|
138 |
+
"import warnings\n",
|
139 |
+
"warnings.simplefilter('ignore')\n",
|
140 |
+
"\n",
|
141 |
+
"from munch import Munch\n",
|
142 |
+
"\n",
|
143 |
+
"from starganv2vc_paddle.models import build_model\n",
|
144 |
+
"\n",
|
145 |
+
"from starganv2vc_paddle.Utils.ASR.models import ASRCNN\n",
|
146 |
+
"from starganv2vc_paddle.Utils.JDC.model import JDCNet\n",
|
147 |
+
"\n",
|
148 |
+
"@paddle.no_grad()\n",
|
149 |
+
"def convert_weights(torch_model, paddle_model):\n",
|
150 |
+
" _ = torch_model.eval()\n",
|
151 |
+
" _ = paddle_model.eval()\n",
|
152 |
+
" dense_layers = []\n",
|
153 |
+
" for name, layer in torch_model.named_modules():\n",
|
154 |
+
" if isinstance(layer, torch.nn.Linear):\n",
|
155 |
+
" dense_layers.append(name)\n",
|
156 |
+
" torch_state_dict = torch_model.state_dict()\n",
|
157 |
+
" for name, param in paddle_model.named_parameters():\n",
|
158 |
+
" name = name.replace('._mean', '.running_mean')\n",
|
159 |
+
" name = name.replace('._variance', '.running_var')\n",
|
160 |
+
" name = name.replace('.scale', '.weight')\n",
|
161 |
+
" target_param = torch_state_dict[name].detach().cpu().numpy()\n",
|
162 |
+
" if '.'.join(name.split('.')[:-1]) in dense_layers:\n",
|
163 |
+
" if len(param.shape) == 2:\n",
|
164 |
+
" target_param = target_param.transpose((1,0))\n",
|
165 |
+
" param.set_value(paddle.to_tensor(target_param))\n",
|
166 |
+
"\n",
|
167 |
+
"@torch.no_grad()\n",
|
168 |
+
"@paddle.no_grad()\n",
|
169 |
+
"def main(config_path):\n",
|
170 |
+
" config = yaml.safe_load(open(config_path))\n",
|
171 |
+
" \n",
|
172 |
+
" ASR_config = config.get('ASR_config', False)\n",
|
173 |
+
" with open(ASR_config) as f:\n",
|
174 |
+
" ASR_config = yaml.safe_load(f)\n",
|
175 |
+
" ASR_model_config = ASR_config['model_params']\n",
|
176 |
+
" ASR_model = ASRCNN(**ASR_model_config)\n",
|
177 |
+
" _ = ASR_model.eval()\n",
|
178 |
+
" convert_weights(ASR_model_torch, ASR_model)\n",
|
179 |
+
"\n",
|
180 |
+
" F0_model = JDCNet(num_class=1, seq_len=192)\n",
|
181 |
+
" _ = F0_model.eval()\n",
|
182 |
+
" convert_weights(F0_model_torch, F0_model)\n",
|
183 |
+
" \n",
|
184 |
+
" # build model\n",
|
185 |
+
" model, model_ema = build_model(Munch(config['model_params']), F0_model, ASR_model)\n",
|
186 |
+
"\n",
|
187 |
+
" asr_input = paddle.randn([2, 80, 192])\n",
|
188 |
+
" asr_output = ASR_model(asr_input)\n",
|
189 |
+
" asr_output_torch = ASR_model_torch(torch.from_numpy(asr_input.numpy()).cuda())\n",
|
190 |
+
" print('ASR model input:', asr_input.shape, 'output:', asr_output.shape)\n",
|
191 |
+
" print('Error:', (asr_output_torch.cpu().numpy() - asr_output.numpy()).mean())\n",
|
192 |
+
" mel_input = paddle.randn([2, 1, 192, 512])\n",
|
193 |
+
" f0_output = F0_model(mel_input)\n",
|
194 |
+
" f0_output_torch = F0_model_torch(torch.from_numpy(mel_input.numpy()).cuda())\n",
|
195 |
+
" print('F0 model input:', mel_input.shape, 'output:', [t.shape for t in f0_output])\n",
|
196 |
+
" # print('Error:', (t_dict2['output'].cpu().numpy() - t_dict1['output'].numpy()).mean())\n",
|
197 |
+
" print('Error:', [(t1.cpu().numpy() - t2.numpy()).mean() for t1, t2 in zip(f0_output_torch, f0_output)])\n",
|
198 |
+
"\n",
|
199 |
+
" _ = [convert_weights(model_ema_torch[k], model_ema[k]) for k in model_ema.keys()]\n",
|
200 |
+
" label = paddle.to_tensor([0,0], dtype=paddle.int64)\n",
|
201 |
+
" latent_dim = model_ema.mapping_network.shared[0].weight.shape[0]\n",
|
202 |
+
" latent_style = paddle.randn([2, latent_dim])\n",
|
203 |
+
" ref = model_ema.mapping_network(latent_style, label)\n",
|
204 |
+
" ref_torch = model_ema_torch.mapping_network(torch.from_numpy(latent_style.numpy()).cuda(), torch.from_numpy(label.numpy()).cuda())\n",
|
205 |
+
" print('Error of mapping network:', (ref_torch.cpu().numpy() - ref.numpy()).mean())\n",
|
206 |
+
" mel_input2 = paddle.randn([2, 1, 192, 512])\n",
|
207 |
+
" style_ref = model_ema.style_encoder(mel_input2, label)\n",
|
208 |
+
" style_ref_torch = model_ema_torch.style_encoder(torch.from_numpy(mel_input2.numpy()).cuda(), torch.from_numpy(label.numpy()).cuda())\n",
|
209 |
+
" print('StyleGANv2-VC encoder inputs:', mel_input2.shape, 'output:', style_ref.shape, 'should has the same shape as the ref:', ref.shape)\n",
|
210 |
+
" print('Error of style encoder:', (style_ref_torch.cpu().numpy() - style_ref.numpy()).mean())\n",
|
211 |
+
" f0_feat = F0_model.get_feature_GAN(mel_input)\n",
|
212 |
+
" f0_feat_torch = F0_model_torch.get_feature_GAN(torch.from_numpy(mel_input.numpy()).cuda())\n",
|
213 |
+
" print('Error of f0 feat:', (f0_feat_torch.cpu().numpy() - f0_feat.numpy()).mean())\n",
|
214 |
+
" out = model_ema.generator(mel_input, style_ref, F0=f0_feat)\n",
|
215 |
+
" out_torch = model_ema_torch.generator(torch.from_numpy(mel_input.numpy()).cuda(), torch.from_numpy(style_ref.numpy()).cuda(), F0=torch.from_numpy(f0_feat.numpy()).cuda())\n",
|
216 |
+
" print('StyleGANv2-VC inputs:', label.shape, latent_style.shape, mel_input.shape, 'output:', out.shape)\n",
|
217 |
+
" print('Error:', (out_torch.cpu().numpy() - out.numpy()).mean())\n",
|
218 |
+
"\n",
|
219 |
+
" paddle.save({'model': ASR_model.state_dict()}, 'ASR.pd')\n",
|
220 |
+
" paddle.save({ 'net': F0_model.state_dict()}, 'F0.pd')\n",
|
221 |
+
" model_ema_dict = {key: model.state_dict() for key, model in model_ema.items()}\n",
|
222 |
+
" \n",
|
223 |
+
" paddle.save({ 'model_ema': model_ema_dict }, 'VC.pd')\n",
|
224 |
+
"\n",
|
225 |
+
" return 0\n",
|
226 |
+
"\n",
|
227 |
+
"main('./Models/config.yml')\n"
|
228 |
+
],
|
229 |
+
"metadata": {
|
230 |
+
"id": "PnuApVuyIIyd"
|
231 |
+
},
|
232 |
+
"execution_count": null,
|
233 |
+
"outputs": []
|
234 |
+
}
|
235 |
+
]
|
236 |
+
}
|
prepare_data.ipynb
ADDED
@@ -0,0 +1,179 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "code",
|
5 |
+
"execution_count": null,
|
6 |
+
"id": "347ace04",
|
7 |
+
"metadata": {},
|
8 |
+
"outputs": [],
|
9 |
+
"source": [
|
10 |
+
"import os\n",
|
11 |
+
"\n",
|
12 |
+
"# VCTK Corpus Path\n",
|
13 |
+
"__CORPUSPATH__ = os.path.expanduser(\"~/data/VCTK-Corpus\") \n",
|
14 |
+
"\n",
|
15 |
+
"# output path\n",
|
16 |
+
"__OUTPATH__ = \"./Data\""
|
17 |
+
]
|
18 |
+
},
|
19 |
+
{
|
20 |
+
"cell_type": "code",
|
21 |
+
"execution_count": null,
|
22 |
+
"id": "4ce9eb2e",
|
23 |
+
"metadata": {},
|
24 |
+
"outputs": [],
|
25 |
+
"source": [
|
26 |
+
"import os\n",
|
27 |
+
"from scipy.io import wavfile\n",
|
28 |
+
"from pydub import AudioSegment\n",
|
29 |
+
"\n",
|
30 |
+
"from pydub import AudioSegment\n",
|
31 |
+
"from pydub.silence import split_on_silence\n",
|
32 |
+
"import os\n",
|
33 |
+
"\n",
|
34 |
+
"def split(sound):\n",
|
35 |
+
" dBFS = sound.dBFS\n",
|
36 |
+
" chunks = split_on_silence(sound,\n",
|
37 |
+
" min_silence_len = 100,\n",
|
38 |
+
" silence_thresh = dBFS-16,\n",
|
39 |
+
" keep_silence = 100\n",
|
40 |
+
" )\n",
|
41 |
+
" return chunks\n",
|
42 |
+
"\n",
|
43 |
+
"def combine(_src):\n",
|
44 |
+
" audio = AudioSegment.empty()\n",
|
45 |
+
" for i,filename in enumerate(os.listdir(_src)):\n",
|
46 |
+
" if filename.endswith('.wav'):\n",
|
47 |
+
" filename = os.path.join(_src, filename)\n",
|
48 |
+
" audio += AudioSegment.from_wav(filename)\n",
|
49 |
+
" return audio\n",
|
50 |
+
"\n",
|
51 |
+
"def save_chunks(chunks, directory):\n",
|
52 |
+
" if not os.path.exists(directory):\n",
|
53 |
+
" os.makedirs(directory)\n",
|
54 |
+
" counter = 0\n",
|
55 |
+
"\n",
|
56 |
+
" target_length = 5 * 1000\n",
|
57 |
+
" output_chunks = [chunks[0]]\n",
|
58 |
+
" for chunk in chunks[1:]:\n",
|
59 |
+
" if len(output_chunks[-1]) < target_length:\n",
|
60 |
+
" output_chunks[-1] += chunk\n",
|
61 |
+
" else:\n",
|
62 |
+
" # if the last output chunk is longer than the target length,\n",
|
63 |
+
" # we can start a new one\n",
|
64 |
+
" output_chunks.append(chunk)\n",
|
65 |
+
"\n",
|
66 |
+
" for chunk in output_chunks:\n",
|
67 |
+
" chunk = chunk.set_frame_rate(24000)\n",
|
68 |
+
" chunk = chunk.set_channels(1)\n",
|
69 |
+
" counter = counter + 1\n",
|
70 |
+
" chunk.export(os.path.join(directory, str(counter) + '.wav'), format=\"wav\")"
|
71 |
+
]
|
72 |
+
},
|
73 |
+
{
|
74 |
+
"cell_type": "code",
|
75 |
+
"execution_count": null,
|
76 |
+
"id": "769a7f62",
|
77 |
+
"metadata": {},
|
78 |
+
"outputs": [],
|
79 |
+
"source": [
|
80 |
+
"# Source: http://speech.ee.ntu.edu.tw/~jjery2243542/resource/model/is18/en_speaker_used.txt\n",
|
81 |
+
"# Source: https://github.com/jjery2243542/voice_conversion\n",
|
82 |
+
"\n",
|
83 |
+
"speakers = [225,228,229,230,231,233,236,239,240,244,226,227,232,243,254,256,258,259,270,273]"
|
84 |
+
]
|
85 |
+
},
|
86 |
+
{
|
87 |
+
"cell_type": "code",
|
88 |
+
"execution_count": null,
|
89 |
+
"id": "9302fb6a",
|
90 |
+
"metadata": {},
|
91 |
+
"outputs": [],
|
92 |
+
"source": [
|
93 |
+
"# downsample to 24 kHz\n",
|
94 |
+
"\n",
|
95 |
+
"for p in speakers:\n",
|
96 |
+
" directory = __OUTPATH__ + '/p' + str(p)\n",
|
97 |
+
" if not os.path.exists(directory):\n",
|
98 |
+
" audio = combine(__CORPUSPATH__ + '/wav48/p' + str(p))\n",
|
99 |
+
" chunks = split(audio)\n",
|
100 |
+
" save_chunks(chunks, directory)"
|
101 |
+
]
|
102 |
+
},
|
103 |
+
{
|
104 |
+
"cell_type": "code",
|
105 |
+
"execution_count": null,
|
106 |
+
"id": "4b0ca022",
|
107 |
+
"metadata": {},
|
108 |
+
"outputs": [],
|
109 |
+
"source": [
|
110 |
+
"# get all speakers\n",
|
111 |
+
"\n",
|
112 |
+
"data_list = []\n",
|
113 |
+
"for path, subdirs, files in os.walk(__OUTPATH__):\n",
|
114 |
+
" for name in files:\n",
|
115 |
+
" if name.endswith(\".wav\"):\n",
|
116 |
+
" speaker = int(path.split('/')[-1].replace('p', ''))\n",
|
117 |
+
" if speaker in speakers:\n",
|
118 |
+
" data_list.append({\"Path\": os.path.join(path, name), \"Speaker\": int(speakers.index(speaker)) + 1})\n",
|
119 |
+
" \n",
|
120 |
+
"import pandas as pd\n",
|
121 |
+
"\n",
|
122 |
+
"data_list = pd.DataFrame(data_list)\n",
|
123 |
+
"data_list = data_list.sample(frac=1)\n",
|
124 |
+
"\n",
|
125 |
+
"import random\n",
|
126 |
+
"\n",
|
127 |
+
"split_idx = round(len(data_list) * 0.1)\n",
|
128 |
+
"\n",
|
129 |
+
"test_data = data_list[:split_idx]\n",
|
130 |
+
"train_data = data_list[split_idx:]"
|
131 |
+
]
|
132 |
+
},
|
133 |
+
{
|
134 |
+
"cell_type": "code",
|
135 |
+
"execution_count": null,
|
136 |
+
"id": "88df2a45",
|
137 |
+
"metadata": {},
|
138 |
+
"outputs": [],
|
139 |
+
"source": [
|
140 |
+
"# write to file \n",
|
141 |
+
"\n",
|
142 |
+
"file_str = \"\"\n",
|
143 |
+
"for index, k in train_data.iterrows():\n",
|
144 |
+
" file_str += k['Path'] + \"|\" +str(k['Speaker'] - 1)+ '\\n'\n",
|
145 |
+
"text_file = open(__OUTPATH__ + \"/train_list.txt\", \"w\")\n",
|
146 |
+
"text_file.write(file_str)\n",
|
147 |
+
"text_file.close()\n",
|
148 |
+
"\n",
|
149 |
+
"file_str = \"\"\n",
|
150 |
+
"for index, k in test_data.iterrows():\n",
|
151 |
+
" file_str += k['Path'] + \"|\" + str(k['Speaker'] - 1) + '\\n'\n",
|
152 |
+
"text_file = open(__OUTPATH__ + \"/val_list.txt\", \"w\")\n",
|
153 |
+
"text_file.write(file_str)\n",
|
154 |
+
"text_file.close()"
|
155 |
+
]
|
156 |
+
}
|
157 |
+
],
|
158 |
+
"metadata": {
|
159 |
+
"kernelspec": {
|
160 |
+
"display_name": "Python 3",
|
161 |
+
"language": "python",
|
162 |
+
"name": "python3"
|
163 |
+
},
|
164 |
+
"language_info": {
|
165 |
+
"codemirror_mode": {
|
166 |
+
"name": "ipython",
|
167 |
+
"version": 3
|
168 |
+
},
|
169 |
+
"file_extension": ".py",
|
170 |
+
"mimetype": "text/x-python",
|
171 |
+
"name": "python",
|
172 |
+
"nbconvert_exporter": "python",
|
173 |
+
"pygments_lexer": "ipython3",
|
174 |
+
"version": "3.7.10"
|
175 |
+
}
|
176 |
+
},
|
177 |
+
"nbformat": 4,
|
178 |
+
"nbformat_minor": 5
|
179 |
+
}
|
starganv2vc_paddle/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
MIT License
|
2 |
+
|
3 |
+
Copyright (c) 2021 Aaron (Yinghao) Li
|
4 |
+
|
5 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6 |
+
of this software and associated documentation files (the "Software"), to deal
|
7 |
+
in the Software without restriction, including without limitation the rights
|
8 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9 |
+
copies of the Software, and to permit persons to whom the Software is
|
10 |
+
furnished to do so, subject to the following conditions:
|
11 |
+
|
12 |
+
The above copyright notice and this permission notice shall be included in all
|
13 |
+
copies or substantial portions of the Software.
|
14 |
+
|
15 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21 |
+
SOFTWARE.
|
starganv2vc_paddle/Utils/ASR/__init__.py
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
|
starganv2vc_paddle/Utils/ASR/layers.py
ADDED
@@ -0,0 +1,359 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import math
|
2 |
+
import paddle
|
3 |
+
from paddle import nn
|
4 |
+
from typing import Optional, Any
|
5 |
+
from paddle import Tensor
|
6 |
+
import paddle.nn.functional as F
|
7 |
+
import paddleaudio
|
8 |
+
import paddleaudio.functional as audio_F
|
9 |
+
|
10 |
+
import random
|
11 |
+
random.seed(0)
|
12 |
+
|
13 |
+
|
14 |
+
def _get_activation_fn(activ):
|
15 |
+
if activ == 'relu':
|
16 |
+
return nn.ReLU()
|
17 |
+
elif activ == 'lrelu':
|
18 |
+
return nn.LeakyReLU(0.2)
|
19 |
+
elif activ == 'swish':
|
20 |
+
return nn.Swish()
|
21 |
+
else:
|
22 |
+
raise RuntimeError('Unexpected activ type %s, expected [relu, lrelu, swish]' % activ)
|
23 |
+
|
24 |
+
class LinearNorm(paddle.nn.Layer):
|
25 |
+
def __init__(self, in_dim, out_dim, bias=True, w_init_gain='linear'):
|
26 |
+
super(LinearNorm, self).__init__()
|
27 |
+
self.linear_layer = paddle.nn.Linear(in_dim, out_dim, bias_attr=bias)
|
28 |
+
|
29 |
+
if float('.'.join(paddle.__version__.split('.')[:2])) >= 2.3:
|
30 |
+
gain = paddle.nn.initializer.calculate_gain(w_init_gain)
|
31 |
+
paddle.nn.initializer.XavierUniform()(self.linear_layer.weight)
|
32 |
+
self.linear_layer.weight.set_value(gain * self.linear_layer.weight)
|
33 |
+
|
34 |
+
def forward(self, x):
|
35 |
+
return self.linear_layer(x)
|
36 |
+
|
37 |
+
|
38 |
+
class ConvNorm(paddle.nn.Layer):
|
39 |
+
def __init__(self, in_channels, out_channels, kernel_size=1, stride=1,
|
40 |
+
padding=None, dilation=1, bias=True, w_init_gain='linear', param=None):
|
41 |
+
super(ConvNorm, self).__init__()
|
42 |
+
if padding is None:
|
43 |
+
assert(kernel_size % 2 == 1)
|
44 |
+
padding = int(dilation * (kernel_size - 1) / 2)
|
45 |
+
|
46 |
+
self.conv = paddle.nn.Conv1D(in_channels, out_channels,
|
47 |
+
kernel_size=kernel_size, stride=stride,
|
48 |
+
padding=padding, dilation=dilation,
|
49 |
+
bias_attr=bias)
|
50 |
+
|
51 |
+
if float('.'.join(paddle.__version__.split('.')[:2])) >= 2.3:
|
52 |
+
gain = paddle.nn.initializer.calculate_gain(w_init_gain, param=param)
|
53 |
+
paddle.nn.initializer.XavierUniform()(self.conv.weight)
|
54 |
+
self.conv.weight.set_value(gain * self.conv.weight)
|
55 |
+
|
56 |
+
def forward(self, signal):
|
57 |
+
conv_signal = self.conv(signal)
|
58 |
+
return conv_signal
|
59 |
+
|
60 |
+
class CausualConv(nn.Layer):
|
61 |
+
def __init__(self, in_channels, out_channels, kernel_size=1, stride=1, padding=1, dilation=1, bias=True, w_init_gain='linear', param=None):
|
62 |
+
super(CausualConv, self).__init__()
|
63 |
+
if padding is None:
|
64 |
+
assert(kernel_size % 2 == 1)
|
65 |
+
padding = int(dilation * (kernel_size - 1) / 2) * 2
|
66 |
+
else:
|
67 |
+
self.padding = padding * 2
|
68 |
+
self.conv = nn.Conv1D(in_channels, out_channels,
|
69 |
+
kernel_size=kernel_size, stride=stride,
|
70 |
+
padding=self.padding,
|
71 |
+
dilation=dilation,
|
72 |
+
bias_attr=bias)
|
73 |
+
|
74 |
+
if float('.'.join(paddle.__version__.split('.')[:2])) >= 2.3:
|
75 |
+
gain = paddle.nn.initializer.calculate_gain(w_init_gain, param=param)
|
76 |
+
paddle.nn.initializer.XavierUniform()(self.conv.weight)
|
77 |
+
self.conv.weight.set_value(gain * self.conv.weight)
|
78 |
+
|
79 |
+
def forward(self, x):
|
80 |
+
x = self.conv(x)
|
81 |
+
x = x[:, :, :-self.padding]
|
82 |
+
return x
|
83 |
+
|
84 |
+
class CausualBlock(nn.Layer):
|
85 |
+
def __init__(self, hidden_dim, n_conv=3, dropout_p=0.2, activ='lrelu'):
|
86 |
+
super(CausualBlock, self).__init__()
|
87 |
+
self.blocks = nn.LayerList([
|
88 |
+
self._get_conv(hidden_dim, dilation=3**i, activ=activ, dropout_p=dropout_p)
|
89 |
+
for i in range(n_conv)])
|
90 |
+
|
91 |
+
def forward(self, x):
|
92 |
+
for block in self.blocks:
|
93 |
+
res = x
|
94 |
+
x = block(x)
|
95 |
+
x += res
|
96 |
+
return x
|
97 |
+
|
98 |
+
def _get_conv(self, hidden_dim, dilation, activ='lrelu', dropout_p=0.2):
|
99 |
+
layers = [
|
100 |
+
CausualConv(hidden_dim, hidden_dim, kernel_size=3, padding=dilation, dilation=dilation),
|
101 |
+
_get_activation_fn(activ),
|
102 |
+
nn.BatchNorm1D(hidden_dim),
|
103 |
+
nn.Dropout(p=dropout_p),
|
104 |
+
CausualConv(hidden_dim, hidden_dim, kernel_size=3, padding=1, dilation=1),
|
105 |
+
_get_activation_fn(activ),
|
106 |
+
nn.Dropout(p=dropout_p)
|
107 |
+
]
|
108 |
+
return nn.Sequential(*layers)
|
109 |
+
|
110 |
+
class ConvBlock(nn.Layer):
|
111 |
+
def __init__(self, hidden_dim, n_conv=3, dropout_p=0.2, activ='relu'):
|
112 |
+
super().__init__()
|
113 |
+
self._n_groups = 8
|
114 |
+
self.blocks = nn.LayerList([
|
115 |
+
self._get_conv(hidden_dim, dilation=3**i, activ=activ, dropout_p=dropout_p)
|
116 |
+
for i in range(n_conv)])
|
117 |
+
|
118 |
+
|
119 |
+
def forward(self, x):
|
120 |
+
for block in self.blocks:
|
121 |
+
res = x
|
122 |
+
x = block(x)
|
123 |
+
x += res
|
124 |
+
return x
|
125 |
+
|
126 |
+
def _get_conv(self, hidden_dim, dilation, activ='relu', dropout_p=0.2):
|
127 |
+
layers = [
|
128 |
+
ConvNorm(hidden_dim, hidden_dim, kernel_size=3, padding=dilation, dilation=dilation),
|
129 |
+
_get_activation_fn(activ),
|
130 |
+
nn.GroupNorm(num_groups=self._n_groups, num_channels=hidden_dim),
|
131 |
+
nn.Dropout(p=dropout_p),
|
132 |
+
ConvNorm(hidden_dim, hidden_dim, kernel_size=3, padding=1, dilation=1),
|
133 |
+
_get_activation_fn(activ),
|
134 |
+
nn.Dropout(p=dropout_p)
|
135 |
+
]
|
136 |
+
return nn.Sequential(*layers)
|
137 |
+
|
138 |
+
class LocationLayer(nn.Layer):
|
139 |
+
def __init__(self, attention_n_filters, attention_kernel_size,
|
140 |
+
attention_dim):
|
141 |
+
super(LocationLayer, self).__init__()
|
142 |
+
padding = int((attention_kernel_size - 1) / 2)
|
143 |
+
self.location_conv = ConvNorm(2, attention_n_filters,
|
144 |
+
kernel_size=attention_kernel_size,
|
145 |
+
padding=padding, bias=False, stride=1,
|
146 |
+
dilation=1)
|
147 |
+
self.location_dense = LinearNorm(attention_n_filters, attention_dim,
|
148 |
+
bias=False, w_init_gain='tanh')
|
149 |
+
|
150 |
+
def forward(self, attention_weights_cat):
|
151 |
+
processed_attention = self.location_conv(attention_weights_cat)
|
152 |
+
processed_attention = processed_attention.transpose([0, 2, 1])
|
153 |
+
processed_attention = self.location_dense(processed_attention)
|
154 |
+
return processed_attention
|
155 |
+
|
156 |
+
|
157 |
+
class Attention(nn.Layer):
|
158 |
+
def __init__(self, attention_rnn_dim, embedding_dim, attention_dim,
|
159 |
+
attention_location_n_filters, attention_location_kernel_size):
|
160 |
+
super(Attention, self).__init__()
|
161 |
+
self.query_layer = LinearNorm(attention_rnn_dim, attention_dim,
|
162 |
+
bias=False, w_init_gain='tanh')
|
163 |
+
self.memory_layer = LinearNorm(embedding_dim, attention_dim, bias=False,
|
164 |
+
w_init_gain='tanh')
|
165 |
+
self.v = LinearNorm(attention_dim, 1, bias=False)
|
166 |
+
self.location_layer = LocationLayer(attention_location_n_filters,
|
167 |
+
attention_location_kernel_size,
|
168 |
+
attention_dim)
|
169 |
+
self.score_mask_value = -float("inf")
|
170 |
+
|
171 |
+
def get_alignment_energies(self, query, processed_memory,
|
172 |
+
attention_weights_cat):
|
173 |
+
"""
|
174 |
+
PARAMS
|
175 |
+
------
|
176 |
+
query: decoder output (batch, n_mel_channels * n_frames_per_step)
|
177 |
+
processed_memory: processed encoder outputs (B, T_in, attention_dim)
|
178 |
+
attention_weights_cat: cumulative and prev. att weights (B, 2, max_time)
|
179 |
+
RETURNS
|
180 |
+
-------
|
181 |
+
alignment (batch, max_time)
|
182 |
+
"""
|
183 |
+
|
184 |
+
processed_query = self.query_layer(query.unsqueeze(1))
|
185 |
+
processed_attention_weights = self.location_layer(attention_weights_cat)
|
186 |
+
energies = self.v(paddle.tanh(
|
187 |
+
processed_query + processed_attention_weights + processed_memory))
|
188 |
+
|
189 |
+
energies = energies.squeeze(-1)
|
190 |
+
return energies
|
191 |
+
|
192 |
+
def forward(self, attention_hidden_state, memory, processed_memory,
|
193 |
+
attention_weights_cat, mask):
|
194 |
+
"""
|
195 |
+
PARAMS
|
196 |
+
------
|
197 |
+
attention_hidden_state: attention rnn last output
|
198 |
+
memory: encoder outputs
|
199 |
+
processed_memory: processed encoder outputs
|
200 |
+
attention_weights_cat: previous and cummulative attention weights
|
201 |
+
mask: binary mask for padded data
|
202 |
+
"""
|
203 |
+
alignment = self.get_alignment_energies(
|
204 |
+
attention_hidden_state, processed_memory, attention_weights_cat)
|
205 |
+
|
206 |
+
if mask is not None:
|
207 |
+
alignment.data.masked_fill_(mask, self.score_mask_value)
|
208 |
+
|
209 |
+
attention_weights = F.softmax(alignment, axis=1)
|
210 |
+
attention_context = paddle.bmm(attention_weights.unsqueeze(1), memory)
|
211 |
+
attention_context = attention_context.squeeze(1)
|
212 |
+
|
213 |
+
return attention_context, attention_weights
|
214 |
+
|
215 |
+
|
216 |
+
class ForwardAttentionV2(nn.Layer):
|
217 |
+
def __init__(self, attention_rnn_dim, embedding_dim, attention_dim,
|
218 |
+
attention_location_n_filters, attention_location_kernel_size):
|
219 |
+
super(ForwardAttentionV2, self).__init__()
|
220 |
+
self.query_layer = LinearNorm(attention_rnn_dim, attention_dim,
|
221 |
+
bias=False, w_init_gain='tanh')
|
222 |
+
self.memory_layer = LinearNorm(embedding_dim, attention_dim, bias=False,
|
223 |
+
w_init_gain='tanh')
|
224 |
+
self.v = LinearNorm(attention_dim, 1, bias=False)
|
225 |
+
self.location_layer = LocationLayer(attention_location_n_filters,
|
226 |
+
attention_location_kernel_size,
|
227 |
+
attention_dim)
|
228 |
+
self.score_mask_value = -float(1e20)
|
229 |
+
|
230 |
+
def get_alignment_energies(self, query, processed_memory,
|
231 |
+
attention_weights_cat):
|
232 |
+
"""
|
233 |
+
PARAMS
|
234 |
+
------
|
235 |
+
query: decoder output (batch, n_mel_channels * n_frames_per_step)
|
236 |
+
processed_memory: processed encoder outputs (B, T_in, attention_dim)
|
237 |
+
attention_weights_cat: prev. and cumulative att weights (B, 2, max_time)
|
238 |
+
RETURNS
|
239 |
+
-------
|
240 |
+
alignment (batch, max_time)
|
241 |
+
"""
|
242 |
+
|
243 |
+
processed_query = self.query_layer(query.unsqueeze(1))
|
244 |
+
processed_attention_weights = self.location_layer(attention_weights_cat)
|
245 |
+
energies = self.v(paddle.tanh(
|
246 |
+
processed_query + processed_attention_weights + processed_memory))
|
247 |
+
|
248 |
+
energies = energies.squeeze(-1)
|
249 |
+
return energies
|
250 |
+
|
251 |
+
def forward(self, attention_hidden_state, memory, processed_memory,
|
252 |
+
attention_weights_cat, mask, log_alpha):
|
253 |
+
"""
|
254 |
+
PARAMS
|
255 |
+
------
|
256 |
+
attention_hidden_state: attention rnn last output
|
257 |
+
memory: encoder outputs
|
258 |
+
processed_memory: processed encoder outputs
|
259 |
+
attention_weights_cat: previous and cummulative attention weights
|
260 |
+
mask: binary mask for padded data
|
261 |
+
"""
|
262 |
+
log_energy = self.get_alignment_energies(
|
263 |
+
attention_hidden_state, processed_memory, attention_weights_cat)
|
264 |
+
|
265 |
+
#log_energy =
|
266 |
+
|
267 |
+
if mask is not None:
|
268 |
+
log_energy[:] = paddle.where(mask, paddle.full(log_energy.shape, self.score_mask_value, log_energy.dtype), log_energy)
|
269 |
+
|
270 |
+
#attention_weights = F.softmax(alignment, dim=1)
|
271 |
+
|
272 |
+
#content_score = log_energy.unsqueeze(1) #[B, MAX_TIME] -> [B, 1, MAX_TIME]
|
273 |
+
#log_alpha = log_alpha.unsqueeze(2) #[B, MAX_TIME] -> [B, MAX_TIME, 1]
|
274 |
+
|
275 |
+
#log_total_score = log_alpha + content_score
|
276 |
+
|
277 |
+
#previous_attention_weights = attention_weights_cat[:,0,:]
|
278 |
+
|
279 |
+
log_alpha_shift_padded = []
|
280 |
+
max_time = log_energy.shape[1]
|
281 |
+
for sft in range(2):
|
282 |
+
shifted = log_alpha[:,:max_time-sft]
|
283 |
+
shift_padded = F.pad(shifted, (sft,0), 'constant', self.score_mask_value)
|
284 |
+
log_alpha_shift_padded.append(shift_padded.unsqueeze(2))
|
285 |
+
|
286 |
+
biased = paddle.logsumexp(paddle.conat(log_alpha_shift_padded,2), 2)
|
287 |
+
|
288 |
+
log_alpha_new = biased + log_energy
|
289 |
+
|
290 |
+
attention_weights = F.softmax(log_alpha_new, axis=1)
|
291 |
+
|
292 |
+
attention_context = paddle.bmm(attention_weights.unsqueeze(1), memory)
|
293 |
+
attention_context = attention_context.squeeze(1)
|
294 |
+
|
295 |
+
return attention_context, attention_weights, log_alpha_new
|
296 |
+
|
297 |
+
|
298 |
+
class PhaseShuffle2D(nn.Layer):
|
299 |
+
def __init__(self, n=2):
|
300 |
+
super(PhaseShuffle2D, self).__init__()
|
301 |
+
self.n = n
|
302 |
+
self.random = random.Random(1)
|
303 |
+
|
304 |
+
def forward(self, x, move=None):
|
305 |
+
# x.size = (B, C, M, L)
|
306 |
+
if move is None:
|
307 |
+
move = self.random.randint(-self.n, self.n)
|
308 |
+
|
309 |
+
if move == 0:
|
310 |
+
return x
|
311 |
+
else:
|
312 |
+
left = x[:, :, :, :move]
|
313 |
+
right = x[:, :, :, move:]
|
314 |
+
shuffled = paddle.concat([right, left], axis=3)
|
315 |
+
return shuffled
|
316 |
+
|
317 |
+
class PhaseShuffle1D(nn.Layer):
|
318 |
+
def __init__(self, n=2):
|
319 |
+
super(PhaseShuffle1D, self).__init__()
|
320 |
+
self.n = n
|
321 |
+
self.random = random.Random(1)
|
322 |
+
|
323 |
+
def forward(self, x, move=None):
|
324 |
+
# x.size = (B, C, M, L)
|
325 |
+
if move is None:
|
326 |
+
move = self.random.randint(-self.n, self.n)
|
327 |
+
|
328 |
+
if move == 0:
|
329 |
+
return x
|
330 |
+
else:
|
331 |
+
left = x[:, :, :move]
|
332 |
+
right = x[:, :, move:]
|
333 |
+
shuffled = paddle.concat([right, left], axis=2)
|
334 |
+
|
335 |
+
return shuffled
|
336 |
+
|
337 |
+
class MFCC(nn.Layer):
|
338 |
+
def __init__(self, n_mfcc=40, n_mels=80):
|
339 |
+
super(MFCC, self).__init__()
|
340 |
+
self.n_mfcc = n_mfcc
|
341 |
+
self.n_mels = n_mels
|
342 |
+
self.norm = 'ortho'
|
343 |
+
dct_mat = audio_F.create_dct(self.n_mfcc, self.n_mels, self.norm)
|
344 |
+
self.register_buffer('dct_mat', dct_mat)
|
345 |
+
|
346 |
+
def forward(self, mel_specgram):
|
347 |
+
if len(mel_specgram.shape) == 2:
|
348 |
+
mel_specgram = mel_specgram.unsqueeze(0)
|
349 |
+
unsqueezed = True
|
350 |
+
else:
|
351 |
+
unsqueezed = False
|
352 |
+
# (channel, n_mels, time).tranpose(...) dot (n_mels, n_mfcc)
|
353 |
+
# -> (channel, time, n_mfcc).tranpose(...)
|
354 |
+
mfcc = paddle.matmul(mel_specgram.transpose([0, 2, 1]), self.dct_mat).transpose([0, 2, 1])
|
355 |
+
|
356 |
+
# unpack batch
|
357 |
+
if unsqueezed:
|
358 |
+
mfcc = mfcc.squeeze(0)
|
359 |
+
return mfcc
|
starganv2vc_paddle/Utils/ASR/models.py
ADDED
@@ -0,0 +1,187 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import math
|
2 |
+
import paddle
|
3 |
+
from paddle import nn
|
4 |
+
from paddle.nn import TransformerEncoder
|
5 |
+
import paddle.nn.functional as F
|
6 |
+
from .layers import MFCC, Attention, LinearNorm, ConvNorm, ConvBlock
|
7 |
+
|
8 |
+
class ASRCNN(nn.Layer):
|
9 |
+
def __init__(self,
|
10 |
+
input_dim=80,
|
11 |
+
hidden_dim=256,
|
12 |
+
n_token=35,
|
13 |
+
n_layers=6,
|
14 |
+
token_embedding_dim=256,
|
15 |
+
|
16 |
+
):
|
17 |
+
super().__init__()
|
18 |
+
self.n_token = n_token
|
19 |
+
self.n_down = 1
|
20 |
+
self.to_mfcc = MFCC()
|
21 |
+
self.init_cnn = ConvNorm(input_dim//2, hidden_dim, kernel_size=7, padding=3, stride=2)
|
22 |
+
self.cnns = nn.Sequential(
|
23 |
+
*[nn.Sequential(
|
24 |
+
ConvBlock(hidden_dim),
|
25 |
+
nn.GroupNorm(num_groups=1, num_channels=hidden_dim)
|
26 |
+
) for n in range(n_layers)])
|
27 |
+
self.projection = ConvNorm(hidden_dim, hidden_dim // 2)
|
28 |
+
self.ctc_linear = nn.Sequential(
|
29 |
+
LinearNorm(hidden_dim//2, hidden_dim),
|
30 |
+
nn.ReLU(),
|
31 |
+
LinearNorm(hidden_dim, n_token))
|
32 |
+
self.asr_s2s = ASRS2S(
|
33 |
+
embedding_dim=token_embedding_dim,
|
34 |
+
hidden_dim=hidden_dim//2,
|
35 |
+
n_token=n_token)
|
36 |
+
|
37 |
+
def forward(self, x, src_key_padding_mask=None, text_input=None):
|
38 |
+
x = self.to_mfcc(x)
|
39 |
+
x = self.init_cnn(x)
|
40 |
+
x = self.cnns(x)
|
41 |
+
x = self.projection(x)
|
42 |
+
x = x.transpose([0, 2, 1])
|
43 |
+
ctc_logit = self.ctc_linear(x)
|
44 |
+
if text_input is not None:
|
45 |
+
_, s2s_logit, s2s_attn = self.asr_s2s(x, src_key_padding_mask, text_input)
|
46 |
+
return ctc_logit, s2s_logit, s2s_attn
|
47 |
+
else:
|
48 |
+
return ctc_logit
|
49 |
+
|
50 |
+
def get_feature(self, x):
|
51 |
+
x = self.to_mfcc(x.squeeze(1))
|
52 |
+
x = self.init_cnn(x)
|
53 |
+
x = self.cnns(x)
|
54 |
+
x = self.projection(x)
|
55 |
+
return x
|
56 |
+
|
57 |
+
def length_to_mask(self, lengths):
|
58 |
+
mask = paddle.arange(lengths.max()).unsqueeze(0).expand((lengths.shape[0], -1)).astype(lengths.dtype)
|
59 |
+
mask = paddle.greater_than(mask+1, lengths.unsqueeze(1))
|
60 |
+
return mask
|
61 |
+
|
62 |
+
def get_future_mask(self, out_length, unmask_future_steps=0):
|
63 |
+
"""
|
64 |
+
Args:
|
65 |
+
out_length (int): returned mask shape is (out_length, out_length).
|
66 |
+
unmask_futre_steps (int): unmasking future step size.
|
67 |
+
Return:
|
68 |
+
mask (paddle.BoolTensor): mask future timesteps mask[i, j] = True if i > j + unmask_future_steps else False
|
69 |
+
"""
|
70 |
+
index_tensor = paddle.arange(out_length).unsqueeze(0).expand([out_length, -1])
|
71 |
+
mask = paddle.greater_than(index_tensor, index_tensor.T + unmask_future_steps)
|
72 |
+
return mask
|
73 |
+
|
74 |
+
class ASRS2S(nn.Layer):
|
75 |
+
def __init__(self,
|
76 |
+
embedding_dim=256,
|
77 |
+
hidden_dim=512,
|
78 |
+
n_location_filters=32,
|
79 |
+
location_kernel_size=63,
|
80 |
+
n_token=40):
|
81 |
+
super(ASRS2S, self).__init__()
|
82 |
+
self.embedding = nn.Embedding(n_token, embedding_dim)
|
83 |
+
val_range = math.sqrt(6 / hidden_dim)
|
84 |
+
nn.initializer.Uniform(-val_range, val_range)(self.embedding.weight)
|
85 |
+
|
86 |
+
self.decoder_rnn_dim = hidden_dim
|
87 |
+
self.project_to_n_symbols = nn.Linear(self.decoder_rnn_dim, n_token)
|
88 |
+
self.attention_layer = Attention(
|
89 |
+
self.decoder_rnn_dim,
|
90 |
+
hidden_dim,
|
91 |
+
hidden_dim,
|
92 |
+
n_location_filters,
|
93 |
+
location_kernel_size
|
94 |
+
)
|
95 |
+
self.decoder_rnn = nn.LSTMCell(self.decoder_rnn_dim + embedding_dim, self.decoder_rnn_dim)
|
96 |
+
self.project_to_hidden = nn.Sequential(
|
97 |
+
LinearNorm(self.decoder_rnn_dim * 2, hidden_dim),
|
98 |
+
nn.Tanh())
|
99 |
+
self.sos = 1
|
100 |
+
self.eos = 2
|
101 |
+
|
102 |
+
def initialize_decoder_states(self, memory, mask):
|
103 |
+
"""
|
104 |
+
moemory.shape = (B, L, H) = (Batchsize, Maxtimestep, Hiddendim)
|
105 |
+
"""
|
106 |
+
B, L, H = memory.shape
|
107 |
+
self.decoder_hidden = paddle.zeros((B, self.decoder_rnn_dim)).astype(memory.dtype)
|
108 |
+
self.decoder_cell = paddle.zeros((B, self.decoder_rnn_dim)).astype(memory.dtype)
|
109 |
+
self.attention_weights = paddle.zeros((B, L)).astype(memory.dtype)
|
110 |
+
self.attention_weights_cum = paddle.zeros((B, L)).astype(memory.dtype)
|
111 |
+
self.attention_context = paddle.zeros((B, H)).astype(memory.dtype)
|
112 |
+
self.memory = memory
|
113 |
+
self.processed_memory = self.attention_layer.memory_layer(memory)
|
114 |
+
self.mask = mask
|
115 |
+
self.unk_index = 3
|
116 |
+
self.random_mask = 0.1
|
117 |
+
|
118 |
+
def forward(self, memory, memory_mask, text_input):
|
119 |
+
"""
|
120 |
+
moemory.shape = (B, L, H) = (Batchsize, Maxtimestep, Hiddendim)
|
121 |
+
moemory_mask.shape = (B, L, )
|
122 |
+
texts_input.shape = (B, T)
|
123 |
+
"""
|
124 |
+
self.initialize_decoder_states(memory, memory_mask)
|
125 |
+
# text random mask
|
126 |
+
random_mask = (paddle.rand(text_input.shape) < self.random_mask)
|
127 |
+
_text_input = text_input.clone()
|
128 |
+
_text_input[:] = paddle.where(random_mask, paddle.full(_text_input.shape, self.unk_index, _text_input.dtype), _text_input)
|
129 |
+
decoder_inputs = self.embedding(_text_input).transpose([1, 0, 2]) # -> [T, B, channel]
|
130 |
+
start_embedding = self.embedding(
|
131 |
+
paddle.to_tensor([self.sos]*decoder_inputs.shape[1], dtype=paddle.long))
|
132 |
+
decoder_inputs = paddle.concat((start_embedding.unsqueeze(0), decoder_inputs), axis=0)
|
133 |
+
|
134 |
+
hidden_outputs, logit_outputs, alignments = [], [], []
|
135 |
+
while len(hidden_outputs) < decoder_inputs.shape[0]:
|
136 |
+
|
137 |
+
decoder_input = decoder_inputs[len(hidden_outputs)]
|
138 |
+
hidden, logit, attention_weights = self.decode(decoder_input)
|
139 |
+
hidden_outputs += [hidden]
|
140 |
+
logit_outputs += [logit]
|
141 |
+
alignments += [attention_weights]
|
142 |
+
|
143 |
+
hidden_outputs, logit_outputs, alignments = \
|
144 |
+
self.parse_decoder_outputs(
|
145 |
+
hidden_outputs, logit_outputs, alignments)
|
146 |
+
|
147 |
+
return hidden_outputs, logit_outputs, alignments
|
148 |
+
|
149 |
+
|
150 |
+
def decode(self, decoder_input):
|
151 |
+
|
152 |
+
cell_input = paddle.concat((decoder_input, self.attention_context), -1)
|
153 |
+
self.decoder_rnn.flatten_parameters()
|
154 |
+
self.decoder_hidden, self.decoder_cell = self.decoder_rnn(
|
155 |
+
cell_input,
|
156 |
+
(self.decoder_hidden, self.decoder_cell))
|
157 |
+
|
158 |
+
attention_weights_cat = paddle.concat(
|
159 |
+
(self.attention_weights.unsqueeze(1),
|
160 |
+
self.attention_weights_cum.unsqueeze(1)),axis=1)
|
161 |
+
|
162 |
+
self.attention_context, self.attention_weights = self.attention_layer(
|
163 |
+
self.decoder_hidden,
|
164 |
+
self.memory,
|
165 |
+
self.processed_memory,
|
166 |
+
attention_weights_cat,
|
167 |
+
self.mask)
|
168 |
+
|
169 |
+
self.attention_weights_cum += self.attention_weights
|
170 |
+
|
171 |
+
hidden_and_context = paddle.concat((self.decoder_hidden, self.attention_context), -1)
|
172 |
+
hidden = self.project_to_hidden(hidden_and_context)
|
173 |
+
|
174 |
+
# dropout to increasing g
|
175 |
+
logit = self.project_to_n_symbols(F.dropout(hidden, 0.5, self.training))
|
176 |
+
|
177 |
+
return hidden, logit, self.attention_weights
|
178 |
+
|
179 |
+
def parse_decoder_outputs(self, hidden, logit, alignments):
|
180 |
+
|
181 |
+
# -> [B, T_out + 1, max_time]
|
182 |
+
alignments = paddle.stack(alignments).transpose([1,0,2])
|
183 |
+
# [T_out + 1, B, n_symbols] -> [B, T_out + 1, n_symbols]
|
184 |
+
logit = paddle.stack(logit).transpose([1,0,2])
|
185 |
+
hidden = paddle.stack(hidden).transpose([1,0,2])
|
186 |
+
|
187 |
+
return hidden, logit, alignments
|
starganv2vc_paddle/Utils/JDC/__init__.py
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
|
starganv2vc_paddle/Utils/JDC/model.py
ADDED
@@ -0,0 +1,174 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"""
|
2 |
+
Implementation of model from:
|
3 |
+
Kum et al. - "Joint Detection and Classification of Singing Voice Melody Using
|
4 |
+
Convolutional Recurrent Neural Networks" (2019)
|
5 |
+
Link: https://www.semanticscholar.org/paper/Joint-Detection-and-Classification-of-Singing-Voice-Kum-Nam/60a2ad4c7db43bace75805054603747fcd062c0d
|
6 |
+
"""
|
7 |
+
import paddle
|
8 |
+
from paddle import nn
|
9 |
+
|
10 |
+
class JDCNet(nn.Layer):
|
11 |
+
"""
|
12 |
+
Joint Detection and Classification Network model for singing voice melody.
|
13 |
+
"""
|
14 |
+
def __init__(self, num_class=722, seq_len=31, leaky_relu_slope=0.01):
|
15 |
+
super().__init__()
|
16 |
+
self.seq_len = seq_len # 31
|
17 |
+
self.num_class = num_class
|
18 |
+
|
19 |
+
# input = (b, 1, 31, 513), b = batch size
|
20 |
+
self.conv_block = nn.Sequential(
|
21 |
+
nn.Conv2D(in_channels=1, out_channels=64, kernel_size=3, padding=1, bias_attr=False), # out: (b, 64, 31, 513)
|
22 |
+
nn.BatchNorm2D(num_features=64),
|
23 |
+
nn.LeakyReLU(leaky_relu_slope),
|
24 |
+
nn.Conv2D(64, 64, 3, padding=1, bias_attr=False), # (b, 64, 31, 513)
|
25 |
+
)
|
26 |
+
|
27 |
+
# res blocks
|
28 |
+
self.res_block1 = ResBlock(in_channels=64, out_channels=128) # (b, 128, 31, 128)
|
29 |
+
self.res_block2 = ResBlock(in_channels=128, out_channels=192) # (b, 192, 31, 32)
|
30 |
+
self.res_block3 = ResBlock(in_channels=192, out_channels=256) # (b, 256, 31, 8)
|
31 |
+
|
32 |
+
# pool block
|
33 |
+
self.pool_block = nn.Sequential(
|
34 |
+
nn.BatchNorm2D(num_features=256),
|
35 |
+
nn.LeakyReLU(leaky_relu_slope),
|
36 |
+
nn.MaxPool2D(kernel_size=(1, 4)), # (b, 256, 31, 2)
|
37 |
+
nn.Dropout(p=0.5),
|
38 |
+
)
|
39 |
+
|
40 |
+
# maxpool layers (for auxiliary network inputs)
|
41 |
+
# in = (b, 128, 31, 513) from conv_block, out = (b, 128, 31, 2)
|
42 |
+
self.maxpool1 = nn.MaxPool2D(kernel_size=(1, 40))
|
43 |
+
# in = (b, 128, 31, 128) from res_block1, out = (b, 128, 31, 2)
|
44 |
+
self.maxpool2 = nn.MaxPool2D(kernel_size=(1, 20))
|
45 |
+
# in = (b, 128, 31, 32) from res_block2, out = (b, 128, 31, 2)
|
46 |
+
self.maxpool3 = nn.MaxPool2D(kernel_size=(1, 10))
|
47 |
+
|
48 |
+
# in = (b, 640, 31, 2), out = (b, 256, 31, 2)
|
49 |
+
self.detector_conv = nn.Sequential(
|
50 |
+
nn.Conv2D(640, 256, 1, bias_attr=False),
|
51 |
+
nn.BatchNorm2D(256),
|
52 |
+
nn.LeakyReLU(leaky_relu_slope),
|
53 |
+
nn.Dropout(p=0.5),
|
54 |
+
)
|
55 |
+
|
56 |
+
# input: (b, 31, 512) - resized from (b, 256, 31, 2)
|
57 |
+
self.bilstm_classifier = nn.LSTM(
|
58 |
+
input_size=512, hidden_size=256,
|
59 |
+
time_major=False, direction='bidirectional') # (b, 31, 512)
|
60 |
+
|
61 |
+
# input: (b, 31, 512) - resized from (b, 256, 31, 2)
|
62 |
+
self.bilstm_detector = nn.LSTM(
|
63 |
+
input_size=512, hidden_size=256,
|
64 |
+
time_major=False, direction='bidirectional') # (b, 31, 512)
|
65 |
+
|
66 |
+
# input: (b * 31, 512)
|
67 |
+
self.classifier = nn.Linear(in_features=512, out_features=self.num_class) # (b * 31, num_class)
|
68 |
+
|
69 |
+
# input: (b * 31, 512)
|
70 |
+
self.detector = nn.Linear(in_features=512, out_features=2) # (b * 31, 2) - binary classifier
|
71 |
+
|
72 |
+
# initialize weights
|
73 |
+
self.apply(self.init_weights)
|
74 |
+
|
75 |
+
def get_feature_GAN(self, x):
|
76 |
+
seq_len = x.shape[-2]
|
77 |
+
x = x.astype(paddle.float32).transpose([0,1,3,2] if len(x.shape) == 4 else [0,2,1])
|
78 |
+
|
79 |
+
convblock_out = self.conv_block(x)
|
80 |
+
|
81 |
+
resblock1_out = self.res_block1(convblock_out)
|
82 |
+
resblock2_out = self.res_block2(resblock1_out)
|
83 |
+
resblock3_out = self.res_block3(resblock2_out)
|
84 |
+
poolblock_out = self.pool_block[0](resblock3_out)
|
85 |
+
poolblock_out = self.pool_block[1](poolblock_out)
|
86 |
+
|
87 |
+
return poolblock_out.transpose([0,1,3,2] if len(poolblock_out.shape) == 4 else [0,2,1])
|
88 |
+
|
89 |
+
def forward(self, x):
|
90 |
+
"""
|
91 |
+
Returns:
|
92 |
+
classification_prediction, detection_prediction
|
93 |
+
sizes: (b, 31, 722), (b, 31, 2)
|
94 |
+
"""
|
95 |
+
###############################
|
96 |
+
# forward pass for classifier #
|
97 |
+
###############################
|
98 |
+
x = x.astype(paddle.float32).transpose([0,1,3,2] if len(x.shape) == 4 else [0,2,1])
|
99 |
+
|
100 |
+
convblock_out = self.conv_block(x)
|
101 |
+
|
102 |
+
resblock1_out = self.res_block1(convblock_out)
|
103 |
+
resblock2_out = self.res_block2(resblock1_out)
|
104 |
+
resblock3_out = self.res_block3(resblock2_out)
|
105 |
+
|
106 |
+
|
107 |
+
poolblock_out = self.pool_block[0](resblock3_out)
|
108 |
+
poolblock_out = self.pool_block[1](poolblock_out)
|
109 |
+
GAN_feature = poolblock_out.transpose([0,1,3,2] if len(poolblock_out.shape) == 4 else [0,2,1])
|
110 |
+
poolblock_out = self.pool_block[2](poolblock_out)
|
111 |
+
|
112 |
+
# (b, 256, 31, 2) => (b, 31, 256, 2) => (b, 31, 512)
|
113 |
+
classifier_out = poolblock_out.transpose([0, 2, 1, 3]).reshape((-1, self.seq_len, 512))
|
114 |
+
self.bilstm_classifier.flatten_parameters()
|
115 |
+
classifier_out, _ = self.bilstm_classifier(classifier_out) # ignore the hidden states
|
116 |
+
|
117 |
+
classifier_out = classifier_out.reshape((-1, 512)) # (b * 31, 512)
|
118 |
+
classifier_out = self.classifier(classifier_out)
|
119 |
+
classifier_out = classifier_out.reshape((-1, self.seq_len, self.num_class)) # (b, 31, num_class)
|
120 |
+
|
121 |
+
# sizes: (b, 31, 722), (b, 31, 2)
|
122 |
+
# classifier output consists of predicted pitch classes per frame
|
123 |
+
# detector output consists of: (isvoice, notvoice) estimates per frame
|
124 |
+
return paddle.abs(classifier_out.squeeze()), GAN_feature, poolblock_out
|
125 |
+
|
126 |
+
@staticmethod
|
127 |
+
def init_weights(m):
|
128 |
+
if isinstance(m, nn.Linear):
|
129 |
+
nn.initializer.KaimingUniform()(m.weight)
|
130 |
+
if m.bias is not None:
|
131 |
+
nn.initializer.Constant(0)(m.bias)
|
132 |
+
elif isinstance(m, nn.Conv2D):
|
133 |
+
nn.initializer.XavierNormal()(m.weight)
|
134 |
+
elif isinstance(m, nn.LSTM) or isinstance(m, nn.LSTMCell):
|
135 |
+
for p in m.parameters():
|
136 |
+
if len(p.shape) >= 2 and float('.'.join(paddle.__version__.split('.')[:2])) >= 2.3:
|
137 |
+
nn.initializer.Orthogonal()(p)
|
138 |
+
else:
|
139 |
+
nn.initializer.Normal()(p)
|
140 |
+
|
141 |
+
|
142 |
+
class ResBlock(nn.Layer):
|
143 |
+
def __init__(self, in_channels: int, out_channels: int, leaky_relu_slope=0.01):
|
144 |
+
super().__init__()
|
145 |
+
self.downsample = in_channels != out_channels
|
146 |
+
|
147 |
+
# BN / LReLU / MaxPool layer before the conv layer - see Figure 1b in the paper
|
148 |
+
self.pre_conv = nn.Sequential(
|
149 |
+
nn.BatchNorm2D(num_features=in_channels),
|
150 |
+
nn.LeakyReLU(leaky_relu_slope),
|
151 |
+
nn.MaxPool2D(kernel_size=(1, 2)), # apply downsampling on the y axis only
|
152 |
+
)
|
153 |
+
|
154 |
+
# conv layers
|
155 |
+
self.conv = nn.Sequential(
|
156 |
+
nn.Conv2D(in_channels=in_channels, out_channels=out_channels,
|
157 |
+
kernel_size=3, padding=1, bias_attr=False),
|
158 |
+
nn.BatchNorm2D(out_channels),
|
159 |
+
nn.LeakyReLU(leaky_relu_slope),
|
160 |
+
nn.Conv2D(out_channels, out_channels, 3, padding=1, bias_attr=False),
|
161 |
+
)
|
162 |
+
|
163 |
+
# 1 x 1 convolution layer to match the feature dimensions
|
164 |
+
self.conv1by1 = None
|
165 |
+
if self.downsample:
|
166 |
+
self.conv1by1 = nn.Conv2D(in_channels, out_channels, 1, bias_attr=False)
|
167 |
+
|
168 |
+
def forward(self, x):
|
169 |
+
x = self.pre_conv(x)
|
170 |
+
if self.downsample:
|
171 |
+
x = self.conv(x) + self.conv1by1(x)
|
172 |
+
else:
|
173 |
+
x = self.conv(x) + x
|
174 |
+
return x
|
starganv2vc_paddle/Utils/__init__.py
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
|
starganv2vc_paddle/fbank_matrix.pd
ADDED
Binary file (328 kB). View file
|
|
starganv2vc_paddle/losses.py
ADDED
@@ -0,0 +1,215 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#coding:utf-8
|
2 |
+
|
3 |
+
import os
|
4 |
+
import paddle
|
5 |
+
|
6 |
+
from paddle import nn
|
7 |
+
from munch import Munch
|
8 |
+
from starganv2vc_paddle.transforms import build_transforms
|
9 |
+
|
10 |
+
import paddle.nn.functional as F
|
11 |
+
import numpy as np
|
12 |
+
|
13 |
+
def compute_d_loss(nets, args, x_real, y_org, y_trg, z_trg=None, x_ref=None, use_r1_reg=True, use_adv_cls=False, use_con_reg=False):
|
14 |
+
args = Munch(args)
|
15 |
+
|
16 |
+
assert (z_trg is None) != (x_ref is None)
|
17 |
+
# with real audios
|
18 |
+
x_real.stop_gradient = False
|
19 |
+
out = nets.discriminator(x_real, y_org)
|
20 |
+
loss_real = adv_loss(out, 1)
|
21 |
+
|
22 |
+
# R1 regularizaition (https://arxiv.org/abs/1801.04406v4)
|
23 |
+
if use_r1_reg:
|
24 |
+
loss_reg = r1_reg(out, x_real)
|
25 |
+
else:
|
26 |
+
loss_reg = paddle.to_tensor([0.], dtype=paddle.float32)
|
27 |
+
|
28 |
+
# consistency regularization (bCR-GAN: https://arxiv.org/abs/2002.04724)
|
29 |
+
loss_con_reg = paddle.to_tensor([0.], dtype=paddle.float32)
|
30 |
+
if use_con_reg:
|
31 |
+
t = build_transforms()
|
32 |
+
out_aug = nets.discriminator(t(x_real).detach(), y_org)
|
33 |
+
loss_con_reg += F.smooth_l1_loss(out, out_aug)
|
34 |
+
|
35 |
+
# with fake audios
|
36 |
+
with paddle.no_grad():
|
37 |
+
if z_trg is not None:
|
38 |
+
s_trg = nets.mapping_network(z_trg, y_trg)
|
39 |
+
else: # x_ref is not None
|
40 |
+
s_trg = nets.style_encoder(x_ref, y_trg)
|
41 |
+
|
42 |
+
F0 = nets.f0_model.get_feature_GAN(x_real)
|
43 |
+
x_fake = nets.generator(x_real, s_trg, masks=None, F0=F0)
|
44 |
+
out = nets.discriminator(x_fake, y_trg)
|
45 |
+
loss_fake = adv_loss(out, 0)
|
46 |
+
if use_con_reg:
|
47 |
+
out_aug = nets.discriminator(t(x_fake).detach(), y_trg)
|
48 |
+
loss_con_reg += F.smooth_l1_loss(out, out_aug)
|
49 |
+
|
50 |
+
# adversarial classifier loss
|
51 |
+
if use_adv_cls:
|
52 |
+
out_de = nets.discriminator.classifier(x_fake)
|
53 |
+
loss_real_adv_cls = F.cross_entropy(out_de[y_org != y_trg], y_org[y_org != y_trg])
|
54 |
+
|
55 |
+
if use_con_reg:
|
56 |
+
out_de_aug = nets.discriminator.classifier(t(x_fake).detach())
|
57 |
+
loss_con_reg += F.smooth_l1_loss(out_de, out_de_aug)
|
58 |
+
else:
|
59 |
+
loss_real_adv_cls = paddle.zeros([1]).mean()
|
60 |
+
|
61 |
+
loss = loss_real + loss_fake + args.lambda_reg * loss_reg + \
|
62 |
+
args.lambda_adv_cls * loss_real_adv_cls + \
|
63 |
+
args.lambda_con_reg * loss_con_reg
|
64 |
+
|
65 |
+
return loss, Munch(real=loss_real.item(),
|
66 |
+
fake=loss_fake.item(),
|
67 |
+
reg=loss_reg.item(),
|
68 |
+
real_adv_cls=loss_real_adv_cls.item(),
|
69 |
+
con_reg=loss_con_reg.item())
|
70 |
+
|
71 |
+
def compute_g_loss(nets, args, x_real, y_org, y_trg, z_trgs=None, x_refs=None, use_adv_cls=False):
|
72 |
+
args = Munch(args)
|
73 |
+
|
74 |
+
assert (z_trgs is None) != (x_refs is None)
|
75 |
+
if z_trgs is not None:
|
76 |
+
z_trg, z_trg2 = z_trgs
|
77 |
+
if x_refs is not None:
|
78 |
+
x_ref, x_ref2 = x_refs
|
79 |
+
|
80 |
+
# compute style vectors
|
81 |
+
if z_trgs is not None:
|
82 |
+
s_trg = nets.mapping_network(z_trg, y_trg)
|
83 |
+
else:
|
84 |
+
s_trg = nets.style_encoder(x_ref, y_trg)
|
85 |
+
|
86 |
+
# compute ASR/F0 features (real)
|
87 |
+
with paddle.no_grad():
|
88 |
+
F0_real, GAN_F0_real, cyc_F0_real = nets.f0_model(x_real)
|
89 |
+
ASR_real = nets.asr_model.get_feature(x_real)
|
90 |
+
|
91 |
+
# adversarial loss
|
92 |
+
x_fake = nets.generator(x_real, s_trg, masks=None, F0=GAN_F0_real)
|
93 |
+
out = nets.discriminator(x_fake, y_trg)
|
94 |
+
loss_adv = adv_loss(out, 1)
|
95 |
+
|
96 |
+
# compute ASR/F0 features (fake)
|
97 |
+
F0_fake, GAN_F0_fake, _ = nets.f0_model(x_fake)
|
98 |
+
ASR_fake = nets.asr_model.get_feature(x_fake)
|
99 |
+
|
100 |
+
# norm consistency loss
|
101 |
+
x_fake_norm = log_norm(x_fake)
|
102 |
+
x_real_norm = log_norm(x_real)
|
103 |
+
loss_norm = ((paddle.nn.ReLU()(paddle.abs(x_fake_norm - x_real_norm) - args.norm_bias))**2).mean()
|
104 |
+
|
105 |
+
# F0 loss
|
106 |
+
loss_f0 = f0_loss(F0_fake, F0_real)
|
107 |
+
|
108 |
+
# style F0 loss (style initialization)
|
109 |
+
if x_refs is not None and args.lambda_f0_sty > 0 and not use_adv_cls:
|
110 |
+
F0_sty, _, _ = nets.f0_model(x_ref)
|
111 |
+
loss_f0_sty = F.l1_loss(compute_mean_f0(F0_fake), compute_mean_f0(F0_sty))
|
112 |
+
else:
|
113 |
+
loss_f0_sty = paddle.zeros([1]).mean()
|
114 |
+
|
115 |
+
# ASR loss
|
116 |
+
loss_asr = F.smooth_l1_loss(ASR_fake, ASR_real)
|
117 |
+
|
118 |
+
# style reconstruction loss
|
119 |
+
s_pred = nets.style_encoder(x_fake, y_trg)
|
120 |
+
loss_sty = paddle.mean(paddle.abs(s_pred - s_trg))
|
121 |
+
|
122 |
+
# diversity sensitive loss
|
123 |
+
if z_trgs is not None:
|
124 |
+
s_trg2 = nets.mapping_network(z_trg2, y_trg)
|
125 |
+
else:
|
126 |
+
s_trg2 = nets.style_encoder(x_ref2, y_trg)
|
127 |
+
x_fake2 = nets.generator(x_real, s_trg2, masks=None, F0=GAN_F0_real)
|
128 |
+
x_fake2 = x_fake2.detach()
|
129 |
+
_, GAN_F0_fake2, _ = nets.f0_model(x_fake2)
|
130 |
+
loss_ds = paddle.mean(paddle.abs(x_fake - x_fake2))
|
131 |
+
loss_ds += F.smooth_l1_loss(GAN_F0_fake, GAN_F0_fake2.detach())
|
132 |
+
|
133 |
+
# cycle-consistency loss
|
134 |
+
s_org = nets.style_encoder(x_real, y_org)
|
135 |
+
x_rec = nets.generator(x_fake, s_org, masks=None, F0=GAN_F0_fake)
|
136 |
+
loss_cyc = paddle.mean(paddle.abs(x_rec - x_real))
|
137 |
+
# F0 loss in cycle-consistency loss
|
138 |
+
if args.lambda_f0 > 0:
|
139 |
+
_, _, cyc_F0_rec = nets.f0_model(x_rec)
|
140 |
+
loss_cyc += F.smooth_l1_loss(cyc_F0_rec, cyc_F0_real)
|
141 |
+
if args.lambda_asr > 0:
|
142 |
+
ASR_recon = nets.asr_model.get_feature(x_rec)
|
143 |
+
loss_cyc += F.smooth_l1_loss(ASR_recon, ASR_real)
|
144 |
+
|
145 |
+
# adversarial classifier loss
|
146 |
+
if use_adv_cls:
|
147 |
+
out_de = nets.discriminator.classifier(x_fake)
|
148 |
+
loss_adv_cls = F.cross_entropy(out_de[y_org != y_trg], y_trg[y_org != y_trg])
|
149 |
+
else:
|
150 |
+
loss_adv_cls = paddle.zeros([1]).mean()
|
151 |
+
|
152 |
+
loss = args.lambda_adv * loss_adv + args.lambda_sty * loss_sty \
|
153 |
+
- args.lambda_ds * loss_ds + args.lambda_cyc * loss_cyc\
|
154 |
+
+ args.lambda_norm * loss_norm \
|
155 |
+
+ args.lambda_asr * loss_asr \
|
156 |
+
+ args.lambda_f0 * loss_f0 \
|
157 |
+
+ args.lambda_f0_sty * loss_f0_sty \
|
158 |
+
+ args.lambda_adv_cls * loss_adv_cls
|
159 |
+
|
160 |
+
return loss, Munch(adv=loss_adv.item(),
|
161 |
+
sty=loss_sty.item(),
|
162 |
+
ds=loss_ds.item(),
|
163 |
+
cyc=loss_cyc.item(),
|
164 |
+
norm=loss_norm.item(),
|
165 |
+
asr=loss_asr.item(),
|
166 |
+
f0=loss_f0.item(),
|
167 |
+
adv_cls=loss_adv_cls.item())
|
168 |
+
|
169 |
+
# for norm consistency loss
|
170 |
+
def log_norm(x, mean=-4, std=4, axis=2):
|
171 |
+
"""
|
172 |
+
normalized log mel -> mel -> norm -> log(norm)
|
173 |
+
"""
|
174 |
+
x = paddle.log(paddle.exp(x * std + mean).norm(axis=axis))
|
175 |
+
return x
|
176 |
+
|
177 |
+
# for adversarial loss
|
178 |
+
def adv_loss(logits, target):
|
179 |
+
assert target in [1, 0]
|
180 |
+
if len(logits.shape) > 1:
|
181 |
+
logits = logits.reshape([-1])
|
182 |
+
targets = paddle.full_like(logits, fill_value=target)
|
183 |
+
logits = logits.clip(min=-10, max=10) # prevent nan
|
184 |
+
loss = F.binary_cross_entropy_with_logits(logits, targets)
|
185 |
+
return loss
|
186 |
+
|
187 |
+
# for R1 regularization loss
|
188 |
+
def r1_reg(d_out, x_in):
|
189 |
+
# zero-centered gradient penalty for real images
|
190 |
+
batch_size = x_in.shape[0]
|
191 |
+
grad_dout = paddle.grad(
|
192 |
+
outputs=d_out.sum(), inputs=x_in,
|
193 |
+
create_graph=True, retain_graph=True, only_inputs=True
|
194 |
+
)[0]
|
195 |
+
grad_dout2 = grad_dout.pow(2)
|
196 |
+
assert(grad_dout2.shape == x_in.shape)
|
197 |
+
reg = 0.5 * grad_dout2.reshape((batch_size, -1)).sum(1).mean(0)
|
198 |
+
return reg
|
199 |
+
|
200 |
+
# for F0 consistency loss
|
201 |
+
def compute_mean_f0(f0):
|
202 |
+
f0_mean = f0.mean(-1)
|
203 |
+
f0_mean = f0_mean.expand((f0.shape[-1], f0_mean.shape[0])).transpose((1, 0)) # (B, M)
|
204 |
+
return f0_mean
|
205 |
+
|
206 |
+
def f0_loss(x_f0, y_f0):
|
207 |
+
"""
|
208 |
+
x.shape = (B, 1, M, L): predict
|
209 |
+
y.shape = (B, 1, M, L): target
|
210 |
+
"""
|
211 |
+
# compute the mean
|
212 |
+
x_mean = compute_mean_f0(x_f0)
|
213 |
+
y_mean = compute_mean_f0(y_f0)
|
214 |
+
loss = F.l1_loss(x_f0 / x_mean, y_f0 / y_mean)
|
215 |
+
return loss
|
starganv2vc_paddle/meldataset.py
ADDED
@@ -0,0 +1,155 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#coding: utf-8
|
2 |
+
|
3 |
+
import os
|
4 |
+
import time
|
5 |
+
import random
|
6 |
+
import random
|
7 |
+
import paddle
|
8 |
+
import paddleaudio
|
9 |
+
|
10 |
+
import numpy as np
|
11 |
+
import soundfile as sf
|
12 |
+
import paddle.nn.functional as F
|
13 |
+
|
14 |
+
from paddle import nn
|
15 |
+
from paddle.io import DataLoader
|
16 |
+
|
17 |
+
import logging
|
18 |
+
logger = logging.getLogger(__name__)
|
19 |
+
logger.setLevel(logging.DEBUG)
|
20 |
+
|
21 |
+
np.random.seed(1)
|
22 |
+
random.seed(1)
|
23 |
+
|
24 |
+
SPECT_PARAMS = {
|
25 |
+
"n_fft": 2048,
|
26 |
+
"win_length": 1200,
|
27 |
+
"hop_length": 300
|
28 |
+
}
|
29 |
+
MEL_PARAMS = {
|
30 |
+
"n_mels": 80,
|
31 |
+
"n_fft": 2048,
|
32 |
+
"win_length": 1200,
|
33 |
+
"hop_length": 300
|
34 |
+
}
|
35 |
+
|
36 |
+
class MelDataset(paddle.io.Dataset):
|
37 |
+
def __init__(self,
|
38 |
+
data_list,
|
39 |
+
sr=24000,
|
40 |
+
validation=False,
|
41 |
+
):
|
42 |
+
|
43 |
+
_data_list = [l[:-1].split('|') for l in data_list]
|
44 |
+
self.data_list = [(path, int(label)) for path, label in _data_list]
|
45 |
+
self.data_list_per_class = {
|
46 |
+
target: [(path, label) for path, label in self.data_list if label == target] \
|
47 |
+
for target in list(set([label for _, label in self.data_list]))}
|
48 |
+
|
49 |
+
self.sr = sr
|
50 |
+
self.to_melspec = paddleaudio.features.MelSpectrogram(**MEL_PARAMS)
|
51 |
+
self.to_melspec.fbank_matrix[:] = paddle.load(os.path.dirname(__file__) + '/fbank_matrix.pd')['fbank_matrix']
|
52 |
+
|
53 |
+
self.mean, self.std = -4, 4
|
54 |
+
self.validation = validation
|
55 |
+
self.max_mel_length = 192
|
56 |
+
|
57 |
+
def __len__(self):
|
58 |
+
return len(self.data_list)
|
59 |
+
|
60 |
+
def __getitem__(self, idx):
|
61 |
+
with paddle.fluid.dygraph.guard(paddle.CPUPlace()):
|
62 |
+
data = self.data_list[idx]
|
63 |
+
mel_tensor, label = self._load_data(data)
|
64 |
+
ref_data = random.choice(self.data_list)
|
65 |
+
ref_mel_tensor, ref_label = self._load_data(ref_data)
|
66 |
+
ref2_data = random.choice(self.data_list_per_class[ref_label])
|
67 |
+
ref2_mel_tensor, _ = self._load_data(ref2_data)
|
68 |
+
return mel_tensor, label, ref_mel_tensor, ref2_mel_tensor, ref_label
|
69 |
+
|
70 |
+
def _load_data(self, path):
|
71 |
+
wave_tensor, label = self._load_tensor(path)
|
72 |
+
|
73 |
+
if not self.validation: # random scale for robustness
|
74 |
+
random_scale = 0.5 + 0.5 * np.random.random()
|
75 |
+
wave_tensor = random_scale * wave_tensor
|
76 |
+
|
77 |
+
mel_tensor = self.to_melspec(wave_tensor)
|
78 |
+
mel_tensor = (paddle.log(1e-5 + mel_tensor) - self.mean) / self.std
|
79 |
+
mel_length = mel_tensor.shape[1]
|
80 |
+
if mel_length > self.max_mel_length:
|
81 |
+
random_start = np.random.randint(0, mel_length - self.max_mel_length)
|
82 |
+
mel_tensor = mel_tensor[:, random_start:random_start + self.max_mel_length]
|
83 |
+
|
84 |
+
return mel_tensor, label
|
85 |
+
|
86 |
+
def _preprocess(self, wave_tensor, ):
|
87 |
+
mel_tensor = self.to_melspec(wave_tensor)
|
88 |
+
mel_tensor = (paddle.log(1e-5 + mel_tensor) - self.mean) / self.std
|
89 |
+
return mel_tensor
|
90 |
+
|
91 |
+
def _load_tensor(self, data):
|
92 |
+
wave_path, label = data
|
93 |
+
label = int(label)
|
94 |
+
wave, sr = sf.read(wave_path)
|
95 |
+
wave_tensor = paddle.from_numpy(wave).astype(paddle.float32)
|
96 |
+
return wave_tensor, label
|
97 |
+
|
98 |
+
class Collater(object):
|
99 |
+
"""
|
100 |
+
Args:
|
101 |
+
adaptive_batch_size (bool): if true, decrease batch size when long data comes.
|
102 |
+
"""
|
103 |
+
|
104 |
+
def __init__(self, return_wave=False):
|
105 |
+
self.text_pad_index = 0
|
106 |
+
self.return_wave = return_wave
|
107 |
+
self.max_mel_length = 192
|
108 |
+
self.mel_length_step = 16
|
109 |
+
self.latent_dim = 16
|
110 |
+
|
111 |
+
def __call__(self, batch):
|
112 |
+
batch_size = len(batch)
|
113 |
+
nmels = batch[0][0].shape[0]
|
114 |
+
mels = paddle.zeros((batch_size, nmels, self.max_mel_length)).astype(paddle.float32)
|
115 |
+
labels = paddle.zeros((batch_size)).astype(paddle.int64)
|
116 |
+
ref_mels = paddle.zeros((batch_size, nmels, self.max_mel_length)).astype(paddle.float32)
|
117 |
+
ref2_mels = paddle.zeros((batch_size, nmels, self.max_mel_length)).astype(paddle.float32)
|
118 |
+
ref_labels = paddle.zeros((batch_size)).astype(paddle.int64)
|
119 |
+
|
120 |
+
for bid, (mel, label, ref_mel, ref2_mel, ref_label) in enumerate(batch):
|
121 |
+
mel_size = mel.shape[1]
|
122 |
+
mels[bid, :, :mel_size] = mel
|
123 |
+
|
124 |
+
ref_mel_size = ref_mel.shape[1]
|
125 |
+
ref_mels[bid, :, :ref_mel_size] = ref_mel
|
126 |
+
|
127 |
+
ref2_mel_size = ref2_mel.shape[1]
|
128 |
+
ref2_mels[bid, :, :ref2_mel_size] = ref2_mel
|
129 |
+
|
130 |
+
labels[bid] = label
|
131 |
+
ref_labels[bid] = ref_label
|
132 |
+
|
133 |
+
z_trg = paddle.randn((batch_size, self.latent_dim))
|
134 |
+
z_trg2 = paddle.randn((batch_size, self.latent_dim))
|
135 |
+
|
136 |
+
mels, ref_mels, ref2_mels = mels.unsqueeze(1), ref_mels.unsqueeze(1), ref2_mels.unsqueeze(1)
|
137 |
+
return mels, labels, ref_mels, ref2_mels, ref_labels, z_trg, z_trg2
|
138 |
+
|
139 |
+
def build_dataloader(path_list,
|
140 |
+
validation=False,
|
141 |
+
batch_size=4,
|
142 |
+
num_workers=1,
|
143 |
+
collate_config={},
|
144 |
+
dataset_config={}):
|
145 |
+
|
146 |
+
dataset = MelDataset(path_list, validation=validation)
|
147 |
+
collate_fn = Collater(**collate_config)
|
148 |
+
data_loader = DataLoader(dataset,
|
149 |
+
batch_size=batch_size,
|
150 |
+
shuffle=(not validation),
|
151 |
+
num_workers=num_workers,
|
152 |
+
drop_last=(not validation),
|
153 |
+
collate_fn=collate_fn)
|
154 |
+
|
155 |
+
return data_loader
|
starganv2vc_paddle/models.py
ADDED
@@ -0,0 +1,391 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"""
|
2 |
+
StarGAN v2
|
3 |
+
Copyright (c) 2020-present NAVER Corp.
|
4 |
+
This work is licensed under the Creative Commons Attribution-NonCommercial
|
5 |
+
4.0 International License. To view a copy of this license, visit
|
6 |
+
http://creativecommons.org/licenses/by-nc/4.0/ or send a letter to
|
7 |
+
Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
|
8 |
+
"""
|
9 |
+
import os
|
10 |
+
import os.path as osp
|
11 |
+
|
12 |
+
import copy
|
13 |
+
import math
|
14 |
+
|
15 |
+
from munch import Munch
|
16 |
+
import numpy as np
|
17 |
+
import paddle
|
18 |
+
import paddle.nn as nn
|
19 |
+
import paddle.nn.functional as F
|
20 |
+
|
21 |
+
class DownSample(nn.Layer):
|
22 |
+
def __init__(self, layer_type):
|
23 |
+
super().__init__()
|
24 |
+
self.layer_type = layer_type
|
25 |
+
|
26 |
+
def forward(self, x):
|
27 |
+
if self.layer_type == 'none':
|
28 |
+
return x
|
29 |
+
elif self.layer_type == 'timepreserve':
|
30 |
+
return F.avg_pool2d(x, (2, 1))
|
31 |
+
elif self.layer_type == 'half':
|
32 |
+
return F.avg_pool2d(x, 2)
|
33 |
+
else:
|
34 |
+
raise RuntimeError('Got unexpected donwsampletype %s, expected is [none, timepreserve, half]' % self.layer_type)
|
35 |
+
|
36 |
+
|
37 |
+
class UpSample(nn.Layer):
|
38 |
+
def __init__(self, layer_type):
|
39 |
+
super().__init__()
|
40 |
+
self.layer_type = layer_type
|
41 |
+
|
42 |
+
def forward(self, x):
|
43 |
+
if self.layer_type == 'none':
|
44 |
+
return x
|
45 |
+
elif self.layer_type == 'timepreserve':
|
46 |
+
return F.interpolate(x, scale_factor=(2, 1), mode='nearest')
|
47 |
+
elif self.layer_type == 'half':
|
48 |
+
return F.interpolate(x, scale_factor=2, mode='nearest')
|
49 |
+
else:
|
50 |
+
raise RuntimeError('Got unexpected upsampletype %s, expected is [none, timepreserve, half]' % self.layer_type)
|
51 |
+
|
52 |
+
|
53 |
+
class ResBlk(nn.Layer):
|
54 |
+
def __init__(self, dim_in, dim_out, actv=nn.LeakyReLU(0.2),
|
55 |
+
normalize=False, downsample='none'):
|
56 |
+
super().__init__()
|
57 |
+
self.actv = actv
|
58 |
+
self.normalize = normalize
|
59 |
+
self.downsample = DownSample(downsample)
|
60 |
+
self.learned_sc = dim_in != dim_out
|
61 |
+
self._build_weights(dim_in, dim_out)
|
62 |
+
|
63 |
+
def _build_weights(self, dim_in, dim_out):
|
64 |
+
self.conv1 = nn.Conv2D(dim_in, dim_in, 3, 1, 1)
|
65 |
+
self.conv2 = nn.Conv2D(dim_in, dim_out, 3, 1, 1)
|
66 |
+
if self.normalize:
|
67 |
+
self.norm1 = nn.InstanceNorm2D(dim_in)
|
68 |
+
self.norm2 = nn.InstanceNorm2D(dim_in)
|
69 |
+
if self.learned_sc:
|
70 |
+
self.conv1x1 = nn.Conv2D(dim_in, dim_out, 1, 1, 0, bias_attr=False)
|
71 |
+
|
72 |
+
def _shortcut(self, x):
|
73 |
+
if self.learned_sc:
|
74 |
+
x = self.conv1x1(x)
|
75 |
+
if self.downsample:
|
76 |
+
x = self.downsample(x)
|
77 |
+
return x
|
78 |
+
|
79 |
+
def _residual(self, x):
|
80 |
+
if self.normalize:
|
81 |
+
x = self.norm1(x)
|
82 |
+
x = self.actv(x)
|
83 |
+
x = self.conv1(x)
|
84 |
+
x = self.downsample(x)
|
85 |
+
if self.normalize:
|
86 |
+
x = self.norm2(x)
|
87 |
+
x = self.actv(x)
|
88 |
+
x = self.conv2(x)
|
89 |
+
return x
|
90 |
+
|
91 |
+
def forward(self, x):
|
92 |
+
x = self._shortcut(x) + self._residual(x)
|
93 |
+
return x / math.sqrt(2) # unit variance
|
94 |
+
|
95 |
+
class AdaIN(nn.Layer):
|
96 |
+
def __init__(self, style_dim, num_features):
|
97 |
+
super().__init__()
|
98 |
+
self.norm = nn.InstanceNorm2D(num_features, weight_attr=False, bias_attr=False)
|
99 |
+
self.fc = nn.Linear(style_dim, num_features*2)
|
100 |
+
|
101 |
+
def forward(self, x, s):
|
102 |
+
if len(s.shape) == 1:
|
103 |
+
s = s[None]
|
104 |
+
h = self.fc(s)
|
105 |
+
h = h.reshape((h.shape[0], h.shape[1], 1, 1))
|
106 |
+
gamma, beta = paddle.split(h, 2, axis=1)
|
107 |
+
return (1 + gamma) * self.norm(x) + beta
|
108 |
+
|
109 |
+
|
110 |
+
class AdainResBlk(nn.Layer):
|
111 |
+
def __init__(self, dim_in, dim_out, style_dim=64, w_hpf=0,
|
112 |
+
actv=nn.LeakyReLU(0.2), upsample='none'):
|
113 |
+
super().__init__()
|
114 |
+
self.w_hpf = w_hpf
|
115 |
+
self.actv = actv
|
116 |
+
self.upsample = UpSample(upsample)
|
117 |
+
self.learned_sc = dim_in != dim_out
|
118 |
+
self._build_weights(dim_in, dim_out, style_dim)
|
119 |
+
|
120 |
+
def _build_weights(self, dim_in, dim_out, style_dim=64):
|
121 |
+
self.conv1 = nn.Conv2D(dim_in, dim_out, 3, 1, 1)
|
122 |
+
self.conv2 = nn.Conv2D(dim_out, dim_out, 3, 1, 1)
|
123 |
+
self.norm1 = AdaIN(style_dim, dim_in)
|
124 |
+
self.norm2 = AdaIN(style_dim, dim_out)
|
125 |
+
if self.learned_sc:
|
126 |
+
self.conv1x1 = nn.Conv2D(dim_in, dim_out, 1, 1, 0, bias_attr=False)
|
127 |
+
|
128 |
+
def _shortcut(self, x):
|
129 |
+
x = self.upsample(x)
|
130 |
+
if self.learned_sc:
|
131 |
+
x = self.conv1x1(x)
|
132 |
+
return x
|
133 |
+
|
134 |
+
def _residual(self, x, s):
|
135 |
+
x = self.norm1(x, s)
|
136 |
+
x = self.actv(x)
|
137 |
+
x = self.upsample(x)
|
138 |
+
x = self.conv1(x)
|
139 |
+
x = self.norm2(x, s)
|
140 |
+
x = self.actv(x)
|
141 |
+
x = self.conv2(x)
|
142 |
+
return x
|
143 |
+
|
144 |
+
def forward(self, x, s):
|
145 |
+
out = self._residual(x, s)
|
146 |
+
if self.w_hpf == 0:
|
147 |
+
out = (out + self._shortcut(x)) / math.sqrt(2)
|
148 |
+
return out
|
149 |
+
|
150 |
+
|
151 |
+
class HighPass(nn.Layer):
|
152 |
+
def __init__(self, w_hpf):
|
153 |
+
super(HighPass, self).__init__()
|
154 |
+
self.filter = paddle.to_tensor([[-1, -1, -1],
|
155 |
+
[-1, 8., -1],
|
156 |
+
[-1, -1, -1]]) / w_hpf
|
157 |
+
|
158 |
+
def forward(self, x):
|
159 |
+
filter = self.filter.unsqueeze(0).unsqueeze(1).tile([x.shape[1], 1, 1, 1])
|
160 |
+
return F.conv2d(x, filter, padding=1, groups=x.shape[1])
|
161 |
+
|
162 |
+
|
163 |
+
class Generator(nn.Layer):
|
164 |
+
def __init__(self, dim_in=48, style_dim=48, max_conv_dim=48*8, w_hpf=1, F0_channel=0):
|
165 |
+
super().__init__()
|
166 |
+
|
167 |
+
self.stem = nn.Conv2D(1, dim_in, 3, 1, 1)
|
168 |
+
self.encode = nn.LayerList()
|
169 |
+
self.decode = nn.LayerList()
|
170 |
+
self.to_out = nn.Sequential(
|
171 |
+
nn.InstanceNorm2D(dim_in),
|
172 |
+
nn.LeakyReLU(0.2),
|
173 |
+
nn.Conv2D(dim_in, 1, 1, 1, 0))
|
174 |
+
self.F0_channel = F0_channel
|
175 |
+
# down/up-sampling blocks
|
176 |
+
repeat_num = 4 #int(np.log2(img_size)) - 4
|
177 |
+
if w_hpf > 0:
|
178 |
+
repeat_num += 1
|
179 |
+
|
180 |
+
for lid in range(repeat_num):
|
181 |
+
if lid in [1, 3]:
|
182 |
+
_downtype = 'timepreserve'
|
183 |
+
else:
|
184 |
+
_downtype = 'half'
|
185 |
+
|
186 |
+
dim_out = min(dim_in*2, max_conv_dim)
|
187 |
+
self.encode.append(
|
188 |
+
ResBlk(dim_in, dim_out, normalize=True, downsample=_downtype))
|
189 |
+
(self.decode.insert if lid else lambda i, sublayer: self.decode.append(sublayer))(
|
190 |
+
0, AdainResBlk(dim_out, dim_in, style_dim,
|
191 |
+
w_hpf=w_hpf, upsample=_downtype)) # stack-like
|
192 |
+
dim_in = dim_out
|
193 |
+
|
194 |
+
# bottleneck blocks (encoder)
|
195 |
+
for _ in range(2):
|
196 |
+
self.encode.append(
|
197 |
+
ResBlk(dim_out, dim_out, normalize=True))
|
198 |
+
|
199 |
+
# F0 blocks
|
200 |
+
if F0_channel != 0:
|
201 |
+
self.decode.insert(
|
202 |
+
0, AdainResBlk(dim_out + int(F0_channel / 2), dim_out, style_dim, w_hpf=w_hpf))
|
203 |
+
|
204 |
+
# bottleneck blocks (decoder)
|
205 |
+
for _ in range(2):
|
206 |
+
self.decode.insert(
|
207 |
+
0, AdainResBlk(dim_out + int(F0_channel / 2), dim_out + int(F0_channel / 2), style_dim, w_hpf=w_hpf))
|
208 |
+
|
209 |
+
if F0_channel != 0:
|
210 |
+
self.F0_conv = nn.Sequential(
|
211 |
+
ResBlk(F0_channel, int(F0_channel / 2), normalize=True, downsample="half"),
|
212 |
+
)
|
213 |
+
|
214 |
+
|
215 |
+
if w_hpf > 0:
|
216 |
+
self.hpf = HighPass(w_hpf)
|
217 |
+
|
218 |
+
def forward(self, x, s, masks=None, F0=None):
|
219 |
+
x = self.stem(x)
|
220 |
+
cache = {}
|
221 |
+
for block in self.encode:
|
222 |
+
if (masks is not None) and (x.shape[2] in [32, 64, 128]):
|
223 |
+
cache[x.shape[2]] = x
|
224 |
+
x = block(x)
|
225 |
+
|
226 |
+
if F0 is not None:
|
227 |
+
F0 = self.F0_conv(F0)
|
228 |
+
F0 = F.adaptive_avg_pool2d(F0, [x.shape[-2], x.shape[-1]])
|
229 |
+
x = paddle.concat([x, F0], axis=1)
|
230 |
+
|
231 |
+
for block in self.decode:
|
232 |
+
x = block(x, s)
|
233 |
+
if (masks is not None) and (x.shape[2] in [32, 64, 128]):
|
234 |
+
mask = masks[0] if x.shape[2] in [32] else masks[1]
|
235 |
+
mask = F.interpolate(mask, size=x.shape[2], mode='bilinear')
|
236 |
+
x = x + self.hpf(mask * cache[x.shape[2]])
|
237 |
+
|
238 |
+
return self.to_out(x)
|
239 |
+
|
240 |
+
|
241 |
+
class MappingNetwork(nn.Layer):
|
242 |
+
def __init__(self, latent_dim=16, style_dim=48, num_domains=2, hidden_dim=384):
|
243 |
+
super().__init__()
|
244 |
+
layers = []
|
245 |
+
layers += [nn.Linear(latent_dim, hidden_dim)]
|
246 |
+
layers += [nn.ReLU()]
|
247 |
+
for _ in range(3):
|
248 |
+
layers += [nn.Linear(hidden_dim, hidden_dim)]
|
249 |
+
layers += [nn.ReLU()]
|
250 |
+
self.shared = nn.Sequential(*layers)
|
251 |
+
|
252 |
+
self.unshared = nn.LayerList()
|
253 |
+
for _ in range(num_domains):
|
254 |
+
self.unshared.extend([nn.Sequential(nn.Linear(hidden_dim, hidden_dim),
|
255 |
+
nn.ReLU(),
|
256 |
+
nn.Linear(hidden_dim, hidden_dim),
|
257 |
+
nn.ReLU(),
|
258 |
+
nn.Linear(hidden_dim, hidden_dim),
|
259 |
+
nn.ReLU(),
|
260 |
+
nn.Linear(hidden_dim, style_dim))])
|
261 |
+
|
262 |
+
def forward(self, z, y):
|
263 |
+
h = self.shared(z)
|
264 |
+
out = []
|
265 |
+
for layer in self.unshared:
|
266 |
+
out += [layer(h)]
|
267 |
+
out = paddle.stack(out, axis=1) # (batch, num_domains, style_dim)
|
268 |
+
idx = paddle.arange(y.shape[0])
|
269 |
+
s = out[idx, y] # (batch, style_dim)
|
270 |
+
return s
|
271 |
+
|
272 |
+
|
273 |
+
class StyleEncoder(nn.Layer):
|
274 |
+
def __init__(self, dim_in=48, style_dim=48, num_domains=2, max_conv_dim=384):
|
275 |
+
super().__init__()
|
276 |
+
blocks = []
|
277 |
+
blocks += [nn.Conv2D(1, dim_in, 3, 1, 1)]
|
278 |
+
|
279 |
+
repeat_num = 4
|
280 |
+
for _ in range(repeat_num):
|
281 |
+
dim_out = min(dim_in*2, max_conv_dim)
|
282 |
+
blocks += [ResBlk(dim_in, dim_out, downsample='half')]
|
283 |
+
dim_in = dim_out
|
284 |
+
|
285 |
+
blocks += [nn.LeakyReLU(0.2)]
|
286 |
+
blocks += [nn.Conv2D(dim_out, dim_out, 5, 1, 0)]
|
287 |
+
blocks += [nn.AdaptiveAvgPool2D(1)]
|
288 |
+
blocks += [nn.LeakyReLU(0.2)]
|
289 |
+
self.shared = nn.Sequential(*blocks)
|
290 |
+
|
291 |
+
self.unshared = nn.LayerList()
|
292 |
+
for _ in range(num_domains):
|
293 |
+
self.unshared.append(nn.Linear(dim_out, style_dim))
|
294 |
+
|
295 |
+
def forward(self, x, y):
|
296 |
+
h = self.shared(x)
|
297 |
+
|
298 |
+
h = h.reshape((h.shape[0], -1))
|
299 |
+
out = []
|
300 |
+
|
301 |
+
for layer in self.unshared:
|
302 |
+
out += [layer(h)]
|
303 |
+
|
304 |
+
out = paddle.stack(out, axis=1) # (batch, num_domains, style_dim)
|
305 |
+
idx = paddle.arange(y.shape[0])
|
306 |
+
s = out[idx, y] # (batch, style_dim)
|
307 |
+
return s
|
308 |
+
|
309 |
+
class Discriminator(nn.Layer):
|
310 |
+
def __init__(self, dim_in=48, num_domains=2, max_conv_dim=384, repeat_num=4):
|
311 |
+
super().__init__()
|
312 |
+
|
313 |
+
# real/fake discriminator
|
314 |
+
self.dis = Discriminator2D(dim_in=dim_in, num_domains=num_domains,
|
315 |
+
max_conv_dim=max_conv_dim, repeat_num=repeat_num)
|
316 |
+
# adversarial classifier
|
317 |
+
self.cls = Discriminator2D(dim_in=dim_in, num_domains=num_domains,
|
318 |
+
max_conv_dim=max_conv_dim, repeat_num=repeat_num)
|
319 |
+
self.num_domains = num_domains
|
320 |
+
|
321 |
+
def forward(self, x, y):
|
322 |
+
return self.dis(x, y)
|
323 |
+
|
324 |
+
def classifier(self, x):
|
325 |
+
return self.cls.get_feature(x)
|
326 |
+
|
327 |
+
|
328 |
+
class LinearNorm(paddle.nn.Layer):
|
329 |
+
def __init__(self, in_dim, out_dim, bias=True, w_init_gain='linear'):
|
330 |
+
super(LinearNorm, self).__init__()
|
331 |
+
self.linear_layer = paddle.nn.Linear(in_dim, out_dim, bias_attr=bias)
|
332 |
+
|
333 |
+
if float('.'.join(paddle.__version__.split('.')[:2])) >= 2.3:
|
334 |
+
gain = paddle.nn.initializer.calculate_gain(w_init_gain)
|
335 |
+
paddle.nn.initializer.XavierUniform()(self.linear_layer.weight)
|
336 |
+
self.linear_layer.weight.set_value(gain*self.linear_layer.weight)
|
337 |
+
|
338 |
+
def forward(self, x):
|
339 |
+
return self.linear_layer(x)
|
340 |
+
|
341 |
+
class Discriminator2D(nn.Layer):
|
342 |
+
def __init__(self, dim_in=48, num_domains=2, max_conv_dim=384, repeat_num=4):
|
343 |
+
super().__init__()
|
344 |
+
blocks = []
|
345 |
+
blocks += [nn.Conv2D(1, dim_in, 3, 1, 1)]
|
346 |
+
|
347 |
+
for lid in range(repeat_num):
|
348 |
+
dim_out = min(dim_in*2, max_conv_dim)
|
349 |
+
blocks += [ResBlk(dim_in, dim_out, downsample='half')]
|
350 |
+
dim_in = dim_out
|
351 |
+
|
352 |
+
blocks += [nn.LeakyReLU(0.2)]
|
353 |
+
blocks += [nn.Conv2D(dim_out, dim_out, 5, 1, 0)]
|
354 |
+
blocks += [nn.LeakyReLU(0.2)]
|
355 |
+
blocks += [nn.AdaptiveAvgPool2D(1)]
|
356 |
+
blocks += [nn.Conv2D(dim_out, num_domains, 1, 1, 0)]
|
357 |
+
self.main = nn.Sequential(*blocks)
|
358 |
+
|
359 |
+
def get_feature(self, x):
|
360 |
+
out = self.main(x)
|
361 |
+
out = out.reshape((out.shape[0], -1)) # (batch, num_domains)
|
362 |
+
return out
|
363 |
+
|
364 |
+
def forward(self, x, y):
|
365 |
+
out = self.get_feature(x)
|
366 |
+
idx = paddle.arange(y.shape[0])
|
367 |
+
out = out[idx, y] # (batch)
|
368 |
+
return out
|
369 |
+
|
370 |
+
|
371 |
+
def build_model(args, F0_model, ASR_model):
|
372 |
+
generator = Generator(args.dim_in, args.style_dim, args.max_conv_dim, w_hpf=args.w_hpf, F0_channel=args.F0_channel)
|
373 |
+
mapping_network = MappingNetwork(args.latent_dim, args.style_dim, args.num_domains, hidden_dim=args.max_conv_dim)
|
374 |
+
style_encoder = StyleEncoder(args.dim_in, args.style_dim, args.num_domains, args.max_conv_dim)
|
375 |
+
discriminator = Discriminator(args.dim_in, args.num_domains, args.max_conv_dim, args.n_repeat)
|
376 |
+
generator_ema = copy.deepcopy(generator)
|
377 |
+
mapping_network_ema = copy.deepcopy(mapping_network)
|
378 |
+
style_encoder_ema = copy.deepcopy(style_encoder)
|
379 |
+
|
380 |
+
nets = Munch(generator=generator,
|
381 |
+
mapping_network=mapping_network,
|
382 |
+
style_encoder=style_encoder,
|
383 |
+
discriminator=discriminator,
|
384 |
+
f0_model=F0_model,
|
385 |
+
asr_model=ASR_model)
|
386 |
+
|
387 |
+
nets_ema = Munch(generator=generator_ema,
|
388 |
+
mapping_network=mapping_network_ema,
|
389 |
+
style_encoder=style_encoder_ema)
|
390 |
+
|
391 |
+
return nets, nets_ema
|
starganv2vc_paddle/optimizers.py
ADDED
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#coding:utf-8
|
2 |
+
import os, sys
|
3 |
+
import os.path as osp
|
4 |
+
import numpy as np
|
5 |
+
import paddle
|
6 |
+
from paddle import nn
|
7 |
+
from paddle.optimizer import Optimizer
|
8 |
+
from functools import reduce
|
9 |
+
from paddle.optimizer import AdamW
|
10 |
+
|
11 |
+
class MultiOptimizer:
|
12 |
+
def __init__(self, optimizers={}, schedulers={}):
|
13 |
+
self.optimizers = optimizers
|
14 |
+
self.schedulers = schedulers
|
15 |
+
self.keys = list(optimizers.keys())
|
16 |
+
|
17 |
+
def get_lr(self):
|
18 |
+
return max([self.optimizers[key].get_lr()
|
19 |
+
for key in self.keys])
|
20 |
+
|
21 |
+
def state_dict(self):
|
22 |
+
state_dicts = [(key, self.optimizers[key].state_dict())\
|
23 |
+
for key in self.keys]
|
24 |
+
return state_dicts
|
25 |
+
|
26 |
+
def set_state_dict(self, state_dict):
|
27 |
+
for key, val in state_dict:
|
28 |
+
try:
|
29 |
+
self.optimizers[key].set_state_dict(val)
|
30 |
+
except:
|
31 |
+
print("Unloaded %s" % key)
|
32 |
+
|
33 |
+
def step(self, key=None, scaler=None):
|
34 |
+
keys = [key] if key is not None else self.keys
|
35 |
+
_ = [self._step(key, scaler) for key in keys]
|
36 |
+
|
37 |
+
def _step(self, key, scaler=None):
|
38 |
+
if scaler is not None:
|
39 |
+
scaler.step(self.optimizers[key])
|
40 |
+
scaler.update()
|
41 |
+
else:
|
42 |
+
self.optimizers[key].step()
|
43 |
+
|
44 |
+
def clear_grad(self, key=None):
|
45 |
+
if key is not None:
|
46 |
+
self.optimizers[key].clear_grad()
|
47 |
+
else:
|
48 |
+
_ = [self.optimizers[key].clear_grad() for key in self.keys]
|
49 |
+
|
50 |
+
def scheduler(self, *args, key=None):
|
51 |
+
if key is not None:
|
52 |
+
self.schedulers[key].step(*args)
|
53 |
+
else:
|
54 |
+
_ = [self.schedulers[key].step(*args) for key in self.keys]
|
55 |
+
|
56 |
+
def define_scheduler(params):
|
57 |
+
print(params)
|
58 |
+
# scheduler = paddle.optim.lr_scheduler.OneCycleLR(
|
59 |
+
# max_lr=params.get('max_lr', 2e-4),
|
60 |
+
# epochs=params.get('epochs', 200),
|
61 |
+
# steps_per_epoch=params.get('steps_per_epoch', 1000),
|
62 |
+
# pct_start=params.get('pct_start', 0.0),
|
63 |
+
# div_factor=1,
|
64 |
+
# final_div_factor=1)
|
65 |
+
scheduler = paddle.optimizer.lr.CosineAnnealingDecay(
|
66 |
+
learning_rate=params.get('max_lr', 2e-4),
|
67 |
+
T_max=10)
|
68 |
+
|
69 |
+
return scheduler
|
70 |
+
|
71 |
+
def build_optimizer(parameters_dict, scheduler_params_dict):
|
72 |
+
schedulers = dict([(key, define_scheduler(params)) \
|
73 |
+
for key, params in scheduler_params_dict.items()])
|
74 |
+
|
75 |
+
optim = dict([(key, AdamW(parameters=parameters_dict[key], learning_rate=sch, weight_decay=1e-4, beta1=0.1, beta2=0.99, epsilon=1e-9))
|
76 |
+
for key, sch in schedulers.items()])
|
77 |
+
|
78 |
+
|
79 |
+
multi_optim = MultiOptimizer(optim, schedulers)
|
80 |
+
return multi_optim
|
starganv2vc_paddle/trainer.py
ADDED
@@ -0,0 +1,276 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# -*- coding: utf-8 -*-
|
2 |
+
|
3 |
+
import os
|
4 |
+
import os.path as osp
|
5 |
+
import sys
|
6 |
+
import time
|
7 |
+
from collections import defaultdict
|
8 |
+
|
9 |
+
import numpy as np
|
10 |
+
import paddle
|
11 |
+
from paddle import nn
|
12 |
+
from PIL import Image
|
13 |
+
from tqdm import tqdm
|
14 |
+
|
15 |
+
from starganv2vc_paddle.losses import compute_d_loss, compute_g_loss
|
16 |
+
|
17 |
+
import logging
|
18 |
+
logger = logging.getLogger(__name__)
|
19 |
+
logger.setLevel(logging.DEBUG)
|
20 |
+
|
21 |
+
class Trainer(object):
|
22 |
+
def __init__(self,
|
23 |
+
args,
|
24 |
+
model=None,
|
25 |
+
model_ema=None,
|
26 |
+
optimizer=None,
|
27 |
+
scheduler=None,
|
28 |
+
config={},
|
29 |
+
logger=logger,
|
30 |
+
train_dataloader=None,
|
31 |
+
val_dataloader=None,
|
32 |
+
initial_steps=0,
|
33 |
+
initial_epochs=0,
|
34 |
+
fp16_run=False
|
35 |
+
):
|
36 |
+
self.args = args
|
37 |
+
self.steps = initial_steps
|
38 |
+
self.epochs = initial_epochs
|
39 |
+
self.model = model
|
40 |
+
self.model_ema = model_ema
|
41 |
+
self.optimizer = optimizer
|
42 |
+
self.scheduler = scheduler
|
43 |
+
self.train_dataloader = train_dataloader
|
44 |
+
self.val_dataloader = val_dataloader
|
45 |
+
self.config = config
|
46 |
+
self.finish_train = False
|
47 |
+
self.logger = logger
|
48 |
+
self.fp16_run = fp16_run
|
49 |
+
|
50 |
+
def _train_epoch(self):
|
51 |
+
"""Train model one epoch."""
|
52 |
+
raise NotImplementedError
|
53 |
+
|
54 |
+
@paddle.no_grad()
|
55 |
+
def _eval_epoch(self):
|
56 |
+
"""Evaluate model one epoch."""
|
57 |
+
pass
|
58 |
+
|
59 |
+
def save_checkpoint(self, checkpoint_path):
|
60 |
+
"""Save checkpoint.
|
61 |
+
Args:
|
62 |
+
checkpoint_path (str): Checkpoint path to be saved.
|
63 |
+
"""
|
64 |
+
state_dict = {
|
65 |
+
"optimizer": self.optimizer.state_dict(),
|
66 |
+
"steps": self.steps,
|
67 |
+
"epochs": self.epochs,
|
68 |
+
"model": {key: self.model[key].state_dict() for key in self.model}
|
69 |
+
}
|
70 |
+
if self.model_ema is not None:
|
71 |
+
state_dict['model_ema'] = {key: self.model_ema[key].state_dict() for key in self.model_ema}
|
72 |
+
|
73 |
+
if not os.path.exists(os.path.dirname(checkpoint_path)):
|
74 |
+
os.makedirs(os.path.dirname(checkpoint_path))
|
75 |
+
paddle.save(state_dict, checkpoint_path)
|
76 |
+
|
77 |
+
def load_checkpoint(self, checkpoint_path, load_only_params=False):
|
78 |
+
"""Load checkpoint.
|
79 |
+
|
80 |
+
Args:
|
81 |
+
checkpoint_path (str): Checkpoint path to be loaded.
|
82 |
+
load_only_params (bool): Whether to load only model parameters.
|
83 |
+
|
84 |
+
"""
|
85 |
+
state_dict = paddle.load(checkpoint_path)
|
86 |
+
if state_dict["model"] is not None:
|
87 |
+
for key in self.model:
|
88 |
+
self._load(state_dict["model"][key], self.model[key])
|
89 |
+
|
90 |
+
if self.model_ema is not None:
|
91 |
+
for key in self.model_ema:
|
92 |
+
self._load(state_dict["model_ema"][key], self.model_ema[key])
|
93 |
+
|
94 |
+
if not load_only_params:
|
95 |
+
self.steps = state_dict["steps"]
|
96 |
+
self.epochs = state_dict["epochs"]
|
97 |
+
self.optimizer.set_state_dict(state_dict["optimizer"])
|
98 |
+
|
99 |
+
|
100 |
+
def _load(self, states, model, force_load=True):
|
101 |
+
model_states = model.state_dict()
|
102 |
+
for key, val in states.items():
|
103 |
+
try:
|
104 |
+
if key not in model_states:
|
105 |
+
continue
|
106 |
+
if isinstance(val, nn.Parameter):
|
107 |
+
val = val.clone().detach()
|
108 |
+
|
109 |
+
if val.shape != model_states[key].shape:
|
110 |
+
self.logger.info("%s does not have same shape" % key)
|
111 |
+
print(val.shape, model_states[key].shape)
|
112 |
+
if not force_load:
|
113 |
+
continue
|
114 |
+
|
115 |
+
min_shape = np.minimum(np.array(val.shape), np.array(model_states[key].shape))
|
116 |
+
slices = [slice(0, min_index) for min_index in min_shape]
|
117 |
+
model_states[key][slices][:] = val[slices]
|
118 |
+
else:
|
119 |
+
model_states[key][:] = val
|
120 |
+
except:
|
121 |
+
self.logger.info("not exist :%s" % key)
|
122 |
+
print("not exist ", key)
|
123 |
+
|
124 |
+
@staticmethod
|
125 |
+
def get_gradient_norm(model):
|
126 |
+
total_norm = 0
|
127 |
+
for p in model.parameters():
|
128 |
+
param_norm = p.grad.data.norm(2)
|
129 |
+
total_norm += param_norm.item() ** 2
|
130 |
+
|
131 |
+
total_norm = np.sqrt(total_norm)
|
132 |
+
return total_norm
|
133 |
+
|
134 |
+
@staticmethod
|
135 |
+
def length_to_mask(lengths):
|
136 |
+
mask = paddle.arange(lengths.max()).unsqueeze(0).expand([lengths.shape[0], -1]).astype(lengths.dtype)
|
137 |
+
mask = paddle.greater_than(mask+1, lengths.unsqueeze(1))
|
138 |
+
return mask
|
139 |
+
|
140 |
+
def _get_lr(self):
|
141 |
+
return self.optimizer.get_lr()
|
142 |
+
|
143 |
+
@staticmethod
|
144 |
+
def moving_average(model, model_test, beta=0.999):
|
145 |
+
for param, param_test in zip(model.parameters(), model_test.parameters()):
|
146 |
+
param_test.set_value(param + beta * (param_test - param))
|
147 |
+
|
148 |
+
def _train_epoch(self):
|
149 |
+
self.epochs += 1
|
150 |
+
|
151 |
+
train_losses = defaultdict(list)
|
152 |
+
_ = [self.model[k].train() for k in self.model]
|
153 |
+
scaler = paddle.amp.GradScaler() if self.fp16_run else None
|
154 |
+
|
155 |
+
use_con_reg = (self.epochs >= self.args.con_reg_epoch)
|
156 |
+
use_adv_cls = (self.epochs >= self.args.adv_cls_epoch)
|
157 |
+
|
158 |
+
for train_steps_per_epoch, batch in enumerate(tqdm(self.train_dataloader, desc="[train]"), 1):
|
159 |
+
|
160 |
+
### load data
|
161 |
+
x_real, y_org, x_ref, x_ref2, y_trg, z_trg, z_trg2 = batch
|
162 |
+
|
163 |
+
# train the discriminator (by random reference)
|
164 |
+
self.optimizer.clear_grad()
|
165 |
+
if scaler is not None:
|
166 |
+
with paddle.amp.autocast():
|
167 |
+
d_loss, d_losses_latent = compute_d_loss(self.model, self.args.d_loss, x_real, y_org, y_trg, z_trg=z_trg, use_adv_cls=use_adv_cls, use_con_reg=use_con_reg)
|
168 |
+
scaler.scale(d_loss).backward()
|
169 |
+
else:
|
170 |
+
d_loss, d_losses_latent = compute_d_loss(self.model, self.args.d_loss, x_real, y_org, y_trg, z_trg=z_trg, use_adv_cls=use_adv_cls, use_con_reg=use_con_reg)
|
171 |
+
d_loss.backward()
|
172 |
+
self.optimizer.step('discriminator', scaler=scaler)
|
173 |
+
|
174 |
+
# train the discriminator (by target reference)
|
175 |
+
self.optimizer.clear_grad()
|
176 |
+
if scaler is not None:
|
177 |
+
with paddle.amp.autocast():
|
178 |
+
d_loss, d_losses_ref = compute_d_loss(self.model, self.args.d_loss, x_real, y_org, y_trg, x_ref=x_ref, use_adv_cls=use_adv_cls, use_con_reg=use_con_reg)
|
179 |
+
scaler.scale(d_loss).backward()
|
180 |
+
else:
|
181 |
+
d_loss, d_losses_ref = compute_d_loss(self.model, self.args.d_loss, x_real, y_org, y_trg, x_ref=x_ref, use_adv_cls=use_adv_cls, use_con_reg=use_con_reg)
|
182 |
+
d_loss.backward()
|
183 |
+
|
184 |
+
self.optimizer.step('discriminator', scaler=scaler)
|
185 |
+
|
186 |
+
# train the generator (by random reference)
|
187 |
+
self.optimizer.clear_grad()
|
188 |
+
if scaler is not None:
|
189 |
+
with paddle.amp.autocast():
|
190 |
+
g_loss, g_losses_latent = compute_g_loss(
|
191 |
+
self.model, self.args.g_loss, x_real, y_org, y_trg, z_trgs=[z_trg, z_trg2], use_adv_cls=use_adv_cls)
|
192 |
+
scaler.scale(g_loss).backward()
|
193 |
+
else:
|
194 |
+
g_loss, g_losses_latent = compute_g_loss(
|
195 |
+
self.model, self.args.g_loss, x_real, y_org, y_trg, z_trgs=[z_trg, z_trg2], use_adv_cls=use_adv_cls)
|
196 |
+
g_loss.backward()
|
197 |
+
|
198 |
+
self.optimizer.step('generator', scaler=scaler)
|
199 |
+
self.optimizer.step('mapping_network', scaler=scaler)
|
200 |
+
self.optimizer.step('style_encoder', scaler=scaler)
|
201 |
+
|
202 |
+
# train the generator (by target reference)
|
203 |
+
self.optimizer.clear_grad()
|
204 |
+
if scaler is not None:
|
205 |
+
with paddle.amp.autocast():
|
206 |
+
g_loss, g_losses_ref = compute_g_loss(
|
207 |
+
self.model, self.args.g_loss, x_real, y_org, y_trg, x_refs=[x_ref, x_ref2], use_adv_cls=use_adv_cls)
|
208 |
+
scaler.scale(g_loss).backward()
|
209 |
+
else:
|
210 |
+
g_loss, g_losses_ref = compute_g_loss(
|
211 |
+
self.model, self.args.g_loss, x_real, y_org, y_trg, x_refs=[x_ref, x_ref2], use_adv_cls=use_adv_cls)
|
212 |
+
g_loss.backward()
|
213 |
+
self.optimizer.step('generator', scaler=scaler)
|
214 |
+
|
215 |
+
# compute moving average of network parameters
|
216 |
+
self.moving_average(self.model.generator, self.model_ema.generator, beta=0.999)
|
217 |
+
self.moving_average(self.model.mapping_network, self.model_ema.mapping_network, beta=0.999)
|
218 |
+
self.moving_average(self.model.style_encoder, self.model_ema.style_encoder, beta=0.999)
|
219 |
+
self.optimizer.scheduler()
|
220 |
+
|
221 |
+
for key in d_losses_latent:
|
222 |
+
train_losses["train/%s" % key].append(d_losses_latent[key])
|
223 |
+
for key in g_losses_latent:
|
224 |
+
train_losses["train/%s" % key].append(g_losses_latent[key])
|
225 |
+
|
226 |
+
|
227 |
+
train_losses = {key: np.mean(value) for key, value in train_losses.items()}
|
228 |
+
return train_losses
|
229 |
+
|
230 |
+
@paddle.no_grad()
|
231 |
+
def _eval_epoch(self):
|
232 |
+
use_adv_cls = (self.epochs >= self.args.adv_cls_epoch)
|
233 |
+
|
234 |
+
eval_losses = defaultdict(list)
|
235 |
+
eval_images = defaultdict(list)
|
236 |
+
_ = [self.model[k].eval() for k in self.model]
|
237 |
+
for eval_steps_per_epoch, batch in enumerate(tqdm(self.val_dataloader, desc="[eval]"), 1):
|
238 |
+
|
239 |
+
### load data
|
240 |
+
x_real, y_org, x_ref, x_ref2, y_trg, z_trg, z_trg2 = batch
|
241 |
+
|
242 |
+
# train the discriminator
|
243 |
+
d_loss, d_losses_latent = compute_d_loss(
|
244 |
+
self.model, self.args.d_loss, x_real, y_org, y_trg, z_trg=z_trg, use_r1_reg=False, use_adv_cls=use_adv_cls)
|
245 |
+
d_loss, d_losses_ref = compute_d_loss(
|
246 |
+
self.model, self.args.d_loss, x_real, y_org, y_trg, x_ref=x_ref, use_r1_reg=False, use_adv_cls=use_adv_cls)
|
247 |
+
|
248 |
+
# train the generator
|
249 |
+
g_loss, g_losses_latent = compute_g_loss(
|
250 |
+
self.model, self.args.g_loss, x_real, y_org, y_trg, z_trgs=[z_trg, z_trg2], use_adv_cls=use_adv_cls)
|
251 |
+
g_loss, g_losses_ref = compute_g_loss(
|
252 |
+
self.model, self.args.g_loss, x_real, y_org, y_trg, x_refs=[x_ref, x_ref2], use_adv_cls=use_adv_cls)
|
253 |
+
|
254 |
+
for key in d_losses_latent:
|
255 |
+
eval_losses["eval/%s" % key].append(d_losses_latent[key])
|
256 |
+
for key in g_losses_latent:
|
257 |
+
eval_losses["eval/%s" % key].append(g_losses_latent[key])
|
258 |
+
|
259 |
+
# if eval_steps_per_epoch % 10 == 0:
|
260 |
+
# # generate x_fake
|
261 |
+
# s_trg = self.model_ema.style_encoder(x_ref, y_trg)
|
262 |
+
# F0 = self.model.f0_model.get_feature_GAN(x_real)
|
263 |
+
# x_fake = self.model_ema.generator(x_real, s_trg, masks=None, F0=F0)
|
264 |
+
# # generate x_recon
|
265 |
+
# s_real = self.model_ema.style_encoder(x_real, y_org)
|
266 |
+
# F0_fake = self.model.f0_model.get_feature_GAN(x_fake)
|
267 |
+
# x_recon = self.model_ema.generator(x_fake, s_real, masks=None, F0=F0_fake)
|
268 |
+
|
269 |
+
# eval_images['eval/image'].append(
|
270 |
+
# ([x_real[0, 0].numpy(),
|
271 |
+
# x_fake[0, 0].numpy(),
|
272 |
+
# x_recon[0, 0].numpy()]))
|
273 |
+
|
274 |
+
eval_losses = {key: np.mean(value) for key, value in eval_losses.items()}
|
275 |
+
eval_losses.update(eval_images)
|
276 |
+
return eval_losses
|
starganv2vc_paddle/transforms.py
ADDED
@@ -0,0 +1,120 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# -*- coding: utf-8 -*-
|
2 |
+
|
3 |
+
import numpy as np
|
4 |
+
import paddle
|
5 |
+
from paddle import nn
|
6 |
+
import paddle.nn.functional as F
|
7 |
+
import paddleaudio
|
8 |
+
import paddleaudio.functional as audio_F
|
9 |
+
import random
|
10 |
+
|
11 |
+
## 1. RandomTimeStrech
|
12 |
+
|
13 |
+
class TimeStrech(nn.Layer):
|
14 |
+
def __init__(self, scale):
|
15 |
+
super(TimeStrech, self).__init__()
|
16 |
+
self.scale = scale
|
17 |
+
|
18 |
+
def forward(self, x):
|
19 |
+
mel_size = x.shape[-1]
|
20 |
+
|
21 |
+
x = F.interpolate(x, scale_factor=(1, self.scale), align_corners=False,
|
22 |
+
mode='bilinear').squeeze()
|
23 |
+
|
24 |
+
if x.shape[-1] < mel_size:
|
25 |
+
noise_length = (mel_size - x.shape[-1])
|
26 |
+
random_pos = random.randint(0, x.shape[-1]) - noise_length
|
27 |
+
if random_pos < 0:
|
28 |
+
random_pos = 0
|
29 |
+
noise = x[..., random_pos:random_pos + noise_length]
|
30 |
+
x = paddle.concat([x, noise], axis=-1)
|
31 |
+
else:
|
32 |
+
x = x[..., :mel_size]
|
33 |
+
|
34 |
+
return x.unsqueeze(1)
|
35 |
+
|
36 |
+
## 2. PitchShift
|
37 |
+
class PitchShift(nn.Layer):
|
38 |
+
def __init__(self, shift):
|
39 |
+
super(PitchShift, self).__init__()
|
40 |
+
self.shift = shift
|
41 |
+
|
42 |
+
def forward(self, x):
|
43 |
+
if len(x.shape) == 2:
|
44 |
+
x = x.unsqueeze(0)
|
45 |
+
x = x.squeeze()
|
46 |
+
mel_size = x.shape[1]
|
47 |
+
shift_scale = (mel_size + self.shift) / mel_size
|
48 |
+
x = F.interpolate(x.unsqueeze(1), scale_factor=(shift_scale, 1.), align_corners=False,
|
49 |
+
mode='bilinear').squeeze(1)
|
50 |
+
|
51 |
+
x = x[:, :mel_size]
|
52 |
+
if x.shape[1] < mel_size:
|
53 |
+
pad_size = mel_size - x.shape[1]
|
54 |
+
x = paddle.cat([x, paddle.zeros(x.shape[0], pad_size, x.shape[2])], axis=1)
|
55 |
+
x = x.squeeze()
|
56 |
+
return x.unsqueeze(1)
|
57 |
+
|
58 |
+
## 3. ShiftBias
|
59 |
+
class ShiftBias(nn.Layer):
|
60 |
+
def __init__(self, bias):
|
61 |
+
super(ShiftBias, self).__init__()
|
62 |
+
self.bias = bias
|
63 |
+
|
64 |
+
def forward(self, x):
|
65 |
+
return x + self.bias
|
66 |
+
|
67 |
+
## 4. Scaling
|
68 |
+
class SpectScaling(nn.Layer):
|
69 |
+
def __init__(self, scale):
|
70 |
+
super(SpectScaling, self).__init__()
|
71 |
+
self.scale = scale
|
72 |
+
|
73 |
+
def forward(self, x):
|
74 |
+
return x * self.scale
|
75 |
+
|
76 |
+
## 5. Time Flip
|
77 |
+
class TimeFlip(nn.Layer):
|
78 |
+
def __init__(self, length):
|
79 |
+
super(TimeFlip, self).__init__()
|
80 |
+
self.length = round(length)
|
81 |
+
|
82 |
+
def forward(self, x):
|
83 |
+
if self.length > 1:
|
84 |
+
start = np.random.randint(0, x.shape[-1] - self.length)
|
85 |
+
x_ret = x.clone()
|
86 |
+
x_ret[..., start:start + self.length] = paddle.flip(x[..., start:start + self.length], axis=[-1])
|
87 |
+
x = x_ret
|
88 |
+
return x
|
89 |
+
|
90 |
+
class PhaseShuffle2D(nn.Layer):
|
91 |
+
def __init__(self, n=2):
|
92 |
+
super(PhaseShuffle2D, self).__init__()
|
93 |
+
self.n = n
|
94 |
+
self.random = random.Random(1)
|
95 |
+
|
96 |
+
def forward(self, x, move=None):
|
97 |
+
# x.size = (B, C, M, L)
|
98 |
+
if move is None:
|
99 |
+
move = self.random.randint(-self.n, self.n)
|
100 |
+
|
101 |
+
if move == 0:
|
102 |
+
return x
|
103 |
+
else:
|
104 |
+
left = x[:, :, :, :move]
|
105 |
+
right = x[:, :, :, move:]
|
106 |
+
shuffled = paddle.concat([right, left], axis=3)
|
107 |
+
|
108 |
+
return shuffled
|
109 |
+
|
110 |
+
def build_transforms():
|
111 |
+
transforms = [
|
112 |
+
lambda M: TimeStrech(1+ (np.random.random()-0.5)*M*0.2),
|
113 |
+
lambda M: SpectScaling(1 + (np.random.random()-1)*M*0.1),
|
114 |
+
lambda M: PhaseShuffle2D(192),
|
115 |
+
]
|
116 |
+
N, M = len(transforms), np.random.random()
|
117 |
+
composed = nn.Sequential(
|
118 |
+
*[trans(M) for trans in np.random.choice(transforms, N)]
|
119 |
+
)
|
120 |
+
return composed
|
test_arch.py
ADDED
@@ -0,0 +1,65 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#!/usr/bin/env python3
|
2 |
+
#coding:utf-8
|
3 |
+
|
4 |
+
import os
|
5 |
+
import yaml
|
6 |
+
import paddle
|
7 |
+
import click
|
8 |
+
import warnings
|
9 |
+
warnings.simplefilter('ignore')
|
10 |
+
|
11 |
+
from munch import Munch
|
12 |
+
|
13 |
+
from starganv2vc_paddle.models import build_model
|
14 |
+
|
15 |
+
from starganv2vc_paddle.Utils.ASR.models import ASRCNN
|
16 |
+
from starganv2vc_paddle.Utils.JDC.model import JDCNet
|
17 |
+
|
18 |
+
|
19 |
+
@click.command()
|
20 |
+
@click.option('-p', '--config_path', default='Configs/config.yml', type=str)
|
21 |
+
|
22 |
+
def main(config_path):
|
23 |
+
config = yaml.safe_load(open(config_path))
|
24 |
+
|
25 |
+
# load ASR model
|
26 |
+
ASR_config = config.get('ASR_config', False)
|
27 |
+
with open(ASR_config) as f:
|
28 |
+
ASR_config = yaml.safe_load(f)
|
29 |
+
ASR_model_config = ASR_config['model_params']
|
30 |
+
ASR_model = ASRCNN(**ASR_model_config)
|
31 |
+
_ = ASR_model.eval()
|
32 |
+
|
33 |
+
# load F0 model
|
34 |
+
F0_model = JDCNet(num_class=1, seq_len=192)
|
35 |
+
_ = F0_model.eval()
|
36 |
+
|
37 |
+
# build model
|
38 |
+
_, model_ema = build_model(Munch(config['model_params']), F0_model, ASR_model)
|
39 |
+
|
40 |
+
asr_input = paddle.randn([4, 80, 192])
|
41 |
+
print('ASR model input:', asr_input.shape, 'output:', ASR_model(asr_input).shape)
|
42 |
+
mel_input = paddle.randn([4, 1, 192, 512])
|
43 |
+
print('F0 model input:', mel_input.shape, 'output:', [t.shape for t in F0_model(mel_input)])
|
44 |
+
|
45 |
+
_ = [v.eval() for v in model_ema.values()]
|
46 |
+
label = paddle.to_tensor([0,1,2,3], dtype=paddle.int64)
|
47 |
+
latent_dim = model_ema.mapping_network.shared[0].weight.shape[0]
|
48 |
+
latent_style = paddle.randn([4, latent_dim])
|
49 |
+
ref = model_ema.mapping_network(latent_style, label)
|
50 |
+
mel_input2 = paddle.randn([4, 1, 192, 512])
|
51 |
+
style_ref = model_ema.style_encoder(mel_input2, label)
|
52 |
+
print('StyleGANv2-VC encoder inputs:', mel_input2.shape, 'output:', style_ref.shape, 'should has the same shape as the ref:', ref.shape)
|
53 |
+
f0_feat = F0_model.get_feature_GAN(mel_input)
|
54 |
+
out = model_ema.generator(mel_input, style_ref, F0=f0_feat)
|
55 |
+
print('StyleGANv2-VC inputs:', label.shape, latent_style.shape, mel_input.shape, 'output:', out.shape)
|
56 |
+
|
57 |
+
paddle.save({k: v.state_dict() for k, v in model_ema.items()}, 'test_arch.pd')
|
58 |
+
file_size = os.path.getsize('test_arch.pd') / float(1024*1024)
|
59 |
+
print(f'Main models occupied {file_size:.2f} MB')
|
60 |
+
os.remove('test_arch.pd')
|
61 |
+
|
62 |
+
return 0
|
63 |
+
|
64 |
+
if __name__=="__main__":
|
65 |
+
main()
|
train.py
ADDED
@@ -0,0 +1,149 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#!/usr/bin/env python3
|
2 |
+
#coding:utf-8
|
3 |
+
|
4 |
+
import os
|
5 |
+
import os.path as osp
|
6 |
+
import re
|
7 |
+
import sys
|
8 |
+
import yaml
|
9 |
+
import shutil
|
10 |
+
import numpy as np
|
11 |
+
import paddle
|
12 |
+
import click
|
13 |
+
import warnings
|
14 |
+
warnings.simplefilter('ignore')
|
15 |
+
|
16 |
+
from functools import reduce
|
17 |
+
from munch import Munch
|
18 |
+
|
19 |
+
from starganv2vc_paddle.meldataset import build_dataloader
|
20 |
+
from starganv2vc_paddle.optimizers import build_optimizer
|
21 |
+
from starganv2vc_paddle.models import build_model
|
22 |
+
from starganv2vc_paddle.trainer import Trainer
|
23 |
+
from visualdl import LogWriter
|
24 |
+
|
25 |
+
from starganv2vc_paddle.Utils.ASR.models import ASRCNN
|
26 |
+
from starganv2vc_paddle.Utils.JDC.model import JDCNet
|
27 |
+
|
28 |
+
import logging
|
29 |
+
from logging import StreamHandler
|
30 |
+
logger = logging.getLogger(__name__)
|
31 |
+
logger.setLevel(logging.DEBUG)
|
32 |
+
handler = StreamHandler()
|
33 |
+
handler.setLevel(logging.DEBUG)
|
34 |
+
logger.addHandler(handler)
|
35 |
+
|
36 |
+
|
37 |
+
@click.command()
|
38 |
+
@click.option('-p', '--config_path', default='Configs/config.yml', type=str)
|
39 |
+
|
40 |
+
def main(config_path):
|
41 |
+
config = yaml.safe_load(open(config_path))
|
42 |
+
|
43 |
+
log_dir = config['log_dir']
|
44 |
+
if not osp.exists(log_dir): os.makedirs(log_dir, exist_ok=True)
|
45 |
+
shutil.copy(config_path, osp.join(log_dir, osp.basename(config_path)))
|
46 |
+
writer = LogWriter(log_dir + "/visualdl")
|
47 |
+
|
48 |
+
# write logs
|
49 |
+
file_handler = logging.FileHandler(osp.join(log_dir, 'train.log'))
|
50 |
+
file_handler.setLevel(logging.DEBUG)
|
51 |
+
file_handler.setFormatter(logging.Formatter('%(levelname)s:%(asctime)s: %(message)s'))
|
52 |
+
logger.addHandler(file_handler)
|
53 |
+
|
54 |
+
batch_size = config.get('batch_size', 10)
|
55 |
+
epochs = config.get('epochs', 1000)
|
56 |
+
save_freq = config.get('save_freq', 20)
|
57 |
+
train_path = config.get('train_data', None)
|
58 |
+
val_path = config.get('val_data', None)
|
59 |
+
stage = config.get('stage', 'star')
|
60 |
+
fp16_run = config.get('fp16_run', False)
|
61 |
+
|
62 |
+
# load data
|
63 |
+
train_list, val_list = get_data_path_list(train_path, val_path)
|
64 |
+
train_dataloader = build_dataloader(train_list,
|
65 |
+
batch_size=batch_size,
|
66 |
+
num_workers=4)
|
67 |
+
val_dataloader = build_dataloader(val_list,
|
68 |
+
batch_size=batch_size,
|
69 |
+
validation=True,
|
70 |
+
num_workers=2)
|
71 |
+
|
72 |
+
# load pretrained ASR model
|
73 |
+
ASR_config = config.get('ASR_config', False)
|
74 |
+
ASR_path = config.get('ASR_path', False)
|
75 |
+
with open(ASR_config) as f:
|
76 |
+
ASR_config = yaml.safe_load(f)
|
77 |
+
ASR_model_config = ASR_config['model_params']
|
78 |
+
ASR_model = ASRCNN(**ASR_model_config)
|
79 |
+
params = paddle.load(ASR_path)['model']
|
80 |
+
ASR_model.set_state_dict(params)
|
81 |
+
_ = ASR_model.eval()
|
82 |
+
|
83 |
+
# load pretrained F0 model
|
84 |
+
F0_path = config.get('F0_path', False)
|
85 |
+
F0_model = JDCNet(num_class=1, seq_len=192)
|
86 |
+
params = paddle.load(F0_path)['net']
|
87 |
+
F0_model.set_state_dict(params)
|
88 |
+
|
89 |
+
# build model
|
90 |
+
model, model_ema = build_model(Munch(config['model_params']), F0_model, ASR_model)
|
91 |
+
|
92 |
+
scheduler_params = {
|
93 |
+
"max_lr": float(config['optimizer_params'].get('lr', 2e-4)),
|
94 |
+
"pct_start": float(config['optimizer_params'].get('pct_start', 0.0)),
|
95 |
+
"epochs": epochs,
|
96 |
+
"steps_per_epoch": len(train_dataloader),
|
97 |
+
}
|
98 |
+
|
99 |
+
scheduler_params_dict = {key: scheduler_params.copy() for key in model}
|
100 |
+
scheduler_params_dict['mapping_network']['max_lr'] = 2e-6
|
101 |
+
optimizer = build_optimizer({key: model[key].parameters() for key in model},
|
102 |
+
scheduler_params_dict=scheduler_params_dict)
|
103 |
+
|
104 |
+
trainer = Trainer(args=Munch(config['loss_params']), model=model,
|
105 |
+
model_ema=model_ema,
|
106 |
+
optimizer=optimizer,
|
107 |
+
train_dataloader=train_dataloader,
|
108 |
+
val_dataloader=val_dataloader,
|
109 |
+
logger=logger,
|
110 |
+
fp16_run=fp16_run)
|
111 |
+
|
112 |
+
if config.get('pretrained_model', '') != '':
|
113 |
+
trainer.load_checkpoint(config['pretrained_model'],
|
114 |
+
load_only_params=config.get('load_only_params', True))
|
115 |
+
|
116 |
+
for _ in range(1, epochs+1):
|
117 |
+
epoch = trainer.epochs
|
118 |
+
train_results = trainer._train_epoch()
|
119 |
+
eval_results = trainer._eval_epoch()
|
120 |
+
results = train_results.copy()
|
121 |
+
results.update(eval_results)
|
122 |
+
logger.info('--- epoch %d ---' % epoch)
|
123 |
+
for key, value in results.items():
|
124 |
+
if isinstance(value, float):
|
125 |
+
logger.info('%-15s: %.4f' % (key, value))
|
126 |
+
writer.add_scalar(key, value, epoch)
|
127 |
+
else:
|
128 |
+
for v in value:
|
129 |
+
writer.add_histogram('eval_spec', v, epoch)
|
130 |
+
if (epoch % save_freq) == 0:
|
131 |
+
trainer.save_checkpoint(osp.join(log_dir, 'epoch_%05d.pd' % epoch))
|
132 |
+
|
133 |
+
return 0
|
134 |
+
|
135 |
+
def get_data_path_list(train_path=None, val_path=None):
|
136 |
+
if train_path is None:
|
137 |
+
train_path = "Data/train_list.txt"
|
138 |
+
if val_path is None:
|
139 |
+
val_path = "Data/val_list.txt"
|
140 |
+
|
141 |
+
with open(train_path, 'r') as f:
|
142 |
+
train_list = f.readlines()
|
143 |
+
with open(val_path, 'r') as f:
|
144 |
+
val_list = f.readlines()
|
145 |
+
|
146 |
+
return train_list, val_list
|
147 |
+
|
148 |
+
if __name__=="__main__":
|
149 |
+
main()
|