voice-changer/Kaggle_RealtimeVoiceChanger.ipynb

244 lines
11 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "view-in-github"
},
"source": [
"<a href=\"https://www.kaggle.com/code/rafacasari/wokada-voice-changer\" target=\"_parent\"><img src=\"https://img.shields.io/badge/Open%20In%20Kaggle-035a7d?style=for-the-badge&logo=kaggle&logoColor=white\" alt=\"Open In Colab\"/></a>"
]
},
{
"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`<br>\n",
"If you're not using a index: `f0: RMVPE_ONNX | Chunk: 96 or higher | Extra: 16384`<br>\n",
"**Don't forget to select a GPU in the GPU field, <b>NEVER</b> 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**<br>\n",
"Realtime Voice Changer by [w-okada](https://github.com/w-okada)<br>\n",
"Notebook files updated by [rafacasari](https://github.com/Rafacasari)<br>\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",
"## <font color=blue>*You can use <b>GPU P100</b> instead of GPU T4, some people are telling that <b>P100 is better</b>.*</font>\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 <font color=green>**it's free**</font> 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
}