{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Q3egrWHAzs7H"
      },
      "source": [
        "# MMVCの学習に必要なconfig系Fileを作成する\n",
        "\n",
        "ver.2022/08/10\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "V61VE7vxLaY3"
      },
      "source": [
        "## 1 概要\n",
        "「Google Colaboratory」を利用した、MMVCの学習を実行するために必要なファイルを生成します。"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "kN0-Tj3TL-T2"
      },
      "source": [
        "## 2 Google Drive をマウント\n",
        "**Google Drive にアップロードした MMVC_Trainer を参照できるように、設定します。**\n",
        "\n",
        "「このノートブックに Google ドライブのファイルへのアクセスを許可しますか?」\n",
        "\n",
        "といったポップアップが表示されるので、「Google ドライブに接続」を押下し、google アカウントを選択して、「許可」を選択してください。\n",
        "\n",
        "成功すれば、下記メッセージが出ます。\n",
        "```\n",
        "Mounted at /content/drive/\n",
        "```\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "hdfce8bPkpMB"
      },
      "outputs": [],
      "source": [
        "from google.colab import drive\n",
        "drive.mount('/content/drive')"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "AXCsRWVLNn0c"
      },
      "source": [
        "cdコマンドを実行して、マウントしたGoogle Drive のMMVC_Trainerディレクトリに移動します。\n",
        "\n",
        "%cd 「MMVC_Trainerをgoogle driveにパップロードしたパス」\n",
        "\n",
        "としてください。\n",
        "\n",
        "正しいパスが指定されていれば\n",
        "\n",
        "-rw------- 1 root root 11780 Mar  4 16:53 attentions.py\n",
        "\n",
        "-rw------- 1 root root  4778 Mar  4 16:53 commons.py\n",
        "\n",
        "drwx------ 2 root root  4096 Mar  5 15:20 configs\n",
        "\n",
        "...といった感じに表示されるはずです。"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "cLxKrVTGkvsq"
      },
      "outputs": [],
      "source": [
        "%cd /content/drive/MyDrive/\n",
        "!ls -la"
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "## 3 事前学習済みモデルのダウンロード\n",
        "\n",
        "fine_model 以下に、事前学習済みモデルをダウンロードします。"
      ],
      "metadata": {
        "id": "fzAFp785nH_R"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "!fileid=\"1MRmB-9EL2-xhxIIraVx20qWqyX-8ZMPw\"; filename=\"fine_model/G_180000.pth\"; html=`curl -c ./cookie -s -L \"https://drive.google.com/uc?export=download&id=${fileid}\"`; curl -Lb ./cookie \"https://drive.google.com/uc?export=download&`echo ${html}|grep -Po '(confirm=[a-zA-Z0-9\\-_]+)'`&id=${fileid}\" -o ${filename}\n",
        "!fileid=\"1oPbMM7cGz-z0fLgj7DW_wPGRCwvgD2jZ\"; filename=\"fine_model/D_180000.pth\"; html=`curl -c ./cookie -s -L \"https://drive.google.com/uc?export=download&id=${fileid}\"`; curl -Lb ./cookie \"https://drive.google.com/uc?export=download&`echo ${html}|grep -Po '(confirm=[a-zA-Z0-9\\-_]+)'`&id=${fileid}\" -o ${filename}"
      ],
      "metadata": {
        "id": "oLtpgNckjreW"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "FS1ttfpyPckq"
      },
      "source": [
        "## 4 必要なライブラリのインストール\n",
        "\n",
        "何も考えず実行してください。"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "XDLDiK1Sk3uZ"
      },
      "outputs": [],
      "source": [
        "!pip install pyopenjtalk"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "jX2VRWu4Pvqy"
      },
      "source": [
        "## 5 MMVCの学習に必要なconfig系Fileを作成する\n",
        "\n",
        "学習に必要なファイルを実行します。  \n",
        "オプションは-f -s -tがあります。普通に使う際には-cは不要です。  \n",
        "-f 作成するconfig系Fileの名前です。よくわからない人は変更不要です。  \n",
        "-s サンプリングレートです。datasetの音声のサンプリングレートに合わせて指定ください。よくわからない人は変更不要です。  \n",
        "-t 既にモデルに学習されているデータの場合利用します。ずんだもんの場合は「100」 それ以外のサポートキャラは「101~103」 非サポートキャラは「108」を指定します。\n",
        "\n",
        "\n",
        "実行時に  \n",
        "**「WARNING: JPCommonLabel_insert_pause() in jpcommon_label.c: First mora should not be short pause.」**  \n",
        "と表示されますが、無視して大丈夫です。 \n",
        "\n",
        "「filelists」ディレクトリに  \n",
        "「指定したconfig系Fileの名前_textful.txt」  \n",
        "「指定したconfig系Fileの名前_textful_val.txt」  \n",
        "「指定したconfig系Fileの名前_textless.txt」  \n",
        "「指定したconfig系Fileの名前_val_textless.txt」  \n",
        "「指定したconfig系Fileの名前_Correspondence.txt」  \n",
        "上記5ファイル\n",
        "\n",
        "「configs」ディレクトリに  \n",
        "「指定したconfig系Fileの名前.json」  \n",
        "上記1ファイルが生成されていれば、成功です。 \n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "### 5.1 チュートリアル:ずんだもんになる\n",
        "下記セルを実行してください。"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "qbh1TvLRk5pu"
      },
      "outputs": [],
      "source": [
        "!python create_dataset_jtalk.py -f train_config_zundamon -s 24000 -t 100"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "j0vi8pdVggbY"
      },
      "source": [
        "### 5.2 ずんだもん以外の話者の学習を行う\n",
        "ずんだもん以外の話者の学習を行う場合、下記セルを実行してください。  \n",
        "**九州そらの学習を行いたい場合、「108」を「101」に  \n",
        "四国めたんの学習を行いたい場合、「108」を「102」に  \n",
        "春日部つむぎの学習を行いたい場合、「108」を「103」に**  \n",
        "設定するとクオリティがあがる**かも**しれません。"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "HkN9EC7aggbZ"
      },
      "outputs": [],
      "source": [
        "!python create_dataset_jtalk.py -f train_config -s 24000 -t 108"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "### 5.3 応用編 同時に複数話者の学習を行う\n",
        "複数の話者を同時に学習したい場合、下記セルを実行してください。  \n",
        "multi_speaker_correspondence.txt を下記フォーマットに任意に書き換えて、実行してください。  \n",
        "textful配下のディレクトリ名|0~109の番号  "
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "!python create_dataset_jtalk.py -f train_config_test -s 24000 -m dataset/multi_speaker_correspondence.txt"
      ]
    }
  ],
  "metadata": {
    "colab": {
      "collapsed_sections": [],
      "name": "01_Create_Configfile.ipynb",
      "provenance": []
    },
    "kernelspec": {
      "display_name": "Python 3.9.6 64-bit",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "name": "python",
      "version": "3.9.6"
    },
    "vscode": {
      "interpreter": {
        "hash": "d3394867249fd41ee68869925f4586b97ae8a94f3c93a4c25403e9e75f272611"
      }
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}