{ "cells": [ { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "view-in-github" }, "source": [ "\"Open" ] }, { "cell_type": "markdown", "metadata": { "id": "Lbbmx_Vjl0zo" }, "source": [ "### [w-okada's Voice Changer](https://github.com/w-okada/voice-changer) | **Kaggle**\n", "\n", "---\n", "\n", "## **⬇ VERY IMPORTANT ⬇**\n", "\n", "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 a GPU in the GPU field, NEVER use CPU!\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://github.com/YunaOneeChan/Voice-Changer-Settings) to check if these settings are up-to-date*\n", "\n", "---\n", "**Credits**
\n", "Realtime Voice Changer by [w-okada](https://github.com/w-okada)
\n", "Notebook files updated by [rafacasari](https://github.com/Rafacasari)
\n", "Recommended settings by [YunaOneeChan](https://github.com/YunaOneeChan)\n", "\n", "**Need help?** [AI Hub Discord](https://discord.gg/aihub) » ***#help-realtime-vc***\n", "\n", "---" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Kaggle Tutorial\n", "Running this notebook can be a bit complicated.\\\n", "After created your Kaggle account, you'll need to **verify your phone number** to be able to use Internet Connection and GPUs.\\\n", "Follow the instructions on the image below.\n", "\n", "## *You can use GPU P100 instead of GPU T4, some people are telling that P100 is better.*\n", "![instructions.png](https://i.imgur.com/0NutkD8.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Clone repository and install dependencies\n", "This first step will download the latest version of Voice Changer and install the dependencies. **It will take some time to complete.**" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "_kg_hide-output": false, "cellView": "form", "execution": { "iopub.execute_input": "2023-09-14T04:01:17.308682Z", "iopub.status.busy": "2023-09-14T04:01:17.308284Z", "iopub.status.idle": "2023-09-14T04:08:08.475375Z", "shell.execute_reply": "2023-09-14T04:08:08.473827Z", "shell.execute_reply.started": "2023-09-14T04:01:17.308652Z" }, "id": "86wTFmqsNMnD", "trusted": true }, "outputs": [], "source": [ "# This will make that we're on the right folder before installing\n", "%cd /kaggle/working/\n", "\n", "!pip install colorama --quiet\n", "from colorama import Fore, Style\n", "import os\n", "\n", "print(f\"{Fore.CYAN}> Cloning the repository...{Style.RESET_ALL}\")\n", "!git clone https://github.com/w-okada/voice-changer.git --quiet\n", "print(f\"{Fore.GREEN}> Successfully cloned the repository!{Style.RESET_ALL}\")\n", "%cd voice-changer/server/\n", "\n", "print(f\"{Fore.CYAN}> Installing libportaudio2...{Style.RESET_ALL}\")\n", "!apt-get -y install libportaudio2 -qq\n", "\n", "print(f\"{Fore.CYAN}> Installing pre-dependencies...{Style.RESET_ALL}\")\n", "# Install dependencies that are missing from requirements.txt and pyngrok\n", "!pip install faiss-gpu fairseq pyngrok --quiet\n", "!pip install pyworld --no-build-isolation --quiet\n", "print(f\"{Fore.CYAN}> Installing dependencies from requirements.txt...{Style.RESET_ALL}\")\n", "!pip install -r requirements.txt --quiet\n", "\n", "# Download the default settings ^-^\n", "if not os.path.exists(\"/kaggle/working/voice-changer/server/stored_setting.json\"):\n", " !wget -q https://gist.githubusercontent.com/Rafacasari/d820d945497a01112e1a9ba331cbad4f/raw/8e0a426c22688b05dd9c541648bceab27e422dd6/kaggle_setting.json -O /kaggle/working/voice-changer/server/stored_setting.json\n", "print(f\"{Fore.GREEN}> Successfully installed all packages!{Style.RESET_ALL}\")\n", "\n", "print(f\"{Fore.GREEN}> You can safely ignore the dependency conflict errors, it's a error from Kaggle and don't interfer on Voice Changer!{Style.RESET_ALL}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Start Server **using ngrok**\n", "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", "---\n", "You'll need a ngrok account, but **it's free** and easy to create!\n", "---\n", "**1** - Create a **free** account at [ngrok](https://dashboard.ngrok.com/signup)\\\n", "**2** - If you didn't logged in with Google or Github, you will need to **verify your e-mail**!\\\n", "**3** - Click [this link](https://dashboard.ngrok.com/get-started/your-authtoken) to get your auth token, and replace **YOUR_TOKEN_HERE** with your token.\\\n", "**4** - *(optional)* Change to a region near to you" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "_kg_hide-input": false, "cellView": "form", "id": "lLWQuUd7WW9U", "scrolled": true, "trusted": true }, "outputs": [], "source": [ "# ---------------------------------\n", "# SETTINGS\n", "# ---------------------------------\n", "\n", "Token = '2Tn2hbfLtw2ii6DHEJy7SsM1BjI_21G14MXSwz7qZSDL2Dv3B'\n", "ClearConsole = True # Clear console after initialization. Set to False if you are having some error, then you will be able to report it.\n", "Region = \"sa\" # Read the instructions below\n", "\n", "# You can change the region for a better latency, use only the abbreviation\n", "# Choose between this options:\n", "# us -> United States (Ohio)\n", "# ap -> Asia/Pacific (Singapore)\n", "# au -> Australia (Sydney)\n", "# eu -> Europe (Frankfurt)\n", "# in -> India (Mumbai)\n", "# jp -> Japan (Tokyo)\n", "# sa -> South America (Sao Paulo)\n", "\n", "# ---------------------------------\n", "# DO NOT TOUCH ANYTHING DOWN BELOW!\n", "# ---------------------------------\n", "\n", "%cd /kaggle/working/voice-changer/server\n", "\n", "from pyngrok import conf, ngrok\n", "MyConfig = conf.PyngrokConfig()\n", "MyConfig.auth_token = Token\n", "MyConfig.region = Region\n", "#conf.get_default().authtoken = Token\n", "#conf.get_default().region = Region\n", "conf.set_default(MyConfig);\n", "\n", "import subprocess, threading, time, socket, urllib.request\n", "PORT = 8000\n", "\n", "from pyngrok import ngrok\n", "ngrokConnection = ngrok.connect(PORT)\n", "public_url = ngrokConnection.public_url\n", "\n", "from IPython.display import clear_output\n", "\n", "def wait_for_server():\n", " while True:\n", " time.sleep(0.5)\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", " if ClearConsole:\n", " clear_output()\n", " print(\"--------- SERVER READY! ---------\")\n", " print(\"Your server is available at:\")\n", " print(public_url)\n", " print(\"---------------------------------\")\n", "\n", "threading.Thread(target=wait_for_server, daemon=True).start()\n", "\n", "!python3 MMVCServerSIO.py \\\n", " -p {PORT} \\\n", " --https False \\\n", " --content_vec_500 pretrain/checkpoint_best_legacy_500.pt \\\n", " --content_vec_500_onnx pretrain/content_vec_500.onnx \\\n", " --content_vec_500_onnx_on true \\\n", " --hubert_base pretrain/hubert_base.pt \\\n", " --hubert_base_jp pretrain/rinna_hubert_base_jp.pt \\\n", " --hubert_soft pretrain/hubert/hubert-soft-0d54a1f4.pt \\\n", " --nsf_hifigan pretrain/nsf_hifigan/model \\\n", " --crepe_onnx_full pretrain/crepe_onnx_full.onnx \\\n", " --crepe_onnx_tiny pretrain/crepe_onnx_tiny.onnx \\\n", " --rmvpe pretrain/rmvpe.pt \\\n", " --model_dir model_dir \\\n", " --samples samples.json \\\n", " --allowed-origins \"*\"\n", "\n", "ngrok.disconnect(ngrokConnection.public_url)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.12" } }, "nbformat": 4, "nbformat_minor": 4 }