---
# System prepended metadata

title: Tutorial for SLMTK2.0
tags: [slmtkbook, SLMTK2.0]

---

# 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}
```



