allthingssecurity commited on
Commit
64db264
1 Parent(s): 7ad9a78
.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: Smjainvoice
3
- emoji: 📉
4
  colorFrom: green
5
- colorTo: purple
6
  sdk: gradio
7
- sdk_version: 3.1.4
8
  app_file: app.py
9
  pinned: false
 
10
  ---
11
 
12
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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,272]
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()