# Tutorial for SLMTK2.0 ###### tags: `slmtkbook` `SLMTK2.0` --- ## 0. CUDA installation 1) Cleaning remaining files ``` sudo rm /etc/apt/sources.list.d/cuda* sudo apt remove --autoremove nvidia-cuda-toolkit sudo apt remove --autoremove nvidia-* ``` 2) 3) Open the terminal (Ctrl+Alt+T) and execute the following command. It will give you the details of your graphic card and available drivers: ## 1. Environment Setup 1. 在 slmtk 的根目錄下執行 `source ./env.sh` ,這樣就可以讓 SLMTK2.0 建立 script 的程式知道 SLMTK 的程式的根目錄絕對路徑。 2. 在 `slmtk/egs/SLMTK2.0` 目錄下執行```make script-global```,建立所有語者都要用的 shell script 3. 在 `slmtk/egs/SLMTK2.0` 目錄下執行 ```make release-si```,此步驟是將所有語者共用的 TTS 模組,比如 text analysis 打包複製到 slmtk/egs/SLMTK2.0/release/ntpu-tts-SLMTK2.0 下面,同時也會建立一些共用的資料夾。 4. 在 `slmtk/egs/SLMTK2.0/release/ntpu-tts-SLMTK2.0` 目錄下,執行 `sudo make ta`,此步驟將建置所有語者共用的 text anlysis 模組。 5. 在 `slmtk/egs/SLMTK2.0/release/ntpu-tts-SLMTK2.0` 目錄下,執行 `make nn`,此步驟將安裝所有語者共用的 NNSS python library。 6. 在 `slmtk/egs/SLMTK2.0` 目錄下執行 ```make worksite-ntpu-nn-dm-am```,此步驟將NN-based speech synthesis (NNSS) 的 package (ntpu-nn-dm-am) 拷貝到 worksite/ntpu-nn-dm-am 之下。 ## 2. TTS Training For Each Speaker 1. 在 `slmtk/egs/SLMTK2.0` 目錄下執行```sh slmtk2.0-create-worksite_for_user.sh uid gender```,建立 uid 語者的工地,並且告知 SLMTK 該位語者的性別,方便強健地抽取 F0。 2. 將某語者的語音以及文字檔放在如以下的資料夾,在 `slmtk/egs/SLMTK2.0` 目錄下執行 ```sh slmtk2.0-copy-user-corpus.sh uid /home/cychiang/CYC/```,這樣子就會把語料的音檔 copy 到`worksite/${spk_id}/wav`,文字檔 copy 至 `worksite/${spk_id}/text`。 ``` /home/cychiang/CYC ├── text │ ├── CYC-CEmix-Adp-0001-1.txt │ ├── CYC-CEmix-Adp-0001-2.txt │ ├── CYC-CEmix-Adp-0001-3.txt │ ├── CYC-CEmix-Adp-0001-4.txt │ ├── CYC-CEmix-Adp-0002-1.txt │ ├── CYC-CEmix-Adp-0002-2.txt │ ├── CYC-CEmix-Adp-0002-3.txt │ ├── CYC-CEmix-Adp-0002-4.txt │ ├── CYC-CEmix-Adp-0003-1.txt │ ├── CYC-CEmix-Adp-0003-2.txt │ ├── CYC-CEmix-Adp-0003-3.txt │ ├── CYC-CEmix-Adp-0004-1.txt │ ├── CYC-CEmix-Adp-0004-2.txt │ ├── CYC-CEmix-Adp-0005-1.txt │ ├── CYC-CEmix-Adp-0005-2.txt │ ├── CYC-CEmix-Adp-0005-3.txt │ ├── CYC-CEmix-Adp-0005-4.txt │ ├── CYC-CEmix-Adp-0006-1.txt │ ├── CYC-CEmix-Adp-0006-2.txt │ ├── CYC-CEmix-Adp-0007-1.txt │ ├── CYC-CEmix-Adp-0007-2.txt │ ├── CYC-CEmix-Adp-0007-3.txt │ ├── CYC-CEmix-Adp-0007-4.txt │ ├── CYC-CEmix-Adp-0007-5.txt │ └── CYC-CEmix-Adp-0008-1.txt └── wav ├── CYC-CEmix-Adp-0001-1.wav ├── CYC-CEmix-Adp-0001-2.wav ├── CYC-CEmix-Adp-0001-3.wav ├── CYC-CEmix-Adp-0001-4.wav ├── CYC-CEmix-Adp-0002-1.wav ├── CYC-CEmix-Adp-0002-2.wav ├── CYC-CEmix-Adp-0002-3.wav ├── CYC-CEmix-Adp-0002-4.wav ├── CYC-CEmix-Adp-0003-1.wav ├── CYC-CEmix-Adp-0003-2.wav ├── CYC-CEmix-Adp-0003-3.wav ├── CYC-CEmix-Adp-0004-1.wav ├── CYC-CEmix-Adp-0004-2.wav ├── CYC-CEmix-Adp-0005-1.wav ├── CYC-CEmix-Adp-0005-2.wav ├── CYC-CEmix-Adp-0005-3.wav ├── CYC-CEmix-Adp-0005-4.wav ├── CYC-CEmix-Adp-0006-1.wav ├── CYC-CEmix-Adp-0006-2.wav ├── CYC-CEmix-Adp-0007-1.wav ├── CYC-CEmix-Adp-0007-2.wav ├── CYC-CEmix-Adp-0007-3.wav ├── CYC-CEmix-Adp-0007-4.wav ├── CYC-CEmix-Adp-0007-5.wav └── CYC-CEmix-Adp-0008-1.wav - ``` 3. 在 `slmtk/egs/SLMTK2.0` 目錄下,執行 `sh slmtk2.0-train-user-tts.sh uid`,開始訓練語音合成模型。 4. 在 `slmtk/egs/SLMTK2.0` 目錄下,可以執行 `sh slmtk2.0-query_user_model_training_progress.sh uid` 來確定 uid 的 TTS 模型正在訓練中? 5. 在 `slmtk/egs/SLMTK2.0` 目錄下,可以執行 `sh slmtk2.0-is-user-tts-available.sh uid` 來確定 uid 的 TTS 是否可以用了? ~~4. 在 `slmtk/egs/SLMTK2.0/release/ntpu-tts-SLMTK2.0/` 資料夾之下執行:`make sd ${spk_id}` 建置 `${spk_id}` 的 prosody generation 模型以及`${spk_id}` 的 HTS speech synthesis 模型。~~ 5. 在 `slmtk/egs/SLMTK2.0/release/ntpu-tts-SLMTK2.0/` 資料夾之下,可執行以下指令來進行TTS: `sh tts.sh 777 0.21 您好,我是江振宇,很高興認識大家! output.wav` ## 3. API References ### 3.1. 測是某一個 uid 的 TTS 是否存在 在 `slmtk/egs/SLMTK2.0/release/ntpu-tts-SLMTK2.0/` 資料夾之下執行: ``` sh slmtk2.0-is-user-tts-available.sh 437 ``` 以上指令就是在測試 uid=437 的 TTS 是否存在? 如果 TTS 存在,則會有以下輸出: ``` {"uid":"437", "is_tts_available":true} ``` 但如果 TTS 不存在,則會有以下輸出: ``` {"uid":"437", "is_tts_available":false} ```