voice-changer/w_okada's_Voice_Changer_version_2_x.ipynb

379 lines
15 KiB
Plaintext
Raw Normal View History

{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/github/w-okada/voice-changer/blob/v.2/w_okada's_Voice_Changer_version_2_x.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "wNCGmSXbfZRr"
},
"source": [
"### w-okada's Voice Changer version 2.x | **Google Colab**\n",
"\n",
"## READ ME - VERY IMPORTANT\n",
"This is an attempt to run [Realtime Voice Changer](https://github.com/w-okada/voice-changer) on Google Colab, still not perfect but is totally usable, you can use the following settings for better results:\n",
"\n",
"If you're using a index: `f0: RMVPE_ONNX | Chunk: 112 or higher | Extra: 8192`\\\n",
"If you're not using a index: `f0: RMVPE_ONNX | Chunk: 96 or higher | Extra: 16384`\\\n",
"**Don't forget to select your Colab GPU in the GPU field (<b>Tesla T4</b>, for free users)*\n",
"> Seems that PTH models performance better than ONNX for now, you can still try ONNX models and see if it satisfies you\n",
"\n",
"\n",
"*You can always [click here](https://rentry.co/VoiceChangerGuide#gpu-chart-for-known-working-chunkextra\n",
") to check if these settings are up-to-date*\n",
"<br><br>\n",
"\n",
"---\n",
"\n",
"###Always use Colab GPU (**VERY VERY VERY IMPORTANT!**)\n",
"You need to use a Colab GPU so the Voice Changer can work faster and better\\\n",
"Use the menu above and click on **Runtime** » **Change runtime** » **Hardware acceleration** to select a GPU (**T4 is the free one**)\n",
"\n",
"---\n",
"\n",
"\n",
"# **Credits and Support**\n",
"Realtime Voice Changer by [w-okada](https://github.com/w-okada)\\\n",
"Colab files updated by [rafacasari](https://github.com/Rafacasari)\\\n",
"Recommended settings by [Raven](https://github.com/ravencutie21)\\\n",
"Modified again by [Hina](https://github.com/HinaBl)\\\n",
"Enable FCPE by [TheTrustedComputer](https://github.com/TheTrustedComputer)\n",
"\n",
"Need help? [AI Hub Discord](https://discord.gg/aihub) » ***#help-realtime-vc***\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "W2GYWTHWmRIY",
"cellView": "form",
"outputId": "8ee57273-7774-44b6-a955-2f9408e489f1",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"GPU is available\n",
"GPU Name: Tesla T4\n",
"Welcome to ColabMod\n",
"Mounted at /content/drive\n",
"Checking latest version...\n",
"current_version_hash: 1221695f103b2c68f822e61fd5bcfc4c\n",
"latest_version_hash : \n",
"hash not match -> download latest version\n",
" % Total % Received % Xferd Average Speed Time Time Time Current\n",
" Dload Upload Total Spent Left Speed\n",
"100 1155 100 1155 0 0 5130 0 --:--:-- --:--:-- --:--:-- 5133\n",
"100 3027M 100 3027M 0 0 69.7M 0 0:00:43 0:00:43 --:--:-- 42.0M\n",
"Download is done.\n",
"/content/drive/MyDrive/vcclient\n",
"Installing modules... Install is done.\n"
]
}
],
"source": [
"#=================Updated=================\n",
"# @title **[1]** Clone repository and install dependencies\n",
"# @markdown This first step will download the latest version of Voice Changer and install the dependencies. **It can take some time to complete.(~10min)**\n",
"\n",
"#@markdown ---\n",
"# @markdown By using Google Drive, you can avoid re-downloading already downloaded versions.\n",
"\n",
"\n",
"import os\n",
"import time\n",
"import subprocess\n",
"import threading\n",
"import shutil\n",
"import base64\n",
"import codecs\n",
"import torch\n",
"import sys\n",
"\n",
"from typing import Literal, TypeAlias\n",
"\n",
"Mode: TypeAlias = Literal[\"elf\", \"zip\"]\n",
"mode:Mode=\"elf\"\n",
"\n",
"# Configs\n",
"Run_Cell=0\n",
"Use_Drive=True #@param {type:\"boolean\"}\n",
"\n",
"current_version_hash=None\n",
"latest_version_hash=None\n",
"\n",
"# Check GPU\n",
"if torch.cuda.is_available():\n",
" print(\"GPU is available\")\n",
" print(\"GPU Name:\", torch.cuda.get_device_name(0))\n",
"else:\n",
" print(\"GPU is not available\")\n",
" # sys.exit(\"No GPU available. Change runtime.\")\n",
"\n",
"\n",
"notebook_env=0\n",
"if os.path.exists('/content'):\n",
" notebook_env=1\n",
" print(\"Welcome to ColabMod\")\n",
" from google.colab import drive\n",
"\n",
"elif os.path.exists('/kaggle/working'):\n",
" notebook_env=2\n",
" print(\"Welcome to Kaggle Mod\")\n",
"else:\n",
" notebook_env=3\n",
" print(\"Welcome!\")\n",
"\n",
"from IPython.display import clear_output, Javascript\n",
"\n",
"if notebook_env==1 and Use_Drive==True:\n",
" work_dir = \"/content/drive/MyDrive/vcclient\"\n",
" if not os.path.exists('/content/drive'):\n",
" drive.mount('/content/drive')\n",
"\n",
" if not os.path.exists(work_dir):\n",
" !mkdir -p {work_dir}\n",
"\n",
" print(\"Checking latest version...\")\n",
" if os.path.exists(f'{work_dir}/latest_hash.txt'):\n",
" current_version_hash = open(f'{work_dir}/latest_hash.txt').read().strip()\n",
" else:\n",
" current_version_hash = None\n",
"\n",
" !curl -s -L https://huggingface.co/wok000/vcclient000_colab/resolve/main/latest_hash.txt -o latest_hash.txt\n",
" latest_version_hash = open('latest_hash.txt').read().strip()\n",
"\n",
" print(f\"current_version_hash: {current_version_hash}\")\n",
" print(f\"latest_version_hash : {latest_version_hash}\")\n",
"\n",
" if current_version_hash != latest_version_hash:\n",
" print(f\"hash not match -> download latest version\")\n",
"\n",
" latest_hash_path=f'{work_dir}/latest_hash.txt'\n",
"\n",
" if mode == \"elf\":\n",
" !curl -L https://huggingface.co/wok000/vcclient000_colab/resolve/main/vcclient_latest_for_colab -o {work_dir}/vcclient_latest_for_colab\n",
" elif mode == \"zip\":\n",
" !curl -L https://huggingface.co/wok000/vcclient000_colab/resolve/main/vcclient_latest_for_colab.zip -o {work_dir}/vcclient_latest_for_colab.zip\n",
"\n",
" !cp latest_hash.txt {latest_hash_path}\n",
" print(\"Download is done.\")\n",
" else:\n",
" print(\"hash matched. skip download\")\n",
"\n",
"else:\n",
" work_dir = \"/content\"\n",
" print(\"Downloading the latest vcclient... \")\n",
" !curl -s -L https://huggingface.co/wok000/vcclient000_colab/resolve/main/latest_hash.txt -o latest_hash.txt\n",
" latest_version_hash = open('latest_hash.txt').read().strip()\n",
"\n",
" if mode == \"elf\":\n",
" !curl -L https://huggingface.co/wok000/vcclient000_colab/resolve/main/vcclient_latest_for_colab -o {work_dir}/vcclient_latest_for_colab\n",
" elif mode == \"zip\":\n",
" !curl -L https://huggingface.co/wok000/vcclient000_colab/resolve/main/vcclient_latest_for_colab.zip -o {work_dir}/vcclient_latest_for_colab.zip\n",
"\n",
" print(\"Download is done.\")\n",
"\n",
"if current_version_hash != latest_version_hash and mode == \"zip\":\n",
" print(f\"Unzip vcclient to {latest_version_hash} ... \")\n",
" !cd {work_dir} && unzip -q vcclient_latest_for_colab.zip -d {latest_version_hash}\n",
" print(f\"Unzip is done.\")\n",
"\n",
"if mode == \"elf\":\n",
" %cd {work_dir}/{latest_version_hash}\n",
" !chmod 0700 vcclient_latest_for_colab\n",
"elif mode == \"zip\":\n",
" %cd {work_dir}/{latest_version_hash}/main\n",
" !chmod 0700 main\n",
"\n",
"print(\"Installing modules... \",end=\"\")\n",
"!sudo apt-get install -y libportaudio2 > /dev/null 2>&1\n",
"!pip install pyngrok > /dev/null 2>&1\n",
"print(\"Install is done.\")\n",
"\n",
"Run_Cell=1\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "Dbx41M-zlknc",
"cellView": "form",
"outputId": "ae3d8a18-aa4c-4eb2-98aa-11e725cee2bf",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"ngrock ready\n"
]
}
],
"source": [
"PORT=8003\n",
"\n",
"import codecs\n",
"\n",
"# @title **[2]** Start ngrock\n",
"# @markdown This cell will start the ngrok.\n",
"\n",
"# @markdown ---\n",
"# @markdown You'll need a ngrok account, but <font color=green>**it's free**</font> and easy to create!\n",
"# @markdown ---\n",
"# @markdown **1** - Create a <font color=green>**free**</font> account at [ngrok](https://dashboard.ngrok.com/signup) or **login with Google/Github account**\\\n",
"# @markdown **2** - If you didn't logged in with Google/Github, you will need to **verify your e-mail**!\\\n",
"# @markdown **3** - Click [this link](https://dashboard.ngrok.com/get-started/your-authtoken) to get your auth token, and place it here:\n",
"Token = '' # @param {type:\"string\"}\n",
"# @markdown **4** - *(optional)* Change to a region near to you or keep at United States if increase latency\\\n",
"# @markdown `Default Region: ap - Asia/Pacific (Singapore)`\n",
"Region = \"jp - Japan (Tokyo)\" # @param [\"ap - Asia/Pacific (Singapore)\", \"au - Australia (Sydney)\",\"eu - Europe (Frankfurt)\", \"in - India (Mumbai)\",\"jp - Japan (Tokyo)\",\"sa - South America (Sao Paulo)\", \"us - United States (Ohio)\"]\n",
"\n",
"#@markdown **5** - *(optional)* Other options:\n",
"ClearConsole = True # @param {type:\"boolean\"}\n",
"Play_Notification = False # @param {type:\"boolean\"}\n",
"\n",
"# ---------------------------------\n",
"# DO NOT TOUCH ANYTHING DOWN BELOW!\n",
"# ---------------------------------\n",
"\n",
"# Check if Run_Cell\n",
"if 'Run_Cell' not in globals():\n",
" print(\"No, Go back to the first cell and run it\")\n",
" exit\n",
"if Run_Cell == 0:\n",
" print(\"No, Go back to the first cell and run it\")\n",
" exit\n",
"\n",
"\n",
"from pyngrok import conf, ngrok\n",
"MyConfig = conf.PyngrokConfig()\n",
"MyConfig.auth_token = Token\n",
"MyConfig.region = Region[0:2]\n",
"conf.set_default(MyConfig);\n",
"\n",
"from pyngrok import ngrok\n",
"ngrokConnection = ngrok.connect(PORT)\n",
"public_url = ngrokConnection.public_url\n",
"print(f\"ngrock ready\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "s7mYqKtW6VOI",
"cellView": "form",
"outputId": "afa5d810-4904-4422-967e-54ba1642d01a",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"--------- SERVER READY! ---------\n",
"Your server is available. elapsed: 145sec\n",
"https://ae1e-34-125-45-231.ngrok-free.app\n",
"---------------------------------\n"
]
}
],
"source": [
"# @title **[3]** Start server\n",
"# @markdown This cell will start the server, the first time that you run it will download the models, so it can take a while (~1-2 minutes)\n",
"\n",
"LOG_FILE = f\"/content/LOG_FILE_{PORT}\"\n",
"if mode == \"elf\":\n",
" # !LD_LIBRARY_PATH=/usr/lib64-nvidia:/usr/lib/x86_64-linux-gnu ./vcclient_latest_for_colab cui --port {PORT} --no_cui true &\n",
"\n",
" get_ipython().system_raw(f'LD_LIBRARY_PATH=/usr/lib64-nvidia:/usr/lib/x86_64-linux-gnu ./vcclient_latest_for_colab cui --port {PORT} --no_cui true >{LOG_FILE} 2>&1 &')\n",
"elif mode == \"zip\":\n",
" !LD_LIBRARY_PATH=/usr/lib64-nvidia:/usr/lib/x86_64-linux-gnu ./main cui --port {PORT} --no_cui true &\n",
"\n",
"\n",
"import socket\n",
"def wait_for_server():\n",
" elapsed_time = 0\n",
" start_time = time.time()\n",
"\n",
"\n",
" while True:\n",
" time.sleep(1)\n",
" sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n",
" result = sock.connect_ex(('127.0.0.1', PORT))\n",
" if result == 0:\n",
" break\n",
" sock.close()\n",
" # 時刻を出力\n",
" current_time = time.time()\n",
" elapsed_time = int(current_time - start_time)\n",
" clear_output(wait=True)\n",
" print(f\"Waiting for server... elapsed: {elapsed_time}sec\")\n",
" try:\n",
" with open(LOG_FILE, 'r') as f:\n",
" lines = f.readlines()[-5:]\n",
" for line in lines:\n",
" print(line.strip())\n",
" except:\n",
" pass\n",
"\n",
" if ClearConsole:\n",
" clear_output()\n",
" print(\"--------- SERVER READY! ---------\")\n",
" print(f\"Your server is available. elapsed: {elapsed_time}sec\")\n",
" print(public_url)\n",
" print(\"---------------------------------\")\n",
" # if Play_Notification==True:\n",
" # play_notification_sound()\n",
"wait_for_server()\n"
]
},
{
"cell_type": "code",
"source": [],
"metadata": {
"id": "WpjWNYwNXydp"
},
"execution_count": null,
"outputs": []
}
],
"metadata": {
"colab": {
"provenance": [],
"gpuType": "T4",
"authorship_tag": "ABX9TyO6EVNYbFuRgZrxgqHQjwuH",
"include_colab_link": true
},
"kernelspec": {
"display_name": "Python 3",
"name": "python3"
},
"language_info": {
"name": "python"
},
"accelerator": "GPU"
},
"nbformat": 4,
"nbformat_minor": 0
}