├── Configs └── config.yml ├── Data ├── VCTK.ipynb ├── train_list.txt └── val_list.txt ├── Demo ├── VCTK-corpus │ ├── p228 │ │ └── p228_023.wav │ ├── p230 │ │ └── p230_023.wav │ ├── p233 │ │ └── p233_023.wav │ ├── p236 │ │ └── p236_023.wav │ ├── p243 │ │ └── p243_023.wav │ ├── p244 │ │ └── p244_023.wav │ ├── p254 │ │ └── p254_023.wav │ ├── p258 │ │ └── p258_023.wav │ ├── p259 │ │ └── p259_023.wav │ └── p273 │ │ └── p273_023.wav └── inference.ipynb ├── LICENSE ├── README.md ├── Utils ├── ASR │ ├── __init__.py │ ├── config.yml │ ├── epoch_00100.pth │ ├── layers.py │ └── models.py ├── JDC │ ├── __init__.py │ ├── bst.t7 │ └── model.py └── __init__.py ├── losses.py ├── meldataset.py ├── models.py ├── optimizers.py ├── train.py ├── trainer.py └── transforms.py /Configs/config.yml: -------------------------------------------------------------------------------- 1 | log_dir: "Models/VCTK20" 2 | save_freq: 2 3 | device: "cuda" 4 | epochs: 150 5 | batch_size: 5 6 | pretrained_model: "" 7 | load_only_params: false 8 | fp16_run: true 9 | 10 | train_data: "Data/train_list.txt" 11 | val_data: "Data/val_list.txt" 12 | 13 | F0_path: "Utils/JDC/bst.t7" 14 | ASR_config: "Utils/ASR/config.yml" 15 | ASR_path: "Utils/ASR/epoch_00100.pth" 16 | 17 | preprocess_params: 18 | sr: 24000 19 | spect_params: 20 | n_fft: 2048 21 | win_length: 1200 22 | hop_length: 300 23 | 24 | model_params: 25 | dim_in: 64 26 | style_dim: 64 27 | latent_dim: 16 28 | num_domains: 20 29 | max_conv_dim: 512 30 | n_repeat: 4 31 | w_hpf: 0 32 | F0_channel: 256 33 | 34 | loss_params: 35 | g_loss: 36 | lambda_sty: 1. 37 | lambda_cyc: 5. 38 | lambda_ds: 1. 39 | lambda_norm: 1. 40 | lambda_asr: 10. 41 | lambda_f0: 5. 42 | lambda_f0_sty: 0.1 43 | lambda_adv: 2. 44 | lambda_adv_cls: 0.5 45 | norm_bias: 0.5 46 | d_loss: 47 | lambda_reg: 1. 48 | lambda_adv_cls: 0.1 49 | lambda_con_reg: 10. 50 | 51 | adv_cls_epoch: 50 52 | con_reg_epoch: 30 53 | 54 | optimizer_params: 55 | lr: 0.0001 56 | -------------------------------------------------------------------------------- /Data/VCTK.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "id": "347ace04", 7 | "metadata": {}, 8 | "outputs": [], 9 | "source": [ 10 | "# VCTK Corpus Path\n", 11 | "__CORPUSPATH__ = \"/share/naplab/users/yl4579/data/VCTK-Corpus/VCTK-Corpus\"\n", 12 | "\n", 13 | "# output path\n", 14 | "__OUTPATH__ = \"./Data\"" 15 | ] 16 | }, 17 | { 18 | "cell_type": "code", 19 | "execution_count": null, 20 | "id": "4ce9eb2e", 21 | "metadata": {}, 22 | "outputs": [], 23 | "source": [ 24 | "import os\n", 25 | "from scipy.io import wavfile\n", 26 | "from pydub import AudioSegment\n", 27 | "\n", 28 | "from pydub import AudioSegment\n", 29 | "from pydub.silence import split_on_silence\n", 30 | "import os\n", 31 | "\n", 32 | "def split(sound):\n", 33 | " dBFS = sound.dBFS\n", 34 | " chunks = split_on_silence(sound,\n", 35 | " min_silence_len = 100,\n", 36 | " silence_thresh = dBFS-16,\n", 37 | " keep_silence = 100\n", 38 | " )\n", 39 | " return chunks\n", 40 | "\n", 41 | "def combine(_src):\n", 42 | " audio = AudioSegment.empty()\n", 43 | " for i,filename in enumerate(os.listdir(_src)):\n", 44 | " if filename.endswith('.wav'):\n", 45 | " filename = os.path.join(_src, filename)\n", 46 | " audio += AudioSegment.from_wav(filename)\n", 47 | " return audio\n", 48 | "\n", 49 | "def save_chunks(chunks, directory):\n", 50 | " if not os.path.exists(directory):\n", 51 | " os.makedirs(directory)\n", 52 | " counter = 0\n", 53 | "\n", 54 | " target_length = 5 * 1000\n", 55 | " output_chunks = [chunks[0]]\n", 56 | " for chunk in chunks[1:]:\n", 57 | " if len(output_chunks[-1]) < target_length:\n", 58 | " output_chunks[-1] += chunk\n", 59 | " else:\n", 60 | " # if the last output chunk is longer than the target length,\n", 61 | " # we can start a new one\n", 62 | " output_chunks.append(chunk)\n", 63 | "\n", 64 | " for chunk in output_chunks:\n", 65 | " chunk = chunk.set_frame_rate(24000)\n", 66 | " chunk = chunk.set_channels(1)\n", 67 | " counter = counter + 1\n", 68 | " chunk.export(os.path.join(directory, str(counter) + '.wav'), format=\"wav\")" 69 | ] 70 | }, 71 | { 72 | "cell_type": "code", 73 | "execution_count": null, 74 | "id": "769a7f62", 75 | "metadata": {}, 76 | "outputs": [], 77 | "source": [ 78 | "# Source: http://speech.ee.ntu.edu.tw/~jjery2243542/resource/model/is18/en_speaker_used.txt\n", 79 | "# Source: https://github.com/jjery2243542/voice_conversion\n", 80 | "\n", 81 | "speakers = [225,228,229,230,231,233,236,239,240,244,226,227,232,243,254,256,258,259,270,273]" 82 | ] 83 | }, 84 | { 85 | "cell_type": "code", 86 | "execution_count": null, 87 | "id": "9302fb6a", 88 | "metadata": {}, 89 | "outputs": [], 90 | "source": [ 91 | "# downsample to 24 kHz\n", 92 | "\n", 93 | "for p in speakers:\n", 94 | " directory = __OUTPATH__ + '/p' + str(p)\n", 95 | " if not os.path.exists(directory):\n", 96 | " audio = combine(__CORPUSPATH__ + '/wav48/p' + str(p))\n", 97 | " chunks = split(audio)\n", 98 | " save_chunks(chunks, directory)" 99 | ] 100 | }, 101 | { 102 | "cell_type": "code", 103 | "execution_count": null, 104 | "id": "4b0ca022", 105 | "metadata": {}, 106 | "outputs": [], 107 | "source": [ 108 | "# get all speakers\n", 109 | "\n", 110 | "data_list = []\n", 111 | "for path, subdirs, files in os.walk(__OUTPATH__):\n", 112 | " for name in files:\n", 113 | " if name.endswith(\".wav\"):\n", 114 | " speaker = int(path.split('/')[-1].replace('p', ''))\n", 115 | " if speaker in speakers:\n", 116 | " data_list.append({\"Path\": os.path.join(path, name), \"Speaker\": int(speakers.index(speaker)) + 1})\n", 117 | " \n", 118 | "import pandas as pd\n", 119 | "\n", 120 | "data_list = pd.DataFrame(data_list)\n", 121 | "data_list = data_list.sample(frac=1)\n", 122 | "\n", 123 | "import random\n", 124 | "\n", 125 | "split_idx = round(len(data_list) * 0.1)\n", 126 | "\n", 127 | "test_data = data_list[:split_idx]\n", 128 | "train_data = data_list[split_idx:]" 129 | ] 130 | }, 131 | { 132 | "cell_type": "code", 133 | "execution_count": null, 134 | "id": "88df2a45", 135 | "metadata": {}, 136 | "outputs": [], 137 | "source": [ 138 | "# write to file \n", 139 | "\n", 140 | "file_str = \"\"\n", 141 | "for index, k in train_data.iterrows():\n", 142 | " file_str += k['Path'] + \"|\" +str(k['Speaker'] - 1)+ '\\n'\n", 143 | "text_file = open(__OUTPATH__ + \"/train_list.txt\", \"w\")\n", 144 | "text_file.write(file_str)\n", 145 | "text_file.close()\n", 146 | "\n", 147 | "file_str = \"\"\n", 148 | "for index, k in test_data.iterrows():\n", 149 | " file_str += k['Path'] + \"|\" + str(k['Speaker'] - 1) + '\\n'\n", 150 | "text_file = open(__OUTPATH__ + \"/val_list.txt\", \"w\")\n", 151 | "text_file.write(file_str)\n", 152 | "text_file.close()" 153 | ] 154 | } 155 | ], 156 | "metadata": { 157 | "kernelspec": { 158 | "display_name": "Python 3", 159 | "language": "python", 160 | "name": "python3" 161 | }, 162 | "language_info": { 163 | "codemirror_mode": { 164 | "name": "ipython", 165 | "version": 3 166 | }, 167 | "file_extension": ".py", 168 | "mimetype": "text/x-python", 169 | "name": "python", 170 | "nbconvert_exporter": "python", 171 | "pygments_lexer": "ipython3", 172 | "version": "3.7.10" 173 | } 174 | }, 175 | "nbformat": 4, 176 | "nbformat_minor": 5 177 | } 178 | -------------------------------------------------------------------------------- /Data/train_list.txt: -------------------------------------------------------------------------------- 1 | ./Data/p225/22.wav|0 2 | ./Data/p239/163.wav|7 3 | ./Data/p227/144.wav|11 4 | ./Data/p258/67.wav|16 5 | ./Data/p259/74.wav|17 6 | ./Data/p230/103.wav|3 7 | ./Data/p225/7.wav|0 8 | ./Data/p226/67.wav|10 9 | ./Data/p228/27.wav|1 10 | ./Data/p243/23.wav|13 11 | ./Data/p228/3.wav|1 12 | ./Data/p244/61.wav|9 13 | ./Data/p230/178.wav|3 14 | ./Data/p240/120.wav|8 15 | ./Data/p228/154.wav|1 16 | ./Data/p230/146.wav|3 17 | ./Data/p240/149.wav|8 18 | ./Data/p254/56.wav|14 19 | ./Data/p240/81.wav|8 20 | ./Data/p226/27.wav|10 21 | ./Data/p256/59.wav|15 22 | ./Data/p231/74.wav|4 23 | ./Data/p231/9.wav|4 24 | ./Data/p240/1.wav|8 25 | ./Data/p236/135.wav|6 26 | ./Data/p232/85.wav|12 27 | ./Data/p230/69.wav|3 28 | ./Data/p256/35.wav|15 29 | ./Data/p239/6.wav|7 30 | ./Data/p254/70.wav|14 31 | ./Data/p244/135.wav|9 32 | ./Data/p254/114.wav|14 33 | ./Data/p236/117.wav|6 34 | ./Data/p225/78.wav|0 35 | ./Data/p236/66.wav|6 36 | ./Data/p228/155.wav|1 37 | ./Data/p239/83.wav|7 38 | ./Data/p240/22.wav|8 39 | ./Data/p225/2.wav|0 40 | ./Data/p230/75.wav|3 41 | ./Data/p239/17.wav|7 42 | ./Data/p239/147.wav|7 43 | ./Data/p273/125.wav|19 44 | ./Data/p270/17.wav|18 45 | ./Data/p233/74.wav|5 46 | ./Data/p233/112.wav|5 47 | ./Data/p228/1.wav|1 48 | ./Data/p258/125.wav|16 49 | ./Data/p231/56.wav|4 50 | ./Data/p227/101.wav|11 51 | ./Data/p232/108.wav|12 52 | ./Data/p239/82.wav|7 53 | ./Data/p270/160.wav|18 54 | ./Data/p227/58.wav|11 55 | ./Data/p233/111.wav|5 56 | ./Data/p259/146.wav|17 57 | ./Data/p230/77.wav|3 58 | ./Data/p256/104.wav|15 59 | ./Data/p228/140.wav|1 60 | ./Data/p231/143.wav|4 61 | ./Data/p270/20.wav|18 62 | ./Data/p225/62.wav|0 63 | ./Data/p229/11.wav|2 64 | ./Data/p259/66.wav|17 65 | ./Data/p239/53.wav|7 66 | ./Data/p239/23.wav|7 67 | ./Data/p240/115.wav|8 68 | ./Data/p233/41.wav|5 69 | ./Data/p270/61.wav|18 70 | ./Data/p232/50.wav|12 71 | ./Data/p239/56.wav|7 72 | ./Data/p244/117.wav|9 73 | ./Data/p233/6.wav|5 74 | ./Data/p227/31.wav|11 75 | ./Data/p231/134.wav|4 76 | ./Data/p243/12.wav|13 77 | ./Data/p226/14.wav|10 78 | ./Data/p240/45.wav|8 79 | ./Data/p231/91.wav|4 80 | ./Data/p259/163.wav|17 81 | ./Data/p236/41.wav|6 82 | ./Data/p231/66.wav|4 83 | ./Data/p233/122.wav|5 84 | ./Data/p244/8.wav|9 85 | ./Data/p232/41.wav|12 86 | ./Data/p232/101.wav|12 87 | ./Data/p273/70.wav|19 88 | ./Data/p270/168.wav|18 89 | ./Data/p226/80.wav|10 90 | ./Data/p270/178.wav|18 91 | ./Data/p225/39.wav|0 92 | ./Data/p258/29.wav|16 93 | ./Data/p231/46.wav|4 94 | ./Data/p244/41.wav|9 95 | ./Data/p227/115.wav|11 96 | ./Data/p228/14.wav|1 97 | ./Data/p239/116.wav|7 98 | ./Data/p259/13.wav|17 99 | ./Data/p254/51.wav|14 100 | ./Data/p256/36.wav|15 101 | ./Data/p254/108.wav|14 102 | ./Data/p226/46.wav|10 103 | ./Data/p258/39.wav|16 104 | ./Data/p273/106.wav|19 105 | ./Data/p228/104.wav|1 106 | ./Data/p256/1.wav|15 107 | ./Data/p258/109.wav|16 108 | ./Data/p259/123.wav|17 109 | ./Data/p258/99.wav|16 110 | ./Data/p256/61.wav|15 111 | ./Data/p231/17.wav|4 112 | ./Data/p227/74.wav|11 113 | ./Data/p256/21.wav|15 114 | ./Data/p226/1.wav|10 115 | ./Data/p231/129.wav|4 116 | ./Data/p231/79.wav|4 117 | ./Data/p226/74.wav|10 118 | ./Data/p233/69.wav|5 119 | ./Data/p227/44.wav|11 120 | ./Data/p239/141.wav|7 121 | ./Data/p228/28.wav|1 122 | ./Data/p239/101.wav|7 123 | ./Data/p258/106.wav|16 124 | ./Data/p236/49.wav|6 125 | ./Data/p230/46.wav|3 126 | ./Data/p244/118.wav|9 127 | ./Data/p227/25.wav|11 128 | ./Data/p243/25.wav|13 129 | ./Data/p270/96.wav|18 130 | ./Data/p228/130.wav|1 131 | ./Data/p230/62.wav|3 132 | ./Data/p227/114.wav|11 133 | ./Data/p228/116.wav|1 134 | ./Data/p233/40.wav|5 135 | ./Data/p230/147.wav|3 136 | ./Data/p240/71.wav|8 137 | ./Data/p233/29.wav|5 138 | ./Data/p230/13.wav|3 139 | ./Data/p239/63.wav|7 140 | ./Data/p228/19.wav|1 141 | ./Data/p233/63.wav|5 142 | ./Data/p227/50.wav|11 143 | ./Data/p270/6.wav|18 144 | ./Data/p228/106.wav|1 145 | ./Data/p236/86.wav|6 146 | ./Data/p240/129.wav|8 147 | ./Data/p273/21.wav|19 148 | ./Data/p256/83.wav|15 149 | ./Data/p240/85.wav|8 150 | ./Data/p258/43.wav|16 151 | ./Data/p273/41.wav|19 152 | ./Data/p270/192.wav|18 153 | ./Data/p230/134.wav|3 154 | ./Data/p228/44.wav|1 155 | ./Data/p231/102.wav|4 156 | ./Data/p270/73.wav|18 157 | ./Data/p239/153.wav|7 158 | ./Data/p270/36.wav|18 159 | ./Data/p273/145.wav|19 160 | ./Data/p228/107.wav|1 161 | ./Data/p244/12.wav|9 162 | ./Data/p270/181.wav|18 163 | ./Data/p231/35.wav|4 164 | ./Data/p233/132.wav|5 165 | ./Data/p226/19.wav|10 166 | ./Data/p239/91.wav|7 167 | ./Data/p225/66.wav|0 168 | ./Data/p229/40.wav|2 169 | ./Data/p227/48.wav|11 170 | ./Data/p225/44.wav|0 171 | ./Data/p229/108.wav|2 172 | ./Data/p227/47.wav|11 173 | ./Data/p270/78.wav|18 174 | ./Data/p259/77.wav|17 175 | ./Data/p239/51.wav|7 176 | ./Data/p230/58.wav|3 177 | ./Data/p233/81.wav|5 178 | ./Data/p230/150.wav|3 179 | ./Data/p227/141.wav|11 180 | ./Data/p243/121.wav|13 181 | ./Data/p244/11.wav|9 182 | ./Data/p270/63.wav|18 183 | ./Data/p236/81.wav|6 184 | ./Data/p229/89.wav|2 185 | ./Data/p231/83.wav|4 186 | ./Data/p233/33.wav|5 187 | ./Data/p227/107.wav|11 188 | ./Data/p228/48.wav|1 189 | ./Data/p259/44.wav|17 190 | ./Data/p228/131.wav|1 191 | ./Data/p227/20.wav|11 192 | ./Data/p256/98.wav|15 193 | ./Data/p273/45.wav|19 194 | ./Data/p239/137.wav|7 195 | ./Data/p232/93.wav|12 196 | ./Data/p239/38.wav|7 197 | ./Data/p243/161.wav|13 198 | ./Data/p258/3.wav|16 199 | ./Data/p273/132.wav|19 200 | ./Data/p230/15.wav|3 201 | ./Data/p259/155.wav|17 202 | ./Data/p256/125.wav|15 203 | ./Data/p256/7.wav|15 204 | ./Data/p231/58.wav|4 205 | ./Data/p256/75.wav|15 206 | ./Data/p236/116.wav|6 207 | ./Data/p233/10.wav|5 208 | ./Data/p270/39.wav|18 209 | ./Data/p254/48.wav|14 210 | ./Data/p270/121.wav|18 211 | ./Data/p240/139.wav|8 212 | ./Data/p240/121.wav|8 213 | ./Data/p244/13.wav|9 214 | ./Data/p243/148.wav|13 215 | ./Data/p240/125.wav|8 216 | ./Data/p259/14.wav|17 217 | ./Data/p273/139.wav|19 218 | ./Data/p233/123.wav|5 219 | ./Data/p225/34.wav|0 220 | ./Data/p244/10.wav|9 221 | ./Data/p258/4.wav|16 222 | ./Data/p236/111.wav|6 223 | ./Data/p259/59.wav|17 224 | ./Data/p258/85.wav|16 225 | ./Data/p227/73.wav|11 226 | ./Data/p273/107.wav|19 227 | ./Data/p231/94.wav|4 228 | ./Data/p231/34.wav|4 229 | ./Data/p270/200.wav|18 230 | ./Data/p273/74.wav|19 231 | ./Data/p232/45.wav|12 232 | ./Data/p227/37.wav|11 233 | ./Data/p256/101.wav|15 234 | ./Data/p233/64.wav|5 235 | ./Data/p228/52.wav|1 236 | ./Data/p254/104.wav|14 237 | ./Data/p236/103.wav|6 238 | ./Data/p233/73.wav|5 239 | ./Data/p243/146.wav|13 240 | ./Data/p258/60.wav|16 241 | ./Data/p254/8.wav|14 242 | ./Data/p226/64.wav|10 243 | ./Data/p243/63.wav|13 244 | ./Data/p226/70.wav|10 245 | ./Data/p233/37.wav|5 246 | ./Data/p254/78.wav|14 247 | ./Data/p227/123.wav|11 248 | ./Data/p240/55.wav|8 249 | ./Data/p229/126.wav|2 250 | ./Data/p254/54.wav|14 251 | ./Data/p243/163.wav|13 252 | ./Data/p273/79.wav|19 253 | ./Data/p230/9.wav|3 254 | ./Data/p270/50.wav|18 255 | ./Data/p243/64.wav|13 256 | ./Data/p229/100.wav|2 257 | ./Data/p240/100.wav|8 258 | ./Data/p239/139.wav|7 259 | ./Data/p236/65.wav|6 260 | ./Data/p243/97.wav|13 261 | ./Data/p258/37.wav|16 262 | ./Data/p233/9.wav|5 263 | ./Data/p243/10.wav|13 264 | ./Data/p244/53.wav|9 265 | ./Data/p259/162.wav|17 266 | ./Data/p236/131.wav|6 267 | ./Data/p227/134.wav|11 268 | ./Data/p228/5.wav|1 269 | ./Data/p273/18.wav|19 270 | ./Data/p243/115.wav|13 271 | ./Data/p256/113.wav|15 272 | ./Data/p243/103.wav|13 273 | ./Data/p273/133.wav|19 274 | ./Data/p244/90.wav|9 275 | ./Data/p258/45.wav|16 276 | ./Data/p229/16.wav|2 277 | ./Data/p244/25.wav|9 278 | ./Data/p225/95.wav|0 279 | ./Data/p230/18.wav|3 280 | ./Data/p270/196.wav|18 281 | ./Data/p229/58.wav|2 282 | ./Data/p239/125.wav|7 283 | ./Data/p225/27.wav|0 284 | ./Data/p239/13.wav|7 285 | ./Data/p259/121.wav|17 286 | ./Data/p240/12.wav|8 287 | ./Data/p270/40.wav|18 288 | ./Data/p258/17.wav|16 289 | ./Data/p270/123.wav|18 290 | ./Data/p258/93.wav|16 291 | ./Data/p229/43.wav|2 292 | ./Data/p243/152.wav|13 293 | ./Data/p236/11.wav|6 294 | ./Data/p232/38.wav|12 295 | ./Data/p225/9.wav|0 296 | ./Data/p270/128.wav|18 297 | ./Data/p258/22.wav|16 298 | ./Data/p227/113.wav|11 299 | ./Data/p228/128.wav|1 300 | ./Data/p228/56.wav|1 301 | ./Data/p239/19.wav|7 302 | ./Data/p273/134.wav|19 303 | ./Data/p231/144.wav|4 304 | ./Data/p231/16.wav|4 305 | ./Data/p259/141.wav|17 306 | ./Data/p227/9.wav|11 307 | ./Data/p273/114.wav|19 308 | ./Data/p225/94.wav|0 309 | ./Data/p273/42.wav|19 310 | ./Data/p236/72.wav|6 311 | ./Data/p240/58.wav|8 312 | ./Data/p258/78.wav|16 313 | ./Data/p227/129.wav|11 314 | ./Data/p254/9.wav|14 315 | ./Data/p226/43.wav|10 316 | ./Data/p228/103.wav|1 317 | ./Data/p232/114.wav|12 318 | ./Data/p254/80.wav|14 319 | ./Data/p240/144.wav|8 320 | ./Data/p227/55.wav|11 321 | ./Data/p254/2.wav|14 322 | ./Data/p273/101.wav|19 323 | ./Data/p243/67.wav|13 324 | ./Data/p227/94.wav|11 325 | ./Data/p227/121.wav|11 326 | ./Data/p259/153.wav|17 327 | ./Data/p258/40.wav|16 328 | ./Data/p239/32.wav|7 329 | ./Data/p270/83.wav|18 330 | ./Data/p226/103.wav|10 331 | ./Data/p258/18.wav|16 332 | ./Data/p243/155.wav|13 333 | ./Data/p229/117.wav|2 334 | ./Data/p231/127.wav|4 335 | ./Data/p256/30.wav|15 336 | ./Data/p240/90.wav|8 337 | ./Data/p254/133.wav|14 338 | ./Data/p240/51.wav|8 339 | ./Data/p239/105.wav|7 340 | ./Data/p226/85.wav|10 341 | ./Data/p254/31.wav|14 342 | ./Data/p258/57.wav|16 343 | ./Data/p230/95.wav|3 344 | ./Data/p226/52.wav|10 345 | ./Data/p258/79.wav|16 346 | ./Data/p273/49.wav|19 347 | ./Data/p259/82.wav|17 348 | ./Data/p227/126.wav|11 349 | ./Data/p243/158.wav|13 350 | ./Data/p273/130.wav|19 351 | ./Data/p243/7.wav|13 352 | ./Data/p228/137.wav|1 353 | ./Data/p233/103.wav|5 354 | ./Data/p254/37.wav|14 355 | ./Data/p240/39.wav|8 356 | ./Data/p225/28.wav|0 357 | ./Data/p227/139.wav|11 358 | ./Data/p244/130.wav|9 359 | ./Data/p243/22.wav|13 360 | ./Data/p228/69.wav|1 361 | ./Data/p231/64.wav|4 362 | ./Data/p233/129.wav|5 363 | ./Data/p232/68.wav|12 364 | ./Data/p231/87.wav|4 365 | ./Data/p240/83.wav|8 366 | ./Data/p232/55.wav|12 367 | ./Data/p259/54.wav|17 368 | ./Data/p270/125.wav|18 369 | ./Data/p239/169.wav|7 370 | ./Data/p229/39.wav|2 371 | ./Data/p273/110.wav|19 372 | ./Data/p233/93.wav|5 373 | ./Data/p225/79.wav|0 374 | ./Data/p230/140.wav|3 375 | ./Data/p228/36.wav|1 376 | ./Data/p230/4.wav|3 377 | ./Data/p259/88.wav|17 378 | ./Data/p243/86.wav|13 379 | ./Data/p227/90.wav|11 380 | ./Data/p254/83.wav|14 381 | ./Data/p240/150.wav|8 382 | ./Data/p232/118.wav|12 383 | ./Data/p270/35.wav|18 384 | ./Data/p231/126.wav|4 385 | ./Data/p239/59.wav|7 386 | ./Data/p243/47.wav|13 387 | ./Data/p254/105.wav|14 388 | ./Data/p258/72.wav|16 389 | ./Data/p228/72.wav|1 390 | ./Data/p270/136.wav|18 391 | ./Data/p230/51.wav|3 392 | ./Data/p227/67.wav|11 393 | ./Data/p259/151.wav|17 394 | ./Data/p232/66.wav|12 395 | ./Data/p254/40.wav|14 396 | ./Data/p273/12.wav|19 397 | ./Data/p229/130.wav|2 398 | ./Data/p270/156.wav|18 399 | ./Data/p230/177.wav|3 400 | ./Data/p270/169.wav|18 401 | ./Data/p258/1.wav|16 402 | ./Data/p229/103.wav|2 403 | ./Data/p270/127.wav|18 404 | ./Data/p226/72.wav|10 405 | ./Data/p229/99.wav|2 406 | ./Data/p232/8.wav|12 407 | ./Data/p236/1.wav|6 408 | ./Data/p230/85.wav|3 409 | ./Data/p236/99.wav|6 410 | ./Data/p231/139.wav|4 411 | ./Data/p256/67.wav|15 412 | ./Data/p240/38.wav|8 413 | ./Data/p233/16.wav|5 414 | ./Data/p243/13.wav|13 415 | ./Data/p227/86.wav|11 416 | ./Data/p233/110.wav|5 417 | ./Data/p243/77.wav|13 418 | ./Data/p227/77.wav|11 419 | ./Data/p230/7.wav|3 420 | ./Data/p270/175.wav|18 421 | ./Data/p254/38.wav|14 422 | ./Data/p227/71.wav|11 423 | ./Data/p229/104.wav|2 424 | ./Data/p231/101.wav|4 425 | ./Data/p229/105.wav|2 426 | ./Data/p225/49.wav|0 427 | ./Data/p230/137.wav|3 428 | ./Data/p226/42.wav|10 429 | ./Data/p233/92.wav|5 430 | ./Data/p243/58.wav|13 431 | ./Data/p239/45.wav|7 432 | ./Data/p233/135.wav|5 433 | ./Data/p244/89.wav|9 434 | ./Data/p243/166.wav|13 435 | ./Data/p240/59.wav|8 436 | ./Data/p254/86.wav|14 437 | ./Data/p243/60.wav|13 438 | ./Data/p227/19.wav|11 439 | ./Data/p231/45.wav|4 440 | ./Data/p227/140.wav|11 441 | ./Data/p236/129.wav|6 442 | ./Data/p240/67.wav|8 443 | ./Data/p227/61.wav|11 444 | ./Data/p228/77.wav|1 445 | ./Data/p236/52.wav|6 446 | ./Data/p258/33.wav|16 447 | ./Data/p244/104.wav|9 448 | ./Data/p259/84.wav|17 449 | ./Data/p236/127.wav|6 450 | ./Data/p228/150.wav|1 451 | ./Data/p233/85.wav|5 452 | ./Data/p270/147.wav|18 453 | ./Data/p229/83.wav|2 454 | ./Data/p226/68.wav|10 455 | ./Data/p229/94.wav|2 456 | ./Data/p270/46.wav|18 457 | ./Data/p258/129.wav|16 458 | ./Data/p270/191.wav|18 459 | ./Data/p227/106.wav|11 460 | ./Data/p239/136.wav|7 461 | ./Data/p239/14.wav|7 462 | ./Data/p239/71.wav|7 463 | ./Data/p232/74.wav|12 464 | ./Data/p225/75.wav|0 465 | ./Data/p244/143.wav|9 466 | ./Data/p259/173.wav|17 467 | ./Data/p243/140.wav|13 468 | ./Data/p273/48.wav|19 469 | ./Data/p230/111.wav|3 470 | ./Data/p240/94.wav|8 471 | ./Data/p258/20.wav|16 472 | ./Data/p227/52.wav|11 473 | ./Data/p244/4.wav|9 474 | ./Data/p227/109.wav|11 475 | ./Data/p230/55.wav|3 476 | ./Data/p232/92.wav|12 477 | ./Data/p240/75.wav|8 478 | ./Data/p229/82.wav|2 479 | ./Data/p270/103.wav|18 480 | ./Data/p254/87.wav|14 481 | ./Data/p259/38.wav|17 482 | ./Data/p240/147.wav|8 483 | ./Data/p227/111.wav|11 484 | ./Data/p228/2.wav|1 485 | ./Data/p230/82.wav|3 486 | ./Data/p239/33.wav|7 487 | ./Data/p259/65.wav|17 488 | ./Data/p273/102.wav|19 489 | ./Data/p227/116.wav|11 490 | ./Data/p258/61.wav|16 491 | ./Data/p228/68.wav|1 492 | ./Data/p244/116.wav|9 493 | ./Data/p240/9.wav|8 494 | ./Data/p273/64.wav|19 495 | ./Data/p273/9.wav|19 496 | ./Data/p230/8.wav|3 497 | ./Data/p230/172.wav|3 498 | ./Data/p243/32.wav|13 499 | ./Data/p258/117.wav|16 500 | ./Data/p236/43.wav|6 501 | ./Data/p243/29.wav|13 502 | ./Data/p231/86.wav|4 503 | ./Data/p231/6.wav|4 504 | ./Data/p236/166.wav|6 505 | ./Data/p270/174.wav|18 506 | ./Data/p229/123.wav|2 507 | ./Data/p243/132.wav|13 508 | ./Data/p228/91.wav|1 509 | ./Data/p273/100.wav|19 510 | ./Data/p243/61.wav|13 511 | ./Data/p233/14.wav|5 512 | ./Data/p256/5.wav|15 513 | ./Data/p228/135.wav|1 514 | ./Data/p254/21.wav|14 515 | ./Data/p230/96.wav|3 516 | ./Data/p240/142.wav|8 517 | ./Data/p259/63.wav|17 518 | ./Data/p243/37.wav|13 519 | ./Data/p228/136.wav|1 520 | ./Data/p254/126.wav|14 521 | ./Data/p225/51.wav|0 522 | ./Data/p258/9.wav|16 523 | ./Data/p270/85.wav|18 524 | ./Data/p228/149.wav|1 525 | ./Data/p236/152.wav|6 526 | ./Data/p259/124.wav|17 527 | ./Data/p244/1.wav|9 528 | ./Data/p259/104.wav|17 529 | ./Data/p227/64.wav|11 530 | ./Data/p230/70.wav|3 531 | ./Data/p256/122.wav|15 532 | ./Data/p258/30.wav|16 533 | ./Data/p244/54.wav|9 534 | ./Data/p270/198.wav|18 535 | ./Data/p258/15.wav|16 536 | ./Data/p254/52.wav|14 537 | ./Data/p228/85.wav|1 538 | ./Data/p230/1.wav|3 539 | ./Data/p230/71.wav|3 540 | ./Data/p259/147.wav|17 541 | ./Data/p243/68.wav|13 542 | ./Data/p226/79.wav|10 543 | ./Data/p243/123.wav|13 544 | ./Data/p229/85.wav|2 545 | ./Data/p270/5.wav|18 546 | ./Data/p226/12.wav|10 547 | ./Data/p231/82.wav|4 548 | ./Data/p230/120.wav|3 549 | ./Data/p225/31.wav|0 550 | ./Data/p236/130.wav|6 551 | ./Data/p239/111.wav|7 552 | ./Data/p230/60.wav|3 553 | ./Data/p232/121.wav|12 554 | ./Data/p259/27.wav|17 555 | ./Data/p228/65.wav|1 556 | ./Data/p231/92.wav|4 557 | ./Data/p236/160.wav|6 558 | ./Data/p258/145.wav|16 559 | ./Data/p231/20.wav|4 560 | ./Data/p226/47.wav|10 561 | ./Data/p258/110.wav|16 562 | ./Data/p231/93.wav|4 563 | ./Data/p270/30.wav|18 564 | ./Data/p227/97.wav|11 565 | ./Data/p231/31.wav|4 566 | ./Data/p273/55.wav|19 567 | ./Data/p239/12.wav|7 568 | ./Data/p240/63.wav|8 569 | ./Data/p254/57.wav|14 570 | ./Data/p244/35.wav|9 571 | ./Data/p239/127.wav|7 572 | ./Data/p226/130.wav|10 573 | ./Data/p225/83.wav|0 574 | ./Data/p259/56.wav|17 575 | ./Data/p273/85.wav|19 576 | ./Data/p244/129.wav|9 577 | ./Data/p273/83.wav|19 578 | ./Data/p270/45.wav|18 579 | ./Data/p273/23.wav|19 580 | ./Data/p233/15.wav|5 581 | ./Data/p256/34.wav|15 582 | ./Data/p273/38.wav|19 583 | ./Data/p244/73.wav|9 584 | ./Data/p243/43.wav|13 585 | ./Data/p270/26.wav|18 586 | ./Data/p239/87.wav|7 587 | ./Data/p233/120.wav|5 588 | ./Data/p236/14.wav|6 589 | ./Data/p227/5.wav|11 590 | ./Data/p258/104.wav|16 591 | ./Data/p227/45.wav|11 592 | ./Data/p229/35.wav|2 593 | ./Data/p273/36.wav|19 594 | ./Data/p240/82.wav|8 595 | ./Data/p254/20.wav|14 596 | ./Data/p232/128.wav|12 597 | ./Data/p254/47.wav|14 598 | ./Data/p270/102.wav|18 599 | ./Data/p230/41.wav|3 600 | ./Data/p225/23.wav|0 601 | ./Data/p258/38.wav|16 602 | ./Data/p233/137.wav|5 603 | ./Data/p254/94.wav|14 604 | ./Data/p244/122.wav|9 605 | ./Data/p229/51.wav|2 606 | ./Data/p244/96.wav|9 607 | ./Data/p273/119.wav|19 608 | ./Data/p227/80.wav|11 609 | ./Data/p225/1.wav|0 610 | ./Data/p244/80.wav|9 611 | ./Data/p233/108.wav|5 612 | ./Data/p259/119.wav|17 613 | ./Data/p226/8.wav|10 614 | ./Data/p228/60.wav|1 615 | ./Data/p233/71.wav|5 616 | ./Data/p243/168.wav|13 617 | ./Data/p226/136.wav|10 618 | ./Data/p236/110.wav|6 619 | ./Data/p228/23.wav|1 620 | ./Data/p244/137.wav|9 621 | ./Data/p240/33.wav|8 622 | ./Data/p256/13.wav|15 623 | ./Data/p243/6.wav|13 624 | ./Data/p227/30.wav|11 625 | ./Data/p244/28.wav|9 626 | ./Data/p228/24.wav|1 627 | ./Data/p243/147.wav|13 628 | ./Data/p231/39.wav|4 629 | ./Data/p254/93.wav|14 630 | ./Data/p256/29.wav|15 631 | ./Data/p258/119.wav|16 632 | ./Data/p240/69.wav|8 633 | ./Data/p232/102.wav|12 634 | ./Data/p233/101.wav|5 635 | ./Data/p270/29.wav|18 636 | ./Data/p233/47.wav|5 637 | ./Data/p259/17.wav|17 638 | ./Data/p228/94.wav|1 639 | ./Data/p231/21.wav|4 640 | ./Data/p230/143.wav|3 641 | ./Data/p270/204.wav|18 642 | ./Data/p229/71.wav|2 643 | ./Data/p232/13.wav|12 644 | ./Data/p227/127.wav|11 645 | ./Data/p258/105.wav|16 646 | ./Data/p227/112.wav|11 647 | ./Data/p270/59.wav|18 648 | ./Data/p232/47.wav|12 649 | ./Data/p236/112.wav|6 650 | ./Data/p273/115.wav|19 651 | ./Data/p236/20.wav|6 652 | ./Data/p258/115.wav|16 653 | ./Data/p256/24.wav|15 654 | ./Data/p273/76.wav|19 655 | ./Data/p231/3.wav|4 656 | ./Data/p225/56.wav|0 657 | ./Data/p259/150.wav|17 658 | ./Data/p227/70.wav|11 659 | ./Data/p230/2.wav|3 660 | ./Data/p226/22.wav|10 661 | ./Data/p243/127.wav|13 662 | ./Data/p258/31.wav|16 663 | ./Data/p233/89.wav|5 664 | ./Data/p259/64.wav|17 665 | ./Data/p259/96.wav|17 666 | ./Data/p227/57.wav|11 667 | ./Data/p232/132.wav|12 668 | ./Data/p236/46.wav|6 669 | ./Data/p232/70.wav|12 670 | ./Data/p273/138.wav|19 671 | ./Data/p244/99.wav|9 672 | ./Data/p240/18.wav|8 673 | ./Data/p243/145.wav|13 674 | ./Data/p230/125.wav|3 675 | ./Data/p243/49.wav|13 676 | ./Data/p256/71.wav|15 677 | ./Data/p258/133.wav|16 678 | ./Data/p236/50.wav|6 679 | ./Data/p270/122.wav|18 680 | ./Data/p230/25.wav|3 681 | ./Data/p236/124.wav|6 682 | ./Data/p273/35.wav|19 683 | ./Data/p258/98.wav|16 684 | ./Data/p270/51.wav|18 685 | ./Data/p229/121.wav|2 686 | ./Data/p270/15.wav|18 687 | ./Data/p270/193.wav|18 688 | ./Data/p239/138.wav|7 689 | ./Data/p273/108.wav|19 690 | ./Data/p254/139.wav|14 691 | ./Data/p256/23.wav|15 692 | ./Data/p243/84.wav|13 693 | ./Data/p273/93.wav|19 694 | ./Data/p240/21.wav|8 695 | ./Data/p240/109.wav|8 696 | ./Data/p230/76.wav|3 697 | ./Data/p232/61.wav|12 698 | ./Data/p233/48.wav|5 699 | ./Data/p233/133.wav|5 700 | ./Data/p239/28.wav|7 701 | ./Data/p230/149.wav|3 702 | ./Data/p240/46.wav|8 703 | ./Data/p243/74.wav|13 704 | ./Data/p256/88.wav|15 705 | ./Data/p228/61.wav|1 706 | ./Data/p236/87.wav|6 707 | ./Data/p236/2.wav|6 708 | ./Data/p239/159.wav|7 709 | ./Data/p231/44.wav|4 710 | ./Data/p236/161.wav|6 711 | ./Data/p256/19.wav|15 712 | ./Data/p258/5.wav|16 713 | ./Data/p243/83.wav|13 714 | ./Data/p228/30.wav|1 715 | ./Data/p226/65.wav|10 716 | ./Data/p258/127.wav|16 717 | ./Data/p254/60.wav|14 718 | ./Data/p273/97.wav|19 719 | ./Data/p228/50.wav|1 720 | ./Data/p243/135.wav|13 721 | ./Data/p228/111.wav|1 722 | ./Data/p229/7.wav|2 723 | ./Data/p229/3.wav|2 724 | ./Data/p258/11.wav|16 725 | ./Data/p258/6.wav|16 726 | ./Data/p259/148.wav|17 727 | ./Data/p232/30.wav|12 728 | ./Data/p256/70.wav|15 729 | ./Data/p259/160.wav|17 730 | ./Data/p239/113.wav|7 731 | ./Data/p229/109.wav|2 732 | ./Data/p231/29.wav|4 733 | ./Data/p258/25.wav|16 734 | ./Data/p239/148.wav|7 735 | ./Data/p239/78.wav|7 736 | ./Data/p239/107.wav|7 737 | ./Data/p239/99.wav|7 738 | ./Data/p259/32.wav|17 739 | ./Data/p239/11.wav|7 740 | ./Data/p226/139.wav|10 741 | ./Data/p229/88.wav|2 742 | ./Data/p239/9.wav|7 743 | ./Data/p229/26.wav|2 744 | ./Data/p229/128.wav|2 745 | ./Data/p244/119.wav|9 746 | ./Data/p259/76.wav|17 747 | ./Data/p239/129.wav|7 748 | ./Data/p256/115.wav|15 749 | ./Data/p230/102.wav|3 750 | ./Data/p236/42.wav|6 751 | ./Data/p225/16.wav|0 752 | ./Data/p240/140.wav|8 753 | ./Data/p226/36.wav|10 754 | ./Data/p226/78.wav|10 755 | ./Data/p225/37.wav|0 756 | ./Data/p256/51.wav|15 757 | ./Data/p254/112.wav|14 758 | ./Data/p236/24.wav|6 759 | ./Data/p228/164.wav|1 760 | ./Data/p225/63.wav|0 761 | ./Data/p259/25.wav|17 762 | ./Data/p226/133.wav|10 763 | ./Data/p244/107.wav|9 764 | ./Data/p270/32.wav|18 765 | ./Data/p270/56.wav|18 766 | ./Data/p226/62.wav|10 767 | ./Data/p228/95.wav|1 768 | ./Data/p259/112.wav|17 769 | ./Data/p229/114.wav|2 770 | ./Data/p273/16.wav|19 771 | ./Data/p236/60.wav|6 772 | ./Data/p256/128.wav|15 773 | ./Data/p273/144.wav|19 774 | ./Data/p236/142.wav|6 775 | ./Data/p231/130.wav|4 776 | ./Data/p258/7.wav|16 777 | ./Data/p225/96.wav|0 778 | ./Data/p225/91.wav|0 779 | ./Data/p232/115.wav|12 780 | ./Data/p270/157.wav|18 781 | ./Data/p273/104.wav|19 782 | ./Data/p233/136.wav|5 783 | ./Data/p240/78.wav|8 784 | ./Data/p243/17.wav|13 785 | ./Data/p240/62.wav|8 786 | ./Data/p243/48.wav|13 787 | ./Data/p232/29.wav|12 788 | ./Data/p244/42.wav|9 789 | ./Data/p259/93.wav|17 790 | ./Data/p240/136.wav|8 791 | ./Data/p226/117.wav|10 792 | ./Data/p239/131.wav|7 793 | ./Data/p270/54.wav|18 794 | ./Data/p228/98.wav|1 795 | ./Data/p270/166.wav|18 796 | ./Data/p240/145.wav|8 797 | ./Data/p270/14.wav|18 798 | ./Data/p240/43.wav|8 799 | ./Data/p258/107.wav|16 800 | ./Data/p270/167.wav|18 801 | ./Data/p259/62.wav|17 802 | ./Data/p231/65.wav|4 803 | ./Data/p240/5.wav|8 804 | ./Data/p230/50.wav|3 805 | ./Data/p256/3.wav|15 806 | ./Data/p231/27.wav|4 807 | ./Data/p229/27.wav|2 808 | ./Data/p240/96.wav|8 809 | ./Data/p225/82.wav|0 810 | ./Data/p236/125.wav|6 811 | ./Data/p254/71.wav|14 812 | ./Data/p244/138.wav|9 813 | ./Data/p254/89.wav|14 814 | ./Data/p236/91.wav|6 815 | ./Data/p244/38.wav|9 816 | ./Data/p232/116.wav|12 817 | ./Data/p270/11.wav|18 818 | ./Data/p236/162.wav|6 819 | ./Data/p228/127.wav|1 820 | ./Data/p227/96.wav|11 821 | ./Data/p226/98.wav|10 822 | ./Data/p270/155.wav|18 823 | ./Data/p236/143.wav|6 824 | ./Data/p254/77.wav|14 825 | ./Data/p273/26.wav|19 826 | ./Data/p270/1.wav|18 827 | ./Data/p273/51.wav|19 828 | ./Data/p243/21.wav|13 829 | ./Data/p231/68.wav|4 830 | ./Data/p230/169.wav|3 831 | ./Data/p226/56.wav|10 832 | ./Data/p233/79.wav|5 833 | ./Data/p273/58.wav|19 834 | ./Data/p231/70.wav|4 835 | ./Data/p228/42.wav|1 836 | ./Data/p273/141.wav|19 837 | ./Data/p256/91.wav|15 838 | ./Data/p259/70.wav|17 839 | ./Data/p236/69.wav|6 840 | ./Data/p228/16.wav|1 841 | ./Data/p270/44.wav|18 842 | ./Data/p230/16.wav|3 843 | ./Data/p244/97.wav|9 844 | ./Data/p254/42.wav|14 845 | ./Data/p225/53.wav|0 846 | ./Data/p230/59.wav|3 847 | ./Data/p226/140.wav|10 848 | ./Data/p232/7.wav|12 849 | ./Data/p229/47.wav|2 850 | ./Data/p231/13.wav|4 851 | ./Data/p258/49.wav|16 852 | ./Data/p226/92.wav|10 853 | ./Data/p227/81.wav|11 854 | ./Data/p230/162.wav|3 855 | ./Data/p240/20.wav|8 856 | ./Data/p236/88.wav|6 857 | ./Data/p236/79.wav|6 858 | ./Data/p236/39.wav|6 859 | ./Data/p233/97.wav|5 860 | ./Data/p232/96.wav|12 861 | ./Data/p273/82.wav|19 862 | ./Data/p230/123.wav|3 863 | ./Data/p230/126.wav|3 864 | ./Data/p258/75.wav|16 865 | ./Data/p232/78.wav|12 866 | ./Data/p231/48.wav|4 867 | ./Data/p244/110.wav|9 868 | ./Data/p258/71.wav|16 869 | ./Data/p256/116.wav|15 870 | ./Data/p231/63.wav|4 871 | ./Data/p258/26.wav|16 872 | ./Data/p243/18.wav|13 873 | ./Data/p243/55.wav|13 874 | ./Data/p270/162.wav|18 875 | ./Data/p244/33.wav|9 876 | ./Data/p226/77.wav|10 877 | ./Data/p270/98.wav|18 878 | ./Data/p230/121.wav|3 879 | ./Data/p226/94.wav|10 880 | ./Data/p270/84.wav|18 881 | ./Data/p270/53.wav|18 882 | ./Data/p243/124.wav|13 883 | ./Data/p228/86.wav|1 884 | ./Data/p229/25.wav|2 885 | ./Data/p230/68.wav|3 886 | ./Data/p240/29.wav|8 887 | ./Data/p236/63.wav|6 888 | ./Data/p270/129.wav|18 889 | ./Data/p229/79.wav|2 890 | ./Data/p233/102.wav|5 891 | ./Data/p228/34.wav|1 892 | ./Data/p230/163.wav|3 893 | ./Data/p228/64.wav|1 894 | ./Data/p233/115.wav|5 895 | ./Data/p243/88.wav|13 896 | ./Data/p244/14.wav|9 897 | ./Data/p243/174.wav|13 898 | ./Data/p229/74.wav|2 899 | ./Data/p258/27.wav|16 900 | ./Data/p259/86.wav|17 901 | ./Data/p273/92.wav|19 902 | ./Data/p239/81.wav|7 903 | ./Data/p254/109.wav|14 904 | ./Data/p232/103.wav|12 905 | ./Data/p230/21.wav|3 906 | ./Data/p226/10.wav|10 907 | ./Data/p240/2.wav|8 908 | ./Data/p256/102.wav|15 909 | ./Data/p240/127.wav|8 910 | ./Data/p259/138.wav|17 911 | ./Data/p254/123.wav|14 912 | ./Data/p270/92.wav|18 913 | ./Data/p254/30.wav|14 914 | ./Data/p273/86.wav|19 915 | ./Data/p244/106.wav|9 916 | ./Data/p226/107.wav|10 917 | ./Data/p240/4.wav|8 918 | ./Data/p228/97.wav|1 919 | ./Data/p258/32.wav|16 920 | ./Data/p232/79.wav|12 921 | ./Data/p259/154.wav|17 922 | ./Data/p231/19.wav|4 923 | ./Data/p259/91.wav|17 924 | ./Data/p244/45.wav|9 925 | ./Data/p240/97.wav|8 926 | ./Data/p259/45.wav|17 927 | ./Data/p270/197.wav|18 928 | ./Data/p229/1.wav|2 929 | ./Data/p259/11.wav|17 930 | ./Data/p228/29.wav|1 931 | ./Data/p230/72.wav|3 932 | ./Data/p228/145.wav|1 933 | ./Data/p244/71.wav|9 934 | ./Data/p230/66.wav|3 935 | ./Data/p226/51.wav|10 936 | ./Data/p270/10.wav|18 937 | ./Data/p254/96.wav|14 938 | ./Data/p256/64.wav|15 939 | ./Data/p243/65.wav|13 940 | ./Data/p228/148.wav|1 941 | ./Data/p243/41.wav|13 942 | ./Data/p228/57.wav|1 943 | ./Data/p239/92.wav|7 944 | ./Data/p256/124.wav|15 945 | ./Data/p259/116.wav|17 946 | ./Data/p233/70.wav|5 947 | ./Data/p227/1.wav|11 948 | ./Data/p231/59.wav|4 949 | ./Data/p243/30.wav|13 950 | ./Data/p254/41.wav|14 951 | ./Data/p228/123.wav|1 952 | ./Data/p239/20.wav|7 953 | ./Data/p229/77.wav|2 954 | ./Data/p239/132.wav|7 955 | ./Data/p243/144.wav|13 956 | ./Data/p227/137.wav|11 957 | ./Data/p239/134.wav|7 958 | ./Data/p240/108.wav|8 959 | ./Data/p256/118.wav|15 960 | ./Data/p256/126.wav|15 961 | ./Data/p226/110.wav|10 962 | ./Data/p236/29.wav|6 963 | ./Data/p236/74.wav|6 964 | ./Data/p231/77.wav|4 965 | ./Data/p256/45.wav|15 966 | ./Data/p256/39.wav|15 967 | ./Data/p228/66.wav|1 968 | ./Data/p232/35.wav|12 969 | ./Data/p273/37.wav|19 970 | ./Data/p240/135.wav|8 971 | ./Data/p236/73.wav|6 972 | ./Data/p256/38.wav|15 973 | ./Data/p243/109.wav|13 974 | ./Data/p227/33.wav|11 975 | ./Data/p259/87.wav|17 976 | ./Data/p225/55.wav|0 977 | ./Data/p243/138.wav|13 978 | ./Data/p227/3.wav|11 979 | ./Data/p254/74.wav|14 980 | ./Data/p254/137.wav|14 981 | ./Data/p228/43.wav|1 982 | ./Data/p270/71.wav|18 983 | ./Data/p243/56.wav|13 984 | ./Data/p228/119.wav|1 985 | ./Data/p244/136.wav|9 986 | ./Data/p259/94.wav|17 987 | ./Data/p259/120.wav|17 988 | ./Data/p230/74.wav|3 989 | ./Data/p227/100.wav|11 990 | ./Data/p228/143.wav|1 991 | ./Data/p225/98.wav|0 992 | ./Data/p256/2.wav|15 993 | ./Data/p273/146.wav|19 994 | ./Data/p230/99.wav|3 995 | ./Data/p243/20.wav|13 996 | ./Data/p258/96.wav|16 997 | ./Data/p226/87.wav|10 998 | ./Data/p240/64.wav|8 999 | ./Data/p243/114.wav|13 1000 | ./Data/p273/77.wav|19 1001 | ./Data/p256/48.wav|15 1002 | ./Data/p258/120.wav|16 1003 | ./Data/p240/111.wav|8 1004 | ./Data/p226/73.wav|10 1005 | ./Data/p229/15.wav|2 1006 | ./Data/p270/165.wav|18 1007 | ./Data/p226/124.wav|10 1008 | ./Data/p254/53.wav|14 1009 | ./Data/p239/97.wav|7 1010 | ./Data/p236/71.wav|6 1011 | ./Data/p243/66.wav|13 1012 | ./Data/p230/26.wav|3 1013 | ./Data/p233/17.wav|5 1014 | ./Data/p273/143.wav|19 1015 | ./Data/p229/6.wav|2 1016 | ./Data/p258/41.wav|16 1017 | ./Data/p240/10.wav|8 1018 | ./Data/p244/115.wav|9 1019 | ./Data/p256/8.wav|15 1020 | ./Data/p243/133.wav|13 1021 | ./Data/p236/145.wav|6 1022 | ./Data/p240/110.wav|8 1023 | ./Data/p270/100.wav|18 1024 | ./Data/p230/167.wav|3 1025 | ./Data/p270/27.wav|18 1026 | ./Data/p243/149.wav|13 1027 | ./Data/p228/139.wav|1 1028 | ./Data/p256/96.wav|15 1029 | ./Data/p230/61.wav|3 1030 | ./Data/p258/42.wav|16 1031 | ./Data/p236/94.wav|6 1032 | ./Data/p230/42.wav|3 1033 | ./Data/p270/144.wav|18 1034 | ./Data/p228/141.wav|1 1035 | ./Data/p232/4.wav|12 1036 | ./Data/p229/8.wav|2 1037 | ./Data/p230/39.wav|3 1038 | ./Data/p256/47.wav|15 1039 | ./Data/p229/54.wav|2 1040 | ./Data/p239/168.wav|7 1041 | ./Data/p227/7.wav|11 1042 | ./Data/p227/93.wav|11 1043 | ./Data/p240/13.wav|8 1044 | ./Data/p270/172.wav|18 1045 | ./Data/p243/45.wav|13 1046 | ./Data/p259/30.wav|17 1047 | ./Data/p270/116.wav|18 1048 | ./Data/p240/48.wav|8 1049 | ./Data/p227/24.wav|11 1050 | ./Data/p229/80.wav|2 1051 | ./Data/p233/2.wav|5 1052 | ./Data/p228/87.wav|1 1053 | ./Data/p240/105.wav|8 1054 | ./Data/p239/60.wav|7 1055 | ./Data/p244/39.wav|9 1056 | ./Data/p240/124.wav|8 1057 | ./Data/p259/145.wav|17 1058 | ./Data/p227/76.wav|11 1059 | ./Data/p254/58.wav|14 1060 | ./Data/p230/156.wav|3 1061 | ./Data/p229/42.wav|2 1062 | ./Data/p273/68.wav|19 1063 | ./Data/p228/146.wav|1 1064 | ./Data/p236/165.wav|6 1065 | ./Data/p229/34.wav|2 1066 | ./Data/p239/123.wav|7 1067 | ./Data/p273/121.wav|19 1068 | ./Data/p270/176.wav|18 1069 | ./Data/p258/74.wav|16 1070 | ./Data/p254/84.wav|14 1071 | ./Data/p259/157.wav|17 1072 | ./Data/p258/130.wav|16 1073 | ./Data/p244/18.wav|9 1074 | ./Data/p229/59.wav|2 1075 | ./Data/p229/10.wav|2 1076 | ./Data/p273/89.wav|19 1077 | ./Data/p259/23.wav|17 1078 | ./Data/p256/6.wav|15 1079 | ./Data/p227/8.wav|11 1080 | ./Data/p258/59.wav|16 1081 | ./Data/p232/91.wav|12 1082 | ./Data/p258/137.wav|16 1083 | ./Data/p258/122.wav|16 1084 | ./Data/p230/89.wav|3 1085 | ./Data/p232/58.wav|12 1086 | ./Data/p231/11.wav|4 1087 | ./Data/p273/120.wav|19 1088 | ./Data/p232/39.wav|12 1089 | ./Data/p236/44.wav|6 1090 | ./Data/p254/12.wav|14 1091 | ./Data/p270/95.wav|18 1092 | ./Data/p270/153.wav|18 1093 | ./Data/p230/164.wav|3 1094 | ./Data/p225/30.wav|0 1095 | ./Data/p240/126.wav|8 1096 | ./Data/p230/54.wav|3 1097 | ./Data/p270/87.wav|18 1098 | ./Data/p225/14.wav|0 1099 | ./Data/p231/145.wav|4 1100 | ./Data/p254/81.wav|14 1101 | ./Data/p244/55.wav|9 1102 | ./Data/p259/3.wav|17 1103 | ./Data/p273/50.wav|19 1104 | ./Data/p228/84.wav|1 1105 | ./Data/p244/3.wav|9 1106 | ./Data/p239/55.wav|7 1107 | ./Data/p232/5.wav|12 1108 | ./Data/p229/111.wav|2 1109 | ./Data/p236/141.wav|6 1110 | ./Data/p233/54.wav|5 1111 | ./Data/p240/88.wav|8 1112 | ./Data/p236/16.wav|6 1113 | ./Data/p239/154.wav|7 1114 | ./Data/p240/72.wav|8 1115 | ./Data/p236/75.wav|6 1116 | ./Data/p230/166.wav|3 1117 | ./Data/p231/122.wav|4 1118 | ./Data/p273/24.wav|19 1119 | ./Data/p233/30.wav|5 1120 | ./Data/p226/9.wav|10 1121 | ./Data/p240/65.wav|8 1122 | ./Data/p228/80.wav|1 1123 | ./Data/p232/46.wav|12 1124 | ./Data/p239/109.wav|7 1125 | ./Data/p231/67.wav|4 1126 | ./Data/p233/67.wav|5 1127 | ./Data/p228/162.wav|1 1128 | ./Data/p229/134.wav|2 1129 | ./Data/p239/27.wav|7 1130 | ./Data/p227/145.wav|11 1131 | ./Data/p225/67.wav|0 1132 | ./Data/p232/99.wav|12 1133 | ./Data/p270/140.wav|18 1134 | ./Data/p225/70.wav|0 1135 | ./Data/p259/21.wav|17 1136 | ./Data/p230/28.wav|3 1137 | ./Data/p230/80.wav|3 1138 | ./Data/p243/34.wav|13 1139 | ./Data/p254/61.wav|14 1140 | ./Data/p236/58.wav|6 1141 | ./Data/p239/21.wav|7 1142 | ./Data/p230/91.wav|3 1143 | ./Data/p256/68.wav|15 1144 | ./Data/p225/21.wav|0 1145 | ./Data/p233/49.wav|5 1146 | ./Data/p236/114.wav|6 1147 | ./Data/p228/134.wav|1 1148 | ./Data/p231/114.wav|4 1149 | ./Data/p239/18.wav|7 1150 | ./Data/p227/132.wav|11 1151 | ./Data/p236/115.wav|6 1152 | ./Data/p254/99.wav|14 1153 | ./Data/p243/143.wav|13 1154 | ./Data/p270/49.wav|18 1155 | ./Data/p239/152.wav|7 1156 | ./Data/p232/120.wav|12 1157 | ./Data/p256/25.wav|15 1158 | ./Data/p229/116.wav|2 1159 | ./Data/p239/130.wav|7 1160 | ./Data/p254/124.wav|14 1161 | ./Data/p270/118.wav|18 1162 | ./Data/p244/46.wav|9 1163 | ./Data/p231/105.wav|4 1164 | ./Data/p231/115.wav|4 1165 | ./Data/p239/144.wav|7 1166 | ./Data/p226/39.wav|10 1167 | ./Data/p233/78.wav|5 1168 | ./Data/p227/53.wav|11 1169 | ./Data/p239/146.wav|7 1170 | ./Data/p256/77.wav|15 1171 | ./Data/p259/37.wav|17 1172 | ./Data/p258/36.wav|16 1173 | ./Data/p254/13.wav|14 1174 | ./Data/p229/69.wav|2 1175 | ./Data/p231/90.wav|4 1176 | ./Data/p226/84.wav|10 1177 | ./Data/p259/48.wav|17 1178 | ./Data/p233/88.wav|5 1179 | ./Data/p228/153.wav|1 1180 | ./Data/p254/43.wav|14 1181 | ./Data/p231/97.wav|4 1182 | ./Data/p273/44.wav|19 1183 | ./Data/p233/27.wav|5 1184 | ./Data/p232/90.wav|12 1185 | ./Data/p254/36.wav|14 1186 | ./Data/p232/27.wav|12 1187 | ./Data/p230/113.wav|3 1188 | ./Data/p254/130.wav|14 1189 | ./Data/p254/62.wav|14 1190 | ./Data/p239/118.wav|7 1191 | ./Data/p230/109.wav|3 1192 | ./Data/p227/102.wav|11 1193 | ./Data/p226/48.wav|10 1194 | ./Data/p230/175.wav|3 1195 | ./Data/p231/60.wav|4 1196 | ./Data/p259/105.wav|17 1197 | ./Data/p233/28.wav|5 1198 | ./Data/p229/36.wav|2 1199 | ./Data/p256/111.wav|15 1200 | ./Data/p230/133.wav|3 1201 | ./Data/p233/125.wav|5 1202 | ./Data/p228/59.wav|1 1203 | ./Data/p239/58.wav|7 1204 | ./Data/p273/116.wav|19 1205 | ./Data/p230/97.wav|3 1206 | ./Data/p273/88.wav|19 1207 | ./Data/p228/93.wav|1 1208 | ./Data/p259/81.wav|17 1209 | ./Data/p228/144.wav|1 1210 | ./Data/p230/32.wav|3 1211 | ./Data/p240/6.wav|8 1212 | ./Data/p230/17.wav|3 1213 | ./Data/p259/98.wav|17 1214 | ./Data/p227/75.wav|11 1215 | ./Data/p231/26.wav|4 1216 | ./Data/p231/103.wav|4 1217 | ./Data/p236/67.wav|6 1218 | ./Data/p270/107.wav|18 1219 | ./Data/p226/24.wav|10 1220 | ./Data/p273/34.wav|19 1221 | ./Data/p236/90.wav|6 1222 | ./Data/p256/14.wav|15 1223 | ./Data/p236/140.wav|6 1224 | ./Data/p273/39.wav|19 1225 | ./Data/p270/163.wav|18 1226 | ./Data/p239/77.wav|7 1227 | ./Data/p230/148.wav|3 1228 | ./Data/p273/113.wav|19 1229 | ./Data/p254/140.wav|14 1230 | ./Data/p239/46.wav|7 1231 | ./Data/p243/51.wav|13 1232 | ./Data/p231/10.wav|4 1233 | ./Data/p231/104.wav|4 1234 | ./Data/p270/132.wav|18 1235 | ./Data/p228/108.wav|1 1236 | ./Data/p233/39.wav|5 1237 | ./Data/p259/130.wav|17 1238 | ./Data/p239/85.wav|7 1239 | ./Data/p240/37.wav|8 1240 | ./Data/p270/58.wav|18 1241 | ./Data/p243/78.wav|13 1242 | ./Data/p273/61.wav|19 1243 | ./Data/p230/144.wav|3 1244 | ./Data/p233/21.wav|5 1245 | ./Data/p225/35.wav|0 1246 | ./Data/p228/158.wav|1 1247 | ./Data/p259/26.wav|17 1248 | ./Data/p230/33.wav|3 1249 | ./Data/p258/128.wav|16 1250 | ./Data/p233/61.wav|5 1251 | ./Data/p225/97.wav|0 1252 | ./Data/p259/143.wav|17 1253 | ./Data/p226/50.wav|10 1254 | ./Data/p243/71.wav|13 1255 | ./Data/p230/22.wav|3 1256 | ./Data/p226/58.wav|10 1257 | ./Data/p239/110.wav|7 1258 | ./Data/p258/136.wav|16 1259 | ./Data/p226/102.wav|10 1260 | ./Data/p258/88.wav|16 1261 | ./Data/p233/94.wav|5 1262 | ./Data/p258/77.wav|16 1263 | ./Data/p231/2.wav|4 1264 | ./Data/p273/40.wav|19 1265 | ./Data/p239/133.wav|7 1266 | ./Data/p270/33.wav|18 1267 | ./Data/p254/132.wav|14 1268 | ./Data/p270/99.wav|18 1269 | ./Data/p227/84.wav|11 1270 | ./Data/p226/132.wav|10 1271 | ./Data/p239/165.wav|7 1272 | ./Data/p270/23.wav|18 1273 | ./Data/p270/41.wav|18 1274 | ./Data/p236/28.wav|6 1275 | ./Data/p231/76.wav|4 1276 | ./Data/p231/28.wav|4 1277 | ./Data/p236/56.wav|6 1278 | ./Data/p236/146.wav|6 1279 | ./Data/p244/125.wav|9 1280 | ./Data/p256/55.wav|15 1281 | ./Data/p232/40.wav|12 1282 | ./Data/p239/64.wav|7 1283 | ./Data/p240/130.wav|8 1284 | ./Data/p239/41.wav|7 1285 | ./Data/p240/138.wav|8 1286 | ./Data/p226/118.wav|10 1287 | ./Data/p228/62.wav|1 1288 | ./Data/p244/16.wav|9 1289 | ./Data/p244/20.wav|9 1290 | ./Data/p226/125.wav|10 1291 | ./Data/p270/74.wav|18 1292 | ./Data/p229/129.wav|2 1293 | ./Data/p227/142.wav|11 1294 | ./Data/p228/38.wav|1 1295 | ./Data/p258/97.wav|16 1296 | ./Data/p233/77.wav|5 1297 | ./Data/p232/84.wav|12 1298 | ./Data/p229/17.wav|2 1299 | ./Data/p227/18.wav|11 1300 | ./Data/p239/94.wav|7 1301 | ./Data/p239/1.wav|7 1302 | ./Data/p225/52.wav|0 1303 | ./Data/p270/82.wav|18 1304 | ./Data/p232/53.wav|12 1305 | ./Data/p258/51.wav|16 1306 | ./Data/p258/132.wav|16 1307 | ./Data/p229/66.wav|2 1308 | ./Data/p270/19.wav|18 1309 | ./Data/p227/88.wav|11 1310 | ./Data/p231/96.wav|4 1311 | ./Data/p239/72.wav|7 1312 | ./Data/p225/73.wav|0 1313 | ./Data/p240/146.wav|8 1314 | ./Data/p236/97.wav|6 1315 | ./Data/p227/43.wav|11 1316 | ./Data/p232/119.wav|12 1317 | ./Data/p231/53.wav|4 1318 | ./Data/p239/42.wav|7 1319 | ./Data/p259/115.wav|17 1320 | ./Data/p244/105.wav|9 1321 | ./Data/p256/33.wav|15 1322 | ./Data/p231/100.wav|4 1323 | ./Data/p240/8.wav|8 1324 | ./Data/p256/57.wav|15 1325 | ./Data/p227/130.wav|11 1326 | ./Data/p226/30.wav|10 1327 | ./Data/p233/80.wav|5 1328 | ./Data/p232/17.wav|12 1329 | ./Data/p259/167.wav|17 1330 | ./Data/p227/122.wav|11 1331 | ./Data/p239/128.wav|7 1332 | ./Data/p231/133.wav|4 1333 | ./Data/p273/129.wav|19 1334 | ./Data/p243/15.wav|13 1335 | ./Data/p243/44.wav|13 1336 | ./Data/p259/161.wav|17 1337 | ./Data/p243/94.wav|13 1338 | ./Data/p244/62.wav|9 1339 | ./Data/p270/180.wav|18 1340 | ./Data/p258/126.wav|16 1341 | ./Data/p229/137.wav|2 1342 | ./Data/p233/105.wav|5 1343 | ./Data/p244/79.wav|9 1344 | ./Data/p254/46.wav|14 1345 | ./Data/p240/95.wav|8 1346 | ./Data/p259/135.wav|17 1347 | ./Data/p259/52.wav|17 1348 | ./Data/p229/68.wav|2 1349 | ./Data/p254/33.wav|14 1350 | ./Data/p230/83.wav|3 1351 | ./Data/p256/89.wav|15 1352 | ./Data/p254/90.wav|14 1353 | ./Data/p270/182.wav|18 1354 | ./Data/p226/18.wav|10 1355 | ./Data/p270/145.wav|18 1356 | ./Data/p231/128.wav|4 1357 | ./Data/p239/140.wav|7 1358 | ./Data/p228/100.wav|1 1359 | ./Data/p227/49.wav|11 1360 | ./Data/p240/53.wav|8 1361 | ./Data/p258/108.wav|16 1362 | ./Data/p226/83.wav|10 1363 | ./Data/p270/106.wav|18 1364 | ./Data/p243/11.wav|13 1365 | ./Data/p229/12.wav|2 1366 | ./Data/p228/7.wav|1 1367 | ./Data/p243/8.wav|13 1368 | ./Data/p227/128.wav|11 1369 | ./Data/p230/118.wav|3 1370 | ./Data/p227/78.wav|11 1371 | ./Data/p244/30.wav|9 1372 | ./Data/p231/98.wav|4 1373 | ./Data/p230/38.wav|3 1374 | ./Data/p244/47.wav|9 1375 | ./Data/p270/138.wav|18 1376 | ./Data/p259/109.wav|17 1377 | ./Data/p270/112.wav|18 1378 | ./Data/p227/82.wav|11 1379 | ./Data/p228/161.wav|1 1380 | ./Data/p273/127.wav|19 1381 | ./Data/p232/72.wav|12 1382 | ./Data/p227/95.wav|11 1383 | ./Data/p236/105.wav|6 1384 | ./Data/p239/52.wav|7 1385 | ./Data/p273/135.wav|19 1386 | ./Data/p236/136.wav|6 1387 | ./Data/p228/113.wav|1 1388 | ./Data/p229/56.wav|2 1389 | ./Data/p240/34.wav|8 1390 | ./Data/p230/79.wav|3 1391 | ./Data/p232/48.wav|12 1392 | ./Data/p240/101.wav|8 1393 | ./Data/p229/112.wav|2 1394 | ./Data/p273/46.wav|19 1395 | ./Data/p273/27.wav|19 1396 | ./Data/p239/103.wav|7 1397 | ./Data/p259/117.wav|17 1398 | ./Data/p230/37.wav|3 1399 | ./Data/p233/138.wav|5 1400 | ./Data/p228/125.wav|1 1401 | ./Data/p230/115.wav|3 1402 | ./Data/p240/42.wav|8 1403 | ./Data/p231/99.wav|4 1404 | ./Data/p236/54.wav|6 1405 | ./Data/p233/104.wav|5 1406 | ./Data/p270/4.wav|18 1407 | ./Data/p226/122.wav|10 1408 | ./Data/p230/56.wav|3 1409 | ./Data/p244/58.wav|9 1410 | ./Data/p229/133.wav|2 1411 | ./Data/p270/64.wav|18 1412 | ./Data/p225/88.wav|0 1413 | ./Data/p240/104.wav|8 1414 | ./Data/p244/78.wav|9 1415 | ./Data/p254/113.wav|14 1416 | ./Data/p259/144.wav|17 1417 | ./Data/p236/100.wav|6 1418 | ./Data/p230/81.wav|3 1419 | ./Data/p259/53.wav|17 1420 | ./Data/p239/155.wav|7 1421 | ./Data/p236/148.wav|6 1422 | ./Data/p270/8.wav|18 1423 | ./Data/p225/90.wav|0 1424 | ./Data/p236/64.wav|6 1425 | ./Data/p236/159.wav|6 1426 | ./Data/p232/63.wav|12 1427 | ./Data/p244/2.wav|9 1428 | ./Data/p258/28.wav|16 1429 | ./Data/p259/5.wav|17 1430 | ./Data/p225/42.wav|0 1431 | ./Data/p256/49.wav|15 1432 | ./Data/p233/24.wav|5 1433 | ./Data/p270/146.wav|18 1434 | ./Data/p243/131.wav|13 1435 | ./Data/p229/91.wav|2 1436 | ./Data/p229/76.wav|2 1437 | ./Data/p227/22.wav|11 1438 | ./Data/p244/59.wav|9 1439 | ./Data/p236/17.wav|6 1440 | ./Data/p240/32.wav|8 1441 | ./Data/p232/23.wav|12 1442 | ./Data/p230/20.wav|3 1443 | ./Data/p232/111.wav|12 1444 | ./Data/p230/159.wav|3 1445 | ./Data/p244/15.wav|9 1446 | ./Data/p229/86.wav|2 1447 | ./Data/p240/54.wav|8 1448 | ./Data/p229/132.wav|2 1449 | ./Data/p239/126.wav|7 1450 | ./Data/p240/91.wav|8 1451 | ./Data/p244/51.wav|9 1452 | ./Data/p254/19.wav|14 1453 | ./Data/p244/32.wav|9 1454 | ./Data/p258/114.wav|16 1455 | ./Data/p254/106.wav|14 1456 | ./Data/p243/111.wav|13 1457 | ./Data/p226/106.wav|10 1458 | ./Data/p244/26.wav|9 1459 | ./Data/p225/57.wav|0 1460 | ./Data/p243/24.wav|13 1461 | ./Data/p259/127.wav|17 1462 | ./Data/p256/50.wav|15 1463 | ./Data/p239/100.wav|7 1464 | ./Data/p273/10.wav|19 1465 | ./Data/p229/2.wav|2 1466 | ./Data/p270/70.wav|18 1467 | ./Data/p254/95.wav|14 1468 | ./Data/p256/120.wav|15 1469 | ./Data/p233/107.wav|5 1470 | ./Data/p226/90.wav|10 1471 | ./Data/p258/55.wav|16 1472 | ./Data/p233/99.wav|5 1473 | ./Data/p230/6.wav|3 1474 | ./Data/p273/131.wav|19 1475 | ./Data/p273/52.wav|19 1476 | ./Data/p236/158.wav|6 1477 | ./Data/p232/62.wav|12 1478 | ./Data/p233/20.wav|5 1479 | ./Data/p270/90.wav|18 1480 | ./Data/p240/11.wav|8 1481 | ./Data/p258/66.wav|16 1482 | ./Data/p258/65.wav|16 1483 | ./Data/p270/94.wav|18 1484 | ./Data/p270/9.wav|18 1485 | ./Data/p228/82.wav|1 1486 | ./Data/p236/96.wav|6 1487 | ./Data/p229/33.wav|2 1488 | ./Data/p229/19.wav|2 1489 | ./Data/p239/54.wav|7 1490 | ./Data/p232/106.wav|12 1491 | ./Data/p231/138.wav|4 1492 | ./Data/p230/57.wav|3 1493 | ./Data/p270/89.wav|18 1494 | ./Data/p273/95.wav|19 1495 | ./Data/p231/131.wav|4 1496 | ./Data/p236/107.wav|6 1497 | ./Data/p228/122.wav|1 1498 | ./Data/p226/109.wav|10 1499 | ./Data/p270/117.wav|18 1500 | ./Data/p230/110.wav|3 1501 | ./Data/p270/37.wav|18 1502 | ./Data/p225/29.wav|0 1503 | ./Data/p233/8.wav|5 1504 | ./Data/p227/4.wav|11 1505 | ./Data/p232/97.wav|12 1506 | ./Data/p243/14.wav|13 1507 | ./Data/p254/91.wav|14 1508 | ./Data/p256/62.wav|15 1509 | ./Data/p229/110.wav|2 1510 | ./Data/p233/34.wav|5 1511 | ./Data/p226/81.wav|10 1512 | ./Data/p230/29.wav|3 1513 | ./Data/p240/84.wav|8 1514 | ./Data/p270/201.wav|18 1515 | ./Data/p239/157.wav|7 1516 | ./Data/p270/158.wav|18 1517 | ./Data/p236/80.wav|6 1518 | ./Data/p232/54.wav|12 1519 | ./Data/p239/29.wav|7 1520 | ./Data/p225/33.wav|0 1521 | ./Data/p273/7.wav|19 1522 | ./Data/p273/98.wav|19 1523 | ./Data/p227/63.wav|11 1524 | ./Data/p230/174.wav|3 1525 | ./Data/p270/28.wav|18 1526 | ./Data/p233/13.wav|5 1527 | ./Data/p273/99.wav|19 1528 | ./Data/p229/81.wav|2 1529 | ./Data/p273/124.wav|19 1530 | ./Data/p230/129.wav|3 1531 | ./Data/p259/133.wav|17 1532 | ./Data/p270/24.wav|18 1533 | ./Data/p226/35.wav|10 1534 | ./Data/p236/118.wav|6 1535 | ./Data/p254/121.wav|14 1536 | ./Data/p270/120.wav|18 1537 | ./Data/p231/30.wav|4 1538 | ./Data/p240/102.wav|8 1539 | ./Data/p243/53.wav|13 1540 | ./Data/p230/47.wav|3 1541 | ./Data/p233/55.wav|5 1542 | ./Data/p226/11.wav|10 1543 | ./Data/p239/120.wav|7 1544 | ./Data/p226/49.wav|10 1545 | ./Data/p239/44.wav|7 1546 | ./Data/p244/140.wav|9 1547 | ./Data/p258/63.wav|16 1548 | ./Data/p232/52.wav|12 1549 | ./Data/p273/109.wav|19 1550 | ./Data/p259/72.wav|17 1551 | ./Data/p259/164.wav|17 1552 | ./Data/p256/78.wav|15 1553 | ./Data/p243/107.wav|13 1554 | ./Data/p258/62.wav|16 1555 | ./Data/p239/31.wav|7 1556 | ./Data/p256/41.wav|15 1557 | ./Data/p273/63.wav|19 1558 | ./Data/p258/112.wav|16 1559 | ./Data/p243/116.wav|13 1560 | ./Data/p254/29.wav|14 1561 | ./Data/p229/45.wav|2 1562 | ./Data/p244/101.wav|9 1563 | ./Data/p232/34.wav|12 1564 | ./Data/p243/154.wav|13 1565 | ./Data/p231/33.wav|4 1566 | ./Data/p243/35.wav|13 1567 | ./Data/p236/38.wav|6 1568 | ./Data/p270/16.wav|18 1569 | ./Data/p270/187.wav|18 1570 | ./Data/p239/114.wav|7 1571 | ./Data/p244/24.wav|9 1572 | ./Data/p228/75.wav|1 1573 | ./Data/p226/26.wav|10 1574 | ./Data/p259/136.wav|17 1575 | ./Data/p236/147.wav|6 1576 | ./Data/p239/135.wav|7 1577 | ./Data/p270/43.wav|18 1578 | ./Data/p244/132.wav|9 1579 | ./Data/p243/129.wav|13 1580 | ./Data/p236/9.wav|6 1581 | ./Data/p232/109.wav|12 1582 | ./Data/p225/84.wav|0 1583 | ./Data/p227/27.wav|11 1584 | ./Data/p259/8.wav|17 1585 | ./Data/p259/67.wav|17 1586 | ./Data/p239/57.wav|7 1587 | ./Data/p243/69.wav|13 1588 | ./Data/p231/62.wav|4 1589 | ./Data/p259/140.wav|17 1590 | ./Data/p227/66.wav|11 1591 | ./Data/p230/44.wav|3 1592 | ./Data/p229/63.wav|2 1593 | ./Data/p256/4.wav|15 1594 | ./Data/p258/24.wav|16 1595 | ./Data/p240/80.wav|8 1596 | ./Data/p270/72.wav|18 1597 | ./Data/p240/47.wav|8 1598 | ./Data/p229/98.wav|2 1599 | ./Data/p244/111.wav|9 1600 | ./Data/p231/111.wav|4 1601 | ./Data/p243/91.wav|13 1602 | ./Data/p239/36.wav|7 1603 | ./Data/p259/103.wav|17 1604 | ./Data/p232/2.wav|12 1605 | ./Data/p236/3.wav|6 1606 | ./Data/p236/57.wav|6 1607 | ./Data/p233/109.wav|5 1608 | ./Data/p236/122.wav|6 1609 | ./Data/p270/76.wav|18 1610 | ./Data/p243/167.wav|13 1611 | ./Data/p228/20.wav|1 1612 | ./Data/p243/72.wav|13 1613 | ./Data/p239/2.wav|7 1614 | ./Data/p226/21.wav|10 1615 | ./Data/p256/43.wav|15 1616 | ./Data/p259/129.wav|17 1617 | ./Data/p231/15.wav|4 1618 | ./Data/p231/85.wav|4 1619 | ./Data/p226/29.wav|10 1620 | ./Data/p230/131.wav|3 1621 | ./Data/p259/97.wav|17 1622 | ./Data/p240/68.wav|8 1623 | ./Data/p233/84.wav|5 1624 | ./Data/p236/10.wav|6 1625 | ./Data/p244/120.wav|9 1626 | ./Data/p270/18.wav|18 1627 | ./Data/p231/24.wav|4 1628 | ./Data/p256/37.wav|15 1629 | ./Data/p233/11.wav|5 1630 | ./Data/p230/93.wav|3 1631 | ./Data/p230/73.wav|3 1632 | ./Data/p239/66.wav|7 1633 | ./Data/p230/40.wav|3 1634 | ./Data/p228/13.wav|1 1635 | ./Data/p231/49.wav|4 1636 | ./Data/p270/62.wav|18 1637 | ./Data/p236/78.wav|6 1638 | ./Data/p258/73.wav|16 1639 | ./Data/p236/35.wav|6 1640 | ./Data/p254/120.wav|14 1641 | ./Data/p258/53.wav|16 1642 | ./Data/p227/16.wav|11 1643 | ./Data/p232/33.wav|12 1644 | ./Data/p256/42.wav|15 1645 | ./Data/p233/68.wav|5 1646 | ./Data/p225/74.wav|0 1647 | ./Data/p244/127.wav|9 1648 | ./Data/p243/118.wav|13 1649 | ./Data/p273/128.wav|19 1650 | ./Data/p239/7.wav|7 1651 | ./Data/p243/50.wav|13 1652 | ./Data/p226/23.wav|10 1653 | ./Data/p270/199.wav|18 1654 | ./Data/p254/45.wav|14 1655 | ./Data/p254/11.wav|14 1656 | ./Data/p244/66.wav|9 1657 | ./Data/p270/152.wav|18 1658 | ./Data/p227/131.wav|11 1659 | ./Data/p270/38.wav|18 1660 | ./Data/p229/57.wav|2 1661 | ./Data/p227/35.wav|11 1662 | ./Data/p244/7.wav|9 1663 | ./Data/p226/32.wav|10 1664 | ./Data/p230/152.wav|3 1665 | ./Data/p239/161.wav|7 1666 | ./Data/p256/123.wav|15 1667 | ./Data/p231/14.wav|4 1668 | ./Data/p243/38.wav|13 1669 | ./Data/p229/102.wav|2 1670 | ./Data/p229/38.wav|2 1671 | ./Data/p233/116.wav|5 1672 | ./Data/p254/35.wav|14 1673 | ./Data/p254/118.wav|14 1674 | ./Data/p225/15.wav|0 1675 | ./Data/p230/132.wav|3 1676 | ./Data/p273/84.wav|19 1677 | ./Data/p254/122.wav|14 1678 | ./Data/p273/3.wav|19 1679 | ./Data/p270/68.wav|18 1680 | ./Data/p232/42.wav|12 1681 | ./Data/p225/93.wav|0 1682 | ./Data/p227/34.wav|11 1683 | ./Data/p270/22.wav|18 1684 | ./Data/p231/4.wav|4 1685 | ./Data/p227/125.wav|11 1686 | ./Data/p244/95.wav|9 1687 | ./Data/p236/18.wav|6 1688 | ./Data/p273/25.wav|19 1689 | ./Data/p259/169.wav|17 1690 | ./Data/p233/56.wav|5 1691 | ./Data/p270/203.wav|18 1692 | ./Data/p259/41.wav|17 1693 | ./Data/p233/38.wav|5 1694 | ./Data/p229/22.wav|2 1695 | ./Data/p256/17.wav|15 1696 | ./Data/p270/3.wav|18 1697 | ./Data/p231/5.wav|4 1698 | ./Data/p240/60.wav|8 1699 | ./Data/p227/21.wav|11 1700 | ./Data/p259/1.wav|17 1701 | ./Data/p259/4.wav|17 1702 | ./Data/p232/11.wav|12 1703 | ./Data/p259/114.wav|17 1704 | ./Data/p226/45.wav|10 1705 | ./Data/p236/27.wav|6 1706 | ./Data/p239/47.wav|7 1707 | ./Data/p244/85.wav|9 1708 | ./Data/p243/87.wav|13 1709 | ./Data/p258/89.wav|16 1710 | ./Data/p233/57.wav|5 1711 | ./Data/p228/78.wav|1 1712 | ./Data/p256/60.wav|15 1713 | ./Data/p232/83.wav|12 1714 | ./Data/p232/88.wav|12 1715 | ./Data/p231/120.wav|4 1716 | ./Data/p226/101.wav|10 1717 | ./Data/p236/102.wav|6 1718 | ./Data/p226/123.wav|10 1719 | ./Data/p259/85.wav|17 1720 | ./Data/p227/124.wav|11 1721 | ./Data/p259/80.wav|17 1722 | ./Data/p227/10.wav|11 1723 | ./Data/p233/26.wav|5 1724 | ./Data/p273/75.wav|19 1725 | ./Data/p243/73.wav|13 1726 | ./Data/p244/22.wav|9 1727 | ./Data/p243/126.wav|13 1728 | ./Data/p244/108.wav|9 1729 | ./Data/p243/134.wav|13 1730 | ./Data/p226/100.wav|10 1731 | ./Data/p231/123.wav|4 1732 | ./Data/p228/47.wav|1 1733 | ./Data/p243/42.wav|13 1734 | ./Data/p233/131.wav|5 1735 | ./Data/p273/2.wav|19 1736 | ./Data/p254/24.wav|14 1737 | ./Data/p236/123.wav|6 1738 | ./Data/p240/24.wav|8 1739 | ./Data/p244/63.wav|9 1740 | ./Data/p236/149.wav|6 1741 | ./Data/p236/83.wav|6 1742 | ./Data/p258/131.wav|16 1743 | ./Data/p243/120.wav|13 1744 | ./Data/p259/159.wav|17 1745 | ./Data/p258/8.wav|16 1746 | ./Data/p258/34.wav|16 1747 | ./Data/p243/33.wav|13 1748 | ./Data/p256/18.wav|15 1749 | ./Data/p232/73.wav|12 1750 | ./Data/p244/49.wav|9 1751 | ./Data/p258/12.wav|16 1752 | ./Data/p225/18.wav|0 1753 | ./Data/p258/68.wav|16 1754 | ./Data/p270/134.wav|18 1755 | ./Data/p228/54.wav|1 1756 | ./Data/p236/139.wav|6 1757 | ./Data/p225/6.wav|0 1758 | ./Data/p259/57.wav|17 1759 | ./Data/p243/70.wav|13 1760 | ./Data/p240/122.wav|8 1761 | ./Data/p259/69.wav|17 1762 | ./Data/p258/124.wav|16 1763 | ./Data/p226/138.wav|10 1764 | ./Data/p231/51.wav|4 1765 | ./Data/p259/126.wav|17 1766 | ./Data/p227/119.wav|11 1767 | ./Data/p254/136.wav|14 1768 | ./Data/p240/107.wav|8 1769 | ./Data/p254/4.wav|14 1770 | ./Data/p228/117.wav|1 1771 | ./Data/p244/92.wav|9 1772 | ./Data/p239/151.wav|7 1773 | ./Data/p259/131.wav|17 1774 | ./Data/p273/96.wav|19 1775 | ./Data/p254/69.wav|14 1776 | ./Data/p259/16.wav|17 1777 | ./Data/p244/86.wav|9 1778 | ./Data/p236/30.wav|6 1779 | ./Data/p230/34.wav|3 1780 | ./Data/p230/142.wav|3 1781 | ./Data/p244/37.wav|9 1782 | ./Data/p239/40.wav|7 1783 | ./Data/p232/87.wav|12 1784 | ./Data/p270/115.wav|18 1785 | ./Data/p232/124.wav|12 1786 | ./Data/p233/127.wav|5 1787 | ./Data/p228/70.wav|1 1788 | ./Data/p254/66.wav|14 1789 | ./Data/p232/16.wav|12 1790 | ./Data/p256/109.wav|15 1791 | ./Data/p243/169.wav|13 1792 | ./Data/p228/112.wav|1 1793 | ./Data/p254/82.wav|14 1794 | ./Data/p231/119.wav|4 1795 | ./Data/p236/59.wav|6 1796 | ./Data/p239/69.wav|7 1797 | ./Data/p225/12.wav|0 1798 | ./Data/p232/18.wav|12 1799 | ./Data/p229/32.wav|2 1800 | ./Data/p228/126.wav|1 1801 | ./Data/p270/171.wav|18 1802 | ./Data/p236/13.wav|6 1803 | ./Data/p228/12.wav|1 1804 | ./Data/p228/96.wav|1 1805 | ./Data/p256/11.wav|15 1806 | ./Data/p233/83.wav|5 1807 | ./Data/p256/99.wav|15 1808 | ./Data/p225/69.wav|0 1809 | ./Data/p254/7.wav|14 1810 | ./Data/p227/59.wav|11 1811 | ./Data/p273/136.wav|19 1812 | ./Data/p239/3.wav|7 1813 | ./Data/p256/119.wav|15 1814 | ./Data/p226/99.wav|10 1815 | ./Data/p256/56.wav|15 1816 | ./Data/p243/82.wav|13 1817 | ./Data/p227/69.wav|11 1818 | ./Data/p273/29.wav|19 1819 | ./Data/p233/100.wav|5 1820 | ./Data/p230/173.wav|3 1821 | ./Data/p240/132.wav|8 1822 | ./Data/p239/143.wav|7 1823 | ./Data/p231/40.wav|4 1824 | ./Data/p256/10.wav|15 1825 | ./Data/p229/75.wav|2 1826 | ./Data/p240/15.wav|8 1827 | ./Data/p228/102.wav|1 1828 | ./Data/p270/52.wav|18 1829 | ./Data/p270/7.wav|18 1830 | ./Data/p270/164.wav|18 1831 | ./Data/p233/91.wav|5 1832 | ./Data/p244/27.wav|9 1833 | ./Data/p244/48.wav|9 1834 | ./Data/p239/24.wav|7 1835 | ./Data/p226/113.wav|10 1836 | ./Data/p227/72.wav|11 1837 | ./Data/p270/67.wav|18 1838 | ./Data/p231/25.wav|4 1839 | ./Data/p229/120.wav|2 1840 | ./Data/p273/67.wav|19 1841 | ./Data/p230/67.wav|3 1842 | ./Data/p227/120.wav|11 1843 | ./Data/p239/121.wav|7 1844 | ./Data/p228/88.wav|1 1845 | ./Data/p254/15.wav|14 1846 | ./Data/p270/114.wav|18 1847 | ./Data/p254/14.wav|14 1848 | ./Data/p259/75.wav|17 1849 | ./Data/p236/126.wav|6 1850 | ./Data/p228/92.wav|1 1851 | ./Data/p230/127.wav|3 1852 | ./Data/p229/93.wav|2 1853 | ./Data/p233/82.wav|5 1854 | ./Data/p239/122.wav|7 1855 | ./Data/p229/72.wav|2 1856 | ./Data/p232/131.wav|12 1857 | ./Data/p239/67.wav|7 1858 | ./Data/p225/36.wav|0 1859 | ./Data/p254/3.wav|14 1860 | ./Data/p244/109.wav|9 1861 | ./Data/p230/112.wav|3 1862 | ./Data/p230/5.wav|3 1863 | ./Data/p256/87.wav|15 1864 | ./Data/p232/15.wav|12 1865 | ./Data/p244/67.wav|9 1866 | ./Data/p236/48.wav|6 1867 | ./Data/p232/110.wav|12 1868 | ./Data/p243/156.wav|13 1869 | ./Data/p231/140.wav|4 1870 | ./Data/p239/89.wav|7 1871 | ./Data/p229/53.wav|2 1872 | ./Data/p256/97.wav|15 1873 | ./Data/p256/79.wav|15 1874 | ./Data/p236/6.wav|6 1875 | ./Data/p236/106.wav|6 1876 | ./Data/p227/15.wav|11 1877 | ./Data/p273/20.wav|19 1878 | ./Data/p239/49.wav|7 1879 | ./Data/p254/134.wav|14 1880 | ./Data/p228/4.wav|1 1881 | ./Data/p227/117.wav|11 1882 | ./Data/p259/7.wav|17 1883 | ./Data/p258/91.wav|16 1884 | ./Data/p259/128.wav|17 1885 | ./Data/p236/61.wav|6 1886 | ./Data/p230/165.wav|3 1887 | ./Data/p225/20.wav|0 1888 | ./Data/p232/122.wav|12 1889 | ./Data/p230/130.wav|3 1890 | ./Data/p228/58.wav|1 1891 | ./Data/p227/38.wav|11 1892 | ./Data/p239/34.wav|7 1893 | ./Data/p240/137.wav|8 1894 | ./Data/p258/90.wav|16 1895 | ./Data/p258/138.wav|16 1896 | ./Data/p244/124.wav|9 1897 | ./Data/p239/167.wav|7 1898 | ./Data/p233/90.wav|5 1899 | ./Data/p239/172.wav|7 1900 | ./Data/p254/97.wav|14 1901 | ./Data/p259/29.wav|17 1902 | ./Data/p229/92.wav|2 1903 | ./Data/p227/11.wav|11 1904 | ./Data/p258/118.wav|16 1905 | ./Data/p244/69.wav|9 1906 | ./Data/p232/3.wav|12 1907 | ./Data/p256/28.wav|15 1908 | ./Data/p229/49.wav|2 1909 | ./Data/p236/82.wav|6 1910 | ./Data/p239/171.wav|7 1911 | ./Data/p254/127.wav|14 1912 | ./Data/p259/43.wav|17 1913 | ./Data/p228/21.wav|1 1914 | ./Data/p256/74.wav|15 1915 | ./Data/p226/76.wav|10 1916 | ./Data/p243/170.wav|13 1917 | ./Data/p239/39.wav|7 1918 | ./Data/p233/124.wav|5 1919 | ./Data/p229/13.wav|2 1920 | ./Data/p231/71.wav|4 1921 | ./Data/p229/118.wav|2 1922 | ./Data/p231/88.wav|4 1923 | ./Data/p231/55.wav|4 1924 | ./Data/p270/104.wav|18 1925 | ./Data/p270/110.wav|18 1926 | ./Data/p228/41.wav|1 1927 | ./Data/p258/2.wav|16 1928 | ./Data/p230/78.wav|3 1929 | ./Data/p231/80.wav|4 1930 | ./Data/p243/9.wav|13 1931 | ./Data/p239/16.wav|7 1932 | ./Data/p239/76.wav|7 1933 | ./Data/p226/126.wav|10 1934 | ./Data/p226/63.wav|10 1935 | ./Data/p233/46.wav|5 1936 | ./Data/p270/202.wav|18 1937 | ./Data/p239/164.wav|7 1938 | ./Data/p231/22.wav|4 1939 | ./Data/p259/24.wav|17 1940 | ./Data/p256/73.wav|15 1941 | ./Data/p259/10.wav|17 1942 | ./Data/p232/94.wav|12 1943 | ./Data/p273/30.wav|19 1944 | ./Data/p244/29.wav|9 1945 | ./Data/p226/129.wav|10 1946 | ./Data/p243/81.wav|13 1947 | ./Data/p236/121.wav|6 1948 | ./Data/p228/89.wav|1 1949 | ./Data/p231/81.wav|4 1950 | ./Data/p243/57.wav|13 1951 | ./Data/p236/40.wav|6 1952 | ./Data/p226/89.wav|10 1953 | ./Data/p244/44.wav|9 1954 | ./Data/p254/88.wav|14 1955 | ./Data/p227/108.wav|11 1956 | ./Data/p258/123.wav|16 1957 | ./Data/p233/95.wav|5 1958 | ./Data/p259/142.wav|17 1959 | ./Data/p231/73.wav|4 1960 | ./Data/p258/52.wav|16 1961 | ./Data/p236/89.wav|6 1962 | ./Data/p229/67.wav|2 1963 | ./Data/p258/46.wav|16 1964 | ./Data/p231/132.wav|4 1965 | ./Data/p227/41.wav|11 1966 | ./Data/p256/114.wav|15 1967 | ./Data/p232/10.wav|12 1968 | ./Data/p225/46.wav|0 1969 | ./Data/p231/61.wav|4 1970 | ./Data/p229/30.wav|2 1971 | ./Data/p236/101.wav|6 1972 | ./Data/p256/20.wav|15 1973 | ./Data/p226/60.wav|10 1974 | ./Data/p259/18.wav|17 1975 | ./Data/p236/151.wav|6 1976 | ./Data/p233/130.wav|5 1977 | ./Data/p273/91.wav|19 1978 | ./Data/p225/59.wav|0 1979 | ./Data/p227/83.wav|11 1980 | ./Data/p226/127.wav|10 1981 | ./Data/p270/137.wav|18 1982 | ./Data/p258/95.wav|16 1983 | ./Data/p227/42.wav|11 1984 | ./Data/p230/108.wav|3 1985 | ./Data/p243/137.wav|13 1986 | ./Data/p228/157.wav|1 1987 | ./Data/p243/105.wav|13 1988 | ./Data/p228/133.wav|1 1989 | ./Data/p270/93.wav|18 1990 | ./Data/p256/86.wav|15 1991 | ./Data/p254/17.wav|14 1992 | ./Data/p227/135.wav|11 1993 | ./Data/p228/118.wav|1 1994 | ./Data/p239/142.wav|7 1995 | ./Data/p273/137.wav|19 1996 | ./Data/p259/79.wav|17 1997 | ./Data/p259/108.wav|17 1998 | ./Data/p226/15.wav|10 1999 | ./Data/p231/43.wav|4 2000 | ./Data/p256/16.wav|15 2001 | ./Data/p232/20.wav|12 2002 | ./Data/p258/35.wav|16 2003 | ./Data/p243/141.wav|13 2004 | ./Data/p232/104.wav|12 2005 | ./Data/p259/58.wav|17 2006 | ./Data/p258/82.wav|16 2007 | ./Data/p233/76.wav|5 2008 | ./Data/p270/126.wav|18 2009 | ./Data/p236/70.wav|6 2010 | ./Data/p240/49.wav|8 2011 | ./Data/p256/106.wav|15 2012 | ./Data/p254/55.wav|14 2013 | ./Data/p270/2.wav|18 2014 | ./Data/p270/143.wav|18 2015 | ./Data/p229/48.wav|2 2016 | ./Data/p244/6.wav|9 2017 | ./Data/p233/65.wav|5 2018 | ./Data/p233/18.wav|5 2019 | ./Data/p244/87.wav|9 2020 | ./Data/p236/133.wav|6 2021 | ./Data/p227/2.wav|11 2022 | ./Data/p227/17.wav|11 2023 | ./Data/p273/111.wav|19 2024 | ./Data/p230/98.wav|3 2025 | ./Data/p226/120.wav|10 2026 | ./Data/p226/112.wav|10 2027 | ./Data/p230/161.wav|3 2028 | ./Data/p254/79.wav|14 2029 | ./Data/p230/101.wav|3 2030 | ./Data/p239/96.wav|7 2031 | ./Data/p228/159.wav|1 2032 | ./Data/p230/24.wav|3 2033 | ./Data/p240/28.wav|8 2034 | ./Data/p254/125.wav|14 2035 | ./Data/p259/168.wav|17 2036 | ./Data/p228/18.wav|1 2037 | ./Data/p270/88.wav|18 2038 | ./Data/p270/25.wav|18 2039 | ./Data/p231/89.wav|4 2040 | ./Data/p230/14.wav|3 2041 | ./Data/p254/63.wav|14 2042 | ./Data/p233/53.wav|5 2043 | ./Data/p225/54.wav|0 2044 | ./Data/p243/19.wav|13 2045 | ./Data/p259/139.wav|17 2046 | ./Data/p229/87.wav|2 2047 | ./Data/p232/56.wav|12 2048 | ./Data/p270/97.wav|18 2049 | ./Data/p232/95.wav|12 2050 | ./Data/p232/86.wav|12 2051 | ./Data/p259/137.wav|17 2052 | ./Data/p228/147.wav|1 2053 | ./Data/p273/112.wav|19 2054 | ./Data/p243/80.wav|13 2055 | ./Data/p233/72.wav|5 2056 | ./Data/p233/114.wav|5 2057 | ./Data/p240/23.wav|8 2058 | ./Data/p236/164.wav|6 2059 | ./Data/p236/144.wav|6 2060 | ./Data/p254/116.wav|14 2061 | ./Data/p273/105.wav|19 2062 | ./Data/p239/48.wav|7 2063 | ./Data/p236/68.wav|6 2064 | ./Data/p233/87.wav|5 2065 | ./Data/p239/50.wav|7 2066 | ./Data/p256/66.wav|15 2067 | ./Data/p270/159.wav|18 2068 | ./Data/p273/53.wav|19 2069 | ./Data/p254/28.wav|14 2070 | ./Data/p259/28.wav|17 2071 | ./Data/p227/89.wav|11 2072 | ./Data/p243/1.wav|13 2073 | ./Data/p239/61.wav|7 2074 | ./Data/p226/28.wav|10 2075 | ./Data/p232/113.wav|12 2076 | ./Data/p225/38.wav|0 2077 | ./Data/p236/128.wav|6 2078 | ./Data/p225/3.wav|0 2079 | ./Data/p258/83.wav|16 2080 | ./Data/p270/195.wav|18 2081 | ./Data/p231/69.wav|4 2082 | ./Data/p254/49.wav|14 2083 | ./Data/p226/135.wav|10 2084 | ./Data/p230/3.wav|3 2085 | ./Data/p228/124.wav|1 2086 | ./Data/p233/119.wav|5 2087 | ./Data/p229/31.wav|2 2088 | ./Data/p256/54.wav|15 2089 | ./Data/p258/121.wav|16 2090 | ./Data/p231/57.wav|4 2091 | ./Data/p244/84.wav|9 2092 | ./Data/p244/113.wav|9 2093 | ./Data/p228/71.wav|1 2094 | ./Data/p270/86.wav|18 2095 | ./Data/p254/98.wav|14 2096 | ./Data/p225/19.wav|0 2097 | ./Data/p258/21.wav|16 2098 | ./Data/p259/60.wav|17 2099 | ./Data/p227/105.wav|11 2100 | ./Data/p258/142.wav|16 2101 | ./Data/p230/52.wav|3 2102 | ./Data/p227/6.wav|11 2103 | ./Data/p244/139.wav|9 2104 | ./Data/p226/128.wav|10 2105 | ./Data/p239/70.wav|7 2106 | ./Data/p273/28.wav|19 2107 | ./Data/p230/171.wav|3 2108 | ./Data/p270/113.wav|18 2109 | ./Data/p259/19.wav|17 2110 | ./Data/p225/68.wav|0 2111 | ./Data/p239/73.wav|7 2112 | ./Data/p254/44.wav|14 2113 | ./Data/p240/113.wav|8 2114 | ./Data/p244/77.wav|9 2115 | ./Data/p259/49.wav|17 2116 | ./Data/p225/86.wav|0 2117 | ./Data/p258/94.wav|16 2118 | ./Data/p244/17.wav|9 2119 | ./Data/p227/12.wav|11 2120 | ./Data/p239/150.wav|7 2121 | ./Data/p225/10.wav|0 2122 | ./Data/p230/114.wav|3 2123 | ./Data/p258/69.wav|16 2124 | ./Data/p231/117.wav|4 2125 | ./Data/p244/23.wav|9 2126 | ./Data/p273/60.wav|19 2127 | ./Data/p259/156.wav|17 2128 | ./Data/p239/158.wav|7 2129 | ./Data/p244/102.wav|9 2130 | ./Data/p236/85.wav|6 2131 | ./Data/p259/2.wav|17 2132 | ./Data/p259/83.wav|17 2133 | ./Data/p226/40.wav|10 2134 | ./Data/p270/34.wav|18 2135 | ./Data/p240/99.wav|8 2136 | ./Data/p259/95.wav|17 2137 | ./Data/p240/79.wav|8 2138 | ./Data/p239/102.wav|7 2139 | ./Data/p273/57.wav|19 2140 | ./Data/p243/85.wav|13 2141 | ./Data/p239/149.wav|7 2142 | ./Data/p232/28.wav|12 2143 | ./Data/p254/25.wav|14 2144 | ./Data/p233/42.wav|5 2145 | ./Data/p227/39.wav|11 2146 | ./Data/p270/77.wav|18 2147 | ./Data/p233/51.wav|5 2148 | ./Data/p256/100.wav|15 2149 | ./Data/p258/140.wav|16 2150 | ./Data/p229/131.wav|2 2151 | ./Data/p243/52.wav|13 2152 | ./Data/p258/84.wav|16 2153 | ./Data/p229/138.wav|2 2154 | ./Data/p240/61.wav|8 2155 | ./Data/p254/27.wav|14 2156 | ./Data/p232/21.wav|12 2157 | ./Data/p226/38.wav|10 2158 | ./Data/p230/158.wav|3 2159 | ./Data/p256/52.wav|15 2160 | ./Data/p243/95.wav|13 2161 | ./Data/p243/89.wav|13 2162 | ./Data/p226/61.wav|10 2163 | ./Data/p230/117.wav|3 2164 | ./Data/p230/92.wav|3 2165 | ./Data/p236/55.wav|6 2166 | ./Data/p254/18.wav|14 2167 | ./Data/p254/129.wav|14 2168 | ./Data/p259/113.wav|17 2169 | ./Data/p225/25.wav|0 2170 | ./Data/p240/134.wav|8 2171 | ./Data/p230/86.wav|3 2172 | ./Data/p256/84.wav|15 2173 | ./Data/p228/99.wav|1 2174 | ./Data/p239/90.wav|7 2175 | ./Data/p230/155.wav|3 2176 | ./Data/p228/40.wav|1 2177 | ./Data/p254/72.wav|14 2178 | ./Data/p231/38.wav|4 2179 | ./Data/p225/32.wav|0 2180 | ./Data/p228/22.wav|1 2181 | ./Data/p231/7.wav|4 2182 | ./Data/p254/39.wav|14 2183 | ./Data/p240/112.wav|8 2184 | ./Data/p270/183.wav|18 2185 | ./Data/p270/60.wav|18 2186 | ./Data/p236/120.wav|6 2187 | ./Data/p239/145.wav|7 2188 | ./Data/p240/31.wav|8 2189 | ./Data/p229/115.wav|2 2190 | ./Data/p233/121.wav|5 2191 | ./Data/p228/33.wav|1 2192 | ./Data/p228/83.wav|1 2193 | ./Data/p258/58.wav|16 2194 | ./Data/p239/106.wav|7 2195 | ./Data/p273/123.wav|19 2196 | ./Data/p244/50.wav|9 2197 | ./Data/p229/50.wav|2 2198 | ./Data/p270/131.wav|18 2199 | ./Data/p236/8.wav|6 2200 | ./Data/p244/114.wav|9 2201 | ./Data/p230/153.wav|3 2202 | ./Data/p226/53.wav|10 2203 | ./Data/p240/93.wav|8 2204 | ./Data/p229/122.wav|2 2205 | ./Data/p256/90.wav|15 2206 | ./Data/p231/112.wav|4 2207 | ./Data/p270/48.wav|18 2208 | ./Data/p230/36.wav|3 2209 | ./Data/p230/135.wav|3 2210 | ./Data/p259/172.wav|17 2211 | ./Data/p229/55.wav|2 2212 | ./Data/p244/60.wav|9 2213 | ./Data/p232/75.wav|12 2214 | ./Data/p259/68.wav|17 2215 | ./Data/p233/7.wav|5 2216 | ./Data/p233/3.wav|5 2217 | ./Data/p226/141.wav|10 2218 | ./Data/p254/32.wav|14 2219 | ./Data/p239/26.wav|7 2220 | ./Data/p226/119.wav|10 2221 | ./Data/p239/173.wav|7 2222 | ./Data/p230/157.wav|3 2223 | ./Data/p236/157.wav|6 2224 | ./Data/p226/13.wav|10 2225 | ./Data/p254/68.wav|14 2226 | ./Data/p225/87.wav|0 2227 | ./Data/p231/118.wav|4 2228 | ./Data/p240/98.wav|8 2229 | ./Data/p233/5.wav|5 2230 | ./Data/p227/56.wav|11 2231 | ./Data/p239/93.wav|7 2232 | ./Data/p240/25.wav|8 2233 | ./Data/p243/142.wav|13 2234 | ./Data/p254/110.wav|14 2235 | ./Data/p230/138.wav|3 2236 | ./Data/p226/16.wav|10 2237 | ./Data/p270/189.wav|18 2238 | ./Data/p229/95.wav|2 2239 | ./Data/p231/37.wav|4 2240 | ./Data/p240/44.wav|8 2241 | ./Data/p228/46.wav|1 2242 | ./Data/p236/62.wav|6 2243 | ./Data/p226/20.wav|10 2244 | ./Data/p228/105.wav|1 2245 | ./Data/p258/44.wav|16 2246 | ./Data/p258/23.wav|16 2247 | ./Data/p270/108.wav|18 2248 | ./Data/p243/151.wav|13 2249 | ./Data/p239/170.wav|7 2250 | ./Data/p244/100.wav|9 2251 | ./Data/p258/81.wav|16 2252 | ./Data/p236/153.wav|6 2253 | ./Data/p229/5.wav|2 2254 | ./Data/p256/112.wav|15 2255 | ./Data/p258/70.wav|16 2256 | ./Data/p240/57.wav|8 2257 | ./Data/p244/36.wav|9 2258 | ./Data/p273/19.wav|19 2259 | ./Data/p233/75.wav|5 2260 | ./Data/p259/111.wav|17 2261 | ./Data/p243/100.wav|13 2262 | ./Data/p226/86.wav|10 2263 | ./Data/p256/26.wav|15 2264 | ./Data/p236/22.wav|6 2265 | ./Data/p229/124.wav|2 2266 | ./Data/p229/62.wav|2 2267 | ./Data/p258/87.wav|16 2268 | ./Data/p232/22.wav|12 2269 | ./Data/p259/158.wav|17 2270 | ./Data/p229/135.wav|2 2271 | ./Data/p233/118.wav|5 2272 | ./Data/p236/134.wav|6 2273 | ./Data/p226/34.wav|10 2274 | ./Data/p236/93.wav|6 2275 | ./Data/p243/108.wav|13 2276 | ./Data/p270/177.wav|18 2277 | ./Data/p239/30.wav|7 2278 | ./Data/p273/17.wav|19 2279 | ./Data/p231/110.wav|4 2280 | ./Data/p229/119.wav|2 2281 | ./Data/p243/130.wav|13 2282 | ./Data/p256/127.wav|15 2283 | ./Data/p226/105.wav|10 2284 | ./Data/p229/52.wav|2 2285 | ./Data/p226/54.wav|10 2286 | ./Data/p273/87.wav|19 2287 | ./Data/p270/57.wav|18 2288 | ./Data/p240/131.wav|8 2289 | ./Data/p273/117.wav|19 2290 | ./Data/p240/77.wav|8 2291 | ./Data/p233/32.wav|5 2292 | ./Data/p236/25.wav|6 2293 | ./Data/p227/79.wav|11 2294 | ./Data/p258/64.wav|16 2295 | ./Data/p240/92.wav|8 2296 | ./Data/p244/74.wav|9 2297 | ./Data/p228/120.wav|1 2298 | ./Data/p230/45.wav|3 2299 | ./Data/p225/89.wav|0 2300 | ./Data/p226/95.wav|10 2301 | ./Data/p270/80.wav|18 2302 | ./Data/p226/111.wav|10 2303 | ./Data/p243/2.wav|13 2304 | ./Data/p259/6.wav|17 2305 | ./Data/p227/85.wav|11 2306 | ./Data/p233/106.wav|5 2307 | ./Data/p227/14.wav|11 2308 | ./Data/p231/50.wav|4 2309 | ./Data/p230/139.wav|3 2310 | ./Data/p229/70.wav|2 2311 | ./Data/p258/14.wav|16 2312 | ./Data/p240/116.wav|8 2313 | ./Data/p225/64.wav|0 2314 | ./Data/p225/8.wav|0 2315 | ./Data/p243/113.wav|13 2316 | ./Data/p254/102.wav|14 2317 | ./Data/p270/148.wav|18 2318 | ./Data/p232/12.wav|12 2319 | ./Data/p259/22.wav|17 2320 | ./Data/p273/4.wav|19 2321 | ./Data/p244/133.wav|9 2322 | ./Data/p228/101.wav|1 2323 | ./Data/p273/31.wav|19 2324 | ./Data/p258/76.wav|16 2325 | ./Data/p227/146.wav|11 2326 | ./Data/p231/54.wav|4 2327 | ./Data/p236/37.wav|6 2328 | ./Data/p244/82.wav|9 2329 | ./Data/p225/17.wav|0 2330 | ./Data/p243/76.wav|13 2331 | ./Data/p273/140.wav|19 2332 | ./Data/p239/15.wav|7 2333 | ./Data/p230/19.wav|3 2334 | ./Data/p240/117.wav|8 2335 | ./Data/p244/94.wav|9 2336 | ./Data/p236/26.wav|6 2337 | ./Data/p259/99.wav|17 2338 | ./Data/p225/77.wav|0 2339 | ./Data/p244/31.wav|9 2340 | ./Data/p244/98.wav|9 2341 | ./Data/p243/59.wav|13 2342 | ./Data/p228/163.wav|1 2343 | ./Data/p270/141.wav|18 2344 | ./Data/p230/94.wav|3 2345 | ./Data/p228/110.wav|1 2346 | ./Data/p243/160.wav|13 2347 | ./Data/p239/162.wav|7 2348 | ./Data/p232/112.wav|12 2349 | ./Data/p273/54.wav|19 2350 | ./Data/p259/110.wav|17 2351 | ./Data/p244/64.wav|9 2352 | ./Data/p259/170.wav|17 2353 | ./Data/p230/53.wav|3 2354 | ./Data/p228/8.wav|1 2355 | ./Data/p232/80.wav|12 2356 | ./Data/p273/56.wav|19 2357 | ./Data/p256/93.wav|15 2358 | ./Data/p258/50.wav|16 2359 | ./Data/p231/41.wav|4 2360 | ./Data/p236/76.wav|6 2361 | ./Data/p229/65.wav|2 2362 | ./Data/p243/46.wav|13 2363 | ./Data/p228/31.wav|1 2364 | ./Data/p240/89.wav|8 2365 | ./Data/p240/119.wav|8 2366 | ./Data/p243/31.wav|13 2367 | ./Data/p273/122.wav|19 2368 | ./Data/p236/113.wav|6 2369 | ./Data/p232/67.wav|12 2370 | ./Data/p270/188.wav|18 2371 | ./Data/p256/46.wav|15 2372 | ./Data/p230/12.wav|3 2373 | ./Data/p236/156.wav|6 2374 | ./Data/p243/157.wav|13 2375 | ./Data/p239/22.wav|7 2376 | ./Data/p232/107.wav|12 2377 | ./Data/p229/28.wav|2 2378 | ./Data/p236/31.wav|6 2379 | ./Data/p254/50.wav|14 2380 | ./Data/p232/43.wav|12 2381 | ./Data/p244/142.wav|9 2382 | ./Data/p270/186.wav|18 2383 | ./Data/p258/139.wav|16 2384 | ./Data/p228/156.wav|1 2385 | ./Data/p256/12.wav|15 2386 | ./Data/p256/63.wav|15 2387 | ./Data/p230/116.wav|3 2388 | ./Data/p254/131.wav|14 2389 | ./Data/p243/139.wav|13 2390 | ./Data/p226/93.wav|10 2391 | ./Data/p239/98.wav|7 2392 | ./Data/p256/94.wav|15 2393 | ./Data/p243/102.wav|13 2394 | ./Data/p240/3.wav|8 2395 | ./Data/p258/86.wav|16 2396 | ./Data/p227/28.wav|11 2397 | ./Data/p228/49.wav|1 2398 | ./Data/p270/47.wav|18 2399 | ./Data/p226/88.wav|10 2400 | ./Data/p232/36.wav|12 2401 | ./Data/p259/90.wav|17 2402 | ./Data/p244/5.wav|9 2403 | ./Data/p243/122.wav|13 2404 | ./Data/p254/10.wav|14 2405 | ./Data/p254/64.wav|14 2406 | ./Data/p273/47.wav|19 2407 | ./Data/p243/171.wav|13 2408 | ./Data/p243/4.wav|13 2409 | ./Data/p230/128.wav|3 2410 | ./Data/p229/84.wav|2 2411 | ./Data/p259/39.wav|17 2412 | ./Data/p236/5.wav|6 2413 | ./Data/p225/47.wav|0 2414 | ./Data/p258/134.wav|16 2415 | ./Data/p259/12.wav|17 2416 | ./Data/p244/9.wav|9 2417 | ./Data/p227/98.wav|11 2418 | ./Data/p227/65.wav|11 2419 | ./Data/p226/114.wav|10 2420 | ./Data/p229/113.wav|2 2421 | ./Data/p240/16.wav|8 2422 | ./Data/p227/118.wav|11 2423 | ./Data/p258/56.wav|16 2424 | ./Data/p270/150.wav|18 2425 | ./Data/p256/85.wav|15 2426 | ./Data/p259/92.wav|17 2427 | ./Data/p239/84.wav|7 2428 | ./Data/p240/86.wav|8 2429 | ./Data/p225/11.wav|0 2430 | ./Data/p226/25.wav|10 2431 | ./Data/p270/65.wav|18 2432 | ./Data/p239/79.wav|7 2433 | ./Data/p240/76.wav|8 2434 | ./Data/p270/190.wav|18 2435 | ./Data/p236/163.wav|6 2436 | ./Data/p236/36.wav|6 2437 | ./Data/p240/41.wav|8 2438 | ./Data/p226/2.wav|10 2439 | ./Data/p230/104.wav|3 2440 | ./Data/p243/106.wav|13 2441 | ./Data/p243/90.wav|13 2442 | ./Data/p240/27.wav|8 2443 | ./Data/p240/30.wav|8 2444 | ./Data/p231/121.wav|4 2445 | ./Data/p239/8.wav|7 2446 | ./Data/p230/10.wav|3 2447 | ./Data/p239/104.wav|7 2448 | ./Data/p233/96.wav|5 2449 | ./Data/p236/33.wav|6 2450 | ./Data/p254/85.wav|14 2451 | ./Data/p227/26.wav|11 2452 | ./Data/p233/134.wav|5 2453 | ./Data/p230/48.wav|3 2454 | ./Data/p232/59.wav|12 2455 | ./Data/p239/156.wav|7 2456 | ./Data/p236/84.wav|6 2457 | ./Data/p228/63.wav|1 2458 | ./Data/p229/24.wav|2 2459 | ./Data/p236/155.wav|6 2460 | ./Data/p228/138.wav|1 2461 | ./Data/p270/185.wav|18 2462 | ./Data/p228/76.wav|1 2463 | ./Data/p254/115.wav|14 2464 | ./Data/p231/52.wav|4 2465 | ./Data/p273/8.wav|19 2466 | ./Data/p228/132.wav|1 2467 | ./Data/p273/59.wav|19 2468 | ./Data/p229/73.wav|2 2469 | ./Data/p259/152.wav|17 2470 | ./Data/p230/31.wav|3 2471 | ./Data/p230/35.wav|3 2472 | ./Data/p258/80.wav|16 2473 | ./Data/p225/61.wav|0 2474 | ./Data/p236/21.wav|6 2475 | ./Data/p232/127.wav|12 2476 | ./Data/p256/72.wav|15 2477 | ./Data/p244/123.wav|9 2478 | ./Data/p244/141.wav|9 2479 | ./Data/p270/69.wav|18 2480 | ./Data/p227/51.wav|11 2481 | ./Data/p273/11.wav|19 2482 | ./Data/p243/112.wav|13 2483 | ./Data/p254/16.wav|14 2484 | ./Data/p226/3.wav|10 2485 | ./Data/p231/36.wav|4 2486 | ./Data/p243/159.wav|13 2487 | ./Data/p228/55.wav|1 2488 | ./Data/p229/18.wav|2 2489 | ./Data/p273/22.wav|19 2490 | ./Data/p270/101.wav|18 2491 | ./Data/p227/62.wav|11 2492 | ./Data/p270/111.wav|18 2493 | ./Data/p254/73.wav|14 2494 | ./Data/p256/81.wav|15 2495 | ./Data/p226/116.wav|10 2496 | ./Data/p236/154.wav|6 2497 | ./Data/p233/98.wav|5 2498 | ./Data/p239/68.wav|7 2499 | ./Data/p273/69.wav|19 2500 | ./Data/p236/92.wav|6 2501 | ./Data/p273/81.wav|19 2502 | ./Data/p225/43.wav|0 2503 | ./Data/p230/27.wav|3 2504 | ./Data/p227/54.wav|11 2505 | ./Data/p233/113.wav|5 2506 | ./Data/p236/23.wav|6 2507 | ./Data/p236/51.wav|6 2508 | ./Data/p233/50.wav|5 2509 | ./Data/p225/76.wav|0 2510 | ./Data/p244/21.wav|9 2511 | ./Data/p228/53.wav|1 2512 | ./Data/p240/148.wav|8 2513 | ./Data/p243/173.wav|13 2514 | ./Data/p270/105.wav|18 2515 | ./Data/p227/13.wav|11 2516 | ./Data/p228/121.wav|1 2517 | ./Data/p233/128.wav|5 2518 | ./Data/p256/82.wav|15 2519 | ./Data/p244/76.wav|9 2520 | ./Data/p232/9.wav|12 2521 | ./Data/p239/4.wav|7 2522 | ./Data/p240/106.wav|8 2523 | ./Data/p270/81.wav|18 2524 | ./Data/p225/48.wav|0 2525 | ./Data/p254/67.wav|14 2526 | ./Data/p240/66.wav|8 2527 | ./Data/p259/47.wav|17 2528 | ./Data/p230/63.wav|3 2529 | ./Data/p230/141.wav|3 2530 | ./Data/p231/137.wav|4 2531 | ./Data/p227/133.wav|11 2532 | ./Data/p259/100.wav|17 2533 | ./Data/p259/171.wav|17 2534 | ./Data/p240/56.wav|8 2535 | ./Data/p273/126.wav|19 2536 | ./Data/p256/32.wav|15 2537 | ./Data/p270/79.wav|18 2538 | ./Data/p227/46.wav|11 2539 | ./Data/p228/51.wav|1 2540 | ./Data/p243/54.wav|13 2541 | ./Data/p258/141.wav|16 2542 | ./Data/p226/31.wav|10 2543 | ./Data/p236/137.wav|6 2544 | ./Data/p230/30.wav|3 2545 | ./Data/p236/34.wav|6 2546 | ./Data/p228/35.wav|1 2547 | ./Data/p244/56.wav|9 2548 | ./Data/p230/107.wav|3 2549 | ./Data/p240/36.wav|8 2550 | ./Data/p233/62.wav|5 2551 | ./Data/p239/112.wav|7 2552 | ./Data/p231/42.wav|4 2553 | ./Data/p256/9.wav|15 2554 | ./Data/p227/23.wav|11 2555 | ./Data/p236/32.wav|6 2556 | ./Data/p228/67.wav|1 2557 | ./Data/p225/72.wav|0 2558 | ./Data/p232/82.wav|12 2559 | ./Data/p244/68.wav|9 2560 | ./Data/p230/145.wav|3 2561 | ./Data/p239/5.wav|7 2562 | ./Data/p230/154.wav|3 2563 | ./Data/p232/98.wav|12 2564 | ./Data/p243/136.wav|13 2565 | ./Data/p228/115.wav|1 2566 | ./Data/p226/5.wav|10 2567 | ./Data/p240/52.wav|8 2568 | ./Data/p270/170.wav|18 2569 | ./Data/p243/93.wav|13 2570 | ./Data/p243/26.wav|13 2571 | ./Data/p230/136.wav|3 2572 | ./Data/p226/97.wav|10 2573 | ./Data/p229/136.wav|2 2574 | ./Data/p227/136.wav|11 2575 | ./Data/p236/119.wav|6 2576 | ./Data/p232/14.wav|12 2577 | ./Data/p254/138.wav|14 2578 | ./Data/p240/143.wav|8 2579 | ./Data/p259/122.wav|17 2580 | ./Data/p270/205.wav|18 2581 | ./Data/p254/100.wav|14 2582 | ./Data/p270/149.wav|18 2583 | ./Data/p259/9.wav|17 2584 | ./Data/p226/96.wav|10 2585 | ./Data/p230/23.wav|3 2586 | ./Data/p244/72.wav|9 2587 | ./Data/p259/73.wav|17 2588 | ./Data/p227/68.wav|11 2589 | ./Data/p226/75.wav|10 2590 | ./Data/p236/109.wav|6 2591 | ./Data/p258/102.wav|16 2592 | ./Data/p232/44.wav|12 2593 | ./Data/p243/27.wav|13 2594 | ./Data/p232/126.wav|12 2595 | ./Data/p240/14.wav|8 2596 | ./Data/p226/71.wav|10 2597 | ./Data/p230/88.wav|3 2598 | ./Data/p233/45.wav|5 2599 | ./Data/p244/103.wav|9 2600 | ./Data/p232/26.wav|12 2601 | ./Data/p229/101.wav|2 2602 | ./Data/p229/44.wav|2 2603 | ./Data/p232/123.wav|12 2604 | ./Data/p228/129.wav|1 2605 | ./Data/p273/32.wav|19 2606 | ./Data/p232/125.wav|12 2607 | ./Data/p240/103.wav|8 2608 | ./Data/p254/128.wav|14 2609 | ./Data/p254/34.wav|14 2610 | ./Data/p240/19.wav|8 2611 | ./Data/p232/89.wav|12 2612 | ./Data/p273/73.wav|19 2613 | ./Data/p231/109.wav|4 2614 | ./Data/p270/124.wav|18 2615 | ./Data/p244/112.wav|9 2616 | ./Data/p256/117.wav|15 2617 | ./Data/p244/88.wav|9 2618 | ./Data/p228/17.wav|1 2619 | ./Data/p233/86.wav|5 2620 | ./Data/p254/23.wav|14 2621 | ./Data/p233/59.wav|5 2622 | ./Data/p232/25.wav|12 2623 | ./Data/p231/108.wav|4 2624 | ./Data/p258/103.wav|16 2625 | ./Data/p232/69.wav|12 2626 | ./Data/p230/65.wav|3 2627 | ./Data/p240/73.wav|8 2628 | ./Data/p243/125.wav|13 2629 | ./Data/p256/92.wav|15 2630 | ./Data/p270/31.wav|18 2631 | ./Data/p256/44.wav|15 2632 | ./Data/p236/98.wav|6 2633 | ./Data/p228/90.wav|1 2634 | ./Data/p231/125.wav|4 2635 | ./Data/p232/64.wav|12 2636 | ./Data/p273/80.wav|19 2637 | ./Data/p227/32.wav|11 2638 | ./Data/p226/17.wav|10 2639 | ./Data/p226/69.wav|10 2640 | ./Data/p231/142.wav|4 2641 | ./Data/p225/65.wav|0 2642 | ./Data/p229/64.wav|2 2643 | ./Data/p240/70.wav|8 2644 | ./Data/p225/85.wav|0 2645 | ./Data/p259/166.wav|17 2646 | ./Data/p230/119.wav|3 2647 | ./Data/p258/135.wav|16 2648 | ./Data/p225/60.wav|0 2649 | ./Data/p239/74.wav|7 2650 | ./Data/p233/117.wav|5 2651 | ./Data/p226/44.wav|10 2652 | ./Data/p227/103.wav|11 2653 | ./Data/p228/45.wav|1 2654 | ./Data/p244/52.wav|9 2655 | ./Data/p230/168.wav|3 2656 | ./Data/p259/71.wav|17 2657 | ./Data/p270/109.wav|18 2658 | ./Data/p243/164.wav|13 2659 | ./Data/p243/36.wav|13 2660 | ./Data/p270/12.wav|18 2661 | ./Data/p229/125.wav|2 2662 | ./Data/p259/51.wav|17 2663 | ./Data/p225/81.wav|0 2664 | ./Data/p240/133.wav|8 2665 | ./Data/p270/130.wav|18 2666 | ./Data/p228/37.wav|1 2667 | ./Data/p228/39.wav|1 2668 | ./Data/p240/35.wav|8 2669 | ./Data/p231/124.wav|4 2670 | ./Data/p244/121.wav|9 2671 | ./Data/p270/133.wav|18 2672 | ./Data/p227/110.wav|11 2673 | ./Data/p244/134.wav|9 2674 | ./Data/p254/59.wav|14 2675 | ./Data/p239/35.wav|7 2676 | ./Data/p236/150.wav|6 2677 | ./Data/p227/40.wav|11 2678 | ./Data/p258/13.wav|16 2679 | ./Data/p240/123.wav|8 2680 | ./Data/p231/141.wav|4 2681 | ./Data/p228/151.wav|1 2682 | ./Data/p236/45.wav|6 2683 | ./Data/p273/5.wav|19 2684 | ./Data/p231/113.wav|4 2685 | ./Data/p256/103.wav|15 2686 | ./Data/p227/87.wav|11 2687 | ./Data/p270/173.wav|18 2688 | ./Data/p243/104.wav|13 2689 | ./Data/p240/141.wav|8 2690 | ./Data/p240/128.wav|8 2691 | ./Data/p259/50.wav|17 2692 | ./Data/p231/8.wav|4 2693 | ./Data/p226/82.wav|10 2694 | ./Data/p243/110.wav|13 2695 | ./Data/p243/101.wav|13 2696 | ./Data/p259/132.wav|17 2697 | ./Data/p227/99.wav|11 2698 | ./Data/p259/42.wav|17 2699 | ./Data/p229/29.wav|2 2700 | ./Data/p236/104.wav|6 2701 | ./Data/p259/34.wav|17 2702 | ./Data/p254/117.wav|14 2703 | ./Data/p227/29.wav|11 2704 | ./Data/p258/111.wav|16 2705 | ./Data/p229/9.wav|2 2706 | ./Data/p240/26.wav|8 2707 | ./Data/p259/89.wav|17 2708 | ./Data/p270/21.wav|18 2709 | ./Data/p254/101.wav|14 2710 | ./Data/p259/40.wav|17 2711 | ./Data/p240/7.wav|8 2712 | ./Data/p240/114.wav|8 2713 | ./Data/p230/176.wav|3 2714 | ./Data/p231/47.wav|4 2715 | ./Data/p239/37.wav|7 2716 | ./Data/p232/51.wav|12 2717 | ./Data/p270/142.wav|18 2718 | ./Data/p254/6.wav|14 2719 | ./Data/p225/50.wav|0 2720 | ./Data/p227/91.wav|11 2721 | ./Data/p259/149.wav|17 2722 | ./Data/p259/125.wav|17 2723 | ./Data/p229/107.wav|2 2724 | ./Data/p228/10.wav|1 2725 | ./Data/p231/107.wav|4 2726 | -------------------------------------------------------------------------------- /Data/val_list.txt: -------------------------------------------------------------------------------- 1 | ./Data/p270/13.wav|18 2 | ./Data/p273/94.wav|19 3 | ./Data/p229/97.wav|2 4 | ./Data/p232/117.wav|12 5 | ./Data/p226/55.wav|10 6 | ./Data/p259/102.wav|17 7 | ./Data/p226/7.wav|10 8 | ./Data/p254/26.wav|14 9 | ./Data/p239/115.wav|7 10 | ./Data/p239/86.wav|7 11 | ./Data/p229/106.wav|2 12 | ./Data/p244/43.wav|9 13 | ./Data/p270/179.wav|18 14 | ./Data/p273/6.wav|19 15 | ./Data/p258/101.wav|16 16 | ./Data/p273/62.wav|19 17 | ./Data/p228/11.wav|1 18 | ./Data/p273/103.wav|19 19 | ./Data/p230/49.wav|3 20 | ./Data/p233/23.wav|5 21 | ./Data/p230/122.wav|3 22 | ./Data/p239/80.wav|7 23 | ./Data/p226/4.wav|10 24 | ./Data/p240/50.wav|8 25 | ./Data/p243/28.wav|13 26 | ./Data/p236/95.wav|6 27 | ./Data/p244/126.wav|9 28 | ./Data/p244/40.wav|9 29 | ./Data/p239/108.wav|7 30 | ./Data/p273/72.wav|19 31 | ./Data/p254/92.wav|14 32 | ./Data/p231/116.wav|4 33 | ./Data/p231/32.wav|4 34 | ./Data/p243/117.wav|13 35 | ./Data/p256/121.wav|15 36 | ./Data/p243/3.wav|13 37 | ./Data/p226/91.wav|10 38 | ./Data/p256/53.wav|15 39 | ./Data/p254/75.wav|14 40 | ./Data/p243/150.wav|13 41 | ./Data/p231/95.wav|4 42 | ./Data/p228/81.wav|1 43 | ./Data/p226/33.wav|10 44 | ./Data/p232/71.wav|12 45 | ./Data/p236/4.wav|6 46 | ./Data/p236/132.wav|6 47 | ./Data/p254/119.wav|14 48 | ./Data/p236/7.wav|6 49 | ./Data/p227/104.wav|11 50 | ./Data/p226/59.wav|10 51 | ./Data/p233/35.wav|5 52 | ./Data/p231/23.wav|4 53 | ./Data/p273/71.wav|19 54 | ./Data/p240/74.wav|8 55 | ./Data/p259/33.wav|17 56 | ./Data/p259/118.wav|17 57 | ./Data/p273/15.wav|19 58 | ./Data/p226/115.wav|10 59 | ./Data/p236/19.wav|6 60 | ./Data/p226/57.wav|10 61 | ./Data/p229/14.wav|2 62 | ./Data/p243/98.wav|13 63 | ./Data/p243/79.wav|13 64 | ./Data/p231/12.wav|4 65 | ./Data/p230/170.wav|3 66 | ./Data/p228/114.wav|1 67 | ./Data/p254/103.wav|14 68 | ./Data/p256/108.wav|15 69 | ./Data/p256/58.wav|15 70 | ./Data/p229/23.wav|2 71 | ./Data/p270/151.wav|18 72 | ./Data/p259/36.wav|17 73 | ./Data/p230/64.wav|3 74 | ./Data/p226/134.wav|10 75 | ./Data/p230/84.wav|3 76 | ./Data/p270/91.wav|18 77 | ./Data/p230/160.wav|3 78 | ./Data/p236/15.wav|6 79 | ./Data/p225/45.wav|0 80 | ./Data/p239/62.wav|7 81 | ./Data/p256/107.wav|15 82 | ./Data/p258/144.wav|16 83 | ./Data/p229/37.wav|2 84 | ./Data/p226/108.wav|10 85 | ./Data/p225/92.wav|0 86 | ./Data/p227/138.wav|11 87 | ./Data/p230/151.wav|3 88 | ./Data/p229/90.wav|2 89 | ./Data/p244/131.wav|9 90 | ./Data/p231/1.wav|4 91 | ./Data/p243/40.wav|13 92 | ./Data/p226/131.wav|10 93 | ./Data/p226/121.wav|10 94 | ./Data/p270/119.wav|18 95 | ./Data/p225/4.wav|0 96 | ./Data/p243/39.wav|13 97 | ./Data/p233/1.wav|5 98 | ./Data/p239/117.wav|7 99 | ./Data/p259/101.wav|17 100 | ./Data/p228/73.wav|1 101 | ./Data/p273/78.wav|19 102 | ./Data/p256/22.wav|15 103 | ./Data/p244/65.wav|9 104 | ./Data/p240/17.wav|8 105 | ./Data/p258/47.wav|16 106 | ./Data/p239/95.wav|7 107 | ./Data/p243/119.wav|13 108 | ./Data/p259/106.wav|17 109 | ./Data/p233/22.wav|5 110 | ./Data/p232/60.wav|12 111 | ./Data/p270/55.wav|18 112 | ./Data/p230/87.wav|3 113 | ./Data/p270/139.wav|18 114 | ./Data/p225/5.wav|0 115 | ./Data/p243/128.wav|13 116 | ./Data/p258/10.wav|16 117 | ./Data/p230/100.wav|3 118 | ./Data/p239/43.wav|7 119 | ./Data/p232/57.wav|12 120 | ./Data/p256/27.wav|15 121 | ./Data/p232/130.wav|12 122 | ./Data/p243/153.wav|13 123 | ./Data/p258/92.wav|16 124 | ./Data/p232/81.wav|12 125 | ./Data/p256/65.wav|15 126 | ./Data/p259/107.wav|17 127 | ./Data/p239/10.wav|7 128 | ./Data/p233/4.wav|5 129 | ./Data/p259/165.wav|17 130 | ./Data/p225/41.wav|0 131 | ./Data/p229/61.wav|2 132 | ./Data/p227/36.wav|11 133 | ./Data/p243/62.wav|13 134 | ./Data/p259/31.wav|17 135 | ./Data/p231/75.wav|4 136 | ./Data/p233/31.wav|5 137 | ./Data/p273/66.wav|19 138 | ./Data/p226/6.wav|10 139 | ./Data/p243/162.wav|13 140 | ./Data/p229/21.wav|2 141 | ./Data/p230/11.wav|3 142 | ./Data/p231/84.wav|4 143 | ./Data/p273/118.wav|19 144 | ./Data/p227/92.wav|11 145 | ./Data/p256/110.wav|15 146 | ./Data/p230/105.wav|3 147 | ./Data/p239/75.wav|7 148 | ./Data/p229/78.wav|2 149 | ./Data/p254/111.wav|14 150 | ./Data/p232/24.wav|12 151 | ./Data/p233/19.wav|5 152 | ./Data/p233/52.wav|5 153 | ./Data/p258/143.wav|16 154 | ./Data/p254/135.wav|14 155 | ./Data/p232/37.wav|12 156 | ./Data/p244/81.wav|9 157 | ./Data/p270/161.wav|18 158 | ./Data/p233/43.wav|5 159 | ./Data/p240/40.wav|8 160 | ./Data/p244/70.wav|9 161 | ./Data/p254/1.wav|14 162 | ./Data/p229/96.wav|2 163 | ./Data/p243/99.wav|13 164 | ./Data/p259/20.wav|17 165 | ./Data/p233/66.wav|5 166 | ./Data/p239/88.wav|7 167 | ./Data/p225/71.wav|0 168 | ./Data/p227/143.wav|11 169 | ./Data/p228/142.wav|1 170 | ./Data/p231/135.wav|4 171 | ./Data/p254/107.wav|14 172 | ./Data/p233/36.wav|5 173 | ./Data/p232/19.wav|12 174 | ./Data/p258/113.wav|16 175 | ./Data/p243/96.wav|13 176 | ./Data/p273/90.wav|19 177 | ./Data/p225/13.wav|0 178 | ./Data/p228/32.wav|1 179 | ./Data/p229/60.wav|2 180 | ./Data/p273/14.wav|19 181 | ./Data/p239/25.wav|7 182 | ./Data/p256/31.wav|15 183 | ./Data/p225/40.wav|0 184 | ./Data/p273/43.wav|19 185 | ./Data/p270/206.wav|18 186 | ./Data/p244/19.wav|9 187 | ./Data/p244/83.wav|9 188 | ./Data/p259/134.wav|17 189 | ./Data/p244/91.wav|9 190 | ./Data/p225/80.wav|0 191 | ./Data/p227/60.wav|11 192 | ./Data/p244/128.wav|9 193 | ./Data/p256/80.wav|15 194 | ./Data/p256/15.wav|15 195 | ./Data/p244/34.wav|9 196 | ./Data/p256/69.wav|15 197 | ./Data/p228/15.wav|1 198 | ./Data/p232/65.wav|12 199 | ./Data/p273/65.wav|19 200 | ./Data/p239/124.wav|7 201 | ./Data/p259/15.wav|17 202 | ./Data/p226/137.wav|10 203 | ./Data/p243/75.wav|13 204 | ./Data/p258/16.wav|16 205 | ./Data/p232/6.wav|12 206 | ./Data/p231/106.wav|4 207 | ./Data/p228/6.wav|1 208 | ./Data/p243/172.wav|13 209 | ./Data/p236/77.wav|6 210 | ./Data/p256/95.wav|15 211 | ./Data/p256/76.wav|15 212 | ./Data/p239/119.wav|7 213 | ./Data/p236/108.wav|6 214 | ./Data/p243/92.wav|13 215 | ./Data/p232/129.wav|12 216 | ./Data/p230/124.wav|3 217 | ./Data/p228/9.wav|1 218 | ./Data/p232/100.wav|12 219 | ./Data/p254/5.wav|14 220 | ./Data/p273/1.wav|19 221 | ./Data/p236/47.wav|6 222 | ./Data/p240/87.wav|8 223 | ./Data/p229/127.wav|2 224 | ./Data/p228/152.wav|1 225 | ./Data/p225/24.wav|0 226 | ./Data/p229/20.wav|2 227 | ./Data/p233/12.wav|5 228 | ./Data/p259/46.wav|17 229 | ./Data/p231/72.wav|4 230 | ./Data/p254/65.wav|14 231 | ./Data/p231/18.wav|4 232 | ./Data/p270/66.wav|18 233 | ./Data/p233/44.wav|5 234 | ./Data/p233/126.wav|5 235 | ./Data/p233/58.wav|5 236 | ./Data/p273/142.wav|19 237 | ./Data/p228/26.wav|1 238 | ./Data/p230/106.wav|3 239 | ./Data/p228/109.wav|1 240 | ./Data/p232/76.wav|12 241 | ./Data/p226/37.wav|10 242 | ./Data/p226/66.wav|10 243 | ./Data/p270/75.wav|18 244 | ./Data/p229/4.wav|2 245 | ./Data/p239/166.wav|7 246 | ./Data/p228/79.wav|1 247 | ./Data/p230/43.wav|3 248 | ./Data/p258/100.wav|16 249 | ./Data/p244/93.wav|9 250 | ./Data/p256/105.wav|15 251 | ./Data/p236/12.wav|6 252 | ./Data/p270/154.wav|18 253 | ./Data/p244/75.wav|9 254 | ./Data/p239/160.wav|7 255 | ./Data/p239/174.wav|7 256 | ./Data/p225/26.wav|0 257 | ./Data/p232/49.wav|12 258 | ./Data/p258/19.wav|16 259 | ./Data/p273/13.wav|19 260 | ./Data/p232/32.wav|12 261 | ./Data/p270/42.wav|18 262 | ./Data/p270/194.wav|18 263 | ./Data/p259/174.wav|17 264 | ./Data/p236/53.wav|6 265 | ./Data/p232/77.wav|12 266 | ./Data/p240/118.wav|8 267 | ./Data/p239/175.wav|7 268 | ./Data/p225/58.wav|0 269 | ./Data/p232/1.wav|12 270 | ./Data/p243/5.wav|13 271 | ./Data/p229/41.wav|2 272 | ./Data/p233/60.wav|5 273 | ./Data/p236/138.wav|6 274 | ./Data/p258/54.wav|16 275 | ./Data/p254/22.wav|14 276 | ./Data/p254/76.wav|14 277 | ./Data/p228/25.wav|1 278 | ./Data/p259/61.wav|17 279 | ./Data/p270/135.wav|18 280 | ./Data/p231/136.wav|4 281 | ./Data/p232/105.wav|12 282 | ./Data/p259/35.wav|17 283 | ./Data/p244/57.wav|9 284 | ./Data/p226/104.wav|10 285 | ./Data/p258/48.wav|16 286 | ./Data/p229/139.wav|2 287 | ./Data/p239/65.wav|7 288 | ./Data/p228/74.wav|1 289 | ./Data/p233/25.wav|5 290 | ./Data/p243/16.wav|13 291 | ./Data/p243/165.wav|13 292 | ./Data/p229/46.wav|2 293 | ./Data/p226/41.wav|10 294 | ./Data/p228/160.wav|1 295 | ./Data/p230/90.wav|3 296 | ./Data/p270/184.wav|18 297 | ./Data/p259/55.wav|17 298 | ./Data/p232/31.wav|12 299 | ./Data/p231/78.wav|4 300 | ./Data/p259/78.wav|17 301 | ./Data/p273/33.wav|19 302 | ./Data/p256/40.wav|15 303 | ./Data/p258/116.wav|16 304 | -------------------------------------------------------------------------------- /Demo/VCTK-corpus/p228/p228_023.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yl4579/StarGANv2-VC/ebe97a0c41ea295dcea8f5e3e2b7e934edd01608/Demo/VCTK-corpus/p228/p228_023.wav -------------------------------------------------------------------------------- /Demo/VCTK-corpus/p230/p230_023.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yl4579/StarGANv2-VC/ebe97a0c41ea295dcea8f5e3e2b7e934edd01608/Demo/VCTK-corpus/p230/p230_023.wav -------------------------------------------------------------------------------- /Demo/VCTK-corpus/p233/p233_023.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yl4579/StarGANv2-VC/ebe97a0c41ea295dcea8f5e3e2b7e934edd01608/Demo/VCTK-corpus/p233/p233_023.wav -------------------------------------------------------------------------------- /Demo/VCTK-corpus/p236/p236_023.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yl4579/StarGANv2-VC/ebe97a0c41ea295dcea8f5e3e2b7e934edd01608/Demo/VCTK-corpus/p236/p236_023.wav -------------------------------------------------------------------------------- /Demo/VCTK-corpus/p243/p243_023.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yl4579/StarGANv2-VC/ebe97a0c41ea295dcea8f5e3e2b7e934edd01608/Demo/VCTK-corpus/p243/p243_023.wav -------------------------------------------------------------------------------- /Demo/VCTK-corpus/p244/p244_023.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yl4579/StarGANv2-VC/ebe97a0c41ea295dcea8f5e3e2b7e934edd01608/Demo/VCTK-corpus/p244/p244_023.wav -------------------------------------------------------------------------------- /Demo/VCTK-corpus/p254/p254_023.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yl4579/StarGANv2-VC/ebe97a0c41ea295dcea8f5e3e2b7e934edd01608/Demo/VCTK-corpus/p254/p254_023.wav -------------------------------------------------------------------------------- /Demo/VCTK-corpus/p258/p258_023.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yl4579/StarGANv2-VC/ebe97a0c41ea295dcea8f5e3e2b7e934edd01608/Demo/VCTK-corpus/p258/p258_023.wav -------------------------------------------------------------------------------- /Demo/VCTK-corpus/p259/p259_023.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yl4579/StarGANv2-VC/ebe97a0c41ea295dcea8f5e3e2b7e934edd01608/Demo/VCTK-corpus/p259/p259_023.wav -------------------------------------------------------------------------------- /Demo/VCTK-corpus/p273/p273_023.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yl4579/StarGANv2-VC/ebe97a0c41ea295dcea8f5e3e2b7e934edd01608/Demo/VCTK-corpus/p273/p273_023.wav -------------------------------------------------------------------------------- /Demo/inference.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "id": "HwaQq4GRU_Nw" 7 | }, 8 | "source": [ 9 | "# StarGANv2-VC Demo (VCTK 20 Speakers)" 10 | ] 11 | }, 12 | { 13 | "cell_type": "markdown", 14 | "metadata": { 15 | "id": "hCpoXuZeGKAn" 16 | }, 17 | "source": [ 18 | "### Utils" 19 | ] 20 | }, 21 | { 22 | "cell_type": "code", 23 | "execution_count": null, 24 | "metadata": {}, 25 | "outputs": [], 26 | "source": [ 27 | "%cd .." 28 | ] 29 | }, 30 | { 31 | "cell_type": "code", 32 | "execution_count": null, 33 | "metadata": { 34 | "colab": { 35 | "base_uri": "https://localhost:8080/" 36 | }, 37 | "executionInfo": { 38 | "elapsed": 24923, 39 | "status": "ok", 40 | "timestamp": 1613984920200, 41 | "user": { 42 | "displayName": "Yinghao Li", 43 | "photoUrl": "", 44 | "userId": "12798981472803960591" 45 | }, 46 | "user_tz": 300 47 | }, 48 | "id": "3on9IjGhVGTP", 49 | "outputId": "63a799f8-564d-48c2-fb0f-e66c0cd9fdb8" 50 | }, 51 | "outputs": [], 52 | "source": [ 53 | "# load packages\n", 54 | "import random\n", 55 | "import yaml\n", 56 | "from munch import Munch\n", 57 | "import numpy as np\n", 58 | "import torch\n", 59 | "from torch import nn\n", 60 | "import torch.nn.functional as F\n", 61 | "import torchaudio\n", 62 | "import librosa\n", 63 | "\n", 64 | "from Utils.ASR.models import ASRCNN\n", 65 | "from Utils.JDC.model import JDCNet\n", 66 | "from models import Generator, MappingNetwork, StyleEncoder\n", 67 | "\n", 68 | "%matplotlib inline" 69 | ] 70 | }, 71 | { 72 | "cell_type": "code", 73 | "execution_count": null, 74 | "metadata": {}, 75 | "outputs": [], 76 | "source": [ 77 | "# Source: http://speech.ee.ntu.edu.tw/~jjery2243542/resource/model/is18/en_speaker_used.txt\n", 78 | "# Source: https://github.com/jjery2243542/voice_conversion\n", 79 | "\n", 80 | "speakers = [225,228,229,230,231,233,236,239,240,244,226,227,232,243,254,256,258,259,270,273]\n", 81 | "\n", 82 | "to_mel = torchaudio.transforms.MelSpectrogram(\n", 83 | " n_mels=80, n_fft=2048, win_length=1200, hop_length=300)\n", 84 | "mean, std = -4, 4\n", 85 | "\n", 86 | "def preprocess(wave):\n", 87 | " wave_tensor = torch.from_numpy(wave).float()\n", 88 | " mel_tensor = to_mel(wave_tensor)\n", 89 | " mel_tensor = (torch.log(1e-5 + mel_tensor.unsqueeze(0)) - mean) / std\n", 90 | " return mel_tensor\n", 91 | "\n", 92 | "def build_model(model_params={}):\n", 93 | " args = Munch(model_params)\n", 94 | " generator = Generator(args.dim_in, args.style_dim, args.max_conv_dim, w_hpf=args.w_hpf, F0_channel=args.F0_channel)\n", 95 | " mapping_network = MappingNetwork(args.latent_dim, args.style_dim, args.num_domains, hidden_dim=args.max_conv_dim)\n", 96 | " style_encoder = StyleEncoder(args.dim_in, args.style_dim, args.num_domains, args.max_conv_dim)\n", 97 | " \n", 98 | " nets_ema = Munch(generator=generator,\n", 99 | " mapping_network=mapping_network,\n", 100 | " style_encoder=style_encoder)\n", 101 | "\n", 102 | " return nets_ema\n", 103 | "\n", 104 | "def compute_style(speaker_dicts):\n", 105 | " reference_embeddings = {}\n", 106 | " for key, (path, speaker) in speaker_dicts.items():\n", 107 | " if path == \"\":\n", 108 | " label = torch.LongTensor([speaker]).to('cuda')\n", 109 | " latent_dim = starganv2.mapping_network.shared[0].in_features\n", 110 | " ref = starganv2.mapping_network(torch.randn(1, latent_dim).to('cuda'), label)\n", 111 | " else:\n", 112 | " wave, sr = librosa.load(path, sr=24000)\n", 113 | " audio, index = librosa.effects.trim(wave, top_db=30)\n", 114 | " if sr != 24000:\n", 115 | " wave = librosa.resample(wave, sr, 24000)\n", 116 | " mel_tensor = preprocess(wave).to('cuda')\n", 117 | "\n", 118 | " with torch.no_grad():\n", 119 | " label = torch.LongTensor([speaker])\n", 120 | " ref = starganv2.style_encoder(mel_tensor.unsqueeze(1), label)\n", 121 | " reference_embeddings[key] = (ref, label)\n", 122 | " \n", 123 | " return reference_embeddings" 124 | ] 125 | }, 126 | { 127 | "cell_type": "markdown", 128 | "metadata": {}, 129 | "source": [ 130 | "### Load models" 131 | ] 132 | }, 133 | { 134 | "cell_type": "code", 135 | "execution_count": null, 136 | "metadata": {}, 137 | "outputs": [], 138 | "source": [ 139 | "# load F0 model\n", 140 | "\n", 141 | "F0_model = JDCNet(num_class=1, seq_len=192)\n", 142 | "params = torch.load(\"Utils/JDC/bst.t7\")['net']\n", 143 | "F0_model.load_state_dict(params)\n", 144 | "_ = F0_model.eval()\n", 145 | "F0_model = F0_model.to('cuda')" 146 | ] 147 | }, 148 | { 149 | "cell_type": "code", 150 | "execution_count": null, 151 | "metadata": { 152 | "executionInfo": { 153 | "elapsed": 43003, 154 | "status": "ok", 155 | "timestamp": 1613984938321, 156 | "user": { 157 | "displayName": "Yinghao Li", 158 | "photoUrl": "", 159 | "userId": "12798981472803960591" 160 | }, 161 | "user_tz": 300 162 | }, 163 | "id": "NZA3ot-oF5t-" 164 | }, 165 | "outputs": [], 166 | "source": [ 167 | "# load vocoder\n", 168 | "from parallel_wavegan.utils import load_model\n", 169 | "vocoder = load_model(\"Vocoder/checkpoint-400000steps.pkl\").to('cuda').eval()\n", 170 | "vocoder.remove_weight_norm()\n", 171 | "_ = vocoder.eval()" 172 | ] 173 | }, 174 | { 175 | "cell_type": "code", 176 | "execution_count": null, 177 | "metadata": { 178 | "colab": { 179 | "base_uri": "https://localhost:8080/" 180 | }, 181 | "executionInfo": { 182 | "elapsed": 24462, 183 | "status": "ok", 184 | "timestamp": 1613985522414, 185 | "user": { 186 | "displayName": "Yinghao Li", 187 | "photoUrl": "", 188 | "userId": "12798981472803960591" 189 | }, 190 | "user_tz": 300 191 | }, 192 | "id": "Ou4367LCyefA", 193 | "outputId": "19c61f6f-f39a-43b9-9275-09418c2aebb4" 194 | }, 195 | "outputs": [], 196 | "source": [ 197 | "# load starganv2\n", 198 | "\n", 199 | "model_path = 'Models/VCTK20/epoch_00150.pth'\n", 200 | "\n", 201 | "with open('Models/VCTK20/config.yml') as f:\n", 202 | " starganv2_config = yaml.safe_load(f)\n", 203 | "starganv2 = build_model(model_params=starganv2_config[\"model_params\"])\n", 204 | "params = torch.load(model_path, map_location='cpu')\n", 205 | "params = params['model_ema']\n", 206 | "_ = [starganv2[key].load_state_dict(params[key]) for key in starganv2]\n", 207 | "_ = [starganv2[key].eval() for key in starganv2]\n", 208 | "starganv2.style_encoder = starganv2.style_encoder.to('cuda')\n", 209 | "starganv2.mapping_network = starganv2.mapping_network.to('cuda')\n", 210 | "starganv2.generator = starganv2.generator.to('cuda')" 211 | ] 212 | }, 213 | { 214 | "cell_type": "markdown", 215 | "metadata": {}, 216 | "source": [ 217 | "### Conversion" 218 | ] 219 | }, 220 | { 221 | "cell_type": "code", 222 | "execution_count": null, 223 | "metadata": {}, 224 | "outputs": [], 225 | "source": [ 226 | "# load input wave\n", 227 | "selected_speakers = [273, 259, 258, 243, 254, 244, 236, 233, 230, 228]\n", 228 | "k = random.choice(selected_speakers)\n", 229 | "wav_path = 'Demo/VCTK-corpus/p' + str(k) + '/p' + str(k) + '_023.wav'\n", 230 | "audio, source_sr = librosa.load(wav_path, sr=24000)\n", 231 | "audio = audio / np.max(np.abs(audio))\n", 232 | "audio.dtype = np.float32" 233 | ] 234 | }, 235 | { 236 | "cell_type": "markdown", 237 | "metadata": {}, 238 | "source": [ 239 | "#### Convert by style encoder" 240 | ] 241 | }, 242 | { 243 | "cell_type": "code", 244 | "execution_count": null, 245 | "metadata": {}, 246 | "outputs": [], 247 | "source": [ 248 | "# with reference, using style encoder\n", 249 | "speaker_dicts = {}\n", 250 | "for s in selected_speakers:\n", 251 | " k = s\n", 252 | " speaker_dicts['p' + str(s)] = ('Demo/VCTK-corpus/p' + str(k) + '/p' + str(k) + '_023.wav', speakers.index(s))\n", 253 | "\n", 254 | "reference_embeddings = compute_style(speaker_dicts)" 255 | ] 256 | }, 257 | { 258 | "cell_type": "code", 259 | "execution_count": null, 260 | "metadata": { 261 | "colab": { 262 | "base_uri": "https://localhost:8080/", 263 | "height": 333 264 | }, 265 | "executionInfo": { 266 | "elapsed": 1424, 267 | "status": "ok", 268 | "timestamp": 1613986299525, 269 | "user": { 270 | "displayName": "Yinghao Li", 271 | "photoUrl": "", 272 | "userId": "12798981472803960591" 273 | }, 274 | "user_tz": 300 275 | }, 276 | "id": "T5tahObUyN-d", 277 | "outputId": "f4f38742-2235-4f59-cb2a-5008912cd870", 278 | "scrolled": true 279 | }, 280 | "outputs": [], 281 | "source": [ 282 | "# conversion \n", 283 | "import time\n", 284 | "start = time.time()\n", 285 | " \n", 286 | "source = preprocess(audio).to('cuda:0')\n", 287 | "keys = []\n", 288 | "converted_samples = {}\n", 289 | "reconstructed_samples = {}\n", 290 | "converted_mels = {}\n", 291 | "\n", 292 | "for key, (ref, _) in reference_embeddings.items():\n", 293 | " with torch.no_grad():\n", 294 | " f0_feat = F0_model.get_feature_GAN(source.unsqueeze(1))\n", 295 | " out = starganv2.generator(source.unsqueeze(1), ref, F0=f0_feat)\n", 296 | " \n", 297 | " c = out.transpose(-1, -2).squeeze().to('cuda')\n", 298 | " y_out = vocoder.inference(c)\n", 299 | " y_out = y_out.view(-1).cpu()\n", 300 | "\n", 301 | " if key not in speaker_dicts or speaker_dicts[key][0] == \"\":\n", 302 | " recon = None\n", 303 | " else:\n", 304 | " wave, sr = librosa.load(speaker_dicts[key][0], sr=24000)\n", 305 | " mel = preprocess(wave)\n", 306 | " c = mel.transpose(-1, -2).squeeze().to('cuda')\n", 307 | " recon = vocoder.inference(c)\n", 308 | " recon = recon.view(-1).cpu().numpy()\n", 309 | "\n", 310 | " converted_samples[key] = y_out.numpy()\n", 311 | " reconstructed_samples[key] = recon\n", 312 | "\n", 313 | " converted_mels[key] = out\n", 314 | " \n", 315 | " keys.append(key)\n", 316 | "end = time.time()\n", 317 | "print('total processing time: %.3f sec' % (end - start) )\n", 318 | "\n", 319 | "import IPython.display as ipd\n", 320 | "for key, wave in converted_samples.items():\n", 321 | " print('Converted: %s' % key)\n", 322 | " display(ipd.Audio(wave, rate=24000))\n", 323 | " print('Reference (vocoder): %s' % key)\n", 324 | " if reconstructed_samples[key] is not None:\n", 325 | " display(ipd.Audio(reconstructed_samples[key], rate=24000))\n", 326 | "\n", 327 | "print('Original (vocoder):')\n", 328 | "wave, sr = librosa.load(wav_path, sr=24000)\n", 329 | "mel = preprocess(wave)\n", 330 | "c = mel.transpose(-1, -2).squeeze().to('cuda')\n", 331 | "with torch.no_grad():\n", 332 | " recon = vocoder.inference(c)\n", 333 | " recon = recon.view(-1).cpu().numpy()\n", 334 | "display(ipd.Audio(recon, rate=24000))\n", 335 | "print('Original:')\n", 336 | "display(ipd.Audio(wav_path, rate=24000))" 337 | ] 338 | }, 339 | { 340 | "cell_type": "markdown", 341 | "metadata": { 342 | "id": "SWh3o9hvGvJt" 343 | }, 344 | "source": [ 345 | "#### Convert by mapping network" 346 | ] 347 | }, 348 | { 349 | "cell_type": "code", 350 | "execution_count": null, 351 | "metadata": {}, 352 | "outputs": [], 353 | "source": [ 354 | "# no reference, using mapping network\n", 355 | "speaker_dicts = {}\n", 356 | "selected_speakers = [273, 259, 258, 243, 254, 244, 236, 233, 230, 228]\n", 357 | "for s in selected_speakers:\n", 358 | " k = s\n", 359 | " speaker_dicts['p' + str(s)] = ('', speakers.index(s))\n", 360 | "\n", 361 | "reference_embeddings = compute_style(speaker_dicts)" 362 | ] 363 | }, 364 | { 365 | "cell_type": "code", 366 | "execution_count": null, 367 | "metadata": { 368 | "scrolled": true 369 | }, 370 | "outputs": [], 371 | "source": [ 372 | "# conversion \n", 373 | "import time\n", 374 | "start = time.time()\n", 375 | " \n", 376 | "source = preprocess(audio).to('cuda:0')\n", 377 | "keys = []\n", 378 | "converted_samples = {}\n", 379 | "reconstructed_samples = {}\n", 380 | "converted_mels = {}\n", 381 | "\n", 382 | "for key, (ref, _) in reference_embeddings.items():\n", 383 | " with torch.no_grad():\n", 384 | " f0_feat = F0_model.get_feature_GAN(source.unsqueeze(1))\n", 385 | " out = starganv2.generator(source.unsqueeze(1), ref, F0=f0_feat)\n", 386 | " \n", 387 | " c = out.transpose(-1, -2).squeeze().to('cuda')\n", 388 | " y_out = vocoder.inference(c)\n", 389 | " y_out = y_out.view(-1).cpu()\n", 390 | "\n", 391 | " if key not in speaker_dicts or speaker_dicts[key][0] == \"\":\n", 392 | " recon = None\n", 393 | " else:\n", 394 | " wave, sr = librosa.load(speaker_dicts[key][0], sr=24000)\n", 395 | " mel = preprocess(wave)\n", 396 | " c = mel.transpose(-1, -2).squeeze().to('cuda')\n", 397 | " recon = vocoder.inference(c)\n", 398 | " recon = recon.view(-1).cpu().numpy()\n", 399 | "\n", 400 | " converted_samples[key] = y_out.numpy()\n", 401 | " reconstructed_samples[key] = recon\n", 402 | "\n", 403 | " converted_mels[key] = out\n", 404 | " \n", 405 | " keys.append(key)\n", 406 | "end = time.time()\n", 407 | "print('total processing time: %.3f sec' % (end - start) )\n", 408 | "\n", 409 | "import IPython.display as ipd\n", 410 | "for key, wave in converted_samples.items():\n", 411 | " print('Converted: %s' % key)\n", 412 | " display(ipd.Audio(wave, rate=24000))\n", 413 | " print('Reference (vocoder): %s' % key)\n", 414 | " if reconstructed_samples[key] is not None:\n", 415 | " display(ipd.Audio(reconstructed_samples[key], rate=24000))\n", 416 | "\n", 417 | "print('Original (vocoder):')\n", 418 | "wave, sr = librosa.load(wav_path, sr=24000)\n", 419 | "mel = preprocess(wave)\n", 420 | "c = mel.transpose(-1, -2).squeeze().to('cuda')\n", 421 | "with torch.no_grad():\n", 422 | " recon = vocoder.inference(c)\n", 423 | " recon = recon.view(-1).cpu().numpy()\n", 424 | "display(ipd.Audio(recon, rate=24000))\n", 425 | "print('Original:')\n", 426 | "display(ipd.Audio(wav_path, rate=24000))" 427 | ] 428 | } 429 | ], 430 | "metadata": { 431 | "accelerator": "GPU", 432 | "colab": { 433 | "collapsed_sections": [ 434 | "hCpoXuZeGKAn" 435 | ], 436 | "name": "Starganv2_vc.ipynb", 437 | "provenance": [], 438 | "toc_visible": true 439 | }, 440 | "kernelspec": { 441 | "display_name": "Python 3", 442 | "language": "python", 443 | "name": "python3" 444 | }, 445 | "language_info": { 446 | "codemirror_mode": { 447 | "name": "ipython", 448 | "version": 3 449 | }, 450 | "file_extension": ".py", 451 | "mimetype": "text/x-python", 452 | "name": "python", 453 | "nbconvert_exporter": "python", 454 | "pygments_lexer": "ipython3", 455 | "version": "3.7.10" 456 | } 457 | }, 458 | "nbformat": 4, 459 | "nbformat_minor": 1 460 | } 461 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Aaron (Yinghao) Li 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # StarGANv2-VC: A Diverse, Unsupervised, Non-parallel Framework for Natural-Sounding Voice Conversion 2 | 3 | ## For Hifi-GAN and BIGVGAN support, please check out [this branch](https://github.com/yl4579/StarGANv2-VC/tree/BIGVGAN). 4 | 5 | ### Yinghao Aaron Li, Ali Zare, Nima Mesgarani 6 | 7 | > We present an unsupervised non-parallel many-to-many voice conversion (VC) method using a generative adversarial network (GAN) called StarGAN v2. Using a combination of adversarial source classifier loss and perceptual loss, our model significantly outperforms previous VC models. Although our model is trained only with 20 English speakers, it generalizes to a variety of voice conversion tasks, such as any-to-many, cross-lingual, and singing conversion. Using a style encoder, our framework can also convert plain reading speech into stylistic speech, such as emotional and falsetto speech. Subjective and objective evaluation experiments on a non-parallel many-to-many voice conversion task revealed that our model produces natural sounding voices, close to the sound quality of state-of-the-art text-tospeech (TTS) based voice conversion methods without the need for text labels. Moreover, our model is completely convolutional and with a faster-than-real-time vocoder such as Parallel WaveGAN can perform real-time voice conversion. 8 | 9 | Paper: https://arxiv.org/abs/2107.10394 10 | 11 | Audio samples: https://starganv2-vc.github.io/ 12 | 13 | ***Our work has been awarded [INTERSPEECH 2021 Best Paper Award](https://www.interspeech2021.org/best-student-paper-awards)** 14 | 15 | ## Pre-requisites 16 | 1. Python >= 3.7 17 | 2. Clone this repository: 18 | ```bash 19 | git clone https://github.com/yl4579/StarGANv2-VC.git 20 | cd StarGANv2-VC 21 | ``` 22 | 3. Install python requirements: 23 | ```bash 24 | pip install SoundFile torchaudio munch parallel_wavegan torch pydub pyyaml click librosa 25 | ``` 26 | 4. Download and extract the [VCTK dataset](https://datashare.ed.ac.uk/handle/10283/3443) 27 | and use [VCTK.ipynb](https://github.com/yl4579/StarGANv2-VC/blob/main/Data/VCTK.ipynb) to prepare the data (downsample to 24 kHz etc.). You can also [download the dataset](https://drive.google.com/file/d/1t7QQbu4YC_P1mv9puA_KgSomSFDsSzD6/view?usp=sharing) we have prepared and unzip it to the `Data` folder, use the provided `config.yml` to reproduce our models. 28 | 29 | ## Training 30 | ```bash 31 | python train.py --config_path ./Configs/config.yml 32 | ``` 33 | Please specify the training and validation data in `config.yml` file. Change `num_domains` to the number of speakers in the dataset. The data list format needs to be `filename.wav|speaker_number`, see [train_list.txt](https://github.com/yl4579/StarGANv2-VC/blob/main/Data/train_list.txt) as an example. 34 | 35 | Checkpoints and Tensorboard logs will be saved at `log_dir`. To speed up training, you may want to make `batch_size` as large as your GPU RAM can take. However, please note that `batch_size = 5` will take around 10G GPU RAM. 36 | 37 | ## Inference 38 | 39 | Please refer to [inference.ipynb](https://github.com/yl4579/StarGANv2-VC/blob/main/Demo/inference.ipynb) for details. 40 | 41 | The pretrained StarGANv2 and ParallelWaveGAN on VCTK corpus can be downloaded at [StarGANv2 Link](https://huggingface.co/yl4579/StarGANv2-VC/blob/main/Models.zip) and [ParallelWaveGAN Link](https://huggingface.co/yl4579/StarGANv2-VC/blob/main/Vocoder.zip). Please unzip to `Models` and `Vocoder` respectivey and run each cell in the notebook. 42 | 43 | ## ASR & F0 Models 44 | 45 | The pretrained F0 and ASR models are provided under the `Utils` folder. Both the F0 and ASR models are trained with melspectrograms preprocessed using [meldataset.py](https://github.com/yl4579/StarGANv2-VC/blob/main/meldataset.py), and both models are trained on speech data only. 46 | 47 | The ASR model is trained on English corpus, but it appears to work when training StarGANv2 models in other languages such as Japanese. The F0 model also appears to work with singing data. For the best performance, however, training your own ASR and F0 models is encouraged for non-English and non-speech data. 48 | 49 | You can edit the [meldataset.py](https://github.com/yl4579/StarGANv2-VC/blob/main/meldataset.py) with your own melspectrogram preprocessing, but the provided pretrained models will no longer work. You will need to train your own ASR and F0 models with the new preprocessing. 50 | 51 | The code for training new ASR models is available [here](https://github.com/yl4579/AuxiliaryASR) and that for training new F0 models is available [here](https://github.com/yl4579/PitchExtractor). 52 | 53 | ## References 54 | - [clovaai/stargan-v2](https://github.com/clovaai/stargan-v2) 55 | - [kan-bayashi/ParallelWaveGAN](https://github.com/kan-bayashi/ParallelWaveGAN) 56 | - [tosaka-m/japanese_realtime_tts](https://github.com/tosaka-m/japanese_realtime_tts) 57 | - [keums/melodyExtraction_JDC](https://github.com/keums/melodyExtraction_JDC) 58 | 59 | ## Acknowledgement 60 | The author would like to thank [@tosaka-m](https://github.com/tosaka-m) for his great repository and valuable discussions. 61 | -------------------------------------------------------------------------------- /Utils/ASR/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /Utils/ASR/config.yml: -------------------------------------------------------------------------------- 1 | log_dir: "logs" 2 | save_freq: 20 3 | device: "cuda" 4 | epochs: 180 5 | batch_size: 48 6 | pretrained_model: "" 7 | train_data: "asr_train_list.txt" 8 | val_data: "asr_val_list.txt" 9 | 10 | dataset_params: 11 | data_augmentation: true 12 | 13 | preprocess_parasm: 14 | sr: 24000 15 | spect_params: 16 | n_fft: 2048 17 | win_length: 1200 18 | hop_length: 300 19 | mel_params: 20 | n_mels: 80 21 | 22 | model_params: 23 | input_dim: 80 24 | hidden_dim: 256 25 | n_token: 80 26 | token_embedding_dim: 256 27 | 28 | optimizer_params: 29 | lr: 0.0005 -------------------------------------------------------------------------------- /Utils/ASR/epoch_00100.pth: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yl4579/StarGANv2-VC/ebe97a0c41ea295dcea8f5e3e2b7e934edd01608/Utils/ASR/epoch_00100.pth -------------------------------------------------------------------------------- /Utils/ASR/layers.py: -------------------------------------------------------------------------------- 1 | import math 2 | import torch 3 | from torch import nn 4 | from typing import Optional, Any 5 | from torch import Tensor 6 | import torch.nn.functional as F 7 | import torchaudio 8 | import torchaudio.functional as audio_F 9 | 10 | import random 11 | random.seed(0) 12 | 13 | 14 | def _get_activation_fn(activ): 15 | if activ == 'relu': 16 | return nn.ReLU() 17 | elif activ == 'lrelu': 18 | return nn.LeakyReLU(0.2) 19 | elif activ == 'swish': 20 | return lambda x: x*torch.sigmoid(x) 21 | else: 22 | raise RuntimeError('Unexpected activ type %s, expected [relu, lrelu, swish]' % activ) 23 | 24 | class LinearNorm(torch.nn.Module): 25 | def __init__(self, in_dim, out_dim, bias=True, w_init_gain='linear'): 26 | super(LinearNorm, self).__init__() 27 | self.linear_layer = torch.nn.Linear(in_dim, out_dim, bias=bias) 28 | 29 | torch.nn.init.xavier_uniform_( 30 | self.linear_layer.weight, 31 | gain=torch.nn.init.calculate_gain(w_init_gain)) 32 | 33 | def forward(self, x): 34 | return self.linear_layer(x) 35 | 36 | 37 | class ConvNorm(torch.nn.Module): 38 | def __init__(self, in_channels, out_channels, kernel_size=1, stride=1, 39 | padding=None, dilation=1, bias=True, w_init_gain='linear', param=None): 40 | super(ConvNorm, self).__init__() 41 | if padding is None: 42 | assert(kernel_size % 2 == 1) 43 | padding = int(dilation * (kernel_size - 1) / 2) 44 | 45 | self.conv = torch.nn.Conv1d(in_channels, out_channels, 46 | kernel_size=kernel_size, stride=stride, 47 | padding=padding, dilation=dilation, 48 | bias=bias) 49 | 50 | torch.nn.init.xavier_uniform_( 51 | self.conv.weight, gain=torch.nn.init.calculate_gain(w_init_gain, param=param)) 52 | 53 | def forward(self, signal): 54 | conv_signal = self.conv(signal) 55 | return conv_signal 56 | 57 | class CausualConv(nn.Module): 58 | def __init__(self, in_channels, out_channels, kernel_size=1, stride=1, padding=1, dilation=1, bias=True, w_init_gain='linear', param=None): 59 | super(CausualConv, self).__init__() 60 | if padding is None: 61 | assert(kernel_size % 2 == 1) 62 | padding = int(dilation * (kernel_size - 1) / 2) * 2 63 | else: 64 | self.padding = padding * 2 65 | self.conv = nn.Conv1d(in_channels, out_channels, 66 | kernel_size=kernel_size, stride=stride, 67 | padding=self.padding, 68 | dilation=dilation, 69 | bias=bias) 70 | 71 | torch.nn.init.xavier_uniform_( 72 | self.conv.weight, gain=torch.nn.init.calculate_gain(w_init_gain, param=param)) 73 | 74 | def forward(self, x): 75 | x = self.conv(x) 76 | x = x[:, :, :-self.padding] 77 | return x 78 | 79 | class CausualBlock(nn.Module): 80 | def __init__(self, hidden_dim, n_conv=3, dropout_p=0.2, activ='lrelu'): 81 | super(CausualBlock, self).__init__() 82 | self.blocks = nn.ModuleList([ 83 | self._get_conv(hidden_dim, dilation=3**i, activ=activ, dropout_p=dropout_p) 84 | for i in range(n_conv)]) 85 | 86 | def forward(self, x): 87 | for block in self.blocks: 88 | res = x 89 | x = block(x) 90 | x += res 91 | return x 92 | 93 | def _get_conv(self, hidden_dim, dilation, activ='lrelu', dropout_p=0.2): 94 | layers = [ 95 | CausualConv(hidden_dim, hidden_dim, kernel_size=3, padding=dilation, dilation=dilation), 96 | _get_activation_fn(activ), 97 | nn.BatchNorm1d(hidden_dim), 98 | nn.Dropout(p=dropout_p), 99 | CausualConv(hidden_dim, hidden_dim, kernel_size=3, padding=1, dilation=1), 100 | _get_activation_fn(activ), 101 | nn.Dropout(p=dropout_p) 102 | ] 103 | return nn.Sequential(*layers) 104 | 105 | class ConvBlock(nn.Module): 106 | def __init__(self, hidden_dim, n_conv=3, dropout_p=0.2, activ='relu'): 107 | super().__init__() 108 | self._n_groups = 8 109 | self.blocks = nn.ModuleList([ 110 | self._get_conv(hidden_dim, dilation=3**i, activ=activ, dropout_p=dropout_p) 111 | for i in range(n_conv)]) 112 | 113 | 114 | def forward(self, x): 115 | for block in self.blocks: 116 | res = x 117 | x = block(x) 118 | x += res 119 | return x 120 | 121 | def _get_conv(self, hidden_dim, dilation, activ='relu', dropout_p=0.2): 122 | layers = [ 123 | ConvNorm(hidden_dim, hidden_dim, kernel_size=3, padding=dilation, dilation=dilation), 124 | _get_activation_fn(activ), 125 | nn.GroupNorm(num_groups=self._n_groups, num_channels=hidden_dim), 126 | nn.Dropout(p=dropout_p), 127 | ConvNorm(hidden_dim, hidden_dim, kernel_size=3, padding=1, dilation=1), 128 | _get_activation_fn(activ), 129 | nn.Dropout(p=dropout_p) 130 | ] 131 | return nn.Sequential(*layers) 132 | 133 | class LocationLayer(nn.Module): 134 | def __init__(self, attention_n_filters, attention_kernel_size, 135 | attention_dim): 136 | super(LocationLayer, self).__init__() 137 | padding = int((attention_kernel_size - 1) / 2) 138 | self.location_conv = ConvNorm(2, attention_n_filters, 139 | kernel_size=attention_kernel_size, 140 | padding=padding, bias=False, stride=1, 141 | dilation=1) 142 | self.location_dense = LinearNorm(attention_n_filters, attention_dim, 143 | bias=False, w_init_gain='tanh') 144 | 145 | def forward(self, attention_weights_cat): 146 | processed_attention = self.location_conv(attention_weights_cat) 147 | processed_attention = processed_attention.transpose(1, 2) 148 | processed_attention = self.location_dense(processed_attention) 149 | return processed_attention 150 | 151 | 152 | class Attention(nn.Module): 153 | def __init__(self, attention_rnn_dim, embedding_dim, attention_dim, 154 | attention_location_n_filters, attention_location_kernel_size): 155 | super(Attention, self).__init__() 156 | self.query_layer = LinearNorm(attention_rnn_dim, attention_dim, 157 | bias=False, w_init_gain='tanh') 158 | self.memory_layer = LinearNorm(embedding_dim, attention_dim, bias=False, 159 | w_init_gain='tanh') 160 | self.v = LinearNorm(attention_dim, 1, bias=False) 161 | self.location_layer = LocationLayer(attention_location_n_filters, 162 | attention_location_kernel_size, 163 | attention_dim) 164 | self.score_mask_value = -float("inf") 165 | 166 | def get_alignment_energies(self, query, processed_memory, 167 | attention_weights_cat): 168 | """ 169 | PARAMS 170 | ------ 171 | query: decoder output (batch, n_mel_channels * n_frames_per_step) 172 | processed_memory: processed encoder outputs (B, T_in, attention_dim) 173 | attention_weights_cat: cumulative and prev. att weights (B, 2, max_time) 174 | RETURNS 175 | ------- 176 | alignment (batch, max_time) 177 | """ 178 | 179 | processed_query = self.query_layer(query.unsqueeze(1)) 180 | processed_attention_weights = self.location_layer(attention_weights_cat) 181 | energies = self.v(torch.tanh( 182 | processed_query + processed_attention_weights + processed_memory)) 183 | 184 | energies = energies.squeeze(-1) 185 | return energies 186 | 187 | def forward(self, attention_hidden_state, memory, processed_memory, 188 | attention_weights_cat, mask): 189 | """ 190 | PARAMS 191 | ------ 192 | attention_hidden_state: attention rnn last output 193 | memory: encoder outputs 194 | processed_memory: processed encoder outputs 195 | attention_weights_cat: previous and cummulative attention weights 196 | mask: binary mask for padded data 197 | """ 198 | alignment = self.get_alignment_energies( 199 | attention_hidden_state, processed_memory, attention_weights_cat) 200 | 201 | if mask is not None: 202 | alignment.data.masked_fill_(mask, self.score_mask_value) 203 | 204 | attention_weights = F.softmax(alignment, dim=1) 205 | attention_context = torch.bmm(attention_weights.unsqueeze(1), memory) 206 | attention_context = attention_context.squeeze(1) 207 | 208 | return attention_context, attention_weights 209 | 210 | 211 | class ForwardAttentionV2(nn.Module): 212 | def __init__(self, attention_rnn_dim, embedding_dim, attention_dim, 213 | attention_location_n_filters, attention_location_kernel_size): 214 | super(ForwardAttentionV2, self).__init__() 215 | self.query_layer = LinearNorm(attention_rnn_dim, attention_dim, 216 | bias=False, w_init_gain='tanh') 217 | self.memory_layer = LinearNorm(embedding_dim, attention_dim, bias=False, 218 | w_init_gain='tanh') 219 | self.v = LinearNorm(attention_dim, 1, bias=False) 220 | self.location_layer = LocationLayer(attention_location_n_filters, 221 | attention_location_kernel_size, 222 | attention_dim) 223 | self.score_mask_value = -float(1e20) 224 | 225 | def get_alignment_energies(self, query, processed_memory, 226 | attention_weights_cat): 227 | """ 228 | PARAMS 229 | ------ 230 | query: decoder output (batch, n_mel_channels * n_frames_per_step) 231 | processed_memory: processed encoder outputs (B, T_in, attention_dim) 232 | attention_weights_cat: prev. and cumulative att weights (B, 2, max_time) 233 | RETURNS 234 | ------- 235 | alignment (batch, max_time) 236 | """ 237 | 238 | processed_query = self.query_layer(query.unsqueeze(1)) 239 | processed_attention_weights = self.location_layer(attention_weights_cat) 240 | energies = self.v(torch.tanh( 241 | processed_query + processed_attention_weights + processed_memory)) 242 | 243 | energies = energies.squeeze(-1) 244 | return energies 245 | 246 | def forward(self, attention_hidden_state, memory, processed_memory, 247 | attention_weights_cat, mask, log_alpha): 248 | """ 249 | PARAMS 250 | ------ 251 | attention_hidden_state: attention rnn last output 252 | memory: encoder outputs 253 | processed_memory: processed encoder outputs 254 | attention_weights_cat: previous and cummulative attention weights 255 | mask: binary mask for padded data 256 | """ 257 | log_energy = self.get_alignment_energies( 258 | attention_hidden_state, processed_memory, attention_weights_cat) 259 | 260 | #log_energy = 261 | 262 | if mask is not None: 263 | log_energy.data.masked_fill_(mask, self.score_mask_value) 264 | 265 | #attention_weights = F.softmax(alignment, dim=1) 266 | 267 | #content_score = log_energy.unsqueeze(1) #[B, MAX_TIME] -> [B, 1, MAX_TIME] 268 | #log_alpha = log_alpha.unsqueeze(2) #[B, MAX_TIME] -> [B, MAX_TIME, 1] 269 | 270 | #log_total_score = log_alpha + content_score 271 | 272 | #previous_attention_weights = attention_weights_cat[:,0,:] 273 | 274 | log_alpha_shift_padded = [] 275 | max_time = log_energy.size(1) 276 | for sft in range(2): 277 | shifted = log_alpha[:,:max_time-sft] 278 | shift_padded = F.pad(shifted, (sft,0), 'constant', self.score_mask_value) 279 | log_alpha_shift_padded.append(shift_padded.unsqueeze(2)) 280 | 281 | biased = torch.logsumexp(torch.cat(log_alpha_shift_padded,2), 2) 282 | 283 | log_alpha_new = biased + log_energy 284 | 285 | attention_weights = F.softmax(log_alpha_new, dim=1) 286 | 287 | attention_context = torch.bmm(attention_weights.unsqueeze(1), memory) 288 | attention_context = attention_context.squeeze(1) 289 | 290 | return attention_context, attention_weights, log_alpha_new 291 | 292 | 293 | class PhaseShuffle2d(nn.Module): 294 | def __init__(self, n=2): 295 | super(PhaseShuffle2d, self).__init__() 296 | self.n = n 297 | self.random = random.Random(1) 298 | 299 | def forward(self, x, move=None): 300 | # x.size = (B, C, M, L) 301 | if move is None: 302 | move = self.random.randint(-self.n, self.n) 303 | 304 | if move == 0: 305 | return x 306 | else: 307 | left = x[:, :, :, :move] 308 | right = x[:, :, :, move:] 309 | shuffled = torch.cat([right, left], dim=3) 310 | return shuffled 311 | 312 | class PhaseShuffle1d(nn.Module): 313 | def __init__(self, n=2): 314 | super(PhaseShuffle1d, self).__init__() 315 | self.n = n 316 | self.random = random.Random(1) 317 | 318 | def forward(self, x, move=None): 319 | # x.size = (B, C, M, L) 320 | if move is None: 321 | move = self.random.randint(-self.n, self.n) 322 | 323 | if move == 0: 324 | return x 325 | else: 326 | left = x[:, :, :move] 327 | right = x[:, :, move:] 328 | shuffled = torch.cat([right, left], dim=2) 329 | 330 | return shuffled 331 | 332 | class MFCC(nn.Module): 333 | def __init__(self, n_mfcc=40, n_mels=80): 334 | super(MFCC, self).__init__() 335 | self.n_mfcc = n_mfcc 336 | self.n_mels = n_mels 337 | self.norm = 'ortho' 338 | dct_mat = audio_F.create_dct(self.n_mfcc, self.n_mels, self.norm) 339 | self.register_buffer('dct_mat', dct_mat) 340 | 341 | def forward(self, mel_specgram): 342 | if len(mel_specgram.shape) == 2: 343 | mel_specgram = mel_specgram.unsqueeze(0) 344 | unsqueezed = True 345 | else: 346 | unsqueezed = False 347 | # (channel, n_mels, time).tranpose(...) dot (n_mels, n_mfcc) 348 | # -> (channel, time, n_mfcc).tranpose(...) 349 | mfcc = torch.matmul(mel_specgram.transpose(1, 2), self.dct_mat).transpose(1, 2) 350 | 351 | # unpack batch 352 | if unsqueezed: 353 | mfcc = mfcc.squeeze(0) 354 | return mfcc 355 | -------------------------------------------------------------------------------- /Utils/ASR/models.py: -------------------------------------------------------------------------------- 1 | import math 2 | import torch 3 | from torch import nn 4 | from torch.nn import TransformerEncoder 5 | import torch.nn.functional as F 6 | from .layers import MFCC, Attention, LinearNorm, ConvNorm, ConvBlock 7 | 8 | class ASRCNN(nn.Module): 9 | def __init__(self, 10 | input_dim=80, 11 | hidden_dim=256, 12 | n_token=35, 13 | n_layers=6, 14 | token_embedding_dim=256, 15 | 16 | ): 17 | super().__init__() 18 | self.n_token = n_token 19 | self.n_down = 1 20 | self.to_mfcc = MFCC() 21 | self.init_cnn = ConvNorm(input_dim//2, hidden_dim, kernel_size=7, padding=3, stride=2) 22 | self.cnns = nn.Sequential( 23 | *[nn.Sequential( 24 | ConvBlock(hidden_dim), 25 | nn.GroupNorm(num_groups=1, num_channels=hidden_dim) 26 | ) for n in range(n_layers)]) 27 | self.projection = ConvNorm(hidden_dim, hidden_dim // 2) 28 | self.ctc_linear = nn.Sequential( 29 | LinearNorm(hidden_dim//2, hidden_dim), 30 | nn.ReLU(), 31 | LinearNorm(hidden_dim, n_token)) 32 | self.asr_s2s = ASRS2S( 33 | embedding_dim=token_embedding_dim, 34 | hidden_dim=hidden_dim//2, 35 | n_token=n_token) 36 | 37 | def forward(self, x, src_key_padding_mask=None, text_input=None): 38 | x = self.to_mfcc(x) 39 | x = self.init_cnn(x) 40 | x = self.cnns(x) 41 | x = self.projection(x) 42 | x = x.transpose(1, 2) 43 | ctc_logit = self.ctc_linear(x) 44 | if text_input is not None: 45 | _, s2s_logit, s2s_attn = self.asr_s2s(x, src_key_padding_mask, text_input) 46 | return ctc_logit, s2s_logit, s2s_attn 47 | else: 48 | return ctc_logit 49 | 50 | def get_feature(self, x): 51 | x = self.to_mfcc(x.squeeze(1)) 52 | x = self.init_cnn(x) 53 | x = self.cnns(x) 54 | x = self.projection(x) 55 | return x 56 | 57 | def length_to_mask(self, lengths): 58 | mask = torch.arange(lengths.max()).unsqueeze(0).expand(lengths.shape[0], -1).type_as(lengths) 59 | mask = torch.gt(mask+1, lengths.unsqueeze(1)).to(lengths.device) 60 | return mask 61 | 62 | def get_future_mask(self, out_length, unmask_future_steps=0): 63 | """ 64 | Args: 65 | out_length (int): returned mask shape is (out_length, out_length). 66 | unmask_futre_steps (int): unmasking future step size. 67 | Return: 68 | mask (torch.BoolTensor): mask future timesteps mask[i, j] = True if i > j + unmask_future_steps else False 69 | """ 70 | index_tensor = torch.arange(out_length).unsqueeze(0).expand(out_length, -1) 71 | mask = torch.gt(index_tensor, index_tensor.T + unmask_future_steps) 72 | return mask 73 | 74 | class ASRS2S(nn.Module): 75 | def __init__(self, 76 | embedding_dim=256, 77 | hidden_dim=512, 78 | n_location_filters=32, 79 | location_kernel_size=63, 80 | n_token=40): 81 | super(ASRS2S, self).__init__() 82 | self.embedding = nn.Embedding(n_token, embedding_dim) 83 | val_range = math.sqrt(6 / hidden_dim) 84 | self.embedding.weight.data.uniform_(-val_range, val_range) 85 | 86 | self.decoder_rnn_dim = hidden_dim 87 | self.project_to_n_symbols = nn.Linear(self.decoder_rnn_dim, n_token) 88 | self.attention_layer = Attention( 89 | self.decoder_rnn_dim, 90 | hidden_dim, 91 | hidden_dim, 92 | n_location_filters, 93 | location_kernel_size 94 | ) 95 | self.decoder_rnn = nn.LSTMCell(self.decoder_rnn_dim + embedding_dim, self.decoder_rnn_dim) 96 | self.project_to_hidden = nn.Sequential( 97 | LinearNorm(self.decoder_rnn_dim * 2, hidden_dim), 98 | nn.Tanh()) 99 | self.sos = 1 100 | self.eos = 2 101 | 102 | def initialize_decoder_states(self, memory, mask): 103 | """ 104 | moemory.shape = (B, L, H) = (Batchsize, Maxtimestep, Hiddendim) 105 | """ 106 | B, L, H = memory.shape 107 | self.decoder_hidden = torch.zeros((B, self.decoder_rnn_dim)).type_as(memory) 108 | self.decoder_cell = torch.zeros((B, self.decoder_rnn_dim)).type_as(memory) 109 | self.attention_weights = torch.zeros((B, L)).type_as(memory) 110 | self.attention_weights_cum = torch.zeros((B, L)).type_as(memory) 111 | self.attention_context = torch.zeros((B, H)).type_as(memory) 112 | self.memory = memory 113 | self.processed_memory = self.attention_layer.memory_layer(memory) 114 | self.mask = mask 115 | self.unk_index = 3 116 | self.random_mask = 0.1 117 | 118 | def forward(self, memory, memory_mask, text_input): 119 | """ 120 | moemory.shape = (B, L, H) = (Batchsize, Maxtimestep, Hiddendim) 121 | moemory_mask.shape = (B, L, ) 122 | texts_input.shape = (B, T) 123 | """ 124 | self.initialize_decoder_states(memory, memory_mask) 125 | # text random mask 126 | random_mask = (torch.rand(text_input.shape) < self.random_mask).to(text_input.device) 127 | _text_input = text_input.clone() 128 | _text_input.masked_fill_(random_mask, self.unk_index) 129 | decoder_inputs = self.embedding(_text_input).transpose(0, 1) # -> [T, B, channel] 130 | start_embedding = self.embedding( 131 | torch.LongTensor([self.sos]*decoder_inputs.size(1)).to(decoder_inputs.device)) 132 | decoder_inputs = torch.cat((start_embedding.unsqueeze(0), decoder_inputs), dim=0) 133 | 134 | hidden_outputs, logit_outputs, alignments = [], [], [] 135 | while len(hidden_outputs) < decoder_inputs.size(0): 136 | 137 | decoder_input = decoder_inputs[len(hidden_outputs)] 138 | hidden, logit, attention_weights = self.decode(decoder_input) 139 | hidden_outputs += [hidden] 140 | logit_outputs += [logit] 141 | alignments += [attention_weights] 142 | 143 | hidden_outputs, logit_outputs, alignments = \ 144 | self.parse_decoder_outputs( 145 | hidden_outputs, logit_outputs, alignments) 146 | 147 | return hidden_outputs, logit_outputs, alignments 148 | 149 | 150 | def decode(self, decoder_input): 151 | 152 | cell_input = torch.cat((decoder_input, self.attention_context), -1) 153 | self.decoder_hidden, self.decoder_cell = self.decoder_rnn( 154 | cell_input, 155 | (self.decoder_hidden, self.decoder_cell)) 156 | 157 | attention_weights_cat = torch.cat( 158 | (self.attention_weights.unsqueeze(1), 159 | self.attention_weights_cum.unsqueeze(1)),dim=1) 160 | 161 | self.attention_context, self.attention_weights = self.attention_layer( 162 | self.decoder_hidden, 163 | self.memory, 164 | self.processed_memory, 165 | attention_weights_cat, 166 | self.mask) 167 | 168 | self.attention_weights_cum += self.attention_weights 169 | 170 | hidden_and_context = torch.cat((self.decoder_hidden, self.attention_context), -1) 171 | hidden = self.project_to_hidden(hidden_and_context) 172 | 173 | # dropout to increasing g 174 | logit = self.project_to_n_symbols(F.dropout(hidden, 0.5, self.training)) 175 | 176 | return hidden, logit, self.attention_weights 177 | 178 | def parse_decoder_outputs(self, hidden, logit, alignments): 179 | 180 | # -> [B, T_out + 1, max_time] 181 | alignments = torch.stack(alignments).transpose(0,1) 182 | # [T_out + 1, B, n_symbols] -> [B, T_out + 1, n_symbols] 183 | logit = torch.stack(logit).transpose(0, 1).contiguous() 184 | hidden = torch.stack(hidden).transpose(0, 1).contiguous() 185 | 186 | return hidden, logit, alignments 187 | -------------------------------------------------------------------------------- /Utils/JDC/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /Utils/JDC/bst.t7: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yl4579/StarGANv2-VC/ebe97a0c41ea295dcea8f5e3e2b7e934edd01608/Utils/JDC/bst.t7 -------------------------------------------------------------------------------- /Utils/JDC/model.py: -------------------------------------------------------------------------------- 1 | """ 2 | Implementation of model from: 3 | Kum et al. - "Joint Detection and Classification of Singing Voice Melody Using 4 | Convolutional Recurrent Neural Networks" (2019) 5 | Link: https://www.semanticscholar.org/paper/Joint-Detection-and-Classification-of-Singing-Voice-Kum-Nam/60a2ad4c7db43bace75805054603747fcd062c0d 6 | """ 7 | import torch 8 | from torch import nn 9 | 10 | class JDCNet(nn.Module): 11 | """ 12 | Joint Detection and Classification Network model for singing voice melody. 13 | """ 14 | def __init__(self, num_class=722, seq_len=31, leaky_relu_slope=0.01): 15 | super().__init__() 16 | self.seq_len = seq_len # 31 17 | self.num_class = num_class 18 | 19 | # input = (b, 1, 31, 513), b = batch size 20 | self.conv_block = nn.Sequential( 21 | nn.Conv2d(in_channels=1, out_channels=64, kernel_size=3, padding=1, bias=False), # out: (b, 64, 31, 513) 22 | nn.BatchNorm2d(num_features=64), 23 | nn.LeakyReLU(leaky_relu_slope, inplace=True), 24 | nn.Conv2d(64, 64, 3, padding=1, bias=False), # (b, 64, 31, 513) 25 | ) 26 | 27 | # res blocks 28 | self.res_block1 = ResBlock(in_channels=64, out_channels=128) # (b, 128, 31, 128) 29 | self.res_block2 = ResBlock(in_channels=128, out_channels=192) # (b, 192, 31, 32) 30 | self.res_block3 = ResBlock(in_channels=192, out_channels=256) # (b, 256, 31, 8) 31 | 32 | # pool block 33 | self.pool_block = nn.Sequential( 34 | nn.BatchNorm2d(num_features=256), 35 | nn.LeakyReLU(leaky_relu_slope, inplace=True), 36 | nn.MaxPool2d(kernel_size=(1, 4)), # (b, 256, 31, 2) 37 | nn.Dropout(p=0.5), 38 | ) 39 | 40 | # maxpool layers (for auxiliary network inputs) 41 | # in = (b, 128, 31, 513) from conv_block, out = (b, 128, 31, 2) 42 | self.maxpool1 = nn.MaxPool2d(kernel_size=(1, 40)) 43 | # in = (b, 128, 31, 128) from res_block1, out = (b, 128, 31, 2) 44 | self.maxpool2 = nn.MaxPool2d(kernel_size=(1, 20)) 45 | # in = (b, 128, 31, 32) from res_block2, out = (b, 128, 31, 2) 46 | self.maxpool3 = nn.MaxPool2d(kernel_size=(1, 10)) 47 | 48 | # in = (b, 640, 31, 2), out = (b, 256, 31, 2) 49 | self.detector_conv = nn.Sequential( 50 | nn.Conv2d(640, 256, 1, bias=False), 51 | nn.BatchNorm2d(256), 52 | nn.LeakyReLU(leaky_relu_slope, inplace=True), 53 | nn.Dropout(p=0.5), 54 | ) 55 | 56 | # input: (b, 31, 512) - resized from (b, 256, 31, 2) 57 | self.bilstm_classifier = nn.LSTM( 58 | input_size=512, hidden_size=256, 59 | batch_first=True, bidirectional=True) # (b, 31, 512) 60 | 61 | # input: (b, 31, 512) - resized from (b, 256, 31, 2) 62 | self.bilstm_detector = nn.LSTM( 63 | input_size=512, hidden_size=256, 64 | batch_first=True, bidirectional=True) # (b, 31, 512) 65 | 66 | # input: (b * 31, 512) 67 | self.classifier = nn.Linear(in_features=512, out_features=self.num_class) # (b * 31, num_class) 68 | 69 | # input: (b * 31, 512) 70 | self.detector = nn.Linear(in_features=512, out_features=2) # (b * 31, 2) - binary classifier 71 | 72 | # initialize weights 73 | self.apply(self.init_weights) 74 | 75 | def get_feature_GAN(self, x): 76 | seq_len = x.shape[-2] 77 | x = x.float().transpose(-1, -2) 78 | 79 | convblock_out = self.conv_block(x) 80 | 81 | resblock1_out = self.res_block1(convblock_out) 82 | resblock2_out = self.res_block2(resblock1_out) 83 | resblock3_out = self.res_block3(resblock2_out) 84 | poolblock_out = self.pool_block[0](resblock3_out) 85 | poolblock_out = self.pool_block[1](poolblock_out) 86 | 87 | return poolblock_out.transpose(-1, -2) 88 | 89 | def forward(self, x): 90 | """ 91 | Returns: 92 | classification_prediction, detection_prediction 93 | sizes: (b, 31, 722), (b, 31, 2) 94 | """ 95 | ############################### 96 | # forward pass for classifier # 97 | ############################### 98 | x = x.float().transpose(-1, -2) 99 | 100 | convblock_out = self.conv_block(x) 101 | 102 | resblock1_out = self.res_block1(convblock_out) 103 | resblock2_out = self.res_block2(resblock1_out) 104 | resblock3_out = self.res_block3(resblock2_out) 105 | 106 | 107 | poolblock_out = self.pool_block[0](resblock3_out) 108 | poolblock_out = self.pool_block[1](poolblock_out) 109 | GAN_feature = poolblock_out.transpose(-1, -2) 110 | poolblock_out = self.pool_block[2](poolblock_out) 111 | 112 | # (b, 256, 31, 2) => (b, 31, 256, 2) => (b, 31, 512) 113 | classifier_out = poolblock_out.permute(0, 2, 1, 3).contiguous().view((-1, self.seq_len, 512)) 114 | classifier_out, _ = self.bilstm_classifier(classifier_out) # ignore the hidden states 115 | 116 | classifier_out = classifier_out.contiguous().view((-1, 512)) # (b * 31, 512) 117 | classifier_out = self.classifier(classifier_out) 118 | classifier_out = classifier_out.view((-1, self.seq_len, self.num_class)) # (b, 31, num_class) 119 | 120 | # sizes: (b, 31, 722), (b, 31, 2) 121 | # classifier output consists of predicted pitch classes per frame 122 | # detector output consists of: (isvoice, notvoice) estimates per frame 123 | return torch.abs(classifier_out.squeeze()), GAN_feature, poolblock_out 124 | 125 | @staticmethod 126 | def init_weights(m): 127 | if isinstance(m, nn.Linear): 128 | nn.init.kaiming_uniform_(m.weight) 129 | if m.bias is not None: 130 | nn.init.constant_(m.bias, 0) 131 | elif isinstance(m, nn.Conv2d): 132 | nn.init.xavier_normal_(m.weight) 133 | elif isinstance(m, nn.LSTM) or isinstance(m, nn.LSTMCell): 134 | for p in m.parameters(): 135 | if p.data is None: 136 | continue 137 | 138 | if len(p.shape) >= 2: 139 | nn.init.orthogonal_(p.data) 140 | else: 141 | nn.init.normal_(p.data) 142 | 143 | 144 | class ResBlock(nn.Module): 145 | def __init__(self, in_channels: int, out_channels: int, leaky_relu_slope=0.01): 146 | super().__init__() 147 | self.downsample = in_channels != out_channels 148 | 149 | # BN / LReLU / MaxPool layer before the conv layer - see Figure 1b in the paper 150 | self.pre_conv = nn.Sequential( 151 | nn.BatchNorm2d(num_features=in_channels), 152 | nn.LeakyReLU(leaky_relu_slope, inplace=True), 153 | nn.MaxPool2d(kernel_size=(1, 2)), # apply downsampling on the y axis only 154 | ) 155 | 156 | # conv layers 157 | self.conv = nn.Sequential( 158 | nn.Conv2d(in_channels=in_channels, out_channels=out_channels, 159 | kernel_size=3, padding=1, bias=False), 160 | nn.BatchNorm2d(out_channels), 161 | nn.LeakyReLU(leaky_relu_slope, inplace=True), 162 | nn.Conv2d(out_channels, out_channels, 3, padding=1, bias=False), 163 | ) 164 | 165 | # 1 x 1 convolution layer to match the feature dimensions 166 | self.conv1by1 = None 167 | if self.downsample: 168 | self.conv1by1 = nn.Conv2d(in_channels, out_channels, 1, bias=False) 169 | 170 | def forward(self, x): 171 | x = self.pre_conv(x) 172 | if self.downsample: 173 | x = self.conv(x) + self.conv1by1(x) 174 | else: 175 | x = self.conv(x) + x 176 | return x -------------------------------------------------------------------------------- /Utils/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /losses.py: -------------------------------------------------------------------------------- 1 | #coding:utf-8 2 | 3 | import os 4 | import torch 5 | 6 | from torch import nn 7 | from munch import Munch 8 | from transforms import build_transforms 9 | 10 | import torch.nn.functional as F 11 | import numpy as np 12 | 13 | def compute_d_loss(nets, args, x_real, y_org, y_trg, z_trg=None, x_ref=None, use_r1_reg=True, use_adv_cls=False, use_con_reg=False): 14 | args = Munch(args) 15 | 16 | assert (z_trg is None) != (x_ref is None) 17 | # with real audios 18 | x_real.requires_grad_() 19 | out = nets.discriminator(x_real, y_org) 20 | loss_real = adv_loss(out, 1) 21 | 22 | # R1 regularizaition (https://arxiv.org/abs/1801.04406v4) 23 | if use_r1_reg: 24 | loss_reg = r1_reg(out, x_real) 25 | else: 26 | loss_reg = torch.FloatTensor([0]).to(x_real.device) 27 | 28 | # consistency regularization (bCR-GAN: https://arxiv.org/abs/2002.04724) 29 | loss_con_reg = torch.FloatTensor([0]).to(x_real.device) 30 | if use_con_reg: 31 | t = build_transforms() 32 | out_aug = nets.discriminator(t(x_real).detach(), y_org) 33 | loss_con_reg += F.smooth_l1_loss(out, out_aug) 34 | 35 | # with fake audios 36 | with torch.no_grad(): 37 | if z_trg is not None: 38 | s_trg = nets.mapping_network(z_trg, y_trg) 39 | else: # x_ref is not None 40 | s_trg = nets.style_encoder(x_ref, y_trg) 41 | 42 | F0 = nets.f0_model.get_feature_GAN(x_real) 43 | x_fake = nets.generator(x_real, s_trg, masks=None, F0=F0) 44 | out = nets.discriminator(x_fake, y_trg) 45 | loss_fake = adv_loss(out, 0) 46 | if use_con_reg: 47 | out_aug = nets.discriminator(t(x_fake).detach(), y_trg) 48 | loss_con_reg += F.smooth_l1_loss(out, out_aug) 49 | 50 | # adversarial classifier loss 51 | if use_adv_cls: 52 | out_de = nets.discriminator.classifier(x_fake) 53 | loss_real_adv_cls = F.cross_entropy(out_de[y_org != y_trg], y_org[y_org != y_trg]) 54 | 55 | if use_con_reg: 56 | out_de_aug = nets.discriminator.classifier(t(x_fake).detach()) 57 | loss_con_reg += F.smooth_l1_loss(out_de, out_de_aug) 58 | else: 59 | loss_real_adv_cls = torch.zeros(1).mean() 60 | 61 | loss = loss_real + loss_fake + args.lambda_reg * loss_reg + \ 62 | args.lambda_adv_cls * loss_real_adv_cls + \ 63 | args.lambda_con_reg * loss_con_reg 64 | 65 | return loss, Munch(real=loss_real.item(), 66 | fake=loss_fake.item(), 67 | reg=loss_reg.item(), 68 | real_adv_cls=loss_real_adv_cls.item(), 69 | con_reg=loss_con_reg.item()) 70 | 71 | def compute_g_loss(nets, args, x_real, y_org, y_trg, z_trgs=None, x_refs=None, use_adv_cls=False): 72 | args = Munch(args) 73 | 74 | assert (z_trgs is None) != (x_refs is None) 75 | if z_trgs is not None: 76 | z_trg, z_trg2 = z_trgs 77 | if x_refs is not None: 78 | x_ref, x_ref2 = x_refs 79 | 80 | # compute style vectors 81 | if z_trgs is not None: 82 | s_trg = nets.mapping_network(z_trg, y_trg) 83 | else: 84 | s_trg = nets.style_encoder(x_ref, y_trg) 85 | 86 | # compute ASR/F0 features (real) 87 | with torch.no_grad(): 88 | F0_real, GAN_F0_real, cyc_F0_real = nets.f0_model(x_real) 89 | ASR_real = nets.asr_model.get_feature(x_real) 90 | 91 | # adversarial loss 92 | x_fake = nets.generator(x_real, s_trg, masks=None, F0=GAN_F0_real) 93 | out = nets.discriminator(x_fake, y_trg) 94 | loss_adv = adv_loss(out, 1) 95 | 96 | # compute ASR/F0 features (fake) 97 | F0_fake, GAN_F0_fake, _ = nets.f0_model(x_fake) 98 | ASR_fake = nets.asr_model.get_feature(x_fake) 99 | 100 | # norm consistency loss 101 | x_fake_norm = log_norm(x_fake) 102 | x_real_norm = log_norm(x_real) 103 | loss_norm = ((torch.nn.ReLU()(torch.abs(x_fake_norm - x_real_norm) - args.norm_bias))**2).mean() 104 | 105 | # F0 loss 106 | loss_f0 = f0_loss(F0_fake, F0_real) 107 | 108 | # style F0 loss (style initialization) 109 | if x_refs is not None and args.lambda_f0_sty > 0 and not use_adv_cls: 110 | F0_sty, _, _ = nets.f0_model(x_ref) 111 | loss_f0_sty = F.l1_loss(compute_mean_f0(F0_fake), compute_mean_f0(F0_sty)) 112 | else: 113 | loss_f0_sty = torch.zeros(1).mean() 114 | 115 | # ASR loss 116 | loss_asr = F.smooth_l1_loss(ASR_fake, ASR_real) 117 | 118 | # style reconstruction loss 119 | s_pred = nets.style_encoder(x_fake, y_trg) 120 | loss_sty = torch.mean(torch.abs(s_pred - s_trg)) 121 | 122 | # diversity sensitive loss 123 | if z_trgs is not None: 124 | s_trg2 = nets.mapping_network(z_trg2, y_trg) 125 | else: 126 | s_trg2 = nets.style_encoder(x_ref2, y_trg) 127 | x_fake2 = nets.generator(x_real, s_trg2, masks=None, F0=GAN_F0_real) 128 | x_fake2 = x_fake2.detach() 129 | _, GAN_F0_fake2, _ = nets.f0_model(x_fake2) 130 | loss_ds = torch.mean(torch.abs(x_fake - x_fake2)) 131 | loss_ds += F.smooth_l1_loss(GAN_F0_fake, GAN_F0_fake2.detach()) 132 | 133 | # cycle-consistency loss 134 | s_org = nets.style_encoder(x_real, y_org) 135 | x_rec = nets.generator(x_fake, s_org, masks=None, F0=GAN_F0_fake) 136 | loss_cyc = torch.mean(torch.abs(x_rec - x_real)) 137 | # F0 loss in cycle-consistency loss 138 | if args.lambda_f0 > 0: 139 | _, _, cyc_F0_rec = nets.f0_model(x_rec) 140 | loss_cyc += F.smooth_l1_loss(cyc_F0_rec, cyc_F0_real) 141 | if args.lambda_asr > 0: 142 | ASR_recon = nets.asr_model.get_feature(x_rec) 143 | loss_cyc += F.smooth_l1_loss(ASR_recon, ASR_real) 144 | 145 | # adversarial classifier loss 146 | if use_adv_cls: 147 | out_de = nets.discriminator.classifier(x_fake) 148 | loss_adv_cls = F.cross_entropy(out_de[y_org != y_trg], y_trg[y_org != y_trg]) 149 | else: 150 | loss_adv_cls = torch.zeros(1).mean() 151 | 152 | loss = args.lambda_adv * loss_adv + args.lambda_sty * loss_sty \ 153 | - args.lambda_ds * loss_ds + args.lambda_cyc * loss_cyc\ 154 | + args.lambda_norm * loss_norm \ 155 | + args.lambda_asr * loss_asr \ 156 | + args.lambda_f0 * loss_f0 \ 157 | + args.lambda_f0_sty * loss_f0_sty \ 158 | + args.lambda_adv_cls * loss_adv_cls 159 | 160 | return loss, Munch(adv=loss_adv.item(), 161 | sty=loss_sty.item(), 162 | ds=loss_ds.item(), 163 | cyc=loss_cyc.item(), 164 | norm=loss_norm.item(), 165 | asr=loss_asr.item(), 166 | f0=loss_f0.item(), 167 | adv_cls=loss_adv_cls.item()) 168 | 169 | # for norm consistency loss 170 | def log_norm(x, mean=-4, std=4, dim=2): 171 | """ 172 | normalized log mel -> mel -> norm -> log(norm) 173 | """ 174 | x = torch.log(torch.exp(x * std + mean).norm(dim=dim)) 175 | return x 176 | 177 | # for adversarial loss 178 | def adv_loss(logits, target): 179 | assert target in [1, 0] 180 | if len(logits.shape) > 1: 181 | logits = logits.reshape(-1) 182 | targets = torch.full_like(logits, fill_value=target) 183 | logits = logits.clamp(min=-10, max=10) # prevent nan 184 | loss = F.binary_cross_entropy_with_logits(logits, targets) 185 | return loss 186 | 187 | # for R1 regularization loss 188 | def r1_reg(d_out, x_in): 189 | # zero-centered gradient penalty for real images 190 | batch_size = x_in.size(0) 191 | grad_dout = torch.autograd.grad( 192 | outputs=d_out.sum(), inputs=x_in, 193 | create_graph=True, retain_graph=True, only_inputs=True 194 | )[0] 195 | grad_dout2 = grad_dout.pow(2) 196 | assert(grad_dout2.size() == x_in.size()) 197 | reg = 0.5 * grad_dout2.view(batch_size, -1).sum(1).mean(0) 198 | return reg 199 | 200 | # for F0 consistency loss 201 | def compute_mean_f0(f0): 202 | f0_mean = f0.mean(-1) 203 | f0_mean = f0_mean.expand(f0.shape[-1], f0_mean.shape[0]).transpose(0, 1) # (B, M) 204 | return f0_mean 205 | 206 | def f0_loss(x_f0, y_f0): 207 | """ 208 | x.shape = (B, 1, M, L): predict 209 | y.shape = (B, 1, M, L): target 210 | """ 211 | # compute the mean 212 | x_mean = compute_mean_f0(x_f0) 213 | y_mean = compute_mean_f0(y_f0) 214 | loss = F.l1_loss(x_f0 / x_mean, y_f0 / y_mean) 215 | return loss -------------------------------------------------------------------------------- /meldataset.py: -------------------------------------------------------------------------------- 1 | #coding: utf-8 2 | 3 | import os 4 | import time 5 | import random 6 | import random 7 | import torch 8 | import torchaudio 9 | 10 | import numpy as np 11 | import soundfile as sf 12 | import torch.nn.functional as F 13 | 14 | from torch import nn 15 | from torch.utils.data import DataLoader 16 | 17 | import logging 18 | logger = logging.getLogger(__name__) 19 | logger.setLevel(logging.DEBUG) 20 | 21 | np.random.seed(1) 22 | random.seed(1) 23 | 24 | SPECT_PARAMS = { 25 | "n_fft": 2048, 26 | "win_length": 1200, 27 | "hop_length": 300 28 | } 29 | MEL_PARAMS = { 30 | "n_mels": 80, 31 | "n_fft": 2048, 32 | "win_length": 1200, 33 | "hop_length": 300 34 | } 35 | 36 | class MelDataset(torch.utils.data.Dataset): 37 | def __init__(self, 38 | data_list, 39 | sr=24000, 40 | validation=False, 41 | ): 42 | 43 | _data_list = [l[:-1].split('|') for l in data_list] 44 | self.data_list = [(path, int(label)) for path, label in _data_list] 45 | self.data_list_per_class = { 46 | target: [(path, label) for path, label in self.data_list if label == target] \ 47 | for target in list(set([label for _, label in self.data_list]))} 48 | 49 | self.sr = sr 50 | self.to_melspec = torchaudio.transforms.MelSpectrogram(**MEL_PARAMS) 51 | 52 | self.mean, self.std = -4, 4 53 | self.validation = validation 54 | self.max_mel_length = 192 55 | 56 | def __len__(self): 57 | return len(self.data_list) 58 | 59 | def __getitem__(self, idx): 60 | data = self.data_list[idx] 61 | mel_tensor, label = self._load_data(data) 62 | ref_data = random.choice(self.data_list) 63 | ref_mel_tensor, ref_label = self._load_data(ref_data) 64 | ref2_data = random.choice(self.data_list_per_class[ref_label]) 65 | ref2_mel_tensor, _ = self._load_data(ref2_data) 66 | return mel_tensor, label, ref_mel_tensor, ref2_mel_tensor, ref_label 67 | 68 | def _load_data(self, path): 69 | wave_tensor, label = self._load_tensor(path) 70 | 71 | if not self.validation: # random scale for robustness 72 | random_scale = 0.5 + 0.5 * np.random.random() 73 | wave_tensor = random_scale * wave_tensor 74 | 75 | mel_tensor = self.to_melspec(wave_tensor) 76 | mel_tensor = (torch.log(1e-5 + mel_tensor) - self.mean) / self.std 77 | mel_length = mel_tensor.size(1) 78 | if mel_length > self.max_mel_length: 79 | random_start = np.random.randint(0, mel_length - self.max_mel_length) 80 | mel_tensor = mel_tensor[:, random_start:random_start + self.max_mel_length] 81 | 82 | return mel_tensor, label 83 | 84 | def _preprocess(self, wave_tensor, ): 85 | mel_tensor = self.to_melspec(wave_tensor) 86 | mel_tensor = (torch.log(1e-5 + mel_tensor) - self.mean) / self.std 87 | return mel_tensor 88 | 89 | def _load_tensor(self, data): 90 | wave_path, label = data 91 | label = int(label) 92 | wave, sr = sf.read(wave_path) 93 | wave_tensor = torch.from_numpy(wave).float() 94 | return wave_tensor, label 95 | 96 | class Collater(object): 97 | """ 98 | Args: 99 | adaptive_batch_size (bool): if true, decrease batch size when long data comes. 100 | """ 101 | 102 | def __init__(self, return_wave=False): 103 | self.text_pad_index = 0 104 | self.return_wave = return_wave 105 | self.max_mel_length = 192 106 | self.mel_length_step = 16 107 | self.latent_dim = 16 108 | 109 | def __call__(self, batch): 110 | batch_size = len(batch) 111 | nmels = batch[0][0].size(0) 112 | mels = torch.zeros((batch_size, nmels, self.max_mel_length)).float() 113 | labels = torch.zeros((batch_size)).long() 114 | ref_mels = torch.zeros((batch_size, nmels, self.max_mel_length)).float() 115 | ref2_mels = torch.zeros((batch_size, nmels, self.max_mel_length)).float() 116 | ref_labels = torch.zeros((batch_size)).long() 117 | 118 | for bid, (mel, label, ref_mel, ref2_mel, ref_label) in enumerate(batch): 119 | mel_size = mel.size(1) 120 | mels[bid, :, :mel_size] = mel 121 | 122 | ref_mel_size = ref_mel.size(1) 123 | ref_mels[bid, :, :ref_mel_size] = ref_mel 124 | 125 | ref2_mel_size = ref2_mel.size(1) 126 | ref2_mels[bid, :, :ref2_mel_size] = ref2_mel 127 | 128 | labels[bid] = label 129 | ref_labels[bid] = ref_label 130 | 131 | z_trg = torch.randn(batch_size, self.latent_dim) 132 | z_trg2 = torch.randn(batch_size, self.latent_dim) 133 | 134 | mels, ref_mels, ref2_mels = mels.unsqueeze(1), ref_mels.unsqueeze(1), ref2_mels.unsqueeze(1) 135 | return mels, labels, ref_mels, ref2_mels, ref_labels, z_trg, z_trg2 136 | 137 | def build_dataloader(path_list, 138 | validation=False, 139 | batch_size=4, 140 | num_workers=1, 141 | device='cpu', 142 | collate_config={}, 143 | dataset_config={}): 144 | 145 | dataset = MelDataset(path_list, validation=validation) 146 | collate_fn = Collater(**collate_config) 147 | data_loader = DataLoader(dataset, 148 | batch_size=batch_size, 149 | shuffle=(not validation), 150 | num_workers=num_workers, 151 | drop_last=True, 152 | collate_fn=collate_fn, 153 | pin_memory=(device != 'cpu')) 154 | 155 | return data_loader 156 | -------------------------------------------------------------------------------- /models.py: -------------------------------------------------------------------------------- 1 | """ 2 | StarGAN v2 3 | Copyright (c) 2020-present NAVER Corp. 4 | This work is licensed under the Creative Commons Attribution-NonCommercial 5 | 4.0 International License. To view a copy of this license, visit 6 | http://creativecommons.org/licenses/by-nc/4.0/ or send a letter to 7 | Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 8 | """ 9 | import os 10 | import os.path as osp 11 | 12 | import copy 13 | import math 14 | 15 | from munch import Munch 16 | import numpy as np 17 | import torch 18 | import torch.nn as nn 19 | import torch.nn.functional as F 20 | 21 | class DownSample(nn.Module): 22 | def __init__(self, layer_type): 23 | super().__init__() 24 | self.layer_type = layer_type 25 | 26 | def forward(self, x): 27 | if self.layer_type == 'none': 28 | return x 29 | elif self.layer_type == 'timepreserve': 30 | return F.avg_pool2d(x, (2, 1)) 31 | elif self.layer_type == 'half': 32 | return F.avg_pool2d(x, 2) 33 | else: 34 | raise RuntimeError('Got unexpected donwsampletype %s, expected is [none, timepreserve, half]' % self.layer_type) 35 | 36 | 37 | class UpSample(nn.Module): 38 | def __init__(self, layer_type): 39 | super().__init__() 40 | self.layer_type = layer_type 41 | 42 | def forward(self, x): 43 | if self.layer_type == 'none': 44 | return x 45 | elif self.layer_type == 'timepreserve': 46 | return F.interpolate(x, scale_factor=(2, 1), mode='nearest') 47 | elif self.layer_type == 'half': 48 | return F.interpolate(x, scale_factor=2, mode='nearest') 49 | else: 50 | raise RuntimeError('Got unexpected upsampletype %s, expected is [none, timepreserve, half]' % self.layer_type) 51 | 52 | 53 | class ResBlk(nn.Module): 54 | def __init__(self, dim_in, dim_out, actv=nn.LeakyReLU(0.2), 55 | normalize=False, downsample='none'): 56 | super().__init__() 57 | self.actv = actv 58 | self.normalize = normalize 59 | self.downsample = DownSample(downsample) 60 | self.learned_sc = dim_in != dim_out 61 | self._build_weights(dim_in, dim_out) 62 | 63 | def _build_weights(self, dim_in, dim_out): 64 | self.conv1 = nn.Conv2d(dim_in, dim_in, 3, 1, 1) 65 | self.conv2 = nn.Conv2d(dim_in, dim_out, 3, 1, 1) 66 | if self.normalize: 67 | self.norm1 = nn.InstanceNorm2d(dim_in, affine=True) 68 | self.norm2 = nn.InstanceNorm2d(dim_in, affine=True) 69 | if self.learned_sc: 70 | self.conv1x1 = nn.Conv2d(dim_in, dim_out, 1, 1, 0, bias=False) 71 | 72 | def _shortcut(self, x): 73 | if self.learned_sc: 74 | x = self.conv1x1(x) 75 | if self.downsample: 76 | x = self.downsample(x) 77 | return x 78 | 79 | def _residual(self, x): 80 | if self.normalize: 81 | x = self.norm1(x) 82 | x = self.actv(x) 83 | x = self.conv1(x) 84 | x = self.downsample(x) 85 | if self.normalize: 86 | x = self.norm2(x) 87 | x = self.actv(x) 88 | x = self.conv2(x) 89 | return x 90 | 91 | def forward(self, x): 92 | x = self._shortcut(x) + self._residual(x) 93 | return x / math.sqrt(2) # unit variance 94 | 95 | class AdaIN(nn.Module): 96 | def __init__(self, style_dim, num_features): 97 | super().__init__() 98 | self.norm = nn.InstanceNorm2d(num_features, affine=False) 99 | self.fc = nn.Linear(style_dim, num_features*2) 100 | 101 | def forward(self, x, s): 102 | h = self.fc(s) 103 | h = h.view(h.size(0), h.size(1), 1, 1) 104 | gamma, beta = torch.chunk(h, chunks=2, dim=1) 105 | return (1 + gamma) * self.norm(x) + beta 106 | 107 | 108 | class AdainResBlk(nn.Module): 109 | def __init__(self, dim_in, dim_out, style_dim=64, w_hpf=0, 110 | actv=nn.LeakyReLU(0.2), upsample='none'): 111 | super().__init__() 112 | self.w_hpf = w_hpf 113 | self.actv = actv 114 | self.upsample = UpSample(upsample) 115 | self.learned_sc = dim_in != dim_out 116 | self._build_weights(dim_in, dim_out, style_dim) 117 | 118 | def _build_weights(self, dim_in, dim_out, style_dim=64): 119 | self.conv1 = nn.Conv2d(dim_in, dim_out, 3, 1, 1) 120 | self.conv2 = nn.Conv2d(dim_out, dim_out, 3, 1, 1) 121 | self.norm1 = AdaIN(style_dim, dim_in) 122 | self.norm2 = AdaIN(style_dim, dim_out) 123 | if self.learned_sc: 124 | self.conv1x1 = nn.Conv2d(dim_in, dim_out, 1, 1, 0, bias=False) 125 | 126 | def _shortcut(self, x): 127 | x = self.upsample(x) 128 | if self.learned_sc: 129 | x = self.conv1x1(x) 130 | return x 131 | 132 | def _residual(self, x, s): 133 | x = self.norm1(x, s) 134 | x = self.actv(x) 135 | x = self.upsample(x) 136 | x = self.conv1(x) 137 | x = self.norm2(x, s) 138 | x = self.actv(x) 139 | x = self.conv2(x) 140 | return x 141 | 142 | def forward(self, x, s): 143 | out = self._residual(x, s) 144 | if self.w_hpf == 0: 145 | out = (out + self._shortcut(x)) / math.sqrt(2) 146 | return out 147 | 148 | 149 | class HighPass(nn.Module): 150 | def __init__(self, w_hpf, device): 151 | super(HighPass, self).__init__() 152 | self.filter = torch.tensor([[-1, -1, -1], 153 | [-1, 8., -1], 154 | [-1, -1, -1]]).to(device) / w_hpf 155 | 156 | def forward(self, x): 157 | filter = self.filter.unsqueeze(0).unsqueeze(1).repeat(x.size(1), 1, 1, 1) 158 | return F.conv2d(x, filter, padding=1, groups=x.size(1)) 159 | 160 | 161 | class Generator(nn.Module): 162 | def __init__(self, dim_in=48, style_dim=48, max_conv_dim=48*8, w_hpf=1, F0_channel=0): 163 | super().__init__() 164 | 165 | self.stem = nn.Conv2d(1, dim_in, 3, 1, 1) 166 | self.encode = nn.ModuleList() 167 | self.decode = nn.ModuleList() 168 | self.to_out = nn.Sequential( 169 | nn.InstanceNorm2d(dim_in, affine=True), 170 | nn.LeakyReLU(0.2), 171 | nn.Conv2d(dim_in, 1, 1, 1, 0)) 172 | self.F0_channel = F0_channel 173 | # down/up-sampling blocks 174 | repeat_num = 4 #int(np.log2(img_size)) - 4 175 | if w_hpf > 0: 176 | repeat_num += 1 177 | 178 | for lid in range(repeat_num): 179 | if lid in [1, 3]: 180 | _downtype = 'timepreserve' 181 | else: 182 | _downtype = 'half' 183 | 184 | dim_out = min(dim_in*2, max_conv_dim) 185 | self.encode.append( 186 | ResBlk(dim_in, dim_out, normalize=True, downsample=_downtype)) 187 | self.decode.insert( 188 | 0, AdainResBlk(dim_out, dim_in, style_dim, 189 | w_hpf=w_hpf, upsample=_downtype)) # stack-like 190 | dim_in = dim_out 191 | 192 | # bottleneck blocks (encoder) 193 | for _ in range(2): 194 | self.encode.append( 195 | ResBlk(dim_out, dim_out, normalize=True)) 196 | 197 | # F0 blocks 198 | if F0_channel != 0: 199 | self.decode.insert( 200 | 0, AdainResBlk(dim_out + int(F0_channel / 2), dim_out, style_dim, w_hpf=w_hpf)) 201 | 202 | # bottleneck blocks (decoder) 203 | for _ in range(2): 204 | self.decode.insert( 205 | 0, AdainResBlk(dim_out + int(F0_channel / 2), dim_out + int(F0_channel / 2), style_dim, w_hpf=w_hpf)) 206 | 207 | if F0_channel != 0: 208 | self.F0_conv = nn.Sequential( 209 | ResBlk(F0_channel, int(F0_channel / 2), normalize=True, downsample="half"), 210 | ) 211 | 212 | 213 | if w_hpf > 0: 214 | device = torch.device( 215 | 'cuda' if torch.cuda.is_available() else 'cpu') 216 | self.hpf = HighPass(w_hpf, device) 217 | 218 | def forward(self, x, s, masks=None, F0=None): 219 | x = self.stem(x) 220 | cache = {} 221 | for block in self.encode: 222 | if (masks is not None) and (x.size(2) in [32, 64, 128]): 223 | cache[x.size(2)] = x 224 | x = block(x) 225 | 226 | if F0 is not None: 227 | F0 = self.F0_conv(F0) 228 | F0 = F.adaptive_avg_pool2d(F0, [x.shape[-2], x.shape[-1]]) 229 | x = torch.cat([x, F0], axis=1) 230 | 231 | for block in self.decode: 232 | x = block(x, s) 233 | if (masks is not None) and (x.size(2) in [32, 64, 128]): 234 | mask = masks[0] if x.size(2) in [32] else masks[1] 235 | mask = F.interpolate(mask, size=x.size(2), mode='bilinear') 236 | x = x + self.hpf(mask * cache[x.size(2)]) 237 | 238 | return self.to_out(x) 239 | 240 | 241 | class MappingNetwork(nn.Module): 242 | def __init__(self, latent_dim=16, style_dim=48, num_domains=2, hidden_dim=384): 243 | super().__init__() 244 | layers = [] 245 | layers += [nn.Linear(latent_dim, hidden_dim)] 246 | layers += [nn.ReLU()] 247 | for _ in range(3): 248 | layers += [nn.Linear(hidden_dim, hidden_dim)] 249 | layers += [nn.ReLU()] 250 | self.shared = nn.Sequential(*layers) 251 | 252 | self.unshared = nn.ModuleList() 253 | for _ in range(num_domains): 254 | self.unshared += [nn.Sequential(nn.Linear(hidden_dim, hidden_dim), 255 | nn.ReLU(), 256 | nn.Linear(hidden_dim, hidden_dim), 257 | nn.ReLU(), 258 | nn.Linear(hidden_dim, hidden_dim), 259 | nn.ReLU(), 260 | nn.Linear(hidden_dim, style_dim))] 261 | 262 | def forward(self, z, y): 263 | h = self.shared(z) 264 | out = [] 265 | for layer in self.unshared: 266 | out += [layer(h)] 267 | out = torch.stack(out, dim=1) # (batch, num_domains, style_dim) 268 | idx = torch.LongTensor(range(y.size(0))).to(y.device) 269 | s = out[idx, y] # (batch, style_dim) 270 | return s 271 | 272 | 273 | class StyleEncoder(nn.Module): 274 | def __init__(self, dim_in=48, style_dim=48, num_domains=2, max_conv_dim=384): 275 | super().__init__() 276 | blocks = [] 277 | blocks += [nn.Conv2d(1, dim_in, 3, 1, 1)] 278 | 279 | repeat_num = 4 280 | for _ in range(repeat_num): 281 | dim_out = min(dim_in*2, max_conv_dim) 282 | blocks += [ResBlk(dim_in, dim_out, downsample='half')] 283 | dim_in = dim_out 284 | 285 | blocks += [nn.LeakyReLU(0.2)] 286 | blocks += [nn.Conv2d(dim_out, dim_out, 5, 1, 0)] 287 | blocks += [nn.AdaptiveAvgPool2d(1)] 288 | blocks += [nn.LeakyReLU(0.2)] 289 | self.shared = nn.Sequential(*blocks) 290 | 291 | self.unshared = nn.ModuleList() 292 | for _ in range(num_domains): 293 | self.unshared += [nn.Linear(dim_out, style_dim)] 294 | 295 | def forward(self, x, y): 296 | h = self.shared(x) 297 | 298 | h = h.view(h.size(0), -1) 299 | out = [] 300 | 301 | for layer in self.unshared: 302 | out += [layer(h)] 303 | 304 | out = torch.stack(out, dim=1) # (batch, num_domains, style_dim) 305 | idx = torch.LongTensor(range(y.size(0))).to(y.device) 306 | s = out[idx, y] # (batch, style_dim) 307 | return s 308 | 309 | class Discriminator(nn.Module): 310 | def __init__(self, dim_in=48, num_domains=2, max_conv_dim=384, repeat_num=4): 311 | super().__init__() 312 | 313 | # real/fake discriminator 314 | self.dis = Discriminator2d(dim_in=dim_in, num_domains=num_domains, 315 | max_conv_dim=max_conv_dim, repeat_num=repeat_num) 316 | # adversarial classifier 317 | self.cls = Discriminator2d(dim_in=dim_in, num_domains=num_domains, 318 | max_conv_dim=max_conv_dim, repeat_num=repeat_num) 319 | self.num_domains = num_domains 320 | 321 | def forward(self, x, y): 322 | return self.dis(x, y) 323 | 324 | def classifier(self, x): 325 | return self.cls.get_feature(x) 326 | 327 | 328 | class LinearNorm(torch.nn.Module): 329 | def __init__(self, in_dim, out_dim, bias=True, w_init_gain='linear'): 330 | super(LinearNorm, self).__init__() 331 | self.linear_layer = torch.nn.Linear(in_dim, out_dim, bias=bias) 332 | 333 | torch.nn.init.xavier_uniform_( 334 | self.linear_layer.weight, 335 | gain=torch.nn.init.calculate_gain(w_init_gain)) 336 | 337 | def forward(self, x): 338 | return self.linear_layer(x) 339 | 340 | class Discriminator2d(nn.Module): 341 | def __init__(self, dim_in=48, num_domains=2, max_conv_dim=384, repeat_num=4): 342 | super().__init__() 343 | blocks = [] 344 | blocks += [nn.Conv2d(1, dim_in, 3, 1, 1)] 345 | 346 | for lid in range(repeat_num): 347 | dim_out = min(dim_in*2, max_conv_dim) 348 | blocks += [ResBlk(dim_in, dim_out, downsample='half')] 349 | dim_in = dim_out 350 | 351 | blocks += [nn.LeakyReLU(0.2)] 352 | blocks += [nn.Conv2d(dim_out, dim_out, 5, 1, 0)] 353 | blocks += [nn.LeakyReLU(0.2)] 354 | blocks += [nn.AdaptiveAvgPool2d(1)] 355 | blocks += [nn.Conv2d(dim_out, num_domains, 1, 1, 0)] 356 | self.main = nn.Sequential(*blocks) 357 | 358 | def get_feature(self, x): 359 | out = self.main(x) 360 | out = out.view(out.size(0), -1) # (batch, num_domains) 361 | return out 362 | 363 | def forward(self, x, y): 364 | out = self.get_feature(x) 365 | idx = torch.LongTensor(range(y.size(0))).to(y.device) 366 | out = out[idx, y] # (batch) 367 | return out 368 | 369 | 370 | def build_model(args, F0_model, ASR_model): 371 | generator = Generator(args.dim_in, args.style_dim, args.max_conv_dim, w_hpf=args.w_hpf, F0_channel=args.F0_channel) 372 | mapping_network = MappingNetwork(args.latent_dim, args.style_dim, args.num_domains, hidden_dim=args.max_conv_dim) 373 | style_encoder = StyleEncoder(args.dim_in, args.style_dim, args.num_domains, args.max_conv_dim) 374 | discriminator = Discriminator(args.dim_in, args.num_domains, args.max_conv_dim, args.n_repeat) 375 | generator_ema = copy.deepcopy(generator) 376 | mapping_network_ema = copy.deepcopy(mapping_network) 377 | style_encoder_ema = copy.deepcopy(style_encoder) 378 | 379 | nets = Munch(generator=generator, 380 | mapping_network=mapping_network, 381 | style_encoder=style_encoder, 382 | discriminator=discriminator, 383 | f0_model=F0_model, 384 | asr_model=ASR_model) 385 | 386 | nets_ema = Munch(generator=generator_ema, 387 | mapping_network=mapping_network_ema, 388 | style_encoder=style_encoder_ema) 389 | 390 | return nets, nets_ema -------------------------------------------------------------------------------- /optimizers.py: -------------------------------------------------------------------------------- 1 | #coding:utf-8 2 | import os, sys 3 | import os.path as osp 4 | import numpy as np 5 | import torch 6 | from torch import nn 7 | from torch.optim import Optimizer 8 | from functools import reduce 9 | from torch.optim import AdamW 10 | 11 | class MultiOptimizer: 12 | def __init__(self, optimizers={}, schedulers={}): 13 | self.optimizers = optimizers 14 | self.schedulers = schedulers 15 | self.keys = list(optimizers.keys()) 16 | self.param_groups = reduce(lambda x,y: x+y, [v.param_groups for v in self.optimizers.values()]) 17 | 18 | def state_dict(self): 19 | state_dicts = [(key, self.optimizers[key].state_dict())\ 20 | for key in self.keys] 21 | return state_dicts 22 | 23 | def load_state_dict(self, state_dict): 24 | for key, val in state_dict: 25 | try: 26 | self.optimizers[key].load_state_dict(val) 27 | except: 28 | print("Unloaded %s" % key) 29 | 30 | def step(self, key=None, scaler=None): 31 | keys = [key] if key is not None else self.keys 32 | _ = [self._step(key, scaler) for key in keys] 33 | 34 | def _step(self, key, scaler=None): 35 | if scaler is not None: 36 | scaler.step(self.optimizers[key]) 37 | scaler.update() 38 | else: 39 | self.optimizers[key].step() 40 | 41 | def zero_grad(self, key=None): 42 | if key is not None: 43 | self.optimizers[key].zero_grad() 44 | else: 45 | _ = [self.optimizers[key].zero_grad() for key in self.keys] 46 | 47 | def scheduler(self, *args, key=None): 48 | if key is not None: 49 | self.schedulers[key].step(*args) 50 | else: 51 | _ = [self.schedulers[key].step(*args) for key in self.keys] 52 | 53 | def define_scheduler(optimizer, params): 54 | print(params) 55 | scheduler = torch.optim.lr_scheduler.OneCycleLR( 56 | optimizer, 57 | max_lr=params.get('max_lr', 2e-4), 58 | epochs=params.get('epochs', 200), 59 | steps_per_epoch=params.get('steps_per_epoch', 1000), 60 | pct_start=params.get('pct_start', 0.0), 61 | div_factor=1, 62 | final_div_factor=1) 63 | 64 | return scheduler 65 | 66 | def build_optimizer(parameters_dict, scheduler_params_dict): 67 | optim = dict([(key, AdamW(params, lr=1e-4, weight_decay=1e-4, betas=(0.0, 0.99), eps=1e-9)) 68 | for key, params in parameters_dict.items()]) 69 | 70 | schedulers = dict([(key, define_scheduler(opt, scheduler_params_dict[key])) \ 71 | for key, opt in optim.items()]) 72 | 73 | multi_optim = MultiOptimizer(optim, schedulers) 74 | return multi_optim -------------------------------------------------------------------------------- /train.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | #coding:utf-8 3 | 4 | import os 5 | import os.path as osp 6 | import re 7 | import sys 8 | import yaml 9 | import shutil 10 | import numpy as np 11 | import torch 12 | import click 13 | import warnings 14 | warnings.simplefilter('ignore') 15 | 16 | from functools import reduce 17 | from munch import Munch 18 | 19 | from meldataset import build_dataloader 20 | from optimizers import build_optimizer 21 | from models import build_model 22 | from trainer import Trainer 23 | from torch.utils.tensorboard import SummaryWriter 24 | 25 | from Utils.ASR.models import ASRCNN 26 | from Utils.JDC.model import JDCNet 27 | 28 | import logging 29 | from logging import StreamHandler 30 | logger = logging.getLogger(__name__) 31 | logger.setLevel(logging.DEBUG) 32 | handler = StreamHandler() 33 | handler.setLevel(logging.DEBUG) 34 | logger.addHandler(handler) 35 | 36 | torch.backends.cudnn.benchmark = True # 37 | 38 | @click.command() 39 | @click.option('-p', '--config_path', default='Configs/config.yml', type=str) 40 | 41 | def main(config_path): 42 | config = yaml.safe_load(open(config_path)) 43 | 44 | log_dir = config['log_dir'] 45 | if not osp.exists(log_dir): os.makedirs(log_dir, exist_ok=True) 46 | shutil.copy(config_path, osp.join(log_dir, osp.basename(config_path))) 47 | writer = SummaryWriter(log_dir + "/tensorboard") 48 | 49 | # write logs 50 | file_handler = logging.FileHandler(osp.join(log_dir, 'train.log')) 51 | file_handler.setLevel(logging.DEBUG) 52 | file_handler.setFormatter(logging.Formatter('%(levelname)s:%(asctime)s: %(message)s')) 53 | logger.addHandler(file_handler) 54 | 55 | batch_size = config.get('batch_size', 10) 56 | device = config.get('device', 'cpu') 57 | epochs = config.get('epochs', 1000) 58 | save_freq = config.get('save_freq', 20) 59 | train_path = config.get('train_data', None) 60 | val_path = config.get('val_data', None) 61 | stage = config.get('stage', 'star') 62 | fp16_run = config.get('fp16_run', False) 63 | 64 | # load data 65 | train_list, val_list = get_data_path_list(train_path, val_path) 66 | train_dataloader = build_dataloader(train_list, 67 | batch_size=batch_size, 68 | num_workers=4, 69 | device=device) 70 | val_dataloader = build_dataloader(val_list, 71 | batch_size=batch_size, 72 | validation=True, 73 | num_workers=2, 74 | device=device) 75 | 76 | # load pretrained ASR model 77 | ASR_config = config.get('ASR_config', False) 78 | ASR_path = config.get('ASR_path', False) 79 | with open(ASR_config) as f: 80 | ASR_config = yaml.safe_load(f) 81 | ASR_model_config = ASR_config['model_params'] 82 | ASR_model = ASRCNN(**ASR_model_config) 83 | params = torch.load(ASR_path, map_location='cpu')['model'] 84 | ASR_model.load_state_dict(params) 85 | _ = ASR_model.eval() 86 | 87 | # load pretrained F0 model 88 | F0_path = config.get('F0_path', False) 89 | F0_model = JDCNet(num_class=1, seq_len=192) 90 | params = torch.load(F0_path, map_location='cpu')['net'] 91 | F0_model.load_state_dict(params) 92 | 93 | # build model 94 | model, model_ema = build_model(Munch(config['model_params']), F0_model, ASR_model) 95 | 96 | scheduler_params = { 97 | "max_lr": float(config['optimizer_params'].get('lr', 2e-4)), 98 | "pct_start": float(config['optimizer_params'].get('pct_start', 0.0)), 99 | "epochs": epochs, 100 | "steps_per_epoch": len(train_dataloader), 101 | } 102 | 103 | _ = [model[key].to(device) for key in model] 104 | _ = [model_ema[key].to(device) for key in model_ema] 105 | scheduler_params_dict = {key: scheduler_params.copy() for key in model} 106 | scheduler_params_dict['mapping_network']['max_lr'] = 2e-6 107 | optimizer = build_optimizer({key: model[key].parameters() for key in model}, 108 | scheduler_params_dict=scheduler_params_dict) 109 | 110 | trainer = Trainer(args=Munch(config['loss_params']), model=model, 111 | model_ema=model_ema, 112 | optimizer=optimizer, 113 | device=device, 114 | train_dataloader=train_dataloader, 115 | val_dataloader=val_dataloader, 116 | logger=logger, 117 | fp16_run=fp16_run) 118 | 119 | if config.get('pretrained_model', '') != '': 120 | trainer.load_checkpoint(config['pretrained_model'], 121 | load_only_params=config.get('load_only_params', True)) 122 | 123 | for _ in range(1, epochs+1): 124 | epoch = trainer.epochs 125 | train_results = trainer._train_epoch() 126 | eval_results = trainer._eval_epoch() 127 | results = train_results.copy() 128 | results.update(eval_results) 129 | logger.info('--- epoch %d ---' % epoch) 130 | for key, value in results.items(): 131 | if isinstance(value, float): 132 | logger.info('%-15s: %.4f' % (key, value)) 133 | writer.add_scalar(key, value, epoch) 134 | else: 135 | for v in value: 136 | writer.add_figure('eval_spec', v, epoch) 137 | if (epoch % save_freq) == 0: 138 | trainer.save_checkpoint(osp.join(log_dir, 'epoch_%05d.pth' % epoch)) 139 | 140 | return 0 141 | 142 | def get_data_path_list(train_path=None, val_path=None): 143 | if train_path is None: 144 | train_path = "Data/train_list.txt" 145 | if val_path is None: 146 | val_path = "Data/val_list.txt" 147 | 148 | with open(train_path, 'r') as f: 149 | train_list = f.readlines() 150 | with open(val_path, 'r') as f: 151 | val_list = f.readlines() 152 | 153 | return train_list, val_list 154 | 155 | if __name__=="__main__": 156 | main() 157 | -------------------------------------------------------------------------------- /trainer.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import os 4 | import os.path as osp 5 | import sys 6 | import time 7 | from collections import defaultdict 8 | 9 | import numpy as np 10 | import torch 11 | from torch import nn 12 | from PIL import Image 13 | from tqdm import tqdm 14 | 15 | from losses import compute_d_loss, compute_g_loss 16 | 17 | import logging 18 | logger = logging.getLogger(__name__) 19 | logger.setLevel(logging.DEBUG) 20 | 21 | class Trainer(object): 22 | def __init__(self, 23 | args, 24 | model=None, 25 | model_ema=None, 26 | optimizer=None, 27 | scheduler=None, 28 | config={}, 29 | device=torch.device("cpu"), 30 | logger=logger, 31 | train_dataloader=None, 32 | val_dataloader=None, 33 | initial_steps=0, 34 | initial_epochs=0, 35 | fp16_run=False 36 | ): 37 | self.args = args 38 | self.steps = initial_steps 39 | self.epochs = initial_epochs 40 | self.model = model 41 | self.model_ema = model_ema 42 | self.optimizer = optimizer 43 | self.scheduler = scheduler 44 | self.train_dataloader = train_dataloader 45 | self.val_dataloader = val_dataloader 46 | self.config = config 47 | self.device = device 48 | self.finish_train = False 49 | self.logger = logger 50 | self.fp16_run = fp16_run 51 | 52 | def _train_epoch(self): 53 | """Train model one epoch.""" 54 | raise NotImplementedError 55 | 56 | @torch.no_grad() 57 | def _eval_epoch(self): 58 | """Evaluate model one epoch.""" 59 | pass 60 | 61 | def save_checkpoint(self, checkpoint_path): 62 | """Save checkpoint. 63 | Args: 64 | checkpoint_path (str): Checkpoint path to be saved. 65 | """ 66 | state_dict = { 67 | "optimizer": self.optimizer.state_dict(), 68 | "steps": self.steps, 69 | "epochs": self.epochs, 70 | "model": {key: self.model[key].state_dict() for key in self.model} 71 | } 72 | if self.model_ema is not None: 73 | state_dict['model_ema'] = {key: self.model_ema[key].state_dict() for key in self.model_ema} 74 | 75 | if not os.path.exists(os.path.dirname(checkpoint_path)): 76 | os.makedirs(os.path.dirname(checkpoint_path)) 77 | torch.save(state_dict, checkpoint_path) 78 | 79 | def load_checkpoint(self, checkpoint_path, load_only_params=False): 80 | """Load checkpoint. 81 | 82 | Args: 83 | checkpoint_path (str): Checkpoint path to be loaded. 84 | load_only_params (bool): Whether to load only model parameters. 85 | 86 | """ 87 | state_dict = torch.load(checkpoint_path, map_location="cpu") 88 | for key in self.model: 89 | self._load(state_dict["model"][key], self.model[key]) 90 | 91 | if self.model_ema is not None: 92 | for key in self.model_ema: 93 | self._load(state_dict["model_ema"][key], self.model_ema[key]) 94 | 95 | if not load_only_params: 96 | self.steps = state_dict["steps"] 97 | self.epochs = state_dict["epochs"] 98 | self.optimizer.load_state_dict(state_dict["optimizer"]) 99 | 100 | 101 | def _load(self, states, model, force_load=True): 102 | model_states = model.state_dict() 103 | for key, val in states.items(): 104 | try: 105 | if key not in model_states: 106 | continue 107 | if isinstance(val, nn.Parameter): 108 | val = val.data 109 | 110 | if val.shape != model_states[key].shape: 111 | self.logger.info("%s does not have same shape" % key) 112 | print(val.shape, model_states[key].shape) 113 | if not force_load: 114 | continue 115 | 116 | min_shape = np.minimum(np.array(val.shape), np.array(model_states[key].shape)) 117 | slices = [slice(0, min_index) for min_index in min_shape] 118 | model_states[key][slices].copy_(val[slices]) 119 | else: 120 | model_states[key].copy_(val) 121 | except: 122 | self.logger.info("not exist :%s" % key) 123 | print("not exist ", key) 124 | 125 | @staticmethod 126 | def get_gradient_norm(model): 127 | total_norm = 0 128 | for p in model.parameters(): 129 | param_norm = p.grad.data.norm(2) 130 | total_norm += param_norm.item() ** 2 131 | 132 | total_norm = np.sqrt(total_norm) 133 | return total_norm 134 | 135 | @staticmethod 136 | def length_to_mask(lengths): 137 | mask = torch.arange(lengths.max()).unsqueeze(0).expand(lengths.shape[0], -1).type_as(lengths) 138 | mask = torch.gt(mask+1, lengths.unsqueeze(1)) 139 | return mask 140 | 141 | def _get_lr(self): 142 | for param_group in self.optimizer.param_groups: 143 | lr = param_group['lr'] 144 | break 145 | return lr 146 | 147 | @staticmethod 148 | def moving_average(model, model_test, beta=0.999): 149 | for param, param_test in zip(model.parameters(), model_test.parameters()): 150 | param_test.data = torch.lerp(param.data, param_test.data, beta) 151 | 152 | def _train_epoch(self): 153 | self.epochs += 1 154 | 155 | train_losses = defaultdict(list) 156 | _ = [self.model[k].train() for k in self.model] 157 | scaler = torch.cuda.amp.GradScaler() if (('cuda' in str(self.device)) and self.fp16_run) else None 158 | 159 | use_con_reg = (self.epochs >= self.args.con_reg_epoch) 160 | use_adv_cls = (self.epochs >= self.args.adv_cls_epoch) 161 | 162 | for train_steps_per_epoch, batch in enumerate(tqdm(self.train_dataloader, desc="[train]"), 1): 163 | 164 | ### load data 165 | batch = [b.to(self.device) for b in batch] 166 | x_real, y_org, x_ref, x_ref2, y_trg, z_trg, z_trg2 = batch 167 | 168 | # train the discriminator (by random reference) 169 | self.optimizer.zero_grad() 170 | if scaler is not None: 171 | with torch.cuda.amp.autocast(): 172 | d_loss, d_losses_latent = compute_d_loss(self.model, self.args.d_loss, x_real, y_org, y_trg, z_trg=z_trg, use_adv_cls=use_adv_cls, use_con_reg=use_con_reg) 173 | scaler.scale(d_loss).backward() 174 | else: 175 | d_loss, d_losses_latent = compute_d_loss(self.model, self.args.d_loss, x_real, y_org, y_trg, z_trg=z_trg, use_adv_cls=use_adv_cls, use_con_reg=use_con_reg) 176 | d_loss.backward() 177 | self.optimizer.step('discriminator', scaler=scaler) 178 | 179 | # train the discriminator (by target reference) 180 | self.optimizer.zero_grad() 181 | if scaler is not None: 182 | with torch.cuda.amp.autocast(): 183 | d_loss, d_losses_ref = compute_d_loss(self.model, self.args.d_loss, x_real, y_org, y_trg, x_ref=x_ref, use_adv_cls=use_adv_cls, use_con_reg=use_con_reg) 184 | scaler.scale(d_loss).backward() 185 | else: 186 | d_loss, d_losses_ref = compute_d_loss(self.model, self.args.d_loss, x_real, y_org, y_trg, x_ref=x_ref, use_adv_cls=use_adv_cls, use_con_reg=use_con_reg) 187 | d_loss.backward() 188 | 189 | self.optimizer.step('discriminator', scaler=scaler) 190 | 191 | # train the generator (by random reference) 192 | self.optimizer.zero_grad() 193 | if scaler is not None: 194 | with torch.cuda.amp.autocast(): 195 | g_loss, g_losses_latent = compute_g_loss( 196 | self.model, self.args.g_loss, x_real, y_org, y_trg, z_trgs=[z_trg, z_trg2], use_adv_cls=use_adv_cls) 197 | scaler.scale(g_loss).backward() 198 | else: 199 | g_loss, g_losses_latent = compute_g_loss( 200 | self.model, self.args.g_loss, x_real, y_org, y_trg, z_trgs=[z_trg, z_trg2], use_adv_cls=use_adv_cls) 201 | g_loss.backward() 202 | 203 | self.optimizer.step('generator', scaler=scaler) 204 | self.optimizer.step('mapping_network', scaler=scaler) 205 | self.optimizer.step('style_encoder', scaler=scaler) 206 | 207 | # train the generator (by target reference) 208 | self.optimizer.zero_grad() 209 | if scaler is not None: 210 | with torch.cuda.amp.autocast(): 211 | g_loss, g_losses_ref = compute_g_loss( 212 | self.model, self.args.g_loss, x_real, y_org, y_trg, x_refs=[x_ref, x_ref2], use_adv_cls=use_adv_cls) 213 | scaler.scale(g_loss).backward() 214 | else: 215 | g_loss, g_losses_ref = compute_g_loss( 216 | self.model, self.args.g_loss, x_real, y_org, y_trg, x_refs=[x_ref, x_ref2], use_adv_cls=use_adv_cls) 217 | g_loss.backward() 218 | self.optimizer.step('generator', scaler=scaler) 219 | 220 | # compute moving average of network parameters 221 | self.moving_average(self.model.generator, self.model_ema.generator, beta=0.999) 222 | self.moving_average(self.model.mapping_network, self.model_ema.mapping_network, beta=0.999) 223 | self.moving_average(self.model.style_encoder, self.model_ema.style_encoder, beta=0.999) 224 | self.optimizer.scheduler() 225 | 226 | for key in d_losses_latent: 227 | train_losses["train/%s" % key].append(d_losses_latent[key]) 228 | for key in g_losses_latent: 229 | train_losses["train/%s" % key].append(g_losses_latent[key]) 230 | 231 | 232 | train_losses = {key: np.mean(value) for key, value in train_losses.items()} 233 | return train_losses 234 | 235 | @torch.no_grad() 236 | def _eval_epoch(self): 237 | use_adv_cls = (self.epochs >= self.args.adv_cls_epoch) 238 | 239 | eval_losses = defaultdict(list) 240 | eval_images = defaultdict(list) 241 | _ = [self.model[k].eval() for k in self.model] 242 | for eval_steps_per_epoch, batch in enumerate(tqdm(self.val_dataloader, desc="[eval]"), 1): 243 | 244 | ### load data 245 | batch = [b.to(self.device) for b in batch] 246 | x_real, y_org, x_ref, x_ref2, y_trg, z_trg, z_trg2 = batch 247 | 248 | # train the discriminator 249 | d_loss, d_losses_latent = compute_d_loss( 250 | self.model, self.args.d_loss, x_real, y_org, y_trg, z_trg=z_trg, use_r1_reg=False, use_adv_cls=use_adv_cls) 251 | d_loss, d_losses_ref = compute_d_loss( 252 | self.model, self.args.d_loss, x_real, y_org, y_trg, x_ref=x_ref, use_r1_reg=False, use_adv_cls=use_adv_cls) 253 | 254 | # train the generator 255 | g_loss, g_losses_latent = compute_g_loss( 256 | self.model, self.args.g_loss, x_real, y_org, y_trg, z_trgs=[z_trg, z_trg2], use_adv_cls=use_adv_cls) 257 | g_loss, g_losses_ref = compute_g_loss( 258 | self.model, self.args.g_loss, x_real, y_org, y_trg, x_refs=[x_ref, x_ref2], use_adv_cls=use_adv_cls) 259 | 260 | for key in d_losses_latent: 261 | eval_losses["eval/%s" % key].append(d_losses_latent[key]) 262 | for key in g_losses_latent: 263 | eval_losses["eval/%s" % key].append(g_losses_latent[key]) 264 | 265 | # if eval_steps_per_epoch % 10 == 0: 266 | # # generate x_fake 267 | # s_trg = self.model_ema.style_encoder(x_ref, y_trg) 268 | # F0 = self.model.f0_model.get_feature_GAN(x_real) 269 | # x_fake = self.model_ema.generator(x_real, s_trg, masks=None, F0=F0) 270 | # # generate x_recon 271 | # s_real = self.model_ema.style_encoder(x_real, y_org) 272 | # F0_fake = self.model.f0_model.get_feature_GAN(x_fake) 273 | # x_recon = self.model_ema.generator(x_fake, s_real, masks=None, F0=F0_fake) 274 | 275 | # eval_images['eval/image'].append( 276 | # ([x_real[0, 0].cpu().numpy(), 277 | # x_fake[0, 0].cpu().numpy(), 278 | # x_recon[0, 0].cpu().numpy()])) 279 | 280 | eval_losses = {key: np.mean(value) for key, value in eval_losses.items()} 281 | eval_losses.update(eval_images) 282 | return eval_losses 283 | -------------------------------------------------------------------------------- /transforms.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import numpy as np 4 | import torch 5 | from torch import nn 6 | import torch.nn.functional as F 7 | import torchaudio 8 | import torchaudio.functional as audio_F 9 | import random 10 | 11 | ## 1. RandomTimeStrech 12 | 13 | class TimeStrech(nn.Module): 14 | def __init__(self, scale): 15 | super(TimeStrech, self).__init__() 16 | self.scale = scale 17 | 18 | def forward(self, x): 19 | mel_size = x.size(-1) 20 | 21 | x = F.interpolate(x, scale_factor=(1, self.scale), align_corners=False, 22 | recompute_scale_factor=True, mode='bilinear').squeeze() 23 | 24 | if x.size(-1) < mel_size: 25 | noise_length = (mel_size - x.size(-1)) 26 | random_pos = random.randint(0, x.size(-1)) - noise_length 27 | if random_pos < 0: 28 | random_pos = 0 29 | noise = x[..., random_pos:random_pos + noise_length] 30 | x = torch.cat([x, noise], dim=-1) 31 | else: 32 | x = x[..., :mel_size] 33 | 34 | return x.unsqueeze(1) 35 | 36 | ## 2. PitchShift 37 | class PitchShift(nn.Module): 38 | def __init__(self, shift): 39 | super(PitchShift, self).__init__() 40 | self.shift = shift 41 | 42 | def forward(self, x): 43 | if len(x.shape) == 2: 44 | x = x.unsqueeze(0) 45 | x = x.squeeze() 46 | mel_size = x.shape[1] 47 | shift_scale = (mel_size + self.shift) / mel_size 48 | x = F.interpolate(x.unsqueeze(1), scale_factor=(shift_scale, 1.), align_corners=False, 49 | recompute_scale_factor=True, mode='bilinear').squeeze(1) 50 | 51 | x = x[:, :mel_size] 52 | if x.size(1) < mel_size: 53 | pad_size = mel_size - x.size(1) 54 | x = torch.cat([x, torch.zeros(x.size(0), pad_size, x.size(2)).to(x.device)], dim=1) 55 | x = x.squeeze() 56 | return x.unsqueeze(1) 57 | 58 | ## 3. ShiftBias 59 | class ShiftBias(nn.Module): 60 | def __init__(self, bias): 61 | super(ShiftBias, self).__init__() 62 | self.bias = bias 63 | 64 | def forward(self, x): 65 | return x + self.bias 66 | 67 | ## 4. Scaling 68 | class SpectScaling(nn.Module): 69 | def __init__(self, scale): 70 | super(SpectScaling, self).__init__() 71 | self.scale = scale 72 | 73 | def forward(self, x): 74 | return x * self.scale 75 | 76 | ## 5. Time Flip 77 | class TimeFlip(nn.Module): 78 | def __init__(self, length): 79 | super(TimeFlip, self).__init__() 80 | self.length = round(length) 81 | 82 | def forward(self, x): 83 | if self.length > 1: 84 | start = np.random.randint(0, x.shape[-1] - self.length) 85 | x_ret = x.clone() 86 | x_ret[..., start:start + self.length] = torch.flip(x[..., start:start + self.length], dims=[-1]) 87 | x = x_ret 88 | return x 89 | 90 | class PhaseShuffle2d(nn.Module): 91 | def __init__(self, n=2): 92 | super(PhaseShuffle2d, self).__init__() 93 | self.n = n 94 | self.random = random.Random(1) 95 | 96 | def forward(self, x, move=None): 97 | # x.size = (B, C, M, L) 98 | if move is None: 99 | move = self.random.randint(-self.n, self.n) 100 | 101 | if move == 0: 102 | return x 103 | else: 104 | left = x[:, :, :, :move] 105 | right = x[:, :, :, move:] 106 | shuffled = torch.cat([right, left], dim=3) 107 | 108 | return shuffled 109 | 110 | def build_transforms(): 111 | transforms = [ 112 | lambda M: TimeStrech(1+ (np.random.random()-0.5)*M*0.2), 113 | lambda M: SpectScaling(1 + (np.random.random()-1)*M*0.1), 114 | lambda M: PhaseShuffle2d(192), 115 | ] 116 | N, M = len(transforms), np.random.random() 117 | composed = nn.Sequential( 118 | *[trans(M) for trans in np.random.choice(transforms, N)] 119 | ) 120 | return composed 121 | --------------------------------------------------------------------------------