wuxulong19950206 commited on
Commit
14d1720
·
1 Parent(s): 56fbf18

First model version

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .flake8 +2 -0
  2. .gitignore +21 -0
  3. .gitmodules +12 -0
  4. .style.yapf +3 -0
  5. CONFIG.md +54 -0
  6. docs/_config.yml +1 -0
  7. docs/index.md +547 -0
  8. examples/aishell3/config.yaml +167 -0
  9. examples/aishell3/gp.vocab +4502 -0
  10. examples/aishell3/input.txt +22 -0
  11. examples/aishell3/prepare.py +96 -0
  12. examples/aishell3/py.vocab +1915 -0
  13. examples/biaobei/ProsodyLabeling/000001-010000.txt +0 -0
  14. examples/biaobei/Wave/desktop.ini +4 -0
  15. examples/biaobei/config.yaml +161 -0
  16. examples/biaobei/gp.vocab +4131 -0
  17. examples/biaobei/input.txt +13 -0
  18. examples/biaobei/name_py_hz_dur.txt +0 -0
  19. examples/biaobei/py.vocab +1608 -0
  20. gp.vocab +4131 -0
  21. mtts/__init__.py +1 -0
  22. mtts/datasets/dataset.py +207 -0
  23. mtts/loss.py +23 -0
  24. mtts/models/__init__.py +1 -0
  25. mtts/models/decoder/__init__.py +2 -0
  26. mtts/models/decoder/decoder.py +22 -0
  27. mtts/models/decoder/fs2_transformer_decoder.py +67 -0
  28. mtts/models/encoder/__init__.py +2 -0
  29. mtts/models/encoder/encoder.py +25 -0
  30. mtts/models/encoder/fs2_transformer_encoder.py +65 -0
  31. mtts/models/fs2_model.py +135 -0
  32. mtts/models/fs2_variance.py +189 -0
  33. mtts/models/layers.py +170 -0
  34. mtts/models/postnet/__init__.py +3 -0
  35. mtts/models/postnet/postnet.py +22 -0
  36. mtts/models/postnet/postnet_1d.py +56 -0
  37. mtts/models/postnet/postnet_unet.py +117 -0
  38. mtts/models/vocoder/VocGAN/LICENSE +21 -0
  39. mtts/models/vocoder/VocGAN/README.md +60 -0
  40. mtts/models/vocoder/VocGAN/__init__.py +1 -0
  41. mtts/models/vocoder/VocGAN/assets/melgan.JPG +0 -0
  42. mtts/models/vocoder/VocGAN/assets/vocgan.JPG +0 -0
  43. mtts/models/vocoder/VocGAN/config/default.yaml +60 -0
  44. mtts/models/vocoder/VocGAN/datasets/dataloader.py +104 -0
  45. mtts/models/vocoder/VocGAN/denoiser.py +38 -0
  46. mtts/models/vocoder/VocGAN/download_utils.py +175 -0
  47. mtts/models/vocoder/VocGAN/export_torchscript.py +63 -0
  48. mtts/models/vocoder/VocGAN/inference.py +61 -0
  49. mtts/models/vocoder/VocGAN/model/discriminator.py +144 -0
  50. mtts/models/vocoder/VocGAN/model/generator.py +422 -0
.flake8 ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ [flake8]
2
+ per-file-ignores = __init__.py:F401
.gitignore ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ **/.pre-commit-config.yaml
2
+ **/*.ipynb
3
+ *.wav
4
+ *.npy
5
+ *.pyc
6
+ log
7
+ *.png
8
+ *.interval
9
+ BZNSYP
10
+ ckpt
11
+ log
12
+ nohup.out
13
+ obsolete
14
+ output
15
+ output_no_hanzi
16
+ results
17
+ samples
18
+ synth
19
+ **/.ipynb_checkpoints/**
20
+ **/__pycache__/
21
+ mtts.egg-info/
.gitmodules ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [submodule "mtts/models/vocoder/VocGAN"]
2
+ path = mtts/models/vocoder/VocGAN
3
+ url = https://github.com/ranchlai/VocGAN.git
4
+ [submodule "mtts/models/vocoder/hifi_gan"]
5
+ path = mtts/models/vocoder/hifi_gan
6
+ url = https://github.com/ranchlai/hifi-gan.git
7
+ [submodule "mtts/models/vocoder/waveglow"]
8
+ path = mtts/models/vocoder/waveglow
9
+ url = https://github.com/ranchlai/waveglow.git
10
+ [submodule "mtts/models/vocoder/melgan"]
11
+ path = mtts/models/vocoder/melgan
12
+ url = https://github.com/ranchlai/melgan.git
.style.yapf ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ [style]
2
+ based_on_style = pep8
3
+ column_limit = 120
CONFIG.md ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Introduction to configurations
2
+
3
+ ## Dataset
4
+ ``` yaml
5
+ dataset: # the dataset part is for training only
6
+ train:
7
+ wav_scp: './train/wav.scp'
8
+ mel_scp: './train/mel.scp'
9
+ dur_scp: './train/dur.scp'
10
+ emb_type1:
11
+ _name: 'pinyin'
12
+ scp: './train/py.scp'
13
+ vocab: 'py.vocab'
14
+ emb_type2:
15
+ _name: 'graphic'
16
+ scp: './train/gp.scp'
17
+ vocab: 'gp.vocab'
18
+ #emb_type3:
19
+ #_name: 'speaker'
20
+ # scp: './train/spk.scp'
21
+ # vocab: # dosn't need vocab
22
+ emb_type4:
23
+ _name: 'prosody'
24
+ scp: './train/psd.scp'
25
+ vocab:
26
+ ```
27
+
28
+ ## Vocoder
29
+ ```yaml
30
+ vocoder:
31
+ type: VocGan # choose one of the following
32
+ MelGAN:
33
+ checkpoint: ~/checkpoints/melgan/melgan_ljspeech.pth
34
+ config: ~/checkpoints/melgan/default.yaml
35
+ device: cpu
36
+ VocGan:
37
+ checkpoint: ~/checkpoints/vctk_pretrained_model_3180.pt #~/checkpoints/ljspeech_29de09d_4000.pt
38
+ denoise: True
39
+ device: cpu
40
+ HiFiGAN:
41
+ checkpoint: ~/checkpoints/VCTK_V3/generator_v3 # you need to download checkpoint and set the params here
42
+ device: cpu
43
+ Waveglow:
44
+ checkpoint: ~/checkpoints/waveglow_256channels_universal_v5_state_dict.pt
45
+ sigma: 1.0
46
+ denoiser_strength: 0.0 # try 0.1
47
+ device: cpu #try cpu if out of memory
48
+
49
+ ```
50
+
51
+
52
+ ## Make your own changes
53
+ Two config files are provided in the examples for illustration purpose. You can changed the config file if you know what you are doing.
54
+ For example, you can remove speaker_emb from the following section, or add prosody embedding if you have prosody label (as in biaobei dataset).
docs/_config.yml ADDED
@@ -0,0 +1 @@
 
 
1
+ theme: jekyll-theme-hacker
docs/index.md ADDED
@@ -0,0 +1,547 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+
3
+
4
+ ## Audio samples
5
+
6
+ Below are the audio samples from step 300k, pinyin + hanzi + unet(as postnet).
7
+
8
+ It may take some time to load all audios in browser.
9
+
10
+
11
+ ### multi-speaker samples
12
+ <table>
13
+ <tbody>
14
+ <tr>
15
+ <td><audio controls="controls">
16
+ <source src="./samples/aishell3/SSB0241_1.0_有个小孩叫小杜.上街打醋又买布.买了布打了醋.回头看见鹰抓兔.放.wav" autoplay="">
17
+ </audio>
18
+ </td>
19
+ <td><audio controls="controls">
20
+ <source src="./samples/aishell3/SSB0341_1.0_红鲤鱼绿鲤鱼与驴.wav" autoplay="">
21
+ </audio>
22
+ </td>
23
+ </tr>
24
+ <tr>
25
+ <td><audio controls="controls">
26
+ <source src="./samples/aishell3/SSB0395_1.0_这个小孩儿真懂事儿.wav" autoplay="">
27
+ </audio>
28
+ </td>
29
+ <td><audio controls="controls">
30
+ <source src="./samples/aishell3/SSB0535_1.0_前方路口左转,然后在下一个路口右转.wav" autoplay="">
31
+ </audio>
32
+ </td>
33
+ </tr>
34
+ <tr>
35
+ <td><audio controls="controls">
36
+ <source src="./samples/aishell3/SSB0606_1.0_天青色等烟雨,而我在等你,炊烟袅袅升起,隔江千万里.wav" autoplay="">
37
+ </audio>
38
+ </td>
39
+ <td><audio controls="controls">
40
+ <source src="./samples/aishell3/SSB0716_1.0_黑化肥发灰会挥发,灰化肥挥发会发黑.wav" autoplay="">
41
+ </audio>
42
+ </td>
43
+ </tr>
44
+ <tr>
45
+ <td><audio controls="controls">
46
+ <source src="./samples/aishell3/SSB1135_1.0_请输入您的卡号.您输入的卡号是六二二六,三八七六,零三四七,六九.wav" autoplay="">
47
+ </audio>
48
+ </td>
49
+ <td><audio controls="controls">
50
+ <source src="./samples/aishell3/SSB1402_1.0_这次考试有点儿紧张,下次再加油吧。.wav" autoplay="">
51
+ </audio>
52
+ </td>
53
+ </tr>
54
+ <tr>
55
+ <td><audio controls="controls">
56
+ <source src="./samples/aishell3/SSB1431_1.0_小毛豆你好,很高兴认识你,寒假马上要结束了.我觉得你最近有进步,.wav" autoplay="">
57
+ </audio>
58
+ </td>
59
+ </tr>
60
+ </tbody>
61
+ </table>
62
+
63
+
64
+ ### Samples from training loop
65
+
66
+
67
+ <table>
68
+ <thead>
69
+ <tr>
70
+ <th style="text-align: left">Synthesized</th>
71
+ <th style="text-align: left">Groudtruth</th>
72
+ </tr>
73
+ </thead>
74
+ <tbody>
75
+ <tr>
76
+ <td><audio controls="controls">
77
+ <source src="./data/step_300000_0_postnet_waveglow.wav" autoplay="">
78
+ </audio>
79
+ </td>
80
+ <td><audio controls="controls">
81
+ <source src="./data/step_300000_0_ground-truth_waveglow.wav" autoplay="">
82
+ </audio></td>
83
+ </tr>
84
+ <tr>
85
+ <td><audio controls="controls">
86
+ <source src="./data/step_300000_1_postnet_waveglow.wav" autoplay="">
87
+ </audio>
88
+ </td>
89
+ <td><audio controls="controls">
90
+ <source src="./data/step_300000_1_ground-truth_waveglow.wav" autoplay="">
91
+ </audio></td>
92
+ </tr>
93
+ <tr>
94
+ <td><audio controls="controls">
95
+ <source src="./data/step_300000_2_postnet_waveglow.wav" autoplay="">
96
+ </audio>
97
+ </td>
98
+ <td><audio controls="controls">
99
+ <source src="./data/step_300000_2_ground-truth_waveglow.wav" autoplay="">
100
+ </audio></td>
101
+ </tr>
102
+ <tr>
103
+ <td><audio controls="controls">
104
+ <source src="./data/step_300000_3_postnet_waveglow.wav" autoplay="">
105
+ </audio>
106
+ </td>
107
+ <td><audio controls="controls">
108
+ <source src="./data/step_300000_3_ground-truth_waveglow.wav" autoplay="">
109
+ </audio></td>
110
+ </tr>
111
+ <tr>
112
+ <td><audio controls="controls">
113
+ <source src="./data/step_300000_4_postnet_waveglow.wav" autoplay="">
114
+ </audio>
115
+ </td>
116
+ <td><audio controls="controls">
117
+ <source src="./data/step_300000_4_ground-truth_waveglow.wav" autoplay="">
118
+ </audio></td>
119
+ </tr>
120
+ <tr>
121
+ <td><audio controls="controls">
122
+ <source src="./data/step_300000_5_postnet_waveglow.wav" autoplay="">
123
+ </audio>
124
+ </td>
125
+ <td><audio controls="controls">
126
+ <source src="./data/step_300000_5_ground-truth_waveglow.wav" autoplay="">
127
+ </audio></td>
128
+ </tr>
129
+ </tbody>
130
+ </table>
131
+
132
+
133
+
134
+ ### Novel sampels
135
+
136
+ The following samples are generated by running
137
+ ```
138
+ ./scripts/hz_synth.sh 1.0 500000
139
+
140
+ ```
141
+
142
+ <b> NOTE: there are many failure cases that are not shown here. </b>
143
+
144
+ #### 常规句子 (注意字与字之前的音隔)
145
+
146
+ - 前方路口左转,然后在下一个路口右转
147
+ - 请输入您的卡号.您输入的卡号是六二二六,三八七六,零三四七,六九幺五
148
+ - 天青色等烟雨,而我在等你,炊烟袅袅升起,隔江千万里
149
+ - 我听不清你在说什么,请大声一点
150
+ - 如果觉得这个项目好,请手动加个星吧,感谢
151
+ - 小毛豆你好,很高兴认识你,寒假马上要结束了.我觉得你最近有进步,继续加油.晚上要早点睡觉,因为明天要开学了.
152
+
153
+
154
+
155
+ <table>
156
+ <thead>
157
+ <tr>
158
+ <th style="text-align: left">Text</th>
159
+ <th style="text-align: left">Normal</th>
160
+ <th style="text-align: left">Fast</th>
161
+ <th style="text-align: left">slow</th>
162
+ </tr>
163
+ </thead>
164
+ <tbody>
165
+ <tr>
166
+ <td>1
167
+ </td>
168
+ <td><audio controls="controls">
169
+ <source src="./novel2/hz_1.0_500000_前方路口左转,然后在下一个路口右转.wav" autoplay="">
170
+ </audio></td>
171
+ <td><audio controls="controls">
172
+ <source src="./novel2/hz_0.9_500000_前方路口左转,然后在下一个路口右转.wav" autoplay="">
173
+ </audio></td>
174
+ <td><audio controls="controls">
175
+ <source src="./novel2/hz_1.1_500000_前方路口左转,然后在下一个路口右转.wav" autoplay="">
176
+ </audio></td>
177
+ </tr>
178
+ <tr>
179
+ <td>2
180
+ </td>
181
+ <td><audio controls="controls">
182
+ <source src="./novel2/hz_1.0_500000_请输入您的卡号.您输入的卡号是六二二六,三八七六,零三四七,六九.wav" autoplay="">
183
+ </audio></td>
184
+ <td><audio controls="controls">
185
+ <source src="./novel2/hz_0.9_500000_请输入您的卡号.您输入的卡号是六二二六,三八七六,零三四七,六九.wav" autoplay="">
186
+ </audio></td>
187
+ <td><audio controls="controls">
188
+ <source src="./novel2/hz_1.1_500000_请输入您的卡号.您输入的卡号是六二二六,三八七六,零三四七,六九.wav" autoplay="">
189
+ </audio></td>
190
+ </tr>
191
+ <tr>
192
+ <td>3
193
+ </td>
194
+ <td><audio controls="controls">
195
+ <source src="./novel2/hz_1.0_500000_天青色等烟雨,而我在等你,炊烟袅袅升起,隔江千万里.wav" autoplay="">
196
+ </audio></td>
197
+ <td><audio controls="controls">
198
+ <source src="./novel2/hz_0.9_500000_天青色等烟雨,而我在等你,炊烟袅袅升起,隔江千万里.wav" autoplay="">
199
+ </audio></td>
200
+ <td><audio controls="controls">
201
+ <source src="./novel2/hz_1.1_500000_天青色等烟雨,而我在等你,炊烟袅袅升起,隔江千万里.wav" autoplay="">
202
+ </audio></td>
203
+ </tr>
204
+ <tr>
205
+ <td>4
206
+ </td>
207
+ <td><audio controls="controls">
208
+ <source src="./novel2/hz_1.0_500000_我听不清你在说什么,请大声一点.wav" autoplay="">
209
+ </audio></td>
210
+ <td><audio controls="controls">
211
+ <source src="./novel2/hz_0.9_500000_我听不清你在说什么,请大声一点.wav" autoplay="">
212
+ </audio></td>
213
+ <td><audio controls="controls">
214
+ <source src="./novel2/hz_1.1_500000_我听不清你在说什么,请大声一点.wav" autoplay="">
215
+ </audio></td>
216
+ </tr>
217
+ <tr>
218
+ <td>5
219
+ </td>
220
+ <td><audio controls="controls">
221
+ <source src="./novel2/hz_1.0_500000_如果觉得这个项目好,请手动加个星吧,感谢.wav" autoplay="">
222
+ </audio></td>
223
+ <td><audio controls="controls">
224
+ <source src="./novel2/hz_0.9_500000_如果觉得这个项目好,请手动加个星吧,感谢.wav" autoplay="">
225
+ </audio></td>
226
+ <td><audio controls="controls">
227
+ <source src="./novel2/hz_1.1_500000_如果觉得这个项目好,请手动加个星吧,感谢.wav" autoplay="">
228
+ </audio></td>
229
+ </tr>
230
+ <tr>
231
+ <td>6
232
+ </td>
233
+ <td><audio controls="controls">
234
+ <source src="./novel2/hz_1.0_500000_小毛豆你好,很高兴认识你.寒假马上要结束了.我觉得你最近有进步,.wav" autoplay="">
235
+ </audio></td>
236
+ <td><audio controls="controls">
237
+ <source src="./novel2/hz_0.9_500000_小毛豆你好,很高兴认识你,寒假马上要结束了.我觉得你最近有进步,.wav" autoplay="">
238
+ </audio></td>
239
+ <td><audio controls="controls">
240
+ <source src="./novel2/hz_1.1_500000_小毛豆你好,很高兴认识你.寒假马上要结束了.我觉得你最近有进步,.wav" autoplay="">
241
+ </audio></td>
242
+ </tr>
243
+
244
+
245
+
246
+ </tbody>
247
+ </table>
248
+ #### 饶口令
249
+
250
+ - 有个小孩叫小杜,上街打醋又买布.买了布打了醋,回头看见鹰抓兔.放下布搁下醋,上前去追鹰和兔.飞了鹰跑了兔,洒了醋湿了布.
251
+ - 红鲤鱼绿鲤鱼与驴
252
+ - 黑化肥发灰会挥发,灰化肥挥发会发黑
253
+
254
+
255
+
256
+ <table>
257
+ <thead>
258
+ <tr>
259
+ <th style="text-align: left">Text</th>
260
+ <th style="text-align: left">Normal</th>
261
+ <th style="text-align: left">Fast</th>
262
+ <th style="text-align: left">slow</th>
263
+ </tr>
264
+ </thead>
265
+ <tbody>
266
+ <tr>
267
+ <td>1
268
+ </td>
269
+ <td><audio controls="controls">
270
+ <source src="./novel2/hz_1.0_500000_黑化肥发灰会挥发,灰化肥挥发会发黑.wav" autoplay="">
271
+ </audio></td>
272
+ <td><audio controls="controls">
273
+ <source src="./novel2/hz_0.9_500000_黑化肥发灰会挥发,灰化肥挥发会发黑.wav" autoplay="">
274
+ </audio></td>
275
+ <td><audio controls="controls">
276
+ <source src="./novel2/hz_1.1_500000_黑化肥发灰会挥发,灰化肥挥发会发黑.wav" autoplay="">
277
+ </audio></td>
278
+ </tr>
279
+ <tr>
280
+ <td>2
281
+ </td>
282
+ <td><audio controls="controls">
283
+ <source src="./novel2/hz_1.0_500000_红鲤鱼绿鲤鱼与驴.wav" autoplay="">
284
+ </audio></td>
285
+ <td><audio controls="controls">
286
+ <source src="./novel2/hz_0.9_500000_红鲤鱼绿鲤鱼与驴.wav" autoplay="">
287
+ </audio></td>
288
+ <td><audio controls="controls">
289
+ <source src="./novel2/hz_1.1_500000_红鲤鱼绿鲤鱼与驴.wav" autoplay="">
290
+ </audio></td>
291
+ </tr>
292
+ <tr>
293
+ <td>9
294
+ </td>
295
+ <td><audio controls="controls">
296
+ <source src="./novel2/hz_1.0_500000_有个小孩叫小杜,上街打醋又买布.买了布打了醋,回头看见鹰抓兔.放.wav" autoplay="">
297
+ </audio></td>
298
+ <td><audio controls="controls">
299
+ <source src="./novel2/hz_0.9_500000_有个小孩叫小杜,上街打醋又买布.买了布打了醋,回头看见鹰抓兔.放.wav" autoplay="">
300
+ </audio></td>
301
+ <td><audio controls="controls">
302
+ <source src="./novel2/hz_1.1_500000_有个小孩叫小杜,上街打醋又买布.买了布打了醋,回头看见鹰抓兔.放.wav" autoplay="">
303
+ </audio></td>
304
+ </tr>
305
+
306
+
307
+ </tbody>
308
+ </table>
309
+
310
+
311
+ #### 儿化音
312
+
313
+ 在汉字转拼音时自动识别儿化音
314
+
315
+ - 自个儿有多少斤两,心里还没数吗
316
+ - 在这儿做啥呢,不能啥玩意儿都带到这里来?
317
+ - 这个小孩儿真懂事儿
318
+ <table>
319
+ <thead>
320
+ <tr>
321
+ <th style="text-align: left">Text</th>
322
+ <th style="text-align: left">Normal</th>
323
+ <th style="text-align: left">Fast</th>
324
+ <th style="text-align: left">slow</th>
325
+ </tr>
326
+ </thead>
327
+ <tbody>
328
+ <tr>
329
+ <td>1
330
+ </td>
331
+ <td><audio controls="controls">
332
+ <source src="./novel2/hz_1.0_500000_自个儿有多少斤两,心里还没数吗.wav" autoplay="">
333
+ </audio></td>
334
+ <td><audio controls="controls">
335
+ <source src="./novel2/hz_0.9_500000_自个儿有多少斤两,心里还没数吗.wav" autoplay="">
336
+ </audio></td>
337
+ <td><audio controls="controls">
338
+ <source src="./novel2/hz_1.1_500000_自个儿有多少斤两,心里还没数吗.wav" autoplay="">
339
+ </audio></td>
340
+ </tr>
341
+ <tr>
342
+ <td>2
343
+ </td>
344
+ <td><audio controls="controls">
345
+ <source src="./novel2/hz_1.0_500000_在这儿做啥呢,不能啥玩意儿都带到这里来?.wav" autoplay="">
346
+ </audio></td>
347
+ <td><audio controls="controls">
348
+ <source src="./novel2/hz_0.9_500000_在这儿做啥呢,不能啥玩意儿都带到这里来?.wav" autoplay="">
349
+ </audio></td>
350
+ <td><audio controls="controls">
351
+ <source src="./novel2/hz_1.1_500000_在这儿做啥呢,不能啥玩意儿都带到这里来?.wav" autoplay="">
352
+ </audio></td>
353
+ </tr>
354
+ <tr>
355
+ <td>9
356
+ </td>
357
+ <td><audio controls="controls">
358
+ <source src="./novel2/hz_1.0_500000_这个小孩儿真懂事儿.wav" autoplay="">
359
+ </audio></td>
360
+ <td><audio controls="controls">
361
+ <source src="./novel2/hz_0.9_500000_这个小孩儿真懂事儿.wav" autoplay="">
362
+ </audio></td>
363
+ <td><audio controls="controls">
364
+ <source src="./novel2/hz_1.1_500000_这个小孩儿真懂事儿.wav" autoplay="">
365
+ </audio></td>
366
+ </tr>
367
+
368
+
369
+ </tbody>
370
+ </table>
371
+
372
+
373
+
374
+ ## The following is obsolete. 以下例子是旧版本,仅供参考
375
+
376
+ ### Novel synthsized samples
377
+
378
+ #### Input text
379
+ 1. 黑化肥发灰会挥发,灰化肥挥发会发黑
380
+ 2. 红鲤鱼绿鲤鱼与驴
381
+ 3. 前方路口左转,然后在下一个路口右转
382
+ 4. 请输入您的卡号.您输入的卡号是六二二六,三八七六,零三四七,六九一五
383
+ 5. 天青色等烟雨,而我在等你,炊烟袅袅升起,隔江千万里
384
+ 6. 我听不清你在说什么,请大声一点
385
+ 7. 如果觉得这个项目好,请手动加个星吧,感谢
386
+ 8. 小毛豆你好,很高兴认识你.寒假马上要结束了.我觉得你最近有进步,继续加油.晚上要早点睡觉,因为明天要开学了.
387
+ 9. 有个小孩叫小杜,上街打醋又买布.买了布打了醋,回头看见鹰抓兔.放下布搁下醋,上前去追鹰和兔.飞了鹰跑了兔,洒了醋湿了布.
388
+
389
+
390
+ #### Audio samples
391
+
392
+ To generate audio samples, first you need to down load the checkpoint from <a href="https://drive.google.com/file/d/11mBus5gn69_KwvNec9Zy9jjTs3LgHdx3/view?usp=sharing">google drive</a> an untar it to mandarin_tts/
393
+
394
+
395
+ Then the audio samples are genreated by the following command:
396
+ ```
397
+ ./scripts/hz_synth.sh 1.0 300000
398
+ ./scripts/hz_synth.sh 0.9 300000
399
+ ./scripts/hz_synth.sh 1.1 300000
400
+ ```
401
+
402
+ You can also use pure pinyin + unet model, as follows:
403
+ ```
404
+ ./scripts/py_synth.sh 1.0 300000
405
+ ./scripts/py_synth.sh 0.9 300000
406
+ ./scripts/py_synth.sh 1.1 300000
407
+ ```
408
+
409
+
410
+ For other text inputs, you can alter text in input.txt. Some hints:
411
+ - 只需输入中文,因为代码中使用了pypinyin进行转换,转换前先分词。
412
+ - 不同句子用句号分开,可放在同一行,最后同一行的句子会合并成一个语音。如果需要不同语音,放在不同行即可。
413
+ - 需要停顿的地方用逗号。
414
+ - 算法不区分问号和叹号,当成句号处理。同样,不区分顿号,当成逗号,token统一设置为sp1.
415
+
416
+
417
+ <table>
418
+ <thead>
419
+ <tr>
420
+ <th style="text-align: left">Text</th>
421
+ <th style="text-align: left">Normal</th>
422
+ <th style="text-align: left">Fast</th>
423
+ <th style="text-align: left">slow</th>
424
+ </tr>
425
+ </thead>
426
+ <tbody>
427
+ <tr>
428
+ <td>1
429
+ </td>
430
+ <td><audio controls="controls">
431
+ <source src="./novel/hz_1.0_300000_黑化肥发灰会挥发,灰化肥挥发会发黑.wav" autoplay="">
432
+ </audio></td>
433
+ <td><audio controls="controls">
434
+ <source src="./novel/hz_0.9_300000_黑化肥发灰会挥发,灰化肥挥发会发黑.wav" autoplay="">
435
+ </audio></td>
436
+ <td><audio controls="controls">
437
+ <source src="./novel/hz_1.1_300000_黑化肥发灰会挥发,灰化肥挥发会发黑.wav" autoplay="">
438
+ </audio></td>
439
+ </tr>
440
+ <tr>
441
+ <td>2
442
+ </td>
443
+ <td><audio controls="controls">
444
+ <source src="./novel/hz_1.0_300000_红鲤鱼绿鲤鱼与驴.wav" autoplay="">
445
+ </audio></td>
446
+ <td><audio controls="controls">
447
+ <source src="./novel/hz_0.9_300000_红鲤鱼绿鲤鱼与驴.wav" autoplay="">
448
+ </audio></td>
449
+ <td><audio controls="controls">
450
+ <source src="./novel/hz_1.1_300000_红鲤鱼绿鲤鱼与驴.wav" autoplay="">
451
+ </audio></td>
452
+ </tr>
453
+ <tr>
454
+ <td>3
455
+ </td>
456
+ <td><audio controls="controls">
457
+ <source src="./novel/hz_1.0_300000_前方路口左转,然后在下一个路口右转.wav" autoplay="">
458
+ </audio></td>
459
+ <td><audio controls="controls">
460
+ <source src="./novel/hz_0.9_300000_前方路口左转,然后在下一个路口右转.wav" autoplay="">
461
+ </audio></td>
462
+ <td><audio controls="controls">
463
+ <source src="./novel/hz_1.1_300000_前方路口左转,然后在下一个路口右转.wav" autoplay="">
464
+ </audio></td>
465
+ </tr>
466
+ <tr>
467
+ <td>4
468
+ </td>
469
+ <td><audio controls="controls">
470
+ <source src="./novel/hz_1.0_300000_请输入您的卡号.您输入的卡号是六二二六,三八七六,零三四七,六九.wav" autoplay="">
471
+ </audio></td>
472
+ <td><audio controls="controls">
473
+ <source src="./novel/hz_0.9_300000_请输入您的卡号.您输入的卡号是六二二六,三八七六,零三四七,六九.wav" autoplay="">
474
+ </audio></td>
475
+ <td><audio controls="controls">
476
+ <source src="./novel/hz_1.1_300000_请输入您的卡号.您输入的卡号是六二二六,三八七六,零三四七,六九.wav" autoplay="">
477
+ </audio></td>
478
+ </tr>
479
+ <tr>
480
+ <td>5
481
+ </td>
482
+ <td><audio controls="controls">
483
+ <source src="./novel/hz_1.0_300000_天青色等烟雨,而我在等你,炊烟袅袅升起,隔江千万里.wav" autoplay="">
484
+ </audio></td>
485
+ <td><audio controls="controls">
486
+ <source src="./novel/hz_0.9_300000_天青色等烟雨,而我在等你,炊烟袅袅升起,隔江千万里.wav" autoplay="">
487
+ </audio></td>
488
+ <td><audio controls="controls">
489
+ <source src="./novel/hz_1.1_300000_天青色等烟雨,而我在等你,炊烟袅袅升起,隔江千万里.wav" autoplay="">
490
+ </audio></td>
491
+ </tr>
492
+ <tr>
493
+ <td>6
494
+ </td>
495
+ <td><audio controls="controls">
496
+ <source src="./novel/hz_1.0_300000_我听不清你在说什么,请大声一点.wav" autoplay="">
497
+ </audio></td>
498
+ <td><audio controls="controls">
499
+ <source src="./novel/hz_0.9_300000_我听不清你在说什么,请大声一点.wav" autoplay="">
500
+ </audio></td>
501
+ <td><audio controls="controls">
502
+ <source src="./novel/hz_1.1_300000_我听不清你在说什么,请大声一点.wav" autoplay="">
503
+ </audio></td>
504
+ </tr>
505
+ <tr>
506
+ <td>7
507
+ </td>
508
+ <td><audio controls="controls">
509
+ <source src="./novel/hz_1.0_300000_如果觉得这个项目好,请手动加个星吧,感谢.wav" autoplay="">
510
+ </audio></td>
511
+ <td><audio controls="controls">
512
+ <source src="./novel/hz_0.9_300000_如果觉得这个项目好,请手动加个星吧,感谢.wav" autoplay="">
513
+ </audio></td>
514
+ <td><audio controls="controls">
515
+ <source src="./novel/hz_1.1_300000_如果觉得这个项目好,请手动加个星吧,感谢.wav" autoplay="">
516
+ </audio></td>
517
+ </tr>
518
+ <tr>
519
+ <td>8
520
+ </td>
521
+ <td><audio controls="controls">
522
+ <source src="./novel/hz_1.0_300000_小毛豆你好,很高兴认识你.寒假马上要结束了.我觉得你最近有进步,.wav" autoplay="">
523
+ </audio></td>
524
+ <td><audio controls="controls">
525
+ <source src="./novel/hz_0.9_300000_小毛豆你好,很高兴认识你.寒假马上要结束了.我觉得你最近有进步,.wav" autoplay="">
526
+ </audio></td>
527
+ <td><audio controls="controls">
528
+ <source src="./novel/hz_1.1_300000_小毛豆你好,很高兴认识你.寒假马上要结束了.我觉得你最近有进步,.wav" autoplay="">
529
+ </audio></td>
530
+ </tr>
531
+ <tr>
532
+ <td>9
533
+ </td>
534
+ <td><audio controls="controls">
535
+ <source src="./novel/hz_1.0_300000_有个小孩叫小杜,上街打醋又买布.买了布打了醋,回头看见鹰抓兔.放.wav" autoplay="">
536
+ </audio></td>
537
+ <td><audio controls="controls">
538
+ <source src="./novel/hz_0.9_300000_有个小孩叫小杜,上街打醋又买布.买了布打了醋,回头看见鹰抓兔.放.wav" autoplay="">
539
+ </audio></td>
540
+ <td><audio controls="controls">
541
+ <source src="./novel/hz_1.1_300000_有个小孩叫小杜,上街打醋又买布.买了布打了醋,回头看见鹰抓兔.放.wav" autoplay="">
542
+ </audio></td>
543
+ </tr>
544
+
545
+
546
+ </tbody>
547
+ </table>
examples/aishell3/config.yaml ADDED
@@ -0,0 +1,167 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ dataset:
3
+ train:
4
+ wav_scp: './train/wav.scp'
5
+ mel_scp: './train/mel.scp'
6
+ dur_scp: './train/dur.scp'
7
+ emb_type1:
8
+ _name: 'pinyin'
9
+ scp: './train/py.scp'
10
+ vocab: 'py.vocab'
11
+ emb_type2:
12
+ _name: 'graphic'
13
+ scp: './train/gp.scp'
14
+ vocab: 'gp.vocab'
15
+ emb_type3:
16
+ _name: 'speaker'
17
+ scp: './train/spk.scp'
18
+ vocab: ~ # dosn't need vocab
19
+ # NOTE: you can add more embedding here without changing the code.
20
+ eval:
21
+ # NOTE: this is not used for now, i.e., just training, no evaluation.
22
+ # You can use synthesize.py to check the training goes well, for now.
23
+
24
+
25
+
26
+ training:
27
+ batch_size: 1024
28
+ batch_split: 64
29
+
30
+ epochs: 100000
31
+ grad_clip_thresh: 1.0
32
+ acc_step: 1
33
+ checkpoint_path: "./checkpoints/"
34
+ log_path: "./log/"
35
+ checkpoint_step: 5000
36
+ synth_step: 5000
37
+ log_step: 20
38
+ num_workers: 8
39
+
40
+ evaluation_step: 1000
41
+
42
+ optimizer: # NOTE: if use SGD, params should change too, as it has different arguments.
43
+ type: Adam
44
+ n_warm_up_step: 2000
45
+ lr_decrease_step: 10000
46
+ lr_decrease_factor:
47
+ params:
48
+ betas: [0.9,0.98]
49
+ eps: !!float 1e-9
50
+ weight_decay: !!float 0.0
51
+ lr: !!float 1e-4
52
+ lr_scheduler:
53
+ type: CyclicLR
54
+ params:
55
+ base_lr: !!float 1e-8
56
+ max_lr: !!float 1e-6
57
+ step_size_up: 5000
58
+ step_size_down: 5000
59
+ cycle_momentum: False
60
+
61
+ fbank: # this is used for wav2mel.py
62
+ sample_rate: 22050
63
+ n_fft: 1024
64
+ hop_length: 256
65
+ win_length: 1024
66
+ max_wav_value: 32768.0
67
+ n_mels: 80
68
+ fmin: 0.0
69
+ fmax: 8000.0 # should be 11025 ?
70
+ mel_mean: -6.0304103
71
+
72
+ encoder:
73
+ encoder_type: 'FS2TransformerEncoder'
74
+ conf:
75
+ n_layers: 4
76
+ n_heads: 2
77
+ hidden_dim: 256
78
+ dropout: 0.25
79
+ d_inner: 1024
80
+ max_len: 2048
81
+
82
+ decoder:
83
+ decoder_type: 'FS2TransformerDecoder'
84
+ input_dim: 256 # should be the same as the output of encoder
85
+ n_layers: 4
86
+ n_heads: 2
87
+ hidden_dim: 256
88
+ d_inner: 1024
89
+ dropout: 0.25
90
+ max_len: 2048 # max len of seq, for position embedding pre-computation
91
+
92
+ #(class) Decoder(input_dim: int = 256, n_layers: int = 4, n_heads: int = 2,
93
+ #hidden_dim: int = 256, d_inner: int = 1024, dropout: float = 0.5, max_len: int = 2048
94
+ postnet:
95
+ postnet_type: 'PostUNet' # 'PostUNet', 'PostNet1d'
96
+
97
+ speaker_embedding:
98
+ enable: True
99
+ vocab: #None
100
+ vocab_size: 218 # aishell3 has 218 speakers
101
+ weight: 1.0 # you can play with weight here
102
+ dim: 256
103
+
104
+ utterence_embedding:
105
+ enable: False # not implemented
106
+ type: 'lstm' # resnet
107
+ feature_config:
108
+ type: 'mel'
109
+ n_mels: 80
110
+ sampling_rate: 22050
111
+ n_fft: 1024
112
+ hop_length: 256
113
+ win_length: 1024
114
+
115
+ hanzi_embedding:
116
+ enable: True
117
+ type: embedding
118
+ vocab: './gp.vocab'
119
+ dim: 256
120
+ weight: 0.5 # you can play with weight here
121
+ max_seq_len: 100
122
+
123
+ pinyin_embedding:
124
+ enable: True
125
+ type: embedding
126
+ vocab: './py.vocab'
127
+ dim: 256
128
+ weight: 1.0
129
+ max_seq_len: 100
130
+
131
+ duration_predictor:
132
+ input_dim: 256 # should be the same as encoder hiddien_dim
133
+ filter_size: 256
134
+ kernel_size: 3
135
+ dropout: 0.15 # important to set dropout here
136
+ duration_mean: 21.517294924096635 #for aishell3
137
+
138
+ f0_predictor:
139
+ enable: False # currently not supported
140
+ filter_size: 256
141
+ kernel_size: 3
142
+ dropout: 0.5
143
+ n_bins: 256
144
+
145
+ vocoder:
146
+ type: VocGan # choose one of the following
147
+ MelGAN:
148
+ checkpoint: ~/checkpoints/melgan/melgan_ljspeech.pth
149
+ config: ~/checkpoints/melgan/default.yaml
150
+ device: cpu
151
+ VocGan:
152
+ checkpoint: ~/checkpoints/vctk_pretrained_model_3180.pt #~/checkpoints/ljspeech_29de09d_4000.pt
153
+ denoise: True
154
+ device: cpu
155
+ HiFiGAN:
156
+ checkpoint: ~/checkpoints/VCTK_V3/generator_v3 # you need to download checkpoint and set the params here
157
+ device: cpu
158
+ Waveglow:
159
+ checkpoint: ~/checkpoints/waveglow_256channels_universal_v5_state_dict.pt
160
+ sigma: 1.0
161
+ denoiser_strength: 0.0 # try 0.1
162
+ device: cpu #try cpu if out of memory
163
+
164
+
165
+
166
+ synthesis:
167
+ normalize: True # normalize the sound volume
examples/aishell3/gp.vocab ADDED
@@ -0,0 +1,4502 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ sil
2
+
3
+
4
+
5
+
6
+
7
+
8
+ 三儿
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+ 个儿
32
+
33
+
34
+
35
+
36
+ 串儿
37
+
38
+
39
+
40
+
41
+
42
+
43
+ 丽儿
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
+ 乐儿
56
+
57
+
58
+
59
+
60
+
61
+
62
+
63
+
64
+
65
+
66
+
67
+
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+ 事儿
77
+
78
+
79
+
80
+
81
+
82
+
83
+
84
+
85
+
86
+
87
+
88
+
89
+
90
+
91
+
92
+
93
+
94
+
95
+
96
+
97
+
98
+
99
+
100
+
101
+
102
+ 人儿
103
+ 亿
104
+
105
+
106
+ 仁儿
107
+
108
+
109
+
110
+
111
+
112
+ 今儿
113
+
114
+
115
+
116
+
117
+
118
+
119
+
120
+
121
+
122
+
123
+
124
+
125
+
126
+
127
+
128
+
129
+
130
+
131
+ 们儿
132
+
133
+
134
+
135
+ 件儿
136
+
137
+ 价儿
138
+
139
+
140
+ 份儿
141
+ 仿
142
+
143
+
144
+
145
+
146
+
147
+
148
+
149
+
150
+
151
+
152
+ 伙儿
153
+
154
+ 会儿
155
+
156
+
157
+
158
+
159
+
160
+
161
+
162
+
163
+
164
+ 伴儿
165
+
166
+
167
+
168
+
169
+
170
+
171
+
172
+
173
+ 位儿
174
+
175
+
176
+
177
+
178
+
179
+
180
+
181
+
182
+
183
+
184
+
185
+
186
+ 你儿
187
+
188
+
189
+
190
+
191
+
192
+
193
+
194
+ 使
195
+
196
+
197
+
198
+
199
+
200
+
201
+
202
+
203
+
204
+
205
+
206
+
207
+
208
+
209
+
210
+
211
+
212
+
213
+
214
+ 便
215
+
216
+
217
+
218
+
219
+
220
+
221
+
222
+
223
+
224
+
225
+
226
+
227
+
228
+
229
+
230
+
231
+
232
+
233
+
234
+
235
+
236
+ 倍儿
237
+
238
+
239
+
240
+
241
+
242
+ 候儿
243
+
244
+
245
+
246
+
247
+
248
+
249
+
250
+
251
+
252
+
253
+
254
+
255
+
256
+
257
+
258
+
259
+
260
+
261
+
262
+
263
+
264
+
265
+
266
+
267
+
268
+
269
+
270
+
271
+
272
+
273
+
274
+
275
+
276
+
277
+
278
+
279
+
280
+
281
+
282
+
283
+
284
+ 克儿
285
+
286
+
287
+
288
+
289
+
290
+
291
+
292
+
293
+
294
+
295
+
296
+
297
+
298
+
299
+
300
+
301
+
302
+
303
+
304
+
305
+
306
+
307
+
308
+
309
+
310
+
311
+
312
+
313
+
314
+
315
+
316
+
317
+
318
+
319
+
320
+
321
+
322
+
323
+
324
+
325
+
326
+
327
+
328
+
329
+
330
+
331
+
332
+
333
+
334
+
335
+
336
+
337
+ 准儿
338
+
339
+
340
+
341
+
342
+
343
+
344
+
345
+
346
+
347
+
348
+
349
+
350
+
351
+
352
+
353
+
354
+
355
+
356
+
357
+
358
+
359
+
360
+
361
+
362
+
363
+
364
+ 分儿
365
+
366
+
367
+
368
+
369
+
370
+
371
+
372
+
373
+
374
+
375
+
376
+
377
+
378
+
379
+
380
+
381
+
382
+
383
+
384
+
385
+ 刷儿
386
+
387
+ 券儿
388
+
389
+
390
+
391
+
392
+
393
+
394
+
395
+
396
+
397
+
398
+
399
+
400
+
401
+
402
+
403
+
404
+
405
+
406
+
407
+
408
+
409
+
410
+
411
+
412
+
413
+
414
+
415
+
416
+
417
+
418
+
419
+
420
+
421
+
422
+
423
+ 劲儿
424
+
425
+
426
+ 劵儿
427
+
428
+
429
+
430
+
431
+
432
+
433
+
434
+
435
+
436
+
437
+ 勺儿
438
+
439
+
440
+
441
+
442
+
443
+
444
+
445
+
446
+
447
+
448
+
449
+
450
+
451
+
452
+
453
+
454
+
455
+
456
+
457
+
458
+
459
+
460
+
461
+
462
+ 午儿
463
+
464
+
465
+ 半儿
466
+
467
+ 华儿
468
+
469
+
470
+
471
+ 卓儿
472
+
473
+
474
+
475
+
476
+ 博儿
477
+
478
+
479
+
480
+
481
+
482
+
483
+
484
+
485
+
486
+
487
+
488
+
489
+
490
+
491
+
492
+ 卷儿
493
+
494
+
495
+
496
+
497
+
498
+
499
+
500
+
501
+
502
+
503
+
504
+
505
+
506
+
507
+
508
+
509
+
510
+
511
+
512
+
513
+
514
+
515
+
516
+
517
+
518
+
519
+ 友儿
520
+
521
+
522
+
523
+
524
+
525
+
526
+
527
+
528
+
529
+
530
+
531
+ 口儿
532
+
533
+
534
+
535
+
536
+
537
+
538
+
539
+
540
+
541
+
542
+
543
+ 可儿
544
+
545
+
546
+
547
+
548
+
549
+
550
+ 号儿
551
+
552
+
553
+
554
+
555
+
556
+
557
+
558
+
559
+
560
+
561
+
562
+ 名儿
563
+
564
+
565
+
566
+
567
+
568
+
569
+
570
+
571
+
572
+
573
+
574
+
575
+
576
+
577
+ 吧儿
578
+
579
+
580
+
581
+
582
+
583
+
584
+
585
+
586
+
587
+
588
+
589
+
590
+
591
+
592
+
593
+
594
+
595
+
596
+ 告儿
597
+
598
+
599
+
600
+
601
+ 员儿
602
+
603
+
604
+
605
+
606
+
607
+
608
+
609
+ 味儿
610
+
611
+
612
+
613
+
614
+
615
+
616
+
617
+
618
+
619
+
620
+
621
+
622
+
623
+
624
+
625
+
626
+
627
+
628
+
629
+
630
+
631
+
632
+
633
+
634
+
635
+
636
+
637
+
638
+
639
+
640
+
641
+
642
+
643
+
644
+
645
+
646
+
647
+
648
+
649
+
650
+
651
+
652
+
653
+
654
+
655
+ 哪儿
656
+
657
+
658
+
659
+
660
+
661
+
662
+
663
+
664
+
665
+
666
+
667
+
668
+
669
+
670
+
671
+
672
+
673
+
674
+
675
+
676
+
677
+
678
+
679
+
680
+
681
+
682
+
683
+
684
+
685
+
686
+
687
+
688
+
689
+
690
+
691
+
692
+
693
+
694
+
695
+
696
+
697
+
698
+
699
+
700
+
701
+
702
+
703
+
704
+
705
+
706
+
707
+
708
+
709
+
710
+
711
+
712
+
713
+ 嗝儿
714
+
715
+
716
+
717
+
718
+
719
+
720
+
721
+
722
+
723
+
724
+
725
+
726
+
727
+
728
+
729
+
730
+
731
+
732
+
733
+
734
+
735
+
736
+
737
+
738
+
739
+
740
+
741
+
742
+
743
+
744
+
745
+
746
+
747
+
748
+
749
+
750
+
751
+
752
+
753
+
754
+
755
+ 园儿
756
+
757
+
758
+
759
+
760
+
761
+
762
+ 图儿
763
+
764
+
765
+
766
+ 圈儿
767
+
768
+
769
+
770
+
771
+
772
+
773
+
774
+
775
+
776
+
777
+
778
+
779
+
780
+
781
+
782
+ 坎儿
783
+
784
+
785
+
786
+
787
+ 块儿
788
+
789
+
790
+
791
+
792
+
793
+
794
+
795
+
796
+
797
+
798
+
799
+
800
+
801
+
802
+
803
+
804
+
805
+
806
+ 型儿
807
+
808
+
809
+
810
+
811
+
812
+
813
+
814
+
815
+
816
+
817
+
818
+
819
+
820
+
821
+
822
+
823
+
824
+
825
+
826
+
827
+
828
+
829
+
830
+
831
+
832
+
833
+ 堆儿
834
+
835
+
836
+
837
+
838
+
839
+
840
+
841
+
842
+
843
+
844
+
845
+
846
+
847
+
848
+
849
+
850
+
851
+
852
+
853
+
854
+
855
+
856
+
857
+ 墩儿
858
+
859
+
860
+
861
+
862
+ 士儿
863
+
864
+
865
+
866
+ 壳儿
867
+
868
+
869
+
870
+
871
+
872
+
873
+
874
+ 夕儿
875
+
876
+
877
+
878
+
879
+
880
+
881
+
882
+ 天儿
883
+
884
+
885
+
886
+
887
+
888
+
889
+ 头儿
890
+
891
+
892
+
893
+
894
+
895
+
896
+
897
+
898
+
899
+
900
+
901
+
902
+
903
+
904
+
905
+
906
+
907
+
908
+
909
+
910
+ 女儿
911
+
912
+
913
+
914
+
915
+
916
+ 好儿
917
+
918
+
919
+
920
+
921
+
922
+ 妇儿
923
+
924
+
925
+
926
+
927
+
928
+
929
+
930
+
931
+ 妞儿
932
+
933
+
934
+
935
+
936
+
937
+
938
+
939
+
940
+
941
+
942
+
943
+
944
+
945
+
946
+
947
+
948
+
949
+
950
+
951
+
952
+
953
+
954
+
955
+
956
+ 姿
957
+
958
+
959
+
960
+
961
+
962
+
963
+
964
+ 娘儿
965
+
966
+
967
+
968
+
969
+
970
+
971
+
972
+
973
+
974
+ 婆儿
975
+
976
+
977
+
978
+
979
+
980
+
981
+
982
+ 婴儿
983
+
984
+
985
+
986
+ 婿
987
+
988
+
989
+
990
+
991
+
992
+
993
+
994
+
995
+
996
+
997
+
998
+
999
+
1000
+
1001
+
1002
+
1003
+
1004
+
1005
+
1006
+
1007
+
1008
+
1009
+
1010
+
1011
+
1012
+
1013
+
1014
+
1015
+
1016
+
1017
+
1018
+
1019
+
1020
+
1021
+ 孩儿
1022
+
1023
+
1024
+
1025
+
1026
+
1027
+
1028
+
1029
+
1030
+
1031
+
1032
+
1033
+
1034
+
1035
+
1036
+
1037
+
1038
+
1039
+
1040
+ 宙儿
1041
+
1042
+
1043
+
1044
+
1045
+
1046
+
1047
+
1048
+
1049
+ 客儿
1050
+
1051
+
1052
+
1053
+
1054
+
1055
+
1056
+
1057
+
1058
+
1059
+
1060
+ 家儿
1061
+
1062
+
1063
+
1064
+
1065
+ 宿
1066
+
1067
+
1068
+
1069
+
1070
+
1071
+
1072
+
1073
+
1074
+
1075
+
1076
+
1077
+
1078
+
1079
+
1080
+
1081
+
1082
+
1083
+
1084
+
1085
+
1086
+
1087
+
1088
+ 寿
1089
+
1090
+
1091
+
1092
+
1093
+
1094
+
1095
+ 小儿
1096
+
1097
+
1098
+
1099
+
1100
+
1101
+
1102
+
1103
+
1104
+
1105
+
1106
+
1107
+
1108
+
1109
+
1110
+
1111
+
1112
+
1113
+ 尿
1114
+
1115
+
1116
+
1117
+
1118
+
1119
+
1120
+
1121
+
1122
+
1123
+
1124
+
1125
+
1126
+
1127
+
1128
+
1129
+
1130
+
1131
+ 屯儿
1132
+
1133
+
1134
+ 屿
1135
+
1136
+
1137
+
1138
+
1139
+
1140
+
1141
+
1142
+
1143
+
1144
+
1145
+
1146
+
1147
+
1148
+
1149
+
1150
+
1151
+
1152
+
1153
+
1154
+
1155
+
1156
+
1157
+
1158
+
1159
+
1160
+
1161
+
1162
+
1163
+
1164
+
1165
+
1166
+
1167
+
1168
+
1169
+
1170
+
1171
+
1172
+
1173
+
1174
+
1175
+
1176
+
1177
+
1178
+ 川儿
1179
+
1180
+
1181
+
1182
+
1183
+
1184
+
1185
+
1186
+
1187
+
1188
+
1189
+
1190
+
1191
+
1192
+
1193
+
1194
+ 巿
1195
+
1196
+
1197
+ 市儿
1198
+
1199
+
1200
+
1201
+
1202
+
1203
+
1204
+
1205
+
1206
+
1207
+
1208
+
1209
+
1210
+ 带儿
1211
+
1212
+
1213
+
1214
+
1215
+
1216
+
1217
+
1218
+
1219
+
1220
+
1221
+
1222
+
1223
+
1224
+ 干儿
1225
+
1226
+
1227
+
1228
+
1229
+
1230
+
1231
+
1232
+ 幼儿
1233
+
1234
+ 广
1235
+
1236
+
1237
+ 庆儿
1238
+
1239
+
1240
+
1241
+
1242
+
1243
+
1244
+
1245
+ 底儿
1246
+
1247
+ 店儿
1248
+
1249
+ 庙儿
1250
+
1251
+
1252
+
1253
+
1254
+
1255
+
1256
+
1257
+
1258
+
1259
+
1260
+
1261
+
1262
+
1263
+
1264
+
1265
+
1266
+
1267
+
1268
+
1269
+
1270
+
1271
+
1272
+
1273
+
1274
+
1275
+
1276
+
1277
+
1278
+
1279
+
1280
+
1281
+
1282
+
1283
+
1284
+
1285
+
1286
+
1287
+
1288
+
1289
+
1290
+
1291
+
1292
+
1293
+
1294
+
1295
+
1296
+
1297
+
1298
+
1299
+
1300
+
1301
+
1302
+
1303
+
1304
+
1305
+
1306
+
1307
+ 影儿
1308
+
1309
+
1310
+
1311
+
1312
+
1313
+
1314
+
1315
+
1316
+
1317
+
1318
+
1319
+
1320
+
1321
+
1322
+
1323
+ 得儿
1324
+
1325
+
1326
+
1327
+
1328
+
1329
+
1330
+
1331
+
1332
+
1333
+
1334
+
1335
+
1336
+
1337
+
1338
+
1339
+
1340
+
1341
+
1342
+
1343
+
1344
+
1345
+
1346
+
1347
+
1348
+
1349
+ 怀
1350
+
1351
+
1352
+
1353
+
1354
+
1355
+
1356
+
1357
+
1358
+
1359
+
1360
+
1361
+
1362
+
1363
+
1364
+
1365
+
1366
+
1367
+
1368
+
1369
+
1370
+
1371
+
1372
+
1373
+
1374
+
1375
+
1376
+
1377
+
1378
+
1379
+
1380
+
1381
+
1382
+
1383
+
1384
+
1385
+
1386
+
1387
+
1388
+
1389
+
1390
+
1391
+
1392
+
1393
+
1394
+ 悔儿
1395
+
1396
+
1397
+
1398
+
1399
+
1400
+
1401
+
1402
+
1403
+
1404
+
1405
+
1406
+
1407
+
1408
+
1409
+
1410
+
1411
+
1412
+
1413
+
1414
+
1415
+
1416
+
1417
+
1418
+
1419
+
1420
+
1421
+
1422
+
1423
+
1424
+
1425
+
1426
+
1427
+
1428
+
1429
+
1430
+
1431
+
1432
+
1433
+ 意儿
1434
+
1435
+
1436
+
1437
+
1438
+
1439
+
1440
+
1441
+
1442
+
1443
+
1444
+
1445
+
1446
+
1447
+
1448
+
1449
+
1450
+
1451
+
1452
+
1453
+
1454
+
1455
+
1456
+
1457
+
1458
+
1459
+
1460
+
1461
+
1462
+
1463
+
1464
+
1465
+
1466
+
1467
+ 戈儿
1468
+
1469
+
1470
+
1471
+
1472
+
1473
+
1474
+
1475
+
1476
+
1477
+
1478
+
1479
+
1480
+
1481
+
1482
+
1483
+
1484
+
1485
+ 户儿
1486
+
1487
+
1488
+
1489
+ 所儿
1490
+
1491
+
1492
+
1493
+
1494
+ 手儿
1495
+
1496
+
1497
+
1498
+
1499
+
1500
+
1501
+
1502
+ 托儿
1503
+
1504
+
1505
+
1506
+
1507
+
1508
+
1509
+
1510
+
1511
+
1512
+
1513
+
1514
+
1515
+
1516
+
1517
+
1518
+
1519
+
1520
+
1521
+
1522
+
1523
+
1524
+
1525
+
1526
+
1527
+
1528
+
1529
+
1530
+
1531
+
1532
+
1533
+
1534
+
1535
+
1536
+
1537
+
1538
+
1539
+
1540
+
1541
+
1542
+
1543
+
1544
+
1545
+
1546
+
1547
+
1548
+
1549
+
1550
+
1551
+
1552
+
1553
+
1554
+
1555
+
1556
+
1557
+
1558
+
1559
+
1560
+
1561
+
1562
+
1563
+
1564
+
1565
+ 招儿
1566
+
1567
+
1568
+
1569
+
1570
+
1571
+
1572
+
1573
+
1574
+
1575
+
1576
+
1577
+
1578
+
1579
+
1580
+
1581
+
1582
+
1583
+
1584
+
1585
+
1586
+
1587
+
1588
+
1589
+
1590
+
1591
+
1592
+
1593
+
1594
+
1595
+
1596
+
1597
+
1598
+
1599
+
1600
+
1601
+
1602
+
1603
+
1604
+
1605
+
1606
+
1607
+
1608
+
1609
+
1610
+
1611
+
1612
+
1613
+
1614
+
1615
+
1616
+
1617
+
1618
+
1619
+
1620
+
1621
+
1622
+
1623
+
1624
+
1625
+
1626
+
1627
+
1628
+
1629
+
1630
+
1631
+
1632
+
1633
+
1634
+
1635
+
1636
+
1637
+
1638
+
1639
+
1640
+
1641
+
1642
+
1643
+
1644
+
1645
+
1646
+
1647
+
1648
+
1649
+
1650
+
1651
+
1652
+
1653
+
1654
+
1655
+
1656
+
1657
+
1658
+
1659
+
1660
+
1661
+
1662
+
1663
+
1664
+
1665
+
1666
+
1667
+
1668
+
1669
+
1670
+
1671
+
1672
+
1673
+
1674
+
1675
+
1676
+
1677
+
1678
+ 摊儿
1679
+
1680
+
1681
+
1682
+
1683
+
1684
+
1685
+
1686
+
1687
+
1688
+
1689
+
1690
+
1691
+
1692
+
1693
+
1694
+
1695
+
1696
+
1697
+
1698
+
1699
+
1700
+
1701
+
1702
+
1703
+
1704
+
1705
+
1706
+
1707
+
1708
+
1709
+
1710
+
1711
+
1712
+
1713
+
1714
+
1715
+
1716
+
1717
+
1718
+
1719
+
1720
+
1721
+
1722
+
1723
+
1724
+
1725
+
1726
+
1727
+
1728
+
1729
+
1730
+
1731
+
1732
+
1733
+
1734
+ 数儿
1735
+
1736
+
1737
+
1738
+
1739
+ 文儿
1740
+
1741
+
1742
+
1743
+
1744
+
1745
+
1746
+ 料儿
1747
+
1748
+
1749
+
1750
+
1751
+
1752
+
1753
+
1754
+
1755
+
1756
+
1757
+
1758
+
1759
+
1760
+
1761
+
1762
+
1763
+
1764
+
1765
+
1766
+
1767
+
1768
+
1769
+
1770
+
1771
+
1772
+
1773
+ 早儿
1774
+
1775
+
1776
+
1777
+
1778
+
1779
+
1780
+
1781
+
1782
+
1783
+
1784
+
1785
+
1786
+
1787
+
1788
+ 明儿
1789
+
1790
+
1791
+
1792
+
1793
+
1794
+
1795
+
1796
+ 春儿
1797
+
1798
+
1799
+
1800
+
1801
+ 是儿
1802
+
1803
+
1804
+
1805
+
1806
+
1807
+
1808
+
1809
+
1810
+
1811
+
1812
+
1813
+
1814
+
1815
+
1816
+
1817
+
1818
+ 晞儿
1819
+
1820
+
1821
+
1822
+
1823
+
1824
+
1825
+
1826
+
1827
+
1828
+
1829
+
1830
+
1831
+
1832
+
1833
+
1834
+
1835
+
1836
+
1837
+
1838
+
1839
+
1840
+
1841
+
1842
+
1843
+
1844
+
1845
+
1846
+
1847
+
1848
+
1849
+
1850
+
1851
+
1852
+
1853
+
1854
+ 月儿
1855
+
1856
+
1857
+
1858
+
1859
+
1860
+
1861
+
1862
+
1863
+
1864
+
1865
+
1866
+
1867
+
1868
+
1869
+ 本儿
1870
+
1871
+
1872
+
1873
+
1874
+
1875
+
1876
+
1877
+
1878
+
1879
+
1880
+
1881
+ 杆儿
1882
+
1883
+
1884
+
1885
+ 杏儿
1886
+
1887
+
1888
+ 村儿
1889
+
1890
+
1891
+
1892
+
1893
+
1894
+
1895
+ 条儿
1896
+
1897
+
1898
+
1899
+
1900
+
1901
+
1902
+
1903
+
1904
+ 板儿
1905
+
1906
+
1907
+
1908
+
1909
+
1910
+
1911
+
1912
+
1913
+
1914
+
1915
+ 果儿
1916
+
1917
+
1918
+
1919
+
1920
+
1921
+
1922
+
1923
+
1924
+
1925
+
1926
+
1927
+
1928
+
1929
+
1930
+
1931
+
1932
+
1933
+
1934
+
1935
+
1936
+
1937
+ 查儿
1938
+
1939
+
1940
+
1941
+
1942
+
1943
+
1944
+
1945
+
1946
+
1947
+ 标儿
1948
+
1949
+
1950
+
1951
+
1952
+
1953
+
1954
+
1955
+
1956
+
1957
+
1958
+
1959
+
1960
+ 样儿
1961
+
1962
+
1963
+ 根儿
1964
+
1965
+ 格儿
1966
+
1967
+
1968
+
1969
+
1970
+
1971
+
1972
+
1973
+
1974
+
1975
+
1976
+
1977
+
1978
+
1979
+
1980
+
1981
+
1982
+
1983
+
1984
+
1985
+
1986
+
1987
+
1988
+
1989
+
1990
+
1991
+
1992
+
1993
+
1994
+
1995
+
1996
+
1997
+
1998
+
1999
+
2000
+
2001
+
2002
+ 棍儿
2003
+
2004
+
2005
+
2006
+
2007
+
2008
+
2009
+
2010
+
2011
+
2012
+
2013
+
2014
+
2015
+
2016
+
2017
+
2018
+
2019
+
2020
+
2021
+
2022
+
2023
+
2024
+
2025
+
2026
+
2027
+
2028
+
2029
+
2030
+
2031
+
2032
+
2033
+
2034
+
2035
+
2036
+
2037
+ 槛儿
2038
+
2039
+
2040
+
2041
+
2042
+
2043
+
2044
+ 模儿
2045
+
2046
+
2047
+
2048
+
2049
+
2050
+
2051
+
2052
+
2053
+
2054
+
2055
+
2056
+
2057
+
2058
+
2059
+
2060
+
2061
+
2062
+
2063
+
2064
+
2065
+
2066
+
2067
+ 歌儿
2068
+
2069
+
2070
+
2071
+
2072
+
2073
+
2074
+
2075
+
2076
+
2077
+
2078
+
2079
+
2080
+
2081
+
2082
+
2083
+
2084
+
2085
+
2086
+ 段儿
2087
+
2088
+ 殿
2089
+
2090
+
2091
+
2092
+
2093
+
2094
+
2095
+
2096
+
2097
+
2098
+
2099
+
2100
+
2101
+ 毛儿
2102
+
2103
+
2104
+
2105
+
2106
+
2107
+
2108
+
2109
+
2110
+
2111
+
2112
+
2113
+
2114
+
2115
+ 水儿
2116
+
2117
+
2118
+
2119
+ 汁儿
2120
+
2121
+
2122
+
2123
+
2124
+
2125
+
2126
+
2127
+
2128
+
2129
+
2130
+
2131
+
2132
+
2133
+
2134
+
2135
+
2136
+
2137
+
2138
+
2139
+
2140
+
2141
+
2142
+
2143
+
2144
+
2145
+
2146
+
2147
+
2148
+
2149
+
2150
+
2151
+
2152
+
2153
+
2154
+
2155
+
2156
+
2157
+
2158
+
2159
+
2160
+
2161
+
2162
+
2163
+
2164
+
2165
+ 油儿
2166
+
2167
+
2168
+
2169
+
2170
+ 沿
2171
+
2172
+
2173
+
2174
+
2175
+
2176
+
2177
+
2178
+ 法儿
2179
+
2180
+
2181
+
2182
+
2183
+ 波儿
2184
+
2185
+
2186
+
2187
+
2188
+
2189
+
2190
+
2191
+
2192
+ 泳儿
2193
+
2194
+
2195
+
2196
+
2197
+
2198
+
2199
+
2200
+
2201
+
2202
+
2203
+
2204
+
2205
+
2206
+
2207
+
2208
+
2209
+
2210
+
2211
+
2212
+
2213
+
2214
+ 活儿
2215
+
2216
+
2217
+
2218
+ 派儿
2219
+
2220
+ 流儿
2221
+
2222
+
2223
+
2224
+
2225
+
2226
+
2227
+
2228
+
2229
+
2230
+
2231
+
2232
+
2233
+
2234
+
2235
+
2236
+
2237
+
2238
+ 浪儿
2239
+
2240
+
2241
+
2242
+
2243
+
2244
+
2245
+
2246
+
2247
+
2248
+
2249
+
2250
+
2251
+
2252
+
2253
+
2254
+
2255
+
2256
+
2257
+
2258
+
2259
+
2260
+
2261
+
2262
+
2263
+ 涿
2264
+
2265
+
2266
+
2267
+
2268
+
2269
+
2270
+
2271
+
2272
+
2273
+
2274
+
2275
+
2276
+
2277
+
2278
+
2279
+
2280
+
2281
+
2282
+
2283
+
2284
+
2285
+
2286
+
2287
+
2288
+
2289
+
2290
+
2291
+
2292
+
2293
+
2294
+
2295
+
2296
+
2297
+
2298
+
2299
+
2300
+
2301
+
2302
+
2303
+
2304
+
2305
+
2306
+
2307
+
2308
+
2309
+
2310
+
2311
+
2312
+
2313
+
2314
+ 湿
2315
+
2316
+
2317
+
2318
+
2319
+
2320
+ 源儿
2321
+
2322
+ 溜儿
2323
+
2324
+
2325
+
2326
+
2327
+
2328
+
2329
+
2330
+
2331
+
2332
+
2333
+
2334
+
2335
+
2336
+
2337
+
2338
+
2339
+
2340
+
2341
+
2342
+
2343
+
2344
+
2345
+
2346
+
2347
+
2348
+
2349
+
2350
+
2351
+
2352
+
2353
+
2354
+
2355
+
2356
+
2357
+
2358
+
2359
+
2360
+
2361
+
2362
+
2363
+
2364
+
2365
+
2366
+
2367
+
2368
+
2369
+
2370
+
2371
+
2372
+
2373
+
2374
+
2375
+
2376
+
2377
+
2378
+
2379
+
2380
+
2381
+
2382
+
2383
+
2384
+
2385
+
2386
+
2387
+
2388
+
2389
+
2390
+
2391
+
2392
+
2393
+
2394
+
2395
+
2396
+
2397
+
2398
+
2399
+
2400
+
2401
+
2402
+
2403
+
2404
+
2405
+
2406
+
2407
+
2408
+
2409
+
2410
+
2411
+ 炮儿
2412
+
2413
+
2414
+
2415
+
2416
+ 点儿
2417
+
2418
+
2419
+
2420
+
2421
+
2422
+ 烂儿
2423
+
2424
+
2425
+
2426
+
2427
+
2428
+
2429
+
2430
+
2431
+
2432
+
2433
+
2434
+
2435
+
2436
+
2437
+
2438
+
2439
+
2440
+
2441
+
2442
+
2443
+
2444
+
2445
+
2446
+
2447
+
2448
+
2449
+
2450
+
2451
+
2452
+
2453
+
2454
+
2455
+
2456
+
2457
+
2458
+
2459
+ 照儿
2460
+
2461
+
2462
+
2463
+
2464
+
2465
+
2466
+
2467
+
2468
+
2469
+
2470
+
2471
+
2472
+
2473
+
2474
+
2475
+
2476
+
2477
+
2478
+
2479
+
2480
+
2481
+
2482
+
2483
+
2484
+
2485
+
2486
+ 爸儿
2487
+
2488
+
2489
+
2490
+ 片儿
2491
+
2492
+ 版儿
2493
+
2494
+ 牌儿
2495
+
2496
+
2497
+ 牛儿
2498
+
2499
+
2500
+
2501
+
2502
+
2503
+
2504
+
2505
+
2506
+ 特儿
2507
+
2508
+
2509
+
2510
+
2511
+
2512
+
2513
+
2514
+
2515
+
2516
+
2517
+
2518
+
2519
+
2520
+
2521
+ 狗儿
2522
+
2523
+
2524
+
2525
+
2526
+
2527
+
2528
+
2529
+
2530
+
2531
+
2532
+
2533
+
2534
+
2535
+
2536
+
2537
+
2538
+
2539
+
2540
+
2541
+
2542
+
2543
+
2544
+
2545
+
2546
+
2547
+
2548
+
2549
+
2550
+
2551
+
2552
+
2553
+ 王儿
2554
+
2555
+
2556
+
2557
+
2558
+
2559
+ 玩儿
2560
+
2561
+
2562
+
2563
+ 环儿
2564
+
2565
+
2566
+
2567
+
2568
+
2569
+
2570
+
2571
+
2572
+
2573
+
2574
+
2575
+
2576
+
2577
+
2578
+
2579
+ 珠儿
2580
+
2581
+ 班儿
2582
+
2583
+ 球儿
2584
+
2585
+
2586
+
2587
+
2588
+
2589
+
2590
+
2591
+
2592
+
2593
+
2594
+
2595
+
2596
+
2597
+
2598
+
2599
+
2600
+
2601
+
2602
+
2603
+
2604
+
2605
+
2606
+
2607
+
2608
+
2609
+
2610
+
2611
+
2612
+
2613
+
2614
+
2615
+
2616
+
2617
+
2618
+
2619
+
2620
+
2621
+ 瓶儿
2622
+
2623
+
2624
+
2625
+
2626
+
2627
+
2628
+ 生儿
2629
+
2630
+
2631
+
2632
+
2633
+
2634
+
2635
+
2636
+
2637
+
2638
+
2639
+
2640
+
2641
+
2642
+
2643
+
2644
+ 画儿
2645
+
2646
+
2647
+
2648
+
2649
+
2650
+
2651
+
2652
+
2653
+
2654
+
2655
+
2656
+
2657
+
2658
+
2659
+
2660
+
2661
+
2662
+ 疗儿
2663
+
2664
+
2665
+
2666
+
2667
+
2668
+
2669
+
2670
+
2671
+
2672
+
2673
+
2674
+
2675
+
2676
+
2677
+
2678
+
2679
+
2680
+
2681
+
2682
+
2683
+
2684
+
2685
+
2686
+
2687
+
2688
+
2689
+
2690
+
2691
+
2692
+
2693
+
2694
+
2695
+
2696
+
2697
+
2698
+
2699
+
2700
+
2701
+
2702
+
2703
+
2704
+
2705
+
2706
+
2707
+
2708
+ 的儿
2709
+
2710
+
2711
+
2712
+
2713
+
2714
+
2715
+
2716
+
2717
+
2718
+
2719
+
2720
+
2721
+
2722
+
2723
+
2724
+
2725
+
2726
+
2727
+ 盒儿
2728
+
2729
+
2730
+
2731
+
2732
+
2733
+
2734
+
2735
+ 目儿
2736
+
2737
+
2738
+
2739
+
2740
+
2741
+ 盹儿
2742
+
2743
+
2744
+
2745
+
2746
+
2747
+
2748
+
2749
+
2750
+
2751
+
2752
+
2753
+
2754
+
2755
+
2756
+
2757
+ 眼儿
2758
+
2759
+
2760
+
2761
+
2762
+
2763
+
2764
+
2765
+
2766
+
2767
+
2768
+
2769
+
2770
+
2771
+
2772
+
2773
+
2774
+
2775
+
2776
+
2777
+
2778
+
2779
+
2780
+
2781
+
2782
+
2783
+
2784
+
2785
+
2786
+
2787
+
2788
+
2789
+
2790
+
2791
+
2792
+
2793
+
2794
+
2795
+
2796
+
2797
+
2798
+
2799
+
2800
+
2801
+
2802
+
2803
+
2804
+
2805
+
2806
+
2807
+
2808
+
2809
+
2810
+
2811
+
2812
+
2813
+
2814
+
2815
+
2816
+
2817
+
2818
+
2819
+
2820
+
2821
+
2822
+
2823
+
2824
+
2825
+
2826
+
2827
+
2828
+
2829
+
2830
+
2831
+
2832
+
2833
+
2834
+
2835
+
2836
+
2837
+
2838
+
2839
+
2840
+
2841
+
2842
+
2843
+
2844
+
2845
+
2846
+ 社儿
2847
+
2848
+
2849
+
2850
+
2851
+
2852
+
2853
+
2854
+ 祝儿
2855
+
2856
+
2857
+
2858
+
2859
+
2860
+
2861
+
2862
+
2863
+
2864
+
2865
+
2866
+
2867
+
2868
+
2869
+
2870
+
2871
+
2872
+
2873
+
2874
+
2875
+
2876
+
2877
+
2878
+
2879
+
2880
+
2881
+ 秆儿
2882
+
2883
+
2884
+
2885
+
2886
+ 科儿
2887
+
2888
+
2889
+
2890
+
2891
+
2892
+
2893
+
2894
+
2895
+
2896
+
2897
+
2898
+
2899
+
2900
+
2901
+
2902
+
2903
+
2904
+
2905
+
2906
+
2907
+
2908
+ 稿
2909
+ 稿儿
2910
+
2911
+
2912
+
2913
+
2914
+
2915
+
2916
+ 穿
2917
+
2918
+
2919
+
2920
+
2921
+
2922
+
2923
+
2924
+
2925
+
2926
+
2927
+
2928
+
2929
+
2930
+
2931
+
2932
+
2933
+
2934
+
2935
+
2936
+
2937
+
2938
+
2939
+
2940
+
2941
+
2942
+
2943
+
2944
+
2945
+ 竿
2946
+ 竿儿
2947
+
2948
+
2949
+
2950
+
2951
+
2952
+
2953
+
2954
+
2955
+
2956
+
2957
+
2958
+
2959
+
2960
+
2961
+
2962
+
2963
+
2964
+
2965
+
2966
+
2967
+
2968
+
2969
+
2970
+
2971
+
2972
+
2973
+
2974
+
2975
+
2976
+
2977
+ 签儿
2978
+
2979
+
2980
+
2981
+
2982
+ 管儿
2983
+
2984
+
2985
+
2986
+
2987
+
2988
+
2989
+
2990
+
2991
+
2992
+
2993
+
2994
+
2995
+
2996
+
2997
+ 簿
2998
+
2999
+
3000
+
3001
+
3002
+
3003
+
3004
+
3005
+
3006
+ 粒儿
3007
+
3008
+
3009
+
3010
+
3011
+
3012
+
3013
+
3014
+
3015
+
3016
+
3017
+
3018
+
3019
+
3020
+
3021
+
3022
+
3023
+
3024
+
3025
+
3026
+
3027
+
3028
+
3029
+
3030
+
3031
+
3032
+
3033
+
3034
+
3035
+
3036
+
3037
+
3038
+
3039
+
3040
+
3041
+
3042
+
3043
+
3044
+
3045
+
3046
+
3047
+
3048
+
3049
+
3050
+
3051
+
3052
+
3053
+
3054
+
3055
+
3056
+
3057
+
3058
+
3059
+ 线
3060
+
3061
+
3062
+
3063
+
3064
+
3065
+
3066
+
3067
+
3068
+
3069
+
3070
+
3071
+
3072
+
3073
+
3074
+
3075
+
3076
+
3077
+
3078
+
3079
+
3080
+
3081
+
3082
+
3083
+ 绢儿
3084
+
3085
+
3086
+
3087
+
3088
+
3089
+
3090
+
3091
+
3092
+
3093
+
3094
+
3095
+
3096
+
3097
+
3098
+
3099
+
3100
+ 绿
3101
+
3102
+
3103
+
3104
+
3105
+
3106
+
3107
+
3108
+
3109
+
3110
+
3111
+
3112
+
3113
+
3114
+
3115
+
3116
+
3117
+
3118
+
3119
+
3120
+
3121
+
3122
+
3123
+
3124
+
3125
+
3126
+
3127
+
3128
+
3129
+
3130
+
3131
+
3132
+
3133
+ 罐儿
3134
+
3135
+
3136
+
3137
+
3138
+
3139
+
3140
+
3141
+ 罩儿
3142
+
3143
+
3144
+
3145
+
3146
+
3147
+
3148
+
3149
+
3150
+
3151
+
3152
+
3153
+
3154
+
3155
+
3156
+
3157
+
3158
+
3159
+
3160
+
3161
+
3162
+
3163
+
3164
+
3165
+
3166
+
3167
+
3168
+
3169
+
3170
+ 耀
3171
+
3172
+
3173
+
3174
+ 者儿
3175
+
3176
+
3177
+
3178
+
3179
+
3180
+
3181
+
3182
+
3183
+
3184
+
3185
+
3186
+
3187
+
3188
+
3189
+
3190
+
3191
+
3192
+
3193
+
3194
+
3195
+
3196
+ 联儿
3197
+
3198
+
3199
+
3200
+
3201
+
3202
+
3203
+
3204
+
3205
+
3206
+
3207
+
3208
+
3209
+
3210
+
3211
+
3212
+
3213
+
3214
+
3215
+
3216
+
3217
+
3218
+
3219
+
3220
+
3221
+
3222
+
3223
+
3224
+
3225
+
3226
+
3227
+
3228
+
3229
+
3230
+
3231
+ 胆儿
3232
+
3233
+
3234
+
3235
+
3236
+
3237
+
3238
+
3239
+
3240
+
3241
+
3242
+
3243
+
3244
+
3245
+
3246
+
3247
+
3248
+
3249
+
3250
+
3251
+
3252
+
3253
+
3254
+
3255
+
3256
+
3257
+
3258
+
3259
+ 脑儿
3260
+
3261
+
3262
+
3263
+
3264
+
3265
+ 脸儿
3266
+
3267
+
3268
+
3269
+
3270
+
3271
+
3272
+
3273
+
3274
+
3275
+
3276
+ 腕儿
3277
+
3278
+
3279
+
3280
+
3281
+
3282
+
3283
+
3284
+
3285
+
3286
+
3287
+ 腿儿
3288
+
3289
+ 膀儿
3290
+
3291
+
3292
+ 膏儿
3293
+
3294
+
3295
+
3296
+
3297
+
3298
+
3299
+
3300
+
3301
+
3302
+
3303
+
3304
+
3305
+
3306
+
3307
+
3308
+
3309
+
3310
+
3311
+
3312
+
3313
+
3314
+
3315
+
3316
+
3317
+
3318
+
3319
+
3320
+
3321
+
3322
+
3323
+
3324
+
3325
+
3326
+
3327
+
3328
+
3329
+
3330
+
3331
+
3332
+
3333
+
3334
+
3335
+
3336
+
3337
+
3338
+
3339
+
3340
+
3341
+
3342
+
3343
+
3344
+
3345
+
3346
+
3347
+
3348
+
3349
+
3350
+
3351
+
3352
+
3353
+
3354
+
3355
+
3356
+ 花儿
3357
+
3358
+
3359
+
3360
+
3361
+
3362
+
3363
+
3364
+
3365
+
3366
+
3367
+
3368
+
3369
+
3370
+
3371
+
3372
+
3373
+
3374
+
3375
+
3376
+
3377
+
3378
+
3379
+
3380
+
3381
+ 范儿
3382
+
3383
+
3384
+
3385
+
3386
+
3387
+
3388
+
3389
+
3390
+
3391
+ 茬儿
3392
+
3393
+
3394
+
3395
+
3396
+
3397
+
3398
+
3399
+
3400
+ 草儿
3401
+
3402
+
3403
+
3404
+
3405
+
3406
+
3407
+
3408
+
3409
+
3410
+
3411
+
3412
+
3413
+
3414
+
3415
+
3416
+
3417
+
3418
+
3419
+
3420
+
3421
+
3422
+
3423
+
3424
+
3425
+
3426
+
3427
+
3428
+
3429
+
3430
+
3431
+
3432
+
3433
+
3434
+
3435
+
3436
+
3437
+
3438
+
3439
+
3440
+
3441
+
3442
+
3443
+
3444
+
3445
+
3446
+
3447
+
3448
+
3449
+
3450
+
3451
+
3452
+
3453
+
3454
+
3455
+
3456
+
3457
+
3458
+
3459
+
3460
+
3461
+ 葛儿
3462
+
3463
+
3464
+
3465
+
3466
+
3467
+
3468
+
3469
+
3470
+
3471
+
3472
+
3473
+
3474
+
3475
+
3476
+
3477
+
3478
+
3479
+
3480
+
3481
+
3482
+
3483
+
3484
+
3485
+
3486
+
3487
+
3488
+
3489
+
3490
+
3491
+
3492
+
3493
+
3494
+
3495
+
3496
+
3497
+
3498
+
3499
+
3500
+
3501
+
3502
+
3503
+
3504
+
3505
+
3506
+
3507
+
3508
+
3509
+
3510
+
3511
+
3512
+
3513
+
3514
+
3515
+
3516
+
3517
+
3518
+
3519
+
3520
+
3521
+
3522
+
3523
+
3524
+
3525
+
3526
+
3527
+
3528
+
3529
+
3530
+
3531
+
3532
+
3533
+
3534
+
3535
+
3536
+
3537
+
3538
+
3539
+
3540
+
3541
+
3542
+
3543
+
3544
+
3545
+
3546
+
3547
+
3548
+
3549
+
3550
+
3551
+
3552
+
3553
+
3554
+
3555
+
3556
+
3557
+
3558
+
3559
+
3560
+
3561
+
3562
+
3563
+
3564
+
3565
+
3566
+
3567
+
3568
+
3569
+
3570
+
3571
+
3572
+
3573
+
3574
+
3575
+
3576
+
3577
+
3578
+
3579
+
3580
+
3581
+
3582
+ 行儿
3583
+
3584
+
3585
+
3586
+
3587
+
3588
+
3589
+
3590
+
3591
+ 表儿
3592
+
3593
+ 衫儿
3594
+
3595
+
3596
+
3597
+
3598
+
3599
+
3600
+
3601
+
3602
+
3603
+ 袋儿
3604
+
3605
+
3606
+
3607
+
3608
+
3609
+
3610
+
3611
+
3612
+
3613
+
3614
+
3615
+
3616
+
3617
+
3618
+
3619
+
3620
+ 裙儿
3621
+
3622
+
3623
+
3624
+
3625
+
3626
+
3627
+ 褂儿
3628
+
3629
+
3630
+
3631
+
3632
+
3633
+
3634
+
3635
+
3636
+
3637
+
3638
+ 西
3639
+
3640
+
3641
+
3642
+
3643
+
3644
+
3645
+
3646
+
3647
+
3648
+
3649
+
3650
+ 角儿
3651
+
3652
+
3653
+
3654
+
3655
+
3656
+
3657
+
3658
+
3659
+
3660
+
3661
+
3662
+
3663
+
3664
+
3665
+
3666
+
3667
+
3668
+
3669
+
3670
+
3671
+
3672
+
3673
+
3674
+
3675
+
3676
+
3677
+
3678
+
3679
+
3680
+
3681
+ 设儿
3682
+ 访
3683
+
3684
+
3685
+ 证儿
3686
+
3687
+
3688
+
3689
+
3690
+
3691
+
3692
+
3693
+
3694
+
3695
+
3696
+
3697
+
3698
+
3699
+
3700
+
3701
+ 话儿
3702
+
3703
+
3704
+
3705
+
3706
+
3707
+
3708
+
3709
+
3710
+
3711
+
3712
+
3713
+
3714
+
3715
+
3716
+
3717
+ 说儿
3718
+
3719
+
3720
+
3721
+
3722
+
3723
+
3724
+
3725
+
3726
+ 诿
3727
+
3728
+
3729
+
3730
+
3731
+
3732
+
3733
+
3734
+
3735
+
3736
+
3737
+
3738
+
3739
+
3740
+
3741
+
3742
+
3743
+
3744
+
3745
+
3746
+
3747
+
3748
+
3749
+
3750
+
3751
+
3752
+
3753
+
3754
+ 谱儿
3755
+
3756
+
3757
+
3758
+
3759
+
3760
+
3761
+
3762
+
3763
+
3764
+
3765
+
3766
+
3767
+ 贝儿
3768
+
3769
+
3770
+
3771
+
3772
+
3773
+
3774
+
3775
+
3776
+
3777
+
3778
+
3779
+
3780
+
3781
+
3782
+
3783
+
3784
+
3785
+
3786
+
3787
+
3788
+
3789
+
3790
+
3791
+
3792
+
3793
+
3794
+ 贿
3795
+
3796
+
3797
+
3798
+
3799
+
3800
+
3801
+
3802
+
3803
+
3804
+
3805
+
3806
+
3807
+
3808
+
3809
+
3810
+
3811
+
3812
+
3813
+
3814
+
3815
+
3816
+
3817
+
3818
+
3819
+
3820
+
3821
+
3822
+
3823
+
3824
+
3825
+
3826
+
3827
+
3828
+
3829
+
3830
+
3831
+
3832
+
3833
+
3834
+
3835
+
3836
+
3837
+
3838
+
3839
+
3840
+ 跑儿
3841
+
3842
+
3843
+ 跟儿
3844
+
3845
+
3846
+
3847
+
3848
+
3849
+
3850
+
3851
+
3852
+
3853
+
3854
+
3855
+
3856
+
3857
+
3858
+
3859
+
3860
+
3861
+
3862
+
3863
+
3864
+
3865
+
3866
+
3867
+
3868
+
3869
+
3870
+
3871
+ 蹿
3872
+
3873
+
3874
+
3875
+
3876
+
3877
+
3878
+
3879
+
3880
+ 车儿
3881
+
3882
+
3883
+
3884
+
3885
+
3886
+ 轮儿
3887
+
3888
+
3889
+
3890
+
3891
+
3892
+
3893
+
3894
+ 轿
3895
+
3896
+
3897
+
3898
+
3899
+
3900
+
3901
+
3902
+
3903
+
3904
+
3905
+
3906
+
3907
+
3908
+
3909
+
3910
+
3911
+
3912
+
3913
+
3914
+
3915
+
3916
+
3917
+
3918
+
3919
+
3920
+ 边儿
3921
+
3922
+
3923
+ 达儿
3924
+
3925
+
3926
+
3927
+
3928
+
3929
+
3930
+
3931
+
3932
+
3933
+
3934
+
3935
+ 这儿
3936
+
3937
+
3938
+
3939
+
3940
+
3941
+
3942
+
3943
+
3944
+
3945
+
3946
+
3947
+
3948
+
3949
+
3950
+ 退
3951
+
3952
+
3953
+
3954
+
3955
+
3956
+
3957
+
3958
+
3959
+
3960
+
3961
+
3962
+
3963
+
3964
+
3965
+
3966
+
3967
+
3968
+
3969
+
3970
+
3971
+
3972
+
3973
+
3974
+
3975
+
3976
+
3977
+
3978
+
3979
+
3980
+
3981
+
3982
+
3983
+
3984
+
3985
+
3986
+
3987
+
3988
+
3989
+
3990
+
3991
+
3992
+
3993
+
3994
+
3995
+
3996
+
3997
+
3998
+
3999
+ 那儿
4000
+
4001
+
4002
+
4003
+
4004
+
4005
+
4006
+
4007
+
4008
+
4009
+
4010
+
4011
+
4012
+
4013
+
4014
+
4015
+
4016
+
4017
+
4018
+
4019
+
4020
+
4021
+
4022
+
4023
+
4024
+
4025
+
4026
+
4027
+
4028
+
4029
+
4030
+
4031
+
4032
+
4033
+
4034
+
4035
+
4036
+
4037
+
4038
+
4039
+
4040
+
4041
+
4042
+
4043
+
4044
+
4045
+
4046
+
4047
+
4048
+
4049
+
4050
+
4051
+
4052
+
4053
+
4054
+
4055
+
4056
+
4057
+ 采儿
4058
+
4059
+
4060
+
4061
+
4062
+
4063
+
4064
+
4065
+
4066
+
4067
+
4068
+
4069
+
4070
+
4071
+
4072
+
4073
+
4074
+
4075
+
4076
+
4077
+
4078
+
4079
+
4080
+
4081
+
4082
+
4083
+
4084
+
4085
+
4086
+
4087
+
4088
+
4089
+
4090
+
4091
+
4092
+
4093
+
4094
+
4095
+
4096
+
4097
+
4098
+
4099
+
4100
+
4101
+
4102
+
4103
+
4104
+
4105
+
4106
+
4107
+
4108
+
4109
+
4110
+
4111
+
4112
+
4113
+
4114
+
4115
+
4116
+
4117
+
4118
+
4119
+
4120
+ 铺儿
4121
+
4122
+
4123
+ 链儿
4124
+
4125
+
4126
+
4127
+
4128
+
4129
+
4130
+ 锅儿
4131
+
4132
+
4133
+
4134
+
4135
+
4136
+
4137
+
4138
+
4139
+
4140
+
4141
+
4142
+
4143
+
4144
+
4145
+
4146
+
4147
+
4148
+
4149
+
4150
+
4151
+
4152
+
4153
+
4154
+
4155
+
4156
+
4157
+
4158
+
4159
+
4160
+ 镜儿
4161
+
4162
+
4163
+
4164
+
4165
+
4166
+ 门儿
4167
+
4168
+
4169
+
4170
+
4171
+
4172
+
4173
+
4174
+
4175
+
4176
+
4177
+
4178
+
4179
+
4180
+
4181
+
4182
+
4183
+
4184
+
4185
+
4186
+
4187
+
4188
+
4189
+
4190
+
4191
+
4192
+
4193
+
4194
+
4195
+ 队儿
4196
+
4197
+
4198
+
4199
+
4200
+
4201
+
4202
+
4203
+
4204
+
4205
+
4206
+
4207
+
4208
+
4209
+
4210
+
4211
+
4212
+
4213
+
4214
+ 陈儿
4215
+
4216
+
4217
+
4218
+
4219
+
4220
+
4221
+
4222
+
4223
+ 院儿
4224
+
4225
+
4226
+
4227
+
4228
+
4229
+
4230
+ 陶儿
4231
+
4232
+
4233
+
4234
+
4235
+
4236
+
4237
+
4238
+
4239
+
4240
+
4241
+
4242
+
4243
+
4244
+
4245
+
4246
+
4247
+
4248
+
4249
+
4250
+
4251
+
4252
+
4253
+
4254
+
4255
+
4256
+
4257
+ 雪儿
4258
+
4259
+
4260
+
4261
+
4262
+
4263
+
4264
+
4265
+
4266
+
4267
+
4268
+
4269
+
4270
+
4271
+
4272
+
4273
+
4274
+
4275
+
4276
+
4277
+
4278
+
4279
+
4280
+
4281
+
4282
+
4283
+
4284
+
4285
+
4286
+
4287
+
4288
+
4289
+ 面儿
4290
+
4291
+
4292
+
4293
+
4294
+
4295
+
4296
+
4297
+
4298
+
4299
+
4300
+
4301
+
4302
+
4303
+
4304
+
4305
+
4306
+
4307
+
4308
+ 页儿
4309
+
4310
+
4311
+
4312
+
4313
+
4314
+
4315
+
4316
+
4317
+
4318
+
4319
+
4320
+
4321
+
4322
+
4323
+
4324
+
4325
+
4326
+
4327
+
4328
+
4329
+
4330
+
4331
+
4332
+
4333
+
4334
+
4335
+
4336
+
4337
+
4338
+
4339
+
4340
+
4341
+
4342
+
4343
+
4344
+
4345
+
4346
+
4347
+
4348
+
4349
+
4350
+
4351
+
4352
+
4353
+
4354
+
4355
+
4356
+
4357
+
4358
+ 饿
4359
+
4360
+
4361
+ 馅儿
4362
+
4363
+ 馆儿
4364
+
4365
+
4366
+
4367
+
4368
+
4369
+
4370
+ 首儿
4371
+
4372
+
4373
+
4374
+
4375
+ 马儿
4376
+
4377
+
4378
+
4379
+
4380
+
4381
+
4382
+
4383
+
4384
+
4385
+
4386
+
4387
+ 驿
4388
+
4389
+
4390
+
4391
+
4392
+
4393
+
4394
+
4395
+
4396
+
4397
+
4398
+
4399
+
4400
+
4401
+
4402
+
4403
+
4404
+ 骤儿
4405
+
4406
+
4407
+
4408
+
4409
+
4410
+
4411
+
4412
+
4413
+
4414
+
4415
+
4416
+
4417
+
4418
+
4419
+
4420
+
4421
+
4422
+
4423
+
4424
+
4425
+
4426
+
4427
+
4428
+ 鱿
4429
+
4430
+
4431
+
4432
+
4433
+
4434
+
4435
+
4436
+
4437
+
4438
+
4439
+
4440
+
4441
+
4442
+
4443
+
4444
+
4445
+
4446
+
4447
+
4448
+
4449
+
4450
+
4451
+
4452
+
4453
+
4454
+
4455
+
4456
+
4457
+
4458
+
4459
+ 鸿
4460
+
4461
+
4462
+
4463
+
4464
+
4465
+
4466
+
4467
+
4468
+
4469
+
4470
+
4471
+
4472
+
4473
+ 鹿
4474
+
4475
+
4476
+
4477
+
4478
+
4479
+
4480
+
4481
+
4482
+
4483
+
4484
+
4485
+
4486
+
4487
+
4488
+
4489
+
4490
+
4491
+
4492
+
4493
+
4494
+
4495
+ 齿
4496
+
4497
+
4498
+
4499
+
4500
+
4501
+
4502
+
examples/aishell3/input.txt ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #name|py|gp|spk
2
+ text1|sil ni3 qu4 zuo4 fan4 ba5 sil|sil 你 去 做 饭 吧 sil|0
3
+ text2|sil ni3 qu4 zuo4 fan4 ba5 sil|sil 你 去 做 饭 吧 sil|10
4
+ text3|sil ni3 qu4 zuo4 fan4 ba5 sil|sil 你 去 做 饭 吧 sil|0 10
5
+ text4|sil ni3 qu4 zuo4 fan4 ba5 sil|sil 你 去 做 饭 吧 sil|100
6
+ text5|sil ni3 qu4 zuo4 fan4 ba5 sil|sil 你 去 做 饭 吧 sil|33
7
+ text6|sil ni3 qu4 zuo4 fan4 ba5 sil|sil 你 去 做 饭 吧 sil|66
8
+ text3a|sil you3 ge4 xiao3 hai2 jiao4 xiao3 du4 sil|sil 有 个 小 孩 叫 小 杜 sil|100
9
+ text4a|sil shang4 jie1 da3 cu4 you4 mai3 bu4 sil|sil 上 街 打 醋 又 买 布 sil|2
10
+ text5a|sil mai3 le5 bu4 da3 le5 cu4 sil|sil 买 了 布 打 了 醋 sil|88
11
+ text6a|sil hui2 tou2 kan4 jian4 ying1 zhua1 tu4 sil|sil 回 头 看 见 鹰 抓 兔 sil|40
12
+ text7a|sil fang4 xia4 bu4 ge1 xia4 cu4 sil|sil 放 下 布 搁 下 醋 sil|25
13
+ text8a|sil shang4 qian2 qu4 zhui1 ying1 he2 tu4 sil|sil 上 前 去 追 鹰 和 兔 sil|0
14
+ text9a|sil fei1 le5 ying1 pao3 le5 tu4 sil|sil 飞 了 鹰 跑 了 兔 sil|106
15
+ text10a|sil sa3 le5 cu4 shi1 le5 bu4 sil|sil 洒 了 醋 湿 了 布 sil|62
16
+
17
+ #demonstrate how to mix two speaker to generate new sound!
18
+ change1|sil wei4 shi4 ying4 xin1 de5 wang3 luo4 chuan2 bo1 fang1 shi4 he2 du2 zhe3 yue4 du2 xi2 guan4 sil|sil 为 适 应 新 的 网 络 传 播 方 式 和 读 者 阅 读 习 惯 sil|20 20 20 20
19
+ change2|sil wei4 shi4 ying4 xin1 de5 wang3 luo4 chuan2 bo1 fang1 shi4 he2 du2 zhe3 yue4 du2 xi2 guan4 sil|sil 为 适 应 新 的 网 络 传 播 方 式 和 读 者 阅 读 习 惯 sil|20 20 20 88
20
+ change3|sil wei4 shi4 ying4 xin1 de5 wang3 luo4 chuan2 bo1 fang1 shi4 he2 du2 zhe3 yue4 du2 xi2 guan4 sil|sil 为 适 应 新 的 网 络 传 播 方 式 和 读 者 阅 读 习 惯 sil|20 20 88 88
21
+ change4|sil wei4 shi4 ying4 xin1 de5 wang3 luo4 chuan2 bo1 fang1 shi4 he2 du2 zhe3 yue4 du2 xi2 guan4 sil|sil 为 适 应 新 的 网 络 传 播 方 式 和 读 者 阅 读 习 惯 sil|20 88 88 88
22
+ change5|sil wei4 shi4 ying4 xin1 de5 wang3 luo4 chuan2 bo1 fang1 shi4 he2 du2 zhe3 yue4 du2 xi2 guan4 sil|sil 为 适 应 新 的 网 络 传 播 方 式 和 读 者 阅 读 习 惯 sil|88 88 88 88
examples/aishell3/prepare.py ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import glob
2
+ import os
3
+ import argparse
4
+
5
+ from mtts.utils.logging import get_logger
6
+ logger = get_logger(__file__)
7
+
8
+ def augment_cn_with_sil(py_sent, cn_sent):
9
+ sil_loc = [i for i, p in enumerate(py_sent.split()) if p == 'sil']
10
+ han = [h for i, h in enumerate(cn_sent.split()) if h != 'sil']
11
+
12
+ k = 0
13
+ final = []
14
+ for i in range(len(han) + len(sil_loc)):
15
+ if i in sil_loc:
16
+ final += ['sil']
17
+ else:
18
+ final += [han[k]]
19
+ k += 1
20
+ return ' '.join(final)
21
+
22
+ def write_scp(filename,scp):
23
+ with open(filename,'wt') as f:
24
+ f.write('\n'.join(scp)+'\n')
25
+
26
+ if __name__ == '__main__':
27
+
28
+ parser = argparse.ArgumentParser(description='data pre-processing')
29
+ parser.add_argument('--meta_file', type=str, required=False, default='name_py_hz_dur.txt')
30
+ parser.add_argument('--wav_folder', type=str, required=False, default='./wavs')
31
+ parser.add_argument('--mel_folder', type=str, required=False, default='./mels')
32
+ parser.add_argument('--dst_folder', type=str, required=False, default='./train')
33
+ parser.add_argument('--generate_vocab', type=bool, required=False, default=False)
34
+
35
+ args = parser.parse_args()
36
+
37
+ logger.info(args)
38
+
39
+ lines = open(args.meta_file).read().split('\n')
40
+ lines = [l.split('|') for l in lines if len(l)>0]
41
+ files = glob.glob(f'{args.wav_folder}/*.wav')
42
+ logger.info(f'{len(files)} wav files found')
43
+ lines0 = []
44
+
45
+ for name,py,gp,dur in lines:
46
+ gp = augment_cn_with_sil(py,gp) # make sure gp and py has the same # of sil
47
+ assert len(py.split()) == len(gp.split()), f'error in {name}:{py},{gp}'
48
+ lines0 += [(name,py,gp,dur)]
49
+ lines = lines0
50
+
51
+ wav_scp = []
52
+ mel_scp = []
53
+ gp_scp = []
54
+ py_scp = []
55
+ dur_scp = []
56
+ spk_scp = []
57
+ all_spk = []
58
+ all_spk = [l[0][:7] for l in lines]
59
+ all_spk = list(set(all_spk))
60
+ all_spk.sort()
61
+ spk2idx = {s:i for i,s in enumerate(all_spk)}
62
+ all_py = []
63
+ all_gp = []
64
+
65
+ for name,py,gp,dur in lines:
66
+
67
+ wav_scp += [name +' ' + f'{args.wav_folder}/{name}.wav']
68
+ mel_scp += [name +' ' + f'{args.mel_folder}/{name}.npy']
69
+ py_scp += [name+' '+ py]
70
+ gp_scp += [name+' '+ gp]
71
+ dur_scp += [name+' '+ dur]
72
+ n = len(gp.split())
73
+ spk_idx = spk2idx[name[:7]]
74
+ spk_scp += [name + ' ' + ' '.join([str(spk_idx)]*n)]
75
+ if args.generate_vocab:
76
+ logger.warn('Caution: The vocab generated might be different from others(e.g., pretained models)')
77
+ pyvocab = list(set(all_py))
78
+ gpvocab = list(set(all_gp))
79
+ pyvocab.sort()
80
+ gpvocab.sort(key=lambda x: pypinyin.pinyin(x,0)[0][0])
81
+ with open('py.vocab','wt') as f:
82
+ f.write('\n'.join(pyvocab))
83
+ with open('gp.vocab','wt') as f:
84
+ f.write('\n'.join(gpvocab))
85
+
86
+
87
+ os.makedirs(args.dst_folder,exist_ok=True)
88
+ write_scp(f'{args.dst_folder}/wav.scp',wav_scp)
89
+ write_scp(f'{args.dst_folder}/py.scp',py_scp)
90
+ write_scp(f'{args.dst_folder}/gp.scp',gp_scp)
91
+ write_scp(f'{args.dst_folder}/dur.scp',dur_scp)
92
+ write_scp(f'{args.dst_folder}/spk.scp',spk_scp)
93
+ write_scp(f'{args.dst_folder}/mel.scp',mel_scp)
94
+
95
+
96
+
examples/aishell3/py.vocab ADDED
@@ -0,0 +1,1915 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <unk>
2
+ a1
3
+ a2
4
+ a3
5
+ a4
6
+ a5
7
+ ai1
8
+ ai2
9
+ ai3
10
+ ai4
11
+ ai5
12
+ an1
13
+ an2
14
+ an3
15
+ an4
16
+ ang1
17
+ ang2
18
+ ang4
19
+ ao1
20
+ ao2
21
+ ao3
22
+ ao4
23
+ ba1
24
+ ba2
25
+ ba3
26
+ ba4
27
+ ba5
28
+ bai1
29
+ bai2
30
+ bai3
31
+ bai4
32
+ bai5
33
+ ban1
34
+ ban2
35
+ ban3
36
+ ban4
37
+ ban5
38
+ bang1
39
+ bang2
40
+ bang3
41
+ bang4
42
+ bangr3
43
+ banr1
44
+ banr3
45
+ banr4
46
+ bao1
47
+ bao2
48
+ bao3
49
+ bao4
50
+ bao5
51
+ bar4
52
+ bar5
53
+ bei1
54
+ bei2
55
+ bei3
56
+ bei4
57
+ bei5
58
+ beir4
59
+ ben1
60
+ ben2
61
+ ben3
62
+ ben4
63
+ ben5
64
+ beng1
65
+ beng2
66
+ beng3
67
+ beng4
68
+ beng5
69
+ benr3
70
+ bi1
71
+ bi2
72
+ bi3
73
+ bi4
74
+ bi5
75
+ bian1
76
+ bian2
77
+ bian3
78
+ bian4
79
+ bian5
80
+ bianr1
81
+ biao1
82
+ biao2
83
+ biao3
84
+ biao4
85
+ biaor1
86
+ biaor3
87
+ bie1
88
+ bie2
89
+ bie3
90
+ bie4
91
+ bie5
92
+ bin1
93
+ bin2
94
+ bin3
95
+ bin4
96
+ bing1
97
+ bing2
98
+ bing3
99
+ bing4
100
+ bo1
101
+ bo2
102
+ bo3
103
+ bo4
104
+ bo5
105
+ bor1
106
+ bor2
107
+ bu1
108
+ bu2
109
+ bu3
110
+ bu4
111
+ bu5
112
+ ca1
113
+ ca2
114
+ ca4
115
+ cai1
116
+ cai2
117
+ cai3
118
+ cai4
119
+ cai5
120
+ cair3
121
+ can1
122
+ can2
123
+ can3
124
+ can4
125
+ cang1
126
+ cang2
127
+ cang3
128
+ cang4
129
+ cao1
130
+ cao2
131
+ cao3
132
+ cao4
133
+ caor3
134
+ ce1
135
+ ce3
136
+ ce4
137
+ ce5
138
+ cen1
139
+ cen2
140
+ cen4
141
+ ceng1
142
+ ceng2
143
+ ceng3
144
+ ceng4
145
+ cha1
146
+ cha2
147
+ cha3
148
+ cha4
149
+ chai1
150
+ chai2
151
+ chai3
152
+ chai4
153
+ chan1
154
+ chan2
155
+ chan3
156
+ chan4
157
+ chan5
158
+ chang1
159
+ chang2
160
+ chang3
161
+ chang4
162
+ chang5
163
+ chao1
164
+ chao2
165
+ chao3
166
+ chao4
167
+ char2
168
+ che1
169
+ che2
170
+ che3
171
+ che4
172
+ chen1
173
+ chen2
174
+ chen4
175
+ chen5
176
+ cheng1
177
+ cheng2
178
+ cheng3
179
+ cheng4
180
+ cheng5
181
+ chenr2
182
+ cher1
183
+ chi1
184
+ chi2
185
+ chi3
186
+ chi4
187
+ chi5
188
+ chong1
189
+ chong2
190
+ chong3
191
+ chong4
192
+ chong5
193
+ chou1
194
+ chou2
195
+ chou3
196
+ chou4
197
+ chou5
198
+ chu1
199
+ chu2
200
+ chu3
201
+ chu4
202
+ chu5
203
+ chuai1
204
+ chuai3
205
+ chuai4
206
+ chuan1
207
+ chuan2
208
+ chuan3
209
+ chuan4
210
+ chuang1
211
+ chuang2
212
+ chuang3
213
+ chuang4
214
+ chuanr1
215
+ chuanr4
216
+ chui1
217
+ chui2
218
+ chui4
219
+ chui5
220
+ chun1
221
+ chun2
222
+ chun3
223
+ chun5
224
+ chunr1
225
+ chuo1
226
+ chuo4
227
+ ci1
228
+ ci2
229
+ ci3
230
+ ci4
231
+ ci5
232
+ cong1
233
+ cong2
234
+ cong3
235
+ cong4
236
+ cong5
237
+ cou1
238
+ cou2
239
+ cou4
240
+ cu1
241
+ cu2
242
+ cu3
243
+ cu4
244
+ cu5
245
+ cuan1
246
+ cuan2
247
+ cuan4
248
+ cui1
249
+ cui2
250
+ cui3
251
+ cui4
252
+ cui5
253
+ cun1
254
+ cun2
255
+ cun3
256
+ cun4
257
+ cun5
258
+ cunr1
259
+ cuo1
260
+ cuo3
261
+ cuo4
262
+ da1
263
+ da2
264
+ da3
265
+ da4
266
+ da5
267
+ dai1
268
+ dai2
269
+ dai3
270
+ dai4
271
+ dair4
272
+ dan1
273
+ dan2
274
+ dan3
275
+ dan4
276
+ dan5
277
+ dang1
278
+ dang2
279
+ dang3
280
+ dang4
281
+ danr3
282
+ dao1
283
+ dao2
284
+ dao3
285
+ dao4
286
+ dao5
287
+ dar2
288
+ de1
289
+ de2
290
+ de3
291
+ de4
292
+ de5
293
+ dei2
294
+ dei3
295
+ dei5
296
+ den1
297
+ den2
298
+ den3
299
+ deng1
300
+ deng2
301
+ deng3
302
+ deng4
303
+ deng5
304
+ der2
305
+ der5
306
+ di1
307
+ di2
308
+ di3
309
+ di4
310
+ di5
311
+ dian1
312
+ dian2
313
+ dian3
314
+ dian4
315
+ dian5
316
+ dianr2
317
+ dianr3
318
+ dianr4
319
+ dianr5
320
+ diao1
321
+ diao2
322
+ diao4
323
+ die1
324
+ die2
325
+ die3
326
+ die4
327
+ die5
328
+ ding1
329
+ ding2
330
+ ding3
331
+ ding4
332
+ ding5
333
+ dir3
334
+ diu1
335
+ diu4
336
+ dong1
337
+ dong2
338
+ dong3
339
+ dong4
340
+ dong5
341
+ dou1
342
+ dou2
343
+ dou3
344
+ dou4
345
+ dou5
346
+ dour4
347
+ du1
348
+ du2
349
+ du3
350
+ du4
351
+ du5
352
+ duan1
353
+ duan2
354
+ duan3
355
+ duan4
356
+ duanr4
357
+ dui1
358
+ dui4
359
+ duir1
360
+ duir4
361
+ dun1
362
+ dun2
363
+ dun3
364
+ dun4
365
+ dun5
366
+ dunr1
367
+ dunr3
368
+ duo1
369
+ duo2
370
+ duo3
371
+ duo4
372
+ duo5
373
+ e1
374
+ e2
375
+ e3
376
+ e4
377
+ e5
378
+ ei1
379
+ ei5
380
+ en1
381
+ en2
382
+ en4
383
+ en5
384
+ eng2
385
+ eng4
386
+ er1
387
+ er2
388
+ er3
389
+ er4
390
+ er5
391
+ fa1
392
+ fa2
393
+ fa3
394
+ fa4
395
+ fa5
396
+ fan1
397
+ fan2
398
+ fan3
399
+ fan4
400
+ fan5
401
+ fang1
402
+ fang2
403
+ fang3
404
+ fang4
405
+ fang5
406
+ fangr4
407
+ fanr4
408
+ far2
409
+ far3
410
+ fei1
411
+ fei2
412
+ fei3
413
+ fei4
414
+ fen1
415
+ fen2
416
+ fen3
417
+ fen4
418
+ fen5
419
+ feng1
420
+ feng2
421
+ feng3
422
+ feng4
423
+ feng5
424
+ fenr1
425
+ fenr4
426
+ fenr5
427
+ fo2
428
+ fou2
429
+ fou3
430
+ fu1
431
+ fu2
432
+ fu3
433
+ fu4
434
+ fu5
435
+ fur4
436
+ fur5
437
+ ga1
438
+ ga4
439
+ gai1
440
+ gai2
441
+ gai3
442
+ gai4
443
+ gan1
444
+ gan2
445
+ gan3
446
+ gan4
447
+ gang1
448
+ gang2
449
+ gang3
450
+ gang4
451
+ gang5
452
+ ganr1
453
+ ganr3
454
+ gao1
455
+ gao2
456
+ gao3
457
+ gao4
458
+ gaor1
459
+ gaor3
460
+ gaor4
461
+ ge1
462
+ ge2
463
+ ge3
464
+ ge4
465
+ ge5
466
+ gei1
467
+ gei2
468
+ gei3
469
+ gei5
470
+ gen1
471
+ gen3
472
+ gen4
473
+ geng1
474
+ geng2
475
+ geng3
476
+ geng4
477
+ genr1
478
+ ger1
479
+ ger2
480
+ ger3
481
+ ger4
482
+ ger5
483
+ gong1
484
+ gong2
485
+ gong3
486
+ gong4
487
+ gong5
488
+ gou1
489
+ gou2
490
+ gou3
491
+ gou4
492
+ gou5
493
+ gour3
494
+ gu1
495
+ gu2
496
+ gu3
497
+ gu4
498
+ gu5
499
+ gua1
500
+ gua3
501
+ gua4
502
+ guai1
503
+ guai2
504
+ guai3
505
+ guai4
506
+ guan1
507
+ guan2
508
+ guan3
509
+ guan4
510
+ guang1
511
+ guang2
512
+ guang3
513
+ guang4
514
+ guanr2
515
+ guanr3
516
+ guanr4
517
+ guar4
518
+ gui1
519
+ gui2
520
+ gui3
521
+ gui4
522
+ gui5
523
+ gun1
524
+ gun2
525
+ gun3
526
+ gun4
527
+ gunr4
528
+ guo1
529
+ guo2
530
+ guo3
531
+ guo4
532
+ guo5
533
+ guor1
534
+ guor3
535
+ ha1
536
+ ha2
537
+ ha4
538
+ ha5
539
+ hai1
540
+ hai2
541
+ hai3
542
+ hai4
543
+ hai5
544
+ hair2
545
+ han1
546
+ han2
547
+ han3
548
+ han4
549
+ han5
550
+ hang1
551
+ hang2
552
+ hang3
553
+ hang4
554
+ hangr2
555
+ hao1
556
+ hao2
557
+ hao3
558
+ hao4
559
+ hao5
560
+ haor1
561
+ haor3
562
+ haor4
563
+ haor5
564
+ he1
565
+ he2
566
+ he3
567
+ he4
568
+ he5
569
+ hei1
570
+ hei2
571
+ hei4
572
+ hen1
573
+ hen2
574
+ hen3
575
+ hen4
576
+ heng1
577
+ heng2
578
+ heng3
579
+ heng4
580
+ heng5
581
+ her2
582
+ hong1
583
+ hong2
584
+ hong3
585
+ hong4
586
+ hou1
587
+ hou2
588
+ hou3
589
+ hou4
590
+ hou5
591
+ hour4
592
+ hour5
593
+ hu1
594
+ hu2
595
+ hu3
596
+ hu4
597
+ hu5
598
+ hua1
599
+ hua2
600
+ hua3
601
+ hua4
602
+ hua5
603
+ huai1
604
+ huai2
605
+ huai3
606
+ huai4
607
+ huan1
608
+ huan2
609
+ huan3
610
+ huan4
611
+ huan5
612
+ huang1
613
+ huang2
614
+ huang3
615
+ huang4
616
+ huanr2
617
+ huar1
618
+ huar2
619
+ huar4
620
+ hui1
621
+ hui2
622
+ hui3
623
+ hui4
624
+ hui5
625
+ huir2
626
+ huir3
627
+ huir4
628
+ hun1
629
+ hun2
630
+ hun3
631
+ hun4
632
+ hun5
633
+ huo2
634
+ huo3
635
+ huo4
636
+ huo5
637
+ huor2
638
+ huor3
639
+ huor5
640
+ hur4
641
+ ji1
642
+ ji2
643
+ ji3
644
+ ji4
645
+ ji5
646
+ jia1
647
+ jia2
648
+ jia3
649
+ jia4
650
+ jia5
651
+ jian1
652
+ jian2
653
+ jian3
654
+ jian4
655
+ jian5
656
+ jiang1
657
+ jiang2
658
+ jiang3
659
+ jiang4
660
+ jianr4
661
+ jiao1
662
+ jiao2
663
+ jiao3
664
+ jiao4
665
+ jiar1
666
+ jiar4
667
+ jie1
668
+ jie2
669
+ jie3
670
+ jie4
671
+ jie5
672
+ jin1
673
+ jin2
674
+ jin3
675
+ jin4
676
+ jin5
677
+ jing1
678
+ jing2
679
+ jing3
680
+ jing4
681
+ jing5
682
+ jingr4
683
+ jinr1
684
+ jinr4
685
+ jiong1
686
+ jiong2
687
+ jiong3
688
+ jiong4
689
+ jiu1
690
+ jiu2
691
+ jiu3
692
+ jiu4
693
+ jiu5
694
+ ju1
695
+ ju2
696
+ ju3
697
+ ju4
698
+ ju5
699
+ juan1
700
+ juan2
701
+ juan3
702
+ juan4
703
+ juanr3
704
+ juanr4
705
+ jue1
706
+ jue2
707
+ jue3
708
+ jue4
709
+ jue5
710
+ juer2
711
+ juer3
712
+ jun1
713
+ jun3
714
+ jun4
715
+ jun5
716
+ ka1
717
+ ka2
718
+ ka3
719
+ ka4
720
+ kai1
721
+ kai2
722
+ kai3
723
+ kai4
724
+ kai5
725
+ kan1
726
+ kan2
727
+ kan3
728
+ kan4
729
+ kan5
730
+ kang1
731
+ kang2
732
+ kang3
733
+ kang4
734
+ kanr3
735
+ kao1
736
+ kao2
737
+ kao3
738
+ kao4
739
+ ke1
740
+ ke2
741
+ ke3
742
+ ke4
743
+ ke5
744
+ ken1
745
+ ken2
746
+ ken3
747
+ keng1
748
+ keng2
749
+ keng3
750
+ ker1
751
+ ker2
752
+ ker3
753
+ ker4
754
+ kong1
755
+ kong2
756
+ kong3
757
+ kong4
758
+ kou1
759
+ kou2
760
+ kou3
761
+ kou4
762
+ kour3
763
+ ku1
764
+ ku2
765
+ ku3
766
+ ku4
767
+ ku5
768
+ kua1
769
+ kua3
770
+ kua4
771
+ kuai3
772
+ kuai4
773
+ kuair4
774
+ kuair5
775
+ kuan1
776
+ kuan2
777
+ kuan3
778
+ kuan4
779
+ kuang1
780
+ kuang2
781
+ kuang3
782
+ kuang4
783
+ kuang5
784
+ kui1
785
+ kui2
786
+ kui4
787
+ kun1
788
+ kun3
789
+ kun4
790
+ kuo4
791
+ la1
792
+ la2
793
+ la3
794
+ la4
795
+ la5
796
+ lai1
797
+ lai2
798
+ lai3
799
+ lai4
800
+ lai5
801
+ lan1
802
+ lan2
803
+ lan3
804
+ lan4
805
+ lang2
806
+ lang3
807
+ lang4
808
+ langr4
809
+ lanr4
810
+ lao1
811
+ lao2
812
+ lao3
813
+ lao4
814
+ lao5
815
+ lar3
816
+ le1
817
+ le2
818
+ le3
819
+ le4
820
+ le5
821
+ lei1
822
+ lei2
823
+ lei3
824
+ lei4
825
+ lei5
826
+ leng1
827
+ leng2
828
+ leng3
829
+ leng4
830
+ ler4
831
+ li1
832
+ li2
833
+ li3
834
+ li4
835
+ li5
836
+ lia2
837
+ lia3
838
+ lian1
839
+ lian2
840
+ lian3
841
+ lian4
842
+ lian5
843
+ liang1
844
+ liang2
845
+ liang3
846
+ liang4
847
+ liang5
848
+ lianr2
849
+ lianr3
850
+ lianr4
851
+ liao1
852
+ liao2
853
+ liao3
854
+ liao4
855
+ liao5
856
+ liaor2
857
+ liaor4
858
+ lie1
859
+ lie2
860
+ lie4
861
+ lin1
862
+ lin2
863
+ lin3
864
+ lin4
865
+ ling1
866
+ ling2
867
+ ling3
868
+ ling4
869
+ ling5
870
+ lir4
871
+ liu1
872
+ liu2
873
+ liu3
874
+ liu4
875
+ liu5
876
+ liur1
877
+ liur2
878
+ lo5
879
+ long2
880
+ long3
881
+ long4
882
+ lou1
883
+ lou2
884
+ lou3
885
+ lou4
886
+ lou5
887
+ lu1
888
+ lu2
889
+ lu3
890
+ lu4
891
+ lu5
892
+ luan2
893
+ luan3
894
+ luan4
895
+ lun1
896
+ lun2
897
+ lun4
898
+ lunr2
899
+ luo1
900
+ luo2
901
+ luo3
902
+ luo4
903
+ luo5
904
+ lv2
905
+ lv3
906
+ lv4
907
+ lv5
908
+ lve4
909
+ ma1
910
+ ma2
911
+ ma3
912
+ ma4
913
+ ma5
914
+ mai1
915
+ mai2
916
+ mai3
917
+ mai4
918
+ man1
919
+ man2
920
+ man3
921
+ man4
922
+ man5
923
+ mang1
924
+ mang2
925
+ mang3
926
+ mang4
927
+ mao1
928
+ mao2
929
+ mao3
930
+ mao4
931
+ mao5
932
+ maor2
933
+ mar3
934
+ me1
935
+ me2
936
+ me3
937
+ me4
938
+ me5
939
+ mei1
940
+ mei2
941
+ mei3
942
+ mei4
943
+ mei5
944
+ men1
945
+ men2
946
+ men3
947
+ men4
948
+ men5
949
+ meng1
950
+ meng2
951
+ meng3
952
+ meng4
953
+ meng5
954
+ menr2
955
+ menr5
956
+ mi1
957
+ mi2
958
+ mi3
959
+ mi4
960
+ mi5
961
+ mian1
962
+ mian2
963
+ mian3
964
+ mian4
965
+ mian5
966
+ mianr4
967
+ miao1
968
+ miao2
969
+ miao3
970
+ miao4
971
+ miaor4
972
+ mie2
973
+ mie4
974
+ min2
975
+ min3
976
+ min4
977
+ min5
978
+ ming1
979
+ ming2
980
+ ming3
981
+ ming4
982
+ ming5
983
+ mingr2
984
+ miu3
985
+ miu4
986
+ mo1
987
+ mo2
988
+ mo3
989
+ mo4
990
+ mo5
991
+ mor2
992
+ mou2
993
+ mou3
994
+ mu1
995
+ mu2
996
+ mu3
997
+ mu4
998
+ mu5
999
+ mur4
1000
+ mur5
1001
+ na1
1002
+ na2
1003
+ na3
1004
+ na4
1005
+ na5
1006
+ nai2
1007
+ nai3
1008
+ nai4
1009
+ nai5
1010
+ nan1
1011
+ nan2
1012
+ nan3
1013
+ nan4
1014
+ nan5
1015
+ nang1
1016
+ nang2
1017
+ nang4
1018
+ nang5
1019
+ nao1
1020
+ nao2
1021
+ nao3
1022
+ nao4
1023
+ nao5
1024
+ naor2
1025
+ naor3
1026
+ nar2
1027
+ nar3
1028
+ nar4
1029
+ nar5
1030
+ ne1
1031
+ ne2
1032
+ ne4
1033
+ ne5
1034
+ nei1
1035
+ nei3
1036
+ nei4
1037
+ nen2
1038
+ nen4
1039
+ neng2
1040
+ neng3
1041
+ neng4
1042
+ neng5
1043
+ ni1
1044
+ ni2
1045
+ ni3
1046
+ ni4
1047
+ ni5
1048
+ nian1
1049
+ nian2
1050
+ nian3
1051
+ nian4
1052
+ nian5
1053
+ niang1
1054
+ niang2
1055
+ niang3
1056
+ niang4
1057
+ niang5
1058
+ niangr2
1059
+ niao1
1060
+ niao2
1061
+ niao3
1062
+ niao4
1063
+ nie1
1064
+ nie2
1065
+ nie4
1066
+ nin2
1067
+ nin3
1068
+ nin4
1069
+ ning1
1070
+ ning2
1071
+ ning3
1072
+ ning4
1073
+ nir3
1074
+ niu1
1075
+ niu2
1076
+ niu3
1077
+ niu4
1078
+ niu5
1079
+ niur1
1080
+ niur2
1081
+ nong2
1082
+ nong4
1083
+ nu1
1084
+ nu2
1085
+ nu3
1086
+ nu4
1087
+ nuan2
1088
+ nuan3
1089
+ nuan4
1090
+ nuo2
1091
+ nuo4
1092
+ nv2
1093
+ nv3
1094
+ nv4
1095
+ nv5
1096
+ nve4
1097
+ nvr3
1098
+ o1
1099
+ o2
1100
+ o5
1101
+ ou1
1102
+ ou2
1103
+ ou3
1104
+ ou4
1105
+ pa1
1106
+ pa2
1107
+ pa3
1108
+ pa4
1109
+ pai1
1110
+ pai2
1111
+ pai3
1112
+ pai4
1113
+ pai5
1114
+ pair2
1115
+ pair4
1116
+ pan1
1117
+ pan2
1118
+ pan4
1119
+ pang1
1120
+ pang2
1121
+ pang4
1122
+ pang5
1123
+ pao1
1124
+ pao2
1125
+ pao3
1126
+ pao4
1127
+ pao5
1128
+ paor3
1129
+ paor4
1130
+ pei1
1131
+ pei2
1132
+ pei3
1133
+ pei4
1134
+ pei5
1135
+ pen1
1136
+ pen2
1137
+ pen4
1138
+ peng1
1139
+ peng2
1140
+ peng3
1141
+ peng4
1142
+ peng5
1143
+ pi1
1144
+ pi2
1145
+ pi3
1146
+ pi4
1147
+ pian1
1148
+ pian2
1149
+ pian4
1150
+ pian5
1151
+ pianr1
1152
+ pianr4
1153
+ piao1
1154
+ piao2
1155
+ piao3
1156
+ piao4
1157
+ pie1
1158
+ pie2
1159
+ pie3
1160
+ pin1
1161
+ pin2
1162
+ pin3
1163
+ pin4
1164
+ pin5
1165
+ ping1
1166
+ ping2
1167
+ ping3
1168
+ ping4
1169
+ ping5
1170
+ pingr2
1171
+ po1
1172
+ po2
1173
+ po3
1174
+ po4
1175
+ po5
1176
+ por2
1177
+ pou1
1178
+ pu1
1179
+ pu2
1180
+ pu3
1181
+ pu4
1182
+ pu5
1183
+ pur1
1184
+ pur2
1185
+ qi1
1186
+ qi2
1187
+ qi3
1188
+ qi4
1189
+ qi5
1190
+ qia1
1191
+ qia2
1192
+ qia3
1193
+ qia4
1194
+ qian1
1195
+ qian2
1196
+ qian3
1197
+ qian4
1198
+ qian5
1199
+ qiang1
1200
+ qiang2
1201
+ qiang3
1202
+ qianr1
1203
+ qiao1
1204
+ qiao2
1205
+ qiao3
1206
+ qiao4
1207
+ qiao5
1208
+ qie1
1209
+ qie2
1210
+ qie3
1211
+ qie4
1212
+ qin1
1213
+ qin2
1214
+ qin3
1215
+ qin4
1216
+ qin5
1217
+ qing1
1218
+ qing2
1219
+ qing3
1220
+ qing4
1221
+ qing5
1222
+ qingr4
1223
+ qiong2
1224
+ qiu1
1225
+ qiu2
1226
+ qiu3
1227
+ qiu5
1228
+ qiur2
1229
+ qu1
1230
+ qu2
1231
+ qu3
1232
+ qu4
1233
+ qu5
1234
+ quan1
1235
+ quan2
1236
+ quan3
1237
+ quan4
1238
+ quan5
1239
+ quanr1
1240
+ quanr4
1241
+ que1
1242
+ que2
1243
+ que4
1244
+ qun2
1245
+ qun3
1246
+ qun4
1247
+ qunr2
1248
+ ran1
1249
+ ran2
1250
+ ran3
1251
+ ran4
1252
+ rang1
1253
+ rang2
1254
+ rang3
1255
+ rang4
1256
+ rang5
1257
+ rao2
1258
+ rao3
1259
+ rao4
1260
+ re2
1261
+ re3
1262
+ re4
1263
+ ren1
1264
+ ren2
1265
+ ren3
1266
+ ren4
1267
+ ren5
1268
+ reng1
1269
+ reng2
1270
+ reng3
1271
+ reng4
1272
+ renr2
1273
+ ri2
1274
+ ri4
1275
+ rong2
1276
+ rong3
1277
+ rong4
1278
+ rong5
1279
+ rou2
1280
+ rou3
1281
+ rou4
1282
+ ru1
1283
+ ru2
1284
+ ru3
1285
+ ru4
1286
+ ruan2
1287
+ ruan3
1288
+ ruan4
1289
+ rui2
1290
+ rui3
1291
+ rui4
1292
+ run2
1293
+ run3
1294
+ run4
1295
+ run5
1296
+ ruo1
1297
+ ruo4
1298
+ sa1
1299
+ sa2
1300
+ sa3
1301
+ sa4
1302
+ sa5
1303
+ sai1
1304
+ sai2
1305
+ sai3
1306
+ sai4
1307
+ san1
1308
+ san2
1309
+ san3
1310
+ san4
1311
+ sang1
1312
+ sang3
1313
+ sang4
1314
+ sanr1
1315
+ sao1
1316
+ sao2
1317
+ sao3
1318
+ sao4
1319
+ se2
1320
+ se4
1321
+ se5
1322
+ sen1
1323
+ sen2
1324
+ sen3
1325
+ sen4
1326
+ sen5
1327
+ seng1
1328
+ seng3
1329
+ seng4
1330
+ sha1
1331
+ sha2
1332
+ sha3
1333
+ sha4
1334
+ sha5
1335
+ shai1
1336
+ shai2
1337
+ shai3
1338
+ shai4
1339
+ shan1
1340
+ shan2
1341
+ shan3
1342
+ shan4
1343
+ shan5
1344
+ shang1
1345
+ shang2
1346
+ shang3
1347
+ shang4
1348
+ shang5
1349
+ shanr1
1350
+ shao1
1351
+ shao2
1352
+ shao3
1353
+ shao4
1354
+ shao5
1355
+ shaor2
1356
+ she1
1357
+ she2
1358
+ she3
1359
+ she4
1360
+ shei1
1361
+ shei2
1362
+ shei3
1363
+ shen1
1364
+ shen2
1365
+ shen3
1366
+ shen4
1367
+ shen5
1368
+ sheng1
1369
+ sheng2
1370
+ sheng3
1371
+ sheng4
1372
+ sheng5
1373
+ shengr1
1374
+ sher4
1375
+ shi1
1376
+ shi2
1377
+ shi3
1378
+ shi4
1379
+ shi5
1380
+ shir4
1381
+ shou1
1382
+ shou2
1383
+ shou3
1384
+ shou4
1385
+ shour3
1386
+ shu1
1387
+ shu2
1388
+ shu3
1389
+ shu4
1390
+ shu5
1391
+ shua1
1392
+ shua2
1393
+ shua3
1394
+ shua4
1395
+ shuai1
1396
+ shuai2
1397
+ shuai3
1398
+ shuai4
1399
+ shuan1
1400
+ shuan2
1401
+ shuan4
1402
+ shuang1
1403
+ shuang3
1404
+ shuang4
1405
+ shuar1
1406
+ shui1
1407
+ shui2
1408
+ shui3
1409
+ shui4
1410
+ shui5
1411
+ shuir2
1412
+ shuir3
1413
+ shun1
1414
+ shun3
1415
+ shun4
1416
+ shun5
1417
+ shuo1
1418
+ shuo2
1419
+ shuo3
1420
+ shuo4
1421
+ shuo5
1422
+ shuor1
1423
+ shur4
1424
+ si1
1425
+ si2
1426
+ si3
1427
+ si4
1428
+ si5
1429
+ sil
1430
+ song1
1431
+ song2
1432
+ song3
1433
+ song4
1434
+ sou1
1435
+ sou2
1436
+ sou3
1437
+ sou4
1438
+ sou5
1439
+ su1
1440
+ su2
1441
+ su3
1442
+ su4
1443
+ su5
1444
+ suan1
1445
+ suan2
1446
+ suan3
1447
+ suan4
1448
+ sui1
1449
+ sui2
1450
+ sui3
1451
+ sui4
1452
+ sun1
1453
+ sun2
1454
+ sun3
1455
+ sun4
1456
+ suo1
1457
+ suo2
1458
+ suo3
1459
+ suo4
1460
+ suo5
1461
+ suor3
1462
+ ta1
1463
+ ta2
1464
+ ta3
1465
+ ta4
1466
+ ta5
1467
+ tai1
1468
+ tai2
1469
+ tai3
1470
+ tai4
1471
+ tai5
1472
+ tan1
1473
+ tan2
1474
+ tan3
1475
+ tan4
1476
+ tan5
1477
+ tang1
1478
+ tang2
1479
+ tang3
1480
+ tang4
1481
+ tanr1
1482
+ tao1
1483
+ tao2
1484
+ tao3
1485
+ tao4
1486
+ tao5
1487
+ taor2
1488
+ te2
1489
+ te3
1490
+ te4
1491
+ te5
1492
+ teng1
1493
+ teng2
1494
+ teng4
1495
+ teng5
1496
+ ter4
1497
+ ti1
1498
+ ti2
1499
+ ti3
1500
+ ti4
1501
+ ti5
1502
+ tian1
1503
+ tian2
1504
+ tian3
1505
+ tian4
1506
+ tian5
1507
+ tianr1
1508
+ tiao1
1509
+ tiao2
1510
+ tiao3
1511
+ tiao4
1512
+ tiao5
1513
+ tiaor2
1514
+ tie1
1515
+ tie2
1516
+ tie3
1517
+ tie4
1518
+ ting1
1519
+ ting2
1520
+ ting3
1521
+ ting5
1522
+ tong1
1523
+ tong2
1524
+ tong3
1525
+ tong4
1526
+ tong5
1527
+ tou1
1528
+ tou2
1529
+ tou3
1530
+ tou4
1531
+ tou5
1532
+ tour2
1533
+ tu1
1534
+ tu2
1535
+ tu3
1536
+ tu4
1537
+ tu5
1538
+ tuan1
1539
+ tuan2
1540
+ tui1
1541
+ tui2
1542
+ tui3
1543
+ tui4
1544
+ tuir3
1545
+ tun1
1546
+ tun2
1547
+ tun4
1548
+ tunr2
1549
+ tuo1
1550
+ tuo2
1551
+ tuo3
1552
+ tuo4
1553
+ tuo5
1554
+ tuor1
1555
+ tur2
1556
+ wa1
1557
+ wa2
1558
+ wa3
1559
+ wa4
1560
+ wa5
1561
+ wai1
1562
+ wai2
1563
+ wai3
1564
+ wai4
1565
+ wan1
1566
+ wan2
1567
+ wan3
1568
+ wan4
1569
+ wang1
1570
+ wang2
1571
+ wang3
1572
+ wang4
1573
+ wang5
1574
+ wangr2
1575
+ wangr4
1576
+ wanr2
1577
+ wanr4
1578
+ wei1
1579
+ wei2
1580
+ wei3
1581
+ wei4
1582
+ wei5
1583
+ weir4
1584
+ wen1
1585
+ wen2
1586
+ wen3
1587
+ wen4
1588
+ wen5
1589
+ weng1
1590
+ weng4
1591
+ wenr2
1592
+ wo1
1593
+ wo2
1594
+ wo3
1595
+ wo4
1596
+ wo5
1597
+ wu1
1598
+ wu2
1599
+ wu3
1600
+ wu4
1601
+ wu5
1602
+ wur3
1603
+ xi1
1604
+ xi2
1605
+ xi3
1606
+ xi4
1607
+ xi5
1608
+ xia1
1609
+ xia2
1610
+ xia3
1611
+ xia4
1612
+ xia5
1613
+ xian1
1614
+ xian2
1615
+ xian3
1616
+ xian4
1617
+ xiang1
1618
+ xiang2
1619
+ xiang3
1620
+ xiang4
1621
+ xiang5
1622
+ xianr4
1623
+ xiao1
1624
+ xiao2
1625
+ xiao3
1626
+ xiao4
1627
+ xiao5
1628
+ xiaor3
1629
+ xie1
1630
+ xie2
1631
+ xie3
1632
+ xie4
1633
+ xie5
1634
+ xin1
1635
+ xin2
1636
+ xin4
1637
+ xin5
1638
+ xing1
1639
+ xing2
1640
+ xing3
1641
+ xing4
1642
+ xing5
1643
+ xingr2
1644
+ xingr4
1645
+ xiong1
1646
+ xiong2
1647
+ xiong4
1648
+ xir1
1649
+ xiu1
1650
+ xiu2
1651
+ xiu3
1652
+ xiu4
1653
+ xu1
1654
+ xu2
1655
+ xu3
1656
+ xu4
1657
+ xuan1
1658
+ xuan2
1659
+ xuan3
1660
+ xuan4
1661
+ xue1
1662
+ xue2
1663
+ xue3
1664
+ xue4
1665
+ xuer3
1666
+ xun1
1667
+ xun2
1668
+ xun3
1669
+ xun4
1670
+ ya1
1671
+ ya2
1672
+ ya3
1673
+ ya4
1674
+ ya5
1675
+ yan1
1676
+ yan2
1677
+ yan3
1678
+ yan4
1679
+ yang1
1680
+ yang2
1681
+ yang3
1682
+ yang4
1683
+ yang5
1684
+ yangr4
1685
+ yanr3
1686
+ yao1
1687
+ yao2
1688
+ yao3
1689
+ yao4
1690
+ yao5
1691
+ ye1
1692
+ ye2
1693
+ ye3
1694
+ ye4
1695
+ ye5
1696
+ yer4
1697
+ yi1
1698
+ yi2
1699
+ yi3
1700
+ yi4
1701
+ yi5
1702
+ yin1
1703
+ yin2
1704
+ yin3
1705
+ yin4
1706
+ yin5
1707
+ ying1
1708
+ ying2
1709
+ ying3
1710
+ ying4
1711
+ ying5
1712
+ yingr1
1713
+ yingr2
1714
+ yingr3
1715
+ yir4
1716
+ yo1
1717
+ yo3
1718
+ yong1
1719
+ yong2
1720
+ yong3
1721
+ yong4
1722
+ yong5
1723
+ yongr3
1724
+ you1
1725
+ you2
1726
+ you3
1727
+ you4
1728
+ you5
1729
+ your2
1730
+ your3
1731
+ your4
1732
+ yu1
1733
+ yu2
1734
+ yu3
1735
+ yu4
1736
+ yu5
1737
+ yuan1
1738
+ yuan2
1739
+ yuan3
1740
+ yuan4
1741
+ yuan5
1742
+ yuanr2
1743
+ yuanr4
1744
+ yue1
1745
+ yue2
1746
+ yue4
1747
+ yue5
1748
+ yuer4
1749
+ yun1
1750
+ yun2
1751
+ yun3
1752
+ yun4
1753
+ za1
1754
+ za2
1755
+ za3
1756
+ za4
1757
+ zai1
1758
+ zai2
1759
+ zai3
1760
+ zai4
1761
+ zai5
1762
+ zan1
1763
+ zan2
1764
+ zan3
1765
+ zan4
1766
+ zang1
1767
+ zang2
1768
+ zang3
1769
+ zang4
1770
+ zao1
1771
+ zao2
1772
+ zao3
1773
+ zao4
1774
+ zao5
1775
+ zaor3
1776
+ ze1
1777
+ ze2
1778
+ ze3
1779
+ ze4
1780
+ ze5
1781
+ zei2
1782
+ zei3
1783
+ zei4
1784
+ zen1
1785
+ zen2
1786
+ zen3
1787
+ zen4
1788
+ zeng1
1789
+ zeng2
1790
+ zeng3
1791
+ zeng4
1792
+ zha1
1793
+ zha2
1794
+ zha4
1795
+ zha5
1796
+ zhai1
1797
+ zhai2
1798
+ zhai3
1799
+ zhai4
1800
+ zhan1
1801
+ zhan2
1802
+ zhan3
1803
+ zhan4
1804
+ zhan5
1805
+ zhang1
1806
+ zhang2
1807
+ zhang3
1808
+ zhang4
1809
+ zhao1
1810
+ zhao2
1811
+ zhao3
1812
+ zhao4
1813
+ zhao5
1814
+ zhaor1
1815
+ zhaor4
1816
+ zhe1
1817
+ zhe2
1818
+ zhe3
1819
+ zhe4
1820
+ zhe5
1821
+ zhei4
1822
+ zhen1
1823
+ zhen2
1824
+ zhen3
1825
+ zhen4
1826
+ zhen5
1827
+ zheng1
1828
+ zheng2
1829
+ zheng3
1830
+ zheng4
1831
+ zheng5
1832
+ zhengr4
1833
+ zher3
1834
+ zher4
1835
+ zhi1
1836
+ zhi2
1837
+ zhi3
1838
+ zhi4
1839
+ zhi5
1840
+ zhir1
1841
+ zhong1
1842
+ zhong2
1843
+ zhong3
1844
+ zhong4
1845
+ zhou1
1846
+ zhou2
1847
+ zhou3
1848
+ zhou4
1849
+ zhour4
1850
+ zhu1
1851
+ zhu2
1852
+ zhu3
1853
+ zhu4
1854
+ zhu5
1855
+ zhua1
1856
+ zhua3
1857
+ zhuai1
1858
+ zhuai3
1859
+ zhuai4
1860
+ zhuan1
1861
+ zhuan2
1862
+ zhuan3
1863
+ zhuan4
1864
+ zhuang1
1865
+ zhuang3
1866
+ zhuang4
1867
+ zhuang5
1868
+ zhui1
1869
+ zhui3
1870
+ zhui4
1871
+ zhun1
1872
+ zhun2
1873
+ zhun3
1874
+ zhun4
1875
+ zhunr3
1876
+ zhuo1
1877
+ zhuo2
1878
+ zhuo3
1879
+ zhuo4
1880
+ zhuo5
1881
+ zhuor2
1882
+ zhur1
1883
+ zhur4
1884
+ zi1
1885
+ zi2
1886
+ zi3
1887
+ zi4
1888
+ zi5
1889
+ zong1
1890
+ zong2
1891
+ zong3
1892
+ zong4
1893
+ zou1
1894
+ zou2
1895
+ zou3
1896
+ zou4
1897
+ zu1
1898
+ zu2
1899
+ zu3
1900
+ zu4
1901
+ zuan1
1902
+ zuan3
1903
+ zuan4
1904
+ zui1
1905
+ zui2
1906
+ zui3
1907
+ zui4
1908
+ zun1
1909
+ zun3
1910
+ zun4
1911
+ zuo1
1912
+ zuo2
1913
+ zuo3
1914
+ zuo4
1915
+ zuo5
examples/biaobei/ProsodyLabeling/000001-010000.txt ADDED
The diff for this file is too large to render. See raw diff
 
examples/biaobei/Wave/desktop.ini ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ [ViewState]
2
+ Mode=
3
+ Vid=
4
+ FolderType=Generic
examples/biaobei/config.yaml ADDED
@@ -0,0 +1,161 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ dataset:
3
+ train:
4
+ wav_scp: './train/wav.scp'
5
+ mel_scp: './train/mel.scp'
6
+ dur_scp: './train/dur.scp'
7
+ emb_type1:
8
+ _name: 'pinyin'
9
+ scp: './train/py.scp'
10
+ vocab: 'py.vocab'
11
+ emb_type2:
12
+ _name: 'graphic'
13
+ scp: './train/gp.scp'
14
+ vocab: 'gp.vocab'
15
+
16
+ emb_type3:
17
+ _name: 'speaker'
18
+ scp: './train/spk.scp'
19
+ vocab: # dosn't need vocab
20
+
21
+ training:
22
+ batch_size: 16
23
+ batch_split: 1
24
+ epochs: 10000
25
+ grad_clip_thresh: 1.0
26
+ acc_step: 1
27
+ checkpoint_path: "./checkpoints/"
28
+ log_path: "./log/"
29
+ checkpoint_step: 5000
30
+ synth_step: 5000
31
+ log_step: 20
32
+ num_workers: 8
33
+
34
+ evaluation_step: 1000
35
+
36
+ optimizer:
37
+ type: Adam
38
+ n_warm_up_step: 2000
39
+ #lr_decrease_step: 10000
40
+ #lr_decrease_factor:
41
+ params:
42
+ betas: [0.9,0.98]
43
+ eps: !!float 1e-9
44
+ weight_decay: !!float 0.0
45
+ lr: !!float 1e-4
46
+ lr_scheduler:
47
+ type: CyclicLR
48
+ params:
49
+ base_lr: !!float 1e-7
50
+ max_lr: !!float 1e-4
51
+ step_size_up: 5000
52
+ step_size_down: 8000
53
+ cycle_momentum: False
54
+
55
+ vocoder:
56
+ type: VocGan # choose one of the following
57
+ MelGAN:
58
+ checkpoint: ~/checkpoints/melgan/melgan_ljspeech.pth
59
+ config: ~/checkpoints/melgan/default.yaml
60
+ device: cpu
61
+ VocGan:
62
+ checkpoint: ~/checkpoints/vctk_pretrained_model_3180.pt #~/checkpoints/ljspeech_29de09d_4000.pt
63
+ denoise: True
64
+ device: cpu
65
+ HiFiGAN:
66
+ checkpoint: ~/checkpoints/VCTK_V3/generator_v3 # you need to download checkpoint and set the params here
67
+ device: cpu
68
+ Waveglow:
69
+ checkpoint: ~/checkpoints/waveglow_256channels_universal_v5_state_dict.pt
70
+ sigma: 1.0
71
+ denoiser_strength: 0.0 # try 0.1
72
+ device: cpu #try cpu if out of memory
73
+
74
+ fbank:
75
+ sample_rate: 16000
76
+ n_fft: 1024
77
+ hop_length: 256
78
+ win_length: 1024
79
+ max_wav_value: 32768.0
80
+ n_mels: 80
81
+ fmin: 0.0
82
+ fmax: 8000.0 # should be 11025
83
+ mel_mean: -6.0304103
84
+
85
+ encoder:
86
+ encoder_type: 'FS2TransformerEncoder'
87
+ conf:
88
+ n_layers: 4
89
+ n_heads: 2
90
+ hidden_dim: 256
91
+ dropout: 0.25
92
+ d_inner: 1024
93
+ max_len: 2048
94
+
95
+ decoder:
96
+ decoder_type: 'FS2TransformerDecoder'
97
+ input_dim: 256 # should be the same as the output of encoder
98
+ n_layers: 4
99
+ n_heads: 2
100
+ hidden_dim: 256
101
+ d_inner: 1024
102
+ dropout: 0.25
103
+ max_len: 2048 # max len of seq, for position embedding pre-computation
104
+
105
+ #(class) Decoder(input_dim: int = 256, n_layers: int = 4, n_heads: int = 2,
106
+ #hidden_dim: int = 256, d_inner: int = 1024, dropout: float = 0.5, max_len: int = 2048
107
+ postnet:
108
+ postnet_type: 'PostUNet' # 'PostUNet', 'PostNet1d'
109
+ speaker_embedding:
110
+ enable: True
111
+ vocab: #None
112
+ vocab_size: 1 #
113
+ weight: 1.0
114
+ dim: 256
115
+
116
+ utterence_embedding:
117
+ enable: False
118
+ type: 'lstm' # resnet
119
+ feature_config:
120
+ type: 'mel'
121
+ n_mels: 80
122
+ sampling_rate: 22050
123
+ n_fft: 1024
124
+ hop_length: 256
125
+ win_length: 1024
126
+
127
+ model_config:
128
+ n_layers: 3
129
+ bidirectional: True
130
+
131
+ hanzi_embedding:
132
+ enable: True
133
+ type: embedding
134
+ vocab: './gp.vocab'
135
+ dim: 256
136
+ weight: 0.5
137
+ max_seq_len: 100
138
+
139
+ pinyin_embedding:
140
+ enable: True
141
+ type: embedding
142
+ vocab: './py.vocab'
143
+ dim: 256
144
+ weight: 1.0
145
+ max_seq_len: 100
146
+
147
+ duration_predictor:
148
+ input_dim: 256 # should be the same as encoder hiddien_dim
149
+ filter_size: 256
150
+ kernel_size: 3
151
+ dropout: 0.5
152
+ duration_mean: 21.517294924096635 #for aishell3
153
+
154
+ f0_predictor:
155
+ enable: False
156
+ filter_size: 256
157
+ kernel_size: 3
158
+ dropout: 0.5
159
+ n_bins: 256
160
+ synthesis:
161
+ normalize: True # normalize the sound volume
examples/biaobei/gp.vocab ADDED
@@ -0,0 +1,4131 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
+
56
+
57
+
58
+
59
+
60
+
61
+
62
+
63
+
64
+
65
+
66
+
67
+
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+
80
+
81
+
82
+
83
+
84
+
85
+
86
+
87
+
88
+
89
+
90
+
91
+
92
+
93
+
94
+
95
+
96
+
97
+
98
+
99
+
100
+
101
+
102
+
103
+
104
+
105
+
106
+
107
+
108
+
109
+
110
+
111
+
112
+
113
+
114
+
115
+
116
+
117
+
118
+
119
+
120
+
121
+
122
+
123
+
124
+
125
+
126
+
127
+
128
+
129
+
130
+
131
+
132
+
133
+
134
+
135
+
136
+
137
+
138
+
139
+
140
+
141
+
142
+
143
+
144
+
145
+
146
+
147
+
148
+
149
+
150
+
151
+
152
+
153
+
154
+
155
+
156
+
157
+
158
+
159
+
160
+
161
+
162
+
163
+
164
+
165
+
166
+
167
+
168
+
169
+
170
+
171
+ 便
172
+
173
+
174
+
175
+
176
+
177
+
178
+
179
+
180
+
181
+
182
+
183
+
184
+
185
+
186
+
187
+
188
+
189
+
190
+
191
+
192
+
193
+
194
+
195
+
196
+
197
+
198
+
199
+
200
+
201
+
202
+
203
+
204
+
205
+
206
+
207
+
208
+
209
+
210
+
211
+
212
+
213
+
214
+
215
+
216
+
217
+
218
+
219
+
220
+
221
+
222
+
223
+
224
+
225
+ 簿
226
+
227
+
228
+
229
+
230
+
231
+
232
+
233
+
234
+
235
+
236
+
237
+
238
+
239
+
240
+
241
+
242
+
243
+
244
+
245
+
246
+
247
+
248
+
249
+
250
+
251
+
252
+
253
+
254
+
255
+
256
+
257
+
258
+
259
+
260
+
261
+
262
+
263
+
264
+
265
+
266
+
267
+
268
+
269
+
270
+
271
+
272
+
273
+
274
+
275
+
276
+
277
+
278
+
279
+
280
+
281
+
282
+
283
+
284
+
285
+
286
+
287
+
288
+
289
+
290
+
291
+
292
+
293
+
294
+
295
+
296
+
297
+
298
+
299
+
300
+
301
+
302
+
303
+
304
+
305
+
306
+
307
+
308
+
309
+
310
+
311
+
312
+
313
+
314
+
315
+
316
+
317
+
318
+
319
+
320
+
321
+
322
+
323
+
324
+
325
+
326
+
327
+
328
+
329
+
330
+
331
+
332
+
333
+
334
+
335
+
336
+
337
+
338
+
339
+
340
+
341
+
342
+
343
+
344
+
345
+
346
+
347
+
348
+
349
+
350
+
351
+
352
+
353
+
354
+
355
+
356
+
357
+
358
+
359
+
360
+
361
+
362
+
363
+
364
+
365
+
366
+
367
+
368
+
369
+
370
+
371
+
372
+ 齿
373
+
374
+
375
+
376
+
377
+
378
+
379
+
380
+
381
+
382
+
383
+
384
+
385
+
386
+
387
+
388
+
389
+
390
+
391
+
392
+
393
+
394
+
395
+
396
+
397
+
398
+
399
+
400
+
401
+
402
+
403
+
404
+
405
+
406
+
407
+
408
+
409
+
410
+
411
+
412
+
413
+
414
+
415
+
416
+
417
+
418
+
419
+
420
+
421
+
422
+ 穿
423
+
424
+
425
+
426
+
427
+
428
+
429
+
430
+
431
+
432
+
433
+
434
+
435
+
436
+
437
+
438
+
439
+
440
+
441
+
442
+
443
+
444
+
445
+
446
+
447
+
448
+
449
+
450
+
451
+
452
+
453
+
454
+
455
+
456
+
457
+
458
+
459
+
460
+
461
+
462
+
463
+
464
+
465
+
466
+
467
+
468
+
469
+
470
+
471
+
472
+
473
+
474
+
475
+
476
+
477
+
478
+
479
+
480
+
481
+
482
+
483
+ 蹿
484
+
485
+
486
+
487
+
488
+
489
+
490
+
491
+
492
+
493
+
494
+
495
+
496
+
497
+
498
+
499
+
500
+
501
+
502
+
503
+
504
+
505
+
506
+
507
+
508
+
509
+
510
+
511
+
512
+
513
+
514
+
515
+
516
+
517
+
518
+
519
+
520
+
521
+
522
+
523
+
524
+
525
+
526
+
527
+
528
+
529
+
530
+
531
+
532
+
533
+
534
+
535
+
536
+
537
+
538
+
539
+
540
+
541
+
542
+
543
+
544
+
545
+
546
+
547
+
548
+
549
+
550
+
551
+
552
+
553
+
554
+
555
+
556
+
557
+
558
+
559
+
560
+
561
+
562
+
563
+
564
+
565
+
566
+
567
+
568
+
569
+
570
+
571
+
572
+
573
+
574
+
575
+
576
+
577
+
578
+
579
+
580
+
581
+
582
+
583
+
584
+
585
+
586
+
587
+
588
+
589
+
590
+
591
+
592
+
593
+
594
+
595
+
596
+
597
+
598
+
599
+
600
+ 殿
601
+
602
+
603
+
604
+
605
+
606
+
607
+
608
+
609
+
610
+
611
+
612
+
613
+
614
+
615
+
616
+
617
+
618
+
619
+
620
+
621
+
622
+
623
+
624
+
625
+
626
+
627
+
628
+
629
+
630
+
631
+
632
+
633
+
634
+
635
+
636
+
637
+
638
+
639
+
640
+
641
+
642
+
643
+
644
+
645
+
646
+
647
+
648
+
649
+
650
+
651
+
652
+
653
+
654
+
655
+
656
+
657
+
658
+
659
+
660
+
661
+
662
+
663
+
664
+
665
+
666
+
667
+
668
+
669
+
670
+
671
+
672
+
673
+
674
+
675
+
676
+
677
+
678
+
679
+
680
+
681
+
682
+
683
+
684
+
685
+
686
+
687
+
688
+
689
+
690
+
691
+
692
+
693
+
694
+
695
+
696
+
697
+
698
+
699
+
700
+
701
+
702
+
703
+
704
+
705
+
706
+
707
+
708
+
709
+
710
+
711
+
712
+
713
+
714
+
715
+
716
+
717
+
718
+
719
+
720
+
721
+
722
+
723
+ 饿
724
+
725
+
726
+
727
+
728
+
729
+
730
+
731
+
732
+
733
+
734
+
735
+
736
+
737
+
738
+
739
+
740
+
741
+
742
+
743
+
744
+
745
+
746
+
747
+
748
+
749
+
750
+
751
+
752
+
753
+
754
+
755
+
756
+
757
+
758
+
759
+
760
+
761
+
762
+
763
+ 仿
764
+
765
+
766
+
767
+ 访
768
+
769
+
770
+
771
+
772
+
773
+
774
+
775
+
776
+
777
+
778
+
779
+
780
+
781
+
782
+
783
+
784
+
785
+
786
+
787
+
788
+
789
+
790
+
791
+
792
+
793
+
794
+
795
+
796
+
797
+
798
+
799
+
800
+
801
+
802
+
803
+
804
+
805
+
806
+
807
+
808
+
809
+
810
+
811
+
812
+
813
+
814
+
815
+
816
+
817
+
818
+
819
+
820
+
821
+
822
+
823
+
824
+
825
+
826
+
827
+
828
+
829
+
830
+
831
+
832
+
833
+
834
+
835
+
836
+
837
+
838
+
839
+
840
+
841
+
842
+
843
+
844
+
845
+
846
+
847
+
848
+
849
+
850
+
851
+
852
+
853
+
854
+
855
+
856
+
857
+
858
+
859
+
860
+
861
+
862
+
863
+
864
+
865
+
866
+
867
+
868
+
869
+
870
+
871
+
872
+
873
+
874
+ 竿
875
+
876
+
877
+
878
+
879
+
880
+
881
+
882
+
883
+
884
+
885
+
886
+
887
+
888
+
889
+
890
+
891
+
892
+
893
+
894
+
895
+ 稿
896
+
897
+
898
+
899
+
900
+
901
+
902
+
903
+
904
+
905
+
906
+
907
+
908
+
909
+
910
+
911
+
912
+
913
+
914
+
915
+
916
+
917
+
918
+
919
+
920
+
921
+
922
+
923
+
924
+
925
+
926
+
927
+
928
+
929
+
930
+
931
+
932
+
933
+
934
+
935
+
936
+
937
+
938
+
939
+
940
+
941
+
942
+
943
+
944
+
945
+
946
+
947
+
948
+
949
+
950
+
951
+
952
+
953
+
954
+
955
+
956
+
957
+
958
+
959
+
960
+
961
+
962
+
963
+
964
+
965
+
966
+
967
+
968
+
969
+
970
+
971
+
972
+
973
+
974
+
975
+
976
+
977
+
978
+
979
+
980
+
981
+
982
+
983
+
984
+
985
+
986
+
987
+
988
+
989
+
990
+
991
+
992
+
993
+
994
+
995
+
996
+ 广
997
+
998
+
999
+
1000
+
1001
+
1002
+
1003
+
1004
+
1005
+
1006
+
1007
+
1008
+
1009
+
1010
+
1011
+
1012
+
1013
+
1014
+
1015
+
1016
+
1017
+
1018
+
1019
+
1020
+
1021
+
1022
+
1023
+
1024
+
1025
+
1026
+
1027
+
1028
+
1029
+
1030
+
1031
+
1032
+
1033
+
1034
+
1035
+
1036
+
1037
+
1038
+
1039
+
1040
+
1041
+
1042
+
1043
+
1044
+
1045
+
1046
+
1047
+
1048
+
1049
+
1050
+
1051
+
1052
+
1053
+
1054
+
1055
+
1056
+
1057
+
1058
+
1059
+
1060
+
1061
+
1062
+
1063
+
1064
+
1065
+
1066
+
1067
+
1068
+
1069
+
1070
+
1071
+
1072
+
1073
+
1074
+
1075
+
1076
+
1077
+
1078
+
1079
+
1080
+
1081
+
1082
+
1083
+
1084
+
1085
+
1086
+
1087
+
1088
+
1089
+
1090
+
1091
+
1092
+
1093
+
1094
+
1095
+
1096
+
1097
+
1098
+
1099
+
1100
+
1101
+
1102
+
1103
+
1104
+ 鸿
1105
+
1106
+
1107
+
1108
+
1109
+
1110
+
1111
+
1112
+
1113
+
1114
+
1115
+
1116
+
1117
+
1118
+
1119
+
1120
+
1121
+
1122
+
1123
+
1124
+
1125
+
1126
+
1127
+
1128
+
1129
+
1130
+
1131
+
1132
+
1133
+
1134
+
1135
+
1136
+
1137
+
1138
+
1139
+
1140
+
1141
+
1142
+
1143
+
1144
+
1145
+
1146
+
1147
+
1148
+ 怀
1149
+
1150
+
1151
+
1152
+
1153
+
1154
+
1155
+
1156
+
1157
+
1158
+
1159
+
1160
+
1161
+
1162
+
1163
+
1164
+
1165
+
1166
+
1167
+
1168
+
1169
+
1170
+
1171
+
1172
+
1173
+
1174
+
1175
+
1176
+
1177
+
1178
+
1179
+
1180
+
1181
+
1182
+
1183
+
1184
+
1185
+
1186
+
1187
+
1188
+
1189
+
1190
+
1191
+
1192
+
1193
+
1194
+
1195
+ 贿
1196
+
1197
+
1198
+
1199
+
1200
+
1201
+
1202
+
1203
+
1204
+
1205
+
1206
+
1207
+
1208
+
1209
+
1210
+
1211
+
1212
+
1213
+
1214
+
1215
+
1216
+
1217
+
1218
+
1219
+
1220
+
1221
+
1222
+
1223
+
1224
+
1225
+
1226
+
1227
+
1228
+
1229
+
1230
+
1231
+
1232
+
1233
+
1234
+
1235
+
1236
+
1237
+
1238
+
1239
+
1240
+
1241
+
1242
+
1243
+
1244
+
1245
+
1246
+
1247
+
1248
+
1249
+
1250
+
1251
+
1252
+
1253
+
1254
+
1255
+
1256
+
1257
+
1258
+
1259
+
1260
+
1261
+
1262
+
1263
+
1264
+
1265
+
1266
+
1267
+
1268
+
1269
+
1270
+
1271
+
1272
+
1273
+
1274
+
1275
+
1276
+
1277
+
1278
+
1279
+
1280
+
1281
+
1282
+
1283
+
1284
+
1285
+
1286
+
1287
+
1288
+
1289
+
1290
+
1291
+
1292
+
1293
+
1294
+
1295
+
1296
+
1297
+
1298
+
1299
+
1300
+
1301
+
1302
+
1303
+
1304
+
1305
+
1306
+
1307
+
1308
+
1309
+
1310
+
1311
+
1312
+
1313
+
1314
+
1315
+
1316
+
1317
+
1318
+
1319
+
1320
+
1321
+
1322
+
1323
+
1324
+
1325
+
1326
+
1327
+
1328
+
1329
+
1330
+
1331
+
1332
+
1333
+
1334
+
1335
+
1336
+
1337
+
1338
+
1339
+
1340
+
1341
+
1342
+
1343
+
1344
+
1345
+
1346
+
1347
+
1348
+
1349
+
1350
+
1351
+
1352
+
1353
+
1354
+
1355
+
1356
+
1357
+
1358
+
1359
+
1360
+
1361
+
1362
+
1363
+
1364
+
1365
+
1366
+
1367
+
1368
+
1369
+
1370
+
1371
+
1372
+
1373
+
1374
+ 轿
1375
+
1376
+
1377
+
1378
+
1379
+
1380
+
1381
+
1382
+
1383
+
1384
+
1385
+
1386
+
1387
+
1388
+
1389
+
1390
+
1391
+
1392
+
1393
+
1394
+
1395
+
1396
+
1397
+
1398
+
1399
+
1400
+
1401
+
1402
+
1403
+
1404
+
1405
+
1406
+
1407
+
1408
+
1409
+
1410
+
1411
+
1412
+
1413
+
1414
+
1415
+
1416
+
1417
+
1418
+
1419
+
1420
+
1421
+
1422
+
1423
+
1424
+
1425
+
1426
+
1427
+
1428
+
1429
+
1430
+
1431
+
1432
+
1433
+
1434
+
1435
+
1436
+
1437
+
1438
+
1439
+
1440
+
1441
+
1442
+
1443
+
1444
+
1445
+
1446
+
1447
+
1448
+
1449
+
1450
+
1451
+
1452
+
1453
+
1454
+
1455
+
1456
+
1457
+
1458
+
1459
+
1460
+
1461
+
1462
+
1463
+
1464
+
1465
+
1466
+
1467
+
1468
+
1469
+
1470
+
1471
+
1472
+
1473
+
1474
+
1475
+
1476
+
1477
+
1478
+
1479
+
1480
+
1481
+
1482
+
1483
+
1484
+
1485
+
1486
+
1487
+
1488
+
1489
+
1490
+
1491
+
1492
+
1493
+
1494
+
1495
+
1496
+
1497
+
1498
+
1499
+
1500
+
1501
+
1502
+
1503
+
1504
+
1505
+
1506
+
1507
+
1508
+
1509
+
1510
+
1511
+
1512
+
1513
+
1514
+
1515
+
1516
+
1517
+
1518
+
1519
+
1520
+
1521
+
1522
+
1523
+
1524
+
1525
+
1526
+
1527
+
1528
+
1529
+
1530
+
1531
+
1532
+
1533
+
1534
+
1535
+
1536
+
1537
+
1538
+
1539
+
1540
+
1541
+
1542
+
1543
+
1544
+
1545
+
1546
+
1547
+
1548
+
1549
+
1550
+
1551
+
1552
+
1553
+
1554
+
1555
+
1556
+
1557
+
1558
+
1559
+
1560
+
1561
+
1562
+
1563
+
1564
+
1565
+
1566
+
1567
+
1568
+
1569
+
1570
+
1571
+
1572
+
1573
+
1574
+
1575
+
1576
+
1577
+
1578
+
1579
+
1580
+
1581
+
1582
+
1583
+
1584
+
1585
+
1586
+
1587
+
1588
+
1589
+
1590
+
1591
+
1592
+
1593
+
1594
+
1595
+
1596
+
1597
+
1598
+
1599
+
1600
+
1601
+
1602
+
1603
+
1604
+
1605
+
1606
+
1607
+
1608
+
1609
+
1610
+
1611
+
1612
+
1613
+
1614
+
1615
+
1616
+
1617
+
1618
+
1619
+
1620
+
1621
+
1622
+
1623
+
1624
+
1625
+
1626
+
1627
+
1628
+
1629
+
1630
+
1631
+
1632
+
1633
+
1634
+
1635
+
1636
+
1637
+
1638
+
1639
+
1640
+
1641
+
1642
+
1643
+
1644
+
1645
+
1646
+
1647
+
1648
+
1649
+
1650
+
1651
+
1652
+
1653
+
1654
+
1655
+
1656
+
1657
+
1658
+
1659
+
1660
+
1661
+
1662
+
1663
+
1664
+
1665
+
1666
+
1667
+
1668
+
1669
+
1670
+
1671
+
1672
+
1673
+
1674
+
1675
+
1676
+
1677
+
1678
+
1679
+
1680
+
1681
+
1682
+
1683
+
1684
+
1685
+
1686
+
1687
+
1688
+
1689
+
1690
+
1691
+
1692
+
1693
+
1694
+
1695
+
1696
+
1697
+
1698
+
1699
+
1700
+
1701
+
1702
+
1703
+
1704
+
1705
+
1706
+
1707
+
1708
+
1709
+
1710
+
1711
+
1712
+
1713
+
1714
+
1715
+
1716
+
1717
+
1718
+
1719
+
1720
+
1721
+
1722
+
1723
+
1724
+
1725
+
1726
+
1727
+
1728
+
1729
+
1730
+
1731
+
1732
+
1733
+
1734
+
1735
+
1736
+
1737
+
1738
+
1739
+
1740
+
1741
+
1742
+
1743
+
1744
+
1745
+
1746
+
1747
+
1748
+
1749
+
1750
+
1751
+
1752
+
1753
+
1754
+
1755
+
1756
+
1757
+
1758
+
1759
+
1760
+
1761
+
1762
+
1763
+
1764
+
1765
+
1766
+
1767
+
1768
+
1769
+
1770
+
1771
+
1772
+
1773
+
1774
+
1775
+
1776
+
1777
+
1778
+
1779
+
1780
+
1781
+
1782
+
1783
+
1784
+
1785
+
1786
+
1787
+
1788
+
1789
+
1790
+
1791
+
1792
+
1793
+
1794
+
1795
+
1796
+
1797
+
1798
+
1799
+
1800
+
1801
+
1802
+
1803
+
1804
+
1805
+
1806
+
1807
+
1808
+
1809
+
1810
+
1811
+
1812
+
1813
+
1814
+
1815
+
1816
+
1817
+
1818
+
1819
+
1820
+
1821
+
1822
+
1823
+
1824
+
1825
+
1826
+
1827
+
1828
+
1829
+
1830
+ 窿
1831
+
1832
+
1833
+
1834
+
1835
+
1836
+
1837
+
1838
+
1839
+
1840
+
1841
+
1842
+
1843
+
1844
+
1845
+ 鹿
1846
+
1847
+
1848
+
1849
+
1850
+
1851
+
1852
+
1853
+
1854
+
1855
+
1856
+
1857
+
1858
+
1859
+
1860
+
1861
+
1862
+
1863
+
1864
+
1865
+
1866
+
1867
+
1868
+
1869
+
1870
+
1871
+
1872
+
1873
+
1874
+
1875
+
1876
+
1877
+
1878
+
1879
+
1880
+
1881
+
1882
+
1883
+
1884
+
1885
+
1886
+
1887
+
1888
+
1889
+
1890
+
1891
+
1892
+
1893
+ 绿
1894
+
1895
+
1896
+
1897
+
1898
+
1899
+
1900
+
1901
+
1902
+
1903
+
1904
+
1905
+
1906
+
1907
+
1908
+
1909
+
1910
+
1911
+
1912
+
1913
+
1914
+
1915
+
1916
+
1917
+
1918
+
1919
+
1920
+
1921
+
1922
+
1923
+
1924
+
1925
+
1926
+
1927
+
1928
+
1929
+
1930
+
1931
+
1932
+
1933
+
1934
+
1935
+
1936
+
1937
+
1938
+
1939
+
1940
+
1941
+
1942
+
1943
+
1944
+
1945
+
1946
+
1947
+
1948
+
1949
+
1950
+
1951
+
1952
+
1953
+
1954
+
1955
+
1956
+
1957
+
1958
+
1959
+
1960
+
1961
+
1962
+
1963
+
1964
+
1965
+
1966
+
1967
+
1968
+
1969
+
1970
+
1971
+
1972
+
1973
+
1974
+
1975
+
1976
+
1977
+
1978
+
1979
+
1980
+
1981
+
1982
+
1983
+
1984
+
1985
+
1986
+
1987
+
1988
+
1989
+
1990
+
1991
+
1992
+
1993
+
1994
+
1995
+
1996
+
1997
+
1998
+
1999
+
2000
+
2001
+
2002
+
2003
+
2004
+
2005
+
2006
+
2007
+
2008
+
2009
+
2010
+
2011
+
2012
+
2013
+
2014
+
2015
+
2016
+
2017
+
2018
+
2019
+
2020
+
2021
+
2022
+
2023
+
2024
+
2025
+
2026
+
2027
+
2028
+
2029
+
2030
+
2031
+
2032
+
2033
+
2034
+
2035
+
2036
+
2037
+
2038
+
2039
+
2040
+
2041
+
2042
+
2043
+
2044
+
2045
+
2046
+
2047
+
2048
+
2049
+
2050
+
2051
+
2052
+
2053
+
2054
+
2055
+
2056
+
2057
+
2058
+
2059
+
2060
+
2061
+
2062
+
2063
+
2064
+
2065
+
2066
+
2067
+
2068
+
2069
+
2070
+
2071
+
2072
+
2073
+
2074
+
2075
+
2076
+
2077
+
2078
+
2079
+
2080
+
2081
+
2082
+
2083
+
2084
+
2085
+
2086
+
2087
+
2088
+
2089
+
2090
+
2091
+
2092
+
2093
+
2094
+
2095
+
2096
+
2097
+
2098
+
2099
+
2100
+
2101
+
2102
+
2103
+
2104
+
2105
+
2106
+
2107
+
2108
+
2109
+
2110
+
2111
+
2112
+
2113
+
2114
+
2115
+
2116
+
2117
+
2118
+
2119
+
2120
+
2121
+
2122
+
2123
+
2124
+
2125
+
2126
+
2127
+
2128
+
2129
+
2130
+
2131
+
2132
+
2133
+
2134
+
2135
+
2136
+
2137
+
2138
+
2139
+
2140
+
2141
+
2142
+
2143
+
2144
+
2145
+
2146
+ 尿
2147
+
2148
+
2149
+
2150
+
2151
+
2152
+
2153
+
2154
+
2155
+
2156
+
2157
+
2158
+
2159
+
2160
+
2161
+
2162
+
2163
+
2164
+
2165
+
2166
+
2167
+
2168
+
2169
+
2170
+
2171
+
2172
+
2173
+
2174
+
2175
+
2176
+
2177
+
2178
+
2179
+
2180
+
2181
+
2182
+
2183
+
2184
+
2185
+
2186
+
2187
+
2188
+
2189
+
2190
+
2191
+
2192
+
2193
+
2194
+
2195
+
2196
+
2197
+
2198
+
2199
+
2200
+
2201
+
2202
+
2203
+
2204
+
2205
+
2206
+
2207
+
2208
+
2209
+
2210
+
2211
+
2212
+
2213
+
2214
+
2215
+
2216
+
2217
+
2218
+
2219
+
2220
+
2221
+
2222
+
2223
+
2224
+
2225
+
2226
+
2227
+
2228
+
2229
+
2230
+
2231
+
2232
+
2233
+
2234
+
2235
+
2236
+
2237
+
2238
+
2239
+
2240
+
2241
+
2242
+
2243
+
2244
+
2245
+
2246
+
2247
+
2248
+
2249
+
2250
+
2251
+
2252
+
2253
+
2254
+
2255
+
2256
+
2257
+
2258
+
2259
+
2260
+
2261
+
2262
+
2263
+
2264
+
2265
+
2266
+
2267
+
2268
+
2269
+
2270
+
2271
+
2272
+
2273
+
2274
+
2275
+
2276
+
2277
+
2278
+
2279
+
2280
+
2281
+
2282
+
2283
+
2284
+
2285
+
2286
+
2287
+
2288
+
2289
+
2290
+
2291
+
2292
+
2293
+
2294
+
2295
+
2296
+
2297
+
2298
+
2299
+
2300
+
2301
+
2302
+
2303
+
2304
+
2305
+
2306
+
2307
+
2308
+
2309
+
2310
+
2311
+
2312
+
2313
+
2314
+
2315
+
2316
+
2317
+
2318
+
2319
+
2320
+
2321
+
2322
+
2323
+
2324
+
2325
+
2326
+
2327
+
2328
+
2329
+
2330
+
2331
+
2332
+
2333
+
2334
+
2335
+
2336
+
2337
+
2338
+
2339
+
2340
+
2341
+
2342
+
2343
+
2344
+
2345
+
2346
+
2347
+
2348
+
2349
+
2350
+
2351
+
2352
+
2353
+
2354
+
2355
+
2356
+
2357
+
2358
+
2359
+
2360
+
2361
+
2362
+
2363
+
2364
+
2365
+
2366
+
2367
+
2368
+
2369
+
2370
+
2371
+
2372
+
2373
+
2374
+
2375
+
2376
+
2377
+
2378
+
2379
+
2380
+
2381
+
2382
+
2383
+
2384
+
2385
+
2386
+
2387
+
2388
+
2389
+
2390
+
2391
+
2392
+
2393
+
2394
+
2395
+
2396
+
2397
+
2398
+
2399
+
2400
+
2401
+
2402
+
2403
+
2404
+
2405
+
2406
+
2407
+
2408
+
2409
+
2410
+
2411
+
2412
+
2413
+
2414
+
2415
+
2416
+
2417
+
2418
+
2419
+
2420
+
2421
+
2422
+
2423
+
2424
+
2425
+
2426
+
2427
+
2428
+
2429
+
2430
+
2431
+
2432
+
2433
+
2434
+
2435
+
2436
+
2437
+
2438
+
2439
+
2440
+
2441
+
2442
+
2443
+
2444
+
2445
+
2446
+
2447
+
2448
+
2449
+
2450
+
2451
+
2452
+
2453
+
2454
+
2455
+
2456
+
2457
+
2458
+
2459
+
2460
+
2461
+
2462
+
2463
+
2464
+
2465
+
2466
+
2467
+
2468
+
2469
+
2470
+
2471
+
2472
+
2473
+
2474
+
2475
+
2476
+
2477
+
2478
+
2479
+
2480
+
2481
+
2482
+
2483
+
2484
+
2485
+
2486
+
2487
+
2488
+
2489
+
2490
+
2491
+
2492
+
2493
+
2494
+
2495
+
2496
+
2497
+
2498
+
2499
+
2500
+
2501
+
2502
+
2503
+
2504
+
2505
+
2506
+
2507
+
2508
+
2509
+
2510
+
2511
+
2512
+
2513
+
2514
+
2515
+
2516
+
2517
+
2518
+
2519
+
2520
+
2521
+
2522
+
2523
+
2524
+
2525
+
2526
+
2527
+
2528
+
2529
+
2530
+
2531
+
2532
+
2533
+
2534
+
2535
+
2536
+
2537
+
2538
+
2539
+
2540
+
2541
+
2542
+
2543
+
2544
+
2545
+
2546
+
2547
+
2548
+
2549
+
2550
+
2551
+
2552
+
2553
+
2554
+
2555
+
2556
+
2557
+
2558
+
2559
+
2560
+
2561
+
2562
+
2563
+
2564
+
2565
+
2566
+
2567
+
2568
+
2569
+
2570
+
2571
+
2572
+
2573
+
2574
+
2575
+
2576
+
2577
+
2578
+
2579
+
2580
+
2581
+
2582
+
2583
+
2584
+
2585
+
2586
+
2587
+
2588
+
2589
+
2590
+
2591
+
2592
+
2593
+
2594
+
2595
+
2596
+
2597
+
2598
+
2599
+
2600
+
2601
+
2602
+
2603
+
2604
+
2605
+
2606
+
2607
+
2608
+
2609
+
2610
+
2611
+
2612
+
2613
+
2614
+
2615
+
2616
+
2617
+
2618
+
2619
+
2620
+
2621
+
2622
+
2623
+
2624
+
2625
+
2626
+
2627
+
2628
+
2629
+
2630
+
2631
+
2632
+
2633
+
2634
+
2635
+
2636
+
2637
+
2638
+
2639
+
2640
+
2641
+
2642
+
2643
+
2644
+
2645
+
2646
+
2647
+
2648
+
2649
+
2650
+
2651
+
2652
+
2653
+
2654
+
2655
+
2656
+
2657
+
2658
+
2659
+
2660
+
2661
+
2662
+
2663
+
2664
+
2665
+
2666
+
2667
+
2668
+
2669
+
2670
+
2671
+
2672
+
2673
+
2674
+
2675
+
2676
+
2677
+
2678
+
2679
+
2680
+
2681
+
2682
+
2683
+
2684
+
2685
+
2686
+
2687
+
2688
+
2689
+
2690
+
2691
+
2692
+
2693
+
2694
+
2695
+
2696
+
2697
+ 湿
2698
+
2699
+
2700
+
2701
+
2702
+
2703
+
2704
+
2705
+
2706
+
2707
+
2708
+
2709
+
2710
+
2711
+
2712
+
2713
+
2714
+
2715
+
2716
+
2717
+
2718
+
2719
+
2720
+
2721
+
2722
+
2723
+
2724
+
2725
+
2726
+ 使
2727
+
2728
+
2729
+
2730
+
2731
+
2732
+
2733
+
2734
+
2735
+
2736
+
2737
+
2738
+
2739
+
2740
+
2741
+
2742
+
2743
+
2744
+
2745
+
2746
+
2747
+
2748
+
2749
+
2750
+
2751
+
2752
+
2753
+
2754
+
2755
+
2756
+
2757
+ 寿
2758
+
2759
+
2760
+
2761
+
2762
+
2763
+
2764
+
2765
+
2766
+
2767
+
2768
+
2769
+
2770
+
2771
+
2772
+
2773
+
2774
+
2775
+
2776
+
2777
+
2778
+
2779
+
2780
+
2781
+
2782
+
2783
+
2784
+
2785
+
2786
+
2787
+
2788
+
2789
+
2790
+
2791
+
2792
+
2793
+
2794
+
2795
+
2796
+
2797
+
2798
+
2799
+
2800
+
2801
+
2802
+
2803
+
2804
+
2805
+
2806
+
2807
+
2808
+
2809
+
2810
+
2811
+
2812
+
2813
+
2814
+
2815
+
2816
+
2817
+
2818
+
2819
+
2820
+
2821
+
2822
+
2823
+
2824
+
2825
+
2826
+
2827
+
2828
+
2829
+ sil
2830
+
2831
+
2832
+
2833
+
2834
+
2835
+
2836
+
2837
+
2838
+
2839
+
2840
+
2841
+
2842
+
2843
+
2844
+
2845
+ sp1
2846
+
2847
+
2848
+
2849
+
2850
+
2851
+
2852
+
2853
+ 宿
2854
+
2855
+
2856
+
2857
+
2858
+
2859
+
2860
+
2861
+
2862
+
2863
+
2864
+
2865
+
2866
+
2867
+
2868
+
2869
+
2870
+
2871
+
2872
+
2873
+
2874
+
2875
+
2876
+
2877
+
2878
+
2879
+
2880
+
2881
+
2882
+
2883
+
2884
+
2885
+
2886
+
2887
+
2888
+
2889
+
2890
+
2891
+
2892
+
2893
+
2894
+
2895
+
2896
+
2897
+
2898
+
2899
+
2900
+
2901
+
2902
+
2903
+
2904
+
2905
+
2906
+
2907
+
2908
+
2909
+
2910
+
2911
+
2912
+
2913
+
2914
+
2915
+
2916
+
2917
+
2918
+
2919
+
2920
+
2921
+
2922
+
2923
+
2924
+
2925
+
2926
+
2927
+
2928
+
2929
+
2930
+
2931
+
2932
+
2933
+
2934
+
2935
+
2936
+
2937
+
2938
+
2939
+
2940
+
2941
+
2942
+
2943
+
2944
+
2945
+
2946
+
2947
+
2948
+
2949
+
2950
+
2951
+
2952
+
2953
+
2954
+
2955
+
2956
+
2957
+
2958
+
2959
+
2960
+
2961
+
2962
+
2963
+
2964
+
2965
+
2966
+
2967
+
2968
+
2969
+
2970
+
2971
+
2972
+
2973
+
2974
+
2975
+
2976
+
2977
+
2978
+
2979
+
2980
+
2981
+
2982
+
2983
+
2984
+
2985
+
2986
+
2987
+
2988
+
2989
+
2990
+
2991
+
2992
+
2993
+
2994
+
2995
+
2996
+
2997
+
2998
+
2999
+
3000
+
3001
+
3002
+
3003
+
3004
+
3005
+
3006
+
3007
+
3008
+
3009
+
3010
+
3011
+
3012
+
3013
+
3014
+
3015
+
3016
+
3017
+
3018
+
3019
+
3020
+
3021
+
3022
+
3023
+
3024
+
3025
+
3026
+
3027
+
3028
+
3029
+
3030
+
3031
+
3032
+
3033
+
3034
+ 退
3035
+
3036
+
3037
+
3038
+
3039
+
3040
+
3041
+
3042
+
3043
+
3044
+
3045
+
3046
+
3047
+
3048
+
3049
+
3050
+
3051
+
3052
+
3053
+
3054
+
3055
+
3056
+
3057
+
3058
+
3059
+
3060
+
3061
+
3062
+
3063
+
3064
+
3065
+
3066
+
3067
+
3068
+
3069
+
3070
+
3071
+
3072
+
3073
+
3074
+
3075
+
3076
+
3077
+
3078
+
3079
+
3080
+
3081
+
3082
+
3083
+
3084
+
3085
+
3086
+
3087
+
3088
+
3089
+
3090
+
3091
+
3092
+
3093
+
3094
+
3095
+
3096
+
3097
+
3098
+
3099
+
3100
+
3101
+
3102
+
3103
+
3104
+
3105
+
3106
+
3107
+
3108
+
3109
+
3110
+
3111
+
3112
+
3113
+
3114
+
3115
+
3116
+
3117
+
3118
+
3119
+
3120
+
3121
+
3122
+
3123
+
3124
+
3125
+ 诿
3126
+
3127
+
3128
+
3129
+
3130
+
3131
+
3132
+
3133
+
3134
+
3135
+
3136
+
3137
+
3138
+
3139
+
3140
+
3141
+
3142
+
3143
+
3144
+
3145
+
3146
+
3147
+
3148
+
3149
+
3150
+
3151
+
3152
+
3153
+
3154
+
3155
+
3156
+
3157
+
3158
+
3159
+
3160
+
3161
+
3162
+
3163
+
3164
+
3165
+
3166
+
3167
+
3168
+
3169
+
3170
+
3171
+
3172
+
3173
+
3174
+
3175
+
3176
+
3177
+
3178
+
3179
+
3180
+
3181
+
3182
+
3183
+
3184
+
3185
+
3186
+
3187
+
3188
+
3189
+
3190
+ 西
3191
+
3192
+
3193
+
3194
+
3195
+
3196
+
3197
+
3198
+
3199
+
3200
+
3201
+
3202
+
3203
+
3204
+
3205
+
3206
+
3207
+
3208
+
3209
+
3210
+
3211
+
3212
+
3213
+
3214
+
3215
+
3216
+
3217
+
3218
+
3219
+
3220
+
3221
+
3222
+
3223
+
3224
+
3225
+
3226
+
3227
+
3228
+
3229
+
3230
+
3231
+
3232
+
3233
+
3234
+
3235
+
3236
+
3237
+
3238
+
3239
+
3240
+
3241
+
3242
+
3243
+
3244
+
3245
+
3246
+
3247
+
3248
+
3249
+
3250
+
3251
+
3252
+
3253
+
3254
+
3255
+
3256
+
3257
+
3258
+ 线
3259
+
3260
+
3261
+
3262
+
3263
+
3264
+
3265
+
3266
+
3267
+
3268
+
3269
+
3270
+
3271
+
3272
+
3273
+
3274
+
3275
+
3276
+
3277
+
3278
+
3279
+
3280
+
3281
+
3282
+
3283
+
3284
+
3285
+
3286
+
3287
+
3288
+
3289
+
3290
+
3291
+
3292
+
3293
+
3294
+
3295
+
3296
+
3297
+
3298
+
3299
+
3300
+
3301
+
3302
+
3303
+
3304
+
3305
+
3306
+
3307
+
3308
+
3309
+
3310
+
3311
+
3312
+
3313
+
3314
+
3315
+
3316
+
3317
+
3318
+
3319
+
3320
+
3321
+
3322
+
3323
+
3324
+
3325
+
3326
+
3327
+
3328
+
3329
+
3330
+
3331
+
3332
+
3333
+
3334
+
3335
+
3336
+
3337
+
3338
+
3339
+
3340
+
3341
+
3342
+
3343
+
3344
+
3345
+
3346
+
3347
+
3348
+
3349
+
3350
+
3351
+
3352
+
3353
+
3354
+
3355
+
3356
+
3357
+
3358
+
3359
+
3360
+
3361
+
3362
+
3363
+
3364
+
3365
+
3366
+
3367
+
3368
+
3369
+
3370
+
3371
+
3372
+
3373
+
3374
+
3375
+
3376
+
3377
+
3378
+
3379
+
3380
+
3381
+
3382
+
3383
+
3384
+
3385
+
3386
+
3387
+
3388
+
3389
+ 婿
3390
+
3391
+
3392
+
3393
+
3394
+
3395
+
3396
+
3397
+
3398
+
3399
+
3400
+
3401
+
3402
+
3403
+
3404
+
3405
+
3406
+
3407
+
3408
+
3409
+
3410
+
3411
+
3412
+
3413
+
3414
+
3415
+
3416
+
3417
+
3418
+
3419
+
3420
+
3421
+
3422
+
3423
+
3424
+
3425
+
3426
+
3427
+
3428
+
3429
+
3430
+
3431
+
3432
+
3433
+
3434
+
3435
+
3436
+
3437
+
3438
+
3439
+
3440
+
3441
+
3442
+
3443
+
3444
+
3445
+
3446
+
3447
+
3448
+
3449
+
3450
+
3451
+
3452
+
3453
+
3454
+
3455
+
3456
+
3457
+
3458
+
3459
+
3460
+
3461
+
3462
+
3463
+
3464
+
3465
+
3466
+
3467
+
3468
+
3469
+
3470
+
3471
+
3472
+
3473
+
3474
+
3475
+ 沿
3476
+
3477
+
3478
+
3479
+
3480
+
3481
+
3482
+
3483
+
3484
+
3485
+ 嬿
3486
+
3487
+
3488
+
3489
+
3490
+
3491
+
3492
+
3493
+
3494
+
3495
+
3496
+
3497
+
3498
+
3499
+
3500
+
3501
+
3502
+
3503
+
3504
+
3505
+
3506
+
3507
+
3508
+
3509
+
3510
+
3511
+
3512
+
3513
+
3514
+
3515
+
3516
+ 耀
3517
+
3518
+
3519
+
3520
+
3521
+
3522
+
3523
+
3524
+
3525
+
3526
+
3527
+
3528
+
3529
+
3530
+
3531
+
3532
+
3533
+
3534
+
3535
+
3536
+
3537
+
3538
+
3539
+
3540
+
3541
+
3542
+
3543
+
3544
+
3545
+
3546
+
3547
+
3548
+
3549
+
3550
+
3551
+
3552
+
3553
+
3554
+
3555
+
3556
+
3557
+
3558
+
3559
+ 亿
3560
+
3561
+
3562
+
3563
+
3564
+
3565
+
3566
+
3567
+
3568
+
3569
+
3570
+
3571
+
3572
+
3573
+
3574
+
3575
+
3576
+
3577
+
3578
+
3579
+
3580
+
3581
+
3582
+
3583
+
3584
+
3585
+
3586
+
3587
+
3588
+
3589
+
3590
+
3591
+
3592
+
3593
+
3594
+
3595
+
3596
+
3597
+
3598
+
3599
+
3600
+
3601
+
3602
+
3603
+
3604
+
3605
+
3606
+
3607
+
3608
+
3609
+
3610
+
3611
+
3612
+
3613
+
3614
+
3615
+
3616
+
3617
+
3618
+
3619
+
3620
+
3621
+
3622
+
3623
+
3624
+
3625
+
3626
+
3627
+
3628
+
3629
+
3630
+
3631
+
3632
+
3633
+
3634
+
3635
+
3636
+
3637
+
3638
+
3639
+
3640
+
3641
+
3642
+
3643
+
3644
+
3645
+
3646
+
3647
+
3648
+
3649
+
3650
+
3651
+
3652
+
3653
+
3654
+
3655
+
3656
+
3657
+
3658
+
3659
+
3660
+
3661
+
3662
+
3663
+
3664
+
3665
+
3666
+
3667
+
3668
+
3669
+
3670
+
3671
+
3672
+
3673
+
3674
+
3675
+
3676
+
3677
+
3678
+
3679
+
3680
+
3681
+
3682
+
3683
+
3684
+
3685
+
3686
+
3687
+
3688
+
3689
+
3690
+
3691
+
3692
+
3693
+
3694
+
3695
+
3696
+
3697
+
3698
+
3699
+
3700
+
3701
+
3702
+
3703
+
3704
+
3705
+
3706
+
3707
+
3708
+
3709
+
3710
+
3711
+
3712
+
3713
+
3714
+
3715
+
3716
+ 屿
3717
+
3718
+
3719
+
3720
+
3721
+
3722
+
3723
+
3724
+
3725
+
3726
+
3727
+
3728
+
3729
+
3730
+
3731
+
3732
+
3733
+
3734
+
3735
+
3736
+
3737
+
3738
+
3739
+
3740
+
3741
+
3742
+
3743
+
3744
+
3745
+
3746
+
3747
+
3748
+
3749
+
3750
+
3751
+
3752
+
3753
+
3754
+
3755
+
3756
+
3757
+
3758
+
3759
+
3760
+
3761
+
3762
+
3763
+
3764
+
3765
+
3766
+
3767
+
3768
+
3769
+
3770
+
3771
+
3772
+
3773
+
3774
+
3775
+
3776
+
3777
+
3778
+
3779
+
3780
+
3781
+
3782
+
3783
+
3784
+
3785
+
3786
+
3787
+
3788
+
3789
+
3790
+
3791
+
3792
+
3793
+
3794
+
3795
+
3796
+
3797
+
3798
+
3799
+
3800
+
3801
+
3802
+
3803
+
3804
+
3805
+
3806
+
3807
+
3808
+
3809
+
3810
+
3811
+
3812
+
3813
+
3814
+
3815
+
3816
+
3817
+
3818
+
3819
+
3820
+
3821
+
3822
+
3823
+
3824
+
3825
+
3826
+
3827
+
3828
+
3829
+
3830
+
3831
+
3832
+
3833
+
3834
+
3835
+
3836
+
3837
+
3838
+
3839
+
3840
+
3841
+
3842
+
3843
+
3844
+
3845
+
3846
+
3847
+
3848
+
3849
+
3850
+
3851
+
3852
+
3853
+
3854
+
3855
+
3856
+
3857
+
3858
+
3859
+
3860
+
3861
+
3862
+
3863
+
3864
+
3865
+
3866
+
3867
+
3868
+
3869
+
3870
+
3871
+
3872
+
3873
+
3874
+
3875
+
3876
+
3877
+
3878
+
3879
+
3880
+
3881
+
3882
+
3883
+
3884
+
3885
+
3886
+
3887
+
3888
+
3889
+
3890
+
3891
+
3892
+
3893
+
3894
+
3895
+
3896
+
3897
+
3898
+
3899
+
3900
+
3901
+
3902
+
3903
+
3904
+
3905
+
3906
+
3907
+
3908
+
3909
+
3910
+
3911
+
3912
+
3913
+
3914
+
3915
+
3916
+
3917
+
3918
+
3919
+
3920
+
3921
+
3922
+
3923
+
3924
+
3925
+
3926
+
3927
+
3928
+
3929
+
3930
+
3931
+
3932
+
3933
+
3934
+
3935
+
3936
+
3937
+
3938
+
3939
+
3940
+
3941
+
3942
+
3943
+
3944
+
3945
+
3946
+
3947
+
3948
+
3949
+
3950
+
3951
+
3952
+
3953
+
3954
+
3955
+
3956
+
3957
+
3958
+
3959
+
3960
+
3961
+
3962
+
3963
+
3964
+
3965
+
3966
+
3967
+
3968
+
3969
+
3970
+
3971
+
3972
+
3973
+
3974
+
3975
+
3976
+
3977
+
3978
+
3979
+
3980
+
3981
+
3982
+
3983
+
3984
+
3985
+
3986
+
3987
+
3988
+
3989
+
3990
+
3991
+
3992
+
3993
+
3994
+
3995
+
3996
+
3997
+
3998
+
3999
+
4000
+
4001
+
4002
+
4003
+
4004
+
4005
+
4006
+
4007
+
4008
+
4009
+
4010
+
4011
+
4012
+
4013
+
4014
+
4015
+
4016
+
4017
+
4018
+
4019
+
4020
+
4021
+
4022
+
4023
+
4024
+
4025
+
4026
+
4027
+
4028
+
4029
+
4030
+
4031
+
4032
+
4033
+
4034
+
4035
+
4036
+
4037
+
4038
+
4039
+
4040
+
4041
+
4042
+
4043
+
4044
+
4045
+
4046
+
4047
+
4048
+
4049
+
4050
+
4051
+
4052
+
4053
+
4054
+
4055
+
4056
+
4057
+
4058
+
4059
+
4060
+
4061
+
4062
+
4063
+
4064
+
4065
+
4066
+
4067
+
4068
+
4069
+
4070
+
4071
+
4072
+
4073
+
4074
+
4075
+
4076
+
4077
+
4078
+
4079
+
4080
+
4081
+
4082
+ 姿
4083
+
4084
+
4085
+
4086
+
4087
+
4088
+
4089
+
4090
+
4091
+
4092
+
4093
+
4094
+
4095
+
4096
+
4097
+
4098
+
4099
+
4100
+
4101
+
4102
+
4103
+
4104
+
4105
+
4106
+
4107
+
4108
+
4109
+
4110
+
4111
+
4112
+
4113
+
4114
+
4115
+
4116
+
4117
+
4118
+
4119
+
4120
+
4121
+
4122
+
4123
+
4124
+
4125
+
4126
+
4127
+
4128
+
4129
+
4130
+
4131
+
examples/biaobei/input.txt ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #name|py|gp|spk
2
+ text1|sil ni3 qu4 zuo4 fan4 ba5 sil|sil 你 去 做 饭 吧 sil|0
3
+ text2|sil ni3 qu4 zuo4 fan4 ba5 sil|sil 你 去 做 饭 吧 sil|0
4
+ text3|sil you3 ge4 xiao3 hai2 jiao4 xiao3 du4 sil|sil 有 个 小 孩 叫 小 杜 sil|0
5
+ text4|sil shang4 jie1 da3 cu4 you4 mai3 bu4 sil|sil 上 街 打 醋 又 买 布 sil|0
6
+ text5|sil mai3 le5 bu4 da3 le5 cu4 sil|sil 买 了 布 打 了 醋 sil|0
7
+ text6|sil hui2 tou2 kan4 jian4 ying1 zhua1 tu4 sil|sil 回 头 看 见 鹰 抓 兔 sil|0
8
+ text7|sil fang4 xia4 bu4 ge1 xia4 cu4 sil|sil 放 下 布 搁 下 醋 sil|0
9
+ text8|sil shang4 qian2 qu4 zhui1 ying1 he2 tu4 sil|sil 上 前 去 追 鹰 和 兔 sil|0
10
+ text9|sil fei1 le5 ying1 pao3 le5 tu4 sil|sil 飞 了 鹰 跑 了 兔 sil|0
11
+ text10|sil sa3 le5 cu4 shi1 le5 bu4 sil|sil 洒 了 醋 湿 了 布 sil|0
12
+ text11|sil wei4 shi4 ying4 xin1 de5 wang3 luo4 chuan2 bo1 fang1 shi4 he2 du2 zhe3 yue4 du2 xi2 guan4 sil|sil 为 适 应 新 的 网 络 传 播 方 式 和 读 者 阅 读 习 惯 sil|0
13
+ text12|sil zhe4 ge4 xiao3 hair2 r zhen1 dong3 shir4 sil|sil 这 个 小 孩 儿 真 懂 事 sil|0
examples/biaobei/name_py_hz_dur.txt ADDED
The diff for this file is too large to render. See raw diff
 
examples/biaobei/py.vocab ADDED
@@ -0,0 +1,1608 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ a1
2
+ a4
3
+ a5
4
+ ai1
5
+ ai2
6
+ ai3
7
+ ai4
8
+ ai5
9
+ an1
10
+ an2
11
+ an3
12
+ an4
13
+ ang1
14
+ ang2
15
+ ang4
16
+ ao1
17
+ ao2
18
+ ao3
19
+ ao4
20
+ ba1
21
+ ba2
22
+ ba3
23
+ ba4
24
+ ba5
25
+ bai1
26
+ bai2
27
+ bai3
28
+ bai4
29
+ bai5
30
+ ban1
31
+ ban2
32
+ ban3
33
+ ban4
34
+ bang1
35
+ bang2
36
+ bang3
37
+ bang4
38
+ bang5
39
+ banr3
40
+ bao1
41
+ bao2
42
+ bao3
43
+ bao4
44
+ bao5
45
+ bei1
46
+ bei2
47
+ bei3
48
+ bei4
49
+ bei5
50
+ ben1
51
+ ben2
52
+ ben3
53
+ ben4
54
+ ben5
55
+ beng1
56
+ beng2
57
+ beng4
58
+ bi1
59
+ bi2
60
+ bi3
61
+ bi4
62
+ bian1
63
+ bian2
64
+ bian3
65
+ bian4
66
+ bian5
67
+ biao1
68
+ biao2
69
+ biao3
70
+ biao4
71
+ bie1
72
+ bie2
73
+ bie3
74
+ bie4
75
+ bin1
76
+ bin4
77
+ bing1
78
+ bing2
79
+ bing3
80
+ bing4
81
+ bo1
82
+ bo2
83
+ bo3
84
+ bo4
85
+ bo5
86
+ bu2
87
+ bu3
88
+ bu4
89
+ bu5
90
+ ca1
91
+ ca3
92
+ cai1
93
+ cai2
94
+ cai3
95
+ cai4
96
+ cai5
97
+ can1
98
+ can2
99
+ can3
100
+ can4
101
+ cang1
102
+ cang2
103
+ cao1
104
+ cao2
105
+ cao3
106
+ cao5
107
+ ce4
108
+ cen1
109
+ cen2
110
+ ceng1
111
+ ceng2
112
+ ceng4
113
+ cha1
114
+ cha2
115
+ cha3
116
+ cha4
117
+ cha5
118
+ chai1
119
+ chai2
120
+ chan1
121
+ chan2
122
+ chan3
123
+ chan4
124
+ chan5
125
+ chang1
126
+ chang2
127
+ chang3
128
+ chang4
129
+ chang5
130
+ chao1
131
+ chao2
132
+ chao3
133
+ chao5
134
+ che1
135
+ che2
136
+ che3
137
+ che4
138
+ chen1
139
+ chen2
140
+ chen3
141
+ chen4
142
+ chen5
143
+ cheng1
144
+ cheng2
145
+ cheng3
146
+ cheng4
147
+ cheng5
148
+ chi1
149
+ chi2
150
+ chi3
151
+ chi4
152
+ chi5
153
+ chong1
154
+ chong2
155
+ chong3
156
+ chong4
157
+ chou1
158
+ chou2
159
+ chou3
160
+ chou4
161
+ chou5
162
+ chu1
163
+ chu2
164
+ chu3
165
+ chu4
166
+ chu5
167
+ chuai1
168
+ chuai3
169
+ chuai4
170
+ chuan1
171
+ chuan2
172
+ chuan3
173
+ chuan4
174
+ chuan5
175
+ chuang1
176
+ chuang2
177
+ chuang3
178
+ chuang4
179
+ chuang5
180
+ chui1
181
+ chui2
182
+ chui5
183
+ chun1
184
+ chun2
185
+ chun3
186
+ chuo1
187
+ chuo4
188
+ ci1
189
+ ci2
190
+ ci3
191
+ ci4
192
+ cir2
193
+ cong1
194
+ cong2
195
+ cong5
196
+ cou4
197
+ cu1
198
+ cu2
199
+ cu4
200
+ cuan1
201
+ cuan2
202
+ cuan4
203
+ cui1
204
+ cui2
205
+ cui3
206
+ cui4
207
+ cui5
208
+ cun1
209
+ cun2
210
+ cun3
211
+ cun4
212
+ cuo1
213
+ cuo2
214
+ cuo4
215
+ da1
216
+ da2
217
+ da3
218
+ da4
219
+ da5
220
+ dai1
221
+ dai3
222
+ dai4
223
+ dai5
224
+ dan1
225
+ dan2
226
+ dan3
227
+ dan4
228
+ dan5
229
+ dang1
230
+ dang2
231
+ dang3
232
+ dang4
233
+ dao1
234
+ dao2
235
+ dao3
236
+ dao4
237
+ dao5
238
+ daor4
239
+ de2
240
+ de4
241
+ de5
242
+ dei2
243
+ dei3
244
+ deng1
245
+ deng2
246
+ deng3
247
+ deng4
248
+ di1
249
+ di2
250
+ di3
251
+ di4
252
+ di5
253
+ dia2
254
+ dia3
255
+ dian1
256
+ dian2
257
+ dian3
258
+ dian4
259
+ dianr2
260
+ dianr3
261
+ diao1
262
+ diao3
263
+ diao4
264
+ diao5
265
+ die1
266
+ die2
267
+ die4
268
+ die5
269
+ ding1
270
+ ding2
271
+ ding3
272
+ ding4
273
+ dir2
274
+ dir3
275
+ dir4
276
+ diu1
277
+ dong1
278
+ dong2
279
+ dong3
280
+ dong4
281
+ dong5
282
+ dou1
283
+ dou2
284
+ dou3
285
+ dou4
286
+ dou5
287
+ du1
288
+ du2
289
+ du3
290
+ du4
291
+ du5
292
+ duan1
293
+ duan2
294
+ duan3
295
+ duan4
296
+ dui1
297
+ dui4
298
+ duir1
299
+ duir4
300
+ dun1
301
+ dun3
302
+ dun4
303
+ dunr3
304
+ duo1
305
+ duo2
306
+ duo3
307
+ duo4
308
+ duo5
309
+ duor3
310
+ e1
311
+ e2
312
+ e3
313
+ e4
314
+ e5
315
+ ei5
316
+ en1
317
+ en4
318
+ er2
319
+ er3
320
+ er4
321
+ er5
322
+ fa1
323
+ fa2
324
+ fa3
325
+ fa4
326
+ fa5
327
+ fan1
328
+ fan2
329
+ fan3
330
+ fan4
331
+ fan5
332
+ fang1
333
+ fang2
334
+ fang3
335
+ fang4
336
+ fang5
337
+ fanr4
338
+ far2
339
+ fei1
340
+ fei2
341
+ fei3
342
+ fei4
343
+ fen1
344
+ fen2
345
+ fen3
346
+ fen4
347
+ fen5
348
+ feng1
349
+ feng2
350
+ feng3
351
+ feng4
352
+ feng5
353
+ fo2
354
+ fou2
355
+ fou3
356
+ fu1
357
+ fu2
358
+ fu3
359
+ fu4
360
+ fu5
361
+ fur4
362
+ ga1
363
+ ga2
364
+ ga3
365
+ ga4
366
+ gai1
367
+ gai2
368
+ gai3
369
+ gai4
370
+ gair4
371
+ gan1
372
+ gan2
373
+ gan3
374
+ gan4
375
+ gan5
376
+ gang1
377
+ gang2
378
+ gang3
379
+ gang4
380
+ gang5
381
+ gao1
382
+ gao2
383
+ gao3
384
+ gao4
385
+ ge1
386
+ ge2
387
+ ge3
388
+ ge4
389
+ ge5
390
+ gei2
391
+ gei3
392
+ gen1
393
+ gen4
394
+ geng1
395
+ geng2
396
+ geng3
397
+ geng4
398
+ genr1
399
+ ger2
400
+ ger3
401
+ ger4
402
+ gong1
403
+ gong2
404
+ gong3
405
+ gong4
406
+ gong5
407
+ gou1
408
+ gou2
409
+ gou3
410
+ gou4
411
+ gou5
412
+ gu1
413
+ gu2
414
+ gu3
415
+ gu4
416
+ gu5
417
+ gua1
418
+ gua2
419
+ gua3
420
+ gua4
421
+ gua5
422
+ guai1
423
+ guai2
424
+ guai3
425
+ guai4
426
+ guan1
427
+ guan2
428
+ guan3
429
+ guan4
430
+ guang1
431
+ guang2
432
+ guang3
433
+ guang4
434
+ guang5
435
+ gui1
436
+ gui2
437
+ gui3
438
+ gui4
439
+ gui5
440
+ gun2
441
+ gun3
442
+ gun4
443
+ gunr4
444
+ guo1
445
+ guo2
446
+ guo3
447
+ guo4
448
+ guo5
449
+ ha1
450
+ ha2
451
+ ha5
452
+ hai1
453
+ hai2
454
+ hai3
455
+ hai4
456
+ hai5
457
+ hair2
458
+ han1
459
+ han2
460
+ han3
461
+ han4
462
+ han5
463
+ hang1
464
+ hang2
465
+ hang4
466
+ hanr4
467
+ hao1
468
+ hao2
469
+ hao3
470
+ hao4
471
+ hao5
472
+ he1
473
+ he2
474
+ he4
475
+ he5
476
+ hei1
477
+ hen2
478
+ hen3
479
+ hen4
480
+ heng1
481
+ heng2
482
+ heng4
483
+ heng5
484
+ her2
485
+ hong1
486
+ hong2
487
+ hong3
488
+ hong4
489
+ hou2
490
+ hou3
491
+ hou4
492
+ hou5
493
+ hu1
494
+ hu2
495
+ hu3
496
+ hu4
497
+ hu5
498
+ hua1
499
+ hua2
500
+ hua4
501
+ hua5
502
+ huai2
503
+ huai4
504
+ huan1
505
+ huan2
506
+ huan3
507
+ huan4
508
+ huan5
509
+ huang1
510
+ huang2
511
+ huang3
512
+ huang4
513
+ huang5
514
+ huanr1
515
+ hui1
516
+ hui2
517
+ hui3
518
+ hui4
519
+ hui5
520
+ huir3
521
+ huir4
522
+ hun1
523
+ hun2
524
+ hun4
525
+ hun5
526
+ huo1
527
+ huo2
528
+ huo3
529
+ huo4
530
+ huo5
531
+ huor2
532
+ huor3
533
+ ji1
534
+ ji2
535
+ ji3
536
+ ji4
537
+ ji5
538
+ jia1
539
+ jia2
540
+ jia3
541
+ jia4
542
+ jia5
543
+ jian1
544
+ jian2
545
+ jian3
546
+ jian4
547
+ jian5
548
+ jiang1
549
+ jiang2
550
+ jiang3
551
+ jiang4
552
+ jiang5
553
+ jiao1
554
+ jiao2
555
+ jiao3
556
+ jiao4
557
+ jiao5
558
+ jiar1
559
+ jie1
560
+ jie2
561
+ jie3
562
+ jie4
563
+ jie5
564
+ jin1
565
+ jin2
566
+ jin3
567
+ jin4
568
+ jin5
569
+ jing1
570
+ jing2
571
+ jing3
572
+ jing4
573
+ jing5
574
+ jingr3
575
+ jinr4
576
+ jiong2
577
+ jiong3
578
+ jir1
579
+ jiu1
580
+ jiu2
581
+ jiu3
582
+ jiu4
583
+ jiu5
584
+ ju1
585
+ ju2
586
+ ju3
587
+ ju4
588
+ ju5
589
+ juan1
590
+ juan2
591
+ juan3
592
+ juan4
593
+ jue1
594
+ jue2
595
+ jue4
596
+ jun1
597
+ jun4
598
+ jun5
599
+ ka1
600
+ ka2
601
+ ka3
602
+ kai1
603
+ kai2
604
+ kai3
605
+ kai4
606
+ kan1
607
+ kan2
608
+ kan3
609
+ kan4
610
+ kan5
611
+ kang1
612
+ kang2
613
+ kang4
614
+ kao1
615
+ kao2
616
+ kao3
617
+ kao4
618
+ ke1
619
+ ke2
620
+ ke3
621
+ ke4
622
+ ken2
623
+ ken3
624
+ keng1
625
+ kong1
626
+ kong2
627
+ kong3
628
+ kong4
629
+ kou1
630
+ kou2
631
+ kou3
632
+ kou4
633
+ kou5
634
+ ku1
635
+ ku2
636
+ ku3
637
+ ku4
638
+ kua1
639
+ kua2
640
+ kua3
641
+ kua4
642
+ kuai4
643
+ kuai5
644
+ kuair4
645
+ kuan1
646
+ kuan2
647
+ kuan3
648
+ kuang1
649
+ kuang2
650
+ kuang4
651
+ kuang5
652
+ kui1
653
+ kui2
654
+ kui3
655
+ kui4
656
+ kun1
657
+ kun2
658
+ kun3
659
+ kun4
660
+ kuo4
661
+ la1
662
+ la2
663
+ la3
664
+ la4
665
+ la5
666
+ lai2
667
+ lai4
668
+ lai5
669
+ lan2
670
+ lan3
671
+ lan4
672
+ lan5
673
+ lang1
674
+ lang2
675
+ lang3
676
+ lang4
677
+ lang5
678
+ lanr4
679
+ lao1
680
+ lao2
681
+ lao3
682
+ lao4
683
+ lao5
684
+ le4
685
+ le5
686
+ lei1
687
+ lei2
688
+ lei3
689
+ lei4
690
+ lei5
691
+ leng2
692
+ leng3
693
+ leng4
694
+ li2
695
+ li3
696
+ li4
697
+ li5
698
+ lia2
699
+ lia3
700
+ lian2
701
+ lian3
702
+ lian4
703
+ lian5
704
+ liang2
705
+ liang3
706
+ liang4
707
+ liang5
708
+ liao2
709
+ liao3
710
+ liao4
711
+ liao5
712
+ liar3
713
+ lie1
714
+ lie2
715
+ lie3
716
+ lie4
717
+ lie5
718
+ lin1
719
+ lin2
720
+ lin3
721
+ lin4
722
+ lin5
723
+ ling2
724
+ ling3
725
+ ling4
726
+ ling5
727
+ lir3
728
+ liu1
729
+ liu2
730
+ liu3
731
+ liu4
732
+ liu5
733
+ lo5
734
+ long2
735
+ long3
736
+ long4
737
+ long5
738
+ lou1
739
+ lou2
740
+ lou3
741
+ lou4
742
+ lou5
743
+ lu1
744
+ lu2
745
+ lu3
746
+ lu4
747
+ lu5
748
+ luan2
749
+ luan3
750
+ luan4
751
+ lun1
752
+ lun2
753
+ lun4
754
+ luo1
755
+ luo2
756
+ luo3
757
+ luo4
758
+ luo5
759
+ lv2
760
+ lv3
761
+ lv4
762
+ lv5
763
+ lve4
764
+ ma1
765
+ ma2
766
+ ma3
767
+ ma4
768
+ ma5
769
+ mai2
770
+ mai3
771
+ mai4
772
+ mai5
773
+ man2
774
+ man3
775
+ man4
776
+ mang2
777
+ mang3
778
+ mao1
779
+ mao2
780
+ mao3
781
+ mao4
782
+ mao5
783
+ me1
784
+ me5
785
+ mei1
786
+ mei2
787
+ mei3
788
+ mei4
789
+ mei5
790
+ men1
791
+ men2
792
+ men4
793
+ men5
794
+ meng1
795
+ meng2
796
+ meng3
797
+ meng4
798
+ menr2
799
+ menr5
800
+ mi1
801
+ mi2
802
+ mi3
803
+ mi4
804
+ mi5
805
+ mian2
806
+ mian3
807
+ mian4
808
+ mian5
809
+ miao1
810
+ miao2
811
+ miao3
812
+ miao4
813
+ mie1
814
+ mie4
815
+ min2
816
+ min3
817
+ ming2
818
+ ming3
819
+ ming4
820
+ ming5
821
+ mingr2
822
+ miu4
823
+ mo1
824
+ mo2
825
+ mo3
826
+ mo4
827
+ mo5
828
+ mou2
829
+ mou3
830
+ mou5
831
+ mu2
832
+ mu3
833
+ mu4
834
+ mu5
835
+ na2
836
+ na3
837
+ na4
838
+ na5
839
+ nai2
840
+ nai3
841
+ nai4
842
+ nai5
843
+ nan1
844
+ nan2
845
+ nan3
846
+ nan4
847
+ nan5
848
+ nang1
849
+ nang2
850
+ nang5
851
+ nao1
852
+ nao2
853
+ nao3
854
+ nao4
855
+ nao5
856
+ nar2
857
+ nar3
858
+ nar4
859
+ ne2
860
+ ne4
861
+ ne5
862
+ nei3
863
+ nei4
864
+ nen4
865
+ nen5
866
+ neng2
867
+ ng1
868
+ ni1
869
+ ni2
870
+ ni3
871
+ ni4
872
+ nian1
873
+ nian2
874
+ nian3
875
+ nian4
876
+ niang2
877
+ niang4
878
+ niang5
879
+ niao2
880
+ niao3
881
+ niao4
882
+ nie1
883
+ nie4
884
+ nin2
885
+ ning2
886
+ ning3
887
+ ning4
888
+ niu1
889
+ niu2
890
+ niu3
891
+ niu4
892
+ niu5
893
+ niur1
894
+ nong2
895
+ nong4
896
+ nong5
897
+ nu2
898
+ nu3
899
+ nu4
900
+ nuan2
901
+ nuan3
902
+ nuo2
903
+ nuo4
904
+ nv2
905
+ nv3
906
+ nv5
907
+ nve4
908
+ o1
909
+ o4
910
+ o5
911
+ ou1
912
+ ou2
913
+ ou3
914
+ ou4
915
+ pa1
916
+ pa2
917
+ pa4
918
+ pa5
919
+ pai1
920
+ pai2
921
+ pai4
922
+ pai5
923
+ pan1
924
+ pan2
925
+ pan4
926
+ pan5
927
+ pang1
928
+ pang2
929
+ pang4
930
+ pao1
931
+ pao2
932
+ pao3
933
+ pao4
934
+ pei1
935
+ pei2
936
+ pei4
937
+ pen1
938
+ pen2
939
+ pen4
940
+ peng1
941
+ peng2
942
+ peng3
943
+ peng4
944
+ peng5
945
+ pi1
946
+ pi2
947
+ pi3
948
+ pi4
949
+ pi5
950
+ pian1
951
+ pian2
952
+ pian4
953
+ pian5
954
+ piao1
955
+ piao2
956
+ piao3
957
+ piao4
958
+ pie1
959
+ pie2
960
+ pie3
961
+ pin1
962
+ pin2
963
+ pin3
964
+ pin4
965
+ ping1
966
+ ping2
967
+ ping5
968
+ pir2
969
+ po1
970
+ po2
971
+ po3
972
+ po4
973
+ po5
974
+ pou1
975
+ pu1
976
+ pu2
977
+ pu3
978
+ pu4
979
+ qi1
980
+ qi2
981
+ qi3
982
+ qi4
983
+ qi5
984
+ qia1
985
+ qia2
986
+ qia3
987
+ qia4
988
+ qian1
989
+ qian2
990
+ qian3
991
+ qian4
992
+ qian5
993
+ qiang1
994
+ qiang2
995
+ qiang3
996
+ qiang4
997
+ qiang5
998
+ qiao1
999
+ qiao2
1000
+ qiao3
1001
+ qiao4
1002
+ qiao5
1003
+ qie1
1004
+ qie2
1005
+ qie3
1006
+ qie4
1007
+ qie5
1008
+ qin1
1009
+ qin2
1010
+ qin3
1011
+ qin4
1012
+ qin5
1013
+ qing1
1014
+ qing2
1015
+ qing3
1016
+ qing4
1017
+ qing5
1018
+ qiong2
1019
+ qir4
1020
+ qiu1
1021
+ qiu2
1022
+ qiu3
1023
+ qiu5
1024
+ qu1
1025
+ qu2
1026
+ qu3
1027
+ qu4
1028
+ qu5
1029
+ quan1
1030
+ quan2
1031
+ quan3
1032
+ quan4
1033
+ quan5
1034
+ que1
1035
+ que2
1036
+ que4
1037
+ qun1
1038
+ qun2
1039
+ r
1040
+ ran2
1041
+ ran3
1042
+ ran5
1043
+ rang1
1044
+ rang2
1045
+ rang3
1046
+ rang4
1047
+ rang5
1048
+ rao2
1049
+ rao3
1050
+ rao4
1051
+ re2
1052
+ re3
1053
+ re4
1054
+ ren2
1055
+ ren3
1056
+ ren4
1057
+ ren5
1058
+ reng1
1059
+ reng2
1060
+ renr4
1061
+ ri4
1062
+ rong2
1063
+ rong3
1064
+ rou2
1065
+ rou4
1066
+ rou5
1067
+ ru2
1068
+ ru3
1069
+ ru4
1070
+ ruan2
1071
+ ruan3
1072
+ rui2
1073
+ rui3
1074
+ rui4
1075
+ run4
1076
+ run5
1077
+ ruo4
1078
+ sa1
1079
+ sa2
1080
+ sa3
1081
+ sa4
1082
+ sa5
1083
+ sai1
1084
+ sai4
1085
+ sai5
1086
+ san1
1087
+ san2
1088
+ san3
1089
+ san4
1090
+ sang1
1091
+ sang2
1092
+ sang3
1093
+ sang4
1094
+ sao1
1095
+ sao2
1096
+ sao3
1097
+ sao4
1098
+ sao5
1099
+ se4
1100
+ se5
1101
+ sen1
1102
+ seng1
1103
+ sha1
1104
+ sha2
1105
+ sha3
1106
+ sha4
1107
+ sha5
1108
+ shai1
1109
+ shai4
1110
+ shai5
1111
+ shan1
1112
+ shan2
1113
+ shan3
1114
+ shan4
1115
+ shang1
1116
+ shang2
1117
+ shang3
1118
+ shang4
1119
+ shang5
1120
+ shao1
1121
+ shao2
1122
+ shao3
1123
+ shao4
1124
+ shao5
1125
+ she1
1126
+ she2
1127
+ she3
1128
+ she4
1129
+ shei2
1130
+ shen1
1131
+ shen2
1132
+ shen3
1133
+ shen4
1134
+ shen5
1135
+ sheng1
1136
+ sheng2
1137
+ sheng3
1138
+ sheng4
1139
+ sheng5
1140
+ shi1
1141
+ shi2
1142
+ shi3
1143
+ shi4
1144
+ shi5
1145
+ shir4
1146
+ shou1
1147
+ shou2
1148
+ shou3
1149
+ shou4
1150
+ shou5
1151
+ shu1
1152
+ shu2
1153
+ shu3
1154
+ shu4
1155
+ shu5
1156
+ shua1
1157
+ shua2
1158
+ shua3
1159
+ shuai1
1160
+ shuai2
1161
+ shuai3
1162
+ shuai4
1163
+ shuai5
1164
+ shuan1
1165
+ shuan4
1166
+ shuan5
1167
+ shuang1
1168
+ shuang2
1169
+ shuang3
1170
+ shui2
1171
+ shui3
1172
+ shui4
1173
+ shun2
1174
+ shun3
1175
+ shun4
1176
+ shuo1
1177
+ shuo4
1178
+ shuo5
1179
+ si1
1180
+ si2
1181
+ si3
1182
+ si4
1183
+ si5
1184
+ sil
1185
+ song1
1186
+ song2
1187
+ song3
1188
+ song4
1189
+ sou1
1190
+ sou3
1191
+ sou4
1192
+ sou5
1193
+ sp1
1194
+ su1
1195
+ su2
1196
+ su4
1197
+ su5
1198
+ suan1
1199
+ suan4
1200
+ suan5
1201
+ sui1
1202
+ sui2
1203
+ sui3
1204
+ sui4
1205
+ sun1
1206
+ sun2
1207
+ sun3
1208
+ suo1
1209
+ suo2
1210
+ suo3
1211
+ suo5
1212
+ ta1
1213
+ ta2
1214
+ ta3
1215
+ ta4
1216
+ ta5
1217
+ tai1
1218
+ tai2
1219
+ tai4
1220
+ tai5
1221
+ tan1
1222
+ tan2
1223
+ tan3
1224
+ tan4
1225
+ tan5
1226
+ tang1
1227
+ tang2
1228
+ tang3
1229
+ tang4
1230
+ tang5
1231
+ tanr1
1232
+ tao1
1233
+ tao2
1234
+ tao3
1235
+ tao4
1236
+ tao5
1237
+ te4
1238
+ tei1
1239
+ teng2
1240
+ teng5
1241
+ ter4
1242
+ ti1
1243
+ ti2
1244
+ ti3
1245
+ ti4
1246
+ ti5
1247
+ tian1
1248
+ tian2
1249
+ tian3
1250
+ tianr1
1251
+ tiao1
1252
+ tiao2
1253
+ tiao3
1254
+ tiao4
1255
+ tie1
1256
+ tie2
1257
+ tie3
1258
+ tie4
1259
+ ting1
1260
+ ting2
1261
+ ting3
1262
+ ting5
1263
+ tong1
1264
+ tong2
1265
+ tong3
1266
+ tong4
1267
+ tong5
1268
+ tongr4
1269
+ tou1
1270
+ tou2
1271
+ tou4
1272
+ tou5
1273
+ tour2
1274
+ tu1
1275
+ tu2
1276
+ tu3
1277
+ tu4
1278
+ tu5
1279
+ tuan1
1280
+ tuan2
1281
+ tuan3
1282
+ tuan4
1283
+ tuan5
1284
+ tui1
1285
+ tui2
1286
+ tui3
1287
+ tui4
1288
+ tui5
1289
+ tun1
1290
+ tun2
1291
+ tun5
1292
+ tuo1
1293
+ tuo2
1294
+ tuo3
1295
+ tuo4
1296
+ tuo5
1297
+ tuor3
1298
+ wa1
1299
+ wa2
1300
+ wa3
1301
+ wa4
1302
+ wa5
1303
+ wai1
1304
+ wai2
1305
+ wai3
1306
+ wai4
1307
+ wan1
1308
+ wan2
1309
+ wan3
1310
+ wan4
1311
+ wan5
1312
+ wang1
1313
+ wang2
1314
+ wang3
1315
+ wang4
1316
+ wang5
1317
+ wanr1
1318
+ wanr2
1319
+ wei1
1320
+ wei2
1321
+ wei3
1322
+ wei4
1323
+ wei5
1324
+ weir4
1325
+ wen1
1326
+ wen2
1327
+ wen3
1328
+ wen4
1329
+ wen5
1330
+ weng1
1331
+ weng2
1332
+ weng3
1333
+ weng4
1334
+ wo1
1335
+ wo2
1336
+ wo3
1337
+ wo4
1338
+ wo5
1339
+ wu1
1340
+ wu2
1341
+ wu3
1342
+ wu4
1343
+ wu5
1344
+ xi1
1345
+ xi2
1346
+ xi3
1347
+ xi4
1348
+ xi5
1349
+ xia1
1350
+ xia2
1351
+ xia4
1352
+ xia5
1353
+ xian1
1354
+ xian2
1355
+ xian3
1356
+ xian4
1357
+ xiang1
1358
+ xiang2
1359
+ xiang3
1360
+ xiang4
1361
+ xiao1
1362
+ xiao2
1363
+ xiao3
1364
+ xiao4
1365
+ xiao5
1366
+ xie1
1367
+ xie2
1368
+ xie3
1369
+ xie4
1370
+ xie5
1371
+ xin1
1372
+ xin4
1373
+ xin5
1374
+ xing1
1375
+ xing2
1376
+ xing3
1377
+ xing4
1378
+ xing5
1379
+ xiong1
1380
+ xiong2
1381
+ xiong5
1382
+ xiu1
1383
+ xiu3
1384
+ xiu4
1385
+ xu1
1386
+ xu2
1387
+ xu3
1388
+ xu4
1389
+ xu5
1390
+ xuan1
1391
+ xuan2
1392
+ xuan3
1393
+ xuan4
1394
+ xue1
1395
+ xue2
1396
+ xue3
1397
+ xue4
1398
+ xun1
1399
+ xun2
1400
+ xun4
1401
+ ya1
1402
+ ya2
1403
+ ya3
1404
+ ya4
1405
+ ya5
1406
+ yan1
1407
+ yan2
1408
+ yan3
1409
+ yan4
1410
+ yang1
1411
+ yang2
1412
+ yang3
1413
+ yang4
1414
+ yang5
1415
+ yangr4
1416
+ yanr2
1417
+ yanr3
1418
+ yao1
1419
+ yao2
1420
+ yao3
1421
+ yao4
1422
+ yao5
1423
+ ye1
1424
+ ye2
1425
+ ye3
1426
+ ye4
1427
+ ye5
1428
+ yi1
1429
+ yi2
1430
+ yi3
1431
+ yi4
1432
+ yi5
1433
+ yin1
1434
+ yin2
1435
+ yin3
1436
+ yin4
1437
+ ying1
1438
+ ying2
1439
+ ying3
1440
+ ying4
1441
+ ying5
1442
+ yingr3
1443
+ yir4
1444
+ yir5
1445
+ yo1
1446
+ yo5
1447
+ yong1
1448
+ yong2
1449
+ yong3
1450
+ yong4
1451
+ yong5
1452
+ you1
1453
+ you2
1454
+ you3
1455
+ you4
1456
+ you5
1457
+ yu1
1458
+ yu2
1459
+ yu3
1460
+ yu4
1461
+ yu5
1462
+ yuan1
1463
+ yuan2
1464
+ yuan3
1465
+ yuan4
1466
+ yuan5
1467
+ yuanr4
1468
+ yue1
1469
+ yue4
1470
+ yue5
1471
+ yun1
1472
+ yun2
1473
+ yun3
1474
+ yun4
1475
+ za1
1476
+ za2
1477
+ za3
1478
+ zai1
1479
+ zai2
1480
+ zai3
1481
+ zai4
1482
+ zai5
1483
+ zan1
1484
+ zan2
1485
+ zan3
1486
+ zan4
1487
+ zang1
1488
+ zang4
1489
+ zao1
1490
+ zao2
1491
+ zao3
1492
+ zao4
1493
+ zao5
1494
+ zaor3
1495
+ ze2
1496
+ ze4
1497
+ zei2
1498
+ zen2
1499
+ zen3
1500
+ zeng1
1501
+ zeng4
1502
+ zha1
1503
+ zha2
1504
+ zha3
1505
+ zha4
1506
+ zha5
1507
+ zhai1
1508
+ zhai2
1509
+ zhai3
1510
+ zhai4
1511
+ zhan1
1512
+ zhan2
1513
+ zhan3
1514
+ zhan4
1515
+ zhang1
1516
+ zhang2
1517
+ zhang3
1518
+ zhang4
1519
+ zhao1
1520
+ zhao2
1521
+ zhao3
1522
+ zhao4
1523
+ zhe1
1524
+ zhe2
1525
+ zhe3
1526
+ zhe4
1527
+ zhe5
1528
+ zhei4
1529
+ zhen1
1530
+ zhen2
1531
+ zhen3
1532
+ zhen4
1533
+ zheng1
1534
+ zheng2
1535
+ zheng3
1536
+ zheng4
1537
+ zheng5
1538
+ zher4
1539
+ zhi1
1540
+ zhi2
1541
+ zhi3
1542
+ zhi4
1543
+ zhi5
1544
+ zhong1
1545
+ zhong2
1546
+ zhong3
1547
+ zhong4
1548
+ zhou1
1549
+ zhou2
1550
+ zhou3
1551
+ zhou4
1552
+ zhou5
1553
+ zhu1
1554
+ zhu2
1555
+ zhu3
1556
+ zhu4
1557
+ zhu5
1558
+ zhua1
1559
+ zhua3
1560
+ zhuai4
1561
+ zhuan1
1562
+ zhuan2
1563
+ zhuan3
1564
+ zhuan4
1565
+ zhuan5
1566
+ zhuang1
1567
+ zhuang4
1568
+ zhuang5
1569
+ zhui1
1570
+ zhui4
1571
+ zhun1
1572
+ zhun2
1573
+ zhun3
1574
+ zhunr3
1575
+ zhuo1
1576
+ zhuo2
1577
+ zhur3
1578
+ zi1
1579
+ zi2
1580
+ zi3
1581
+ zi4
1582
+ zi5
1583
+ zong1
1584
+ zong2
1585
+ zong3
1586
+ zong4
1587
+ zong5
1588
+ zou1
1589
+ zou2
1590
+ zou3
1591
+ zou4
1592
+ zu1
1593
+ zu2
1594
+ zu3
1595
+ zu5
1596
+ zuan1
1597
+ zuan2
1598
+ zuan3
1599
+ zuan4
1600
+ zui2
1601
+ zui3
1602
+ zui4
1603
+ zun1
1604
+ zuo1
1605
+ zuo2
1606
+ zuo3
1607
+ zuo4
1608
+ zuo5
gp.vocab ADDED
@@ -0,0 +1,4131 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
+
56
+
57
+
58
+
59
+
60
+
61
+
62
+
63
+
64
+
65
+
66
+
67
+
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+
80
+
81
+
82
+
83
+
84
+
85
+
86
+
87
+
88
+
89
+
90
+
91
+
92
+
93
+
94
+
95
+
96
+
97
+
98
+
99
+
100
+
101
+
102
+
103
+
104
+
105
+
106
+
107
+
108
+
109
+
110
+
111
+
112
+
113
+
114
+
115
+
116
+
117
+
118
+
119
+
120
+
121
+
122
+
123
+
124
+
125
+
126
+
127
+
128
+
129
+
130
+
131
+
132
+
133
+
134
+
135
+
136
+
137
+
138
+
139
+
140
+
141
+
142
+
143
+
144
+
145
+
146
+
147
+
148
+
149
+
150
+
151
+
152
+
153
+
154
+
155
+
156
+
157
+
158
+
159
+
160
+ 便
161
+
162
+
163
+
164
+
165
+
166
+
167
+
168
+
169
+
170
+
171
+
172
+
173
+
174
+
175
+
176
+
177
+
178
+
179
+
180
+
181
+
182
+
183
+
184
+
185
+
186
+
187
+
188
+
189
+
190
+
191
+
192
+
193
+
194
+
195
+
196
+
197
+
198
+
199
+
200
+
201
+
202
+
203
+
204
+
205
+
206
+
207
+
208
+
209
+
210
+
211
+
212
+
213
+
214
+
215
+
216
+
217
+
218
+
219
+
220
+
221
+
222
+
223
+
224
+
225
+
226
+
227
+
228
+
229
+
230
+
231
+
232
+
233
+ 簿
234
+
235
+
236
+
237
+
238
+
239
+
240
+
241
+
242
+
243
+
244
+
245
+
246
+
247
+
248
+
249
+
250
+
251
+
252
+
253
+
254
+
255
+
256
+
257
+
258
+
259
+
260
+
261
+
262
+
263
+
264
+
265
+
266
+
267
+
268
+
269
+
270
+
271
+
272
+
273
+
274
+
275
+
276
+
277
+
278
+
279
+
280
+
281
+
282
+
283
+
284
+
285
+
286
+
287
+
288
+
289
+
290
+
291
+
292
+
293
+
294
+
295
+
296
+
297
+
298
+
299
+
300
+
301
+
302
+
303
+
304
+
305
+
306
+
307
+
308
+
309
+
310
+
311
+
312
+
313
+
314
+
315
+
316
+
317
+
318
+
319
+
320
+
321
+
322
+
323
+
324
+
325
+
326
+
327
+
328
+
329
+
330
+
331
+
332
+
333
+
334
+
335
+
336
+
337
+
338
+
339
+
340
+
341
+
342
+
343
+
344
+
345
+
346
+
347
+
348
+
349
+
350
+
351
+
352
+
353
+
354
+
355
+
356
+
357
+
358
+
359
+
360
+
361
+
362
+
363
+
364
+
365
+
366
+
367
+
368
+
369
+
370
+
371
+
372
+
373
+
374
+
375
+
376
+
377
+
378
+
379
+
380
+
381
+
382
+
383
+
384
+
385
+
386
+ 齿
387
+
388
+
389
+
390
+
391
+
392
+
393
+
394
+
395
+
396
+
397
+
398
+
399
+
400
+
401
+
402
+
403
+
404
+
405
+
406
+
407
+
408
+
409
+
410
+
411
+
412
+
413
+
414
+
415
+
416
+
417
+
418
+
419
+
420
+
421
+
422
+
423
+
424
+
425
+ 穿
426
+
427
+
428
+
429
+
430
+
431
+
432
+
433
+
434
+
435
+
436
+
437
+
438
+
439
+
440
+
441
+
442
+
443
+
444
+
445
+
446
+
447
+
448
+
449
+
450
+
451
+
452
+
453
+
454
+
455
+
456
+
457
+
458
+
459
+
460
+
461
+
462
+
463
+
464
+
465
+
466
+
467
+
468
+
469
+
470
+
471
+
472
+
473
+
474
+
475
+
476
+
477
+
478
+
479
+
480
+
481
+
482
+
483
+
484
+ 蹿
485
+
486
+
487
+
488
+
489
+
490
+
491
+
492
+
493
+
494
+
495
+
496
+
497
+
498
+
499
+
500
+
501
+
502
+
503
+
504
+
505
+
506
+
507
+
508
+
509
+
510
+
511
+
512
+
513
+
514
+
515
+
516
+
517
+
518
+
519
+
520
+
521
+
522
+
523
+
524
+
525
+
526
+
527
+
528
+
529
+
530
+
531
+
532
+
533
+
534
+
535
+
536
+
537
+
538
+
539
+
540
+
541
+
542
+
543
+
544
+
545
+
546
+
547
+
548
+
549
+
550
+
551
+
552
+
553
+
554
+
555
+
556
+
557
+
558
+
559
+
560
+
561
+
562
+
563
+
564
+
565
+
566
+
567
+
568
+
569
+
570
+
571
+
572
+
573
+
574
+
575
+
576
+
577
+
578
+
579
+
580
+
581
+
582
+
583
+
584
+
585
+
586
+
587
+
588
+
589
+
590
+
591
+
592
+
593
+
594
+
595
+
596
+
597
+
598
+
599
+
600
+
601
+
602
+
603
+ 殿
604
+
605
+
606
+
607
+
608
+
609
+
610
+
611
+
612
+
613
+
614
+
615
+
616
+
617
+
618
+
619
+
620
+
621
+
622
+
623
+
624
+
625
+
626
+
627
+
628
+
629
+
630
+
631
+
632
+
633
+
634
+
635
+
636
+
637
+
638
+
639
+
640
+
641
+
642
+
643
+
644
+
645
+
646
+
647
+
648
+
649
+
650
+
651
+
652
+
653
+
654
+
655
+
656
+
657
+
658
+
659
+
660
+
661
+
662
+
663
+
664
+
665
+
666
+
667
+
668
+
669
+
670
+
671
+
672
+
673
+
674
+
675
+
676
+
677
+
678
+
679
+
680
+
681
+
682
+
683
+
684
+
685
+
686
+
687
+
688
+
689
+
690
+
691
+
692
+
693
+
694
+
695
+
696
+
697
+
698
+
699
+
700
+
701
+
702
+
703
+
704
+
705
+
706
+
707
+
708
+
709
+
710
+
711
+
712
+
713
+
714
+
715
+
716
+
717
+
718
+
719
+
720
+
721
+
722
+
723
+
724
+ 饿
725
+
726
+
727
+
728
+
729
+
730
+
731
+
732
+
733
+
734
+
735
+
736
+
737
+
738
+
739
+
740
+
741
+
742
+
743
+
744
+
745
+
746
+
747
+
748
+
749
+
750
+
751
+
752
+
753
+
754
+
755
+
756
+
757
+
758
+
759
+ 仿
760
+
761
+
762
+
763
+
764
+
765
+
766
+
767
+
768
+
769
+ 访
770
+
771
+
772
+
773
+
774
+
775
+
776
+
777
+
778
+
779
+
780
+
781
+
782
+
783
+
784
+
785
+
786
+
787
+
788
+
789
+
790
+
791
+
792
+
793
+
794
+
795
+
796
+
797
+
798
+
799
+
800
+
801
+
802
+
803
+
804
+
805
+
806
+
807
+
808
+
809
+
810
+
811
+
812
+
813
+
814
+
815
+
816
+
817
+
818
+
819
+
820
+
821
+
822
+
823
+
824
+
825
+
826
+
827
+
828
+
829
+
830
+
831
+
832
+
833
+
834
+
835
+
836
+
837
+
838
+
839
+
840
+
841
+
842
+
843
+
844
+
845
+
846
+
847
+
848
+
849
+
850
+
851
+
852
+
853
+
854
+
855
+
856
+
857
+
858
+
859
+
860
+
861
+
862
+
863
+
864
+
865
+
866
+
867
+
868
+
869
+
870
+
871
+
872
+
873
+
874
+
875
+
876
+
877
+
878
+ 竿
879
+
880
+
881
+
882
+
883
+
884
+
885
+
886
+
887
+
888
+
889
+
890
+
891
+
892
+ 稿
893
+
894
+
895
+
896
+
897
+
898
+
899
+
900
+
901
+
902
+
903
+
904
+
905
+
906
+
907
+
908
+
909
+
910
+
911
+
912
+
913
+
914
+
915
+
916
+
917
+
918
+
919
+
920
+
921
+
922
+
923
+
924
+
925
+
926
+
927
+
928
+
929
+
930
+
931
+
932
+
933
+
934
+
935
+
936
+
937
+
938
+
939
+
940
+
941
+
942
+
943
+
944
+
945
+
946
+
947
+
948
+
949
+
950
+
951
+
952
+
953
+
954
+
955
+
956
+
957
+
958
+
959
+
960
+
961
+
962
+
963
+
964
+
965
+
966
+
967
+
968
+
969
+
970
+
971
+
972
+
973
+
974
+
975
+
976
+
977
+
978
+
979
+
980
+
981
+
982
+
983
+
984
+
985
+
986
+
987
+
988
+
989
+
990
+
991
+
992
+
993
+
994
+
995
+ 广
996
+
997
+
998
+
999
+
1000
+
1001
+
1002
+
1003
+
1004
+
1005
+
1006
+
1007
+
1008
+
1009
+
1010
+
1011
+
1012
+
1013
+
1014
+
1015
+
1016
+
1017
+
1018
+
1019
+
1020
+
1021
+
1022
+
1023
+
1024
+
1025
+
1026
+
1027
+
1028
+
1029
+
1030
+
1031
+
1032
+
1033
+
1034
+
1035
+
1036
+
1037
+
1038
+
1039
+
1040
+
1041
+
1042
+
1043
+
1044
+
1045
+
1046
+
1047
+
1048
+
1049
+
1050
+
1051
+
1052
+
1053
+
1054
+
1055
+
1056
+
1057
+
1058
+
1059
+
1060
+
1061
+
1062
+
1063
+
1064
+
1065
+
1066
+
1067
+
1068
+
1069
+
1070
+
1071
+
1072
+
1073
+
1074
+
1075
+
1076
+
1077
+
1078
+
1079
+
1080
+
1081
+
1082
+
1083
+
1084
+
1085
+
1086
+
1087
+
1088
+
1089
+
1090
+
1091
+
1092
+
1093
+
1094
+
1095
+
1096
+
1097
+
1098
+
1099
+
1100
+
1101
+
1102
+
1103
+
1104
+
1105
+
1106
+
1107
+
1108
+ 鸿
1109
+
1110
+
1111
+
1112
+
1113
+
1114
+
1115
+
1116
+
1117
+
1118
+
1119
+
1120
+
1121
+
1122
+
1123
+
1124
+
1125
+
1126
+
1127
+
1128
+
1129
+
1130
+
1131
+
1132
+
1133
+
1134
+
1135
+
1136
+
1137
+
1138
+
1139
+
1140
+
1141
+
1142
+
1143
+
1144
+
1145
+
1146
+
1147
+
1148
+ 怀
1149
+
1150
+
1151
+
1152
+
1153
+
1154
+
1155
+
1156
+
1157
+
1158
+
1159
+
1160
+
1161
+
1162
+
1163
+
1164
+
1165
+
1166
+
1167
+
1168
+
1169
+
1170
+
1171
+
1172
+
1173
+
1174
+
1175
+
1176
+
1177
+
1178
+
1179
+
1180
+
1181
+
1182
+
1183
+
1184
+
1185
+
1186
+
1187
+
1188
+
1189
+
1190
+
1191
+
1192
+
1193
+
1194
+
1195
+
1196
+
1197
+
1198
+
1199
+
1200
+
1201
+
1202
+ 贿
1203
+
1204
+
1205
+
1206
+
1207
+
1208
+
1209
+
1210
+
1211
+
1212
+
1213
+
1214
+
1215
+
1216
+
1217
+
1218
+
1219
+
1220
+
1221
+
1222
+
1223
+
1224
+
1225
+
1226
+
1227
+
1228
+
1229
+
1230
+
1231
+
1232
+
1233
+
1234
+
1235
+
1236
+
1237
+
1238
+
1239
+
1240
+
1241
+
1242
+
1243
+
1244
+
1245
+
1246
+
1247
+
1248
+
1249
+
1250
+
1251
+
1252
+
1253
+
1254
+
1255
+
1256
+
1257
+
1258
+
1259
+
1260
+
1261
+
1262
+
1263
+
1264
+
1265
+
1266
+
1267
+
1268
+
1269
+
1270
+
1271
+
1272
+
1273
+
1274
+
1275
+
1276
+
1277
+
1278
+
1279
+
1280
+
1281
+
1282
+
1283
+
1284
+
1285
+
1286
+
1287
+
1288
+
1289
+
1290
+
1291
+
1292
+
1293
+
1294
+
1295
+
1296
+
1297
+
1298
+
1299
+
1300
+
1301
+
1302
+
1303
+
1304
+
1305
+
1306
+
1307
+
1308
+
1309
+
1310
+
1311
+
1312
+
1313
+
1314
+
1315
+
1316
+
1317
+
1318
+
1319
+
1320
+
1321
+
1322
+
1323
+
1324
+
1325
+
1326
+
1327
+
1328
+
1329
+
1330
+
1331
+
1332
+
1333
+
1334
+
1335
+
1336
+
1337
+
1338
+
1339
+
1340
+
1341
+
1342
+
1343
+
1344
+
1345
+
1346
+
1347
+
1348
+
1349
+
1350
+
1351
+
1352
+
1353
+
1354
+
1355
+
1356
+
1357
+
1358
+
1359
+
1360
+
1361
+
1362
+
1363
+
1364
+
1365
+
1366
+
1367
+
1368
+
1369
+ 轿
1370
+
1371
+
1372
+
1373
+
1374
+
1375
+
1376
+
1377
+
1378
+
1379
+
1380
+
1381
+
1382
+
1383
+
1384
+
1385
+
1386
+
1387
+
1388
+
1389
+
1390
+
1391
+
1392
+
1393
+
1394
+
1395
+
1396
+
1397
+
1398
+
1399
+
1400
+
1401
+
1402
+
1403
+
1404
+
1405
+
1406
+
1407
+
1408
+
1409
+
1410
+
1411
+
1412
+
1413
+
1414
+
1415
+
1416
+
1417
+
1418
+
1419
+
1420
+
1421
+
1422
+
1423
+
1424
+
1425
+
1426
+
1427
+
1428
+
1429
+
1430
+
1431
+
1432
+
1433
+
1434
+
1435
+
1436
+
1437
+
1438
+
1439
+
1440
+
1441
+
1442
+
1443
+
1444
+
1445
+
1446
+
1447
+
1448
+
1449
+
1450
+
1451
+
1452
+
1453
+
1454
+
1455
+
1456
+
1457
+
1458
+
1459
+
1460
+
1461
+
1462
+
1463
+
1464
+
1465
+
1466
+
1467
+
1468
+
1469
+
1470
+
1471
+
1472
+
1473
+
1474
+
1475
+
1476
+
1477
+
1478
+
1479
+
1480
+
1481
+
1482
+
1483
+
1484
+
1485
+
1486
+
1487
+
1488
+
1489
+
1490
+
1491
+
1492
+
1493
+
1494
+
1495
+
1496
+
1497
+
1498
+
1499
+
1500
+
1501
+
1502
+
1503
+
1504
+
1505
+
1506
+
1507
+
1508
+
1509
+
1510
+
1511
+
1512
+
1513
+
1514
+
1515
+
1516
+
1517
+
1518
+
1519
+
1520
+
1521
+
1522
+
1523
+
1524
+
1525
+
1526
+
1527
+
1528
+
1529
+
1530
+
1531
+
1532
+
1533
+
1534
+
1535
+
1536
+
1537
+
1538
+
1539
+
1540
+
1541
+
1542
+
1543
+
1544
+
1545
+
1546
+
1547
+
1548
+
1549
+
1550
+
1551
+
1552
+
1553
+
1554
+
1555
+
1556
+
1557
+
1558
+
1559
+
1560
+
1561
+
1562
+
1563
+
1564
+
1565
+
1566
+
1567
+
1568
+
1569
+
1570
+
1571
+
1572
+
1573
+
1574
+
1575
+
1576
+
1577
+
1578
+
1579
+
1580
+
1581
+
1582
+
1583
+
1584
+
1585
+
1586
+
1587
+
1588
+
1589
+
1590
+
1591
+
1592
+
1593
+
1594
+
1595
+
1596
+
1597
+
1598
+
1599
+
1600
+
1601
+
1602
+
1603
+
1604
+
1605
+
1606
+
1607
+
1608
+
1609
+
1610
+
1611
+
1612
+
1613
+
1614
+
1615
+
1616
+
1617
+
1618
+
1619
+
1620
+
1621
+
1622
+
1623
+
1624
+
1625
+
1626
+
1627
+
1628
+
1629
+
1630
+
1631
+
1632
+
1633
+
1634
+
1635
+
1636
+
1637
+
1638
+
1639
+
1640
+
1641
+
1642
+
1643
+
1644
+
1645
+
1646
+
1647
+
1648
+
1649
+
1650
+
1651
+
1652
+
1653
+
1654
+
1655
+
1656
+
1657
+
1658
+
1659
+
1660
+
1661
+
1662
+
1663
+
1664
+
1665
+
1666
+
1667
+
1668
+
1669
+
1670
+
1671
+
1672
+
1673
+
1674
+
1675
+
1676
+
1677
+
1678
+
1679
+
1680
+
1681
+
1682
+
1683
+
1684
+
1685
+
1686
+
1687
+
1688
+
1689
+
1690
+
1691
+
1692
+
1693
+
1694
+
1695
+
1696
+
1697
+
1698
+
1699
+
1700
+
1701
+
1702
+
1703
+
1704
+
1705
+
1706
+
1707
+
1708
+
1709
+
1710
+
1711
+
1712
+
1713
+
1714
+
1715
+
1716
+
1717
+
1718
+
1719
+
1720
+
1721
+
1722
+
1723
+
1724
+
1725
+
1726
+
1727
+
1728
+
1729
+
1730
+
1731
+
1732
+
1733
+
1734
+
1735
+
1736
+
1737
+
1738
+
1739
+
1740
+
1741
+
1742
+
1743
+
1744
+
1745
+
1746
+
1747
+
1748
+
1749
+
1750
+
1751
+
1752
+
1753
+
1754
+
1755
+
1756
+
1757
+
1758
+
1759
+
1760
+
1761
+
1762
+
1763
+
1764
+
1765
+
1766
+
1767
+
1768
+
1769
+
1770
+
1771
+
1772
+
1773
+
1774
+
1775
+
1776
+
1777
+
1778
+
1779
+
1780
+
1781
+
1782
+
1783
+
1784
+
1785
+
1786
+
1787
+
1788
+
1789
+
1790
+
1791
+
1792
+
1793
+
1794
+
1795
+
1796
+
1797
+
1798
+
1799
+
1800
+
1801
+
1802
+
1803
+
1804
+
1805
+
1806
+
1807
+
1808
+
1809
+
1810
+
1811
+
1812
+
1813
+
1814
+
1815
+
1816
+
1817
+
1818
+
1819
+
1820
+
1821
+
1822
+
1823
+
1824
+
1825
+
1826
+ 窿
1827
+
1828
+
1829
+
1830
+
1831
+
1832
+
1833
+
1834
+
1835
+
1836
+
1837
+
1838
+
1839
+
1840
+
1841
+
1842
+
1843
+
1844
+
1845
+
1846
+
1847
+
1848
+
1849
+
1850
+
1851
+
1852
+
1853
+
1854
+
1855
+
1856
+
1857
+
1858
+
1859
+
1860
+
1861
+
1862
+
1863
+ 鹿
1864
+
1865
+
1866
+
1867
+
1868
+
1869
+
1870
+
1871
+
1872
+
1873
+
1874
+
1875
+
1876
+
1877
+
1878
+
1879
+
1880
+
1881
+
1882
+
1883
+
1884
+
1885
+
1886
+
1887
+
1888
+
1889
+
1890
+
1891
+
1892
+
1893
+
1894
+
1895
+
1896
+
1897
+
1898
+
1899
+
1900
+
1901
+ 绿
1902
+
1903
+
1904
+
1905
+
1906
+
1907
+
1908
+
1909
+
1910
+
1911
+
1912
+
1913
+
1914
+
1915
+
1916
+
1917
+
1918
+
1919
+
1920
+
1921
+
1922
+
1923
+
1924
+
1925
+
1926
+
1927
+
1928
+
1929
+
1930
+
1931
+
1932
+
1933
+
1934
+
1935
+
1936
+
1937
+
1938
+
1939
+
1940
+
1941
+
1942
+
1943
+
1944
+
1945
+
1946
+
1947
+
1948
+
1949
+
1950
+
1951
+
1952
+
1953
+
1954
+
1955
+
1956
+
1957
+
1958
+
1959
+
1960
+
1961
+
1962
+
1963
+
1964
+
1965
+
1966
+
1967
+
1968
+
1969
+
1970
+
1971
+
1972
+
1973
+
1974
+
1975
+
1976
+
1977
+
1978
+
1979
+
1980
+
1981
+
1982
+
1983
+
1984
+
1985
+
1986
+
1987
+
1988
+
1989
+
1990
+
1991
+
1992
+
1993
+
1994
+
1995
+
1996
+
1997
+
1998
+
1999
+
2000
+
2001
+
2002
+
2003
+
2004
+
2005
+
2006
+
2007
+
2008
+
2009
+
2010
+
2011
+
2012
+
2013
+
2014
+
2015
+
2016
+
2017
+
2018
+
2019
+
2020
+
2021
+
2022
+
2023
+
2024
+
2025
+
2026
+
2027
+
2028
+
2029
+
2030
+
2031
+
2032
+
2033
+
2034
+
2035
+
2036
+
2037
+
2038
+
2039
+
2040
+
2041
+
2042
+
2043
+
2044
+
2045
+
2046
+
2047
+
2048
+
2049
+
2050
+
2051
+
2052
+
2053
+
2054
+
2055
+
2056
+
2057
+
2058
+
2059
+
2060
+
2061
+
2062
+
2063
+
2064
+
2065
+
2066
+
2067
+
2068
+
2069
+
2070
+
2071
+
2072
+
2073
+
2074
+
2075
+
2076
+
2077
+
2078
+
2079
+
2080
+
2081
+
2082
+
2083
+
2084
+
2085
+
2086
+
2087
+
2088
+
2089
+
2090
+
2091
+
2092
+
2093
+
2094
+
2095
+
2096
+
2097
+
2098
+
2099
+
2100
+
2101
+
2102
+
2103
+
2104
+
2105
+
2106
+
2107
+
2108
+
2109
+
2110
+
2111
+
2112
+
2113
+
2114
+
2115
+
2116
+
2117
+
2118
+
2119
+
2120
+
2121
+
2122
+
2123
+
2124
+
2125
+
2126
+
2127
+
2128
+
2129
+
2130
+
2131
+
2132
+
2133
+
2134
+
2135
+
2136
+
2137
+
2138
+
2139
+
2140
+
2141
+
2142
+
2143
+
2144
+
2145
+
2146
+ 尿
2147
+
2148
+
2149
+
2150
+
2151
+
2152
+
2153
+
2154
+
2155
+
2156
+
2157
+
2158
+
2159
+
2160
+
2161
+
2162
+
2163
+
2164
+
2165
+
2166
+
2167
+
2168
+
2169
+
2170
+
2171
+
2172
+
2173
+
2174
+
2175
+
2176
+
2177
+
2178
+
2179
+
2180
+
2181
+
2182
+
2183
+
2184
+
2185
+
2186
+
2187
+
2188
+
2189
+
2190
+
2191
+
2192
+
2193
+
2194
+
2195
+
2196
+
2197
+
2198
+
2199
+
2200
+
2201
+
2202
+
2203
+
2204
+
2205
+
2206
+
2207
+
2208
+
2209
+
2210
+
2211
+
2212
+
2213
+
2214
+
2215
+
2216
+
2217
+
2218
+
2219
+
2220
+
2221
+
2222
+
2223
+
2224
+
2225
+
2226
+
2227
+
2228
+
2229
+
2230
+
2231
+
2232
+
2233
+
2234
+
2235
+
2236
+
2237
+
2238
+
2239
+
2240
+
2241
+
2242
+
2243
+
2244
+
2245
+
2246
+
2247
+
2248
+
2249
+
2250
+
2251
+
2252
+
2253
+
2254
+
2255
+
2256
+
2257
+
2258
+
2259
+
2260
+
2261
+
2262
+
2263
+
2264
+
2265
+
2266
+
2267
+
2268
+
2269
+
2270
+
2271
+
2272
+
2273
+
2274
+
2275
+
2276
+
2277
+
2278
+
2279
+
2280
+
2281
+
2282
+
2283
+
2284
+
2285
+
2286
+
2287
+
2288
+
2289
+
2290
+
2291
+
2292
+
2293
+
2294
+
2295
+
2296
+
2297
+
2298
+
2299
+
2300
+
2301
+
2302
+
2303
+
2304
+
2305
+
2306
+
2307
+
2308
+
2309
+
2310
+
2311
+
2312
+
2313
+
2314
+
2315
+
2316
+
2317
+
2318
+
2319
+
2320
+
2321
+
2322
+
2323
+
2324
+
2325
+
2326
+
2327
+
2328
+
2329
+
2330
+
2331
+
2332
+
2333
+
2334
+
2335
+
2336
+
2337
+
2338
+
2339
+
2340
+
2341
+
2342
+
2343
+
2344
+
2345
+
2346
+
2347
+
2348
+
2349
+
2350
+
2351
+
2352
+
2353
+
2354
+
2355
+
2356
+
2357
+
2358
+
2359
+
2360
+
2361
+
2362
+
2363
+
2364
+
2365
+
2366
+
2367
+
2368
+
2369
+
2370
+
2371
+
2372
+
2373
+
2374
+
2375
+
2376
+
2377
+
2378
+
2379
+
2380
+
2381
+
2382
+
2383
+
2384
+
2385
+
2386
+
2387
+
2388
+
2389
+
2390
+
2391
+
2392
+
2393
+
2394
+
2395
+
2396
+
2397
+
2398
+
2399
+
2400
+
2401
+
2402
+
2403
+
2404
+
2405
+
2406
+
2407
+
2408
+
2409
+
2410
+
2411
+
2412
+
2413
+
2414
+
2415
+
2416
+
2417
+
2418
+
2419
+
2420
+
2421
+
2422
+
2423
+
2424
+
2425
+
2426
+
2427
+
2428
+
2429
+
2430
+
2431
+
2432
+
2433
+
2434
+
2435
+
2436
+
2437
+
2438
+
2439
+
2440
+
2441
+
2442
+
2443
+
2444
+
2445
+
2446
+
2447
+
2448
+
2449
+
2450
+
2451
+
2452
+
2453
+
2454
+
2455
+
2456
+
2457
+
2458
+
2459
+
2460
+
2461
+
2462
+
2463
+
2464
+
2465
+
2466
+
2467
+
2468
+
2469
+
2470
+
2471
+
2472
+
2473
+
2474
+
2475
+
2476
+
2477
+
2478
+
2479
+
2480
+
2481
+
2482
+
2483
+
2484
+
2485
+
2486
+
2487
+
2488
+
2489
+
2490
+
2491
+
2492
+
2493
+
2494
+
2495
+
2496
+
2497
+
2498
+
2499
+
2500
+
2501
+
2502
+
2503
+
2504
+
2505
+
2506
+
2507
+
2508
+
2509
+
2510
+
2511
+
2512
+
2513
+
2514
+
2515
+
2516
+
2517
+
2518
+
2519
+
2520
+
2521
+
2522
+
2523
+
2524
+
2525
+
2526
+
2527
+
2528
+
2529
+
2530
+
2531
+
2532
+
2533
+
2534
+
2535
+
2536
+
2537
+
2538
+
2539
+
2540
+
2541
+
2542
+
2543
+
2544
+
2545
+
2546
+
2547
+
2548
+
2549
+
2550
+
2551
+
2552
+
2553
+
2554
+
2555
+
2556
+
2557
+
2558
+
2559
+
2560
+
2561
+
2562
+
2563
+
2564
+
2565
+
2566
+
2567
+
2568
+
2569
+
2570
+
2571
+
2572
+
2573
+
2574
+
2575
+
2576
+
2577
+
2578
+
2579
+
2580
+
2581
+
2582
+
2583
+
2584
+
2585
+
2586
+
2587
+
2588
+
2589
+
2590
+
2591
+
2592
+
2593
+
2594
+
2595
+
2596
+
2597
+
2598
+
2599
+
2600
+
2601
+
2602
+
2603
+
2604
+
2605
+
2606
+
2607
+
2608
+
2609
+
2610
+
2611
+
2612
+
2613
+
2614
+
2615
+
2616
+
2617
+
2618
+
2619
+
2620
+
2621
+
2622
+
2623
+
2624
+
2625
+
2626
+
2627
+
2628
+
2629
+
2630
+
2631
+
2632
+
2633
+
2634
+
2635
+
2636
+
2637
+
2638
+
2639
+
2640
+
2641
+
2642
+
2643
+
2644
+
2645
+
2646
+
2647
+
2648
+
2649
+
2650
+
2651
+
2652
+
2653
+
2654
+
2655
+
2656
+
2657
+
2658
+
2659
+
2660
+
2661
+
2662
+
2663
+
2664
+
2665
+
2666
+
2667
+
2668
+
2669
+
2670
+
2671
+
2672
+
2673
+
2674
+
2675
+
2676
+
2677
+
2678
+
2679
+
2680
+
2681
+
2682
+
2683
+
2684
+
2685
+
2686
+
2687
+
2688
+
2689
+
2690
+
2691
+
2692
+
2693
+
2694
+
2695
+
2696
+
2697
+
2698
+
2699
+ 使
2700
+
2701
+
2702
+
2703
+
2704
+
2705
+
2706
+
2707
+
2708
+
2709
+
2710
+
2711
+
2712
+
2713
+
2714
+
2715
+
2716
+
2717
+
2718
+
2719
+
2720
+
2721
+
2722
+
2723
+
2724
+
2725
+
2726
+
2727
+ 湿
2728
+
2729
+
2730
+
2731
+
2732
+
2733
+
2734
+
2735
+
2736
+
2737
+
2738
+
2739
+
2740
+
2741
+
2742
+
2743
+
2744
+
2745
+
2746
+
2747
+
2748
+
2749
+
2750
+
2751
+ 寿
2752
+
2753
+
2754
+
2755
+
2756
+
2757
+
2758
+
2759
+
2760
+
2761
+
2762
+
2763
+
2764
+
2765
+
2766
+
2767
+
2768
+
2769
+
2770
+
2771
+
2772
+
2773
+
2774
+
2775
+
2776
+
2777
+
2778
+
2779
+
2780
+
2781
+
2782
+
2783
+
2784
+
2785
+
2786
+
2787
+
2788
+
2789
+
2790
+
2791
+
2792
+
2793
+
2794
+
2795
+
2796
+
2797
+
2798
+
2799
+
2800
+
2801
+
2802
+
2803
+
2804
+
2805
+
2806
+
2807
+
2808
+
2809
+
2810
+
2811
+
2812
+
2813
+
2814
+
2815
+
2816
+
2817
+
2818
+
2819
+
2820
+
2821
+
2822
+
2823
+
2824
+
2825
+
2826
+
2827
+
2828
+
2829
+ sil
2830
+
2831
+
2832
+
2833
+
2834
+
2835
+
2836
+
2837
+
2838
+
2839
+
2840
+
2841
+
2842
+
2843
+
2844
+
2845
+ sp1
2846
+
2847
+
2848
+
2849
+ 宿
2850
+
2851
+
2852
+
2853
+
2854
+
2855
+
2856
+
2857
+
2858
+
2859
+
2860
+
2861
+
2862
+
2863
+
2864
+
2865
+
2866
+
2867
+
2868
+
2869
+
2870
+
2871
+
2872
+
2873
+
2874
+
2875
+
2876
+
2877
+
2878
+
2879
+
2880
+
2881
+
2882
+
2883
+
2884
+
2885
+
2886
+
2887
+
2888
+
2889
+
2890
+
2891
+
2892
+
2893
+
2894
+
2895
+
2896
+
2897
+
2898
+
2899
+
2900
+
2901
+
2902
+
2903
+
2904
+
2905
+
2906
+
2907
+
2908
+
2909
+
2910
+
2911
+
2912
+
2913
+
2914
+
2915
+
2916
+
2917
+
2918
+
2919
+
2920
+
2921
+
2922
+
2923
+
2924
+
2925
+
2926
+
2927
+
2928
+
2929
+
2930
+
2931
+
2932
+
2933
+
2934
+
2935
+
2936
+
2937
+
2938
+
2939
+
2940
+
2941
+
2942
+
2943
+
2944
+
2945
+
2946
+
2947
+
2948
+
2949
+
2950
+
2951
+
2952
+
2953
+
2954
+
2955
+
2956
+
2957
+
2958
+
2959
+
2960
+
2961
+
2962
+
2963
+
2964
+
2965
+
2966
+
2967
+
2968
+
2969
+
2970
+
2971
+
2972
+
2973
+
2974
+
2975
+
2976
+
2977
+
2978
+
2979
+
2980
+
2981
+
2982
+
2983
+
2984
+
2985
+
2986
+
2987
+
2988
+
2989
+
2990
+
2991
+
2992
+
2993
+
2994
+
2995
+
2996
+
2997
+
2998
+
2999
+
3000
+
3001
+
3002
+
3003
+
3004
+
3005
+
3006
+
3007
+
3008
+
3009
+
3010
+
3011
+
3012
+
3013
+
3014
+
3015
+
3016
+
3017
+
3018
+
3019
+
3020
+
3021
+
3022
+
3023
+
3024
+
3025
+
3026
+
3027
+
3028
+
3029
+
3030
+
3031
+
3032
+
3033
+
3034
+
3035
+
3036
+
3037
+ 退
3038
+
3039
+
3040
+
3041
+
3042
+
3043
+
3044
+
3045
+
3046
+
3047
+
3048
+
3049
+
3050
+
3051
+
3052
+
3053
+
3054
+
3055
+
3056
+
3057
+
3058
+
3059
+
3060
+
3061
+
3062
+
3063
+
3064
+
3065
+
3066
+
3067
+
3068
+
3069
+
3070
+
3071
+
3072
+
3073
+
3074
+
3075
+
3076
+
3077
+
3078
+
3079
+
3080
+
3081
+
3082
+
3083
+
3084
+
3085
+
3086
+
3087
+
3088
+
3089
+
3090
+
3091
+
3092
+
3093
+
3094
+
3095
+
3096
+
3097
+
3098
+
3099
+
3100
+
3101
+
3102
+
3103
+
3104
+
3105
+
3106
+
3107
+
3108
+
3109
+
3110
+
3111
+
3112
+
3113
+
3114
+
3115
+
3116
+
3117
+
3118
+
3119
+
3120
+
3121
+
3122
+
3123
+
3124
+
3125
+
3126
+
3127
+
3128
+
3129
+
3130
+ 诿
3131
+
3132
+
3133
+
3134
+
3135
+
3136
+
3137
+
3138
+
3139
+
3140
+
3141
+
3142
+
3143
+
3144
+
3145
+
3146
+
3147
+
3148
+
3149
+
3150
+
3151
+
3152
+
3153
+
3154
+
3155
+
3156
+
3157
+
3158
+
3159
+
3160
+
3161
+
3162
+
3163
+
3164
+
3165
+
3166
+
3167
+
3168
+
3169
+
3170
+
3171
+
3172
+
3173
+
3174
+
3175
+
3176
+
3177
+
3178
+
3179
+
3180
+
3181
+
3182
+
3183
+
3184
+
3185
+
3186
+
3187
+
3188
+
3189
+
3190
+
3191
+
3192
+
3193
+
3194
+
3195
+
3196
+
3197
+
3198
+
3199
+
3200
+
3201
+
3202
+
3203
+
3204
+
3205
+
3206
+
3207
+
3208
+
3209
+
3210
+
3211
+
3212
+
3213
+
3214
+
3215
+
3216
+
3217
+
3218
+
3219
+
3220
+
3221
+
3222
+
3223
+
3224
+
3225
+
3226
+ 西
3227
+
3228
+
3229
+
3230
+
3231
+
3232
+
3233
+
3234
+
3235
+
3236
+
3237
+
3238
+
3239
+
3240
+
3241
+
3242
+
3243
+
3244
+
3245
+
3246
+
3247
+
3248
+
3249
+
3250
+
3251
+
3252
+
3253
+
3254
+
3255
+ 线
3256
+
3257
+
3258
+
3259
+
3260
+
3261
+
3262
+
3263
+
3264
+
3265
+
3266
+
3267
+
3268
+
3269
+
3270
+
3271
+
3272
+
3273
+
3274
+
3275
+
3276
+
3277
+
3278
+
3279
+
3280
+
3281
+
3282
+
3283
+
3284
+
3285
+
3286
+
3287
+
3288
+
3289
+
3290
+
3291
+
3292
+
3293
+
3294
+
3295
+
3296
+
3297
+
3298
+
3299
+
3300
+
3301
+
3302
+
3303
+
3304
+
3305
+
3306
+
3307
+
3308
+
3309
+
3310
+
3311
+
3312
+
3313
+
3314
+
3315
+
3316
+
3317
+
3318
+
3319
+
3320
+
3321
+
3322
+
3323
+
3324
+
3325
+
3326
+
3327
+
3328
+
3329
+
3330
+
3331
+
3332
+
3333
+
3334
+
3335
+
3336
+
3337
+
3338
+
3339
+
3340
+
3341
+
3342
+
3343
+
3344
+
3345
+
3346
+
3347
+
3348
+
3349
+
3350
+
3351
+
3352
+
3353
+
3354
+
3355
+
3356
+
3357
+
3358
+
3359
+
3360
+
3361
+
3362
+
3363
+
3364
+
3365
+
3366
+
3367
+
3368
+
3369
+
3370
+
3371
+
3372
+
3373
+
3374
+
3375
+
3376
+
3377
+
3378
+ 婿
3379
+
3380
+
3381
+
3382
+
3383
+
3384
+
3385
+
3386
+
3387
+
3388
+
3389
+
3390
+
3391
+
3392
+
3393
+
3394
+
3395
+
3396
+
3397
+
3398
+
3399
+
3400
+
3401
+
3402
+
3403
+
3404
+
3405
+
3406
+
3407
+
3408
+
3409
+
3410
+
3411
+
3412
+
3413
+
3414
+
3415
+
3416
+
3417
+
3418
+
3419
+
3420
+
3421
+
3422
+
3423
+
3424
+
3425
+
3426
+
3427
+
3428
+
3429
+
3430
+
3431
+
3432
+
3433
+
3434
+
3435
+
3436
+
3437
+
3438
+
3439
+
3440
+
3441
+
3442
+
3443
+
3444
+
3445
+
3446
+
3447
+
3448
+
3449
+
3450
+
3451
+
3452
+
3453
+
3454
+
3455
+
3456
+
3457
+
3458
+
3459
+ 嬿
3460
+
3461
+
3462
+
3463
+
3464
+
3465
+
3466
+
3467
+ 沿
3468
+
3469
+
3470
+
3471
+
3472
+
3473
+
3474
+
3475
+
3476
+
3477
+
3478
+
3479
+
3480
+
3481
+
3482
+
3483
+
3484
+
3485
+
3486
+
3487
+
3488
+
3489
+
3490
+
3491
+
3492
+
3493
+
3494
+
3495
+
3496
+
3497
+
3498
+
3499
+
3500
+
3501
+
3502
+
3503
+
3504
+
3505
+
3506
+
3507
+
3508
+
3509
+
3510
+
3511
+
3512
+
3513
+
3514
+
3515
+
3516
+
3517
+
3518
+
3519
+
3520
+
3521
+
3522
+
3523
+ 耀
3524
+
3525
+
3526
+
3527
+
3528
+
3529
+
3530
+
3531
+
3532
+
3533
+
3534
+
3535
+
3536
+
3537
+
3538
+
3539
+
3540
+
3541
+
3542
+
3543
+
3544
+
3545
+
3546
+
3547
+
3548
+
3549
+
3550
+
3551
+
3552
+
3553
+ 亿
3554
+
3555
+
3556
+
3557
+
3558
+
3559
+
3560
+
3561
+
3562
+
3563
+
3564
+
3565
+
3566
+
3567
+
3568
+
3569
+
3570
+
3571
+
3572
+
3573
+
3574
+
3575
+
3576
+
3577
+
3578
+
3579
+
3580
+
3581
+
3582
+
3583
+
3584
+
3585
+
3586
+
3587
+
3588
+
3589
+
3590
+
3591
+
3592
+
3593
+
3594
+
3595
+
3596
+
3597
+
3598
+
3599
+
3600
+
3601
+
3602
+
3603
+
3604
+
3605
+
3606
+
3607
+
3608
+
3609
+
3610
+
3611
+
3612
+
3613
+
3614
+
3615
+
3616
+
3617
+
3618
+
3619
+
3620
+
3621
+
3622
+
3623
+
3624
+
3625
+
3626
+
3627
+
3628
+
3629
+
3630
+
3631
+
3632
+
3633
+
3634
+
3635
+
3636
+
3637
+
3638
+
3639
+
3640
+
3641
+
3642
+
3643
+
3644
+
3645
+
3646
+
3647
+
3648
+
3649
+
3650
+
3651
+
3652
+
3653
+
3654
+
3655
+
3656
+
3657
+
3658
+
3659
+
3660
+
3661
+
3662
+
3663
+
3664
+
3665
+
3666
+
3667
+
3668
+
3669
+
3670
+
3671
+
3672
+
3673
+
3674
+
3675
+
3676
+
3677
+
3678
+
3679
+
3680
+
3681
+
3682
+
3683
+
3684
+
3685
+
3686
+
3687
+
3688
+
3689
+
3690
+
3691
+
3692
+
3693
+
3694
+
3695
+
3696
+
3697
+
3698
+
3699
+
3700
+
3701
+
3702
+
3703
+
3704
+
3705
+
3706
+
3707
+
3708
+ 屿
3709
+
3710
+
3711
+
3712
+
3713
+
3714
+
3715
+
3716
+
3717
+
3718
+
3719
+
3720
+
3721
+
3722
+
3723
+
3724
+
3725
+
3726
+
3727
+
3728
+
3729
+
3730
+
3731
+
3732
+
3733
+
3734
+
3735
+
3736
+
3737
+
3738
+
3739
+
3740
+
3741
+
3742
+
3743
+
3744
+
3745
+
3746
+
3747
+
3748
+
3749
+
3750
+
3751
+
3752
+
3753
+
3754
+
3755
+
3756
+
3757
+
3758
+
3759
+
3760
+
3761
+
3762
+
3763
+
3764
+
3765
+
3766
+
3767
+
3768
+
3769
+
3770
+
3771
+
3772
+
3773
+
3774
+
3775
+
3776
+
3777
+
3778
+
3779
+
3780
+
3781
+
3782
+
3783
+
3784
+
3785
+
3786
+
3787
+
3788
+
3789
+
3790
+
3791
+
3792
+
3793
+
3794
+
3795
+
3796
+
3797
+
3798
+
3799
+
3800
+
3801
+
3802
+
3803
+
3804
+
3805
+
3806
+
3807
+
3808
+
3809
+
3810
+
3811
+
3812
+
3813
+
3814
+
3815
+
3816
+
3817
+
3818
+
3819
+
3820
+
3821
+
3822
+
3823
+
3824
+
3825
+
3826
+
3827
+
3828
+
3829
+
3830
+
3831
+
3832
+
3833
+
3834
+
3835
+
3836
+
3837
+
3838
+
3839
+
3840
+
3841
+
3842
+
3843
+
3844
+
3845
+
3846
+
3847
+
3848
+
3849
+
3850
+
3851
+
3852
+
3853
+
3854
+
3855
+
3856
+
3857
+
3858
+
3859
+
3860
+
3861
+
3862
+
3863
+
3864
+
3865
+
3866
+
3867
+
3868
+
3869
+
3870
+
3871
+
3872
+
3873
+
3874
+
3875
+
3876
+
3877
+
3878
+
3879
+
3880
+
3881
+
3882
+
3883
+
3884
+
3885
+
3886
+
3887
+
3888
+
3889
+
3890
+
3891
+
3892
+
3893
+
3894
+
3895
+
3896
+
3897
+
3898
+
3899
+
3900
+
3901
+
3902
+
3903
+
3904
+
3905
+
3906
+
3907
+
3908
+
3909
+
3910
+
3911
+
3912
+
3913
+
3914
+
3915
+
3916
+
3917
+
3918
+
3919
+
3920
+
3921
+
3922
+
3923
+
3924
+
3925
+
3926
+
3927
+
3928
+
3929
+
3930
+
3931
+
3932
+
3933
+
3934
+
3935
+
3936
+
3937
+
3938
+
3939
+
3940
+
3941
+
3942
+
3943
+
3944
+
3945
+
3946
+
3947
+
3948
+
3949
+
3950
+
3951
+
3952
+
3953
+
3954
+
3955
+
3956
+
3957
+
3958
+
3959
+
3960
+
3961
+
3962
+
3963
+
3964
+
3965
+
3966
+
3967
+
3968
+
3969
+
3970
+
3971
+
3972
+
3973
+
3974
+
3975
+
3976
+
3977
+
3978
+
3979
+
3980
+
3981
+
3982
+
3983
+
3984
+
3985
+
3986
+
3987
+
3988
+
3989
+
3990
+
3991
+
3992
+
3993
+
3994
+
3995
+
3996
+
3997
+
3998
+
3999
+
4000
+
4001
+
4002
+
4003
+
4004
+
4005
+
4006
+
4007
+
4008
+
4009
+
4010
+
4011
+
4012
+
4013
+
4014
+
4015
+
4016
+
4017
+
4018
+
4019
+
4020
+
4021
+
4022
+
4023
+
4024
+
4025
+
4026
+
4027
+
4028
+
4029
+
4030
+
4031
+
4032
+
4033
+
4034
+
4035
+
4036
+
4037
+
4038
+
4039
+
4040
+
4041
+
4042
+
4043
+
4044
+
4045
+
4046
+
4047
+
4048
+
4049
+
4050
+
4051
+
4052
+
4053
+
4054
+
4055
+
4056
+
4057
+
4058
+
4059
+
4060
+
4061
+
4062
+
4063
+
4064
+
4065
+
4066
+
4067
+
4068
+
4069
+
4070
+
4071
+
4072
+
4073
+
4074
+
4075
+
4076
+
4077
+
4078
+
4079
+
4080
+
4081
+ 姿
4082
+
4083
+
4084
+
4085
+
4086
+
4087
+
4088
+
4089
+
4090
+
4091
+
4092
+
4093
+
4094
+
4095
+
4096
+
4097
+
4098
+
4099
+
4100
+
4101
+
4102
+
4103
+
4104
+
4105
+
4106
+
4107
+
4108
+
4109
+
4110
+
4111
+
4112
+
4113
+
4114
+
4115
+
4116
+
4117
+
4118
+
4119
+
4120
+
4121
+
4122
+
4123
+
4124
+
4125
+
4126
+
4127
+
4128
+
4129
+
4130
+
4131
+
mtts/__init__.py ADDED
@@ -0,0 +1 @@
 
 
1
+ from . import datasets, models, text
mtts/datasets/dataset.py ADDED
@@ -0,0 +1,207 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from typing import List, Union
3
+
4
+ import numpy as np
5
+ import torch
6
+ from torch import Tensor
7
+ from torch.utils.data import DataLoader, Dataset
8
+
9
+ from mtts.utils.logging import get_logger
10
+
11
+ logger = get_logger(__file__)
12
+
13
+
14
+ def pad_1D(inputs, PAD=0):
15
+ def pad_data(x, length, PAD):
16
+ x_padded = np.pad(x, (0, length - x.shape[0]), mode='constant', constant_values=PAD)
17
+ return x_padded
18
+
19
+ max_len = max((len(x) for x in inputs))
20
+ padded = np.stack([pad_data(x, max_len, PAD) for x in inputs])
21
+
22
+ return padded
23
+
24
+
25
+ def pad_2D(inputs, maxlen=None):
26
+ def pad(x, max_len):
27
+ PAD = 0
28
+ if np.shape(x)[0] > max_len:
29
+ raise ValueError("not max_len")
30
+
31
+ s = np.shape(x)[1]
32
+ x_padded = np.pad(x, (0, max_len - np.shape(x)[0]), mode='constant', constant_values=PAD)
33
+ return x_padded[:, :s]
34
+
35
+ if maxlen:
36
+ output = np.stack([pad(x, maxlen) for x in inputs])
37
+ else:
38
+ max_len = max(np.shape(x)[0] for x in inputs)
39
+ output = np.stack([pad(x, max_len) for x in inputs])
40
+
41
+ return output
42
+
43
+
44
+ class Tokenizer:
45
+ def __init__(self, vocab_file):
46
+ if vocab_file is None:
47
+ self.vocab = None
48
+ else:
49
+ self.vocab = open(vocab_file).read().split('\n')
50
+ self.v2i = {c: i for i, c in enumerate(self.vocab)}
51
+
52
+ def tokenize(self, text: Union[str, List]) -> Tensor:
53
+ if self.vocab is None: # direct mapping
54
+ if isinstance(text, str):
55
+ tokens = [int(t) for t in text.split()]
56
+ else:
57
+ tokens = [int(t) for t in text]
58
+
59
+ else:
60
+ if isinstance(text, str):
61
+ tokens = [self.v2i[t] for t in text.split()]
62
+ else:
63
+ tokens = [self.v2i[t] for t in text]
64
+ return torch.tensor(tokens)
65
+
66
+
67
+ def read_scp(scp_file):
68
+ with open(scp_file, 'rt') as f:
69
+ lines = f.read().split('\n')
70
+ name2value = {line.split()[0]: line.split()[1:] for line in lines if len(line) > 0}
71
+ return name2value
72
+
73
+
74
+ def check_duplicate(keys):
75
+ key_set0 = set(keys)
76
+ duplicate = None
77
+ if len(keys) != len(key_set0):
78
+ count = {k: 0 for k in key_set0}
79
+ for k in keys:
80
+ count[k] += 1
81
+ if count[k] >= 2:
82
+ duplicate = k
83
+ break
84
+ return duplicate
85
+ # raise ValueError('duplicated key detected: {duplicate}')
86
+
87
+
88
+ def check_keys(*args) -> None:
89
+ assert len(args) > 0
90
+ for kv in args:
91
+ dup = check_duplicate(list(kv.keys()))
92
+ if dup:
93
+ raise ValueError('duplicated key detected: {dup}:{kv[dup]}')
94
+
95
+ return None
96
+
97
+
98
+ class Dataset(Dataset):
99
+ def __init__(self, config, split='train'):
100
+ conf = config['dataset'][split]
101
+ self.name2wav = read_scp(conf['wav_scp'])
102
+ self.name2mel = read_scp(conf['mel_scp'])
103
+ self.name2dur = read_scp(conf['dur_scp'])
104
+
105
+ self.config = config
106
+
107
+ kv_to_check = [self.name2wav, self.name2mel, self.name2dur]
108
+
109
+ self.emb_scps = []
110
+ self.emb_tokenizers = []
111
+
112
+ for key in conf.keys():
113
+ if key.startswith('emb_type'):
114
+ name2emb = read_scp(conf[key]['scp'])
115
+ self.emb_scps += [name2emb]
116
+ emb_tok = Tokenizer(conf[key]['vocab'])
117
+ self.emb_tokenizers += [emb_tok]
118
+ logger.info('processed emb {}'.format(conf[key]['_name']))
119
+
120
+ kv_to_check += [name2emb]
121
+ check_keys(*kv_to_check)
122
+
123
+ self.names = [name for name in self.name2mel]
124
+ mel_size = {name: os.path.getsize(self.name2mel[name][0]) for name in self.names}
125
+
126
+ self.names = sorted(self.names, key=lambda x: mel_size[x])
127
+ logger.info(f'Shape of longest mel: {np.load(self.name2mel[self.names[-1]][0]).shape}')
128
+ logger.info(f'Shape of shortest mel: {np.load(self.name2mel[self.names[0]][0]).shape}')
129
+
130
+ def __len__(self):
131
+ return len(self.name2wav)
132
+
133
+ def __getitem__(self, idx):
134
+ key = self.names[idx]
135
+ token_tensor = []
136
+ for scp, tokenizer in zip(self.emb_scps, self.emb_tokenizers):
137
+ emb_text = scp[key]
138
+ tokens = tokenizer.tokenize(emb_text)
139
+ token_tensor.append(torch.unsqueeze(tokens, 0))
140
+ token_tensor = torch.cat(token_tensor, 0)
141
+ mel = np.load(self.name2mel[key][0])
142
+ if mel.shape[0] == self.config['fbank']['n_mels']:
143
+ mel = torch.tensor(mel.T)
144
+ else:
145
+ mel = torch.tensor(mel)
146
+
147
+ duration = torch.tensor([int(d) for d in self.name2dur[key]])
148
+ return token_tensor, duration, mel
149
+
150
+
151
+ def pad_1d_tensor(x, n):
152
+ if x.shape[0] >= n:
153
+ return x
154
+ x = torch.cat([x, torch.zeros((n - x.shape[0], ), dtype=x.dtype)], 0)
155
+ return x
156
+
157
+
158
+ def pad_2d_tensor(x, n):
159
+ if x.shape[1] >= n:
160
+ return x
161
+ x = torch.cat([x, torch.zeros((x.shape[0], n - x.shape[1]), dtype=x.dtype)], 1)
162
+ return x
163
+
164
+
165
+ def pad_mel(x, n):
166
+ if x.shape[0] >= n:
167
+ return x
168
+ x = torch.cat([x, torch.zeros((n - x.shape[0], x.shape[1]), dtype=x.dtype)], 0)
169
+ return x
170
+
171
+
172
+ def collate_fn(batch):
173
+
174
+ seq_len = []
175
+ mel_len = []
176
+ for (token_tensor, duration, mel) in batch:
177
+ seq_len.append(duration.shape[-1])
178
+ mel_len.append(mel.shape[0])
179
+
180
+ max_seq_len = max(seq_len)
181
+ max_mel_len = max(mel_len)
182
+ durations = []
183
+ token_tensors = []
184
+ mels = []
185
+ for token_tensor, duration, mel in batch:
186
+ duration = pad_1d_tensor(duration, max_seq_len)
187
+ durations.append(duration.unsqueeze_(0))
188
+ token_tensor = pad_2d_tensor(token_tensor, max_seq_len)
189
+ token_tensors.append(token_tensor.unsqueeze_(1))
190
+ mel = pad_mel(mel, max_mel_len)
191
+ mels.append(mel.unsqueeze_(0))
192
+
193
+ durations = torch.cat(durations, 0)
194
+ token_tensors = torch.cat(token_tensors, 1)
195
+ mels = torch.cat(mels, 0)
196
+
197
+ return token_tensors, durations, mels, torch.tensor(seq_len), torch.tensor(mel_len)
198
+
199
+
200
+ if __name__ == "__main__":
201
+ import yaml
202
+ with open('../../examples/aishell3/config.yaml') as f:
203
+ config = yaml.safe_load(f)
204
+ dataset = Dataset(config)
205
+ dataloader = DataLoader(dataset, batch_size=6, collate_fn=collate_fn)
206
+ batch = next(iter(dataloader))
207
+ print(type(batch[-1]))
mtts/loss.py ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ import torch.nn as nn
3
+
4
+
5
+ class FS2Loss(nn.Module):
6
+ def __init__(self):
7
+ super(FS2Loss, self).__init__()
8
+ self.mse_loss = nn.MSELoss()
9
+ self.mae_loss = nn.L1Loss()
10
+
11
+ def forward(self, d_pred, d_truth, mel_pred, mel_postnet, mel_truth, src_mask, mel_mask):
12
+ d_pred = d_pred.masked_select(src_mask)
13
+ d_truth = d_truth.masked_select(src_mask)
14
+
15
+ mel_pred = mel_pred.masked_select(mel_mask.unsqueeze(-1))
16
+ mel_postnet = mel_postnet.masked_select(mel_mask.unsqueeze(-1))
17
+ mel_truth = mel_truth.masked_select(mel_mask.unsqueeze(-1))
18
+
19
+ mel_loss = self.mse_loss(mel_pred, mel_truth) * 0.1
20
+ mel_postnet_loss = self.mse_loss(mel_postnet, mel_truth)
21
+ d_loss = self.mae_loss(d_pred, d_truth) * 0.01
22
+
23
+ return mel_loss, mel_postnet_loss, d_loss
mtts/models/__init__.py ADDED
@@ -0,0 +1 @@
 
 
1
+ from . import decoder, encoder, postnet, vocoder
mtts/models/decoder/__init__.py ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ from .decoder import Decoder
2
+ from .fs2_transformer_decoder import FS2TransformerDecoder
mtts/models/decoder/decoder.py ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch.nn as nn
2
+
3
+ from mtts.models.decoder.fs2_transformer_decoder import FS2TransformerDecoder
4
+ from mtts.utils.logging import get_logger
5
+
6
+ logger = get_logger(__file__)
7
+ DECODERS = [FS2TransformerDecoder]
8
+
9
+
10
+ class Decoder(nn.Module):
11
+ """
12
+ """
13
+ def __init__(self, decoder_type: str = 'FS2TransformerDecoder', **kwargs):
14
+ super(Decoder, self).__init__()
15
+ logger.info(f'decoder_type {decoder_type}')
16
+ decoder_class = eval(decoder_type)
17
+ assert decoder_class in DECODERS
18
+
19
+ self.decoder = decoder_class(**kwargs)
20
+
21
+ def forward(self, *args, **kwargs):
22
+ return self.decoder(*args, **kwargs)
mtts/models/decoder/fs2_transformer_decoder.py ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch.nn as nn
2
+ from torch import Tensor
3
+
4
+ from ..layers import FFTBlock, get_sinusoid_encoding_table
5
+
6
+
7
+ class FS2TransformerDecoder(nn.Module):
8
+ """ A decoder that accepts a list of sequences as input and
9
+ out a sequence as output. The input and output sequences share the same length
10
+
11
+ The input sequence is a list of tensors, which may contain text-embedding, speaker-embeddings.
12
+
13
+
14
+ """
15
+ def __init__(
16
+ self,
17
+ input_dim: int = 256, # must == decoder output dim
18
+ n_layers: int = 4,
19
+ n_heads: int = 2,
20
+ hidden_dim: int = 256,
21
+ d_inner: int = 1024,
22
+ dropout: float = 0.5,
23
+ max_len: int = 2048, # for computing position table
24
+ ):
25
+ super(FS2TransformerDecoder, self).__init__()
26
+
27
+ self.input_dim = input_dim
28
+ self.input_dim = input_dim
29
+
30
+ self.max_len = max_len
31
+
32
+ d_k = hidden_dim // n_heads
33
+ d_v = hidden_dim // n_heads
34
+
35
+ n_position = max_len + 1
36
+
37
+ # self.speaker_fc = nn.Linear(512, 256, bias=False)
38
+
39
+ pos_table = get_sinusoid_encoding_table(n_position, input_dim).unsqueeze(0)
40
+
41
+ self.position_enc = nn.Parameter(pos_table, requires_grad=False)
42
+ layers = []
43
+ for _ in range(n_layers):
44
+ layer = FFTBlock(hidden_dim, d_inner, n_heads, d_k, d_v, dropout=dropout)
45
+ layers.append(layer)
46
+
47
+ self.layers = nn.ModuleList(layers)
48
+
49
+ def forward(self, input: Tensor, mask):
50
+ batch_size, seq_len, input_dim = input.shape[0:3]
51
+ if input.shape[1] != seq_len:
52
+ raise ValueError('The input sequences must have the same length')
53
+ if input.shape[1] != seq_len:
54
+ raise ValueError('The input sequences must have the same dimension')
55
+
56
+ attn_mask = mask.unsqueeze(1).expand(-1, seq_len, -1)
57
+
58
+ if input.shape[1] > self.max_len:
59
+ raise ValueError('inputs.shape[1] > self.max_len')
60
+
61
+ pos_embed = self.position_enc[:, :seq_len, :].expand(batch_size, -1, -1)
62
+
63
+ output = input + pos_embed
64
+ for layer in self.layers:
65
+ output, dec_slf_attn = layer(output, mask=mask, attn_mask=attn_mask)
66
+
67
+ return output
mtts/models/encoder/__init__.py ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ from .encoder import Encoder
2
+ from .fs2_transformer_encoder import FS2TransformerEncoder
mtts/models/encoder/encoder.py ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # from mtts.models.fs2_model import ENCODERS
2
+ import torch.nn as nn
3
+
4
+ from mtts.utils.logging import get_logger
5
+
6
+ from .fs2_transformer_encoder import FS2TransformerEncoder
7
+
8
+ logger = get_logger(__file__)
9
+
10
+ ENCODERS = [FS2TransformerEncoder]
11
+
12
+
13
+ class Encoder(nn.Module):
14
+ ''' Encoder '''
15
+ def __init__(self, encoder_type: str = 'FS2TransformerEncoder', **kwargs):
16
+
17
+ super(Encoder, self).__init__()
18
+ logger.info(f'building encoder with type:{encoder_type}')
19
+ encoder_class = eval(encoder_type)
20
+ assert encoder_class in ENCODERS
21
+ self.config = kwargs
22
+ self.encoder = encoder_class(**kwargs)
23
+
24
+ def forward(self, *args, **kwargs):
25
+ return self.encoder(*args, **kwargs)
mtts/models/encoder/fs2_transformer_encoder.py ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import List
2
+
3
+ import torch.nn as nn
4
+ from torch import Tensor
5
+
6
+ from ..layers import FFTBlock, get_sinusoid_encoding_table
7
+
8
+
9
+ class FS2TransformerEncoder(nn.Module):
10
+ ''' FS2TransformerEncoder '''
11
+ def __init__(
12
+ self,
13
+ emb_layers: nn.ModuleList,
14
+ embeding_weights: List[float],
15
+ hidden_dim: int = 256,
16
+ n_layers: int = 4,
17
+ n_heads: int = 2,
18
+ d_inner: int = 1024,
19
+ dropout: float = 0.5,
20
+ max_len: int = 1024,
21
+ ):
22
+
23
+ super(FS2TransformerEncoder, self).__init__()
24
+
25
+ self.emb_layers = emb_layers
26
+ self.embeding_weights = embeding_weights
27
+ self.hidden_dim = hidden_dim
28
+
29
+ d_k = hidden_dim // n_heads
30
+ d_v = hidden_dim // n_heads
31
+ d_model = hidden_dim
32
+ self.layers = nn.ModuleList()
33
+ for _ in range(n_layers):
34
+ layer = FFTBlock(d_model, d_inner, n_heads, d_k, d_v, dropout=dropout)
35
+ self.layers.append(layer)
36
+
37
+ def forward(self, texts: List[Tensor], mask: Tensor):
38
+
39
+ if len(self.embeding_weights) != len(texts):
40
+ raise ValueError(f'Input texts has length {len(texts)}, \
41
+ but embedding module list has length {len(self.embeding_weights)}')
42
+ batch_size = texts[0].shape[0]
43
+ seq_len = texts[0].shape[1]
44
+ attn_mask = mask.unsqueeze(1).expand(-1, seq_len, -1)
45
+ text_embed = self.emb_layers[0](texts[0]) * self.embeding_weights[0]
46
+ n_embs = len(self.embeding_weights)
47
+ for i in range(1, n_embs):
48
+ text_embed += self.emb_layers[i](texts[i]) * self.embeding_weights[i]
49
+
50
+ if self.training:
51
+ pos_embed = get_sinusoid_encoding_table(seq_len, self.hidden_dim)
52
+ assert pos_embed.shape[0] == seq_len
53
+ pos_embed = pos_embed[:seq_len, :]
54
+ pos_embed = pos_embed.unsqueeze(0).expand(batch_size, -1, -1)
55
+ pos_embed = pos_embed.to(texts[0].device)
56
+ else:
57
+ pos_embed = self.position_enc[:, :seq_len, :]
58
+ pos_embed = pos_embed.expand(batch_size, -1, -1)
59
+
60
+ all_embed = text_embed + pos_embed
61
+
62
+ for layer in self.layers:
63
+ all_embed, enc_slf_attn = layer(all_embed, mask=mask, attn_mask=attn_mask)
64
+
65
+ return all_embed
mtts/models/fs2_model.py ADDED
@@ -0,0 +1,135 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import List, Optional
2
+
3
+ import torch
4
+ import torch.nn as nn
5
+ from torch import Tensor
6
+
7
+ from mtts.models.decoder import Decoder
8
+ from mtts.models.encoder import FS2TransformerEncoder
9
+ from mtts.models.fs2_variance import VarianceAdaptor
10
+ from mtts.models.postnet import PostNet
11
+ from mtts.utils.logging import get_logger
12
+
13
+ ENCODERS = [
14
+ FS2TransformerEncoder,
15
+ ]
16
+
17
+ logger = get_logger(__file__)
18
+
19
+
20
+ def __read_vocab(file):
21
+ with open(file) as f:
22
+ lines = f.read().split('\n')
23
+ lines = [line for line in lines if len(line) > 0]
24
+ return lines
25
+
26
+
27
+ def _get_layer(emb_config: dict): # -> Optional[List[nn.Module],List[float]]:
28
+ logger.info(f'building embedding with config: {emb_config}')
29
+ if emb_config['enable']:
30
+ if emb_config['vocab'] is None:
31
+ vocab_size = emb_config['vocab_size']
32
+ else:
33
+ vocab = __read_vocab(emb_config['vocab'])
34
+ vocab_size = len(vocab)
35
+ layer = nn.Embedding(vocab_size, emb_config['dim'], padding_idx=0)
36
+ return layer, emb_config['weight']
37
+ else:
38
+ return None, None
39
+
40
+
41
+ def _build_embedding_layers(config):
42
+ layers = nn.ModuleList()
43
+ weights = []
44
+ for c in (
45
+ config['pinyin_embedding'],
46
+ config['hanzi_embedding'],
47
+ config['speaker_embedding'],
48
+ ):
49
+
50
+ layer, weight = _get_layer(c)
51
+ if layer is not None:
52
+ layers.append(layer)
53
+ weights.append(weight)
54
+
55
+ return layers, weights
56
+
57
+
58
+ def get_mask_from_lengths(lengths, max_len=None):
59
+ batch_size = lengths.shape[0]
60
+ if max_len is None:
61
+ max_len = torch.max(lengths).item()
62
+ ids = torch.arange(0, max_len).unsqueeze(0).expand(batch_size, -1).to(lengths.device)
63
+ mask = (ids >= lengths.unsqueeze(1).expand(-1, max_len))
64
+
65
+ return mask
66
+
67
+
68
+ class FastSpeech2(nn.Module):
69
+ """ FastSpeech2 """
70
+ def __init__(self, config):
71
+ super(FastSpeech2, self).__init__()
72
+
73
+ emb_layers, emb_weights = _build_embedding_layers(config)
74
+
75
+ EncoderClass = eval(config['encoder']['encoder_type'])
76
+ assert EncoderClass in ENCODERS
77
+ encoder_conf = config['encoder']['conf']
78
+ encoder_conf.update({'emb_layers': emb_layers})
79
+ encoder_conf.update({'embeding_weights': emb_weights})
80
+ self.encoder = EncoderClass(**encoder_conf)
81
+
82
+ dur_config = config['duration_predictor']
83
+ self.variance_adaptor = VarianceAdaptor(**dur_config)
84
+
85
+ decoder_config = config['decoder']
86
+ self.decoder = Decoder(**decoder_config)
87
+
88
+ n_mels = config['fbank']['n_mels']
89
+ mel_linear_input_dim = decoder_config['hidden_dim']
90
+ self.mel_linear = nn.Linear(mel_linear_input_dim, n_mels)
91
+ self.postnet = PostNet(**config['postnet'], )
92
+
93
+ def forward(self,
94
+ input_seqs: List[Tensor],
95
+ seq_len: Tensor,
96
+ mel_len: Optional[Tensor] = None,
97
+ d_target: Optional[Tensor] = None,
98
+ max_src_len=None,
99
+ max_mel_len=None,
100
+ d_control=1.0,
101
+ p_control=1.0,
102
+ e_control=1.0):
103
+ src_mask = get_mask_from_lengths(seq_len, max_src_len)
104
+
105
+ if mel_len is not None:
106
+ mel_mask = get_mask_from_lengths(mel_len, max_mel_len)
107
+ else:
108
+ mel_mask = None
109
+
110
+ encoder_output = self.encoder(input_seqs, src_mask)
111
+
112
+ if d_target is not None:
113
+ variance_adaptor_output, d_prediction, _, _ = self.variance_adaptor(encoder_output, src_mask, mel_mask,
114
+ d_target, max_mel_len, d_control)
115
+ else:
116
+ variance_adaptor_output, d_prediction, mel_len, mel_mask = self.variance_adaptor(
117
+ encoder_output, src_mask, mel_mask, d_target, max_mel_len, d_control)
118
+
119
+ decoder_output = self.decoder(variance_adaptor_output, mel_mask)
120
+
121
+ mel_pred = self.mel_linear(decoder_output)
122
+ postnet_input = torch.unsqueeze(mel_pred, 1)
123
+ postnet_output = self.postnet(postnet_input) + mel_pred
124
+
125
+ return mel_pred, postnet_output, d_prediction, src_mask, mel_mask, mel_len
126
+
127
+
128
+ if __name__ == "__main__":
129
+ # Test
130
+ import yaml
131
+ with open('../../examples/aishell3/config.yaml') as f:
132
+ config = yaml.safe_load(f)
133
+ model = FastSpeech2(config)
134
+ print(model)
135
+ print(sum(param.numel() for param in model.parameters()))
mtts/models/fs2_variance.py ADDED
@@ -0,0 +1,189 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from collections import OrderedDict
2
+ from typing import Optional
3
+
4
+ import torch
5
+ import torch.nn as nn
6
+ import torch.nn.functional as F
7
+ from torch import Tensor
8
+
9
+
10
+ def get_mask_from_lengths(lengths, max_len=None):
11
+ batch_size = lengths.shape[0]
12
+ if max_len is None:
13
+ max_len = torch.max(lengths).item()
14
+ ids = torch.arange(0, max_len).unsqueeze(0).expand(batch_size, -1).to(lengths.device)
15
+ mask = (ids >= lengths.unsqueeze(1).expand(-1, max_len))
16
+
17
+ return mask
18
+
19
+
20
+ def pad(input_ele, mel_max_length=None):
21
+ if mel_max_length:
22
+ max_len = mel_max_length
23
+ else:
24
+ max_len = max([input_ele[i].size(0) for i in range(len(input_ele))])
25
+
26
+ out_list = list()
27
+ for i, batch in enumerate(input_ele):
28
+ if len(batch.shape) == 1:
29
+ one_batch_padded = F.pad(batch, (0, max_len - batch.size(0)), "constant", 0.0)
30
+ elif len(batch.shape) == 2:
31
+ one_batch_padded = F.pad(batch, (0, 0, 0, max_len - batch.size(0)), "constant", 0.0)
32
+ out_list.append(one_batch_padded)
33
+ out_padded = torch.stack(out_list)
34
+ return out_padded
35
+
36
+
37
+ # def clones(module, N):
38
+ # return nn.ModuleList([copy.deepcopy(module) for _ in range(N)])
39
+
40
+
41
+ class Conv(nn.Module):
42
+ """
43
+ Convolution Module
44
+ """
45
+ def __init__(self,
46
+ in_channels: int,
47
+ out_channels: int,
48
+ kernel_size: int = 1,
49
+ stride: int = 1,
50
+ padding: int = 0,
51
+ dilation: int = 1,
52
+ bias: bool = True,
53
+ w_init: str = 'linear'):
54
+ """
55
+ :param in_channels: dimension of input
56
+ :param out_channels: dimension of output
57
+ :param kernel_size: size of kernel
58
+ :param stride: size of stride
59
+ :param padding: size of padding
60
+ :param dilation: dilation rate
61
+ :param bias: boolean. if True, bias is included.
62
+ :param w_init: str. weight inits with xavier initialization.
63
+ """
64
+ super(Conv, self).__init__()
65
+
66
+ self.conv = nn.Conv1d(in_channels,
67
+ out_channels,
68
+ kernel_size=kernel_size,
69
+ stride=stride,
70
+ padding=padding,
71
+ dilation=dilation,
72
+ bias=bias)
73
+
74
+ def forward(self, x):
75
+ x = x.contiguous().transpose(1, 2)
76
+ x = self.conv(x)
77
+ x = x.contiguous().transpose(1, 2)
78
+
79
+ return x
80
+
81
+
82
+ class VarianceAdaptor(nn.Module):
83
+ """ Variance Adaptor """
84
+ def __init__(self,
85
+ duration_mean: float,
86
+ input_dim: int = 256,
87
+ filter_size: int = 256,
88
+ kernel_size: int = 3,
89
+ dropout: float = 0.5):
90
+ super(VarianceAdaptor, self).__init__()
91
+ self.duration_predictor = VariancePredictor(input_dim, filter_size, kernel_size, dropout)
92
+ self.length_regulator = LengthRegulator()
93
+ self.duration_mean = duration_mean
94
+
95
+ def forward(self,
96
+ x: Tensor,
97
+ src_mask: Tensor,
98
+ mel_mask: Optional[Tensor] = None,
99
+ duration_target: Optional[Tensor] = None,
100
+ max_len: Optional[int] = None,
101
+ d_control: float = 1.0):
102
+
103
+ log_duration_prediction = self.duration_predictor(x, src_mask)
104
+ if duration_target is not None:
105
+ duration_rounded = torch.clamp(torch.round((duration_target + self.duration_mean) * d_control), min=0)
106
+
107
+ x, mel_len = self.length_regulator(x, duration_rounded, max_len)
108
+ else:
109
+ # duration_rounded = torch.clamp(
110
+ # (torch.round(torch.exp(log_duration_prediction)-hp.log_offset)*d_control), min=0)
111
+ duration_rounded = torch.clamp(torch.round(
112
+ (log_duration_prediction.detach() + self.duration_mean) * d_control),
113
+ min=0)
114
+ # print('duration',duration_rounded)
115
+
116
+ x, mel_len = self.length_regulator(x, duration_rounded, max_len)
117
+ mel_mask = get_mask_from_lengths(mel_len)
118
+
119
+ return x, log_duration_prediction, mel_len, mel_mask
120
+
121
+
122
+ class LengthRegulator(nn.Module):
123
+ """ Length Regulator """
124
+ def __init__(self):
125
+ super(LengthRegulator, self).__init__()
126
+
127
+ def LR(self, x, duration, max_len):
128
+ output = list()
129
+ mel_len = list()
130
+ for batch, expand_target in zip(x, duration):
131
+ expanded = self.expand(batch, expand_target)
132
+ output.append(expanded)
133
+ mel_len.append(expanded.shape[0])
134
+
135
+ if max_len is not None:
136
+ output = pad(output, max_len)
137
+ else:
138
+ output = pad(output)
139
+
140
+ return output, torch.LongTensor(mel_len).to(x.device)
141
+
142
+ def expand(self, batch, predicted):
143
+ out = list()
144
+
145
+ for i, vec in enumerate(batch):
146
+ expand_size = predicted[i].item()
147
+ out.append(vec.expand(int(expand_size), -1))
148
+ out = torch.cat(out, 0)
149
+
150
+ return out
151
+
152
+ def forward(self, x, duration, max_len):
153
+ output, mel_len = self.LR(x, duration, max_len)
154
+ return output, mel_len
155
+
156
+
157
+ class VariancePredictor(nn.Module):
158
+ """ Duration, Pitch and Energy Predictor """
159
+ def __init__(self, encoder_dim: int = 256, filter_size: int = 256, kernel_size: int = 3, dropout: float = 0.5):
160
+ super(VariancePredictor, self).__init__()
161
+
162
+ self.input_size = encoder_dim
163
+ self.filter_size = filter_size
164
+ self.kernel = kernel_size
165
+ self.conv_output_size = filter_size
166
+ self.dropout = dropout
167
+
168
+ self.conv_layer = nn.Sequential(
169
+ OrderedDict([("conv1d_1",
170
+ Conv(self.input_size,
171
+ self.filter_size,
172
+ kernel_size=self.kernel,
173
+ padding=(self.kernel - 1) // 2)), ("relu_1", nn.LeakyReLU()),
174
+ ("layer_norm_1", nn.LayerNorm(self.filter_size)), ("dropout_1", nn.Dropout(self.dropout)),
175
+ ("conv1d_2", Conv(self.filter_size, self.filter_size, kernel_size=self.kernel, padding=1)),
176
+ ("relu_2", nn.LeakyReLU()), ("layer_norm_2", nn.LayerNorm(self.filter_size)),
177
+ ("dropout_2", nn.Dropout(self.dropout))]))
178
+
179
+ self.linear_layer = nn.Linear(self.conv_output_size, 1)
180
+
181
+ def forward(self, encoder_output, mask):
182
+ out = self.conv_layer(encoder_output)
183
+ out = self.linear_layer(out)
184
+ out = out.squeeze(-1)
185
+
186
+ if mask is not None:
187
+ out = out.masked_fill(mask, 0.)
188
+
189
+ return out
mtts/models/layers.py ADDED
@@ -0,0 +1,170 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Optional
2
+
3
+ import numpy as np
4
+ import torch
5
+ import torch.nn as nn
6
+ import torch.nn.functional as F
7
+ from torch import Tensor
8
+
9
+
10
+ def get_sinusoid_encoding_table(n_position, d_hid, padding_idx=None):
11
+ ''' Sinusoid position encoding table '''
12
+ def cal_angle(position, hid_idx):
13
+ return position / np.power(10000, 2 * (hid_idx // 2) / d_hid)
14
+
15
+ def get_posi_angle_vec(position):
16
+ return [cal_angle(position, hid_j) for hid_j in range(d_hid)]
17
+
18
+ sinusoid_table = np.array([get_posi_angle_vec(pos_i) for pos_i in range(n_position)])
19
+
20
+ sinusoid_table[:, 0::2] = np.sin(sinusoid_table[:, 0::2]) # dim 2i
21
+ sinusoid_table[:, 1::2] = np.cos(sinusoid_table[:, 1::2]) # dim 2i+1
22
+
23
+ if padding_idx is not None:
24
+ # zero vector for padding dimension
25
+ sinusoid_table[padding_idx] = 0.
26
+
27
+ return torch.FloatTensor(sinusoid_table)
28
+
29
+
30
+ class ScaledDotProductAttention(nn.Module):
31
+ ''' Scaled Dot-Product Attention '''
32
+ def __init__(self, temperature):
33
+ super().__init__()
34
+ self.temperature = temperature
35
+ self.softmax = nn.Softmax(dim=2)
36
+
37
+ def forward(self, q, k, v, mask=None):
38
+
39
+ attn = torch.bmm(q, k.transpose(1, 2))
40
+ attn = attn / self.temperature
41
+ if mask is not None:
42
+ attn = attn.masked_fill(mask, -np.inf)
43
+
44
+ attn = self.softmax(attn)
45
+ output = torch.bmm(attn, v)
46
+
47
+ return output, attn
48
+
49
+
50
+ class MultiHeadAttention(nn.Module):
51
+ ''' Multi-Head Attention module '''
52
+ def __init__(self, n_head, d_model, d_k, d_v, dropout=0.1):
53
+ super().__init__()
54
+
55
+ self.n_head = n_head
56
+ self.d_k = d_k
57
+ self.d_v = d_v
58
+
59
+ self.w_qs = nn.Linear(d_model, n_head * d_k)
60
+ self.w_ks = nn.Linear(d_model, n_head * d_k)
61
+ self.w_vs = nn.Linear(d_model, n_head * d_v)
62
+
63
+ self.attention = ScaledDotProductAttention(temperature=np.power(d_k, 0.5))
64
+ self.layer_norm = nn.LayerNorm(d_model)
65
+
66
+ self.fc = nn.Linear(n_head * d_v, d_model)
67
+
68
+ self.dropout = nn.Dropout(dropout)
69
+
70
+ def forward(self, q: Tensor, k: Tensor, v: Tensor, mask: Optional[Tensor] = None):
71
+
72
+ d_k, d_v, n_head = self.d_k, self.d_v, self.n_head
73
+
74
+ sz_b, len_q, _ = q.size()
75
+ sz_b, len_k, _ = k.size()
76
+ sz_b, len_v, _ = v.size()
77
+
78
+ residual = q
79
+
80
+ q = self.w_qs(q).view(sz_b, len_q, n_head, d_k)
81
+ k = self.w_ks(k).view(sz_b, len_k, n_head, d_k)
82
+ v = self.w_vs(v).view(sz_b, len_v, n_head, d_v)
83
+ q = q.permute(2, 0, 1, 3).contiguous().view(-1, len_q, d_k) # (n*b) x lq x dk
84
+ k = k.permute(2, 0, 1, 3).contiguous().view(-1, len_k, d_k) # (n*b) x lk x dk
85
+ v = v.permute(2, 0, 1, 3).contiguous().view(-1, len_v, d_v) # (n*b) x lv x dv
86
+
87
+ mask = mask.repeat(n_head, 1, 1).to(q.device)
88
+ output, attn = self.attention(q, k, v, mask=mask)
89
+
90
+ output = output.view(n_head, sz_b, len_q, d_v)
91
+ output = output.permute(1, 2, 0, 3).contiguous().view(sz_b, len_q, -1) # b x lq x (n*dv)
92
+
93
+ output = self.dropout(self.fc(output))
94
+ output = self.layer_norm(output + residual)
95
+
96
+ return output, attn
97
+
98
+
99
+ class PositionwiseFeedForward(nn.Module):
100
+ ''' A two-feed-forward-layer module '''
101
+ def __init__(self, d_in: int, d_hid: int, kernel_size: int = 9, dropout: float = 0.1):
102
+ super().__init__()
103
+
104
+ # Use Conv1D
105
+ # position-wise
106
+ self.w_1 = nn.Conv1d(d_in, d_hid, kernel_size=kernel_size, padding=(kernel_size - 1) // 2)
107
+ # position-wise
108
+ self.w_2 = nn.Conv1d(d_hid, d_in, kernel_size=1, padding=0)
109
+
110
+ self.layer_norm = nn.LayerNorm(d_in)
111
+ self.dropout = nn.Dropout(dropout)
112
+
113
+ def forward(self, x: Tensor):
114
+ residual = x
115
+ output = x.transpose(1, 2)
116
+ output = self.w_2(F.relu(self.w_1(output)))
117
+ output = output.transpose(1, 2)
118
+ output = self.dropout(output)
119
+ output = self.layer_norm(output + residual)
120
+
121
+ return output
122
+
123
+
124
+ class FFTBlock(torch.nn.Module):
125
+ """FFT Block"""
126
+ def __init__(self, d_model: int, d_inner: int, n_head: int, d_k: int, d_v: int, dropout: float = 0.1):
127
+ super(FFTBlock, self).__init__()
128
+
129
+ self.slf_attn = MultiHeadAttention(n_head, d_model, d_k, d_v, dropout=dropout)
130
+ self.pos_ffn = PositionwiseFeedForward(d_model, d_inner, dropout=dropout)
131
+
132
+ def forward(self, enc_input: Tensor, mask: Optional[Tensor] = None, attn_mask: Optional[Tensor] = None):
133
+
134
+ enc_output, enc_slf_attn = self.slf_attn(enc_input, enc_input, enc_input, mask=attn_mask)
135
+ enc_output = enc_output.masked_fill(mask.unsqueeze(-1), 0)
136
+
137
+ enc_output = self.pos_ffn(enc_output)
138
+ enc_output = enc_output.masked_fill(mask.unsqueeze(-1), 0)
139
+
140
+ return enc_output, enc_slf_attn
141
+
142
+
143
+ class ConvNorm(torch.nn.Module):
144
+ def __init__(self,
145
+ in_channels,
146
+ out_channels,
147
+ kernel_size=1,
148
+ stride=1,
149
+ padding=None,
150
+ dilation=1,
151
+ bias=True,
152
+ w_init_gain='linear'):
153
+ super(ConvNorm, self).__init__()
154
+
155
+ if padding is None:
156
+ assert (kernel_size % 2 == 1)
157
+ padding = int(dilation * (kernel_size - 1) / 2)
158
+
159
+ self.conv = torch.nn.Conv1d(in_channels,
160
+ out_channels,
161
+ kernel_size=kernel_size,
162
+ stride=stride,
163
+ padding=padding,
164
+ dilation=dilation,
165
+ bias=bias)
166
+
167
+ def forward(self, signal):
168
+ conv_signal = self.conv(signal)
169
+
170
+ return conv_signal
mtts/models/postnet/__init__.py ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ from .postnet import PostNet
2
+ from .postnet_1d import PostNet1d
3
+ from .postnet_unet import PostUNet
mtts/models/postnet/postnet.py ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch.nn as nn
2
+
3
+ from .postnet_1d import PostNet1d
4
+ from .postnet_unet import PostUNet
5
+
6
+ POSTNETS = [PostNet1d, PostUNet]
7
+
8
+
9
+ class PostNet(nn.Module):
10
+ """
11
+ Interface class for postnets
12
+ """
13
+ def __init__(self, postnet_type: str = 'PostUNet', **kwargs):
14
+
15
+ super(PostNet, self).__init__()
16
+ PostNetClass = eval(postnet_type)
17
+ assert PostNetClass in POSTNETS
18
+ self.postnet = PostNetClass(**kwargs)
19
+ self.config = kwargs
20
+
21
+ def forward(self, x, **kwargs):
22
+ return self.postnet(x, **kwargs)
mtts/models/postnet/postnet_1d.py ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ import torch.nn as nn
3
+ import torch.nn.functional as F
4
+
5
+ from ..layers import ConvNorm
6
+
7
+
8
+ class PostNet1d(nn.Module):
9
+ """
10
+ PostNet: Five 1-d convolution with 512 channels and kernel size 5
11
+ """
12
+ def __init__(self, n_mel_channels=80, postnet_embedding_dim=512, postnet_kernel_size=7, postnet_n_convolutions=7):
13
+
14
+ super(PostNet1d, self).__init__()
15
+ self.convolutions = nn.ModuleList()
16
+
17
+ self.convolutions.append(
18
+ nn.Sequential(
19
+ ConvNorm(n_mel_channels,
20
+ postnet_embedding_dim,
21
+ kernel_size=postnet_kernel_size,
22
+ stride=1,
23
+ padding=int((postnet_kernel_size - 1) / 2),
24
+ dilation=1,
25
+ w_init_gain='tanh'), nn.InstanceNorm1d(postnet_embedding_dim)))
26
+
27
+ for i in range(1, postnet_n_convolutions - 1):
28
+ self.convolutions.append(
29
+ nn.Sequential(
30
+ ConvNorm(postnet_embedding_dim,
31
+ postnet_embedding_dim,
32
+ kernel_size=postnet_kernel_size,
33
+ stride=1,
34
+ padding=int((postnet_kernel_size - 1) / 2),
35
+ dilation=1,
36
+ w_init_gain='tanh'), nn.InstanceNorm1d(postnet_embedding_dim)))
37
+
38
+ self.convolutions.append(
39
+ nn.Sequential(
40
+ ConvNorm(postnet_embedding_dim,
41
+ n_mel_channels,
42
+ kernel_size=postnet_kernel_size,
43
+ stride=1,
44
+ padding=int((postnet_kernel_size - 1) / 2),
45
+ dilation=1,
46
+ w_init_gain='linear'), nn.InstanceNorm1d(n_mel_channels)))
47
+
48
+ def forward(self, x):
49
+ x = x.contiguous().transpose(1, 2)
50
+
51
+ for i in range(len(self.convolutions) - 1):
52
+ x = F.dropout(torch.tanh(self.convolutions[i](x)), 0.1, self.training)
53
+ x = F.dropout(self.convolutions[-1](x), 0.1, self.training)
54
+
55
+ x = x.contiguous().transpose(1, 2)
56
+ return x
mtts/models/postnet/postnet_unet.py ADDED
@@ -0,0 +1,117 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ import torch.nn as nn
3
+ import torch.nn.functional as F
4
+
5
+
6
+ class double_res_conv(nn.Module):
7
+ def __init__(self, in_ch, out_ch, bn=False):
8
+ super(double_res_conv, self).__init__()
9
+ self.conv1 = nn.Sequential(
10
+ nn.Conv2d(in_ch, out_ch, 3, padding=1),
11
+ nn.InstanceNorm2d(out_ch),
12
+ )
13
+ self.conv2 = nn.Sequential(
14
+ nn.Conv2d(out_ch, out_ch, 3, padding=1),
15
+ nn.InstanceNorm2d(out_ch),
16
+ )
17
+
18
+ self.relu = nn.LeakyReLU(0.1)
19
+
20
+ def forward(self, x):
21
+
22
+ x1 = self.conv1(x)
23
+ x2 = self.conv2(x1)
24
+ x3 = self.relu(x2)
25
+
26
+ return x3
27
+
28
+
29
+ class inconv(nn.Module):
30
+ def __init__(self, in_ch, out_ch, bn=True):
31
+ super(inconv, self).__init__()
32
+
33
+ self.conv = double_res_conv(in_ch, out_ch, bn)
34
+
35
+ def forward(self, x):
36
+
37
+ x = self.conv(x)
38
+ return x
39
+
40
+
41
+ class down(nn.Module):
42
+ def __init__(self, in_ch, out_ch, bn=True):
43
+ super(down, self).__init__()
44
+ self.mpconv = nn.Sequential(nn.AvgPool2d(2), double_res_conv(in_ch, out_ch, bn))
45
+
46
+ def forward(self, x):
47
+ x = self.mpconv(x)
48
+ return x
49
+
50
+
51
+ class up(nn.Module):
52
+ def __init__(self, in_ch, out_ch, bilinear=True, bn=True):
53
+ super(up, self).__init__()
54
+
55
+ self.bilinear = bilinear
56
+ if not bilinear:
57
+ self.up = nn.ConvTranspose2d(in_ch // 2, in_ch // 2, 2, stride=2)
58
+
59
+ self.conv = double_res_conv(in_ch, out_ch, bn)
60
+
61
+ def forward(self, x1, x2):
62
+ if not self.bilinear:
63
+ x1 = self.up(x1)
64
+ else:
65
+ x1 = nn.functional.interpolate(x1, scale_factor=2, mode='bilinear', align_corners=True)
66
+
67
+ diffY = x2.size()[2] - x1.size()[2]
68
+ diffX = x2.size()[3] - x1.size()[3]
69
+
70
+ x1 = F.pad(x1, (diffX // 2, diffX - diffX // 2, diffY // 2, diffY - diffY // 2))
71
+
72
+ x = torch.cat([x2, x1], dim=1)
73
+ x = self.conv(x)
74
+ return x
75
+
76
+
77
+ class outconv(nn.Module):
78
+ def __init__(self, in_ch, out_ch):
79
+ super(outconv, self).__init__()
80
+ self.conv = nn.Conv2d(in_ch, out_ch, 1, padding=0)
81
+
82
+ def forward(self, x):
83
+ x = self.conv(x)
84
+
85
+ return x
86
+
87
+
88
+ class PostUNet(nn.Module):
89
+ def __init__(self, n_channels=1, scale=1):
90
+ super(PostUNet, self).__init__()
91
+
92
+ self.inc = inconv(n_channels, 64 // scale)
93
+ self.down1 = down(64 // scale, 128 // scale)
94
+ self.down2 = down(128 // scale, 256 // scale)
95
+ self.down3 = down(256 // scale, 512 // scale)
96
+ self.down4 = down(512 // scale, 512 // scale)
97
+
98
+ self.up1 = up(1024 // scale, 256 // scale)
99
+ self.up2 = up(512 // scale, 128 // scale)
100
+ self.up3 = up(256 // scale, 64 // scale)
101
+ self.up4 = up(128 // scale, 32 // scale)
102
+
103
+ self.reduce = outconv(32 // scale, 1)
104
+
105
+ def forward(self, x0):
106
+ x1 = self.inc(x0)
107
+ x2 = self.down1(x1)
108
+ x3 = self.down2(x2)
109
+ x4 = self.down3(x3)
110
+ x5 = self.down4(x4)
111
+ x = self.up1(x5, x4)
112
+ x = self.up2(x, x3)
113
+ x = self.up3(x, x2)
114
+ x = self.up4(x, x1)
115
+ x = self.reduce(x)
116
+ x = x[:, 0, :, :]
117
+ return x
mtts/models/vocoder/VocGAN/LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) 2020 Rishikesh
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.
mtts/models/vocoder/VocGAN/README.md ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Modified VocGAN
2
+ <noscript><a href="https://liberapay.com/rishikksh20/donate"><img alt="Donate using Liberapay" src="https://liberapay.com/assets/widgets/donate.svg"></a></noscript> <br />
3
+ This repo implements modified version of [VocGAN: A High-Fidelity Real-time Vocoder with a Hierarchically-nested Adversarial Network](https://arxiv.org/abs/2007.15256) using Pytorch, for actual VocGAN checkout to `baseline` branch. I bit modify the VocGAN's generator and used Full-Band MelGAN's discriminator instead of VocGAN's discriminator, as in my research I found MelGAN's discriminator is very fast while training and enough powerful to train Generator to produce high fidelity voice whereas VocGAN Hierarchically-nested JCU discriminator is quite huge and extremely slows the training process.
4
+
5
+ ![](./assets/vocgan.JPG)
6
+
7
+ Tested on Python 3.6
8
+ ```bash
9
+ pip install -r requirements.txt
10
+ ```
11
+
12
+ ## Prepare Dataset
13
+
14
+ - Download dataset for training. This can be any wav files with sample rate 22050Hz. (e.g. LJSpeech was used in paper)
15
+ - preprocess: `python preprocess.py -c config/default.yaml -d [data's root path]`
16
+ - Edit configuration `yaml` file
17
+
18
+ ## Train & Tensorboard
19
+
20
+ - `python trainer.py -c [config yaml file] -n [name of the run]`
21
+ - `cp config/default.yaml config/config.yaml` and then edit `config.yaml`
22
+ - Write down the root path of train/validation files to 2nd/3rd line.
23
+
24
+ - `tensorboard --logdir logs/`
25
+
26
+ ## Notes
27
+ 1) This repo implements modified VocGAN for faster training although for true VocGAN implementation please checkout `baseline` branch, In my testing I am available to generate High-Fidelity audio in real time from Modified VocGAN.
28
+ 2) Training cost for `baseline` VocGAN's `Discriminator` is too high (2.8 sec/it on P100 with batch size 16) as compared to `Generator` (7.2 it/sec on P100 with batch size 16), so it's unfeasible for me to train this model for long time.
29
+ 3) May be we can optimizer `baseline` VocGAN's Discriminator by downsampling the audio on pre-processing stage instead of Training stage (currently I used `torchaudio.transform.Resample` as layer for downsampling the audio), this step might be speed-up overall `Discriminator` training.
30
+ 4) I trained `baseline` model for 300 epochs (with batch size 16) on LJSpeech, and quality of generated audio is similar to the MelGAN at same epoch on same dataset. Author recommend to train model till 3000 epochs which is not feasible at current training speed `(2.80 sec/it)`.
31
+ 5) I am open for any suggestion and modification on this repo.
32
+
33
+ ## Inference
34
+
35
+ - `python inference.py -p [checkpoint path] -i [input mel path]`
36
+
37
+
38
+ ## Pretrained models
39
+ Two pretrained model are provided. Both pretrained models are trained using modified-VocGAN structure.
40
+ * [LJSpeech-1.1](https://keithito.com/LJ-Speech-Dataset/) (English, single-female speaker, trained for 4000 epochs) \[ [download](https://drive.google.com/file/d/1YCXTbPtVQ3aev7KsL0Cv0kZguEMKZuQp/view?usp=sharing) \]
41
+ * [KSS dataset](https://www.kaggle.com/bryanpark/korean-single-speaker-speech-dataset) (Korean, single-female speaker, trained for 4500 epochs) \[ [download](https://drive.google.com/file/d/1RIqMyj9vSCcGaRgAKrVB5Duvw22N6IXJ/view?usp=sharing) \]
42
+ * [VCTK](https://datashare.ed.ac.uk/handle/10283/3443) (English, multispeaker, trained for 3180 epochs) \[[download](https://drive.google.com/file/d/1nfD84ot7o3u2tFR7YkSp2vQWVnNJ-md_/view?usp=sharing)\]
43
+
44
+ ## Audio Samples
45
+ Using pretrained models, we can reconstruct audio samples. Visit [here](https://drive.google.com/drive/folders/1QRS9BOQeOXV1aJHdz0ccoKzgfXJFbIKm?usp=sharing) to listen.
46
+
47
+
48
+ ## Results
49
+ [WIP]
50
+
51
+ ## References
52
+ - [VocGAN](https://arxiv.org/abs/2007.15256)
53
+ - [Multi-band MelGAN](https://arxiv.org/abs/2005.05106)
54
+ - [MelGAN](https://arxiv.org/abs/1910.06711)
55
+ - [Pytorch implementation of melgan](https://github.com/seungwonpark/melgan)
56
+ - [Official implementation of melgan](https://github.com/descriptinc/melgan-neurips)
57
+ - [Multi, Full-band melgan implementation](https://github.com/rishikksh20/melgan)
58
+ - [Nvidia's pre-processing](https://github.com/NVIDIA/tacotron2)
59
+ - [WaveRNN](https://github.com/fatchord/WaveRNN)
60
+
mtts/models/vocoder/VocGAN/__init__.py ADDED
@@ -0,0 +1 @@
 
 
1
+ from .vocgan import VocGan
mtts/models/vocoder/VocGAN/assets/melgan.JPG ADDED
mtts/models/vocoder/VocGAN/assets/vocgan.JPG ADDED
mtts/models/vocoder/VocGAN/config/default.yaml ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ data: # root path of train/validation data (either relative/absoulte path is ok)
2
+ train: 'H:\Deepsync\backup\deepsync\LJSpeech-1.1\wavs'
3
+ validation: 'H:\Deepsync\backup\deepsync\LJSpeech-1.1\valid'
4
+ mel_path: 'H:\Deepsync\backup\fastspeech\data\mels'
5
+ eval_path: ''
6
+ ---
7
+ train:
8
+ rep_discriminator: 1
9
+ discriminator_train_start_steps: 100000
10
+ num_workers: 8
11
+ batch_size: 16
12
+ optimizer: 'adam'
13
+ adam:
14
+ lr: 0.0001
15
+ beta1: 0.5
16
+ beta2: 0.9
17
+ ---
18
+ audio:
19
+ n_mel_channels: 80
20
+ segment_length: 16000
21
+ pad_short: 2000
22
+ filter_length: 1024
23
+ hop_length: 256 # WARNING: this can't be changed.
24
+ win_length: 1024
25
+ sampling_rate: 22050
26
+ mel_fmin: 0.0
27
+ mel_fmax: 8000.0
28
+ ---
29
+ model:
30
+ feat_match: 10.0
31
+ lambda_adv: 1
32
+ use_subband_stft_loss: False
33
+ feat_loss: False
34
+ out_channels: 1
35
+ generator_ratio: [4, 4, 2, 2, 2, 2] # for 256 hop size and 22050 sample rate
36
+ mult: 256
37
+ n_residual_layers: 4
38
+ num_D : 3
39
+ ndf : 16
40
+ n_layers: 3
41
+ downsampling_factor: 4
42
+ disc_out: 512
43
+
44
+ stft_loss_params:
45
+ fft_sizes: [1024, 2048, 512] # List of FFT size for STFT-based loss.
46
+ hop_sizes: [120, 240, 50] # List of hop size for STFT-based loss
47
+ win_lengths: [600, 1200, 240] # List of window length for STFT-based loss.
48
+ window: "hann_window" # Window function for STFT-based loss
49
+ subband_stft_loss_params:
50
+ fft_sizes: [384, 683, 171] # List of FFT size for STFT-based loss.
51
+ hop_sizes: [30, 60, 10] # List of hop size for STFT-based loss
52
+ win_lengths: [150, 300, 60] # List of window length for STFT-based loss.
53
+ window: "hann_window" # Window function for STFT-based loss
54
+ ---
55
+ log:
56
+ summary_interval: 1
57
+ validation_interval: 5
58
+ save_interval: 20
59
+ chkpt_dir: 'chkpt'
60
+ log_dir: 'logs'
mtts/models/vocoder/VocGAN/datasets/dataloader.py ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import glob
3
+ import torch
4
+ import random
5
+ import numpy as np
6
+ from torch.utils.data import Dataset, DataLoader
7
+ import torchaudio
8
+ from utils.utils import read_wav_np
9
+
10
+
11
+ def create_dataloader(hp, args, train):
12
+ dataset = MelFromDisk(hp, args, train)
13
+
14
+ if train:
15
+ return DataLoader(dataset=dataset, batch_size=hp.train.batch_size, shuffle=True,
16
+ num_workers=hp.train.num_workers, pin_memory=True, drop_last=True)
17
+ else:
18
+ return DataLoader(dataset=dataset, batch_size=1, shuffle=False,
19
+ num_workers=0, pin_memory=False, drop_last=False)
20
+
21
+
22
+ class MelFromDisk(Dataset):
23
+ def __init__(self, hp, args, train):
24
+ self.hp = hp
25
+ self.args = args
26
+ self.train = train
27
+ self.path = hp.data.train if train else hp.data.validation
28
+ self.wav_list = glob.glob(os.path.join(self.path, '**', '*.wav'), recursive=True)
29
+ #print("Wavs path :", self.path)
30
+ #print(self.hp.data.mel_path)
31
+ #print("Length of wavelist :", len(self.wav_list))
32
+ self.mel_segment_length = hp.audio.segment_length // hp.audio.hop_length + 2
33
+ self.mapping = [i for i in range(len(self.wav_list))]
34
+
35
+ def __len__(self):
36
+ return len(self.wav_list)
37
+
38
+ def __getitem__(self, idx):
39
+
40
+ if self.train:
41
+ idx1 = idx
42
+ idx2 = self.mapping[idx1]
43
+ return self.my_getitem(idx1), self.my_getitem(idx2)
44
+ else:
45
+ return self.my_getitem(idx)
46
+
47
+ def shuffle_mapping(self):
48
+ random.shuffle(self.mapping)
49
+
50
+ def my_getitem(self, idx):
51
+ wavpath = self.wav_list[idx]
52
+ id = os.path.basename(wavpath).split(".")[0]
53
+
54
+ mel_path = "{}/{}.npy".format(self.hp.data.mel_path, id)
55
+
56
+ sr, audio = read_wav_np(wavpath)
57
+ if len(audio) < self.hp.audio.segment_length + self.hp.audio.pad_short:
58
+ audio = np.pad(audio, (0, self.hp.audio.segment_length + self.hp.audio.pad_short - len(audio)), \
59
+ mode='constant', constant_values=0.0)
60
+
61
+ audio = torch.from_numpy(audio).unsqueeze(0)
62
+ # mel = torch.load(melpath).squeeze(0) # # [num_mel, T]
63
+
64
+ mel = torch.from_numpy(np.load(mel_path))
65
+
66
+ if self.train:
67
+ max_mel_start = mel.size(1) - self.mel_segment_length
68
+ mel_start = random.randint(0, max_mel_start)
69
+ mel_end = mel_start + self.mel_segment_length
70
+ mel = mel[:, mel_start:mel_end]
71
+
72
+ audio_start = mel_start * self.hp.audio.hop_length
73
+ audio = audio[:, audio_start:audio_start+self.hp.audio.segment_length]
74
+
75
+ audio = audio + (1/32768) * torch.randn_like(audio)
76
+ return mel, audio
77
+
78
+
79
+ def collate_fn(batch):
80
+
81
+ sr = 22050
82
+ # perform padding and conversion to tensor
83
+ mels_g = [x[0][0] for x in batch]
84
+ audio_g = [x[0][1] for x in batch]
85
+
86
+ mels_g = torch.stack(mels_g)
87
+ audio_g = torch.stack(audio_g)
88
+
89
+ sub_orig_1 = torchaudio.transforms.Resample(sr, (sr // 2))(audio_g)
90
+ sub_orig_2 = torchaudio.transforms.Resample(sr, (sr // 4))(audio_g)
91
+ sub_orig_3 = torchaudio.transforms.Resample(sr, (sr // 8))(audio_g)
92
+ sub_orig_4 = torchaudio.transforms.Resample(sr, (sr // 16))(audio_g)
93
+
94
+ mels_d = [x[1][0] for x in batch]
95
+ audio_d = [x[1][1] for x in batch]
96
+ mels_d = torch.stack(mels_d)
97
+ audio_d = torch.stack(audio_d)
98
+ sub_orig_1_d = torchaudio.transforms.Resample(sr, (sr // 2))(audio_d)
99
+ sub_orig_2_d = torchaudio.transforms.Resample(sr, (sr // 4))(audio_d)
100
+ sub_orig_3_d = torchaudio.transforms.Resample(sr, (sr // 8))(audio_d)
101
+ sub_orig_4_d = torchaudio.transforms.Resample(sr, (sr // 16))(audio_d)
102
+
103
+ return [mels_g, audio_g, sub_orig_1, sub_orig_2, sub_orig_3, sub_orig_4],\
104
+ [mels_d, audio_d, sub_orig_1_d, sub_orig_2_d, sub_orig_3_d, sub_orig_4_d]
mtts/models/vocoder/VocGAN/denoiser.py ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import sys
2
+ import torch
3
+ from .utils.stft import STFT
4
+
5
+
6
+ class Denoiser(torch.nn.Module):
7
+ """ Removes model bias from audio produced with waveglow """
8
+
9
+ def __init__(self, melgan, filter_length=1024, n_overlap=4,
10
+ win_length=1024, mode='zeros',device='cpu'):
11
+ super(Denoiser, self).__init__()
12
+ self.stft = STFT(filter_length=filter_length,
13
+ hop_length=int(filter_length/n_overlap),
14
+ win_length=win_length,device=device).to(device)
15
+ if mode == 'zeros':
16
+ mel_input = torch.zeros(
17
+ (1, 80, 88)).to(device)
18
+ elif mode == 'normal':
19
+ mel_input = torch.randn(
20
+ (1, 80, 88)).to(device)
21
+ else:
22
+ raise Exception("Mode {} if not supported".format(mode))
23
+
24
+ with torch.no_grad():
25
+ bias_audio = melgan.inference(mel_input).float() # [B, 1, T]
26
+
27
+ bias_spec, _ = self.stft.transform(bias_audio.squeeze(0))
28
+
29
+ self.register_buffer('bias_spec', bias_spec[:, :, 0][:, :, None])
30
+ self.device = device
31
+ self.to(device)
32
+
33
+ def forward(self, audio, strength=0.1):
34
+ audio_spec, audio_angles = self.stft.transform(audio.to(self.device).float())
35
+ audio_spec_denoised = audio_spec.to(self.device) - self.bias_spec * strength
36
+ audio_spec_denoised = torch.clamp(audio_spec_denoised, 0.0)
37
+ audio_denoised = self.stft.inverse(audio_spec_denoised, audio_angles.to(self.device))
38
+ return audio_denoised
mtts/models/vocoder/VocGAN/download_utils.py ADDED
@@ -0,0 +1,175 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import hashlib
2
+ import logging
3
+ import os
4
+ import tarfile
5
+ import threading
6
+ import urllib
7
+ import urllib.request
8
+ import zipfile
9
+ from queue import Queue
10
+ from typing import Any, Iterable, List, Optional
11
+ import random
12
+
13
+ import torch
14
+ from tqdm import tqdm
15
+
16
+
17
+ def stream_url(url: str,
18
+ start_byte: Optional[int] = None,
19
+ block_size: int = 32 * 1024,
20
+ progress_bar: bool = True) -> Iterable:
21
+ """Stream url by chunk
22
+ Args:
23
+ url (str): Url.
24
+ start_byte (int, optional): Start streaming at that point (Default: ``None``).
25
+ block_size (int, optional): Size of chunks to stream (Default: ``32 * 1024``).
26
+ progress_bar (bool, optional): Display a progress bar (Default: ``True``).
27
+ """
28
+
29
+ # If we already have the whole file, there is no need to download it again
30
+ req = urllib.request.Request(url, method="HEAD")
31
+ url_size = int(urllib.request.urlopen(req).info().get("Content-Length", -1))
32
+ if url_size == start_byte:
33
+ return
34
+
35
+ req = urllib.request.Request(url)
36
+ if start_byte:
37
+ req.headers["Range"] = "bytes={}-".format(start_byte)
38
+
39
+ with urllib.request.urlopen(req) as upointer, tqdm(
40
+ unit="B",
41
+ unit_scale=True,
42
+ unit_divisor=1024,
43
+ total=url_size,
44
+ disable=not progress_bar,
45
+ ) as pbar:
46
+
47
+ num_bytes = 0
48
+ while True:
49
+ chunk = upointer.read(block_size)
50
+ if not chunk:
51
+ break
52
+ yield chunk
53
+ num_bytes += len(chunk)
54
+ pbar.update(len(chunk))
55
+ def validate_file(file_obj: Any, hash_value: str, hash_type: str = "sha256") -> bool:
56
+ """Validate a given file object with its hash.
57
+ Args:
58
+ file_obj: File object to read from.
59
+ hash_value (str): Hash for url.
60
+ hash_type (str, optional): Hash type, among "sha256" and "md5" (Default: ``"sha256"``).
61
+ Returns:
62
+ bool: return True if its a valid file, else False.
63
+ """
64
+
65
+ if hash_type == "sha256":
66
+ hash_func = hashlib.sha256()
67
+ elif hash_type == "md5":
68
+ hash_func = hashlib.md5()
69
+ else:
70
+ raise ValueError
71
+
72
+ while True:
73
+ # Read by chunk to avoid filling memory
74
+ chunk = file_obj.read(1024 ** 2)
75
+ if not chunk:
76
+ break
77
+ hash_func.update(chunk)
78
+
79
+ return hash_func.hexdigest() == hash_value
80
+
81
+
82
+
83
+ def download_url(url: str,
84
+ download_folder: str,
85
+ filename: Optional[str] = None,
86
+ hash_value: Optional[str] = None,
87
+ hash_type: str = "sha256",
88
+ progress_bar: bool = True,
89
+ resume: bool = False) -> None:
90
+ """Download file to disk.
91
+ Args:
92
+ url (str): Url.
93
+ download_folder (str): Folder to download file.
94
+ filename (str, optional): Name of downloaded file. If None, it is inferred from the url (Default: ``None``).
95
+ hash_value (str, optional): Hash for url (Default: ``None``).
96
+ hash_type (str, optional): Hash type, among "sha256" and "md5" (Default: ``"sha256"``).
97
+ progress_bar (bool, optional): Display a progress bar (Default: ``True``).
98
+ resume (bool, optional): Enable resuming download (Default: ``False``).
99
+ """
100
+
101
+ req = urllib.request.Request(url, method="HEAD")
102
+ req_info = urllib.request.urlopen(req).info()
103
+
104
+ # Detect filename
105
+ filename = filename or req_info.get_filename() or os.path.basename(url)
106
+ filepath = os.path.join(download_folder, filename)
107
+ if resume and os.path.exists(filepath):
108
+ mode = "ab"
109
+ local_size: Optional[int] = os.path.getsize(filepath)
110
+
111
+ elif not resume and os.path.exists(filepath):
112
+ raise RuntimeError(
113
+ "{} already exists. Delete the file manually and retry.".format(filepath)
114
+ )
115
+ else:
116
+ mode = "wb"
117
+ local_size = None
118
+
119
+ if hash_value and local_size == int(req_info.get("Content-Length", -1)):
120
+ with open(filepath, "rb") as file_obj:
121
+ if validate_file(file_obj, hash_value, hash_type):
122
+ return
123
+ raise RuntimeError(
124
+ "The hash of {} does not match. Delete the file manually and retry.".format(
125
+ filepath
126
+ )
127
+ )
128
+
129
+ with open(filepath, mode) as fpointer:
130
+ for chunk in stream_url(url, start_byte=local_size, progress_bar=progress_bar):
131
+ fpointer.write(chunk)
132
+
133
+ with open(filepath, "rb") as file_obj:
134
+ if hash_value and not validate_file(file_obj, hash_value, hash_type):
135
+ raise RuntimeError(
136
+ "The hash of {} does not match. Delete the file manually and retry.".format(
137
+ filepath
138
+ )
139
+ )
140
+ #return filepath
141
+
142
+
143
+ def download_checkpoint():
144
+ url = 'https://zenodo.org/record/4625672/files/checkpoint_500000.pth'
145
+ os.makedirs('./checkpoint/',exist_ok=True)
146
+ return download_url(url,'./checkpoint/',resume=True,hash_value='14002c23879f6b5d0cd987f3c3e1a160',hash_type='md5')
147
+
148
+ def download_waveglow(device):
149
+
150
+ os.makedirs('./waveglow/',exist_ok=True)
151
+
152
+ try:
153
+ waveglow = torch.hub.load('./waveglow/DeepLearningExamples-torchhub/', 'nvidia_waveglow',source='local')
154
+ except:
155
+ if random.randint(0,1)==0:
156
+ download_url('https://hub.fastgit.org/nvidia/DeepLearningExamples/archive/torchhub.zip','./waveglow',
157
+ hash_type='md5',hash_value='27ef24b9c4a2ce6c26f26998aee26f44',
158
+ resume=True)
159
+ else:
160
+ download_url('https://github.com/nvidia/DeepLearningExamples/archive/torchhub.zip','./waveglow',
161
+ hash_type='md5',hash_value='27ef24b9c4a2ce6c26f26998aee26f44',
162
+ resume=True)
163
+ os.system('unzip ./waveglow/DeepLearningExamples-torchhub.zip -d ./waveglow/')
164
+ waveglow = torch.hub.load('./waveglow/DeepLearningExamples-torchhub/', 'nvidia_waveglow',source='local')
165
+
166
+
167
+
168
+ waveglow = waveglow.remove_weightnorm(waveglow)
169
+ waveglow.eval()
170
+ for m in waveglow.modules():
171
+ if 'Conv' in str(type(m)):
172
+ setattr(m, 'padding_mode', 'zeros')
173
+ waveglow.to(device)
174
+ return waveglow
175
+ #download_url('https://github.com/nvidia/DeepLearningExamples/archive/torchhub.zip','./waveglow',resume=True)
mtts/models/vocoder/VocGAN/export_torchscript.py ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ import argparse
3
+ from scipy.io.wavfile import write
4
+ import numpy as np
5
+ from model.generator import ModifiedGenerator
6
+ from utils.hparams import HParam, load_hparam_str
7
+ from denoiser import Denoiser
8
+
9
+ MAX_WAV_VALUE = 32768.0
10
+
11
+
12
+ def main(args):
13
+ checkpoint = torch.load(args.checkpoint_path)
14
+ if args.config is not None:
15
+ hp = HParam(args.config)
16
+ else:
17
+ hp = load_hparam_str(checkpoint['hp_str'])
18
+
19
+ model = ModifiedGenerator(hp.audio.n_mel_channels, hp.model.n_residual_layers,
20
+ ratios=hp.model.generator_ratio, mult = hp.model.mult,
21
+ out_band = hp.model.out_channels).cuda()
22
+ model.load_state_dict(checkpoint['model_g'])
23
+ model.eval(inference=True)
24
+
25
+ with torch.no_grad():
26
+ mel = torch.from_numpy(np.load(args.input))
27
+ if len(mel.shape) == 2:
28
+ mel = mel.unsqueeze(0)
29
+ mel = mel.cuda()
30
+ zero = torch.full((1, 80, 10), -11.5129).to(mel.device)
31
+ mel = torch.cat((mel, zero), dim=2)
32
+ vocgan_trace = torch.jit.trace(model, mel)
33
+ vocgan_trace.save("{}/vocgan_ex_female_en_{}_{}.pt".format(args.out, checkpoint['githash'], checkpoint['epoch']))
34
+ # audio = model(mel)
35
+
36
+ # audio = audio.squeeze(0) # collapse all dimension except time axis
37
+ # if args.d:
38
+ # denoiser = Denoiser(model).cuda()
39
+ # audio = denoiser(audio, 0.01)
40
+ # audio = audio.squeeze()
41
+ # audio = audio[:-(hp.audio.hop_length*10)]
42
+ # audio = MAX_WAV_VALUE * audio
43
+ # audio = audio.clamp(min=-MAX_WAV_VALUE, max=MAX_WAV_VALUE-1)
44
+ # audio = audio.short()
45
+ # audio = audio.cpu().detach().numpy()
46
+ #
47
+ # out_path = args.input.replace('.npy', '_reconstructed_epoch%04d.wav' % checkpoint['epoch'])
48
+ # write(out_path, hp.audio.sampling_rate, audio)
49
+
50
+
51
+ if __name__ == '__main__':
52
+ parser = argparse.ArgumentParser()
53
+ parser.add_argument('-c', '--config', type=str, default=None,
54
+ help="yaml file for config. will use hp_str from checkpoint if not given.")
55
+ parser.add_argument('-p', '--checkpoint_path', type=str, required=True,
56
+ help="path of checkpoint pt file for evaluation")
57
+ parser.add_argument('-i', '--input', type=str, required=True,
58
+ help="directory of mel-spectrograms to invert into raw audio. ")
59
+ parser.add_argument('-o', '--out', type=str, required=True,
60
+ help="path of output pt file")
61
+ args = parser.parse_args()
62
+
63
+ main(args)
mtts/models/vocoder/VocGAN/inference.py ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import glob
3
+ import tqdm
4
+ import torch
5
+ import argparse
6
+ from scipy.io.wavfile import write
7
+ import numpy as np
8
+ from model.generator import ModifiedGenerator
9
+ from utils.hparams import HParam, load_hparam_str
10
+ from denoiser import Denoiser
11
+
12
+ MAX_WAV_VALUE = 32768.0
13
+
14
+
15
+ def main(args):
16
+ checkpoint = torch.load(args.checkpoint_path)
17
+ if args.config is not None:
18
+ hp = HParam(args.config)
19
+ else:
20
+ hp = load_hparam_str(checkpoint['hp_str'])
21
+
22
+ model = ModifiedGenerator(hp.audio.n_mel_channels, hp.model.n_residual_layers,
23
+ ratios=hp.model.generator_ratio, mult = hp.model.mult,
24
+ out_band = hp.model.out_channels).cuda()
25
+ model.load_state_dict(checkpoint['model_g'])
26
+ model.eval(inference=True)
27
+
28
+ with torch.no_grad():
29
+ mel = torch.from_numpy(np.load(args.input))
30
+ if len(mel.shape) == 2:
31
+ mel = mel.unsqueeze(0)
32
+ mel = mel.cuda()
33
+ audio = model.inference(mel)
34
+
35
+ audio = audio.squeeze(0) # collapse all dimension except time axis
36
+ if args.d:
37
+ denoiser = Denoiser(model).cuda()
38
+ audio = denoiser(audio, 0.01)
39
+ audio = audio.squeeze()
40
+ audio = audio[:-(hp.audio.hop_length*10)]
41
+ audio = MAX_WAV_VALUE * audio
42
+ audio = audio.clamp(min=-MAX_WAV_VALUE, max=MAX_WAV_VALUE-1)
43
+ audio = audio.short()
44
+ audio = audio.cpu().detach().numpy()
45
+
46
+ out_path = args.input.replace('.npy', '_reconstructed_epoch%04d.wav' % checkpoint['epoch'])
47
+ write(out_path, hp.audio.sampling_rate, audio)
48
+
49
+
50
+ if __name__ == '__main__':
51
+ parser = argparse.ArgumentParser()
52
+ parser.add_argument('-c', '--config', type=str, default=None,
53
+ help="yaml file for config. will use hp_str from checkpoint if not given.")
54
+ parser.add_argument('-p', '--checkpoint_path', type=str, required=True,
55
+ help="path of checkpoint pt file for evaluation")
56
+ parser.add_argument('-i', '--input', type=str, required=True,
57
+ help="directory of mel-spectrograms to invert into raw audio. ")
58
+ parser.add_argument('-d', action='store_true', help="denoising ")
59
+ args = parser.parse_args()
60
+
61
+ main(args)
mtts/models/vocoder/VocGAN/model/discriminator.py ADDED
@@ -0,0 +1,144 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ import torch.nn as nn
3
+
4
+
5
+ class Discriminator(nn.Module):
6
+ def __init__(self, ndf = 16, n_layers = 3, downsampling_factor = 4, disc_out = 512):
7
+ super(Discriminator, self).__init__()
8
+ discriminator = nn.ModuleDict()
9
+ discriminator["layer_0"] = nn.Sequential(
10
+ nn.ReflectionPad1d(7),
11
+ nn.utils.weight_norm(nn.Conv1d(1, ndf, kernel_size=15, stride=1)),
12
+ nn.LeakyReLU(0.2, True),
13
+ )
14
+
15
+ nf = ndf
16
+ stride = downsampling_factor
17
+ for n in range(1, n_layers + 1):
18
+ nf_prev = nf
19
+ nf = min(nf * stride, disc_out)
20
+
21
+ discriminator["layer_%d" % n] = nn.Sequential(
22
+ nn.utils.weight_norm(nn.Conv1d(
23
+ nf_prev,
24
+ nf,
25
+ kernel_size=stride * 10 + 1,
26
+ stride=stride,
27
+ padding=stride * 5,
28
+ groups=nf_prev // 4,
29
+ )),
30
+ nn.LeakyReLU(0.2, True),
31
+ )
32
+ nf = min(nf * 2, disc_out)
33
+ discriminator["layer_%d" % (n_layers + 1)] = nn.Sequential(
34
+ nn.utils.weight_norm(nn.Conv1d(nf, disc_out, kernel_size=5, stride=1, padding=2)),
35
+ nn.LeakyReLU(0.2, True),
36
+ )
37
+
38
+ discriminator["layer_%d" % (n_layers + 2)] = nn.utils.weight_norm(nn.Conv1d(
39
+ nf, 1, kernel_size=3, stride=1, padding=1
40
+ ))
41
+ self.discriminator = discriminator
42
+
43
+ def forward(self, x):
44
+ '''
45
+ returns: (list of 6 features, discriminator score)
46
+ we directly predict score without last sigmoid function
47
+ since we're using Least Squares GAN (https://arxiv.org/abs/1611.04076)
48
+ '''
49
+ features = list()
50
+ for key, module in self.discriminator.items():
51
+ x = module(x)
52
+ features.append(x)
53
+ return features[:-1], features[-1]
54
+
55
+ # JCU Discriminator
56
+ class JCU_Discriminator(nn.Module):
57
+ def __init__(self):
58
+ super(JCU_Discriminator, self).__init__()
59
+ self.mel_conv = nn.Sequential(
60
+ nn.ReflectionPad1d(3),
61
+ nn.utils.weight_norm(nn.Conv1d(80, 128, kernel_size=2, stride=1)),
62
+ nn.LeakyReLU(0.2, True),
63
+ )
64
+ x_conv = [nn.ReflectionPad1d(7),
65
+ nn.utils.weight_norm(nn.Conv1d(1, 16, kernel_size=7, stride=1)),
66
+ nn.LeakyReLU(0.2, True),
67
+ ]
68
+ x_conv += [
69
+ nn.utils.weight_norm(nn.Conv1d(
70
+ 16,
71
+ 64,
72
+ kernel_size=41,
73
+ stride=4,
74
+ padding=4 * 5,
75
+ groups=16 // 4,
76
+ )
77
+ ),
78
+ nn.LeakyReLU(0.2),
79
+ ]
80
+ x_conv += [
81
+ nn.utils.weight_norm(nn.Conv1d(
82
+ 64,
83
+ 128,
84
+ kernel_size=21,
85
+ stride=2,
86
+ padding=2 * 5,
87
+ groups=64 // 4,
88
+ )
89
+ ),
90
+ nn.LeakyReLU(0.2),
91
+ ]
92
+ self.x_conv = nn.Sequential(*x_conv)
93
+ self.mel_conv2 = nn.Sequential(
94
+ nn.utils.weight_norm(nn.Conv1d(128, 128, kernel_size=5, stride=1, padding=2)),
95
+ nn.LeakyReLU(0.2, True),
96
+ )
97
+ self.mel_conv3 = nn.utils.weight_norm(nn.Conv1d(
98
+ 128, 1, kernel_size=3, stride=1, padding=1
99
+ ))
100
+
101
+ self.x_conv2 = nn.Sequential(
102
+ nn.utils.weight_norm(nn.Conv1d(128, 128, kernel_size=5, stride=1, padding=2)),
103
+ nn.LeakyReLU(0.2, True),
104
+ )
105
+ self.x_conv3 = nn.utils.weight_norm(nn.Conv1d(
106
+ 128, 1, kernel_size=3, stride=1, padding=1
107
+ ))
108
+
109
+ def forward(self, x, mel):
110
+ out = self.mel_conv(mel)
111
+ out1 = self.x_conv(x)
112
+ out = torch.cat([out, out1], dim=2)
113
+ out = self.mel_conv2(out)
114
+ cond_out = self.mel_conv3(out)
115
+ out1 = self.x_conv2(out1)
116
+ uncond_out = self.x_conv3(out1)
117
+ return uncond_out, cond_out
118
+
119
+
120
+ if __name__ == '__main__':
121
+ model = Discriminator()
122
+ '''
123
+ Length of features : 5
124
+ Length of score : 3
125
+ torch.Size([3, 16, 25600])
126
+ torch.Size([3, 64, 6400])
127
+ torch.Size([3, 256, 1600])
128
+ torch.Size([3, 512, 400])
129
+ torch.Size([3, 512, 400])
130
+ torch.Size([3, 1, 400]) -> score
131
+ '''
132
+
133
+ x = torch.randn(3, 1, 25600)
134
+ print(x.shape)
135
+
136
+ features, score = model(x)
137
+ print("Length of features : ", len(features))
138
+ print("Length of score : ", len(score))
139
+ for feat in features:
140
+ print(feat.shape)
141
+ print(score.shape)
142
+
143
+ pytorch_total_params = sum(p.numel() for p in model.parameters() if p.requires_grad)
144
+ print(pytorch_total_params)
mtts/models/vocoder/VocGAN/model/generator.py ADDED
@@ -0,0 +1,422 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ import torch.nn as nn
3
+ import torch.nn.functional as F
4
+ from ..utils.utils import weights_init
5
+ from .res_stack import ResStack
6
+ # from res_stack import ResStack
7
+
8
+ MAX_WAV_VALUE = 32768.0
9
+
10
+
11
+ class VOCGenerator(nn.Module):
12
+ def __init__(self, mel_channel, n_residual_layers, ratios=[4, 4, 2, 2, 2, 2], mult=256, out_band=1):
13
+ super(VOCGenerator, self).__init__()
14
+ self.mel_channel = mel_channel
15
+
16
+ self.start = nn.Sequential(
17
+ nn.ReflectionPad1d(3),
18
+ nn.utils.weight_norm(nn.Conv1d(mel_channel, mult * 2, kernel_size=7, stride=1))
19
+ )
20
+ r = ratios[0]
21
+ self.upsample_1 = nn.Sequential(
22
+ nn.LeakyReLU(0.2),
23
+ nn.utils.weight_norm(nn.ConvTranspose1d(mult * 2, mult,
24
+ kernel_size=r * 2, stride=r,
25
+ padding=r // 2 + r % 2,
26
+ output_padding=r % 2)
27
+ )
28
+ )
29
+ self.res_stack_1 = nn.Sequential(*[ResStack(mult, dilation=3 ** j) for j in range(n_residual_layers)])
30
+
31
+ r = ratios[1]
32
+ mult = mult // 2
33
+ self.upsample_2 = nn.Sequential(
34
+ nn.LeakyReLU(0.2),
35
+ nn.utils.weight_norm(nn.ConvTranspose1d(mult * 2, mult,
36
+ kernel_size=r * 2, stride=r,
37
+ padding=r // 2 + r % 2,
38
+ output_padding=r % 2)
39
+ )
40
+ )
41
+ self.res_stack_2 = nn.Sequential(*[ResStack(mult, dilation=3 ** j) for j in range(n_residual_layers)])
42
+
43
+
44
+ self.sub_out_1 = nn.Sequential(
45
+ nn.LeakyReLU(0.2),
46
+ nn.ReflectionPad1d(3),
47
+ nn.utils.weight_norm(nn.Conv1d(mult, out_band, kernel_size=7, stride=1)),
48
+ nn.Tanh(),
49
+ )
50
+
51
+ r = ratios[2]
52
+ mult = mult // 2
53
+ self.upsample_3 = nn.Sequential(
54
+ nn.LeakyReLU(0.2),
55
+ nn.utils.weight_norm(nn.ConvTranspose1d(mult * 2, mult,
56
+ kernel_size=r * 2, stride=r,
57
+ padding=r // 2 + r % 2,
58
+ output_padding=r % 2)
59
+ )
60
+ )
61
+
62
+ self.skip_upsample_1 = nn.utils.weight_norm(nn.ConvTranspose1d(mel_channel, mult,
63
+ kernel_size=64, stride=32,
64
+ padding=16,
65
+ output_padding=0)
66
+ )
67
+ self.res_stack_3 = nn.Sequential(*[ResStack(mult, dilation=3 ** j) for j in range(n_residual_layers)])
68
+
69
+ self.sub_out_2 = nn.Sequential(
70
+ nn.LeakyReLU(0.2),
71
+ nn.ReflectionPad1d(3),
72
+ nn.utils.weight_norm(nn.Conv1d(mult, out_band, kernel_size=7, stride=1)),
73
+ nn.Tanh(),
74
+ )
75
+
76
+ r = ratios[3]
77
+ mult = mult // 2
78
+ self.upsample_4 = nn.Sequential(
79
+ nn.LeakyReLU(0.2),
80
+ nn.utils.weight_norm(nn.ConvTranspose1d(mult * 2, mult,
81
+ kernel_size=r * 2, stride=r,
82
+ padding=r // 2 + r % 2,
83
+ output_padding=r % 2)
84
+ )
85
+ )
86
+
87
+ self.skip_upsample_2 = nn.utils.weight_norm(nn.ConvTranspose1d(mel_channel, mult,
88
+ kernel_size=128, stride=64,
89
+ padding=32,
90
+ output_padding=0)
91
+ )
92
+ self.res_stack_4 = nn.Sequential(*[ResStack(mult, dilation=3 ** j) for j in range(n_residual_layers)])
93
+
94
+ self.sub_out_3 = nn.Sequential(
95
+ nn.LeakyReLU(0.2),
96
+ nn.ReflectionPad1d(3),
97
+ nn.utils.weight_norm(nn.Conv1d(mult, out_band, kernel_size=7, stride=1)),
98
+ nn.Tanh(),
99
+ )
100
+
101
+ r = ratios[4]
102
+ mult = mult // 2
103
+ self.upsample_5 = nn.Sequential(
104
+ nn.LeakyReLU(0.2),
105
+ nn.utils.weight_norm(nn.ConvTranspose1d(mult * 2, mult,
106
+ kernel_size=r * 2, stride=r,
107
+ padding=r // 2 + r % 2,
108
+ output_padding=r % 2)
109
+ )
110
+ )
111
+
112
+ self.skip_upsample_3 = nn.utils.weight_norm(nn.ConvTranspose1d(mel_channel, mult,
113
+ kernel_size=256, stride=128,
114
+ padding=64,
115
+ output_padding=0)
116
+ )
117
+ self.res_stack_5 = nn.Sequential(*[ResStack(mult, dilation=3 ** j) for j in range(n_residual_layers)])
118
+
119
+ self.sub_out_4 = nn.Sequential(
120
+ nn.LeakyReLU(0.2),
121
+ nn.ReflectionPad1d(3),
122
+ nn.utils.weight_norm(nn.Conv1d(mult, out_band, kernel_size=7, stride=1)),
123
+ nn.Tanh(),
124
+ )
125
+
126
+ r = ratios[5]
127
+ mult = mult // 2
128
+ self.upsample_6 = nn.Sequential(
129
+ nn.LeakyReLU(0.2),
130
+ nn.utils.weight_norm(nn.ConvTranspose1d(mult * 2, mult,
131
+ kernel_size=r * 2, stride=r,
132
+ padding=r // 2 + r % 2,
133
+ output_padding=r % 2)
134
+ )
135
+ )
136
+
137
+ self.skip_upsample_4 = nn.utils.weight_norm(nn.ConvTranspose1d(mel_channel, mult,
138
+ kernel_size=512, stride=256,
139
+ padding=128,
140
+ output_padding=0)
141
+ )
142
+ self.res_stack_6 = nn.Sequential(*[ResStack(mult, dilation=3 ** j) for j in range(n_residual_layers)])
143
+
144
+ self.out = nn.Sequential(
145
+ nn.LeakyReLU(0.2),
146
+ nn.ReflectionPad1d(3),
147
+ nn.utils.weight_norm(nn.Conv1d(mult, out_band, kernel_size=7, stride=1)),
148
+ nn.Tanh(),
149
+ )
150
+ self.apply(weights_init)
151
+
152
+ def forward(self, mel):
153
+ mel = (mel + 5.0) / 5.0 # roughly normalize spectrogram
154
+ # Mel Shape [B, num_mels, T] -> torch.Size([3, 80, 10])
155
+ x = self.start(mel) # [B, dim*2, T] -> torch.Size([3, 512, 10])
156
+
157
+ x = self.upsample_1(x)
158
+ x = self.res_stack_1(x) # [B, dim, T*4] -> torch.Size([3, 256, 40])
159
+
160
+ x = self.upsample_2(x)
161
+ x = self.res_stack_2(x) # [B, dim/2, T*16] -> torch.Size([3, 128, 160])
162
+ out1 = self.sub_out_1(x) # [B, 1, T*16] -> torch.Size([3, 1, 160])
163
+
164
+ x = self.upsample_3(x)
165
+ x = x + self.skip_upsample_1(mel)
166
+ x = self.res_stack_3(x) # [B, dim/4, T*32] -> torch.Size([3, 64, 320])
167
+ out2 = self.sub_out_2(x) # [B, 1, T*32] -> torch.Size([3, 1, 320])
168
+
169
+ x = self.upsample_4(x)
170
+ x = x + self.skip_upsample_2(mel)
171
+ x = self.res_stack_4(x) # [B, dim/8, T*64] -> torch.Size([3, 32, 640])
172
+ out3 = self.sub_out_3(x) # [B, 1, T*64] -> torch.Size([3, 1, 640])
173
+
174
+ x = self.upsample_5(x)
175
+ x = x + self.skip_upsample_3(mel)
176
+ x = self.res_stack_5(x) # [B, dim/16, T*128] -> torch.Size([3, 16, 1280])
177
+ out4 = self.sub_out_4(x) # [B, 1, T*128] -> torch.Size([3, 1, 1280])
178
+
179
+ x = self.upsample_6(x)
180
+ x = x + self.skip_upsample_4(mel)
181
+ x = self.res_stack_6(x) # [B, dim/32, T*256] -> torch.Size([3, 8, 2560])
182
+
183
+ out = self.out(x) # [B, 1, T*256] -> torch.Size([3, 1, 2560])
184
+
185
+ return out1, out2, out3, out4, out
186
+
187
+ def inference(self, mel):
188
+ hop_length = 256
189
+ # pad input mel with zeros to cut artifact
190
+ # see https://github.com/seungwonpark/melgan/issues/8
191
+ zero = torch.full((1, self.mel_channel, 10), -11.5129).to(mel.device)
192
+ mel = torch.cat((mel, zero), dim=2)
193
+
194
+ _, _, _, _, audio = self.forward(mel)
195
+ return audio
196
+
197
+
198
+ class ModifiedGenerator(nn.Module):
199
+ def __init__(self, mel_channel, n_residual_layers, ratios=[4, 4, 2, 2, 2, 2], mult=256, out_band=1):
200
+ super(ModifiedGenerator, self).__init__()
201
+ self.mel_channel = mel_channel
202
+
203
+ self.start = nn.Sequential(
204
+ nn.ReflectionPad1d(3),
205
+ nn.utils.weight_norm(nn.Conv1d(mel_channel, mult * 2, kernel_size=7, stride=1))
206
+ )
207
+ r = ratios[0]
208
+ self.upsample_1 = nn.Sequential(
209
+ nn.LeakyReLU(0.2),
210
+ nn.utils.weight_norm(nn.ConvTranspose1d(mult * 2, mult,
211
+ kernel_size=r * 2, stride=r,
212
+ padding=r // 2 + r % 2,
213
+ output_padding=r % 2)
214
+ )
215
+ )
216
+ self.res_stack_1 = nn.Sequential(*[ResStack(mult, dilation=3 ** j) for j in range(n_residual_layers)])
217
+
218
+ r = ratios[1]
219
+ mult = mult // 2
220
+ self.upsample_2 = nn.Sequential(
221
+ nn.LeakyReLU(0.2),
222
+ nn.utils.weight_norm(nn.ConvTranspose1d(mult * 2, mult,
223
+ kernel_size=r * 2, stride=r,
224
+ padding=r // 2 + r % 2,
225
+ output_padding=r % 2)
226
+ )
227
+ )
228
+ self.res_stack_2 = nn.Sequential(*[ResStack(mult, dilation=3 ** j) for j in range(n_residual_layers)])
229
+
230
+ r = ratios[2]
231
+ mult = mult // 2
232
+ self.upsample_3 = nn.Sequential(
233
+ nn.LeakyReLU(0.2),
234
+ nn.utils.weight_norm(nn.ConvTranspose1d(mult * 2, mult,
235
+ kernel_size=r * 2, stride=r,
236
+ padding=r // 2 + r % 2,
237
+ output_padding=r % 2)
238
+ )
239
+ )
240
+
241
+ self.skip_upsample_1 = nn.utils.weight_norm(nn.ConvTranspose1d(mel_channel, mult,
242
+ kernel_size=64, stride=32,
243
+ padding=16,
244
+ output_padding=0)
245
+ )
246
+ self.res_stack_3 = nn.Sequential(*[ResStack(mult, dilation=3 ** j) for j in range(n_residual_layers)])
247
+
248
+
249
+
250
+ r = ratios[3]
251
+ mult = mult // 2
252
+ self.upsample_4 = nn.Sequential(
253
+ nn.LeakyReLU(0.2),
254
+ nn.utils.weight_norm(nn.ConvTranspose1d(mult * 2, mult,
255
+ kernel_size=r * 2, stride=r,
256
+ padding=r // 2 + r % 2,
257
+ output_padding=r % 2)
258
+ )
259
+ )
260
+
261
+ self.skip_upsample_2 = nn.utils.weight_norm(nn.ConvTranspose1d(mel_channel, mult,
262
+ kernel_size=128, stride=64,
263
+ padding=32,
264
+ output_padding=0)
265
+ )
266
+ self.res_stack_4 = nn.Sequential(*[ResStack(mult, dilation=3 ** j) for j in range(n_residual_layers)])
267
+
268
+
269
+ r = ratios[4]
270
+ mult = mult // 2
271
+ self.upsample_5 = nn.Sequential(
272
+ nn.LeakyReLU(0.2),
273
+ nn.utils.weight_norm(nn.ConvTranspose1d(mult * 2, mult,
274
+ kernel_size=r * 2, stride=r,
275
+ padding=r // 2 + r % 2,
276
+ output_padding=r % 2)
277
+ )
278
+ )
279
+
280
+ self.skip_upsample_3 = nn.utils.weight_norm(nn.ConvTranspose1d(mel_channel, mult,
281
+ kernel_size=256, stride=128,
282
+ padding=64,
283
+ output_padding=0)
284
+ )
285
+ self.res_stack_5 = nn.Sequential(*[ResStack(mult, dilation=3 ** j) for j in range(n_residual_layers)])
286
+
287
+
288
+ r = ratios[5]
289
+ mult = mult // 2
290
+ self.upsample_6 = nn.Sequential(
291
+ nn.LeakyReLU(0.2),
292
+ nn.utils.weight_norm(nn.ConvTranspose1d(mult * 2, mult,
293
+ kernel_size=r * 2, stride=r,
294
+ padding=r // 2 + r % 2,
295
+ output_padding=r % 2)
296
+ )
297
+ )
298
+
299
+ self.skip_upsample_4 = nn.utils.weight_norm(nn.ConvTranspose1d(mel_channel, mult,
300
+ kernel_size=512, stride=256,
301
+ padding=128,
302
+ output_padding=0)
303
+ )
304
+ self.res_stack_6 = nn.Sequential(*[ResStack(mult, dilation=3 ** j) for j in range(n_residual_layers)])
305
+
306
+ self.out = nn.Sequential(
307
+ nn.LeakyReLU(0.2),
308
+ nn.ReflectionPad1d(3),
309
+ nn.utils.weight_norm(nn.Conv1d(mult, out_band, kernel_size=7, stride=1)),
310
+ nn.Tanh(),
311
+ )
312
+ self.apply(weights_init)
313
+
314
+ def forward(self, mel):
315
+ mel = (mel + 5.0) / 5.0 # roughly normalize spectrogram
316
+ # Mel Shape [B, num_mels, T] -> torch.Size([3, 80, 10])
317
+ x = self.start(mel) # [B, dim*2, T] -> torch.Size([3, 512, 10])
318
+
319
+ x = self.upsample_1(x)
320
+ x = self.res_stack_1(x) # [B, dim, T*4] -> torch.Size([3, 256, 40])
321
+
322
+ x = self.upsample_2(x)
323
+ x = self.res_stack_2(x) # [B, dim/2, T*16] -> torch.Size([3, 128, 160])
324
+ # out1 = self.sub_out_1(x) # [B, 1, T*16] -> torch.Size([3, 1, 160])
325
+
326
+ x = self.upsample_3(x)
327
+ x = x + self.skip_upsample_1(mel)
328
+ x = self.res_stack_3(x) # [B, dim/4, T*32] -> torch.Size([3, 64, 320])
329
+ # out2 = self.sub_out_2(x) # [B, 1, T*32] -> torch.Size([3, 1, 320])
330
+
331
+ x = self.upsample_4(x)
332
+ x = x + self.skip_upsample_2(mel)
333
+ x = self.res_stack_4(x) # [B, dim/8, T*64] -> torch.Size([3, 32, 640])
334
+ # out3 = self.sub_out_3(x) # [B, 1, T*64] -> torch.Size([3, 1, 640])
335
+
336
+ x = self.upsample_5(x)
337
+ x = x + self.skip_upsample_3(mel)
338
+ x = self.res_stack_5(x) # [B, dim/16, T*128] -> torch.Size([3, 16, 1280])
339
+ # out4 = self.sub_out_4(x) # [B, 1, T*128] -> torch.Size([3, 1, 1280])
340
+
341
+ x = self.upsample_6(x)
342
+ x = x + self.skip_upsample_4(mel)
343
+ x = self.res_stack_6(x) # [B, dim/32, T*256] -> torch.Size([3, 8, 2560])
344
+
345
+ out = self.out(x) # [B, 1, T*256] -> torch.Size([3, 1, 2560])
346
+
347
+ return out #out1, out2, out3, out4, out
348
+
349
+ def eval(self, inference=False):
350
+ super(ModifiedGenerator, self).eval()
351
+
352
+ # don't remove weight norm while validation in training loop
353
+ if inference:
354
+ self.remove_weight_norm()
355
+
356
+ # def remove_weight_norm(self):
357
+ # for idx, layer in enumerate(self.generator):
358
+ # if len(layer.state_dict()) != 0:
359
+ # try:
360
+ # nn.utils.remove_weight_norm(layer)
361
+ # except:
362
+ # layer.remove_weight_norm()
363
+
364
+ def remove_weight_norm(self):
365
+ """Remove weight normalization module from all of the layers."""
366
+
367
+ def _remove_weight_norm(m):
368
+ try:
369
+ torch.nn.utils.remove_weight_norm(m)
370
+ except ValueError: # this module didn't have weight norm
371
+ return
372
+
373
+ self.apply(_remove_weight_norm)
374
+
375
+ def apply_weight_norm(self):
376
+ """Apply weight normalization module from all of the layers."""
377
+
378
+ def _apply_weight_norm(m):
379
+ if isinstance(m, torch.nn.Conv1d) or isinstance(m, torch.nn.ConvTranspose1d):
380
+ torch.nn.utils.weight_norm(m)
381
+
382
+ self.apply(_apply_weight_norm)
383
+
384
+
385
+ def inference(self, mel):
386
+ hop_length = 256
387
+ # pad input mel with zeros to cut artifact
388
+ # see https://github.com/seungwonpark/melgan/issues/8
389
+ zero = torch.full((1, self.mel_channel, 10), -11.5129).to(mel.device)
390
+ mel = torch.cat((mel, zero), dim=2)
391
+
392
+ audio = self.forward(mel)
393
+ return audio
394
+
395
+
396
+
397
+
398
+ '''
399
+ to run this, fix
400
+ from . import ResStack
401
+ into
402
+ from res_stack import ResStack
403
+ '''
404
+ if __name__ == '__main__':
405
+ '''
406
+ torch.Size([3, 80, 10])
407
+ torch.Size([3, 1, 2560])
408
+ 4715698
409
+ '''
410
+ model = VOCGenerator(80, 4)
411
+
412
+ x = torch.randn(3, 80, 10) # (B, channels, T).
413
+ print(x.shape)
414
+
415
+ out1, out2, out3, out4, out = model(x) # (B, 1, T ** prod(upsample_scales)
416
+ assert out.shape == torch.Size([3, 1, 2560]) # For normal melgan torch.Size([3, 1, 2560])
417
+ assert out4.shape == torch.Size([3, 1, 1280])
418
+ assert out3.shape == torch.Size([3, 1, 640])
419
+ assert out2.shape == torch.Size([3, 1, 320])
420
+ assert out1.shape == torch.Size([3, 1, 160])
421
+ pytorch_total_params = sum(p.numel() for p in model.parameters() if p.requires_grad)
422
+ print(pytorch_total_params)