{
"cells": [
{
"cell_type": "markdown",
"id": "recovered-superintendent",
"metadata": {
"tags": []
},
"source": [
"# 第8章 日本語 WaveNet 音声合成システムの実装\n",
"\n",
"[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/r9y9/ttslearn/blob/master/notebooks/ch08_Recipe-WaveNet.ipynb)\n",
"\n",
"Google colabでの実行における推定所要時間: 5時間\n",
"\n",
"このノートブックに記載のレシピの設定は、Google Colab上で実行した場合のタイムアウトを避けるため、学習条件を書籍に記載の設定から一部修正していることに注意してください (バッチサイズを減らす等)。\n",
"参考までに、書籍に記載の条件で、著者 (山本) がレシピを実行した結果を以下で公開しています。\n",
"\n",
"- Tensorboard logs: https://tensorboard.dev/experiment/yXyg9qgfQRSGxvil5FA4xw/\n",
"- expディレクトリ(学習済みモデル、合成音声を含む) : https://drive.google.com/file/d/1cuDxWW0KIUJLzY5Gvk3I_u8VL4bacBq0/view?usp=sharing (135.2 MB)"
]
},
{
"cell_type": "markdown",
"id": "communist-charter",
"metadata": {},
"source": [
"## 準備"
]
},
{
"cell_type": "markdown",
"id": "super-terminology",
"metadata": {},
"source": [
"### Google Colabを利用する場合"
]
},
{
"cell_type": "markdown",
"id": "oriental-daisy",
"metadata": {},
"source": [
"Google Colab上でこのノートブックを実行する場合は、メニューの「ランタイム -> ランタイムのタイムの変更」から、「ハードウェア アクセラレータ」を **GPU** に変更してください。"
]
},
{
"cell_type": "markdown",
"id": "touched-teach",
"metadata": {},
"source": [
"### Python version"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "prerequisite-living",
"metadata": {
"execution": {
"iopub.execute_input": "2021-08-21T07:41:41.080605Z",
"iopub.status.busy": "2021-08-21T07:41:41.080314Z",
"iopub.status.idle": "2021-08-21T07:41:41.197156Z",
"shell.execute_reply": "2021-08-21T07:41:41.196727Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Python 3.8.6 | packaged by conda-forge | (default, Dec 26 2020, 05:05:16) \r\n",
"[GCC 9.3.0]\r\n"
]
}
],
"source": [
"!python -VV"
]
},
{
"cell_type": "markdown",
"id": "gorgeous-friday",
"metadata": {},
"source": [
"### ttslearn のインストール"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "previous-shannon",
"metadata": {
"execution": {
"iopub.execute_input": "2021-08-21T07:41:41.200551Z",
"iopub.status.busy": "2021-08-21T07:41:41.200257Z",
"iopub.status.idle": "2021-08-21T07:41:42.078786Z",
"shell.execute_reply": "2021-08-21T07:41:42.079019Z"
},
"tags": []
},
"outputs": [],
"source": [
"%%capture\n",
"try:\n",
" import ttslearn\n",
"except ImportError:\n",
" !pip install ttslearn"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "impressed-california",
"metadata": {
"execution": {
"iopub.execute_input": "2021-08-21T07:41:42.083973Z",
"iopub.status.busy": "2021-08-21T07:41:42.083694Z",
"iopub.status.idle": "2021-08-21T07:41:42.085387Z",
"shell.execute_reply": "2021-08-21T07:41:42.085669Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"'0.2.1'"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import ttslearn\n",
"ttslearn.__version__"
]
},
{
"cell_type": "markdown",
"id": "secure-marker",
"metadata": {},
"source": [
"## 8.1 本章の日本語音声合成システムの実装"
]
},
{
"cell_type": "markdown",
"id": "tight-marker",
"metadata": {},
"source": [
"### 学習済みモデルを用いた音声合成"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "genetic-beatles",
"metadata": {
"execution": {
"iopub.execute_input": "2021-08-21T07:41:42.087874Z",
"iopub.status.busy": "2021-08-21T07:41:42.087588Z",
"iopub.status.idle": "2021-08-21T07:44:22.586218Z",
"shell.execute_reply": "2021-08-21T07:44:22.586560Z"
}
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "8ac29127e47340bb93830fb88cde6e99",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/37440 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
" \n",
" "
],
"text/plain": [
""
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from ttslearn.wavenet import WaveNetTTS\n",
"from tqdm.notebook import tqdm\n",
"from IPython.display import Audio\n",
"\n",
"engine = WaveNetTTS()\n",
"wav, sr = engine.tts(\"ウェーブネットにチャレンジしましょう!\", tqdm=tqdm)\n",
"Audio(wav, rate=sr)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "explicit-commissioner",
"metadata": {
"execution": {
"iopub.execute_input": "2021-08-21T07:44:22.588989Z",
"iopub.status.busy": "2021-08-21T07:44:22.588641Z",
"iopub.status.idle": "2021-08-21T07:44:22.947691Z",
"shell.execute_reply": "2021-08-21T07:44:22.947400Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"