diff --git a/.devcontainer/dev/Dockerfile b/.devcontainer/dev/Dockerfile
index 820bcae20fc45c66d470b25a290209550c0f6034..9b730994b8161564246e40f8751230ffcdb4ff5e 100644
--- a/.devcontainer/dev/Dockerfile
+++ b/.devcontainer/dev/Dockerfile
@@ -1,9 +1,10 @@
-FROM mcr.microsoft.com/devcontainers/python:1-3.12-bookworm
+FROM mcr.microsoft.com/devcontainers/python:1-3.10-bookworm
RUN <requirements.txt
+ poetry install --only=ci --no-root -q
+ PATH=$(poetry env info --path)/bin:$PATH
+ huggingface-cli login --token ${{ secrets.hf_token }}
+ gradio deploy
diff --git a/.gitignore b/.gitignore
index 6e78500bf5558360abac435294ba8f3bcdaae0c1..7dbff9c3ea541d8166d94d38d835a2a9df361360 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,22 @@
__pycache__/
*.pyc
.env
+*.exe
+*.pt
+*.onnx
+*.pth
+*.index
+*.mp3
+*.flac
+*.ogg
+*.m4a
+*.bin
+*.wav
+*.zip
+*.png
+*.safetensors
+
+logs
+env
+venv
+rvc/models
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 06f773e80c5739a629aa16274cb34b5ec4e0cc57..c6b8bb9bb8551557f30bb9031b9faa156f91346b 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -2,8 +2,8 @@ repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v5.0.0
hooks:
- - id: trailing-whitespace
- - id: end-of-file-fixer
+ # - id: trailing-whitespace
+ # - id: end-of-file-fixer
- id: check-yaml
- id: check-added-large-files
@@ -18,12 +18,12 @@ repos:
- id: yamlfmt
args: ["-formatter", "indentless_arrays=true,trim_trailing_whitespace=true,retain_line_breaks_single=true"]
-- repo: https://github.com/astral-sh/ruff-pre-commit
- rev: v0.7.4
- hooks:
- - id: ruff
- args: [--fix]
- - id: ruff-format
+# - repo: https://github.com/astral-sh/ruff-pre-commit
+# rev: v0.7.4
+# hooks:
+# - id: ruff
+# args: [--fix]
+# - id: ruff-format
- repo: local
hooks:
diff --git a/.vscode/launch.json b/.vscode/launch.json
index 6a211d8e2ab0da5c8910e5345ead244cd5880d94..eabaaf64b7269bc86c4c7f01deb937997e42a511 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -5,11 +5,13 @@
"version": "0.2.0",
"configurations": [
{
- "name": "Python Debugger: Current File",
+ "name": "App",
"type": "debugpy",
"request": "launch",
- "program": "${file}",
- "console": "integratedTerminal"
+ "program": "tts_service/app.py",
+ "args": ["--open"],
+ "console": "integratedTerminal",
+ "justMyCode": false
}
]
}
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 87e0dd0c357ea633bf1589c207aaf276ebe123cf..f3509e1afd56cc7cf8f69183da443b4b7961346e 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,12 +1,12 @@
{
"editor.codeActionsOnSave": {
- "source.organizeImports": "always",
- "source.unusedImports": "always"
+ "source.organizeImports": "never",
+ "source.unusedImports": "never"
},
"editor.detectIndentation": false,
"editor.formatOnPaste": true,
- "editor.formatOnSave": true,
- "editor.formatOnSaveMode": "file",
+ "editor.formatOnSave": false,
+ "editor.formatOnSaveMode": "modifications",
"editor.formatOnType": true,
"editor.renderWhitespace": "all",
"editor.rulers": [132],
diff --git a/README.md b/README.md
index c43e29524a5a320548e84ad6737eef1a1d8f2a88..9bc83249cb0661944eb0c8252e18b5e3b71c0e1b 100644
--- a/README.md
+++ b/README.md
@@ -2,5 +2,5 @@
title: tts-service
app_file: tts_service/app.py
sdk: gradio
-sdk_version: 5.6.0
+sdk_version: 4.43.0
---
diff --git a/assets/Applio.ipynb b/assets/Applio.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..48099fb3c04e969e6ba90a1cb022b0c8a5813afa
--- /dev/null
+++ b/assets/Applio.ipynb
@@ -0,0 +1,453 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "ymhGfgFSR17k"
+ },
+ "source": [
+ "## **Applio**\n",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.\n",
+ "\n",
+ "[Support](https://discord.gg/urxFjYmYYh) — [Discord Bot](https://discord.com/oauth2/authorize?client_id=1144714449563955302&permissions=1376674695271&scope=bot%20applications.commands) — [Find Voices](https://applio.org/models) — [GitHub](https://github.com/IAHispano/Applio)\n",
+ "\n",
+ " \n",
+ "\n",
+ "### **Credits**\n",
+ "- Encryption method: [Hina](https://github.com/hinabl)\n",
+ "- Extra section: [Poopmaster](https://github.com/poiqazwsx)\n",
+ "- Main development: [Applio Team](https://github.com/IAHispano)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "cellView": "form",
+ "id": "vtON700qokuQ"
+ },
+ "outputs": [],
+ "source": [
+ "# @title **Install Applio**\n",
+ "import os\n",
+ "import codecs\n",
+ "import shutil\n",
+ "import tarfile\n",
+ "import subprocess\n",
+ "\n",
+ "from pathlib import Path\n",
+ "from IPython.display import clear_output\n",
+ "\n",
+ "rot_47 = lambda encoded_text: \"\".join(\n",
+ " [\n",
+ " (\n",
+ " chr(\n",
+ " (ord(c) - (ord(\"a\") if c.islower() else ord(\"A\")) - 47) % 26\n",
+ " + (ord(\"a\") if c.islower() else ord(\"A\"))\n",
+ " )\n",
+ " if c.isalpha()\n",
+ " else c\n",
+ " )\n",
+ " for c in encoded_text\n",
+ " ]\n",
+ ")\n",
+ "\n",
+ "org_name = rot_47(\"Vkkgdj\")\n",
+ "new_name = rot_47(\"kmjbmvh_hg\")\n",
+ "uioawhd = rot_47(codecs.decode(\"pbbxa://oqbpcj.kwu/QIPqaxivw/Ixxtqw.oqb\", \"rot_13\"))\n",
+ "uyadwa = codecs.decode(\"ncc.cl\", \"rot_13\")\n",
+ "A = \"/content/\" + rot_47(\"Kikpm.ovm.bu\")\n",
+ "!git clone --depth 1 $uioawhd $new_name --branch 3.2.7 --single-branch\n",
+ "%cd $new_name/\n",
+ "clear_output()\n",
+ "def vidal_setup():\n",
+ " A = \"/content/\" + rot_47(\"Kikpm.ovm.bu\")\n",
+ "\n",
+ " D = \"/\"\n",
+ " if not os.path.exists(A):\n",
+ " M = os.path.dirname(A)\n",
+ " os.makedirs(M, exist_ok=True)\n",
+ " print(\"No cached install found..\")\n",
+ " try:\n",
+ " N = codecs.decode(\n",
+ " \"uggcf://uhttvatsnpr.pb/VNUvfcnab/Nccyvb/erfbyir/znva/Raivebzrag/Pbyno/Cache.gne.tm\",\n",
+ " \"rot_13\",\n",
+ " )\n",
+ " subprocess.run([\"wget\", \"-O\", A, N])\n",
+ " print(\"Download completed successfully!\")\n",
+ " except Exception as H:\n",
+ " print(str(H))\n",
+ " if os.path.exists(A):\n",
+ " os.remove(A)\n",
+ " if Path(A).exists():\n",
+ " with tarfile.open(A, \"r:gz\") as I:\n",
+ " I.extractall(D)\n",
+ " print(f\"Extraction of {A} to {D} completed.\")\n",
+ " if os.path.exists(A):\n",
+ " os.remove(A)\n",
+ "\n",
+ "vidal_setup()\n",
+ "!pip uninstall torch torchvision torchaudio -y\n",
+ "!pip install pydantic==2.8.2 fastapi==0.112.0 starlette==0.37.2\n",
+ "!pip install torch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 --upgrade --index-url https://download.pytorch.org/whl/cu121\n",
+ "clear_output()\n",
+ "print(\"Finished installing requirements! \")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "cellView": "form",
+ "id": "-7cQtXouqpQi"
+ },
+ "outputs": [],
+ "source": [
+ "# @title **Start Applio**\n",
+ "# @markdown ### Just activate this in case the share link of the gradio dont work\n",
+ "import codecs\n",
+ "import threading\n",
+ "import urllib.request\n",
+ "import time\n",
+ "import ipywidgets as widgets\n",
+ "from IPython.display import display\n",
+ "import os\n",
+ "os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'\n",
+ "!npm install -g localtunnel &>/dev/null\n",
+ "share_tunnel = False # @param {type:\"boolean\"}\n",
+ "def start_applio():\n",
+ " if share_tunnel:\n",
+ " !python $uyadwa --listen\n",
+ " else:\n",
+ " !python $uyadwa --listen --share\n",
+ "\n",
+ "%load_ext tensorboard\n",
+ "%reload_ext tensorboard\n",
+ "%tensorboard --logdir logs --bind_all\n",
+ "\n",
+ "if \"autobackups\" not in globals():\n",
+ " autobackups = False\n",
+ "\n",
+ "if autobackups:\n",
+ " thread = threading.Thread(target=backup_files)\n",
+ " thread.start()\n",
+ "\n",
+ "thread_applio = threading.Thread(target=start_applio)\n",
+ "thread_applio.start()\n",
+ "\n",
+ "if share_tunnel:\n",
+ " if not os.path.exists(codecs.decode(\"eip/zbqryf/cergenvarqf/cergenvarq_i2/s0T48x.cgu\", \"rot_13\")):\n",
+ " while not os.path.exists(codecs.decode(\"eip/zbqryf/cergenvarqf/cergenvarq_i2/s0T48x.cgu\", \"rot_13\")):\n",
+ " time.sleep(2)\n",
+ " time.sleep(5)\n",
+ " else:\n",
+ " time.sleep(10)\n",
+ " with open('url.txt', 'w') as file:\n",
+ " file.write('')\n",
+ "\n",
+ " get_ipython().system_raw('lt --port 6969 >> url.txt 2>&1 &')\n",
+ "\n",
+ " time.sleep(4)\n",
+ "\n",
+ " endpoint_ip = urllib.request.urlopen('https://ipv4.icanhazip.com').read().decode('utf8').strip(\"\\n\")\n",
+ "\n",
+ " with open('url.txt', 'r') as file:\n",
+ " tunnel_url = file.read()\n",
+ " tunnel_url = tunnel_url.replace(\"your url is: \", \"\")\n",
+ "\n",
+ " print(f\"Share Link: \\033[0m\\033[93m{tunnel_url}\\033[0m\", end=\"\\033[0m\\n\")\n",
+ "\n",
+ " password_endpoint_widget = widgets.Text(\n",
+ " value=endpoint_ip,\n",
+ " description='Password IP:',\n",
+ " disabled=True\n",
+ " )\n",
+ " display(password_endpoint_widget)\n",
+ "\n",
+ "\n",
+ "\n",
+ "while True:\n",
+ " time.sleep(5)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "3b59-2x-qEnX"
+ },
+ "source": [
+ "### **Extra**\n",
+ "Enjoy extra options that can make it easier for you to use Applio\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "cellView": "form",
+ "id": "19LNv6iYqF6_"
+ },
+ "outputs": [],
+ "source": [
+ "# @title Mount Drive\n",
+ "# @markdown Mount the files from Google Drive to the Colab.\n",
+ "from google.colab import drive\n",
+ "\n",
+ "drive.mount(\"/content/drive\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "cellView": "form",
+ "id": "I5o6MlpFouiG"
+ },
+ "outputs": [],
+ "source": [
+ "# @title Auto Backup\n",
+ "# @markdown When running it, it will be activated or deactivated previously to start up together with Applio.\n",
+ "import os\n",
+ "import shutil\n",
+ "import time\n",
+ "\n",
+ "LOGS_FOLDER = \"/content/program_ml/logs/\"\n",
+ "GOOGLE_DRIVE_PATH = \"/content/drive/MyDrive/ApplioBackup\"\n",
+ "\n",
+ "if \"autobackups\" not in globals():\n",
+ " autobackups = False\n",
+ "\n",
+ "cooldown = 15 # @param {type:\"slider\", min:0, max:100, step:0}\n",
+ "def backup_files():\n",
+ " print(\"\\nStarting backup loop...\")\n",
+ " last_backup_timestamps_path = os.path.join(\n",
+ " LOGS_FOLDER, \"last_backup_timestamps.txt\"\n",
+ " )\n",
+ " fully_updated = False\n",
+ "\n",
+ " while True:\n",
+ " try:\n",
+ " updated_files = 0\n",
+ " deleted_files = 0\n",
+ " new_files = 0\n",
+ " last_backup_timestamps = {}\n",
+ "\n",
+ " try:\n",
+ " with open(last_backup_timestamps_path, \"r\") as f:\n",
+ " last_backup_timestamps = dict(line.strip().split(\":\") for line in f)\n",
+ " except FileNotFoundError:\n",
+ " pass\n",
+ "\n",
+ " for root, dirs, files in os.walk(LOGS_FOLDER):\n",
+ " # Excluding \"zips\" and \"mute\" directories\n",
+ " if \"zips\" in dirs:\n",
+ " dirs.remove(\"zips\")\n",
+ " if \"mute\" in dirs:\n",
+ " dirs.remove(\"mute\")\n",
+ "\n",
+ " for filename in files:\n",
+ " if filename != \"last_backup_timestamps.txt\":\n",
+ " filepath = os.path.join(root, filename)\n",
+ " if os.path.isfile(filepath):\n",
+ " backup_filepath = os.path.join(\n",
+ " GOOGLE_DRIVE_PATH,\n",
+ " os.path.relpath(filepath, LOGS_FOLDER),\n",
+ " )\n",
+ " backup_folderpath = os.path.dirname(backup_filepath)\n",
+ " if not os.path.exists(backup_folderpath):\n",
+ " os.makedirs(backup_folderpath)\n",
+ " last_backup_timestamp = last_backup_timestamps.get(filepath)\n",
+ " current_timestamp = os.path.getmtime(filepath)\n",
+ " if (\n",
+ " last_backup_timestamp is None\n",
+ " or float(last_backup_timestamp) < current_timestamp\n",
+ " ):\n",
+ " shutil.copy2(filepath, backup_filepath)\n",
+ " last_backup_timestamps[filepath] = str(current_timestamp)\n",
+ " if last_backup_timestamp is None:\n",
+ " new_files += 1\n",
+ " else:\n",
+ " updated_files += 1\n",
+ "\n",
+ "\n",
+ " for filepath in list(last_backup_timestamps.keys()):\n",
+ " if not os.path.exists(filepath):\n",
+ " backup_filepath = os.path.join(\n",
+ " GOOGLE_DRIVE_PATH, os.path.relpath(filepath, LOGS_FOLDER)\n",
+ " )\n",
+ " if os.path.exists(backup_filepath):\n",
+ " os.remove(backup_filepath)\n",
+ " deleted_files += 1\n",
+ " del last_backup_timestamps[filepath]\n",
+ "\n",
+ "\n",
+ " if updated_files > 0 or deleted_files > 0 or new_files > 0:\n",
+ " print(f\"Backup Complete: {new_files} new, {updated_files} updated, {deleted_files} deleted.\")\n",
+ " fully_updated = False\n",
+ " elif not fully_updated:\n",
+ " print(\"Files are up to date.\")\n",
+ " fully_updated = True\n",
+ "\n",
+ " with open(last_backup_timestamps_path, \"w\") as f:\n",
+ " for filepath, timestamp in last_backup_timestamps.items():\n",
+ " f.write(f\"{filepath}:{timestamp}\\n\")\n",
+ "\n",
+ " time.sleep(cooldown if fully_updated else 0.1)\n",
+ "\n",
+ "\n",
+ " except Exception as error:\n",
+ " print(f\"An error occurred during backup: {error}\")\n",
+ "\n",
+ "\n",
+ "if autobackups:\n",
+ " autobackups = False\n",
+ " print(\"Autobackup Disabled\")\n",
+ "else:\n",
+ " autobackups = True\n",
+ " print(\"Autobackup Enabled\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "cellView": "form",
+ "id": "-vIzj7pye8Z0"
+ },
+ "outputs": [],
+ "source": [
+ "# @title Setup new logs folder format\n",
+ "# @markdown Put the exact name you put as your Model Name in Applio.\n",
+ "modelname = \"My-Project\" # @param {type:\"string\"}\n",
+ "logs_folder = f\"/content/program_ml/logs/{modelname}/\"\n",
+ "\n",
+ "import os\n",
+ "\n",
+ "folder_renames = {\n",
+ " \"0_gt_wavs\": \"sliced_audios\",\n",
+ " \"1_16k_wavs\": \"sliced_audios_16k\",\n",
+ " \"2a_f0\": \"f0\",\n",
+ " \"2b-f0nsf\": \"f0_voiced\",\n",
+ " \"3_feature768\": \"v2_extracted\"\n",
+ "}\n",
+ "\n",
+ "def rename_folders(base_path, rename_dict):\n",
+ " for old_name, new_name in rename_dict.items():\n",
+ " old_path = os.path.join(base_path, old_name)\n",
+ " new_path = os.path.join(base_path, new_name)\n",
+ " if os.path.exists(old_path):\n",
+ " os.rename(old_path, new_path)\n",
+ " print(f\"Renamed {old_path} to {new_path}\")\n",
+ " else:\n",
+ " print(f\"Folder {old_path} does not exist\")\n",
+ "\n",
+ "rename_folders(logs_folder, folder_renames)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "cellView": "form",
+ "id": "ifV_vc4h4Uvx"
+ },
+ "outputs": [],
+ "source": [
+ "# @title Load a Backup\n",
+ "from google.colab import drive\n",
+ "import os\n",
+ "\n",
+ "# @markdown Put the exact name you put as your Model Name in Applio.\n",
+ "modelname = \"My-Project\" # @param {type:\"string\"}\n",
+ "source_path = \"/content/drive/MyDrive/ApplioBackup/\" + modelname\n",
+ "destination_path = \"/content/program_ml/logs/\" + modelname\n",
+ "backup_timestamps_file = \"last_backup_timestamps.txt\"\n",
+ "if not os.path.exists(source_path):\n",
+ " print(\n",
+ " \"The model folder does not exist. Please verify the name is correct or check your Google Drive.\"\n",
+ " )\n",
+ "else:\n",
+ " time_ = os.path.join(\"/content/drive/MyDrive/ApplioBackup/\", backup_timestamps_file)\n",
+ " time__ = os.path.join(\"/content/program_ml/logs/\", backup_timestamps_file)\n",
+ " if os.path.exists(time_):\n",
+ " shutil.copy(time_, time__)\n",
+ " shutil.copytree(source_path, destination_path)\n",
+ " print(\"Model backup loaded successfully.\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "cellView": "form",
+ "id": "leWbhk1X4XoY"
+ },
+ "outputs": [],
+ "source": [
+ "# @title Download all custom pretrains\n",
+ "import os\n",
+ "import urllib.request\n",
+ "\n",
+ "%mkdir /content/program_ml/rvc/models/pretraineds/pretraineds_custom\n",
+ "pretrained_urls = [\n",
+ " # Ov2 Super\n",
+ " \"https://huggingface.co/ORVC/Ov2Super/resolve/main/f0Ov2Super32kG.pth\",\n",
+ " \"https://huggingface.co/ORVC/Ov2Super/resolve/main/f0Ov2Super32kD.pth\",\n",
+ " \"https://huggingface.co/ORVC/Ov2Super/resolve/main/f0Ov2Super40kG.pth\",\n",
+ " \"https://huggingface.co/ORVC/Ov2Super/resolve/main/f0Ov2Super40kD.pth\",\n",
+ "\n",
+ " # TITAN\n",
+ " \"https://huggingface.co/blaise-tk/TITAN/resolve/main/models/medium/40k/pretrained/G-f040k-TITAN-Medium.pth\",\n",
+ " \"https://huggingface.co/blaise-tk/TITAN/resolve/main/models/medium/40k/pretrained/D-f040k-TITAN-Medium.pth\",\n",
+ " \"https://huggingface.co/blaise-tk/TITAN/resolve/main/models/medium/32k/pretrained/G-f032k-TITAN-Medium.pth\",\n",
+ " \"https://huggingface.co/blaise-tk/TITAN/resolve/main/models/medium/32k/pretrained/D-f032k-TITAN-Medium.pth\",\n",
+ "\n",
+ " # Snowie V3\n",
+ " \"https://huggingface.co/MUSTAR/SnowieV3.1-32k/resolve/main/D_SnowieV3.1_32k.pth\",\n",
+ " \"https://huggingface.co/MUSTAR/SnowieV3.1-32k/resolve/main/G_SnowieV3.1_32k.pth\",\n",
+ " \"https://huggingface.co/MUSTAR/SnowieV3.1-40k/resolve/main/G_SnowieV3.1_40k.pth\",\n",
+ " \"https://huggingface.co/MUSTAR/SnowieV3.1-40k/resolve/main/D_SnowieV3.1_40k.pth\",\n",
+ " \"https://huggingface.co/MUSTAR/SnowieV3.1-48k/resolve/main/G_SnowieV3.1_48k.pth\",\n",
+ " \"https://huggingface.co/MUSTAR/SnowieV3.1-48k/resolve/main/D_SnowieV3.1_48k.pth\",\n",
+ "\n",
+ " # RIN E3\n",
+ " \"https://huggingface.co/MUSTAR/RIN_E3/resolve/main/RIN_E3_G.pth\",\n",
+ " \"https://huggingface.co/MUSTAR/RIN_E3/resolve/main/RIN_E3_D.pth\",\n",
+ "\n",
+ " # KLM\n",
+ " \"https://huggingface.co/SeoulStreamingStation/KLM4.1/resolve/main/D_KLM41_32k.pth\",\n",
+ " \"https://huggingface.co/SeoulStreamingStation/KLM4.1/resolve/main/G_KLM41_32k.pth\",\n",
+ " \"https://huggingface.co/SeoulStreamingStation/KLM4.1/resolve/main/D_KLM41_48k.pth\",\n",
+ " \"https://huggingface.co/SeoulStreamingStation/KLM4.1/resolve/main/G_KLM41_48k.pth\",\n",
+ "\n",
+ " # SnowieV3 X RIN_E3\n",
+ " \"https://huggingface.co/MUSTAR/SnowieV3.1-X-RinE3-40K/resolve/main/D_Snowie-X-Rin_40k.pth\",\n",
+ " \"https://huggingface.co/MUSTAR/SnowieV3.1-X-RinE3-40K/resolve/main/G_Snowie-X-Rin_40k.pth\",\n",
+ "]\n",
+ "output_directory = \"/content/program_ml/rvc/models/pretraineds/pretraineds_custom\"\n",
+ "for url in pretrained_urls:\n",
+ " filename = os.path.join(output_directory, os.path.basename(url))\n",
+ " urllib.request.urlretrieve(url, filename)"
+ ]
+ }
+ ],
+ "metadata": {
+ "accelerator": "GPU",
+ "colab": {
+ "collapsed_sections": [
+ "3b59-2x-qEnX"
+ ],
+ "gpuType": "T4",
+ "provenance": []
+ },
+ "kernelspec": {
+ "display_name": "Python 3",
+ "name": "python3"
+ },
+ "language_info": {
+ "name": "python"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
diff --git a/assets/Applio_Kaggle.ipynb b/assets/Applio_Kaggle.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..0479b47cee441245b3fb91329052dffc0628d30e
--- /dev/null
+++ b/assets/Applio_Kaggle.ipynb
@@ -0,0 +1,239 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## **Applio**\n",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.\n",
+ "\n",
+ "[Support](https://discord.gg/urxFjYmYYh) — [Discord Bot](https://discord.com/oauth2/authorize?client_id=1144714449563955302&permissions=1376674695271&scope=bot%20applications.commands) — [Find Voices](https://applio.org/models) — [GitHub](https://github.com/IAHispano/Applio)\n",
+ "\n",
+ " \n",
+ "\n",
+ "### **Credits**\n",
+ "- Encryption method: [Hina](https://github.com/hinabl)\n",
+ "- Main development: [Applio Team](https://github.com/IAHispano)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Install"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "trusted": true
+ },
+ "outputs": [],
+ "source": [
+ "import codecs\n",
+ "import os\n",
+ "import tarfile\n",
+ "import subprocess\n",
+ "from pathlib import Path\n",
+ "from IPython.display import clear_output\n",
+ "rot_47 = lambda encoded_text: \"\".join(\n",
+ " [\n",
+ " (\n",
+ " chr(\n",
+ " (ord(c) - (ord(\"a\") if c.islower() else ord(\"A\")) - 47) % 26\n",
+ " + (ord(\"a\") if c.islower() else ord(\"A\"))\n",
+ " )\n",
+ " if c.isalpha()\n",
+ " else c\n",
+ " )\n",
+ " for c in encoded_text\n",
+ " ]\n",
+ ")\n",
+ "\n",
+ "new_name = rot_47(\"kmjbmvh_hg\")\n",
+ "findme = rot_47(codecs.decode(\"pbbxa://oqbpcj.kwu/Dqlitvb/qurwg-mtnqvlmz.oqb\", \"rot_13\"))\n",
+ "uioawhd = rot_47(codecs.decode(\"pbbxa://oqbpcj.kwu/QIPqaxivw/Ixxtqw.oqb\", \"rot_13\"))\n",
+ "!pip install uv\n",
+ "!git clone --depth 1 $uioawhd $new_name --branch 3.2.7\n",
+ "clear_output()\n",
+ "!mkdir -p /kaggle/tmp\n",
+ "%cd /kaggle/tmp\n",
+ "!uv venv .venv > /dev/null 2>&1\n",
+ "def vidal_setup(ForceIn):\n",
+ " def F():\n",
+ " print(\"Installing pip packages...\")\n",
+ " subprocess.check_call([\"uv\", \"pip\", \"install\", \"-r\", \"requirements.txt\", \"--quiet\"])\n",
+ "\n",
+ " A = \"/kaggle/working\" + rot_47(\"Kikpm.ovm.bu\")\n",
+ " D = \"/kaggle/tmp\"\n",
+ " if not os.path.exists(A):\n",
+ " M = os.path.dirname(A)\n",
+ " os.makedirs(M, exist_ok=True)\n",
+ " print(\"No cached install found..\")\n",
+ " try:\n",
+ " N = rot_47(codecs.decode(\"pbbxa://pcooqvonikm.kw/QIPqaxivw/Ixxtqw/zmawtdm/uiqv/Mvdqzwumvb/Siootm/SiootmD2.biz.oh?lwevtwil=bzcm\", \"rot_13\"))\n",
+ " subprocess.run([\"wget\",\"-q\" ,\"-O\", A, N])\n",
+ " print(\"Download completed successfully!\")\n",
+ " except Exception as H:\n",
+ " print(str(H))\n",
+ " if os.path.exists(A):\n",
+ " os.remove(A)\n",
+ " if Path(A).exists():\n",
+ " with tarfile.open(A, \"r:gz\") as I:\n",
+ " I.extractall(D)\n",
+ " print(f\"Extraction of {A} to {D} completed.\")\n",
+ " if os.path.exists(A):\n",
+ " os.remove(A)\n",
+ " else:\n",
+ " F()\n",
+ "\n",
+ "vidal_setup(False)\n",
+ "%cd /kaggle/working/program_ml\n",
+ "!source /kaggle/tmp/.venv/bin/activate; python core.py \"prerequisites\" --models \"True\" --exe \"True\" --pretraineds_v1_f0 \"False\" --pretraineds_v2_f0 \"True\" --pretraineds_v1_nof0 \"False\" --pretraineds_v2_nof0 \"False\" > /dev/null 2>&1\n",
+ "!sudo curl -fsSL https://raw.githubusercontent.com/filebrowser/get/master/get.sh | sudo bash\n",
+ "!filebrowser config init\n",
+ "!filebrowser config set --auth.method=noauth\n",
+ "!filebrowser users add \"applio\" \"\" --perm.admin\n",
+ "clear_output()\n",
+ "print(\"Finished\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Setup Ngrok"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "trusted": true
+ },
+ "outputs": [],
+ "source": [
+ "#https://dashboard.ngrok.com/get-started/your-authtoken (Token Ngrok)\n",
+ "!pip install pyngrok\n",
+ "!ngrok config add-authtoken token"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Start"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "trusted": true
+ },
+ "outputs": [],
+ "source": [
+ "import os\n",
+ "from pyngrok import ngrok\n",
+ "from IPython.display import clear_output\n",
+ "ngrok.kill()\n",
+ "%cd /kaggle/working/program_ml\n",
+ "os.system(f\"filebrowser -r /kaggle -p 9876 > /dev/null 2>&1 &\")\n",
+ "clear_output()\n",
+ "%load_ext tensorboard\n",
+ "%tensorboard --logdir logs --port 8077\n",
+ "p_tunnel = ngrok.connect(6969)\n",
+ "t_tunnel = ngrok.connect(8077)\n",
+ "f_tunnel = ngrok.connect(9876)\n",
+ "clear_output()\n",
+ "print(\"Applio Url:\", p_tunnel.public_url)\n",
+ "print(\"Tensorboard Url:\", t_tunnel.public_url)\n",
+ "print(\"File Url:\", f_tunnel.public_url)\n",
+ "print(\"Save the link for later, this will take a while...\")\n",
+ "\n",
+ "!source /kaggle/tmp/.venv/bin/activate; python app.py"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "_kg_hide-input": false
+ },
+ "source": [
+ "## Extra"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Setup new logs folder format\n",
+ "- Put the exact name you put as your Model Name in Applio."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "\n",
+ "modelname = \"Test\"\n",
+ "logs_folder = f\"/kaggle/working/program_ml/logs/\" + modelname\n",
+ "\n",
+ "import os\n",
+ "\n",
+ "folder_renames = {\n",
+ " \"0_gt_wavs\": \"sliced_audios\",\n",
+ " \"1_16k_wavs\": \"sliced_audios_16k\",\n",
+ " \"2a_f0\": \"f0\",\n",
+ " \"2b-f0nsf\": \"f0_voiced\",\n",
+ " \"3_feature768\": \"v2_extracted\"\n",
+ "}\n",
+ "\n",
+ "def rename_folders(base_path, rename_dict):\n",
+ " for old_name, new_name in rename_dict.items():\n",
+ " old_path = os.path.join(base_path, old_name)\n",
+ " new_path = os.path.join(base_path, new_name)\n",
+ " if os.path.exists(old_path):\n",
+ " os.rename(old_path, new_path)\n",
+ " print(f\"Renamed {old_path} to {new_path}\")\n",
+ " else:\n",
+ " print(f\"Folder {old_path} does not exist\")\n",
+ "\n",
+ "rename_folders(logs_folder, folder_renames)\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "kaggle": {
+ "accelerator": "nvidiaTeslaT4",
+ "dataSources": [],
+ "dockerImageVersionId": 30558,
+ "isGpuEnabled": true,
+ "isInternetEnabled": true,
+ "language": "python",
+ "sourceType": "notebook"
+ },
+ "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
+}
diff --git a/assets/Applio_NoUI.ipynb b/assets/Applio_NoUI.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..02574ad10697e20230e2114f9430df8a8e72970f
--- /dev/null
+++ b/assets/Applio_NoUI.ipynb
@@ -0,0 +1,819 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "0pKllbPyK_BC"
+ },
+ "source": [
+ "## **Applio NoUI**\n",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance. \n",
+ "\n",
+ "[Support](https://discord.gg/urxFjYmYYh) — [Discord Bot](https://discord.com/oauth2/authorize?client_id=1144714449563955302&permissions=1376674695271&scope=bot%20applications.commands) — [Find Voices](https://applio.org/models) — [GitHub](https://github.com/IAHispano/Applio)\n",
+ "\n",
+ " \n",
+ "\n",
+ "### **Credits**\n",
+ "- Encryption method: [Hina](https://github.com/hinabl)\n",
+ "- Extra section: [Poopmaster](https://github.com/poiqazwsx)\n",
+ "- Main development: [Applio Team](https://github.com/IAHispano)\n",
+ "- Colab inspired on [RVC v2 Disconnected](https://colab.research.google.com/drive/1XIPCP9ken63S7M6b5ui1b36Cs17sP-NS)."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "Y-iR3WeLMlac"
+ },
+ "source": [
+ "### If you restart the runtime, run it again."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "xwZkZGd-H0zT"
+ },
+ "outputs": [],
+ "source": [
+ "%cd /content/Applio"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "ymMCTSD6m8qV"
+ },
+ "source": [
+ "# Installation\n",
+ "## If the runtime restarts, run the cell above and re-run the installation steps."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "cellView": "form",
+ "id": "yFhAeKGOp9aa"
+ },
+ "outputs": [],
+ "source": [
+ "# @title Mount Google Drive\n",
+ "from google.colab import drive\n",
+ "\n",
+ "drive.mount(\"/content/drive\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "cellView": "form",
+ "id": "7GysECSxBya4"
+ },
+ "outputs": [],
+ "source": [
+ "# @title Clone\n",
+ "!git clone https://github.com/IAHispano/Applio --branch 3.2.7 --single-branch\n",
+ "%cd /content/Applio"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "cellView": "form",
+ "id": "CAXW55BQm0PP"
+ },
+ "outputs": [],
+ "source": [
+ "# @title Install\n",
+ "rot_47 = lambda encoded_text: \"\".join(\n",
+ " [\n",
+ " (\n",
+ " chr(\n",
+ " (ord(c) - (ord(\"a\") if c.islower() else ord(\"A\")) - 47) % 26\n",
+ " + (ord(\"a\") if c.islower() else ord(\"A\"))\n",
+ " )\n",
+ " if c.isalpha()\n",
+ " else c\n",
+ " )\n",
+ " for c in encoded_text\n",
+ " ]\n",
+ ")\n",
+ "import codecs\n",
+ "import os\n",
+ "import tarfile\n",
+ "import subprocess\n",
+ "from pathlib import Path\n",
+ "from IPython.display import clear_output\n",
+ "\n",
+ "def vidal_setup(C):\n",
+ " def F():\n",
+ " print(\"Installing pip packages...\")\n",
+ " subprocess.check_call([\"pip\", \"install\", \"-r\", \"requirements.txt\", \"--quiet\"])\n",
+ "\n",
+ " A = \"/content/\" + rot_47(\"Kikpm.ovm.bu\")\n",
+ " D = \"/\"\n",
+ " if not os.path.exists(A):\n",
+ " M = os.path.dirname(A)\n",
+ " os.makedirs(M, exist_ok=True)\n",
+ " print(\"No cached install found..\")\n",
+ " try:\n",
+ " N = codecs.decode(\n",
+ " \"uggcf://uhttvatsnpr.pb/VNUvfcnab/Nccyvb/erfbyir/znva/Raivebzrag/Pbyno/Cache.gne.tm\",\n",
+ " \"rot_13\",\n",
+ " )\n",
+ " subprocess.run([\"wget\", \"-O\", A, N])\n",
+ " print(\"Download completed successfully!\")\n",
+ " except Exception as H:\n",
+ " print(str(H))\n",
+ " if os.path.exists(A):\n",
+ " os.remove(A)\n",
+ " if Path(A).exists():\n",
+ " with tarfile.open(A, \"r:gz\") as I:\n",
+ " I.extractall(D)\n",
+ " print(f\"Extraction of {A} to {D} completed.\")\n",
+ " if os.path.exists(A):\n",
+ " os.remove(A)\n",
+ " if C:\n",
+ " F()\n",
+ " C = False\n",
+ " else:\n",
+ " F()\n",
+ "\n",
+ "\n",
+ "vidal_setup(False)\n",
+ "!pip uninstall torch torchvision torchaudio -y\n",
+ "!pip install torch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 --upgrade --index-url https://download.pytorch.org/whl/cu121\n",
+ "clear_output()\n",
+ "print(\"Finished installing requirements!\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "cellView": "form",
+ "id": "QlTibPnjmj6-"
+ },
+ "outputs": [],
+ "source": [
+ "# @title Download models\n",
+ "!python core.py \"prerequisites\" --models \"True\" --exe \"True\" --pretraineds_v1_f0 \"False\" --pretraineds_v2_f0 \"True\" --pretraineds_v1_nof0 \"False\" --pretraineds_v2_nof0 \"False\" "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "YzaeMYsUE97Y"
+ },
+ "source": [
+ "# Infer\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "cellView": "form",
+ "id": "v0EgikgjFCjE"
+ },
+ "outputs": [],
+ "source": [
+ "# @title Download model\n",
+ "# @markdown Hugging Face or Google Drive\n",
+ "model_link = \"https://huggingface.co/Darwin/Darwin/resolve/main/Darwin.zip\" # @param {type:\"string\"}\n",
+ "\n",
+ "!python core.py download --model_link \"{model_link}\""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "cellView": "form",
+ "id": "lrCKEOzvDPRu"
+ },
+ "outputs": [],
+ "source": [
+ "# @title Run Inference\n",
+ "# @markdown Please upload the audio file to your Google Drive path `/content/drive/MyDrive` and specify its name here. For the model name, use the zip file name without the extension. Alternatively, you can check the path `/content/Applio/logs` for the model name (name of the folder).\n",
+ "\n",
+ "import os\n",
+ "\n",
+ "current_dir = os.getcwd()\n",
+ "\n",
+ "model_name = \"Darwin\" # @param {type:\"string\"}\n",
+ "model_folder = os.path.join(current_dir, f\"logs/{model_name}\")\n",
+ "\n",
+ "if not os.path.exists(model_folder):\n",
+ " raise FileNotFoundError(f\"Model directory not found: {model_folder}\")\n",
+ "\n",
+ "files_in_folder = os.listdir(model_folder)\n",
+ "pth_path = next((f for f in files_in_folder if f.endswith(\".pth\")), None)\n",
+ "index_file = next((f for f in files_in_folder if f.endswith(\".index\")), None)\n",
+ "\n",
+ "if pth_path is None or index_file is None:\n",
+ " raise FileNotFoundError(\"No model found.\")\n",
+ "\n",
+ "pth_file = os.path.join(model_folder, pth_path)\n",
+ "index_file = os.path.join(model_folder, index_file)\n",
+ "\n",
+ "input_path = \"/content/example.wav\" # @param {type:\"string\"}\n",
+ "output_path = \"/content/output.wav\"\n",
+ "export_format = \"WAV\" # @param ['WAV', 'MP3', 'FLAC', 'OGG', 'M4A'] {allow-input: false}\n",
+ "f0_method = \"rmvpe\" # @param [\"crepe\", \"crepe-tiny\", \"rmvpe\", \"fcpe\", \"hybrid[rmvpe+fcpe]\"] {allow-input: false}\n",
+ "f0_up_key = 0 # @param {type:\"slider\", min:-24, max:24, step:0}\n",
+ "filter_radius = 3 # @param {type:\"slider\", min:0, max:10, step:0}\n",
+ "rms_mix_rate = 0.8 # @param {type:\"slider\", min:0.0, max:1.0, step:0.1}\n",
+ "protect = 0.5 # @param {type:\"slider\", min:0.0, max:0.5, step:0.1}\n",
+ "index_rate = 0.7 # @param {type:\"slider\", min:0.0, max:1.0, step:0.1}\n",
+ "hop_length = 128 # @param {type:\"slider\", min:1, max:512, step:0}\n",
+ "clean_strength = 0.7 # @param {type:\"slider\", min:0.0, max:1.0, step:0.1}\n",
+ "split_audio = False # @param{type:\"boolean\"}\n",
+ "clean_audio = False # @param{type:\"boolean\"}\n",
+ "f0_autotune = False # @param{type:\"boolean\"}\n",
+ "formant_shift = False # @param{type:\"boolean\"}\n",
+ "formant_qfrency = 1.0 # @param {type:\"slider\", min:1.0, max:16.0, step:0.1}\n",
+ "formant_timbre = 1.0 # @param {type:\"slider\", min:1.0, max:16.0, step:0.1}\n",
+ "embedder_model = \"contentvec\" # @param [\"contentvec\", \"chinese-hubert-base\", \"japanese-hubert-base\", \"korean-hubert-base\", \"custom\"] {allow-input: false}\n",
+ "embedder_model_custom = \"\" # @param {type:\"string\"}\n",
+ "upscale_audio = False # @param{type:\"boolean\"}\n",
+ "\n",
+ "\n",
+ "# Post-processing effects\n",
+ "if \"post_process\" not in globals():\n",
+ " post_process = False \n",
+ "if \"reverb\" not in globals():\n",
+ " reverb = False \n",
+ "if \"pitch_shift\" not in globals():\n",
+ " pitch_shift = False \n",
+ "if \"limiter\" not in globals():\n",
+ " limiter = False \n",
+ "if \"gain\" not in globals():\n",
+ " gain = False \n",
+ "if \"distortion\" not in globals():\n",
+ " distortion = False \n",
+ "if \"chorus\" not in globals():\n",
+ " chorus = False \n",
+ "if \"bitcrush\" not in globals():\n",
+ " bitcrush = False\n",
+ "if \"clipping\" not in globals():\n",
+ " clipping = False \n",
+ "if \"compressor\" not in globals():\n",
+ " compressor = False \n",
+ "if \"delay\" not in globals():\n",
+ " delay = False\n",
+ "\n",
+ "if \"reverb_room_size\" not in globals():\n",
+ " reverb_room_size = 0.5 \n",
+ "if \"reverb_damping\" not in globals():\n",
+ " reverb_damping = 0.5 \n",
+ "if \"reverb_wet_gain\" not in globals():\n",
+ " reverb_wet_gain = 0.0 \n",
+ "if \"reverb_dry_gain\" not in globals():\n",
+ " reverb_dry_gain = 0.0 \n",
+ "if \"reverb_width\" not in globals():\n",
+ " reverb_width = 1.0 \n",
+ "if \"reverb_freeze_mode\" not in globals():\n",
+ " reverb_freeze_mode = 0.0 \n",
+ "\n",
+ "if \"pitch_shift_semitones\" not in globals():\n",
+ " pitch_shift_semitones = 0.0 \n",
+ "\n",
+ "if \"limiter_threshold\" not in globals():\n",
+ " limiter_threshold = -1.0 \n",
+ "if \"limiter_release_time\" not in globals():\n",
+ " limiter_release_time = 0.05 \n",
+ "\n",
+ "if \"gain_db\" not in globals():\n",
+ " gain_db = 0.0 \n",
+ "\n",
+ "if \"distortion_gain\" not in globals():\n",
+ " distortion_gain = 0.0 \n",
+ "\n",
+ "if \"chorus_rate\" not in globals():\n",
+ " chorus_rate = 1.5 \n",
+ "if \"chorus_depth\" not in globals():\n",
+ " chorus_depth = 0.1 \n",
+ "if \"chorus_center_delay\" not in globals():\n",
+ " chorus_center_delay = 15.0 \n",
+ "if \"chorus_feedback\" not in globals():\n",
+ " chorus_feedback = 0.25 \n",
+ "if \"chorus_mix\" not in globals():\n",
+ " chorus_mix = 0.5 \n",
+ "\n",
+ "if \"bitcrush_bit_depth\" not in globals():\n",
+ " bitcrush_bit_depth = 4 \n",
+ "\n",
+ "if \"clipping_threshold\" not in globals():\n",
+ " clipping_threshold = 0.5 \n",
+ "\n",
+ "if \"compressor_threshold\" not in globals():\n",
+ " compressor_threshold = -20.0\n",
+ "if \"compressor_ratio\" not in globals():\n",
+ " compressor_ratio = 4.0 \n",
+ "if \"compressor_attack\" not in globals():\n",
+ " compressor_attack = 0.001 \n",
+ "if \"compressor_release\" not in globals():\n",
+ " compressor_release = 0.1 \n",
+ "\n",
+ "if \"delay_seconds\" not in globals():\n",
+ " delay_seconds = 0.1\n",
+ "if \"delay_feedback\" not in globals():\n",
+ " delay_feedback = 0.5 \n",
+ "if \"delay_mix\" not in globals():\n",
+ " delay_mix = 0.5 \n",
+ " \n",
+ "!python core.py infer --pitch \"{f0_up_key}\" --filter_radius \"{filter_radius}\" --volume_envelope \"{rms_mix_rate}\" --index_rate \"{index_rate}\" --hop_length \"{hop_length}\" --protect \"{protect}\" --f0_autotune \"{f0_autotune}\" --f0_method \"{f0_method}\" --input_path \"{input_path}\" --output_path \"{output_path}\" --pth_path \"{pth_file}\" --index_path \"{index_file}\" --split_audio \"{split_audio}\" --clean_audio \"{clean_audio}\" --clean_strength \"{clean_strength}\" --export_format \"{export_format}\" --embedder_model \"{embedder_model}\" --embedder_model_custom \"{embedder_model_custom}\" --upscale_audio \"{upscale_audio}\" --formant_shifting \"{formant_shift}\" --formant_qfrency \"{formant_qfrency}\" --formant_timbre \"{formant_timbre}\" --post_process \"{post_process}\" --reverb \"{reverb}\" --pitch_shift \"{pitch_shift}\" --limiter \"{limiter}\" --gain \"{gain}\" --distortion \"{distortion}\" --chorus \"{chorus}\" --bitcrush \"{bitcrush}\" --clipping \"{clipping}\" --compressor \"{compressor}\" --delay \"{delay}\" --reverb_room_size \"{reverb_room_size}\" --reverb_damping \"{reverb_damping}\" --reverb_wet_gain \"{reverb_wet_gain}\" --reverb_dry_gain \"{reverb_dry_gain}\" --reverb_width \"{reverb_width}\" --reverb_freeze_mode \"{reverb_freeze_mode}\" --pitch_shift_semitones \"{pitch_shift_semitones}\" --limiter_threshold \"{limiter_threshold}\" --limiter_release_time \"{limiter_release_time}\" --gain_db \"{gain_db}\" --distortion_gain \"{distortion_gain}\" --chorus_rate \"{chorus_rate}\" --chorus_depth \"{chorus_depth}\" --chorus_center_delay \"{chorus_center_delay}\" --chorus_feedback \"{chorus_feedback}\" --chorus_mix \"{chorus_mix}\" --bitcrush_bit_depth \"{bitcrush_bit_depth}\" --clipping_threshold \"{clipping_threshold}\" --compressor_threshold \"{compressor_threshold}\" --compressor_ratio \"{compressor_ratio}\" --compressor_attack \"{compressor_attack}\" --compressor_release \"{compressor_release}\" --delay_seconds \"{delay_seconds}\" --delay_feedback \"{delay_feedback}\" --delay_mix \"{delay_mix}\"\n",
+ "\n",
+ "from IPython.display import Audio, display, clear_output\n",
+ "\n",
+ "output_path = output_path.replace(\".wav\", f\".{export_format.lower()}\")\n",
+ "# clear_output()\n",
+ "display(Audio(output_path, autoplay=True))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "yrWw2h9d2TRn"
+ },
+ "source": [
+ "## **Advanced Settings**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {
+ "cellView": "form",
+ "id": "J43qejJ-2Tpp"
+ },
+ "outputs": [],
+ "source": [
+ "# @title # Post-processing effects\n",
+ "post_process = False # @param{type:\"boolean\"}\n",
+ "reverb = False # @param{type:\"boolean\"}\n",
+ "pitch_shift = False # @param{type:\"boolean\"}\n",
+ "limiter = False # @param{type:\"boolean\"}\n",
+ "gain = False # @param{type:\"boolean\"}\n",
+ "distortion = False # @param{type:\"boolean\"}\n",
+ "chorus = False # @param{type:\"boolean\"}\n",
+ "bitcrush = False # @param{type:\"boolean\"}\n",
+ "clipping = False # @param{type:\"boolean\"}\n",
+ "compressor = False # @param{type:\"boolean\"}\n",
+ "delay = False # @param{type:\"boolean\"}\n",
+ "\n",
+ "reverb_room_size = 0.5 # @param {type:\"slider\", min:0.0, max:1.0, step:0.1}\n",
+ "reverb_damping = 0.5 # @param {type:\"slider\", min:0.0, max:1.0, step:0.1}\n",
+ "reverb_wet_gain = 0.0 # @param {type:\"slider\", min:-20.0, max:20.0, step:0.1}\n",
+ "reverb_dry_gain = 0.0 # @param {type:\"slider\", min:-20.0, max:20.0, step:0.1}\n",
+ "reverb_width = 1.0 # @param {type:\"slider\", min:0.0, max:1.0, step:0.1}\n",
+ "reverb_freeze_mode = 0.0 # @param {type:\"slider\", min:0.0, max:1.0, step:0.1}\n",
+ "\n",
+ "pitch_shift_semitones = 0.0 # @param {type:\"slider\", min:-12.0, max:12.0, step:0.1}\n",
+ "\n",
+ "limiter_threshold = -1.0 # @param {type:\"slider\", min:-20.0, max:0.0, step:0.1}\n",
+ "limiter_release_time = 0.05 # @param {type:\"slider\", min:0.0, max:1.0, step:0.01}\n",
+ "\n",
+ "gain_db = 0.0 # @param {type:\"slider\", min:-20.0, max:20.0, step:0.1}\n",
+ "\n",
+ "distortion_gain = 0.0 # @param {type:\"slider\", min:0.0, max:1.0, step:0.1}\n",
+ "\n",
+ "chorus_rate = 1.5 # @param {type:\"slider\", min:0.1, max:10.0, step:0.1}\n",
+ "chorus_depth = 0.1 # @param {type:\"slider\", min:0.0, max:1.0, step:0.1}\n",
+ "chorus_center_delay = 15.0 # @param {type:\"slider\", min:0.0, max:50.0, step:0.1}\n",
+ "chorus_feedback = 0.25 # @param {type:\"slider\", min:0.0, max:1.0, step:0.1}\n",
+ "chorus_mix = 0.5 # @param {type:\"slider\", min:0.0, max:1.0, step:0.1}\n",
+ "\n",
+ "bitcrush_bit_depth = 4 # @param {type:\"slider\", min:1, max:16, step:1}\n",
+ "\n",
+ "clipping_threshold = 0.5 # @param {type:\"slider\", min:0.0, max:1.0, step:0.1}\n",
+ "\n",
+ "compressor_threshold = -20.0 # @param {type:\"slider\", min:-60.0, max:0.0, step:0.1}\n",
+ "compressor_ratio = 4.0 # @param {type:\"slider\", min:1.0, max:20.0, step:0.1}\n",
+ "compressor_attack = 0.001 # @param {type:\"slider\", min:0.0, max:0.1, step:0.001}\n",
+ "compressor_release = 0.1 # @param {type:\"slider\", min:0.0, max:1.0, step:0.01}\n",
+ "\n",
+ "delay_seconds = 0.1 # @param {type:\"slider\", min:0.0, max:1.0, step:0.01}\n",
+ "delay_feedback = 0.5 # @param {type:\"slider\", min:0.0, max:1.0, step:0.1}\n",
+ "delay_mix = 0.5 # @param {type:\"slider\", min:0.0, max:1.0, step:0.1}\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "1QkabnLlF2KB"
+ },
+ "source": [
+ "# Train"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "cellView": "form",
+ "id": "oBzqm4JkGGa0"
+ },
+ "outputs": [],
+ "source": [
+ "# @title Preprocess Dataset\n",
+ "import os\n",
+ "os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'\n",
+ "model_name = \"Darwin\" # @param {type:\"string\"}\n",
+ "dataset_path = \"/content/drive/MyDrive/Darwin_Dataset\" # @param {type:\"string\"}\n",
+ "\n",
+ "sample_rate = \"40k\" # @param [\"32k\", \"40k\", \"48k\"] {allow-input: false}\n",
+ "sr = int(sample_rate.rstrip(\"k\")) * 1000\n",
+ "cpu_cores = 2 # @param {type:\"slider\", min:1, max:2, step:1}\n",
+ "cut_preprocess = True # @param{type:\"boolean\"}\n",
+ "process_effects = False # @param{type:\"boolean\"}\n",
+ "noise_reduction = False # @param{type:\"boolean\"}\n",
+ "noise_reduction_strength = 0.7 # @param {type:\"slider\", min:0.0, max:1.0, step:0.1}\n",
+ "\n",
+ "!python core.py preprocess --model_name \"{model_name}\" --dataset_path \"{dataset_path}\" --sample_rate \"{sr}\" --cpu_cores \"{cpu_cores}\" --cut_preprocess \"{cut_preprocess}\" --process_effects \"{process_effects}\" --noise_reduction \"{noise_reduction}\" --noise_reduction_strength \"{noise_reduction_strength}\""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "cellView": "form",
+ "id": "zWMiMYfRJTJv"
+ },
+ "outputs": [],
+ "source": [
+ "# @title Extract Features\n",
+ "rvc_version = \"v2\" # @param [\"v2\", \"v1\"] {allow-input: false}\n",
+ "f0_method = \"rmvpe\" # @param [\"crepe\", \"crepe-tiny\", \"rmvpe\"] {allow-input: false}\n",
+ "hop_length = 128 # @param {type:\"slider\", min:1, max:512, step:0}\n",
+ "\n",
+ "sr = int(sample_rate.rstrip(\"k\")) * 1000\n",
+ "cpu_cores = 2 # @param {type:\"slider\", min:1, max:2, step:1}\n",
+ "embedder_model = \"contentvec\" # @param [\"contentvec\", \"chinese-hubert-base\", \"japanese-hubert-base\", \"korean-hubert-base\", \"custom\"] {allow-input: false}\n",
+ "embedder_model_custom = \"\" # @param {type:\"string\"}\n",
+ "\n",
+ "!python core.py extract --model_name \"{model_name}\" --rvc_version \"{rvc_version}\" --f0_method \"{f0_method}\" --hop_length \"{hop_length}\" --sample_rate \"{sr}\" --cpu_cores \"{cpu_cores}\" --gpu \"0\" --embedder_model \"{embedder_model}\" --embedder_model_custom \"{embedder_model_custom}\""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "cellView": "form",
+ "id": "TI6LLdIzKAIa"
+ },
+ "outputs": [],
+ "source": [
+ "# @title Train\n",
+ "import threading\n",
+ "import time\n",
+ "import os\n",
+ "import shutil\n",
+ "import hashlib\n",
+ "import time\n",
+ "\n",
+ "LOGS_FOLDER = \"/content/Applio/logs/\"\n",
+ "GOOGLE_DRIVE_PATH = \"/content/drive/MyDrive/RVC_Backup\"\n",
+ "\n",
+ "\n",
+ "def import_google_drive_backup():\n",
+ " print(\"Importing Google Drive backup...\")\n",
+ " for root, dirs, files in os.walk(GOOGLE_DRIVE_PATH):\n",
+ " for filename in files:\n",
+ " filepath = os.path.join(root, filename)\n",
+ " if os.path.isfile(filepath):\n",
+ " backup_filepath = os.path.join(\n",
+ " LOGS_FOLDER, os.path.relpath(filepath, GOOGLE_DRIVE_PATH)\n",
+ " )\n",
+ " backup_folderpath = os.path.dirname(backup_filepath)\n",
+ " if not os.path.exists(backup_folderpath):\n",
+ " os.makedirs(backup_folderpath)\n",
+ " print(f\"Created backup folder: {backup_folderpath}\", flush=True)\n",
+ " shutil.copy2(filepath, backup_filepath)\n",
+ " print(f\"Imported file from Google Drive backup: {filename}\")\n",
+ " print(\"Google Drive backup import completed.\")\n",
+ "\n",
+ "\n",
+ "def get_md5_hash(file_path):\n",
+ " hash_md5 = hashlib.md5()\n",
+ " with open(file_path, \"rb\") as f:\n",
+ " for chunk in iter(lambda: f.read(4096), b\"\"):\n",
+ " hash_md5.update(chunk)\n",
+ " return hash_md5.hexdigest()\n",
+ "\n",
+ "\n",
+ "if \"autobackups\" not in globals():\n",
+ " autobackups = False\n",
+ "# @markdown ### 💾 AutoBackup\n",
+ "cooldown = 15 # @param {type:\"slider\", min:0, max:100, step:0}\n",
+ "auto_backups = True # @param{type:\"boolean\"}\n",
+ "def backup_files():\n",
+ " print(\"\\nStarting backup loop...\")\n",
+ " last_backup_timestamps_path = os.path.join(\n",
+ " LOGS_FOLDER, \"last_backup_timestamps.txt\"\n",
+ " )\n",
+ " fully_updated = False\n",
+ "\n",
+ " while True:\n",
+ " try:\n",
+ " updated_files = 0\n",
+ " deleted_files = 0\n",
+ " new_files = 0\n",
+ " last_backup_timestamps = {}\n",
+ "\n",
+ " try:\n",
+ " with open(last_backup_timestamps_path, \"r\") as f:\n",
+ " last_backup_timestamps = dict(line.strip().split(\":\") for line in f)\n",
+ " except FileNotFoundError:\n",
+ " pass\n",
+ "\n",
+ " for root, dirs, files in os.walk(LOGS_FOLDER):\n",
+ " # Excluding \"zips\" and \"mute\" directories\n",
+ " if \"zips\" in dirs:\n",
+ " dirs.remove(\"zips\")\n",
+ " if \"mute\" in dirs:\n",
+ " dirs.remove(\"mute\")\n",
+ "\n",
+ " for filename in files:\n",
+ " if filename != \"last_backup_timestamps.txt\":\n",
+ " filepath = os.path.join(root, filename)\n",
+ " if os.path.isfile(filepath):\n",
+ " backup_filepath = os.path.join(\n",
+ " GOOGLE_DRIVE_PATH,\n",
+ " os.path.relpath(filepath, LOGS_FOLDER),\n",
+ " )\n",
+ " backup_folderpath = os.path.dirname(backup_filepath)\n",
+ " if not os.path.exists(backup_folderpath):\n",
+ " os.makedirs(backup_folderpath)\n",
+ " last_backup_timestamp = last_backup_timestamps.get(filepath)\n",
+ " current_timestamp = os.path.getmtime(filepath)\n",
+ " if (\n",
+ " last_backup_timestamp is None\n",
+ " or float(last_backup_timestamp) < current_timestamp\n",
+ " ):\n",
+ " shutil.copy2(filepath, backup_filepath)\n",
+ " last_backup_timestamps[filepath] = str(current_timestamp)\n",
+ " if last_backup_timestamp is None:\n",
+ " new_files += 1\n",
+ " else:\n",
+ " updated_files += 1\n",
+ "\n",
+ "\n",
+ " for filepath in list(last_backup_timestamps.keys()):\n",
+ " if not os.path.exists(filepath):\n",
+ " backup_filepath = os.path.join(\n",
+ " GOOGLE_DRIVE_PATH, os.path.relpath(filepath, LOGS_FOLDER)\n",
+ " )\n",
+ " if os.path.exists(backup_filepath):\n",
+ " os.remove(backup_filepath)\n",
+ " deleted_files += 1\n",
+ " del last_backup_timestamps[filepath]\n",
+ "\n",
+ "\n",
+ " if updated_files > 0 or deleted_files > 0 or new_files > 0:\n",
+ " print(f\"Backup Complete: {new_files} new, {updated_files} updated, {deleted_files} deleted.\")\n",
+ " fully_updated = False\n",
+ " elif not fully_updated:\n",
+ " print(\"Files are up to date.\")\n",
+ " fully_updated = True\n",
+ "\n",
+ " with open(last_backup_timestamps_path, \"w\") as f:\n",
+ " for filepath, timestamp in last_backup_timestamps.items():\n",
+ " f.write(f\"{filepath}:{timestamp}\\n\")\n",
+ "\n",
+ " time.sleep(cooldown if fully_updated else 0.1)\n",
+ "\n",
+ "\n",
+ " except Exception as error:\n",
+ " print(f\"An error occurred during backup: {error}\")\n",
+ "\n",
+ "\n",
+ "if autobackups:\n",
+ " autobackups = False\n",
+ " print(\"Autobackup Disabled\")\n",
+ "else:\n",
+ " autobackups = True\n",
+ " print(\"Autobackup Enabled\") \n",
+ "# @markdown ### ⚙️ Train Settings\n",
+ "total_epoch = 800 # @param {type:\"integer\"}\n",
+ "batch_size = 15 # @param {type:\"slider\", min:1, max:25, step:0}\n",
+ "gpu = 0\n",
+ "sr = int(sample_rate.rstrip(\"k\")) * 1000\n",
+ "pretrained = True # @param{type:\"boolean\"}\n",
+ "cleanup = False # @param{type:\"boolean\"}\n",
+ "cache_data_in_gpu = False # @param{type:\"boolean\"}\n",
+ "tensorboard = True # @param{type:\"boolean\"}\n",
+ "# @markdown ### ➡️ Choose how many epochs your model will be stored\n",
+ "save_every_epoch = 10 # @param {type:\"slider\", min:1, max:100, step:0}\n",
+ "save_only_latest = False # @param{type:\"boolean\"}\n",
+ "save_every_weights = False # @param{type:\"boolean\"}\n",
+ "overtraining_detector = False # @param{type:\"boolean\"}\n",
+ "overtraining_threshold = 50 # @param {type:\"slider\", min:1, max:100, step:0}\n",
+ "# @markdown ### ❓ Optional\n",
+ "# @markdown In case you select custom pretrained, you will have to download the pretraineds and enter the path of the pretraineds.\n",
+ "custom_pretrained = False # @param{type:\"boolean\"}\n",
+ "g_pretrained_path = \"/content/Applio/rvc/models/pretraineds/pretraineds_custom/G48k.pth\" # @param {type:\"string\"}\n",
+ "d_pretrained_path = \"/content/Applio/rvc/models/pretraineds/pretraineds_custom/D48k.pth\" # @param {type:\"string\"}\n",
+ "\n",
+ "if \"pretrained\" not in globals():\n",
+ " pretrained = True\n",
+ "\n",
+ "if \"custom_pretrained\" not in globals():\n",
+ " custom_pretrained = False\n",
+ "\n",
+ "if \"g_pretrained_path\" not in globals():\n",
+ " g_pretrained_path = \"Custom Path\"\n",
+ "\n",
+ "if \"d_pretrained_path\" not in globals():\n",
+ " d_pretrained_path = \"Custom Path\"\n",
+ "\n",
+ "\n",
+ "def start_train():\n",
+ " if tensorboard == True:\n",
+ " %load_ext tensorboard\n",
+ " %tensorboard --logdir /content/Applio/logs/\n",
+ " !python core.py train --model_name \"{model_name}\" --rvc_version \"{rvc_version}\" --save_every_epoch \"{save_every_epoch}\" --save_only_latest \"{save_only_latest}\" --save_every_weights \"{save_every_weights}\" --total_epoch \"{total_epoch}\" --sample_rate \"{sr}\" --batch_size \"{batch_size}\" --gpu \"{gpu}\" --pretrained \"{pretrained}\" --custom_pretrained \"{custom_pretrained}\" --g_pretrained_path \"{g_pretrained_path}\" --d_pretrained_path \"{d_pretrained_path}\" --overtraining_detector \"{overtraining_detector}\" --overtraining_threshold \"{overtraining_threshold}\" --cleanup \"{cleanup}\" --cache_data_in_gpu \"{cache_data_in_gpu}\"\n",
+ "\n",
+ "\n",
+ "server_thread = threading.Thread(target=start_train)\n",
+ "server_thread.start()\n",
+ "\n",
+ "if auto_backups:\n",
+ " backup_files()\n",
+ "else:\n",
+ " while True:\n",
+ " time.sleep(10)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "cellView": "form",
+ "id": "bHLs5AT4Q1ck"
+ },
+ "outputs": [],
+ "source": [
+ "# @title Generate index file\n",
+ "index_algorithm = \"Auto\" # @param [\"Auto\", \"Faiss\", \"KMeans\"] {allow-input: false}\n",
+ "!python core.py index --model_name \"{model_name}\" --rvc_version \"{rvc_version}\" --index_algorithm \"{index_algorithm}\""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "cellView": "form",
+ "id": "X_eU_SoiHIQg"
+ },
+ "outputs": [],
+ "source": [
+ "# @title Save model\n",
+ "# @markdown Enter the name of the model and the steps. You can find it in your `/content/Applio/logs` folder.\n",
+ "%cd /content\n",
+ "import os, shutil, sys\n",
+ "\n",
+ "model_name = \"Darwin\" # @param {type:\"string\"}\n",
+ "model_epoch = 800 # @param {type:\"integer\"}\n",
+ "save_big_file = False # @param {type:\"boolean\"}\n",
+ "\n",
+ "if os.path.exists(\"/content/zips\"):\n",
+ " shutil.rmtree(\"/content/zips\")\n",
+ "print(\"Removed zips.\")\n",
+ "\n",
+ "os.makedirs(f\"/content/zips/{model_name}/\", exist_ok=True)\n",
+ "print(\"Created zips.\")\n",
+ "\n",
+ "logs_folder = f\"/content/Applio/logs/{model_name}/\"\n",
+ "weight_file = None\n",
+ "if not os.path.exists(logs_folder):\n",
+ " print(f\"Model folder not found.\")\n",
+ " sys.exit(\"\")\n",
+ "\n",
+ "for filename in os.listdir(logs_folder):\n",
+ " if filename.startswith(f\"{model_name}_{model_epoch}e\") and filename.endswith(\".pth\"):\n",
+ " weight_file = filename\n",
+ " break\n",
+ "if weight_file is None:\n",
+ " print(\"There is no weight file with that name\")\n",
+ " sys.exit(\"\")\n",
+ "if not save_big_file:\n",
+ " !cp {logs_folder}added_*.index /content/zips/{model_name}/\n",
+ " !cp {logs_folder}total_*.npy /content/zips/{model_name}/\n",
+ " !cp {logs_folder}{weight_file} /content/zips/{model_name}/\n",
+ " %cd /content/zips\n",
+ " !zip -r {model_name}.zip {model_name}\n",
+ "if save_big_file:\n",
+ " %cd /content/Applio\n",
+ " latest_steps = -1\n",
+ " logs_folder = \"./logs/\" + model_name\n",
+ " for filename in os.listdir(logs_folder):\n",
+ " if filename.startswith(\"G_\") and filename.endswith(\".pth\"):\n",
+ " steps = int(filename.split(\"_\")[1].split(\".\")[0])\n",
+ " if steps > latest_steps:\n",
+ " latest_steps = steps\n",
+ " MODELZIP = model_name + \".zip\"\n",
+ " !mkdir -p /content/zips\n",
+ " ZIPFILEPATH = os.path.join(\"/content/zips\", MODELZIP)\n",
+ " for filename in os.listdir(logs_folder):\n",
+ " if \"G_\" in filename or \"D_\" in filename:\n",
+ " if str(latest_steps) in filename:\n",
+ " !zip -r {ZIPFILEPATH} {os.path.join(logs_folder, filename)}\n",
+ " else:\n",
+ " !zip -r {ZIPFILEPATH} {os.path.join(logs_folder, filename)}\n",
+ "\n",
+ "!mkdir -p /content/drive/MyDrive/RVC_Backup/\n",
+ "shutil.move(\n",
+ " f\"/content/zips/{model_name}.zip\",\n",
+ " f\"/content/drive/MyDrive/RVC_Backup/{model_name}.zip\",\n",
+ ")\n",
+ "%cd /content/Applio\n",
+ "shutil.rmtree(\"/content/zips\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "OaKoymXsyEYN"
+ },
+ "source": [
+ "# Resume-training"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "cellView": "form",
+ "id": "d3KgLAYnyHkP"
+ },
+ "outputs": [],
+ "source": [
+ "# @title Load a Backup\n",
+ "from google.colab import drive\n",
+ "import os\n",
+ "import shutil\n",
+ "\n",
+ "# @markdown Put the exact name you put as your Model Name in Applio.\n",
+ "modelname = \"My-Project\" # @param {type:\"string\"}\n",
+ "source_path = \"/content/drive/MyDrive/RVC_Backup/\" + modelname\n",
+ "destination_path = \"/content/Applio/logs/\" + modelname\n",
+ "backup_timestamps_file = \"last_backup_timestamps.txt\"\n",
+ "if not os.path.exists(source_path):\n",
+ " print(\n",
+ " \"The model folder does not exist. Please verify the name is correct or check your Google Drive.\"\n",
+ " )\n",
+ "else:\n",
+ " time_ = os.path.join(\"/content/drive/MyDrive/RVC_Backup/\", backup_timestamps_file)\n",
+ " time__ = os.path.join(\"/content/Applio/logs/\", backup_timestamps_file)\n",
+ " if os.path.exists(time_):\n",
+ " shutil.copy(time_, time__)\n",
+ " shutil.copytree(source_path, destination_path)\n",
+ " print(\"Model backup loaded successfully.\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "cellView": "form",
+ "id": "sc9DzvRCyJ2d"
+ },
+ "outputs": [],
+ "source": [
+ "# @title Set training variables\n",
+ "# @markdown ### ➡️ Use the same as you did previously\n",
+ "model_name = \"Darwin\" # @param {type:\"string\"}\n",
+ "sample_rate = \"40k\" # @param [\"32k\", \"40k\", \"48k\"] {allow-input: false}\n",
+ "rvc_version = \"v2\" # @param [\"v2\", \"v1\"] {allow-input: false}\n",
+ "f0_method = \"rmvpe\" # @param [\"crepe\", \"crepe-tiny\", \"rmvpe\"] {allow-input: false}\n",
+ "hop_length = 128 # @param {type:\"slider\", min:1, max:512, step:0}\n",
+ "sr = int(sample_rate.rstrip(\"k\")) * 1000"
+ ]
+ }
+ ],
+ "metadata": {
+ "accelerator": "GPU",
+ "colab": {
+ "collapsed_sections": [
+ "ymMCTSD6m8qV"
+ ],
+ "provenance": [],
+ "toc_visible": true
+ },
+ "kernelspec": {
+ "display_name": "Python 3",
+ "name": "python3"
+ },
+ "language_info": {
+ "name": "python"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
diff --git a/assets/ICON.ico b/assets/ICON.ico
new file mode 100644
index 0000000000000000000000000000000000000000..d7cd78be3beaf7e0b8946ac33ad41ea815c80c3d
Binary files /dev/null and b/assets/ICON.ico differ
diff --git a/assets/audios/audio-others/.gitkeep b/assets/audios/audio-others/.gitkeep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/assets/config.json b/assets/config.json
new file mode 100644
index 0000000000000000000000000000000000000000..8fe621d31e5b209e7a317e20097fda4a83ae5a81
--- /dev/null
+++ b/assets/config.json
@@ -0,0 +1,15 @@
+{
+ "theme": {
+ "file": "Applio.py",
+ "class": "Applio"
+ },
+ "plugins": [],
+ "discord_presence": true,
+ "lang": {
+ "override": false,
+ "selected_lang": "en_US"
+ },
+ "flask_server": false,
+ "version": "3.2.7",
+ "model_author": "None"
+}
\ No newline at end of file
diff --git a/assets/discord_presence.py b/assets/discord_presence.py
new file mode 100644
index 0000000000000000000000000000000000000000..5600487b97be66e3cbcec9a923b254577e8350a6
--- /dev/null
+++ b/assets/discord_presence.py
@@ -0,0 +1,49 @@
+from pypresence import Presence
+import datetime as dt
+import time
+
+
+class RichPresenceManager:
+ def __init__(self):
+ self.client_id = "1144714449563955302"
+ self.rpc = None
+ self.running = False
+
+ def start_presence(self):
+ if not self.running:
+ self.running = True
+ self.rpc = Presence(self.client_id)
+ try:
+ self.rpc.connect()
+ self.update_presence()
+ except KeyboardInterrupt as error:
+ print(error)
+ self.rpc = None
+ self.running = False
+ except Exception as error:
+ print(f"An error occurred connecting to Discord: {error}")
+ self.rpc = None
+ self.running = False
+
+ def update_presence(self):
+ if self.rpc:
+ self.rpc.update(
+ state="applio.org",
+ details="Open ecosystem for voice cloning",
+ buttons=[
+ {"label": "Home", "url": "https://applio.org"},
+ {"label": "Download", "url": "https://applio.org/download"},
+ ],
+ large_image="logo",
+ large_text="Experimenting with applio",
+ start=dt.datetime.now().timestamp(),
+ )
+
+ def stop_presence(self):
+ self.running = False
+ if self.rpc:
+ self.rpc.close()
+ self.rpc = None
+
+
+RPCManager = RichPresenceManager()
diff --git a/assets/flask/routes.py b/assets/flask/routes.py
new file mode 100644
index 0000000000000000000000000000000000000000..cf5171bef165cc779a2b761ecb98cd2930335707
--- /dev/null
+++ b/assets/flask/routes.py
@@ -0,0 +1,32 @@
+import os, sys
+import signal
+from flask import Flask, request, redirect
+
+now_dir = os.getcwd()
+sys.path.append(now_dir)
+
+from core import run_download_script
+
+app = Flask(__name__)
+
+
+@app.route("/download/", methods=["GET"])
+def download(url):
+ file_path = run_download_script(url)
+ if file_path == "Model downloaded successfully.":
+ if "text/html" in request.headers.get("Accept", ""):
+ return redirect("https://applio.org/models/downloaded", code=302)
+ else:
+ return ""
+ else:
+ return "Error: Unable to download file", 500
+
+
+@app.route("/shutdown", methods=["POST"])
+def shutdown():
+ print("This Flask server is shutting down... Please close the window!")
+ os.kill(os.getpid(), signal.SIGTERM)
+
+
+if __name__ == "__main__":
+ app.run(host="localhost", port=8000)
diff --git a/assets/flask/server.py b/assets/flask/server.py
new file mode 100644
index 0000000000000000000000000000000000000000..13637c11c6c066d6ba24bec22ea9250903833a05
--- /dev/null
+++ b/assets/flask/server.py
@@ -0,0 +1,60 @@
+import os
+import socket
+import subprocess
+import time
+import requests
+import json
+
+# Constants
+NOW_DIR = os.getcwd()
+CONFIG_FILE = os.path.join(NOW_DIR, "assets", "config.json")
+ENV_PATH = os.path.join(NOW_DIR, "env", "python.exe")
+FLASK_SCRIPT_PATH = os.path.join(NOW_DIR, "assets", "flask", "routes.py")
+HOST = "localhost"
+PORT = 8000
+TIMEOUT = 2
+
+
+# Functions
+def start_flask():
+ """
+ Starts the Flask server if it's not already running.
+ """
+ try:
+ # Check if Flask server is already running
+ with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
+ sock.settimeout(TIMEOUT)
+ sock.connect((HOST, PORT))
+ print("Flask server is already running. Trying to restart it.")
+ requests.post("http://localhost:8000/shutdown")
+ time.sleep(3)
+
+ except socket.timeout:
+ # Start the Flask server
+ try:
+ subprocess.Popen(
+ [ENV_PATH, FLASK_SCRIPT_PATH],
+ creationflags=subprocess.CREATE_NEW_CONSOLE,
+ )
+ except Exception as error:
+ print(f"An error occurred starting the Flask server: {error}")
+
+
+def load_config_flask():
+ """
+ Loads the Flask server configuration from the config.json file.
+ """
+ with open(CONFIG_FILE, "r") as file:
+ config = json.load(file)
+ return config["flask_server"]
+
+
+def save_config(value):
+ """
+ Saves the Flask server configuration to the config.json file.
+ """
+ with open(CONFIG_FILE, "r", encoding="utf8") as file:
+ config = json.load(file)
+ config["flask_server"] = value
+ with open(CONFIG_FILE, "w", encoding="utf8") as file:
+ json.dump(config, file, indent=2)
diff --git a/assets/formant_shift/f2m.json b/assets/formant_shift/f2m.json
new file mode 100644
index 0000000000000000000000000000000000000000..d6903d67b049baea415897cd7a0e44a66b68bfb6
--- /dev/null
+++ b/assets/formant_shift/f2m.json
@@ -0,0 +1,4 @@
+{
+ "formant_qfrency": 1.0,
+ "formant_timbre": 0.8
+}
diff --git a/assets/formant_shift/m2f.json b/assets/formant_shift/m2f.json
new file mode 100644
index 0000000000000000000000000000000000000000..e32a588b0e4dc8e3fbdfe6a6a7c8be4fdeedb4e1
--- /dev/null
+++ b/assets/formant_shift/m2f.json
@@ -0,0 +1,4 @@
+{
+ "formant_qfrency": 1.0,
+ "formant_timbre": 1.2
+}
diff --git a/assets/formant_shift/random.json b/assets/formant_shift/random.json
new file mode 100644
index 0000000000000000000000000000000000000000..4c420066ba6f6809d986e11292535c0b7486be5a
--- /dev/null
+++ b/assets/formant_shift/random.json
@@ -0,0 +1,4 @@
+{
+ "formant_qfrency": 32.0,
+ "formant_timbre": 9.8
+}
diff --git a/assets/i18n/i18n.py b/assets/i18n/i18n.py
new file mode 100644
index 0000000000000000000000000000000000000000..295dc0d757fda726f72a5782fe2fbc5c9b728fbf
--- /dev/null
+++ b/assets/i18n/i18n.py
@@ -0,0 +1,52 @@
+import os, sys
+import json
+from pathlib import Path
+from locale import getdefaultlocale
+
+now_dir = os.getcwd()
+sys.path.append(now_dir)
+
+
+class I18nAuto:
+ LANGUAGE_PATH = os.path.join(now_dir, "assets", "i18n", "languages")
+
+ def __init__(self, language=None):
+ with open(
+ os.path.join(now_dir, "assets", "config.json"), "r", encoding="utf8"
+ ) as file:
+ config = json.load(file)
+ override = config["lang"]["override"]
+ lang_prefix = config["lang"]["selected_lang"]
+
+ self.language = lang_prefix
+
+ if override == False:
+ language = language or getdefaultlocale()[0]
+ lang_prefix = language[:2] if language is not None else "en"
+ available_languages = self._get_available_languages()
+ matching_languages = [
+ lang for lang in available_languages if lang.startswith(lang_prefix)
+ ]
+ self.language = matching_languages[0] if matching_languages else "en_US"
+
+ self.language_map = self._load_language_list()
+
+ def _load_language_list(self):
+ try:
+ file_path = Path(self.LANGUAGE_PATH) / f"{self.language}.json"
+ with open(file_path, "r", encoding="utf-8") as file:
+ return json.load(file)
+ except FileNotFoundError:
+ raise FileNotFoundError(
+ f"Failed to load language file for {self.language}. Check if the correct .json file exists."
+ )
+
+ def _get_available_languages(self):
+ language_files = [path.stem for path in Path(self.LANGUAGE_PATH).glob("*.json")]
+ return language_files
+
+ def _language_exists(self, language):
+ return (Path(self.LANGUAGE_PATH) / f"{language}.json").exists()
+
+ def __call__(self, key):
+ return self.language_map.get(key, key)
diff --git a/assets/i18n/languages/af_AF.json b/assets/i18n/languages/af_AF.json
new file mode 100644
index 0000000000000000000000000000000000000000..2bb7468dce5504bd23fccfcb7416c51947b9b96e
--- /dev/null
+++ b/assets/i18n/languages/af_AF.json
@@ -0,0 +1,325 @@
+{
+ "Training": "Opleiding",
+ "Extra": "Ekstra",
+ "Processing": "Verwerking",
+ "Output Information": "Uitset inligting",
+ "Inference": "Afleiding",
+ "Audio Analyzer": "Oudio-ontleder",
+ "The output information will be displayed here.": "Die uitvoerinligting sal hier vertoon word.",
+ "Merge Audios": "Voeg oudio's saam",
+ "Download": "Aflaai",
+ "Settings": "Instellings",
+ "This section contains some extra utilities that often may be in experimental phases.": "Hierdie afdeling bevat 'n paar ekstra hulpmiddels wat dikwels in eksperimentele fases kan wees.",
+ "Model Information": "Model inligting",
+ "Plugins": "Inproppe",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "'n Eenvoudige stemomskakelingsinstrument van hoë gehalte wat gefokus is op gebruiksgemak en werkverrigting.",
+ "Report a Bug": "Rapporteer 'n fout",
+ "Preprocess": "Voorproses",
+ "Process effects": "Proses effekte",
+ "Model Name": "Model naam",
+ "Audio cutting": "Oudio sny",
+ "Name of the new model.": "Naam van die nuwe model.",
+ "Dataset Path": "Datastel pad",
+ "Enter model name": "Voer modelnaam in",
+ "Refresh Datasets": "Verfris datastelle",
+ "Dataset Creator": "Datastel skepper",
+ "Path to the dataset folder.": "Pad na die datastelgids.",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "Dit word aanbeveel om hierdie opsie te deaktiveer as jou datastel reeds verwerk is.",
+ "Dataset Name": "Datastel Naam",
+ "Enter dataset name": "Voer datastelnaam in",
+ "Name of the new dataset.": "Naam van die nuwe datastel.",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Die klanklêer is suksesvol by die datastel gevoeg. Klik asseblief op die voorverwerk-knoppie.",
+ "Enter dataset path": "Voer datastelpad in",
+ "Upload Audio Dataset": "Laai oudiodatastel op",
+ "Sampling Rate": "Steekproef tempo",
+ "The sampling rate of the audio files.": "Die steekproeftempo van die oudiolêers.",
+ "Model Architecture": "Model argitektuur",
+ "Extract": "Uittreksel",
+ "Embedder Model": "Insluiter Model",
+ "Preprocess Dataset": "Voorverwerk datastel",
+ "Hop Length": "Hop lengte",
+ "Version of the model architecture.": "Weergawe van die modelargitektuur.",
+ "Model used for learning speaker embedding.": "Model wat gebruik word vir die inbedding van sprekers.",
+ "Batch Size": "Groep grootte",
+ "Save Every Epoch": "Stoor elke tydvak",
+ "Total Epoch": "Totale tydperk",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Dui die duur aan wat dit neem vir die stelsel om oor te skakel na 'n beduidende toonhoogteverandering. Kleiner hoplengtes verg meer tyd vir afleiding, maar is geneig om hoër toonhoogte-akkuraatheid te lewer.",
+ "Pretrained": "Vooraf opgelei",
+ "Specifies the overall quantity of epochs for the model training process.": "Spesifiseer die algehele hoeveelheid tydperke vir die modelopleidingsproses.",
+ "Save Only Latest": "Stoor slegs nuutste",
+ "Save Every Weights": "Stoor elke gewigte",
+ "Custom Pretrained": "Pasgemaakte vooraf opgelei",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Dit is raadsaam om dit in lyn te bring met die beskikbare VRAM van jou GPU. 'n Instelling van 4 bied verbeterde akkuraatheid, maar stadiger verwerking, terwyl 8 vinniger en standaardresultate lewer.",
+ "Upload Pretrained Model": "Laai vooraf opgeleide model op",
+ "Pretrained Custom Settings": "Vooraf opgeleide pasgemaakte instellings",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Hierdie instelling stel jou in staat om die gewigte van die model aan die einde van elke tydvak te stoor.",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Deur hierdie instelling te aktiveer, sal die G- en D-lêers slegs hul mees onlangse weergawes stoor, wat stoorplek effektief bespaar.",
+ "Refresh Custom Pretraineds": "Verfris pasgemaakte vooropgeleide",
+ "GPU Settings": "GPU-instellings",
+ "Pretrained D Path": "Pasgemaakte voorafgeleide D",
+ "The file you dropped is not a valid pretrained file. Please try again.": "Die lêer wat jy laat val het, is nie 'n geldige voorafopgeleide lêer nie. Probeer asseblief weer.",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Klik op die verfrisknoppie om die vooraf opgeleide lêer in die keuselys te sien.",
+ "Pretrained G Path": "Pasgemaakte vooropgeleide G",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Die gebruik van pasgemaakte voorafgeleide modelle kan lei tot uitstekende resultate, aangesien die keuse van die mees geskikte vooraf opgeleide modelle wat aangepas is vir die spesifieke gebruiksgeval, werkverrigting aansienlik kan verbeter.",
+ "GPU Number": "GPU-nommer",
+ "GPU Custom Settings": "GPU pasgemaakte instellings",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Stel gevorderde GPU-instellings in, aanbeveel vir gebruikers met beter GPU-argitektuur.",
+ "0 to ∞ separated by -": "0 tot ∞ geskei deur -",
+ "The GPU information will be displayed here.": "Die GPU-inligting sal hier vertoon word.",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "Die aantal SVE-kerne wat in die voorproses gebruik moet word. Die verstekinstelling is jou SVE-kerne, wat vir die meeste gevalle aanbeveel word.",
+ "GPU Information": "GPU-inligting",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "Die aantal SVE-kerne wat in die onttrekkingsproses gebruik moet word. Die verstekinstelling is jou SVE-kerne, wat vir die meeste gevalle aanbeveel word.",
+ "Pitch Guidance": "Toonhoogte Leiding",
+ "Determine at how many epochs the model will saved at.": "Bepaal by hoeveel tydperke die model gestoor sal word.",
+ "Use CPU": "Gebruik SVE",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Spesifiseer die aantal GPU's wat u vir voorverwerking wil gebruik deur dit in te voer, geskei deur koppeltekens (-). Op die oomblik sal die gebruik van multi-gpu nie 'n beduidende effek hê nie.",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Spesifiseer die aantal GPU's wat u wil gebruik om te onttrek deur dit in te voer, geskei deur koppeltekens (-).",
+ "Extract Features": "Onttrek kenmerke",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Gebruik vooraf opgeleide modelle wanneer jy jou eie oefen. Hierdie benadering verminder opleidingsduur en verbeter algehele kwaliteit.",
+ "Force the use of CPU for training.": "Dwing die gebruik van SVE vir opleiding.",
+ "Cache Dataset in GPU": "Cache datastel in GPU",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Ons prioritiseer die bestuur van die modelvoorverwerking op die GPU vir vinniger werkverrigting. As jy verkies om die SVE te gebruik, laat eenvoudig die GPU-veld leeg.",
+ "Index Algorithm": "Indeks algoritme",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Ons prioritiseer die uitvoering van die modelonttrekking op die GPU vir vinniger werkverrigting. As jy verkies om die SVE te gebruik, laat eenvoudig die GPU-veld leeg.",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Deur toonhoogteleiding te gebruik, word dit haalbaar om die intonasie van die oorspronklike stem, insluitend sy toonhoogte, te weerspieël. Hierdie kenmerk is veral waardevol vir sang en ander scenario's waar die behoud van die oorspronklike melodie of toonhoogtepatroon noodsaaklik is.",
+ "Overtraining Detector": "Ooroefening Detektor",
+ "Cache the dataset in GPU memory to speed up the training process.": "Kas die datastel in GPU-geheue om die opleidingsproses te bespoedig.",
+ "Fresh Training": "Vars opleiding",
+ "Overtraining Threshold": "Drempel vir ooroefening",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans is 'n groeperingsalgoritme wat die datastel in K-groepe verdeel. Hierdie instelling is veral nuttig vir groot datastelle.",
+ "Stop Training": "Hou op opleiding",
+ "Start Training": "Begin opleiding",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Bespeur ooroefening om te verhoed dat die model die opleidingsdata te goed leer en die vermoë verloor om na nuwe data te veralgemeen.",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Stel die maksimum aantal tydperke in wat jy wil hê jou model moet ophou oefen as geen verbetering opgespoor word nie.",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "Aktiveer hierdie instelling slegs as jy 'n nuwe model van nuuts af oplei of die opleiding herbegin. Vee alle voorheen gegenereerde gewigte en tensorboard-logboeke uit.",
+ "Export Model": "Uitvoer model",
+ "Generate Index": "Genereer indeks",
+ "Overtraining Detector Settings": "Ooroefening Detektor Instellings",
+ "Exported Index file": "Uitgevoerde indekslêer",
+ "Upload": "Oplaai",
+ "Exported Pth file": "Uitgevoerde Pth-lêer",
+ "Voice Model": "Stemmodel",
+ "Select the pth file to be exported": "Kies die pde-lêer wat uitgevoer moet word",
+ "Select the index file to be exported": "Kies die indekslêer wat uitgevoer moet word",
+ "Refresh": "Verfris",
+ "Single": "Enkele",
+ "Index File": "Indeks lêer",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "Die knoppie 'Laai op' is slegs vir Google Colab: Laai die uitgevoerde lêers op na die ApplioExported-lêergids in jou Google Drive.",
+ "Unload Voice": "Laai stem af",
+ "Select the voice model to use for the conversion.": "Kies die stemmodel om vir die omskakeling te gebruik.",
+ "Select the index file to use for the conversion.": "Kies die indekslêer om vir die omskakeling te gebruik.",
+ "Select Audio": "Kies oudio",
+ "Upload Audio": "Laai oudio op",
+ "Advanced Settings": "Gevorderde instellings",
+ "Custom Output Path": "Pasgemaakte afvoerpad",
+ "Output Path": "Afvoer pad",
+ "Export Format": "Uitvoer formaat",
+ "Select the format to export the audio.": "Kies die formaat om die klank uit te voer.",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Vee uitsette uit (Vee alle oudio's in bates/oudio's uit)",
+ "Split Audio": "Verdeel oudio",
+ "Select the audio to convert.": "Kies die klank om om te skakel.",
+ "Clean Audio": "Maak klank skoon",
+ "Autotune": "Outo-instelling",
+ "Clean Strength": "Skoon krag",
+ "Upscale Audio": "Luukse klank",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Verdeel die klank in stukke vir afleiding om in sommige gevalle beter resultate te verkry.",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "Die pad waar die uitvoerklank gestoor sal word, by verstek in bates/oudio's/output.wav",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Maak jou klankuitvoer skoon met behulp van geraasopsporingsalgoritmes, wat aanbeveel word vir die praat van klank.",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Skaal die klank op na 'n hoër gehalte, aanbeveel vir lae kwaliteit oudio's. (Dit kan langer neem om die klank te verwerk)",
+ "Default value is 1.0": "Verstekwaarde is 1.0",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Pas 'n sagte outo-instelling toe op jou afleidings, aanbeveel vir sang-omskakelings.",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Aktiveer formantverskuiwing. Word gebruik vir manlike na vroulike en omgekeerde omskakelings.",
+ "Quefrency for formant shifting": "Vraekeur vir formantverskuiwing",
+ "Pitch": "Toonhoogte",
+ "Browse presets for formanting": "Blaai deur voorafinstellings vir formatanting",
+ "Presets are located in /assets/formant_shift folder": "Voorafinstellings is geleë in /assets/formant_shift-lêergids",
+ "Timbre for formant shifting": "Timbre vir formantverskuiwing",
+ "Filter Radius": "Filter Radius",
+ "Formant Shifting": "Formant verskuiwing",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Stel die skoonmaakvlak op die klank wat jy wil hê, hoe meer jy dit verhoog, hoe meer sal dit skoonmaak, maar dit is moontlik dat die klank meer saamgepers sal word.",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Stel die toonhoogte van die klank in, hoe hoër die waarde, hoe hoër is die toonhoogte.",
+ "Search Feature Ratio": "Soek funksie verhouding",
+ "Volume Envelope": "Volume koevert",
+ "Convert": "Omskep",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "As die getal groter as of gelyk aan drie is, het die gebruik van mediaanfiltrering op die versamelde toonresultate die potensiaal om asemhaling te verminder.",
+ "Protect Voiceless Consonants": "Beskerm stemlose medeklinkers",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Invloed uitgeoefen deur die indekslêer; 'n hoër waarde stem ooreen met groter invloed. Die keuse van laer waardes kan egter help om artefakte wat in die klank teenwoordig is, te versag.",
+ "Batch": "Bondel",
+ "Pitch extraction algorithm": "Toonhoogte onttrekking algoritme",
+ "Export Audio": "Voer oudio uit",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Vervang of meng met die volume-koevert van die uitset. Hoe nader die verhouding aan 1 is, hoe meer word die uitsetkoevert gebruik.",
+ "Enter input path": "Voer invoerpad in",
+ "Input Folder": "Invoer gids",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Beskerm duidelike konsonante en asemhalingsgeluide om elektro-akoestiese skeur en ander artefakte te voorkom. Deur die parameter tot sy maksimum waarde van 0.5 te trek, bied dit omvattende beskerming. Die vermindering van hierdie waarde kan egter die omvang van beskerming verminder terwyl die indekseringseffek moontlik versag word.",
+ "Output Folder": "Afvoer gids",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Toonhoogte-ekstraksie-algoritme om te gebruik vir die oudio-omskakeling. Die standaardalgoritme is rmvpe, wat in die meeste gevalle aanbeveel word.",
+ "Select the folder where the output audios will be saved.": "Kies die gids waar die uitvoerklank gestoor sal word.",
+ "Enter output path": "Voer afvoerpad in",
+ "Select the folder containing the audios to convert.": "Kies die gids wat die oudio's bevat om om te skakel.",
+ "Get information about the audio": "Kry inligting oor die klank",
+ "## Voice Blender": "## Stem Blender",
+ "You can also use a custom path.": "Jy kan ook 'n pasgemaakte pad gebruik.",
+ "Drag and drop your model here": "Sleep en los jou model hier",
+ "Blend Ratio": "Meng verhouding",
+ "Voice Blender": "Stem Blender",
+ "Path to Model": "Pad na model",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Kies twee stemmodelle, stel die gewenste mengpersentasie in en meng dit in 'n heeltemal nuwe stem.",
+ "Model information to be placed": "Modelinligting wat geplaas moet word",
+ "Enter path to model": "Voer pad na model in",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Deur die posisie meer na die een of die ander kant aan te pas, sal die model meer soortgelyk wees aan die eerste of tweede.",
+ "Fusion": "Samesmelting",
+ "Inroduce the model information": "Inroduceer die modelinligting",
+ "View": "Bekyk",
+ "View model information": "Bekyk modelinligting",
+ "Introduce the model pth path": "Stel die model pth-pad bekend",
+ "Model extraction": "Model onttrekking",
+ "The information to be placed in the model (You can leave it blank or put anything).": "Die inligting wat in die model geplaas moet word (U kan dit leeg laat of enigiets plaas).",
+ "Model conversion": "Model omskakeling",
+ "Pth file": "Pth-lêer",
+ "Output of the pth file": "Uitvoer van die pth-lêer",
+ "Extract F0 Curve": "Onttrek F0-kurwe",
+ "Record": "Rekord",
+ "# How to Report an Issue on GitHub": "# Hoe om 'n probleem op GitHub aan te meld",
+ "Record Screen": "Neem skerm op",
+ "Stop Recording": "Stop opname",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Klik op die 'Opnameskerm'-knoppie hieronder om die probleem wat jy ervaar te begin opneem.",
+ "See Model Information": "Sien modelinligting",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "Die f0-kurwe verteenwoordig die variasies in die basisfrekwensie van 'n stem oor tyd, wat wys hoe toonhoogte styg en daal.",
+ "Introduce the model .pth path": "Stel die model .pth-pad bekend",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Gaan na [GitHub-kwessies] (https://github.com/IAHispano/Applio/issues) en klik op die 'Nuwe uitgawe'-knoppie.",
+ "## Download Model": "## Laai model af",
+ "Model Link": "Model skakel",
+ "Introduce the model link": "Stel die modelskakel bekend",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Sodra jy klaar is met die opname van die uitgawe, klik op die 'Stop opname'-knoppie (dieselfde knoppie, maar die etiket verander na gelang van of jy aktief opneem of nie).",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Voltooi die verskafde uitgawesjabloon, maak seker dat besonderhede ingesluit word soos nodig, en gebruik die batesafdeling om die opgeneemde lêer van die vorige stap op te laai.",
+ "Download Model": "Laai model af",
+ "## Drop files": "## Laat lêers los",
+ "Search": "Soek",
+ "## Search Model": "## Soek model",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Sleep jou .pth-lêer en .index-lêer na hierdie spasie. Sleep die een en dan die ander.",
+ "## Download Pretrained Models": "## Laai vooraf opgeleide modelle af",
+ "Introduce the model name to search.": "Stel die modelnaam bekend om te soek.",
+ "We couldn't find models by that name.": "Ons kon nie modelle met daardie naam vind nie.",
+ "And select the sampling rate": "En kies die steekproeftempo.",
+ "TTS Voices": "TTS-stemme",
+ "TTS Speed": "TTS-spoed",
+ "Increase or decrease TTS speed.": "Verhoog of verlaag TTS-spoed.",
+ "Select the pretrained model you want to download.": "Kies die vooraf opgeleide model wat jy wil aflaai.",
+ "Text to Synthesize": "Teks om te sintetiseer",
+ "Enter the text to synthesize.": "Voer die teks in om te sintetiseer.",
+ "Select the TTS voice to use for the conversion.": "Kies die TTS-stem om vir die omskakeling te gebruik.",
+ "Upload a .txt file": "Laai 'n .txt lêer op",
+ "Input path for text file": "Invoerpad vir tekslêer",
+ "The path to the text file that contains content for text to speech.": "Die pad na die tekslêer wat inhoud vir teks na spraak bevat.",
+ "Enter text to synthesize": "Voer teks in om te sintetiseer",
+ "Output Path for TTS Audio": "Afvoerpad vir TTS-klank",
+ "Output Path for RVC Audio": "Uitvoerpad vir RVC-klank",
+ "Enable Applio integration with Discord presence": "Aktiveer Applio-integrasie met Discord-teenwoordigheid",
+ "Enable fake GPU": "Aktiveer vals GPU",
+ "Language": "Taal",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "Dit sal die moontlikheid aktiveer om die huidige Applio-aktiwiteit in Discord te vertoon.",
+ "Enable Applio integration with applio.org/models using flask": "Aktiveer Applio-integrasie met applio.org/models met fles",
+ "It will activate the possibility of downloading models with a click from the website.": "Dit sal die moontlikheid aktiveer om modelle met 'n klik van die webwerf af te laai.",
+ "Select the theme you want to use. (Requires restarting Applio)": "Kies die tema wat jy wil gebruik. (Vereis herbegin van Applio)",
+ "Restart Applio": "Herbegin Applio",
+ "Select the language you want to use. (Requires restarting Applio)": "Kies die taal wat jy wil gebruik. (Vereis herbegin van Applio)",
+ "Precision": "Presisie",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "Opleiding word tans nie ondersteun nie weens die afwesigheid van 'n GPU. Om die opleidingsoortjie te aktiveer, navigeer na die instellingsoortjie en aktiveer die 'Vals GPU'-opsie.",
+ "Theme": "Tema",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Aktiveer die treinoortjie. Neem egter asseblief kennis dat hierdie toestel nie GPU-vermoëns het nie, dus word opleiding nie ondersteun nie. Hierdie opsie is slegs vir toetsdoeleindes. (Hierdie opsie sal Applio herbegin)",
+ "Plugin Installer": "Inprop-installeerder",
+ "Update precision": "Dateer presisie op",
+ "Select the precision you want to use for training and inference.": "Kies die presisie wat jy wil gebruik vir opleiding en afleiding.",
+ "Drag your plugin.zip to install it": "Sleep jou plugin.zip om dit te installeer",
+ "Post-Process": "Na-proses",
+ "Check for updates": "Kyk vir opdaterings",
+ "Reverb": "Galm",
+ "Version Checker": "Weergawe Kontroleerder",
+ "Post-process the audio to apply effects to the output.": "Na-verwerk die klank om effekte op die uitset toe te pas.",
+ "Reverb Damping": "Reverb demping",
+ "Reverb Room Size": "Reverb kamer grootte",
+ "Set the room size of the reverb.": "Stel die kamergrootte van die galm in.",
+ "Set the damping of the reverb.": "Stel die demping van die galm in.",
+ "Reverb Dry Gain": "Reverb droë wins",
+ "Check which version of Applio is the latest to see if you need to update.": "Kyk watter weergawe van Applio die nuutste is om te sien of jy moet opdateer.",
+ "Reverb Wet Gain": "Reverb nat wins",
+ "Set the wet gain of the reverb.": "Stel die nat wins van die galm in.",
+ "Set the dry gain of the reverb.": "Stel die droë wins van die galm in.",
+ "Reverb Width": "Reverb wydte",
+ "Apply reverb to the audio.": "Pas galm toe op die klank.",
+ "Set the width of the reverb.": "Stel die breedte van die galm in.",
+ "Set the freeze mode of the reverb.": "Stel die vriesmodus van die galm in.",
+ "Reverb Freeze Mode": "Reverb vries modus",
+ "Pitch Shift": "Toonhoogte verskuiwing",
+ "Apply pitch shift to the audio.": "Pas toonhoogteverskuiwing toe op die klank.",
+ "Set the pitch shift semitones.": "Stel die halftone van die toonhoogteverskuiwing in.",
+ "Limiter": "Beperker",
+ "Gain": "Wins",
+ "Apply limiter to the audio.": "Pas limiter toe op die klank.",
+ "Limiter Threshold dB": "Beperker Drempel dB",
+ "Limiter Release Time": "Beperker vrystelling tyd",
+ "Apply gain to the audio.": "Pas wins toe op die klank.",
+ "Set the limiter release time.": "Stel die vrystellingstyd van die beperker in.",
+ "Set the limiter threshold dB.": "Stel die beperkerdrempel dB.",
+ "Distortion": "Verdraaiing",
+ "Gain dB": "Kry dB",
+ "Apply distortion to the audio.": "Pas vervorming toe op die klank.",
+ "Set the gain dB.": "Stel die wins dB.",
+ "Distortion Gain": "Vervorming wins",
+ "Pitch Shift Semitones": "Toonhoogte Verskuiwing Halftone",
+ "Chorus": "Refrein",
+ "Set the distortion gain.": "Stel die vervormingswins in.",
+ "Chorus Rate Hz": "Refrein Tempo Hz",
+ "Apply chorus to the audio.": "Pas refrein toe op die klank.",
+ "Chorus Depth": "Refrein diepte",
+ "Set the chorus rate Hz.": "Stel die koortempo Hz in.",
+ "Set the chorus depth.": "Stel die refreindiepte in.",
+ "Chorus Feedback": "Refrein Terugvoer",
+ "Set the chorus center delay ms.": "Stel die koormiddelvertraging ms.",
+ "Chorus Mix": "Refrein mengsel",
+ "Set the chorus feedback.": "Stel die refreinterugvoer in.",
+ "Bitcrush": "Bitcrush",
+ "Chorus Center Delay ms": "Refrein Sentrum Vertraging ms",
+ "Clipping": "Afknippery",
+ "Bitcrush Bit Depth": "Bitcrush Bietjie Diepte",
+ "Set the chorus mix.": "Stel die refrein meng.",
+ "Set the bitcrush bit depth.": "Stel die bitcrush-bitdiepte in.",
+ "Clipping Threshold": "Knip Drempel",
+ "Apply clipping to the audio.": "Pas knipsel toe op die klank.",
+ "Compressor": "Kompressor",
+ "Set the clipping threshold.": "Stel die knipdrempel in.",
+ "Apply bitcrush to the audio.": "Pas bitcrush toe op die klank.",
+ "Compressor Threshold dB": "Kompressor drempel dB",
+ "Apply compressor to the audio.": "Pas kompressor op die klank toe.",
+ "Compressor Ratio": "Kompressor verhouding",
+ "Set the compressor ratio.": "Stel die kompressorverhouding in.",
+ "Delay": "Vertraag",
+ "Compressor Attack ms": "Kompressor aanval ms",
+ "Set the compressor threshold dB.": "Stel die kompressordrempel dB.",
+ "Set the compressor release ms.": "Stel die kompressorvrystelling ms.",
+ "Apply delay to the audio.": "Pas vertraging toe op die klank.",
+ "Set the compressor attack ms.": "Stel die kompressoraanval ms.",
+ "Compressor Release ms": "Kompressor vrystelling ms",
+ "Delay Seconds": "Vertraag sekondes",
+ "Delay Mix": "Vertraag mengsel",
+ "Delay Feedback": "Vertraag terugvoer",
+ "Set the delay seconds.": "Stel die vertraging sekondes in.",
+ "Set the delay feedback.": "Stel die vertragingsterugvoer in.",
+ "Set the delay mix.": "Stel die vertragingsmengsel in.",
+ "Custom Embedder": "Pasgemaakte inbedding",
+ "Folder Name": "Gids Naam",
+ "Upload .bin": "Laai .bin op",
+ "Upload .json": "Laai .json op",
+ "Select Custom Embedder": "Kies pasgemaakte inbedding",
+ "model information": "Model inligting",
+ "Model Creator": "Model Skepper",
+ "Refresh embedders": "Verfris insluiters",
+ "Name of the model creator. (Default: Unknown)": "Naam van die modelskepper. (Verstek: Onbekend)",
+ "Move files to custom embedder folder": "Skuif lêers na pasgemaakte insluitergids",
+ "Speaker ID": "Spreker ID",
+ "Model Author Name": "Model Skrywer Naam",
+ "Set name": "Stel naam",
+ "Select the speaker ID to use for the conversion.": "Kies die luidspreker-ID om vir die omskakeling te gebruik.",
+ "The name that will appear in the model information.": "Die naam wat in die modelinligting sal verskyn.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "Stel die outotune-sterkte in - hoe meer jy dit verhoog, hoe meer sal dit aan die chromatiese rooster klik."
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/am_AM.json b/assets/i18n/languages/am_AM.json
new file mode 100644
index 0000000000000000000000000000000000000000..a2b42d89bf52b9cf41a42a587956ce811ac4efe0
--- /dev/null
+++ b/assets/i18n/languages/am_AM.json
@@ -0,0 +1,325 @@
+{
+ "Inference": "ኢንፌክሽኑ",
+ "Extra": "ተጨማሪ",
+ "Output Information": "የውጤት መረጃ",
+ "Processing": "አሰራር",
+ "Training": "ስልጠና",
+ "The output information will be displayed here.": "የውጤት መረጃው እዚህ ይቀርባል።",
+ "Audio Analyzer": "የድምጽ ትንተና",
+ "Merge Audios": "ድምጽ ያዋህዱ",
+ "Plugins": "ፕለጊኖች",
+ "This section contains some extra utilities that often may be in experimental phases.": "ይህ ክፍል ብዙውን ጊዜ በሙከራ ደረጃ ላይ ሊሆኑ የሚችሉ ተጨማሪ መገልገያዎችን ይዟል።",
+ "Settings": "ምርጫዎች",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "ቀላል, ከፍተኛ ጥራት ያለው የድምጽ መለወጫ መሳሪያ የአጠቃቀም እና አፈጻጸም ቀላል ላይ ያተኮረ.",
+ "Report a Bug": "አንድ ቡግ ሪፖርት",
+ "Preprocess": "ቅድመ-ሂደት",
+ "Model Information": "የሞዴል መረጃ",
+ "Download": "አውርድ",
+ "Audio cutting": "የድምጽ መቁረጫ",
+ "Process effects": "የሂደት ውጤቶች",
+ "Enter model name": "የሞዴል ስም ያስገቡ",
+ "Model Name": "የሞዴል ስም",
+ "Name of the new model.": "የአዲሱ ሞዴል ስም።",
+ "Dataset Path": "የዳታሴት መንገድ",
+ "Dataset Name": "የዳሰት ስም",
+ "Dataset Creator": "የዳታሴት ፈጣሪ",
+ "Refresh Datasets": "ታደሰ ዳታሴቶች",
+ "Enter dataset name": "የዳታስም ስም ያስገቡ",
+ "Path to the dataset folder.": "ወደ ዳታሴቱ ፎልደር መንገድ።",
+ "Name of the new dataset.": "የአዲሱ የመረጃ ማሰሻ ስም።",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "ዳታሴትዎ አስቀድሞ የተሰሩ ከሆነ ይህንን አማራጭ ማጥፋት ይመከራል።",
+ "Upload Audio Dataset": "አውርድ ኦዲዮ ዳታሴት",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "የድምፅ ፋይሉ በመረጃ ውጤቱ ላይ በተሳካ ሁኔታ ተጨምሮበታል። እባክዎ ን ቅድመ ዝግጅት ቁልፍ ይጫኑ።",
+ "Sampling Rate": "የናሙና መጠን",
+ "Enter dataset path": "ወደ dataset መንገድ ግባ",
+ "Model Architecture": "ሞዴል አርክቴክቸር",
+ "Extract": "ውሂብ",
+ "Version of the model architecture.": "የሞዴል ንድፍ ቅጂ.",
+ "The sampling rate of the audio files.": "የድምጽ ፋይሎች ናሙና መጠን.",
+ "Preprocess Dataset": "ቅድመ ሂደት Dataset",
+ "Embedder Model": "Embedder ሞዴል",
+ "Model used for learning speaker embedding.": "ተናጋሪውን ለመማር የሚያገለግል ሞዴል።",
+ "Hop Length": "ሆፕ ርዝመት",
+ "Batch Size": "ባች መጠን",
+ "Save Every Epoch": "ሁሉንም ኤፖች አስቀምጥ",
+ "Determine at how many epochs the model will saved at.": "ሞዴሉ ምን ያህል ዘመን እንደሚቆጥብ ለማወቅ ሞክር።",
+ "Total Epoch": "ጠቅላላ ኢፖች",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "ሥርዓቱ ወደ ጉልህ የድምጽ ለውጥ ለመሸጋገር የሚፈጅበትን ጊዜ ያመለክታል። አነስተኛ የሆፕ ርዝመት ለመድገም ተጨማሪ ጊዜ የሚጠይቅ ቢሆንም የድምጽ መጠን ከፍ ያለ ነው።",
+ "Save Only Latest": "የቅርብ ጊዜውን ብቻ አስቀምጥ",
+ "Custom Pretrained": "የተለመደው ልማድ",
+ "Save Every Weights": "ሁሉንም ክብደት አስቀምጥ",
+ "Specifies the overall quantity of epochs for the model training process.": "ለሞዴል ማሰልጠኛ ሂደት አጠቃላይ የዘመን ብዛት ይገለጻል.",
+ "Pretrained": "በቅድሚያ የሰለጠነ",
+ "Refresh Custom Pretraineds": "የተለመዱ ትርጉሞች",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "በእርስዎ ጂፒዩ ከተዘጋጀው VRAM ጋር ማጣመም ይመከራል። የ 4 ማመቻቸት የተሻለ ትክክለኛነት ቢሆንም አሰራር ዝቅተኛ, 8 ደግሞ ፈጣን እና መደበኛ ውጤቶችን ይሰጣል.",
+ "Upload Pretrained Model": "ቅድመ-የሰለጠነ ሞዴል አውርድ",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "ይህ ሁኔታ በእያንዳንዱ ዘመን መደምደሚያ ላይ የሞዴሉን ክብደት ለመቆጠብ ያስችልሃል።",
+ "Pretrained Custom Settings": "አስቀድሞ የተለምደለባቸው ሁኔታዎች",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "ይህን ሁኔታ ማስቻል የጂ እና D ፋይሎች በቅርብ ጊዜ የተዘጋጁትን ትርጉሞቻቸውን ብቻ በማጠራቀም የማከማቻ ቦታን ጠብቆ እንዲቆይ ያደርጋል።",
+ "The file you dropped is not a valid pretrained file. Please try again.": "የጣልከው ፋይል ተቀባይነት ያለው አስቀድሞ የታነፀ ፋይል አይደለም። እባክዎ እንደገና ይሞክሩ.",
+ "Pretrained G Path": "የተለመደው ቅድመ ዝግጅት ጂ",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "የተለመዱ ሞዴሎችን መጠቀም የተሻለ ውጤት ሊያስገኝ ይችላል፤ በመሆኑም ከአጠቃቀም ጉዳይ ጋር የሚስማሙ ተስማሚ የሆኑ ቅድመ ዝግጅት ሞዴሎችን መምረጥ አቅምን በእጅጉ ሊያሻሽል ይችላል።",
+ "Pretrained D Path": "የተለመደው D",
+ "GPU Number": "GPU ቁጥር",
+ "GPU Custom Settings": "GPU Custom Settings",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "የድጋፉን ቁልፍ ጠቅ ያድርጉ ትርጉሙ ላይ አስቀድሞ የተቀመጠውን ፋይል በdropdown menu ውስጥ ለማየት.",
+ "GPU Settings": "GPU ምርጫዎች",
+ "The GPU information will be displayed here.": "የጂፒዩ መረጃ እዚህ ይቀርባል።",
+ "0 to ∞ separated by -": "0 ወደ ∞ ተለየ -",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "የተሻለ የ GPU ንድፍ ላላቸው ተጠቃሚዎች የተመከሩ የተራቀቁ የ GPU አቀማመጫዎችን ያስቀምጣል.",
+ "GPU Information": "GPU መረጃ",
+ "Pitch Guidance": "ፒች መመሪያ",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "በቅድመ ሂደቱ ውስጥ ለመጠቀም ሲፒዩ ኮሮች ብዛት. የdefault setting የእርስዎ cpu cores ነው, ይህም ለአብዛኛዎቹ ሁኔታዎች ይመከራል.",
+ "Use CPU": "ሲፒዩ ይጠቀሙ",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "ለቅድመ ሂደት መጠቀም የምትፈልገውን GPUs ቁጥር በሂፍ (-) በመለያየቶች በመለያየቶች ውስጥ በመግባት ለይተህ ግለጽ። በአሁኑ ጊዜ ባለብዙ-gpu መጠቀም ጉልህ ውጤት አይኖረውም.",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "በሃይፈን (-) በመለያየታቸው ለማውጣት የምትመኙትን ጂፒዩዎች ብዛት ለይታችሁ አስቀምጡ።",
+ "Force the use of CPU for training.": "ሲፒዩ ለሥልጠና እንዲውል አስገድድ።",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "በውሂብ ማውጣት ሂደት ውስጥ ለመጠቀም የ CPU ኮሮች ብዛት. የdefault setting የእርስዎ cpu cores ነው, ይህም ለአብዛኛዎቹ ሁኔታዎች ይመከራል.",
+ "Extract Features": "የውሂብ ገጽታዎች",
+ "Cache Dataset in GPU": "በ GPU ውስጥ Cache Dataset",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "የድምፁን ቃና በመጠቀም የድምፁን ቃና ጨምሮ የድምፁን ቃና ማንጸባረቅ ይቻላል። ይህ ገጽታ በተለይ ለመዝፈንም ሆነ የድምፁን ቃና ጠብቆ ለማቆየት በጣም አስፈላጊ ለሆኑ ሌሎች ሁኔታዎች በጣም ጠቃሚ ነው።",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "የራሳችሁን ሥልጠና በምታደርጉበት ጊዜ በቅድሚያ የሰለጠኑ ሞዴሎችን ተጠቀምባቸው። ይህ ዘዴ የስልጠና ጊዜን ይቀንሳል እና አጠቃላይ ጥራትን ያሻሽላል.",
+ "Cache the dataset in GPU memory to speed up the training process.": "የስልጠናውን ሂደት ለማፋጠን በGPU ትውስታ ውስጥ ያለውን dataset Cache.",
+ "Index Algorithm": "ኢንዴክስ አልጎሪዝም",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "ፈጣን አፈጻጸም ለማግኘት በ GPU ላይ ሞዴል ማውጣት ን በማከናወን ቅድሚያ እንስጥ. ሲፒዩ መጠቀም የምትመርጥ ከሆነ የጂፒዩ መስክ ባዶ እንዲሆን አድርግ።",
+ "Overtraining Detector": "ከመጠን በላይ ማሰልጠኛ መርማሪ",
+ "Overtraining Threshold": "ከመጠን በላይ ማሰልጠን",
+ "Fresh Training": "አዲስ ስልጠና",
+ "Overtraining Detector Settings": "ከመጠን በላይ ማሰልጠኛ ዲክተር ሴቲንግስ",
+ "Start Training": "ስልጠና ጀምር",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans (KMeans) datasetን ወደ K ክላስተሮች የሚከፋፍል ክምችት ያለው አልጎሪዝም ነው። ይህ ሁኔታ በተለይ ለትላልቅ የመረጃ ማሰሮዎች በጣም ጠቃሚ ነው።",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "ሞዴሉ የሥልጠናውን መረጃ በደንብ እንዳይማርና አዳዲስ መረጃዎችን የማሰባሰብ ችሎታውን እንዳያጣ ለማድረግ ከልክ ያለፈ ሥልጠና ማግኘት ትችላለህ።",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "ሞዴልህ ምንም ዓይነት መሻሻል ካልታየ ሥልጠናውን እንዲያቆም የምትፈልገውን ዘመን ብዛት አስቀምጥ።",
+ "Generate Index": "ኢንዴክስ",
+ "Stop Training": "ስልጠና አቁሙ",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "ለፈጣን አፈጻጸም በGPU ላይ ሞዴል ቅድመ-ሰርን መስራት ቅድሚያ እንስጥ. ሲፒዩ መጠቀም የምትመርጥ ከሆነ የጂፒዩ መስክ ባዶ እንዲሆን አድርግ።",
+ "Export Model": "ኤክስፖርት ሞዴል",
+ "Exported Pth file": "ኤክስፖርት የPth ፋይል",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "ይህን ማድረግ የምትችለው አዲስ ሞዴል እያሠለጠንክ ወይም ሥልጠናውን እንደገና ከጀመርክ ብቻ ነው። ቀደም ሲል ያመነጩትን ክብደትና tensorboard እንጨቶች በሙሉ ያጠፋሉ።",
+ "Exported Index file": "የውጪ ማውጫ ፋይል",
+ "Select the pth file to be exported": "ወደ ውጭ የሚላክበትን pth ፋይል ይምረጡ",
+ "Voice Model": "የድምፅ ሞዴል",
+ "Upload": "አውርድ",
+ "Index File": "ፋይል ማውጫ",
+ "Select the index file to be exported": "ወደ ውጭ የሚላክበትን ማውጫ ፋይል ይምረጡ",
+ "Refresh": "እረፍት",
+ "Single": "ነጠላ",
+ "Unload Voice": "ድምጽ ያራግፋል",
+ "Select the voice model to use for the conversion.": "ለመለወጥ የሚጠቀሙበትን የድምጽ ሞዴል ይምረጡ።",
+ "Upload Audio": "አውርድ ኦዲዮ",
+ "Select the index file to use for the conversion.": "ለመለወጥ የሚጠቀሙበትን ማውጫ ፋይል ይምረጡ።",
+ "Select Audio": "ኦዲዮ ይምረጡ",
+ "Advanced Settings": "የተራቀቁ ምርጫዎች",
+ "Select the audio to convert.": "ለመቀየር ድምጽ ይምረጡ።",
+ "Output Path": "የውጤት መንገድ",
+ "Custom Output Path": "የተለመደው የውጤት መንገድ",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "'Upload' የሚለው ቁልፍ ለ google colab ብቻ ነው። በGoogle Driveዎ ውስጥ ወደ አፕሊዮኤክስፖርትድ ፎልደር የሚላኩትን ፋይሎች ያራግፉ።",
+ "Export Format": "ኤክስፖርት ፎርማት",
+ "Clear Outputs (Deletes all audios in assets/audios)": "ግልጽ የሆኑ ውጤቶች (ሁሉንም ኦዲዮዎች በንብረቶች/ኦዲዮዎች ላይ ያጠፋል)",
+ "Split Audio": "ኦዲዮ መከፋፈያ",
+ "Select the format to export the audio.": "ኦዲዮውን ለመላክ ፎርማት ይምረጡ።",
+ "Autotune": "አውቶቱን",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "አንዳንድ ጊዜ የተሻለ ውጤት ለማግኘት ድምጽህን በቆራረጥ ክፈለው።",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "የውጤት ድምጽ የሚታደግበት መንገድ፣ በባለሀብቶች/በድምጽ/output.wav",
+ "Clean Audio": "ንጹህ ኦዲዮ",
+ "Clean Strength": "ንጹህ ጥንካሬ",
+ "Upscale Audio": "ከፍተኛ መጠን ያለው ኦዲዮ",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "የመዝሙር መለወጫዎችን ለመዘመር በሚመከረው ሐሳብ ላይ ለስለስ ያለ አውቶማቲክ ሙዚቃ ተለማመድ።",
+ "Formant Shifting": "ፎርማታንት ሺፍ",
+ "Timbre for formant shifting": "ቅርጽ ያለው ለውጥ ለማድረግ የሚያስችል ቲምበር",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "የድምጽ ድምጽዎን ለመለየት በሚያስችሉ አልጎሪቶች በመጠቀም ድምጽዎን አጽዱ።",
+ "Presets are located in /assets/formant_shift folder": "Presets የሚገኘው /assets/formant_shift ፎልደር ውስጥ ነው",
+ "Default value is 1.0": "የቅድሚያ ዋጋ 1.0 ነው",
+ "Quefrency for formant shifting": "Quefrency for formant shifting",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "ቅርጽ ያለው ለውጥ ማድረግ። ለወንድ ወደ ሴት እና ተቃራኒ-መለዋወጫዎች ጥቅም ላይ ይውላል.",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "የድምጽ መጠን ወደ ከፍተኛ ጥራት, ዝቅተኛ ጥራት ያላቸው የድምጽ ማጉያዎች ይመከራል. (ድምጽን ለማስተካከል ረዘም ያለ ጊዜ ሊወስድ ይችላል)",
+ "Pitch": "ፒች",
+ "Filter Radius": "ማጣሪያ ራዲየስ",
+ "Search Feature Ratio": "የፍለጋ ገጽታ ሬሾ",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "የፅዳት ደረጃን ወደምትፈልጉት ድምጽ አስቀምጡ። የበለጠ በጨመርከው መጠን ያጸዳል። ይሁን እንጂ ድምፁ የበለጠ ይጨመርይሆናል።",
+ "Volume Envelope": "የድምጽ ፖስታ",
+ "Browse presets for formanting": "ድረ ገጾች ፎርማንቲንግን አስቀድመው ያዘጋጃሉ",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "የድምጹን ቃና አስቀምጥ፣ ዋጋው ከፍ ባለ መጠን ድምጹም ከፍ ይላል።",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "ቁጥሩ ከሶስት በላይ ከሆነ ወይም ከሶስት እኩል ከሆነ በተሰበሰበው የድምፅ መጠን ውጤት ላይ መለስተኛ ማጣራት ንቅሳቱን የመቀነስ አቅም አለው።",
+ "Convert": "ቀይር",
+ "Pitch extraction algorithm": "ፒች extraction አልጎሪዝም",
+ "Export Audio": "ኤክስፖርት ኦዲዮ",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "የማውጫ ፋይሉ የሰራው ተፅዕኖ፤ ከፍ ያለ ዋጋ መስጠት ከፍተኛ ተጽዕኖ ከማሳደር ጋር ተመሳሳይ ነው ። ይሁን እንጂ ዝቅተኛ የሥነ ምግባር እሴቶችን መምረጡ በድምፅ ላይ የቀረቡትን ዕቃዎች ለመቀነስ ይረዳል።",
+ "Batch": "ባች",
+ "Protect Voiceless Consonants": "ድምፅ አልባ ኮንሶናንቶችን ጠብቅ",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "የድምጽ ፖስታውን በምትኩ ወይም በውህደት ይደባለቁ። አሃዝ ወደ 1 እየቀረበ በቀረበ መጠን የምርታቱ ፖስታም የዚያኑ ያህል ተቀጥሮ ይገኛል።",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "ፒች extraction አልጎሪዝም ለድምጽ መለወጫ ለመጠቀም. የቅድሚያ አልጎሪዝም rmvpe ነው, ይህም ለአብዛኛዎቹ ሁኔታዎች ይመከራል.",
+ "Enter input path": "ወደ ውስጥ መግባት መንገድ",
+ "Input Folder": "ፎልደር",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "ኤሌክትሮ-አኮስቲክ ና ሌሎች ዕቃዎች እንዳይበጠሱ ለመከላከል የተለያዩ ድምፆችንና የመተንፈስ ድምፆችን ጠብቅ። ፓራሜሩን ወደ ከፍተኛ ዋጋው 0.5 መጎተት የተሟላ ጥበቃ ያስገኛል ። ይሁን እንጂ ይህን ዋጋ መቀነስ የማውጫውን ውጤት ሊቀንስ ቢችልም ጥበቃ የማድረግን መጠን ሊቀንስ ይችላል ።",
+ "Output Folder": "የውጤት ፎልደር",
+ "Enter output path": "የውጤት መንገድ አስገባ",
+ "Select the folder where the output audios will be saved.": "የውጤቶቹ ድምጽ የሚቆጥብበትን ፎልደር ይምረጡ።",
+ "Voice Blender": "የድምጽ ብሌንደር",
+ "## Voice Blender": "## ድምፃዊ በለጠ",
+ "Get information about the audio": "ስለ ድምጽ መረጃ ያግኙ",
+ "You can also use a custom path.": "ከዚህም በተጨማሪ የለመደውን መንገድ መጠቀም ትችላለህ ።",
+ "Blend Ratio": "የውህድ አሃዝ",
+ "Drag and drop your model here": "የእርስዎን ሞዴል እዚህ ይጎትቱ እና ይጥሉ",
+ "Select the folder containing the audios to convert.": "የድምጽ ጽሁፎችን የያዘውን ፎልደር ይምረጡ።",
+ "Enter path to model": "ወደ ሞዴል መንገድ ይግቡ",
+ "Fusion": "ውህደት",
+ "Model information to be placed": "የሞዴል መረጃ ማስቀመጥ",
+ "Inroduce the model information": "የሞዴል መረጃን ኢንሮዱስ",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "ቦታውን ወደ አንድ ወይም ወደ ሌላኛው አቅጣጫ ይበልጥ ማስተካከል ሞዴሉን ከመጀመሪያው ወይም ከሁለተኛው ጋር ይበልጥ እንዲመሳሰል ያደርገዋል።",
+ "Path to Model": "ወደ ሞዴል መንገድ",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "ሁለት የድምፅ ሞዴሎችን ምረጥ፣ የምትፈልገውን የድምር መጠን አስቀምጥ፣ እናም ሙሉ በሙሉ አዲስ በሆነ ድምፅ ውስጥ አስቀምጣቸው።",
+ "View": "ይመልከቱ",
+ "Introduce the model pth path": "ሞዴል pth መንገድ ያስተዋውቁ",
+ "Model extraction": "ሞዱል Extraction",
+ "Model conversion": "የሞዴል መለወጫ",
+ "View model information": "የሞዴል መረጃ ይመልከቱ",
+ "Output of the pth file": "የPth ፋይል ውጤት",
+ "The information to be placed in the model (You can leave it blank or put anything).": "በሞዴሉ ውስጥ ሊቀመጥ የሚገባው መረጃ (ባዶ መተው ወይም ማንኛውንም ነገር ማስቀመጥ ትችላለህ)።",
+ "Extract F0 Curve": "የ F0 ኩርባ ማውጣት",
+ "# How to Report an Issue on GitHub": "# በGitHub ላይ አንድ ጉዳይ እንዴት ሪፖርት ማድረግ ይቻላል?",
+ "Pth file": "Pth ፋይል",
+ "Record": "መዝገብ",
+ "Record Screen": "የመዝገብ ስክሪን",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. እያጋጠመዎት ያለውን ጉዳይ መቅዳት ለመጀመር ከታች ያለውን 'Record Screen' የሚለውን ቁልፍ ይጫኑ።",
+ "Stop Recording": "መቅዳት አቁሙ",
+ "Model Link": "የሞዴል አገናኝ",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "ኤፍ0 መሽከርከር ድምፁ በጊዜ ሂደት የድምፁን መሠረታዊ ቅደም ተላፊነት የሚያመለክት ሲሆን ይህም ድምፁ እንዴት ከፍ እንደሚልና እንዴት እንደሚወድቅ ያሳያል።",
+ "Introduce the model .pth path": "ሞዴሉን ያስተዋውቁ .pth መንገድ",
+ "## Download Model": "## አውርድ",
+ "See Model Information": "የሞዴል መረጃ ይመልከቱ",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. ወደ [GitHub Issues](https://github.com/IAHispano/Applio/issues) በመሄድ 'አዲስ ጉዳይ' የሚለውን ቁልፍ ይጫኑ።",
+ "Introduce the model link": "የሞዱሉን አገናኝ ያስተዋውቁ",
+ "Download Model": "አውርድ",
+ "## Drop files": "፲፭ ፋይሎችን ይጥላሉ",
+ "Search": "ፍለጋ",
+ "## Search Model": "## የፍለጋ ሞዴል",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. የተሰጡትን የጉዳዩ ቴምፕሊት በማጠናቀቅ፣ አስፈላጊ ሆኖ ሲታሰብ ዝርዝር ጉዳዮችን ማካተት፣ እና የተመዘገበውን ፋይል ከቀድሞው እርምጃ ለማውረድ የንብረቱን ክፍል መጠቀም።",
+ "Introduce the model name to search.": "ለመፈለግ የሞዴል ስም ያስተዋውቁ.",
+ "We couldn't find models by that name.": "በዚህ ስም ሞዴሎችን ማግኘት አልቻልንም።",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. ጉዳዩን ቀድመህ ከጨረስክ በኋላ ‹‹አቁሙ ሪከርዲንግ›› የሚለውን ቁልፍ (ያንኑ ቁልፍ ይጫኑ። ይሁንእንጂ ምልክቱ የሚለዋወጠው በንቃት እየተቀዳችሁ መሆን አለመቅረጻቸው ወይም አለመቀረጻቸው ላይ ነው።)",
+ "TTS Voices": "TTS ድምጾች",
+ "## Download Pretrained Models": "## አስቀድሞ የሰለጠኑ ሞዴሎችን አውርድ",
+ "And select the sampling rate": "እንዲሁም የናሙናውን ፍጥነት ምረጥ።",
+ "TTS Speed": "TTS ፍጥነት",
+ "Increase or decrease TTS speed.": "TTS ፍጥነት መጨመር ወይም መቀነስ.",
+ "Text to Synthesize": "የጽሑፍ መልእክት",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "የእርስዎን .pth ፋይል እና .ማውጫ ፋይል ወደ እዚህ ቦታ ይጎትቱ. አንዱን ከዚያም ሌላውን ጎት።",
+ "Select the pretrained model you want to download.": "ለማውረድ የምትፈልገውን አስቀድሞ የሰለጠነ ሞዴል ይምረጡ።",
+ "Select the TTS voice to use for the conversion.": "ለመለወጥ ለመጠቀም የ TTS ድምጽ ይምረጡ.",
+ "Upload a .txt file": ".txt ፋይል አውርድ",
+ "Enter the text to synthesize.": "ጽሑፉን ለማቀናጀት አስገባ።",
+ "Enter text to synthesize": "ለማቀናጀት ጽሑፍ ያስገቡ",
+ "Input path for text file": "የጽሁፍ ፋይል መንገድ",
+ "Output Path for TTS Audio": "የ ውጤት መንገድ ለ TTS ኦዲዮ",
+ "Output Path for RVC Audio": "የ ውጤት መንገድ ለ RVC ኦዲዮ",
+ "Enable fake GPU": "የውሸት ጂፒዩ",
+ "Enable Applio integration with Discord presence": "አፕሊዮ ከዲስኮርድ መገኘት ጋር እንዲቀላቀል ያስችሉ",
+ "Theme": "ጭብጥ",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "በአሁኑ ጊዜ ያለውን አፕሊዮ እንቅስቃሴ በዲስኮርድ የማሳየት አጋጣሚን ያነቃቃል።",
+ "Restart Applio": "አፕሊዮ እንደገና ማስጀመር",
+ "The path to the text file that contains content for text to speech.": "የጽሑፉን ይዘት የያዘውን የጽሁፍ ፋይል መንገድ።",
+ "It will activate the possibility of downloading models with a click from the website.": "ሞዴሎችን ከድረ ገጹ ላይ በመጫን ማውረድ የሚቻልበትን አጋጣሚ ያነቃቃል።",
+ "Enable Applio integration with applio.org/models using flask": "አፕሊዮ applio.org/models ጋር እንዲቀላቀል ማድረግ",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "የባቡር መክፈቻን አንቀሳቅሷል። ይሁን እባክዎ ይህ መሳሪያ የ GPU አቅም እንደሌለው ልብ ይበሉ, ስለዚህ ስልጠና አይደገፍም. ይህ አማራጭ ለፈተና ዓላማ ብቻ ነው. (ይህ አማራጭ አፕሊዮ እንደገና ይጀምራል)",
+ "Language": "ቋንቋ",
+ "Precision": "ትክክለኛ",
+ "Select the theme you want to use. (Requires restarting Applio)": "ልትጠቀሙበት የምትፈልጉትን ጭብጥ ምረጡ። (አፕሊዮ እንደገና ማስጀመር ያስፈልጋል)",
+ "Select the language you want to use. (Requires restarting Applio)": "መጠቀም የምትፈልገውን ቋንቋ ምረጥ። (አፕሊዮ እንደገና ማስጀመር ያስፈልጋል)",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "በአሁኑ ጊዜ ጂ ፒ ዩ ባለመኖሩ ምክንያት ሥልጠናው ድጋፍ የለውም ። የስልጠናውን መክፈቻ ለማንቀሳቅስ ወደ settings tab በመጓዝ 'Fake GPU' የሚለውን አማራጭ ማስቻል።",
+ "Update precision": "ትክክለኛ አሻሽሉ",
+ "Plugin Installer": "ፕለጊን Installer",
+ "Drag your plugin.zip to install it": "ለመግጠም የእርስዎን plugin.zip ይጎትቱ",
+ "Select the precision you want to use for training and inference.": "ለስልጠና እና ለአተገባደድ መጠቀም የምትፈልገውን ትክክለኛ ነት ይምረጡ።",
+ "Check for updates": "የተሻሻሉ መረጃዎችን ይመልከቱ",
+ "Post-Process": "የድህረ-ሂደት",
+ "Reverb": "ራቨርብ",
+ "Version Checker": "ቨርዥን ቼከር",
+ "Reverb Room Size": "Reverb ክፍል መጠን",
+ "Check which version of Applio is the latest to see if you need to update.": "ማሻሻያ ማድረግ ያስፈልግህ እንደሆነ ለማወቅ አፕሊዮ የተባለው እትም የትኛው እንደሆነ ለማወቅ በቅርብ የተዘጋጀ መሆኑን አረጋግጥ።",
+ "Reverb Damping": "Reverb Damping",
+ "Post-process the audio to apply effects to the output.": "በውጤቱ ላይ ተፅዕኖዎችን ለመተግበር ከሂደቱ በኋላ ድምጽ.",
+ "Set the room size of the reverb.": "የክፍሉን መጠን አስቀምጥ።",
+ "Reverb Wet Gain": "ሪቨርብ እርጥብ ትርፍ ማግኘት",
+ "Apply reverb to the audio.": "በድምጽ ላይ ያለውን አመልካች አስቀምጥ።",
+ "Set the damping of the reverb.": "የረከሰውን እርጥብ አስቀምጥ።",
+ "Reverb Dry Gain": "ራቨርብ ደረቀ ትርፍ",
+ "Reverb Width": "ራቨርብ ስፋት",
+ "Set the dry gain of the reverb.": "የክብሩን የደረቀ ትርፍ አስቀምጥ።",
+ "Reverb Freeze Mode": "ሪቨርብ ማቀዝቀዣ ዘዴ",
+ "Set the width of the reverb.": "የክብሩን ስፋት አስቀምጥ።",
+ "Pitch Shift": "ፒች ሺፍ",
+ "Set the freeze mode of the reverb.": "የቀዘቀዘውን የሽምግልና ዘዴ አስቀምጥ።",
+ "Limiter": "ገደብ",
+ "Set the wet gain of the reverb.": "የአክብሮት ንረት ያለውን ትርፍ አስቀምጥ።",
+ "Limiter Threshold dB": "Limiter Threshold dB",
+ "Apply pitch shift to the audio.": "የድምፅ መቀያየርን ወደ ድምጽ አስቀምጥ።",
+ "Apply limiter to the audio.": "በድምጽ ላይ ገደብ ይኑርህ።",
+ "Set the pitch shift semitones.": "የድምጹን ቃና በከፊል አስቀምጥ።",
+ "Set the limiter threshold dB.": "የመደቡ መጠን dB አስቀምጥ።",
+ "Gain": "ትርፍ",
+ "Limiter Release Time": "የልቀት ጊዜ ገደብ",
+ "Set the limiter release time.": "የመልቀቂያ ጊዜ ገደብ ይኑርህ ።",
+ "Gain dB": "ግኑኝነት dB",
+ "Pitch Shift Semitones": "ፒች Shift Semitones",
+ "Apply gain to the audio.": "በድምጽ ላይ ትርፍ ይኑርህ።",
+ "Set the gain dB.": "ትርፉን ዲቢ አስቀምጥ።",
+ "Distortion": "የተዛባ አመለካከት",
+ "Distortion Gain": "የተዛባ አመለካከት",
+ "Chorus": "የመዘምራን ማህደር",
+ "Set the distortion gain.": "የተዛባ ትርፍ አስቀምጥ።",
+ "Apply distortion to the audio.": "በድምጽ ላይ የተዛባ ነገር ይኑርህ።",
+ "Apply chorus to the audio.": "የድምጽ ማህደር ይመልከቱ.",
+ "Chorus Rate Hz": "Chorus Rate Hz",
+ "Set the chorus rate Hz.": "የመዘምራን ቁጥር Hz የሚለውን ስም አስቀምጥ።",
+ "Chorus Depth": "የኮርስ ጥልቀት",
+ "Chorus Feedback": "Chorus Feedback",
+ "Chorus Center Delay ms": "የመዘምራን ማዕከል መዘግየት ms",
+ "Set the chorus center delay ms.": "የመዘምራኑ ማዕከል ዘግይቶ ሚስ.",
+ "Set the chorus depth.": "የምእመናኑን ጥልቀት አስቀምጥ።",
+ "Bitcrush": "ቢትሽሩሽ",
+ "Set the chorus mix.": "የምስቅል ቅልቅል አኑሩ።",
+ "Chorus Mix": "Chorus Mix",
+ "Bitcrush Bit Depth": "Bitcrush ቢት ጥልቀት",
+ "Apply bitcrush to the audio.": "በድምጽ ላይ bitcrush ጠቅ አድርግ.",
+ "Clipping": "ቆራረጥ",
+ "Set the chorus feedback.": "የምእመናኑ አስተያየት ይኑርህ።",
+ "Set the bitcrush bit depth.": "ጥልቀቱን አስቀምጥ።",
+ "Apply clipping to the audio.": "በድምጽ ላይ ቁምፊ ይመልከቱ።",
+ "Set the clipping threshold.": "የመቁረጫውን መድረክ አስቀምጥ።",
+ "Clipping Threshold": "መክተቻዎች",
+ "Compressor": "ኮምፕሬስተር",
+ "Compressor Threshold dB": "ኮምፕሬስተር መዳረሻ dB",
+ "Compressor Ratio": "ኮምፕረስተር ሬሾ",
+ "Apply compressor to the audio.": "ወደ ድምጽ compressor ይመልከቱ.",
+ "Set the compressor threshold dB.": "የcompressor መዳረሻ dB ያስቀምጡ.",
+ "Set the compressor ratio.": "የኮምፕሬሰሩ መጠን ይኑርህ።",
+ "Compressor Attack ms": "Compressor ጥቃት ms",
+ "Delay": "ዘገየ",
+ "Set the compressor release ms.": "compressor መለቀቅ ms.",
+ "Compressor Release ms": "compressor መልቀቅ ms",
+ "Apply delay to the audio.": "ወደ ድምጽ መዘግየት ይመልከቱ.",
+ "Set the compressor attack ms.": "የኮምፕሬሰሩ ጥቃት ሚስ.",
+ "Set the delay seconds.": "የዘገየውን ሰኮንዶች አስቀምጥ።",
+ "Delay Feedback": "የዘገየ Feedback",
+ "Delay Seconds": "ሰከንዶች መዘግየት",
+ "Set the delay feedback.": "የዘገየውን አስተያየት አስቀምጥ።",
+ "Delay Mix": "የዘገየ ሚጥሚጣ",
+ "Custom Embedder": "የተለመደው Embedder",
+ "Set the delay mix.": "የዘገየውን ድብልቅ አድርግ።",
+ "Select Custom Embedder": "ይምረጡ Custom Embedder",
+ "Folder Name": "ፎልደር ስም",
+ "Upload .bin": ".bin አውርድ",
+ "Refresh embedders": "የመልሶ ማደያ ዎች",
+ "Upload .json": ".json አውርድ",
+ "Model Creator": "አርአያ ፈጣሪ",
+ "model information": "የሞዴል መረጃ",
+ "Move files to custom embedder folder": "ፋይሎችን ወደ ልምዱ embedder ፎልደር ይንቀሳቀሳሉ",
+ "Speaker ID": "የተናጋሪ መታወቂያ",
+ "Model Author Name": "ሞዴል ደራሲ ስም",
+ "Select the speaker ID to use for the conversion.": "ለመለወጥ የሚጠቀሙበትን የተናጋሪውን መታወቂያ ይምረጡ።",
+ "Name of the model creator. (Default: Unknown)": "የሞዴል ፈጣሪ ስም. (አስረጅ፦ ያልታወቀ)",
+ "The name that will appear in the model information.": "በሞዴል መረጃላይ የሚታየው ስም።",
+ "Set name": "ስም አስቀምጥ",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "አውቶቱን ጥንካሬ አስቀምጥ - ይበልጥ በጨመርከው መጠን ወደ ክሮማቲክ መስመር ይበልጥ ይጣበቃል ።"
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/ar_AR.json b/assets/i18n/languages/ar_AR.json
new file mode 100644
index 0000000000000000000000000000000000000000..298eb18ccc7f9228f53640cb9b5c9d491c01fab0
--- /dev/null
+++ b/assets/i18n/languages/ar_AR.json
@@ -0,0 +1,325 @@
+{
+ "Extra": "اضافيه",
+ "Inference": "استدلال",
+ "Training": "تدريب",
+ "Output Information": "معلومات الإخراج",
+ "Download": "تحميل",
+ "Processing": "تجهيز",
+ "Model Information": "معلومات النموذج",
+ "Plugins": "الإضافات",
+ "Audio Analyzer": "محلل الصوت",
+ "Merge Audios": "دمج الصوتيات",
+ "Report a Bug": "الإبلاغ عن خطأ",
+ "Preprocess": "المعالجة المسبقة",
+ "Audio cutting": "قطع الصوت",
+ "This section contains some extra utilities that often may be in experimental phases.": "يحتوي هذا القسم على بعض الأدوات المساعدة الإضافية التي قد تكون غالبا في المراحل التجريبية.",
+ "Model Name": "اسم الموديل",
+ "Dataset Path": "مسار مجموعة البيانات",
+ "Refresh Datasets": "تحديث مجموعات البيانات",
+ "Enter model name": "أدخل اسم الطراز",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "أداة تحويل صوت بسيطة وعالية الجودة تركز على سهولة الاستخدام والأداء.",
+ "Name of the new dataset.": "اسم مجموعة البيانات الجديدة.",
+ "Name of the new model.": "اسم النموذج الجديد.",
+ "Path to the dataset folder.": "المسار إلى مجلد مجموعة البيانات.",
+ "Dataset Creator": "منشئ مجموعة البيانات",
+ "The output information will be displayed here.": "سيتم عرض معلومات الإخراج هنا.",
+ "Dataset Name": "اسم مجموعة البيانات",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "يوصى بإلغاء تنشيط هذا الخيار إذا تمت معالجة مجموعة البيانات الخاصة بك بالفعل.",
+ "Process effects": "تأثيرات العملية",
+ "Enter dataset name": "أدخل اسم مجموعة البيانات",
+ "Sampling Rate": "معدل أخذ العينات",
+ "Model Architecture": "نموذج العمارة",
+ "Enter dataset path": "إدخال مسار مجموعة البيانات",
+ "Version of the model architecture.": "نسخة من بنية النموذج.",
+ "Hop Length": "طول القفزة",
+ "Preprocess Dataset": "مجموعة بيانات ما قبل المعالجة",
+ "Embedder Model": "نموذج التضمين",
+ "The sampling rate of the audio files.": "معدل أخذ العينات من الملفات الصوتية.",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "تمت إضافة الملف الصوتي بنجاح إلى مجموعة البيانات. الرجاء النقر فوق زر المعالجة المسبقة.",
+ "Settings": "اعدادات",
+ "Batch Size": "حجم الدفعة",
+ "Save Every Epoch": "حفظ كل حقبة",
+ "Total Epoch": "إجمالي العصر",
+ "Upload Audio Dataset": "تحميل مجموعة بيانات صوتية",
+ "Pretrained": "التدريب المسبق",
+ "Model used for learning speaker embedding.": "نموذج يستخدم لتعلم تضمين المتحدث.",
+ "Determine at how many epochs the model will saved at.": "حدد عدد الفترات التي سيتم حفظ النموذج فيها.",
+ "Save Only Latest": "حفظ الأحدث فقط",
+ "Extract": "استخرج",
+ "Save Every Weights": "حفظ كل الأوزان",
+ "Custom Pretrained": "تدريب مسبق مخصص",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "ينصح بمحاذاته مع VRAM المتاح لوحدة معالجة الرسومات الخاصة بك. يوفر الإعداد 4 دقة محسنة ولكن معالجة أبطأ ، بينما يوفر 8 نتائج أسرع وقياسية.",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "يشير إلى المدة التي يستغرقها النظام للانتقال إلى تغيير كبير في درجة الصوت. تتطلب أطوال القفزات الأصغر مزيدا من الوقت للاستدلال ولكنها تميل إلى تحقيق دقة أعلى في درجة الصوت.",
+ "Upload Pretrained Model": "تحميل نموذج تم تدريبه مسبقا",
+ "Specifies the overall quantity of epochs for the model training process.": "يحدد الكمية الإجمالية للعهود لعملية التدريب النموذجية.",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "يمكنك هذا الإعداد من حفظ أوزان النموذج في نهاية كل حقبة.",
+ "Pretrained Custom Settings": "الإعدادات المخصصة المدربة مسبقا",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "سيؤدي تمكين هذا الإعداد إلى حفظ ملفات G و D لأحدث إصداراتها فقط ، مما يوفر مساحة التخزين بشكل فعال.",
+ "Refresh Custom Pretraineds": "تحديث التدريبات المسبقة المخصصة",
+ "The file you dropped is not a valid pretrained file. Please try again.": "الملف الذي أسقطته ليس ملفا صالحا تم تدريبه مسبقا. يرجى المحاولة مرة أخرى.",
+ "GPU Number": "رقم وحدة معالجة الرسومات",
+ "Pretrained D Path": "مخصص مسبق التدريب D",
+ "0 to ∞ separated by -": "0 إلى ∞ مفصولة ب -",
+ "The GPU information will be displayed here.": "سيتم عرض معلومات GPU هنا.",
+ "GPU Custom Settings": "الإعدادات المخصصة لوحدة معالجة الرسومات",
+ "Use CPU": "استخدام وحدة المعالجة المركزية",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "انقر فوق زر التحديث لرؤية الملف الذي تم اختباره مسبقا في القائمة المنسدلة.",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "يضبط إعدادات GPU المتقدمة ، الموصى بها للمستخدمين الذين لديهم بنية GPU أفضل.",
+ "Pitch Guidance": "توجيه الملعب",
+ "GPU Information": "معلومات وحدة معالجة الرسومات",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "عدد نوى وحدة المعالجة المركزية لاستخدامها في المعالجة المسبقة. الإعداد الافتراضي هو نوى وحدة المعالجة المركزية الخاصة بك ، والذي يوصى به لمعظم الحالات.",
+ "Extract Features": "استخراج الميزات",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "يمكن أن يؤدي استخدام النماذج المخصصة المدربة مسبقا إلى نتائج فائقة ، حيث أن اختيار النماذج الأكثر ملاءمة للاختبار المسبق والمصممة خصيصا لحالة الاستخدام المحددة يمكن أن يعزز الأداء بشكل كبير.",
+ "Pretrained G Path": "مخصص مسبقا G",
+ "GPU Settings": "إعدادات وحدة معالجة الرسومات",
+ "Force the use of CPU for training.": "فرض استخدام وحدة المعالجة المركزية للتدريب.",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "عدد نوى وحدة المعالجة المركزية لاستخدامها في عملية الاستخراج. الإعداد الافتراضي هو نوى وحدة المعالجة المركزية الخاصة بك ، والذي يوصى به لمعظم الحالات.",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "حدد عدد وحدات معالجة الرسومات التي ترغب في استخدامها للاستخراج عن طريق إدخالها مفصولة بواصلات (-).",
+ "Cache Dataset in GPU": "مجموعة بيانات ذاكرة التخزين المؤقت في GPU",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "حدد عدد وحدات معالجة الرسومات التي ترغب في استخدامها للمعالجة المسبقة عن طريق إدخالها مفصولة بواصلات (-). في الوقت الحالي ، لن يكون لاستخدام وحدة معالجة الرسومات المتعددة تأثير كبير.",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "استخدم النماذج المدربة مسبقا عند تدريب النماذج الخاصة بك. هذا النهج يقلل من مدة التدريب ويعزز الجودة الشاملة.",
+ "Index Algorithm": "خوارزمية الفهرس",
+ "Fresh Training": "تدريب جديد",
+ "Cache the dataset in GPU memory to speed up the training process.": "قم بتخزين مجموعة البيانات مؤقتا في ذاكرة GPU لتسريع عملية التدريب.",
+ "Overtraining Detector": "كاشف التدريب الزائد",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "من خلال استخدام توجيه درجة الصوت ، يصبح من الممكن عكس نغمة الصوت الأصلي ، بما في ذلك طبقة الصوت. هذه الميزة ذات قيمة خاصة للغناء والسيناريوهات الأخرى حيث يكون الحفاظ على اللحن الأصلي أو نمط طبقة الصوت أمرا ضروريا.",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "نعطي الأولوية لتشغيل استخراج النموذج على وحدة معالجة الرسومات للحصول على أداء أسرع. إذا كنت تفضل استخدام وحدة المعالجة المركزية ، فما عليك سوى ترك حقل GPU فارغا.",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans هي خوارزمية تجميع تقسم مجموعة البيانات إلى مجموعات K. هذا الإعداد مفيد بشكل خاص لمجموعات البيانات الكبيرة.",
+ "Stop Training": "توقف عن التدريب",
+ "Start Training": "ابدأ التدريب",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "نعطي الأولوية لتشغيل المعالجة المسبقة للنموذج على وحدة معالجة الرسومات للحصول على أداء أسرع. إذا كنت تفضل استخدام وحدة المعالجة المركزية ، فما عليك سوى ترك حقل GPU فارغا.",
+ "Overtraining Detector Settings": "إعدادات كاشف التدريب الزائد",
+ "Generate Index": "إنشاء فهرس",
+ "Exported Pth file": "تصدير ملف Pth",
+ "Upload": "رفع",
+ "Export Model": "نموذج التصدير",
+ "Overtraining Threshold": "عتبة الإفراط في التدريب",
+ "Exported Index file": "ملف الفهرس المصدر",
+ "Select the pth file to be exported": "حدد ملف pth المراد تصديره",
+ "Voice Model": "نموذج الصوت",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "اكتشاف الإفراط في التدريب لمنع النموذج من تعلم بيانات التدريب بشكل جيد للغاية وفقدان القدرة على التعميم على البيانات الجديدة.",
+ "Index File": "ملف الفهرس",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "قم بتعيين الحد الأقصى لعدد الحقب التي تريد أن يتوقف نموذجك عن التدريب إذا لم يتم اكتشاف أي تحسن.",
+ "Refresh": "تحديث",
+ "Single": "واحد",
+ "Unload Voice": "تفريغ الصوت",
+ "Upload Audio": "تحميل الصوت",
+ "Select the index file to be exported": "حدد ملف الفهرس المراد تصديره",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "قم بتمكين هذا الإعداد فقط إذا كنت تقوم بتدريب نموذج جديد من البداية أو إعادة تشغيل التدريب. يحذف كل الأوزان التي تم إنشاؤها مسبقا وسجلات لوحة الموت.",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "الزر \"تحميل\" مخصص فقط ل google colab: لتحميل الملفات المصدرة إلى مجلد ApplioExported في Google Drive.",
+ "Select the voice model to use for the conversion.": "حدد نموذج الصوت لاستخدامه في التحويل.",
+ "Select Audio": "حدد الصوت",
+ "Advanced Settings": "الإعدادات المتقدمة",
+ "Select the index file to use for the conversion.": "حدد ملف الفهرس لاستخدامه للتحويل.",
+ "Output Path": "مسار الإخراج",
+ "Select the audio to convert.": "حدد الصوت المراد تحويله.",
+ "Export Format": "تنسيق التصدير",
+ "Custom Output Path": "مسار الإخراج المخصص",
+ "Split Audio": "تقسيم الصوت",
+ "Clean Audio": "صوت نظيف",
+ "Autotune": "الضبط التلقائي",
+ "Select the format to export the audio.": "حدد التنسيق لتصدير الصوت.",
+ "Upscale Audio": "صوت راقي",
+ "Clean Strength": "قوة نظيفة",
+ "Clear Outputs (Deletes all audios in assets/audios)": "مخرجات واضحة (يحذف جميع الصوتيات في الأصول / الصوتيات)",
+ "Formant Shifting": "تحول فورمانت",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "قسم الصوت إلى أجزاء للاستدلال للحصول على نتائج أفضل في بعض الحالات.",
+ "Default value is 1.0": "القيمة الافتراضية هي 1.0",
+ "Pitch": "زفت",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "المسار الذي سيتم فيه حفظ الصوت الناتج ، افتراضيا في الأصول / الصوتيات / output.wav",
+ "Quefrency for formant shifting": "Quefrency للتحول الشكلي",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "قم بتطبيق ضبط تلقائي ناعم على استنتاجاتك ، موصى به لغناء التحويلات.",
+ "Presets are located in /assets/formant_shift folder": "توجد الإعدادات المسبقة في مجلد /assets/formant_shift",
+ "Filter Radius": "نصف قطر المرشح",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "تمكين تحويل الشكل. تستخدم للتحويلات من الذكور إلى الإناث والعكس صحيح.",
+ "Timbre for formant shifting": "جرس للتحول الشكلي",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "قم بترقية الصوت إلى جودة أعلى ، موصى به للصوتيات منخفضة الجودة. (قد تستغرق معالجة الصوت وقتا أطول)",
+ "Browse presets for formanting": "تصفح الإعدادات المسبقة للتشكيل",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "قم بتنظيف إخراج الصوت باستخدام خوارزميات اكتشاف الضوضاء ، الموصى بها للتحدث الصوتيات.",
+ "Search Feature Ratio": "نسبة ميزة البحث",
+ "Convert": "حول",
+ "Volume Envelope": "مغلف الحجم",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "اضبط مستوى التنظيف على الصوت الذي تريده ، وكلما قمت بزيادته كلما تم تنظيفه ، ولكن من الممكن أن يكون الصوت أكثر ضغطا.",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "اضبط درجة الصوت ، وكلما زادت القيمة ، زادت درجة الصوت.",
+ "Batch": "الدفعه",
+ "Export Audio": "تصدير الصوت",
+ "Input Folder": "مجلد الإدخال",
+ "Pitch extraction algorithm": "خوارزمية استخراج الملعب",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "التأثير الذي يمارسه ملف الفهرس ؛ قيمة أعلى يتوافق مع تأثير أكبر. ومع ذلك ، يمكن أن يساعد اختيار القيم الأقل في التخفيف من العناصر الموجودة في الصوت.",
+ "Protect Voiceless Consonants": "حماية الحروف الساكنة التي لا صوت لها",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "استبدل أو امزج مع مغلف حجم المخرجات. كلما اقتربت النسبة من 1 ، زاد استخدام مغلف الإخراج.",
+ "Enter input path": "أدخل مسار الإدخال",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "خوارزمية استخراج الملعب لاستخدامها في تحويل الصوت. الخوارزمية الافتراضية هي rmvpe ، والتي يوصى بها في معظم الحالات.",
+ "Output Folder": "مجلد الإخراج",
+ "## Voice Blender": "## خلاط الصوت",
+ "Get information about the audio": "الحصول على معلومات حول الصوت",
+ "Enter output path": "أدخل مسار الإخراج",
+ "Voice Blender": "خلاط الصوت",
+ "You can also use a custom path.": "يمكنك أيضا استخدام مسار مخصص.",
+ "Select the folder containing the audios to convert.": "حدد المجلد الذي يحتوي على الصوتيات المراد تحويلها.",
+ "Fusion": "اندماج",
+ "Blend Ratio": "نسبة المزج",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "حماية الحروف الساكنة المميزة وأصوات التنفس لمنع التمزق الصوتي الكهربائي والتحف الأخرى. يوفر سحب المعلمة إلى قيمتها القصوى البالغة 0.5 حماية شاملة. ومع ذلك ، قد يؤدي تقليل هذه القيمة إلى تقليل مدى الحماية مع احتمال التخفيف من تأثير الفهرسة.",
+ "Drag and drop your model here": "قم بسحب وإسقاط النموذج الخاص بك هنا",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "إذا كان العدد أكبر من أو يساوي ثلاثة ، فإن استخدام الترشيح المتوسط على نتائج النغمة التي تم جمعها لديه القدرة على تقليل التنفس.",
+ "Enter path to model": "أدخل المسار إلى النموذج",
+ "Path to Model": "الطريق إلى النموذج",
+ "Select the folder where the output audios will be saved.": "حدد المجلد حيث سيتم حفظ صوتيات الإخراج.",
+ "Introduce the model pth path": "تقديم نموذج مسار pth",
+ "View": "منظر",
+ "Model information to be placed": "معلومات النموذج المراد وضعها",
+ "Model conversion": "تحويل النموذج",
+ "View model information": "عرض معلومات النموذج",
+ "Inroduce the model information": "Inroduce معلومات النموذج",
+ "Model extraction": "استخراج النموذج",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "سيؤدي ضبط الموضع أكثر نحو جانب أو آخر إلى جعل النموذج أكثر تشابها مع الأول أو الثاني.",
+ "Pth file": "ملف Pth",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "حدد نموذجين صوتيين ، وقم بتعيين نسبة المزج التي تريدها ، وامزجهما في صوت جديد تماما.",
+ "Output of the pth file": "إخراج ملف pth",
+ "Record": "سجل",
+ "# How to Report an Issue on GitHub": "# كيفية الإبلاغ عن مشكلة على GitHub",
+ "Extract F0 Curve": "استخراج منحنى F0",
+ "Introduce the model .pth path": "تقديم نموذج مسار .pth",
+ "Record Screen": "شاشة التسجيل",
+ "The information to be placed in the model (You can leave it blank or put anything).": "المعلومات المراد وضعها في النموذج (يمكنك تركها فارغة أو وضع أي شيء).",
+ "Stop Recording": "إيقاف التسجيل",
+ "Introduce the model link": "تقديم رابط النموذج",
+ "Model Link": "رابط النموذج",
+ "See Model Information": "انظر معلومات النموذج",
+ "Search": "بحث",
+ "## Download Model": "## تحميل الموديل",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. انتقل إلى [مشكلات GitHub] (https://github.com/IAHispano/Applio/issues) وانقر على زر \"إصدار جديد\".",
+ "## Drop files": "## إسقاط الملفات",
+ "Download Model": "تحميل الموديل",
+ "## Search Model": "## نموذج البحث",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. انقر فوق الزر \"شاشة التسجيل\" أدناه لبدء تسجيل المشكلة التي تواجهها.",
+ "Introduce the model name to search.": "قدم اسم الطراز للبحث.",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "اسحب ملف .pth وملف .index إلى هذه المساحة. اسحب أحدهما ثم الآخر.",
+ "We couldn't find models by that name.": "لم نتمكن من العثور على نماذج بهذا الاسم.",
+ "Increase or decrease TTS speed.": "زيادة أو تقليل سرعة TTS.",
+ "## Download Pretrained Models": "## تنزيل النماذج المدربة مسبقا",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. بمجرد الانتهاء من تسجيل المشكلة ، انقر فوق الزر \"إيقاف التسجيل\" (نفس الزر ، لكن التسمية تتغير اعتمادا على ما إذا كنت تقوم بالتسجيل بنشاط أم لا).",
+ "Select the pretrained model you want to download.": "حدد النموذج الذي تم اختباره مسبقا الذي تريد تنزيله.",
+ "And select the sampling rate": "وحدد معدل أخذ العينات.",
+ "TTS Voices": "أصوات تحويل النص إلى كلام",
+ "TTS Speed": "سرعة تحويل النص إلى طريق التحويل",
+ "Upload a .txt file": "تحميل ملف .txt",
+ "Text to Synthesize": "النص المراد توليفه",
+ "Select the TTS voice to use for the conversion.": "حدد صوت TTS لاستخدامه في التحويل.",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "يمثل منحنى f0 الاختلافات في التردد الأساسي للصوت بمرور الوقت ، مما يوضح كيفية ارتفاع طبقة الصوت وانخفاضها.",
+ "Enter the text to synthesize.": "أدخل النص المراد توليفه.",
+ "Input path for text file": "مسار الإدخال لملف نصي",
+ "Enter text to synthesize": "أدخل نصا لتوليفه",
+ "Output Path for TTS Audio": "مسار الإخراج لصوت TTS",
+ "Output Path for RVC Audio": "مسار الإخراج لصوت RVC",
+ "Theme": "موضوع",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. أكمل نموذج المشكلة المقدم ، مع التأكد من تضمين التفاصيل حسب الحاجة ، واستخدم قسم الأصول لتحميل الملف المسجل من الخطوة السابقة.",
+ "Enable Applio integration with Discord presence": "تمكين تكامل Applio مع وجود Discord",
+ "The path to the text file that contains content for text to speech.": "المسار إلى الملف النصي الذي يحتوي على محتوى لتحويل النص إلى كلام.",
+ "Restart Applio": "إعادة تشغيل Applio",
+ "Language": "اللغة",
+ "Enable Applio integration with applio.org/models using flask": "تمكين تكامل Applio مع applio.org/models باستخدام القارورة",
+ "Enable fake GPU": "تمكين وحدة معالجة الرسومات المزيفة",
+ "Select the theme you want to use. (Requires restarting Applio)": "حدد السمة التي تريد استخدامها. (يتطلب إعادة تشغيل Applio)",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "سيتم تنشيط إمكانية عرض نشاط Applio الحالي في Discord.",
+ "Precision": "دقة",
+ "It will activate the possibility of downloading models with a click from the website.": "سيتم تنشيط إمكانية تنزيل النماذج بنقرة واحدة من الموقع.",
+ "Select the language you want to use. (Requires restarting Applio)": "حدد اللغة التي تريد استخدامها. (يتطلب إعادة تشغيل Applio)",
+ "Update precision": "دقة التحديث",
+ "Reverb": "تردد",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "ينشط علامة تبويب القطار. ومع ذلك ، يرجى ملاحظة أن هذا الجهاز يفتقر إلى إمكانات GPU ، وبالتالي لا يتم دعم التدريب. هذا الخيار هو فقط لأغراض الاختبار. (سيؤدي هذا الخيار إلى إعادة تشغيل Applio)",
+ "Drag your plugin.zip to install it": "اسحب plugin.zip لتثبيته",
+ "Plugin Installer": "مثبت البرنامج المساعد",
+ "Post-Process": "مرحلة ما بعد العملية",
+ "Check for updates": "التحقق من وجود تحديثات",
+ "Version Checker": "مدقق الإصدار",
+ "Select the precision you want to use for training and inference.": "حدد الدقة التي تريد استخدامها للتدريب والاستدلال.",
+ "Reverb Room Size": "تردد حجم الغرفة",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "التدريب غير مدعوم حاليا بسبب عدم وجود وحدة معالجة رسومات. لتنشيط علامة تبويب التدريب ، انتقل إلى علامة تبويب الإعدادات وقم بتمكين خيار \"وحدة معالجة الرسومات المزيفة\".",
+ "Apply reverb to the audio.": "تطبيق تردد على الصوت.",
+ "Reverb Damping": "تردد التخميد",
+ "Check which version of Applio is the latest to see if you need to update.": "تحقق من إصدار Applio هو الأحدث لمعرفة ما إذا كنت بحاجة إلى التحديث.",
+ "Set the room size of the reverb.": "اضبط حجم غرفة الصدى.",
+ "Set the damping of the reverb.": "اضبط تخميد الصدى.",
+ "Reverb Wet Gain": "تردد الكسب الرطب",
+ "Reverb Dry Gain": "تردد الكسب الجاف",
+ "Pitch Shift Semitones": "تحول الملعب Semitones",
+ "Reverb Width": "عرض التردد",
+ "Set the wet gain of the reverb.": "اضبط الكسب الرطب للتردد.",
+ "Pitch Shift": "تحول الملعب",
+ "Reverb Freeze Mode": "وضع تجميد التردد",
+ "Set the dry gain of the reverb.": "اضبط الكسب الجاف للتردد.",
+ "Set the width of the reverb.": "اضبط عرض الصدى.",
+ "Limiter": "المحدد",
+ "Apply pitch shift to the audio.": "تطبيق تحول درجة الصوت على الصوت.",
+ "Post-process the audio to apply effects to the output.": "بعد معالجة الصوت لتطبيق التأثيرات على الإخراج.",
+ "Set the freeze mode of the reverb.": "اضبط وضع التجميد للتردد.",
+ "Set the pitch shift semitones.": "اضبط نصف نغمة إزاحة درجة الصوت.",
+ "Limiter Threshold dB": "عتبة المحدد ديسيبل",
+ "Limiter Release Time": "وقت إصدار المحدد",
+ "Apply limiter to the audio.": "قم بتطبيق المحدد على الصوت.",
+ "Distortion": "تشويه",
+ "Gain dB": "كسب ديسيبل",
+ "Chorus": "جوقه",
+ "Set the limiter threshold dB.": "اضبط عتبة المحدد ديسيبل.",
+ "Set the limiter release time.": "اضبط وقت تحرير المحدد.",
+ "Distortion Gain": "كسب التشويه",
+ "Apply distortion to the audio.": "تطبيق تشويه على الصوت.",
+ "Chorus Rate Hz": "معدل الجوقة هرتز",
+ "Set the distortion gain.": "اضبط كسب التشويه.",
+ "Set the gain dB.": "اضبط الكسب ديسيبل.",
+ "Apply gain to the audio.": "تطبيق الكسب على الصوت.",
+ "Apply chorus to the audio.": "تطبيق جوقة على الصوت.",
+ "Gain": "كسب",
+ "Set the chorus rate Hz.": "اضبط معدل الجوقة هرتز.",
+ "Set the chorus depth.": "اضبط عمق الجوقة.",
+ "Chorus Depth": "عمق الجوقة",
+ "Chorus Center Delay ms": "جوقة مركز تأخير MS",
+ "Chorus Mix": "جوقة ميكس",
+ "Clipping": "قص",
+ "Bitcrush": "بيتكراش",
+ "Set the chorus feedback.": "تعيين ردود الفعل جوقة.",
+ "Apply bitcrush to the audio.": "تطبيق bitcrush على الصوت.",
+ "Set the chorus center delay ms.": "اضبط تأخير مركز الجوقة مللي ثانية.",
+ "Set the chorus mix.": "اضبط مزيج الجوقة.",
+ "Bitcrush Bit Depth": "بيتكراش بت عمق",
+ "Set the bitcrush bit depth.": "اضبط عمق بت bitcrush.",
+ "Clipping Threshold": "عتبة القطع",
+ "Apply clipping to the audio.": "تطبيق لقطة على الصوت.",
+ "Chorus Feedback": "جوقة ردود الفعل",
+ "Compressor": "الضاغط",
+ "Set the clipping threshold.": "اضبط حد القطع.",
+ "Apply compressor to the audio.": "ضع الضاغط على الصوت.",
+ "Compressor Ratio": "نسبة الضاغط",
+ "Compressor Threshold dB": "عتبة الضاغط ديسيبل",
+ "Set the compressor ratio.": "اضبط نسبة الضاغط.",
+ "Delay": "تأخر",
+ "Set the compressor threshold dB.": "اضبط عتبة الضاغط ديسيبل.",
+ "Apply delay to the audio.": "تطبيق تأخير على الصوت.",
+ "Compressor Attack ms": "هجوم الضاغط مللي ثانية",
+ "Set the delay seconds.": "اضبط ثواني التأخير.",
+ "Compressor Release ms": "تحرير الضاغط مللي ثانية",
+ "Set the compressor attack ms.": "اضبط هجوم الضاغط مللي ثانية.",
+ "Delay Seconds": "ثواني التأخير",
+ "Delay Mix": "تأخير ميكس",
+ "Set the delay feedback.": "تعيين ملاحظات التأخير.",
+ "Set the compressor release ms.": "اضبط تحرير الضاغط مللي ثانية.",
+ "Delay Feedback": "تأخير التغذية الراجعة",
+ "Set the delay mix.": "اضبط مزيج التأخير.",
+ "Custom Embedder": "المدمج المخصص",
+ "Folder Name": "اسم المجلد",
+ "Upload .bin": "تحميل .bin",
+ "Select Custom Embedder": "حدد تضمين مخصص",
+ "model information": "معلومات النموذج",
+ "Refresh embedders": "تحديث أدوات التضمين",
+ "Upload .json": "تحميل .json",
+ "Model Creator": "منشئ النموذج",
+ "Speaker ID": "معرف المتحدث",
+ "Name of the model creator. (Default: Unknown)": "اسم منشئ النموذج. (الافتراضي: غير معروف)",
+ "Model Author Name": "اسم مؤلف النموذج",
+ "Move files to custom embedder folder": "نقل الملفات إلى مجلد تضمين مخصص",
+ "Set name": "اسم المجموعة",
+ "The name that will appear in the model information.": "الاسم الذي سيظهر في معلومات النموذج.",
+ "Select the speaker ID to use for the conversion.": "حدد معرف المتحدث لاستخدامه في التحويل.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "اضبط قوة الضبط التلقائي - كلما قمت بزيادتها كلما انجذبت إلى الشبكة اللونية."
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/az_AZ.json b/assets/i18n/languages/az_AZ.json
new file mode 100644
index 0000000000000000000000000000000000000000..9fa35cc4d894ec4e5cb5ef2fc66a75624cce92b3
--- /dev/null
+++ b/assets/i18n/languages/az_AZ.json
@@ -0,0 +1,325 @@
+{
+ "Cache Dataset in GPU":"Veri dəstini GPU-da keşlə",
+ "Set the compressor threshold dB.":"Kompressorun hədd dB-ni təyin edin.",
+ "Set the limiter release time.":"Məhdudlaşdırıcının buraxılış vaxtını təyin edin.",
+ "The GPU information will be displayed here.":"GPU məlumatları burada göstəriləcək.",
+ "Limiter Threshold dB":"Məhdudlaşdırıcı Hədd dB",
+ "Save Only Latest":"Yalnız sonuncusunu saxla",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.":"Ön işləmə üçün istifadə etmək istədiyiniz GPU-ların sayını defislə (-) ayırararaq daxil edin. Hazırda, çox GPU istifadə etməyin əhəmiyyətli təsiri olmayacaq.",
+ "Apply compressor to the audio.":"Səsə kompressor tətbiq edin.",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.":"Bu ayar, hər epoxun sonunda modelin çəkilərini saxlamağa imkan verir.",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.":"Bu ayarı aktivləşdirmək G və D fayllarının yalnız ən son versiyalarını saxlamasına səbəb olacaq və effektiv şəkildə yaddaş yerini qoruyacaq.",
+ "Compressor Threshold dB":"Kompressorun hədd dB",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).":"Çıxarma üçün istifadə etmək istədiyiniz GPU-ların sayını defislə (-) ayırararaq daxil edin.",
+ "Compressor Ratio":"Kompressor nisbəti",
+ "Apply pitch shift to the audio.":"Səsə pitch dəyişikliyi tətbiq edin.",
+ "Preprocess Dataset":"Veri dəstini ön işlə",
+ "Specifies the overall quantity of epochs for the model training process.":"Model təlim prosesi üçün ümumi epoxa miqdarını göstərir.",
+ "Custom Pretrained":"Xüsusi əvvəlcədən təlim keçmiş",
+ "Pitch Shift Semitones":"Pitch dəyişikliyi yarımtonlar",
+ "Cache the dataset in GPU memory to speed up the training process.":"Təlim prosesini sürətləndirmək üçün veri dəstini GPU yaddaşında keşlə.",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.":"Xüsusi əvvəlcədən təlim keçmiş modellərdən istifadə etmək daha yaxşı nəticələrə gətirib çıxara bilər, çünki müəyyən istifadə halına uyğunlaşdırılmış ən uyğun əvvəlcədən təlim keçmiş modelləri seçmək performansı əhəmiyyətli dərəcədə artıra bilər.",
+ "Determine at how many epochs the model will saved at.":"Modelin neçə epoxda saxlanacağını təyin edin.",
+ "Set the gain dB.":"Qazanc dB-ni təyin edin.",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.":"Önişləmədə istifadə olunacaq CPU nüvələrinin sayı. Əksər hallarda tövsiyə olunan standart ayar sizin CPU nüvələrinizdir.",
+ "Extract Features":"Xüsusiyyətləri çıxarın",
+ "Embedder Model":"Yerləşdirici Model",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.":"Çıxarma prosesində istifadə olunacaq CPU nüvələrinin sayı. Əksər hallarda tövsiyə olunan standart ayar sizin CPU nüvələrinizdir.",
+ "Bitcrush":"Bit əzmə",
+ "Model used for learning speaker embedding.":"Danışanın yerləşdirilməsini öyrənmək üçün istifadə olunan model.",
+ "Apply gain to the audio.":"Səsə qazanc tətbiq edin.",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.":"Daha sürətli performans üçün modelin önişləməsini GPU-da işlətməyə üstünlük veririk. CPU-dan istifadə etmək istəyirsinizsə, sadəcə GPU sahəsini boş buraxın.",
+ "Upload Pretrained Model":"Əvvəlcədən təlim keçmiş modeli yükləyin",
+ "Save Every Epoch":"Hər epoxu saxla",
+ "Apply bitcrush to the audio.":"Səsə bit əzmə tətbiq edin.",
+ "Limiter Release Time":"Məhdudlaşdırıcının buraxılış vaxtı",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.":"Daha yaxşı GPU arxitekturası olan istifadəçilər üçün tövsiyə olunan inkişaf etmiş GPU ayarlarını təyin edir.",
+ "Set the bitcrush bit depth.":"Bit əzmə bit dərinliyini təyin edin.",
+ "GPU Information":"GPU Məlumatları",
+ "Bitcrush Bit Depth":"Bit əzmə bit dərinliyi",
+ "Extract":"Çıxarın",
+ "Set the clipping threshold.":"Kəsmə həddini təyin edin.",
+ "Limiter":"Məhdudlaşdırıcı",
+ "Refresh Custom Pretraineds":"Xüsusi əvvəlcədən təlim keçmişləri yeniləyin",
+ "Pretrained Custom Settings":"Əvvəlcədən təlim keçmiş xüsusi ayarlar",
+ "Set the compressor attack ms.":"Kompressorun hücum ms-ni təyin edin.",
+ "Pitch Guidance":"Pitch Rəhbərliyi",
+ "0 to ∞ separated by -":"0-dan ∞-a - ilə ayrılmış",
+ "Hop Length":"Sıçrayış uzunluğu",
+ "Use CPU":"CPU istifadə edin",
+ "Distortion":"Təhrif",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.":"Sistemin əhəmiyyətli pitch dəyişikliyinə keçməsi üçün lazım olan müddəti göstərir. Kiçik sıçrayış uzunluqları çıxarış üçün daha çox vaxt tələb edir, lakin daha yüksək pitch dəqiqliyi verir.",
+ "GPU Settings":"GPU Ayarları",
+ "Set the compressor ratio.":"Kompressor nisbətini təyin edin.",
+ "Compressor":"Kompressor",
+ "Set the pitch shift semitones.":"Pitch dəyişikliyi yarımtonlarını təyin edin.",
+ "The file you dropped is not a valid pretrained file. Please try again.":"Sürüklədiyiniz fayl düzgün əvvəlcədən təlim keçmiş fayl deyil. Zəhmət olmasa, yenidən cəhd edin.",
+ "Total Epoch":"Ümumi Epox",
+ "Compressor Attack ms":"Kompressor Hücum ms",
+ "Gain dB":"Qazanc dB",
+ "Index Algorithm":"İndeks Alqoritmi",
+ "Apply clipping to the audio.":"Səsə kəsmə tətbiq edin.",
+ "Save Every Weights":"Hər çəkini saxla",
+ "Force the use of CPU for training.":"Təlim üçün CPU istifadəsini məcbur edin.",
+ "Set the limiter threshold dB.":"Məhdudlaşdırıcının hədd dB-ni təyin edin.",
+ "GPU Custom Settings":"Xüsusi GPU Ayarları",
+ "Batch Size":"Toplu ölçüsü",
+ "Apply limiter to the audio.":"Səsə məhdudlaşdırıcı tətbiq edin.",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.":"Daha sürətli performans üçün model çıxarışını GPU-da işlətməyə üstünlük veririk. CPU-dan istifadə etmək istəyirsinizsə, sadəcə GPU sahəsini boş buraxın.",
+ "Pretrained":"Əvvəlcədən təlim keçmiş",
+ "Click the refresh button to see the pretrained file in the dropdown menu.":"Əvvəlcədən təlim keçmiş faylı açılan menyuda görmək üçün yeniləmə düyməsini vurun.",
+ "Pretrained D Path":"Xüsusi əvvəlcədən təlim keçmiş D",
+ "Clipping Threshold":"Kəsmə həddi",
+ "Pretrained G Path":"Xüsusi əvvəlcədən təlim keçmiş G",
+ "Gain":"Qazanc",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.":"Pitch rəhbərliyindən istifadə etməklə, orijinal səsin intonasiyasını, o cümlədən pitchini əks etdirmək mümkün olur. Bu xüsusiyyət, xüsusən də orijinal melodiyanı və ya pitch modelini qorumaq vacib olan oxuma və digər ssenarilər üçün dəyərlidir.",
+ "GPU Number":"GPU Nömrəsi",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.":"Onu GPU-nuzun mövcud VRAM-ı ilə uyğunlaşdırmaq məsləhətdir. 4 ayarı təkmilləşdirilmiş dəqiqlik təklif edir, lakin daha yavaş işləmə, 8 isə daha sürətli və standart nəticələr verir.",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.":"Özünüz təlim keçərkən əvvəlcədən təlim keçmiş modellərdən istifadə edin. Bu yanaşma təlim müddətini azaldır və ümumi keyfiyyəti artırır.",
+ "Clipping":"Kəsmə",
+ "Delay Seconds":"Gecikmə Saniyələri",
+ "Overtraining Detector Settings":"Həddindən artıq təlim detektoru ayarları",
+ "Overtraining Threshold":"Həddindən artıq təlim həddi",
+ "Set the delay seconds.":"Gecikmə saniyələrini təyin edin.",
+ "Apply delay to the audio.":"Səsə gecikmə tətbiq edin.",
+ "Extra":"Əlavə",
+ "Enter dataset path":"Veri dəsti yolunu daxil edin",
+ "Compressor Release ms":"Kompressor Buraxılış ms",
+ "Settings":"Ayarlar",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.":"Heç bir irəliləyiş aşkar edilmədikdə modelinizin təlimini dayandırmasını istədiyiniz maksimum epoxa sayını təyin edin.",
+ "Set the compressor release ms.":"Kompressorun buraxılış ms-ni təyin edin.",
+ "Delay":"Gecikmə",
+ "Model Name":"Model Adı",
+ "Upload .bin":".bin yükləyin",
+ "Download":"Yükləyin",
+ "Fresh Training":"Təzə Təlim",
+ "Processing":"İşlənir",
+ "Start Training":"Təlimə başlayın",
+ "Folder Name":"Qovluq Adı",
+ "It's recommended to deactivate this option if your dataset has already been processed.":"Veri dəstiniz artıq işlənibsə, bu seçimi deaktiv etmək tövsiyə olunur.",
+ "Refresh embedders":"Yerləşdiriciləri yeniləyin",
+ "Delay Mix":"Gecikmə Qarışığı",
+ "Generate Index":"İndeks yaradın",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.":"'Yüklə' düyməsi yalnız google colab üçündür: İxrac olunmuş faylları Google Diskinizdəki ApplioExported qovluğuna yükləyir.",
+ "Set the delay mix.":"Gecikmə qarışığını təyin edin.",
+ "Report a Bug":"Xəta barədə məlumat verin",
+ "Export Model":"Modeli ixrac edin",
+ "Set the delay feedback.":"Gecikmə geribildirimini təyin edin.",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.":"Bu ayarı yalnız sıfırdan yeni model təlim keçirsəniz və ya təlimi yenidən başlatsanız aktivləşdirin. Əvvəllər yaradılmış bütün çəkiləri və tensorboard jurnallarını silir.",
+ "Model Information":"Model Məlumatları",
+ "Delay Feedback":"Gecikmə Geribildirimi",
+ "Stop Training":"Təlimi dayandırın",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.":"Modelin təlim məlumatlarını çox yaxşı öyrənməsinin və yeni məlumatları ümumiləşdirmək qabiliyyətini itirməsinin qarşısını almaq üçün həddindən artıq təlimi aşkar edin.",
+ "Custom Embedder":"Xüsusi Yerləşdirici",
+ "Select Custom Embedder":"Xüsusi Yerləşdirici seçin",
+ "Plugins":"Pluginlər",
+ "Unload Voice":"Səsi boşalt",
+ "Select Audio":"Səs seçin",
+ "Set the distortion gain.":"Təhrif qazancını təyin edin.",
+ "Drag your plugin.zip to install it":"Quraşdırmaq üçün plugin.zip faylınızı sürükleyin",
+ "Refresh":"Yeniləyin",
+ "Chorus":"Xor",
+ "Precision":"Dəqiqlik",
+ "Set the chorus depth.":"Xor dərinliyini təyin edin.",
+ "Apply chorus to the audio.":"Səsə xor tətbiq edin.",
+ "Single":"Tək",
+ "Chorus Center Delay ms":"Xor Mərkəzi Gecikmə ms",
+ "Post-Process":"Sonrakı İşləmə",
+ "Language":"Dil",
+ "Chorus Depth":"Xor Dərinliyi",
+ "Select the precision you want to use for training and inference.":"Təlim və çıxarış üçün istifadə etmək istədiyiniz dəqiqliyi seçin.",
+ "Index File":"İndeks Faylı",
+ "Set the chorus rate Hz.":"Xor dərəcəsi Hz-ni təyin edin.",
+ "Exported Index file":"İxrac olunmuş İndeks faylı",
+ "Chorus Feedback":"Xor Geribildirimi",
+ "Update precision":"Dəqiqliyi yeniləyin",
+ "Chorus Mix":"Xor Qarışığı",
+ "Select the voice model to use for the conversion.":"Çevrilmə üçün istifadə olunacaq səs modelini seçin.",
+ "Exported Pth file":"İxrac olunmuş Pth faylı",
+ "Select the theme you want to use. (Requires restarting Applio)":"İstifadə etmək istədiyiniz mövzunu seçin. (Applio-nun yenidən başladılmasını tələb edir)",
+ "Select the index file to use for the conversion.":"Çevrilmə üçün istifadə olunacaq indeks faylını seçin.",
+ "Theme":"Mövzu",
+ "Restart Applio":"Applio-nu yenidən başladın",
+ "Set the chorus center delay ms.":"Xor mərkəzi gecikmə ms-ni təyin edin.",
+ "Select the pth file to be exported":"İxrac olunacaq pth faylını seçin",
+ "Set the chorus feedback.":"Xor geribildirimini təyin edin.",
+ "Select the index file to be exported":"İxrac olunacaq indeks faylını seçin",
+ "Version Checker":"Versiya Yoxlayıcısı",
+ "Plugin Installer":"Plugin Quraşdırıcısı",
+ "Set the chorus mix.":"Xor qarışığını təyin edin.",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.":"KMeans, veri dəstini K klasterə bölən klasterləşdirmə alqoritmidir. Bu ayar, xüsusən də böyük veri dəstləri üçün faydalıdır.",
+ "Upload":"Yükləyin",
+ "Overtraining Detector":"Həddindən artıq təlim detektoru",
+ "Chorus Rate Hz":"Xor Dərəcəsi Hz",
+ "Check which version of Applio is the latest to see if you need to update.":"Yeniləməyə ehtiyacınız olub-olmadığını görmək üçün Applio-nun hansı versiyasının ən son olduğunu yoxlayın.",
+ "Upload Audio":"Səs yükləyin",
+ "Select the language you want to use. (Requires restarting Applio)":"İstifadə etmək istədiyiniz dili seçin. (Applio-nun yenidən başladılmasını tələb edir)",
+ "Check for updates":"Yeniləmələri yoxlayın",
+ "Apply distortion to the audio.":"Səsə təhrif tətbiq edin.",
+ "Distortion Gain":"Təhrif qazancı",
+ "Post-process the audio to apply effects to the output.":"Çıxışa effektlər tətbiq etmək üçün səsi sonrakı işləyin.",
+ "Voice Model":"Səs Modeli",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.":"Çıxarışlarınıza yumşaq avtomatik tənzimləmə tətbiq edin, oxuma çevrilmələri üçün tövsiyə olunur.",
+ "Select the audio to convert.":"Çevriləcək səsi seçin.",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.":"GPU olmadığına görə təlim hazırda dəstəklənmir. Təlim sekmesini aktivləşdirmək üçün ayarlar sekmesine keçin və 'Saxta GPU' seçimini aktivləşdirin.",
+ "Drag and drop your model here":"Modelinizi buraya sürükleyin və buraxın",
+ "Upload a .txt file":".txt faylı yükləyin",
+ "The output information will be displayed here.":"Çıxış məlumatları burada göstəriləcək.",
+ "Introduce the model pth path":"Model pth yolunu daxil edin",
+ "Advanced Settings":"Ətraflı Ayarlar",
+ "You can also use a custom path.":"Xüsusi yoldan da istifadə edə bilərsiniz.",
+ "Audio Analyzer":"Səs Analizatoru",
+ "Output Path for TTS Audio":"TTS Səsi üçün Çıxış Yolu",
+ "Inference":"Çıxarış",
+ "Clear Outputs (Deletes all audios in assets/audios)":"Çıxışları təmizləyin (aktivlər/səslərdəki bütün səsləri silir)",
+ "Blend Ratio":"Qarışdırma nisbəti",
+ "Custom Output Path":"Xüsusi Çıxış Yolu",
+ "Enter text to synthesize":"Sintez etmək üçün mətni daxil edin",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.":"Mövqeyi bir tərəfə və ya digər tərəfə doğru tənzimləmək modeli birinci və ya ikinciyə daha çox bənzədəcək.",
+ "It will activate the possibility of displaying the current Applio activity in Discord.":"Cari Applio fəaliyyətinin Discord-da göstərilməsi imkanını aktivləşdirəcək.",
+ "Enable fake GPU":"Saxta GPU-nu aktivləşdirin",
+ "Upscale Audio":"Səsi böyüdün",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.":"İstifadə rahatlığına və performansına yönəlmiş sadə, yüksək keyfiyyətli səs çevirmə aləti.\n[Azərbaycanca Tərcümə: Enes](https://discord.com/users/1140031358006202468)",
+ "Output Path":"Çıxış Yolu",
+ "Fusion":"Birləşmə",
+ "Inroduce the model information":"Model məlumatlarını daxil edin",
+ "It will activate the possibility of downloading models with a click from the website.":"Veb saytdan bir kliklə modelləri yükləmək imkanını aktivləşdirəcək.",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)":"Təlim sekmesini aktivləşdirir. Lakin, nəzərə alın ki, bu cihazda GPU imkanları yoxdur, buna görə də təlim dəstəklənmir. Bu seçim yalnız test məqsədləri üçündür. (Bu seçim Applio-nu yenidən başladacaq)",
+ "Autotune":"Avtomatik tənzimləmə",
+ "Training":"Təlim",
+ "Export Format":"İxrac formatı",
+ "Enter the text to synthesize.":"Sintez etmək üçün mətni daxil edin.",
+ "Path to Model":"Modelə yol",
+ "Text to Synthesize":"Sintez ediləcək mətn",
+ "Select the format to export the audio.":"Səsi ixrac etmək üçün formatı seçin.",
+ "View model information":"Model məlumatlarına baxın",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.":"Səsli səslər üçün tövsiyə olunan səs-küy aşkarlama alqoritmlərindən istifadə edərək səs çıxışınızı təmizləyin.",
+ "Clean Audio":"Səsi təmizləyin",
+ "Select the TTS voice to use for the conversion.":"Çevrilmə üçün istifadə olunacaq TTS səsini seçin.",
+ "Output Path for RVC Audio":"RVC Səsi üçün Çıxış Yolu",
+ "Enter path to model":"Modelə yolu daxil edin",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav":"Çıxış səsinin saxlanacağı yol, standart olaraq aktivlər/səslər/çıxış.wav-dadır",
+ "Model conversion":"Model çevirməsi",
+ "Clean Strength":"Təmizləmə gücü",
+ "This section contains some extra utilities that often may be in experimental phases.":"Bu bölmədə tez-tez eksperimental mərhələlərdə ola biləcək bəzi əlavə yardımçı proqramlar var.",
+ "Output Information":"Çıxış Məlumatları",
+ "Input path for text file":"Mətn faylı üçün giriş yolu",
+ "Split Audio":"Səsi bölün",
+ "Enable Applio integration with applio.org/models using flask":"Flask istifadə edərək Applio-nun applio.org/modelləri ilə inteqrasiyasını aktivləşdirin",
+ "Pth file":"Pth faylı",
+ "The information to be placed in the model (You can leave it blank or put anything).":"Modelə yerləşdiriləcək məlumat (Boş saxlaya və ya istənilən şeyi qoya bilərsiniz).",
+ "The path to the text file that contains content for text to speech.":"Mətn-nitq üçün məzmun olan mətn faylının yolu.",
+ "View":"Baxın",
+ "Split the audio into chunks for inference to obtain better results in some cases.":"Bəzi hallarda daha yaxşı nəticələr əldə etmək üçün çıxarış üçün səsi hissələrə bölün.",
+ "Model information to be placed":"Yerləşdiriləcək model məlumatı",
+ "Merge Audios":"Səsləri birləşdirin",
+ "Enable Applio integration with Discord presence":"Applio-nun Discord iştirakı ilə inteqrasiyasını aktivləşdirin",
+ "Model extraction":"Model çıxarışı",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.":".pth faylınızı və .index faylınızı bu sahəyə sürükleyin. Birini, sonra da digərini sürükleyin.",
+ "Download Model":"Modeli yükləyin",
+ "## Drop files":"## Faylları buraxın",
+ "Introduce the model name to search.":"Axtarmaq üçün model adını daxil edin.",
+ "Dataset Creator":"Veri dəsti yaradıcısı",
+ "Increase or decrease TTS speed.":"TTS sürətini artırın və ya azaldın.",
+ "## Search Model":"## Modeli axtarın",
+ "TTS Speed":"TTS Sürəti",
+ "TTS Voices":"TTS Səsləri",
+ "And select the sampling rate":"Və örnekleme tezliyini seçin",
+ "## Download Pretrained Models":"## Əvvəlcədən təlim keçmiş modelləri yükləyin",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.":"Səs faylı uğurla veri dəstinə əlavə edildi. Zəhmət olmasa, önişləmə düyməsini vurun.",
+ "Search":"Axtarın",
+ "Introduce the model link":"Model bağlantısını daxil edin",
+ "Model Architecture":"Model arxitekturası",
+ "Model Link":"Model bağlantısı",
+ "Select the pretrained model you want to download.":"Yükləmək istədiyiniz əvvəlcədən təlim keçmiş modeli seçin.",
+ "We couldn't find models by that name.":"Bu adda model tapa bilmədik.",
+ "Set the width of the reverb.":"Reverbin genişliyini təyin edin.",
+ "Protect Voiceless Consonants":"Səssiz samitləri qoruyun",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.":"Elektro-akustik cırılmanın və digər artefaktların qarşısını almaq üçün fərqli samitləri və nəfəs alma səslərini qoruyun. Parametrini maksimum 0,5 dəyərinə çəkmək hərtərəfli qoruma təklif edir. Bununla belə, bu dəyəri azaltmaq qorumanın dərəcəsini azalda bilər, eyni zamanda potensial olaraq indeksləşdirmə effektini azalda bilər.",
+ "Pitch extraction algorithm":"Pitch çıxarış alqoritmi",
+ "Get information about the audio":"Səs haqqında məlumat əldə edin",
+ "Model Creator":"Model Yaradıcısı",
+ "## Voice Blender":"## Səs Qarışdırıcısı",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.":"Səs çevirməsi üçün istifadə olunacaq pitch çıxarış alqoritmi. Standart alqoritm əksər hallarda tövsiyə olunan rmvpe-dir.",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.":"İki səs modeli seçin, istədiyiniz qarışdırma faizini təyin edin və onları tamamilə yeni səsə qarışdırın.",
+ "Upload .json":".json yükləyin",
+ "Voice Blender":"Səs Qarışdırıcısı",
+ "Move files to custom embedder folder":"Faylları xüsusi yerləşdirici qovluğuna köçürün",
+ "Convert":"Çevirin",
+ "Enter output path":"Çıxış yolunu daxil edin",
+ "model information":"model məlumatı",
+ "Reverb":"Reverb",
+ "Export Audio":"Səsi ixrac edin",
+ "Apply reverb to the audio.":"Səsə reverb tətbiq edin.",
+ "Output Folder":"Çıxış Qovluğu",
+ "Speaker ID":"Danışan ID",
+ "Select the speaker ID to use for the conversion.":"Çevrilmə üçün istifadə olunacaq danışan ID-ni seçin.",
+ "Name of the model creator. (Default: Unknown)":"Model yaradıcısının adı. (Standart: Naməlum)",
+ "Reverb Room Size":"Reverb Otaq Ölçüsü",
+ "Batch":"Toplu",
+ "Set the dry gain of the reverb.":"Reverbin quru qazancını təyin edin.",
+ "Pitch Shift":"Pitch Dəyişikliyi",
+ "Reverb Damping":"Reverb Boğulması",
+ "Set the wet gain of the reverb.":"Reverbin yaş qazancını təyin edin.",
+ "Reverb Wet Gain":"Reverb Yaş Qazancı",
+ "Model Author Name":"Model Müəllifinin Adı",
+ "Set the freeze mode of the reverb.":"Reverbin dondurma rejimini təyin edin.",
+ "Input Folder":"Giriş Qovluğu",
+ "Select the folder containing the audios to convert.":"Çevriləcək səsləri ehtiva edən qovluğu seçin.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.":"Avtomatik tənzimləmə gücünü təyin edin - nə qədər çox artırsanız, o qədər də xromatik şəbəkəyə yapışacaq.",
+ "Reverb Freeze Mode":"Reverb Dondurma Rejimi",
+ "Reverb Width":"Reverb Genişliyi",
+ "Set the damping of the reverb.":"Reverbin boğulmasını təyin edin.",
+ "Set the room size of the reverb.":"Reverbin otaq ölçüsünü təyin edin.",
+ "Reverb Dry Gain":"Reverb Quru Qazancı",
+ "The name that will appear in the model information.":"Model məlumatında görünəcək ad.",
+ "Set name":"Adı təyin edin",
+ "Enter input path":"Giriş yolunu daxil edin",
+ "Select the folder where the output audios will be saved.":"Çıxış səslərinin saxlanacağı qovluğu seçin.",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)":"Səsi daha yüksək keyfiyyətə qədər böyüdün, aşağı keyfiyyətli səslər üçün tövsiyə olunur. (Səsin işlənməsi daha uzun çəkə bilər)",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.":"İndeks faylı tərəfindən göstərilən təsir; daha yüksək dəyər daha böyük təsirə uyğun gəlir. Lakin, daha aşağı dəyərləri seçmək səsdə mövcud olan artefaktları azaltmağa kömək edə bilər.",
+ "Preprocess":"Önişlə",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.":"Təmizləmə səviyyəsini istədiyiniz səsə təyin edin, nə qədər çox artırsanız, o qədər də təmizləyəcək, lakin səsin daha çox sıxılması mümkündür.",
+ "Enter dataset name":"Veri dəsti adını daxil edin",
+ "Audio cutting":"Səs kəsmə",
+ "Formant Shifting":"Formant Dəyişdirilməsi",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.":"Çıxışın səs zərfi ilə əvəz edin və ya qarışdırın. Nisbət 1-ə nə qədər yaxındırsa, çıxış zərfi bir o qədər çox istifadə olunur.",
+ "Refresh Datasets":"Veri dəstlərini yeniləyin",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.":"Formant dəyişməsini aktivləşdirin. Kişidən qadına və əksinə çevrilmələr üçün istifadə olunur.",
+ "Search Feature Ratio":"Axtarış Xüsusiyyəti Nisbəti",
+ "Browse presets for formanting":"Formantlaşdırma üçün ön ayarlara baxın",
+ "Presets are located in /assets/formant_shift folder":"Ön ayarlar /assets/formant_shift qovluğunda yerləşir",
+ "Dataset Name":"Veri Dəsti Adı",
+ "Dataset Path":"Veri Dəsti Yolu",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.":"Əgər rəqəm üçdən böyük və ya bərabərdirsə, toplanmış ton nəticələrində median filtrdən istifadə etmək tənəffüsü azaltmaq potensialına malikdir.",
+ "Process effects":"Effektləri işləyin",
+ "Default value is 1.0":"Varsayılan dəyər 1.0-dır",
+ "Quefrency for formant shifting":"Formant dəyişməsi üçün kvefrency",
+ "Volume Envelope":"Səs Zərfi",
+ "Timbre for formant shifting":"Formant dəyişməsi üçün tembr",
+ "Filter Radius":"Filtr Radiusu",
+ "Pitch":"Pitch",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.":"Səsin pitchini təyin edin, dəyər nə qədər yüksəkdirsə, pitch bir o qədər yüksəkdir.",
+ "Name of the new model.":"Yeni modelin adı.",
+ "Stop Recording":"Qeydi dayandırın",
+ "## Download Model":"## Modeli yükləyin",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.":"f0 əyrisi səsin əsas tezliyində zamanla baş verən dəyişiklikləri təmsil edir və pitchin necə qalxıb düşdüyünü göstərir.",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.":"1. Qarşılaşdığınız problemi qeyd etməyə başlamaq üçün aşağıdakı 'Ekranı Qeyd Et' düyməsini vurun.",
+ "# How to Report an Issue on GitHub":"# GitHub-da Problemi Necə Bildirmək olar",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.":"3. [GitHub Issues](https://github.com/IAHispano/Applio/issues) səhifəsinə keçin və 'Yeni Problem' düyməsini vurun.",
+ "Record Screen":"Ekranı qeyd edin",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).":"2. Problemi qeyd etməyi bitirdikdən sonra 'Qeydi Dayandır' düyməsini vurun (eyni düymə, lakin etiket aktiv olaraq qeyd edib-etməməyinizdən asılı olaraq dəyişir).",
+ "See Model Information":"Model Məlumatlarına Baxın",
+ "Output of the pth file":"pth faylının çıxışı",
+ "Extract F0 Curve":"f0 əyrisini çıxarın",
+ "Record":"Qeyd edin",
+ "Introduce the model .pth path":"Model .pth yolunu daxil edin",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.":"4. Təqdim olunmuş problem şablonunu doldurun, lazım olduqda təfərrüatları daxil etdiyinizə əmin olun və əvvəlki addımdan qeyd olunmuş faylı yükləmək üçün aktivlər bölməsindən istifadə edin.",
+ "Name of the new dataset.":"Yeni veri dəstinin adı.",
+ "Upload Audio Dataset":"Səs Veri Dəstini Yükləyin",
+ "Sampling Rate":"Örnekleme Tezliyi",
+ "Version of the model architecture.":"Model arxitekturasının versiyası.",
+ "Path to the dataset folder.":"Veri dəsti qovluğuna yol.",
+ "Enter model name":"Model adını daxil edin",
+ "The sampling rate of the audio files.":"Səs fayllarının örnekleme tezliyi."
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/ba_BA.json b/assets/i18n/languages/ba_BA.json
new file mode 100644
index 0000000000000000000000000000000000000000..b4fbddaf92c11da329b566f08986a0b6b79ed1b5
--- /dev/null
+++ b/assets/i18n/languages/ba_BA.json
@@ -0,0 +1,325 @@
+{
+ "Training": "Уҡыуы",
+ "Output Information": "Сығарылыштар тураһында мәғлүмәт",
+ "Extra": "Өҫтәмә",
+ "Processing": "Эшкәртеү",
+ "Audio Analyzer": "Аудио-анализсы",
+ "Inference": "Һығымта",
+ "Merge Audios": "Merge Audios",
+ "The output information will be displayed here.": "Сығарылыш мәғлүмәте бында күрһәтеләсәк.",
+ "Settings": "Көйләүҙәре",
+ "Download": "Йөкләү",
+ "Plugins": "Плугиндар",
+ "Model Information": "Модель мәғлүмәте",
+ "Preprocess": "Препроцестар",
+ "Report a Bug": "Хата тураһында хәбәр итеү",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "Ҡулланыу еңеллегенә һәм эшсәнлегенә йүнәлтелгән тауышты конверсиялауҙың ябай, сифатлы ҡоралы.",
+ "This section contains some extra utilities that often may be in experimental phases.": "Был бүлектә ҡайһы бер өҫтәмә коммуналь хеҙмәттәр бар, улар йыш ҡына эксперименталь фазаларҙа булыуы ихтимал.",
+ "Model Name": "Модель атамаһы",
+ "Process effects": "Процесс эҙемтәләре",
+ "Enter model name": "Өлгөлө исемде индерегеҙ",
+ "Audio cutting": "Аудио киҫеү",
+ "Name of the new model.": "Яңы моделдең исеме.",
+ "Dataset Path": "Dataset Path",
+ "Refresh Datasets": "Refresh Datasets",
+ "Dataset Name": "Dataset Name",
+ "Dataset Creator": "Dataset Creator",
+ "Path to the dataset folder.": "Бирелмәләр йыйылмаһы папкаһына юл.",
+ "Enter dataset path": "Мәғлүмәт тупланмаһы юлына инегеҙ",
+ "Enter dataset name": "Бирелмәләр йыйылмаһы атамаһын индерегеҙ",
+ "Upload Audio Dataset": "Audio Dataset йөкләү",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Мәғлүмәт тупланмаһына аудиофайл уңышлы өҫтәлә. Алдан уйлап эш итеү төйөгөнә баҫығыҙ.",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "Мәғлүмәттәр тупланмаһы эшкәртелгән булһа, был вариантты һүндерергә кәңәш ителә.",
+ "Sampling Rate": "Һайлап алыу нормаһы",
+ "Model Architecture": "Модель архитектураһы",
+ "Version of the model architecture.": "Модель архитектураһы версияһы.",
+ "Name of the new dataset.": "Яңы мәғлүмәттәр тупланмаһының исеме.",
+ "The sampling rate of the audio files.": "Аудиофайлдарҙың һайлап алыу тиҙлеге.",
+ "Preprocess Dataset": "Допроцесс Dataset",
+ "Hop Length": "Хоп оҙонлоғо",
+ "Extract": "Экстракт",
+ "Model used for learning speaker embedding.": "Динамик эмблемаға өйрәнеү өсөн ҡулланылған модель.",
+ "Save Every Epoch": "Һәр дәүерҙе ҡотҡарығыҙ",
+ "Embedder Model": "Эмбеддер моделе",
+ "Batch Size": "Партия үлсәме",
+ "Pretrained": "Алдан уҡытылғандар",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Системаның айырсаның һиҙелерлек үҙгәреүенә күсеүе өсөн күпме ваҡыт талап ителеүен билдәләй. Хоптың бәләкәйерәк оҙонлоғо һығымта өсөн күберәк ваҡыт талап итә, әммә айырата юғарыраҡ теүәллек биреүгә ынтыла.",
+ "Save Only Latest": "Иң һуңғыһын ғына һаҡлағыҙ",
+ "Total Epoch": "Барлығы Эпох",
+ "Determine at how many epochs the model will saved at.": "Модель нисә дәүерҙә экономиялаясағын билдәләй.",
+ "Specifies the overall quantity of epochs for the model training process.": "Өлгөлө уҡыу процесы өсөн эпохоздарҙың дөйөм һанын билдәләй.",
+ "Save Every Weights": "Һәр ауырлыҡты һаҡлағыҙ",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Уны һеҙҙең ГПУ-ның булған ВРАМ-ы менән яраштырыу урынлы. 4-те ҡуйыу теүәллекте яҡшырта, әммә эшкәртеүҙе әкренәйтә, шул уҡ ваҡытта 8 тиҙерәк һәм стандарт һөҙөмтәләр бирә.",
+ "Custom Pretrained": "Алдан уҡытылған йола",
+ "Upload Pretrained Model": "Йөкләү Алдан уҡытылған модель",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Был параметр моделдең ауырлығын һәр дәүер йомғаҡтары буйынса экономияларға мөмкинлек бирә.",
+ "Refresh Custom Pretraineds": "Яңырыу йолаһы алдан уҡытылғандар",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Был көйләүгә мөмкинлек биреү G һәм D файлдарының иң һуңғы версияларын ғына һаҡлап ҡалыуына, һаҡлау урынын һөҙөмтәле һаҡлауына килтерәсәк.",
+ "Pretrained G Path": "Алдан уҡытылған Г йолаһы",
+ "Pretrained D Path": "Алдан уҡытылған Д йолаһы",
+ "The file you dropped is not a valid pretrained file. Please try again.": "Һеҙ ташлаған файл алдан уҡ уҡытылған файл түгел. Зинһар, тағы ла һынап ҡарағыҙ.",
+ "GPU Settings": "ГПУ көйләүҙәре",
+ "GPU Number": "ГПУ номеры",
+ "GPU Custom Settings": "ГПУ-ның таможня көйләүҙәре",
+ "Pretrained Custom Settings": "Алдан уҡытылған таможня ҡоролошо",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Алдан әҙерләнгән файлды тамғалау менюһында күреү өсөн яңыртыу төймәһенә баҫығыҙ.",
+ "The GPU information will be displayed here.": "ГПУ мәғлүмәте бында күрһәтеләсәк.",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Алдан әҙерләнгән махсус моделдәрҙе ҡулланыу өҫтөнлөклө һөҙөмтәләргә килтереүе мөмкин, сөнки ҡулланыуҙың аныҡ осрағына яраҡлаштырылған алдан әҙерләнгән моделдәрҙе һайлау етештереүсәнлекте һиҙелерлек арттыра ала.",
+ "0 to ∞ separated by -": "0—∞ айырылған —",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "ГПУ архитектураһы яҡшыраҡ булған ҡулланыусылар өсөн тәҡдим ителгән ГПУ-ның алдынғы көйләүҙәрен билдәләй.",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "Препроцестарҙа ҡулланылырға тейешле КПУ йәҙрәләренең һаны. Дефолт параметры — күпселек осраҡта тәҡдим ителгән cpu йәҙрәләре.",
+ "GPU Information": "Мәғлүмәт ГПУ",
+ "Pitch Guidance": "Питч-етәкселек",
+ "Use CPU": "КПУ-ны ҡулланыу",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "Сығарыу процесында ҡулланыу өсөн КПУ йәҙрәләре һаны. Дефолт параметры — күпселек осраҡта тәҡдим ителгән cpu йәҙрәләре.",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Сығарыу өсөн файҙаланырға теләгән ГПУ-ларҙың һанын күрһәтегеҙ.",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Алдан эшкәртеү өсөн файҙаланырға теләгән ГПУ-ларҙың һанын дүрбелең менән айырылған килеш күрһәтегеҙ. Әлеге ваҡытта күп гпу ҡулланыу һиҙелерлек һөҙөмтә бирмәй.",
+ "Force the use of CPU for training.": "КПУ-ны уҡыу өсөн ҡулланырға мәжбүр итеү.",
+ "Extract Features": "Экстракт үҙенсәлектәре",
+ "Index Algorithm": "Индекс алгоритмы",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Үҙегеҙҙе күнектергәндә алдан әҙерләнгән моделдәрҙе ҡулланығыҙ. Бындай алым уҡыу оҙайлығын кәметә һәм дөйөм сифатты арттыра.",
+ "Cache Dataset in GPU": "ГПУ-ла Cache Dataset",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Тиҙерәк башҡарыу өсөн ГПУ-ла модель сығарыуҙы тормошҡа ашырыуға өҫтөнлөк бирәбеҙ. КПУ-ны ҡулланыуҙы өҫтөн күрәһегеҙ икән, ГПУ яланын буш ҡалдырығыҙ.",
+ "Overtraining Detector": "Артыҡ әҙерлек детекторы",
+ "Fresh Training": "Яңы әҙерлек",
+ "Overtraining Threshold": "Артыҡ әҙерлек сиге",
+ "Overtraining Detector Settings": "Артыҡ әҙерлек детекторҙары",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Тиҙерәк башҡарыу өсөн ГПУ-ла алдан эшкәртеү моделен эшләүгә өҫтөнлөк бирәбеҙ. КПУ-ны ҡулланыуҙы өҫтөн күрәһегеҙ икән, ГПУ яланын буш ҡалдырығыҙ.",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Питч-етәкселекте ҡулланып, төп нөсхәләге тауыштың, шул иҫәптән уның айырсаһының интонацияһын сағылдырыу мөмкин була. Был үҙенсәлек йырлау һәм үҙенсәлекле клоун йәки айырса биҙәкен һаҡлау мөһим булған башҡа сценарийҙар өсөн айырыуса ҡиммәтле.",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans — кластерлау алгоритмы, мәғлүмәт тупланмаһын K кластерҙарына бүлә. Был параметр бигерәк тә ҙур мәғлүмәт тупланмалары өсөн файҙалы.",
+ "Start Training": "Башланғыс күнекмәләр",
+ "Cache the dataset in GPU memory to speed up the training process.": "Уҡыу процесын тиҙләтеү өсөн ГПУ хәтерендәге мәғлүмәттәр йыйылмаһын кэшҡа һалырға.",
+ "Generate Index": "Барлыҡҡа килтереү индексы",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Модель уҡытыу мәғлүмәттәрен бик яҡшы өйрәнмәһен һәм яңы мәғлүмәттәргә дөйөмләштереү һәләтен юғалтмаһын өсөн артыҡ әҙерлекте асыҡлағыҙ.",
+ "Export Model": "Экспорт моделе",
+ "Stop Training": "Күнекмәләрҙе туҡтатыу",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "Яңы моделде нулдән әҙерләгән йәки күнекмәләрҙе яңынан башлаған осраҡта ғына ошо көйҙө эшләтеп ебәрегеҙ. Элек барлыҡҡа килгән бөтә ауырлыҡтарҙы һәм тензорборд бүрәнәләрен юйып ташлай.",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Камиллашыу асыҡланмаған осраҡта моделегеҙҙең күнекмәләрҙе туҡтатыуын теләгән дәүерҙәрҙең максималь һанын билдәләгеҙ.",
+ "Exported Index file": "Экспортланған индекс файлы",
+ "Exported Pth file": "Экспортланған Pth файлы",
+ "Upload": "Йөкләнеш",
+ "Select the pth file to be exported": "Экспортҡа сығарылырға тейешле пт-файлды һайлағыҙ",
+ "Voice Model": "Тауыш моделе",
+ "Select the index file to be exported": "Экспортҡа сығарылырға тейешле индекс файлын һайлағыҙ",
+ "Refresh": "Яңырыу",
+ "Select the voice model to use for the conversion.": "Конверсия өсөн ҡулланыу өсөн тауыш моделен һайлағыҙ.",
+ "Single": "Яңғыҙ разряды",
+ "Unload Voice": "Тауышты төшөрөп ташлау",
+ "Upload Audio": "Йөкләү Аудио",
+ "Select Audio": "Аудионы һайлағыҙ",
+ "Advanced Settings": "Алдынғы көйләүҙәр",
+ "Select the index file to use for the conversion.": "Конверсия өсөн ҡулланыу өсөн индекс файлын һайлағыҙ.",
+ "Export Format": "Экспорт форматы",
+ "Output Path": "Сығыу юлы",
+ "Select the audio to convert.": "Үҙгәртеү өсөн аудионы һайлағыҙ.",
+ "Custom Output Path": "Ғәҙәти сығарылыу юлы",
+ "Index File": "Индекс файлы",
+ "Split Audio": "Slit Audio",
+ "Autotune": "Автотун",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Асыҡ сығарылыу (активтарҙағы бөтә аудиояҙмаларҙы юйҙыра/аудио)",
+ "Clean Strength": "Таҙа көс",
+ "Select the format to export the audio.": "Аудиояҙманы экспортлау форматын һайлағыҙ.",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Ҡайһы бер осраҡтарҙа яҡшыраҡ һөҙөмтәләр алыу өсөн аудионы киҫәктәргә бүлергә.",
+ "Clean Audio": "Таҙа аудио",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "'Upload' төймәһе google coalb өсөн генә: Экспортҡа сығарылған файлдарҙы Google Drive'та ApplieOExport папкаһына йөкләй.",
+ "Upscale Audio": "Upscale Audio",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "Сығарылыу аудиоһы һаҡланып ҡаласаҡ юл, активтарҙа/аудиоларҙа дефолт буйынса/output.wav",
+ "Formant Shifting": "Формалашҡан ауышлыҡ",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Йырлау конверсиялары өсөн тәҡдим ителгән һығымталарығыҙға йомшаҡ автотун ҡулланығыҙ.",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Түбән сифатлы аудиояҙмалар өсөн тәҡдим ителгән аудионы юғары сифатлыраҡ күтәрергә. (Аудиояҙманы эшкәртеү оҙағыраҡ ваҡытты ала)",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Формалаштырыуҙы үҙгәртеү мөмкинлеге. Ир-ат өсөн ҡатын-ҡыҙға һәм киреһенсә конверсияларға ҡулланыла.",
+ "Default value is 1.0": "Дефолт хаҡы — 1,0",
+ "Browse presets for formanting": "Формалаштырыу өсөн браузер пресесты",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Аудиояҙмаларҙы һөйләү өсөн тәҡдим ителгән шау-шыуҙы асыҡлау алгоритмдары ярҙамында таҙартығыҙ.",
+ "Pitch": "Питч",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Таҙартыу кимәлен үҙең теләгән аудиоға ҡуйығыҙ, уны ни тиклем арттырһағыҙ, шул тиклем күберәк таҙартасаҡ, әммә аудиояҙманың ҡыҫылыуы ла ихтимал.",
+ "Timbre for formant shifting": "Тимбре формалаштырыусы ауышлыҡ өсөн",
+ "Presets are located in /assets/formant_shift folder": "Пресесеттар /активтарҙа/formant_shift папкала урынлашҡан",
+ "Filter Radius": "Радиус фильтры",
+ "Volume Envelope": "Том конверты",
+ "Search Feature Ratio": "Эҙләү үҙенсәлеге нисбәте",
+ "Quefrency for formant shifting": "Формаль ауышлыҡ өсөн квефренций",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Аудиояҙманың айырсаһын ҡуйығыҙ, ҡиммәте шул тиклем юғарыраҡ, айырса ла шул тиклем юғарыраҡ.",
+ "Protect Voiceless Consonants": "Тауышһыҙ тартынҡыларҙы һаҡлағыҙ",
+ "Pitch extraction algorithm": "Питч сығарыу алгоритмы",
+ "Convert": "Конверсия",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Сығымдың күләм конвертын алмаштырырға йәки ҡушырға. Нисбәт 1-гә ни тиклем яҡыныраҡ булһа, продукция конверты ла шул тиклем күберәк эшләй.",
+ "Export Audio": "Экспорт аудиоһы",
+ "Batch": "Партиялар",
+ "Input Folder": "Индереү пальдеры",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Индекс файлы йоғонтоһо; юғарыраҡ ҡиммәт ҙурыраҡ йоғонтоға тап килә. Әммә түбәнерәк ҡиммәттәрҙе һайлау аудиояҙмала булған артефакттарҙы йомшартырға ярҙам итә ала.",
+ "Enter input path": "Инеү юлына инергә",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Әгәр һан өсәүҙән күберәк йәки уға тиң булһа, йыйылған тон һөҙөмтәләрендә медиана фильтрлауҙы ҡулланыу һулыш алыуҙы кәметеү мөмкинлегенә эйә.",
+ "Output Folder": "Сығарылыу пальдеры",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Аудиоконверсия өсөн ҡулланыу өсөн питч сығарыу алгоритмы. Дефолт алгоритмы — рмвп, ул күпселек осраҡтар өсөн тәҡдим ителә.",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Электроакустик йәшенеүҙе һәм башҡа артефакттарҙы булдырмаҫ өсөн үҙенсәлекле тартынҡыларҙы һәм тын алыу тауыштарын һаҡлағыҙ. Параметрҙы максималь 0,5 ҡиммәтенә тиклем тартыу комплекслы һаҡланыу тәҡдим итә. Әммә был ҡиммәтте кәметеү һаҡлау күләмен кәметергә, шул уҡ ваҡытта индексинг эффектын йомшартырға мөмкин.",
+ "Select the folder containing the audios to convert.": "Үҙгәртеү өсөн аудиояҙмалары булған папканы һайлағыҙ.",
+ "Select the folder where the output audios will be saved.": "Сығарылыу аудиояҙмалары һаҡланасаҡ папканы һайлағыҙ.",
+ "Enter output path": "Сығарыу юлына инегеҙ",
+ "Get information about the audio": "Аудио тураһында мәғлүмәт алығыҙ",
+ "Voice Blender": "Тауыш блендеры",
+ "Blend Ratio": "Ҡатнашмалар нисбәте",
+ "You can also use a custom path.": "Ғәҙәти юлды ла ҡулланырға мөмкин.",
+ "Path to Model": "Моделгә юл",
+ "Drag and drop your model here": "Моделегеҙҙе ошонда һөйрәп төшөрөгөҙ",
+ "Fusion": "Синтез",
+ "Enter path to model": "Моделгә юлға инегеҙ",
+ "Model information to be placed": "Модель мәғлүмәте урынлаштырыласаҡ",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Ике тауыш моделен һайлағыҙ, теләгән ҡатнашма процентын ҡуйығыҙ һәм бөтөнләй яңы тауышҡа ҡушығыҙ.",
+ "Inroduce the model information": "Inroduce моделле мәғлүмәт",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Торошто теге йәки был яҡҡа нығыраҡ көйләү моделде беренсе йәки икенсе яҡҡа нығыраҡ оҡшата.",
+ "View model information": "Моделле мәғлүмәтте ҡарау",
+ "Introduce the model pth path": "Өлгөлө пт-юлды индер",
+ "View": "Күренеше",
+ "Model extraction": "Моделле экстракция",
+ "The information to be placed in the model (You can leave it blank or put anything).": "Моделгә һалынырға тейешле мәғлүмәт (уны буш ҡалдырырға йәки нимәлер ҡуйырға мөмкин).",
+ "Model conversion": "Моделде конверсиялау",
+ "Pth file": "Пт-файл",
+ "## Voice Blender": "#Voice Blender",
+ "Output of the pth file": "Пт-файлдың сығыуы",
+ "Extract F0 Curve": "F0 кәкрелеге",
+ "# How to Report an Issue on GitHub": "#GitHub тураһында мәсьәлә тураһында нисек хәбәр итергә",
+ "Record Screen": "Рекордлы экран",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Кисергән мәсьәләне яҙҙыра башлау өсөн түбәндәге 'Record Screen' төймәһенә баҫығыҙ.",
+ "Stop Recording": "Яҙманы туҡтатыу",
+ "Introduce the model .pth path": "Модель .pth pay",
+ "See Model Information": "Модель мәғлүмәтен ҡарағыҙ",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "F0 кәкрелеге ваҡыт үтеү менән тауыштың нигеҙ йышлығындағы вариацияларҙы кәүҙәләндерә, был айырҙың нисек күтәрелеүен һәм төшөүен күрһәтә.",
+ "Model Link": "Модель Һылтанмаһы",
+ "## Download Model": "#Йөкләү моделе",
+ "Introduce the model link": "Модель һылтанмаһын индереү",
+ "Download Model": "Йөкләү моделе",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. [GitHub Issues](https://github.com/IAHispano/Applio/issues) барығыҙ һәм «Яңы сығарылыш» төймәһенә баҫығыҙ.",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Мәсьәләне яҙып бөткәс, «Яҙҙырыуҙы туҡтатығыҙ» төймәһенә баҫығыҙ (шул уҡ төймәгә баҫығыҙ, әммә этикетка әүҙем яҙып алыу-яҙҙырмауығыҙға ҡарап үҙгәрә).",
+ "## Drop files": "#Drop файлдары",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Бирелгән сығарылыш ҡалыптарын тамамлап, кәрәк булғанда реквизиттарҙы индерергә һәм активтар бүлеген файҙаланып, алдағы аҙымдан яҙып алынған файлды йөкләү өсөн файҙаланырға.",
+ "Record": "Рекорды",
+ "Search": "Эҙләнеүҙәр",
+ "## Search Model": "#Эҙләү моделе",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": ".pth файлығыҙҙы һәм .index файлығыҙҙы ошо арауыҡҡа һөйрәгеҙ. Береһен, һуңынан икенсеһен һөйрәп сығарығыҙ.",
+ "Introduce the model name to search.": "Эҙләү өсөн өлгөлө исемде индерегеҙ.",
+ "We couldn't find models by that name.": "Шул исем менән моделдәр таба алманыҡ.",
+ "TTS Voices": "TTS Voices",
+ "And select the sampling rate": "Һәм һайлап алыу нормаһын һайлағыҙ.",
+ "Select the pretrained model you want to download.": "Йөкләргә теләгән алдан әҙерләнгән моделде һайлағыҙ.",
+ "## Download Pretrained Models": "#Йөкләү алдан уҡытылған моделдәр",
+ "TTS Speed": "TTS Speed",
+ "Text to Synthesize": "Синтезға текст",
+ "Increase or decrease TTS speed.": "ТТС тиҙлегенең артыуы йәки кәмеүе.",
+ "Upload a .txt file": ".txt файлды йөклә",
+ "Select the TTS voice to use for the conversion.": "Конверсия өсөн ҡулланыу өсөн TTS тауышын һайлағыҙ.",
+ "Input path for text file": "Текст файлын индереү юлы",
+ "Enter the text to synthesize.": "Синтезлау өсөн тексты индерегеҙ.",
+ "Output Path for TTS Audio": "TTS Audio өсөн сығыу юлы",
+ "Enter text to synthesize": "Синтезлау өсөн тексты индерегеҙ",
+ "The path to the text file that contains content for text to speech.": "Текст файлына юл, унда текстың телмәр өсөн йөкмәткеһе бар.",
+ "Output Path for RVC Audio": "RVC Audio өсөн сығарылыу юлы",
+ "Enable Applio integration with Discord presence": "Applio Applio интеграцияһын дискорд булыу менән тәьмин итеү",
+ "Enable fake GPU": "Ялған ГПУ-ға мөмкинлек биреү",
+ "It will activate the possibility of downloading models with a click from the website.": "Ул сайттан клик ярҙамында моделдәрҙе йөкләү мөмкинлеген әүҙемләштерә.",
+ "Theme": "Темаһы",
+ "Language": "Теле",
+ "Enable Applio integration with applio.org/models using flask": "Enable Applio applio.org/models менән фляга ярҙамында интеграциялау мөмкинлеге",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "Ул Ағымдағы Applio эшмәкәрлеген Discord-та күрһәтеү мөмкинлеген әүҙемләштерәсәк.",
+ "Precision": "Аныҡлыҡ",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Поезд таблицаһын әүҙемләштерә. Әммә был ҡоролмала ГПУ мөмкинлектәре булмауын билдәләгеҙ, шуға күрә уҡытыу хупланмай. Был вариант һынау маҡсатында ғына. (Был вариант Applio-ны яңынан эшләтеп ебәрәсәк)",
+ "Select the language you want to use. (Requires restarting Applio)": "Ҡулланырға теләгән телде һайлағыҙ. (Applio-ны ҡайтанан эшләтеп ебәреү талап итә)",
+ "Restart Applio": "Applio-ны ҡайтанан эшләтеп ебәреү",
+ "Update precision": "Яңыртыу аныҡлығы",
+ "Plugin Installer": "Плугин монтажлаусыһы",
+ "Select the theme you want to use. (Requires restarting Applio)": "Ҡулланырға теләгән теманы һайлағыҙ. (Applio-ны ҡайтанан эшләтеп ебәреү талап итә)",
+ "Select the precision you want to use for training and inference.": "Күнекмәләр һәм һығымталар өсөн ҡулланырға теләгән аныҡлыҡты һайлағыҙ.",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "Әлеге ваҡытта ГПУ булмау сәбәпле уҡытыу ярҙамһыҙ ҡала. Күнекмә таблицаһын әүҙемләштереү өсөн көйләүҙәр таблицаһына йүнәлеш алырға һәм 'Fake GPU' вариантын ҡулланыу мөмкинлеген бирергә.",
+ "Drag your plugin.zip to install it": "Ҡуйыр өсөн plugin.zip һөйрәп сығарығыҙ",
+ "Check for updates": "Яңыртыуҙарҙы тикшереү",
+ "Version Checker": "Шашка версияһы",
+ "Reverb": "Реверб",
+ "Post-Process": "Процестан һуңғы",
+ "Apply reverb to the audio.": "Аудиоға киреһен ҡулланығыҙ.",
+ "Reverb Room Size": "Reverb Room Ҙурлығы",
+ "Reverb Damping": "Дымландырыусы реверб",
+ "Post-process the audio to apply effects to the output.": "Процестан һуң аудиояҙма сығарылышҡа эффекттарҙы ҡулланыу өсөн.",
+ "Set the room size of the reverb.": "Ҡылымдың бүлмә ҙурлығын ҡуйығыҙ.",
+ "Reverb Dry Gain": "Реверб Ҡоро табыш",
+ "Set the damping of the reverb.": "Ҡылымдың дымлылығын ҡуйығыҙ.",
+ "Check which version of Applio is the latest to see if you need to update.": "Яңыртырға кәрәкме-юҡмы икәнлеген тикшереү өсөн Applio-ның ҡайһы версияһы иң һуңғыһы икәнен тикшерегеҙ.",
+ "Set the dry gain of the reverb.": "Ҡылымдың ҡоро табышын ҡуйығыҙ.",
+ "Set the wet gain of the reverb.": "Ҡылымдың дымлы табышын ҡуйығыҙ.",
+ "Reverb Width": "Видт реверб",
+ "Reverb Wet Gain": "Вет-Гайн реверб",
+ "Set the width of the reverb.": "Ҡылымдың киңлеген ҡуйығыҙ.",
+ "Reverb Freeze Mode": "Реверб туңдырыу режимы",
+ "Limiter": "Лимитер",
+ "Set the freeze mode of the reverb.": "Ҡылымдың туңыу режимын ҡуйығыҙ.",
+ "Set the pitch shift semitones.": "Айыр сменаһы ярымтондарын ҡуйығыҙ.",
+ "Pitch Shift Semitones": "Питч-Shift Семитонес",
+ "Apply pitch shift to the audio.": "Аудиоға питч-сменаны ҡулланығыҙ.",
+ "Apply limiter to the audio.": "Аудиоға сикләүсене ҡулланығыҙ.",
+ "Pitch Shift": "Питч-смена",
+ "Limiter Threshold dB": "Сикләүсе сикләү dB",
+ "Limiter Release Time": "Сикләүсе сығарылыш ваҡыты",
+ "Gain": "Табышы",
+ "Set the limiter release time.": "Сикләүсе сығарылыш ваҡытын билдәләргә.",
+ "Set the limiter threshold dB.": "Сикләү сиген БД ҡуйығыҙ.",
+ "Gain dB": "ДБ табышы",
+ "Apply gain to the audio.": "Табышты аудиоға ҡулланығыҙ.",
+ "Distortion": "Боҙолоу",
+ "Set the gain dB.": "Табышты БД ҡуйығыҙ.",
+ "Apply distortion to the audio.": "Аудиояҙмаға тайпылыш ҡулланығыҙ.",
+ "Chorus": "Хор",
+ "Set the distortion gain.": "Тайпылыш табышын ҡуйығыҙ.",
+ "Set the chorus rate Hz.": "Хор тиҙлеге Hz ҡуйығыҙ.",
+ "Chorus Depth": "Хор тәрәнлеге",
+ "Set the chorus depth.": "Хор тәрәнлеге ҡуйығыҙ.",
+ "Apply chorus to the audio.": "Аудиоға хор ҡулланығыҙ.",
+ "Chorus Rate Hz": "Хор ставкаһы Hz",
+ "Chorus Feedback": "Хорҙың кире бәйләнеше",
+ "Chorus Mix": "Хор ҡатнашмаһы",
+ "Set the chorus feedback.": "Хорҙың фекерҙәрен ҡуйығыҙ.",
+ "Set the chorus center delay ms.": "Хор үҙәген тотҡарлаусы мс ҡуйығыҙ.",
+ "Chorus Center Delay ms": "Хор үҙәге Кисектереү мс",
+ "Set the chorus mix.": "Хор ҡатнашмаһын ҡуйығыҙ.",
+ "Bitcrush": "Биткруш",
+ "Bitcrush Bit Depth": "Биткруш тәрәнлеге",
+ "Clipping": "Ҡысҡырыу",
+ "Apply bitcrush to the audio.": "Аудиоға биткруш ҡулланығыҙ.",
+ "Compressor": "Компрессор",
+ "Clipping Threshold": "Ҡысҡырыу сиге",
+ "Set the bitcrush bit depth.": "Биткруштың бер аҙ тәрәнлеге ҡуйығыҙ.",
+ "Set the clipping threshold.": "Ҡысҡырыу сиген ҡуйығыҙ.",
+ "Apply clipping to the audio.": "Аудиояҙмаға ҡысҡырыуҙы ҡулланығыҙ.",
+ "Compressor Threshold dB": "Компрессор сиге",
+ "Set the compressor threshold dB.": "Компрессор сиген БД ҡуйығыҙ.",
+ "Compressor Attack ms": "Компрессор һөжүме мс",
+ "Distortion Gain": "Боҙолоу табышы",
+ "Compressor Ratio": "Компрессор нисбәте",
+ "Set the compressor ratio.": "Компрессор нисбәтен ҡуйығыҙ.",
+ "Set the compressor attack ms.": "Компрессор һөжүмен мс ҡуйығыҙ.",
+ "Apply compressor to the audio.": "Аудиоға компрессор ҡулланығыҙ.",
+ "Compressor Release ms": "Компрессор Релиз мс",
+ "Delay Seconds": "Секундтарҙы кисектереү",
+ "Delay": "Кисектереү",
+ "Set the compressor release ms.": "Компрессор сығарылышы мс ҡуйығыҙ.",
+ "Set the delay seconds.": "Кисектереү секундтарын ҡуйығыҙ.",
+ "Delay Feedback": "Кисектереү тураһында фекерҙәр",
+ "Set the delay feedback.": "Кисектереү тураһында фекерҙәр ҡуйығыҙ.",
+ "Apply delay to the audio.": "Аудиояҙмаға кисектереүҙе ҡулланығыҙ.",
+ "Delay Mix": "Кисектереү ҡатнашмаһы",
+ "Set the delay mix.": "Кисектереү ҡатнашмаһын ҡуйығыҙ.",
+ "Custom Embedder": "Эмбеддер йолаһы",
+ "Folder Name": "Папка исеме",
+ "Upload .bin": "Йөкләнеш .bin",
+ "Upload .json": "Йөкләү .json",
+ "Select Custom Embedder": "Махсус эмбеддер һайлағыҙ",
+ "Refresh embedders": "Яңырыу эмблемалары",
+ "model information": "модель мәғлүмәте",
+ "Model Creator": "Өлгөлө ижадсы",
+ "Move files to custom embedder folder": "Файлдарҙы махсус эмбеддер папкаһына күсерергә",
+ "Speaker ID": "Спикерҙың ID-һы",
+ "Model Author Name": "Модель Автор исеме",
+ "Name of the model creator. (Default: Unknown)": "Модель төҙөүсенең исеме. (Дефолт: Билдәһеҙ)",
+ "Set name": "Йыйылма исеме",
+ "The name that will appear in the model information.": "Өлгөлө мәғлүмәттә барлыҡҡа киләсәк исем.",
+ "Select the speaker ID to use for the conversion.": "Конверсия өсөн ҡулланыу өсөн динамиктың ID-һын һайлағыҙ.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "Автотун көсөн ҡуйығыҙ — уны ни тиклем арттырһағыҙ, шул тиклем хроматик селтәргә һығылып торасаҡ."
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/be_BE.json b/assets/i18n/languages/be_BE.json
new file mode 100644
index 0000000000000000000000000000000000000000..039155106e994aff72de1e34b5985e9a51fde33d
--- /dev/null
+++ b/assets/i18n/languages/be_BE.json
@@ -0,0 +1,325 @@
+{
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.",
+ "Apply limiter to the audio.": "Apply limiter to the audio.",
+ "Input path for text file": "Input path for text file",
+ "Set the gain dB.": "Set the gain dB.",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Enable formant shifting. Used for male to female and vice-versa convertions.",
+ "Inference": "Inference",
+ "Browse presets for formanting": "Browse presets for formanting",
+ "Clean Strength": "Clean Strength",
+ "Limiter Threshold dB": "Limiter Threshold dB",
+ "Audio Analyzer": "Audio Analyzer",
+ "Chorus Rate Hz": "Chorus Rate Hz",
+ "Theme": "Theme",
+ "Upscale Audio": "Upscale Audio",
+ "Output Information": "Output Information",
+ "Apply distortion to the audio.": "Apply distortion to the audio.",
+ "Output Path for RVC Audio": "Output Path for RVC Audio",
+ "Autotune": "Autotune",
+ "Set the distortion gain.": "Set the distortion gain.",
+ "It will activate the possibility of downloading models with a click from the website.": "It will activate the possibility of downloading models with a click from the website.",
+ "Distortion": "Distortion",
+ "Apply gain to the audio.": "Apply gain to the audio.",
+ "Select the theme you want to use. (Requires restarting Applio)": "Select the theme you want to use. (Requires restarting Applio)",
+ "The path to the text file that contains content for text to speech.": "The path to the text file that contains content for text to speech.",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.",
+ "The output information will be displayed here.": "The output information will be displayed here.",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Apply a soft autotune to your inferences, recommended for singing conversions.",
+ "Gain dB": "Gain dB",
+ "Chorus": "Chorus",
+ "Formant Shifting": "Formant Shifting",
+ "Enable Applio integration with applio.org/models using flask": "Enable Applio integration with applio.org/models using flask",
+ "Restart Applio": "Restart Applio",
+ "Gain": "Gain",
+ "Distortion Gain": "Distortion Gain",
+ "Enable Applio integration with Discord presence": "Enable Applio integration with Discord presence",
+ "Presets are located in /assets/formant_shift folder": "Presets are located in /assets/formant_shift folder",
+ "This section contains some extra utilities that often may be in experimental phases.": "This section contains some extra utilities that often may be in experimental phases.",
+ "Extra": "Extra",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Clean your audio output using noise detection algorithms, recommended for speaking audios.",
+ "Output Path for TTS Audio": "Output Path for TTS Audio",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Split the audio into chunks for inference to obtain better results in some cases.",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)",
+ "Clean Audio": "Clean Audio",
+ "Set the limiter threshold dB.": "Set the limiter threshold dB.",
+ "Enter text to synthesize": "Enter text to synthesize",
+ "Apply chorus to the audio.": "Apply chorus to the audio.",
+ "Enable fake GPU": "Enable fake GPU",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "A simple, high-quality voice conversion tool focused on ease of use and performance.",
+ "Language": "Language",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "It will activate the possibility of displaying the current Applio activity in Discord.",
+ "Training": "Training",
+ "Limiter Release Time": "Limiter Release Time",
+ "Set the limiter release time.": "Set the limiter release time.",
+ "## Drop files": "## Drop files",
+ "Model used for learning speaker embedding.": "Model used for learning speaker embedding.",
+ "Stop Recording": "Stop Recording",
+ "Sampling Rate": "Sampling Rate",
+ "## Download Model": "## Download Model",
+ "Download Model": "Download Model",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.",
+ "Batch Size": "Batch Size",
+ "Hop Length": "Hop Length",
+ "Name of the new model.": "Name of the new model.",
+ "Enter dataset name": "Enter dataset name",
+ "Extract": "Extract",
+ "Dataset Path": "Dataset Path",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).",
+ "See Model Information": "See Model Information",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "The audio file has been successfully added to the dataset. Please click the preprocess button.",
+ "Model Link": "Model Link",
+ "Model Architecture": "Model Architecture",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.",
+ "Refresh Datasets": "Refresh Datasets",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.",
+ "Introduce the model .pth path": "Introduce the model .pth path",
+ "Embedder Model": "Embedder Model",
+ "Record": "Record",
+ "Enter dataset path": "Enter dataset path",
+ "# How to Report an Issue on GitHub": "# How to Report an Issue on GitHub",
+ "Introduce the model link": "Introduce the model link",
+ "The sampling rate of the audio files.": "The sampling rate of the audio files.",
+ "Record Screen": "Record Screen",
+ "Version of the model architecture.": "Version of the model architecture.",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.",
+ "Preprocess Dataset": "Preprocess Dataset",
+ "Model extraction": "Model extraction",
+ "Upload .bin": "Upload .bin",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.",
+ "Apply reverb to the audio.": "Apply reverb to the audio.",
+ "Folder Name": "Folder Name",
+ "Model information to be placed": "Model information to be placed",
+ "Enter path to model": "Enter path to model",
+ "Pth file": "Pth file",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.",
+ "Set the room size of the reverb.": "Set the room size of the reverb.",
+ "Update precision": "Update precision",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.",
+ "GPU Number": "GPU Number",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.",
+ "Select the language you want to use. (Requires restarting Applio)": "Select the language you want to use. (Requires restarting Applio)",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.",
+ "Overtraining Detector Settings": "Overtraining Detector Settings",
+ "0 to ∞ separated by -": "0 to ∞ separated by -",
+ "Force the use of CPU for training.": "Force the use of CPU for training.",
+ "Drag your plugin.zip to install it": "Drag your plugin.zip to install it",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.",
+ "Extract F0 Curve": "Extract F0 Curve",
+ "Reverb": "Reverb",
+ "View model information": "View model information",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.",
+ "Move files to custom embedder folder": "Move files to custom embedder folder",
+ "Model Author Name": "Model Author Name",
+ "The information to be placed in the model (You can leave it blank or put anything).": "The information to be placed in the model (You can leave it blank or put anything).",
+ "Set the delay seconds.": "Set the delay seconds.",
+ "Use CPU": "Use CPU",
+ "Select the speaker ID to use for the conversion.": "Select the speaker ID to use for the conversion.",
+ "Pitch Guidance": "Pitch Guidance",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).",
+ "model information": "model information",
+ "Extract Features": "Extract Features",
+ "Cache Dataset in GPU": "Cache Dataset in GPU",
+ "Overtraining Threshold": "Overtraining Threshold",
+ "Pretrained D Path": "Custom Pretrained D",
+ "Select Custom Embedder": "Select Custom Embedder",
+ "The GPU information will be displayed here.": "The GPU information will be displayed here.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.",
+ "Set name": "Set name",
+ "GPU Settings": "GPU Settings",
+ "Speaker ID": "Speaker ID",
+ "Model Creator": "Model Creator",
+ "GPU Custom Settings": "GPU Custom Settings",
+ "Upload .json": "Upload .json",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.",
+ "Inroduce the model information": "Inroduce the model information",
+ "Pretrained G Path": "Custom Pretrained G",
+ "Precision": "Precision",
+ "View": "View",
+ "Output of the pth file": "Output of the pth file",
+ "GPU Information": "GPU Information",
+ "Check for updates": "Check for updates",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.",
+ "Path to Model": "Path to Model",
+ "Reverb Room Size": "Reverb Room Size",
+ "Refresh embedders": "Refresh embedders",
+ "Post-Process": "Post-Process",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Click the refresh button to see the pretrained file in the dropdown menu.",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Sets advanced GPU settings, recommended for users with better GPU architecture.",
+ "Custom Embedder": "Custom Embedder",
+ "The name that will appear in the model information.": "The name that will appear in the model information.",
+ "Delay Mix": "Delay Mix",
+ "Version Checker": "Version Checker",
+ "Index Algorithm": "Index Algorithm",
+ "Fusion": "Fusion",
+ "Overtraining Detector": "Overtraining Detector",
+ "Name of the model creator. (Default: Unknown)": "Name of the model creator. (Default: Unknown)",
+ "Delay Feedback": "Delay Feedback",
+ "Dataset Creator": "Dataset Creator",
+ "Set the delay feedback.": "Set the delay feedback.",
+ "Select the precision you want to use for training and inference.": "Select the precision you want to use for training and inference.",
+ "Set the delay mix.": "Set the delay mix.",
+ "Plugin Installer": "Plugin Installer",
+ "Cache the dataset in GPU memory to speed up the training process.": "Cache the dataset in GPU memory to speed up the training process.",
+ "Introduce the model pth path": "Introduce the model pth path",
+ "Post-process the audio to apply effects to the output.": "Post-process the audio to apply effects to the output.",
+ "Model conversion": "Model conversion",
+ "Check which version of Applio is the latest to see if you need to update.": "Check which version of Applio is the latest to see if you need to update.",
+ "You can also use a custom path.": "You can also use a custom path.",
+ "TTS Voices": "TTS Voices",
+ "Plugins": "Plugins",
+ "TTS Speed": "TTS Speed",
+ "Search": "Search",
+ "## Download Pretrained Models": "## Download Pretrained Models",
+ "Output Folder": "Output Folder",
+ "And select the sampling rate": "And select the sampling rate.",
+ "Blend Ratio": "Blend Ratio",
+ "## Voice Blender": "## Voice Blender",
+ "Download": "Download",
+ "## Search Model": "## Search Model",
+ "Merge Audios": "Merge Audios",
+ "Introduce the model name to search.": "Introduce the model name to search.",
+ "Preprocess": "Preprocess",
+ "Select the folder where the output audios will be saved.": "Select the folder where the output audios will be saved.",
+ "Input Folder": "Input Folder",
+ "Report a Bug": "Report a Bug",
+ "Enter input path": "Enter input path",
+ "Select the TTS voice to use for the conversion.": "Select the TTS voice to use for the conversion.",
+ "Voice Blender": "Voice Blender",
+ "Increase or decrease TTS speed.": "Increase or decrease TTS speed.",
+ "We couldn't find models by that name.": "We couldn't find models by that name.",
+ "Upload a .txt file": "Upload a .txt file",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Adjusting the position more towards one side or the other will make the model more similar to the first or second.",
+ "Export Audio": "Export Audio",
+ "Model Name": "Model Name",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Drag your .pth file and .index file into this space. Drag one and then the other.",
+ "Text to Synthesize": "Text to Synthesize",
+ "Drag and drop your model here": "Drag and drop your model here",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.",
+ "Enter the text to synthesize.": "Enter the text to synthesize.",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "It's recommended to deactivate this option if your dataset has already been processed.",
+ "Select the pretrained model you want to download.": "Select the pretrained model you want to download.",
+ "Enter output path": "Enter output path",
+ "Get information about the audio": "Get information about the audio",
+ "Processing": "Processing",
+ "Select the folder containing the audios to convert.": "Select the folder containing the audios to convert.",
+ "Batch": "Batch",
+ "Model Information": "Model Information",
+ "Start Training": "Start Training",
+ "Select the format to export the audio.": "Select the format to export the audio.",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Clear Outputs (Deletes all audios in assets/audios)",
+ "Refresh": "Refresh",
+ "Fresh Training": "Fresh Training",
+ "Unload Voice": "Unload Voice",
+ "Select the index file to use for the conversion.": "Select the index file to use for the conversion.",
+ "Custom Output Path": "Custom Output Path",
+ "Split Audio": "Split Audio",
+ "Select the pth file to be exported": "Select the pth file to be exported",
+ "Voice Model": "Voice Model",
+ "Index File": "Index File",
+ "Generate Index": "Generate Index",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "The path where the output audio will be saved, by default in assets/audios/output.wav",
+ "Select the voice model to use for the conversion.": "Select the voice model to use for the conversion.",
+ "Select Audio": "Select Audio",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.",
+ "Export Format": "Export Format",
+ "Output Path": "Output Path",
+ "Exported Pth file": "Exported Pth file",
+ "Exported Index file": "Exported Index file",
+ "Advanced Settings": "Advanced Settings",
+ "Upload": "Upload",
+ "Select the index file to be exported": "Select the index file to be exported",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Set the maximum number of epochs you want your model to stop training if no improvement is detected.",
+ "Upload Audio": "Upload Audio",
+ "Select the audio to convert.": "Select the audio to convert.",
+ "Single": "Single",
+ "Stop Training": "Stop Training",
+ "Export Model": "Export Model",
+ "Limiter": "Limiter",
+ "Pitch Shift Semitones": "Pitch Shift Semitones",
+ "Enter model name": "Enter model name",
+ "Settings": "Settings",
+ "Audio cutting": "Audio cutting",
+ "Set the dry gain of the reverb.": "Set the dry gain of the reverb.",
+ "Upload Audio Dataset": "Upload Audio Dataset",
+ "Pitch Shift": "Pitch Shift",
+ "Path to the dataset folder.": "Path to the dataset folder.",
+ "Set the damping of the reverb.": "Set the damping of the reverb.",
+ "Reverb Damping": "Reverb Damping",
+ "Reverb Wet Gain": "Reverb Wet Gain",
+ "Reverb Freeze Mode": "Reverb Freeze Mode",
+ "Set the freeze mode of the reverb.": "Set the freeze mode of the reverb.",
+ "Apply pitch shift to the audio.": "Apply pitch shift to the audio.",
+ "Reverb Width": "Reverb Width",
+ "Set the wet gain of the reverb.": "Set the wet gain of the reverb.",
+ "Name of the new dataset.": "Name of the new dataset.",
+ "Set the pitch shift semitones.": "Set the pitch shift semitones.",
+ "Set the width of the reverb.": "Set the width of the reverb.",
+ "Reverb Dry Gain": "Reverb Dry Gain",
+ "Process effects": "Process effects",
+ "Pretrained": "Pretrained",
+ "Compressor Ratio": "Compressor Ratio",
+ "Delay Seconds": "Delay Seconds",
+ "Bitcrush": "Bitcrush",
+ "Pretrained Custom Settings": "Pretrained Custom Settings",
+ "Apply clipping to the audio.": "Apply clipping to the audio.",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.",
+ "Set the clipping threshold.": "Set the clipping threshold.",
+ "Chorus Depth": "Chorus Depth",
+ "Set the chorus feedback.": "Set the chorus feedback.",
+ "Save Every Epoch": "Save Every Epoch",
+ "Set the chorus center delay ms.": "Set the chorus center delay ms.",
+ "Save Every Weights": "Save Every Weights",
+ "Save Only Latest": "Save Only Latest",
+ "Bitcrush Bit Depth": "Bitcrush Bit Depth",
+ "Total Epoch": "Total Epoch",
+ "Clipping": "Clipping",
+ "Clipping Threshold": "Clipping Threshold",
+ "Apply compressor to the audio.": "Apply compressor to the audio.",
+ "Upload Pretrained Model": "Upload Pretrained Model",
+ "Set the compressor attack ms.": "Set the compressor attack ms.",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.",
+ "Specifies the overall quantity of epochs for the model training process.": "Specifies the overall quantity of epochs for the model training process.",
+ "Chorus Mix": "Chorus Mix",
+ "Compressor Threshold dB": "Compressor Threshold dB",
+ "Set the bitcrush bit depth.": "Set the bitcrush bit depth.",
+ "Compressor": "Compressor",
+ "The file you dropped is not a valid pretrained file. Please try again.": "The file you dropped is not a valid pretrained file. Please try again.",
+ "Apply delay to the audio.": "Apply delay to the audio.",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.",
+ "Compressor Attack ms": "Compressor Attack ms",
+ "Chorus Feedback": "Chorus Feedback",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "This setting enables you to save the weights of the model at the conclusion of each epoch.",
+ "Compressor Release ms": "Compressor Release ms",
+ "Custom Pretrained": "Custom Pretrained",
+ "Delay": "Delay",
+ "Set the chorus rate Hz.": "Set the chorus rate Hz.",
+ "Set the compressor release ms.": "Set the compressor release ms.",
+ "Set the chorus depth.": "Set the chorus depth.",
+ "Apply bitcrush to the audio.": "Apply bitcrush to the audio.",
+ "Set the compressor ratio.": "Set the compressor ratio.",
+ "Chorus Center Delay ms": "Chorus Center Delay ms",
+ "Set the compressor threshold dB.": "Set the compressor threshold dB.",
+ "Refresh Custom Pretraineds": "Refresh Custom Pretraineds",
+ "Determine at how many epochs the model will saved at.": "Determine at how many epochs the model will saved at.",
+ "Set the chorus mix.": "Set the chorus mix.",
+ "Volume Envelope": "Volume Envelope",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.",
+ "Timbre for formant shifting": "Timbre for formant shifting",
+ "Pitch extraction algorithm": "Pitch extraction algorithm",
+ "Protect Voiceless Consonants": "Protect Voiceless Consonants",
+ "Pitch": "Pitch",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.",
+ "Quefrency for formant shifting": "Quefrency for formant shifting",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.",
+ "Convert": "Convert",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.",
+ "Filter Radius": "Filter Radius",
+ "Search Feature Ratio": "Search Feature Ratio",
+ "Default value is 1.0": "Default value is 1.0",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Set the pitch of the audio, the higher the value, the higher the pitch.",
+ "Dataset Name": "Dataset Name"
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/bn_BN.json b/assets/i18n/languages/bn_BN.json
new file mode 100644
index 0000000000000000000000000000000000000000..80ba8e5e8d5f014f2ee45c2459111ea3784e6866
--- /dev/null
+++ b/assets/i18n/languages/bn_BN.json
@@ -0,0 +1,325 @@
+{
+ "Extra": "অতিরিক্ত",
+ "Inference": "অনুমান",
+ "Processing": "প্রক্রিয়াকরণ",
+ "Settings": "সেটিংস",
+ "Output Information": "আউটপুট তথ্য",
+ "Training": "প্রশিক্ষণ",
+ "Download": "ডাউনলোড",
+ "Model Information": "মডেল তথ্য",
+ "Plugins": "প্লাগইন",
+ "Audio Analyzer": "অডিও বিশ্লেষক",
+ "Preprocess": "প্রিপ্রসেস",
+ "Merge Audios": "অডিওগুলি মার্জ করুন",
+ "The output information will be displayed here.": "আউটপুট তথ্য এখানে প্রদর্শিত হবে।",
+ "Report a Bug": "একটি বাগ রিপোর্ট করুন",
+ "Audio cutting": "অডিও কাটিং",
+ "Process effects": "প্রক্রিয়া প্রভাব",
+ "Dataset Path": "ডেটাসেট পাথ",
+ "Enter model name": "মডেলের নাম লিখুন",
+ "Model Name": "মডেলের নাম",
+ "Dataset Creator": "ডেটাসেট স্রষ্টা",
+ "Name of the new model.": "নতুন মডেলের নাম",
+ "Dataset Name": "ডেটাসেটের নাম",
+ "Name of the new dataset.": "নতুন ডেটাসেটের নাম",
+ "Refresh Datasets": "ডেটাসেট রিফ্রেশ করুন",
+ "Path to the dataset folder.": "ডেটাসেট ফোল্ডারে পাথ।",
+ "This section contains some extra utilities that often may be in experimental phases.": "এই বিভাগে কিছু অতিরিক্ত ইউটিলিটি রয়েছে যা প্রায়শই পরীক্ষামূলক পর্যায়ে থাকতে পারে।",
+ "Enter dataset name": "তথ্যসেটের নাম লিখুন",
+ "Enter dataset path": "ডেটাসেটের পথ লিখুন",
+ "Upload Audio Dataset": "অডিও ডেটাসেট আপলোড করুন",
+ "Sampling Rate": "নমুনা হার",
+ "Extract": "নিষ্কাশন",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "একটি সহজ, উচ্চ মানের ভয়েস রূপান্তর সরঞ্জাম ব্যবহারের স্বাচ্ছন্দ্য এবং কর্মক্ষমতা উপর দৃষ্টি নিবদ্ধ করে।",
+ "Model Architecture": "মডেল আর্কিটেকচার",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "আপনার তথ্যসেটটি ইতিমধ্যে প্রক্রিয়া করা হয়ে থাকলে এই বিকল্পটি নিষ্ক্রিয় করার সুপারিশ করা হয়।",
+ "The sampling rate of the audio files.": "অডিও ফাইলের নমুনা হার।",
+ "Embedder Model": "এম্বেডার মডেল",
+ "Preprocess Dataset": "প্রিপ্রসেস ডেটাসেট",
+ "Hop Length": "হপ দৈর্ঘ্য",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "অডিও ফাইলটি সফলভাবে ডেটাসেটে যুক্ত করা হয়েছে। অনুগ্রহ করে প্রিপ্রসেস বাটনে ক্লিক করুন।",
+ "Batch Size": "ব্যাচের আকার",
+ "Version of the model architecture.": "মডেল আর্কিটেকচারের সংস্করণ।",
+ "Model used for learning speaker embedding.": "স্পিকার এম্বেডিং শেখার জন্য ব্যবহৃত মডেল।",
+ "Total Epoch": "মোট যুগ",
+ "Pretrained": "পূর্বনির্ধারিত",
+ "Save Every Epoch": "প্রতিটি যুগ সংরক্ষণ করুন",
+ "Custom Pretrained": "কাস্টম প্রিট্রেইনড",
+ "Save Every Weights": "প্রতিটি ওজন সংরক্ষণ করুন",
+ "Save Only Latest": "শুধুমাত্র সর্বশেষ সংরক্ষণ করুন",
+ "Determine at how many epochs the model will saved at.": "মডেলটি কতগুলি যুগে সংরক্ষণ করবে তা নির্ধারণ করুন।",
+ "Upload Pretrained Model": "প্রিট্রেনড মডেল আপলোড করুন",
+ "Refresh Custom Pretraineds": "কাস্টম প্রিট্রেনেডগুলি রিফ্রেশ করুন",
+ "Pretrained Custom Settings": "পূর্বনির্ধারিত কাস্টম সেটিংস",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "সিস্টেমটি একটি উল্লেখযোগ্য পিচ পরিবর্তনে রূপান্তরিত হতে যে সময়কাল নেয় তা বোঝায়। ছোট হপ দৈর্ঘ্যের জন্য অনুমানের জন্য আরও সময় প্রয়োজন তবে উচ্চতর পিচ নির্ভুলতা অর্জন করে।",
+ "Pretrained G Path": "কাস্টম প্রিট্রেনড জি",
+ "GPU Settings": "জিপিইউ সেটিংস",
+ "Pretrained D Path": "কাস্টম প্রিট্রেনড ডি",
+ "Specifies the overall quantity of epochs for the model training process.": "মডেল প্রশিক্ষণ প্রক্রিয়ার জন্য যুগের সামগ্রিক পরিমাণ উল্লেখ করে।",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "এই সেটিংটি আপনাকে প্রতিটি যুগের শেষে মডেলের ওজন সংরক্ষণ করতে সক্ষম করে।",
+ "GPU Number": "জিপিইউ নম্বর",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "এটি আপনার জিপিইউর উপলব্ধ ভিআরএএমের সাথে সারিবদ্ধ করার পরামর্শ দেওয়া হচ্ছে। 4 এর একটি সেটিং উন্নত নির্ভুলতা সরবরাহ করে তবে ধীর প্রক্রিয়াজাতকরণ, যখন 8 দ্রুত এবং মানক ফলাফল সরবরাহ করে।",
+ "GPU Custom Settings": "GPU কাস্টম সেটিংস",
+ "The file you dropped is not a valid pretrained file. Please try again.": "আপনার ফেলে দেওয়া ফাইলটি একটি বৈধ পূর্বপ্রশিক্ষিত ফাইল নয়. অনুগ্রহ করে আবার চেষ্টা করুন।",
+ "GPU Information": "জিপিইউ তথ্য",
+ "0 to ∞ separated by -": "0 থেকে ∞ দ্বারা পৃথক করা হয় -",
+ "The GPU information will be displayed here.": "GPU তথ্য এখানে প্রদর্শিত হবে।",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "ড্রপডাউন মেনুতে প্রিট্রেনড ফাইলটি দেখতে রিফ্রেশ বোতামটি ক্লিক করুন।",
+ "Use CPU": "CPU ব্যবহার করুন",
+ "Pitch Guidance": "পিচ গাইডেন্স",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "উন্নত GPU সেটিংস সেট করে, আরও ভাল GPU আর্কিটেকচার সহ ব্যবহারকারীদের জন্য প্রস্তাবিত।",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "এই সেটিংটি সক্ষম করার ফলে জি এবং ডি ফাইলগুলি কেবলমাত্র তাদের সাম্প্রতিকতম সংস্করণগুলি সংরক্ষণ করবে, কার্যকরভাবে স্টোরেজ স্পেস সংরক্ষণ করবে।",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "প্রিপ্রসেসে ব্যবহার করার জন্য সিপিইউ কোরের সংখ্যা। ডিফল্ট সেটিংটি হ'ল আপনার সিপিইউ কোর, যা বেশিরভাগ ক্ষেত্রে প্রস্তাবিত।",
+ "Force the use of CPU for training.": "প্রশিক্ষণের জন্য CPU ব্যবহার করতে বাধ্য করুন।",
+ "Extract Features": "এক্সট্রাক্ট বৈশিষ্ট্য",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "কাস্টম প্রিট্রেনড মডেলগুলি ব্যবহার করা উচ্চতর ফলাফলের দিকে পরিচালিত করতে পারে, কারণ নির্দিষ্ট ব্যবহারের ক্ষেত্রে উপযুক্ত প্রিট্রেনড মডেলগুলি নির্বাচন করা কর্মক্ষমতা উল্লেখযোগ্যভাবে বাড়িয়ে তুলতে পারে।",
+ "Cache Dataset in GPU": "GPU-তে ক্যাশে ডেটাসেট",
+ "Index Algorithm": "সূচক অ্যালগরিদম",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "হাইফেন (-) দ্বারা পৃথক করে প্রিপ্রসেসের জন্য আপনি যে সংখ্যক জিপিইউ ব্যবহার করতে চান তা নির্দিষ্ট করুন। এই মুহুর্তে, মাল্টি-জিপিইউ ব্যবহার করা একটি উল্লেখযোগ্য প্রভাব ফেলবে না।",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "নিষ্কাশন প্রক্রিয়াতে ব্যবহার করার জন্য সিপিইউ কোরের সংখ্যা। ডিফল্ট সেটিংটি হ'ল আপনার সিপিইউ কোর, যা বেশিরভাগ ক্ষেত্রে প্রস্তাবিত।",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "আপনার নিজের প্রশিক্ষণের সময় প্রিপ্রশিক্ষিত মডেলগুলি ব্যবহার করুন। এই পদ্ধতির প্রশিক্ষণের সময়কাল হ্রাস করে এবং সামগ্রিক মান বাড়ায়।",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "হাইফেন (-) দ্বারা পৃথক করে আপনি এক্সট্রাক্ট করার জন্য কতগুলি জিপিইউ ব্যবহার করতে চান তা নির্দিষ্ট করুন।",
+ "Overtraining Detector": "ওভারট্রেনিং ডিটেক্টর",
+ "Overtraining Threshold": "ওভারট্রেনিং থ্রেশহোল্ড",
+ "Fresh Training": "নতুন করে প্রশিক্ষণ",
+ "Overtraining Detector Settings": "ওভারট্রেনিং ডিটেক্টর সেটিংস",
+ "Start Training": "প্রশিক্ষণ শুরু করুন",
+ "Stop Training": "প্রশিক্ষণ বন্ধ করুন",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "আমরা দ্রুত পারফরম্যান্সের জন্য জিপিইউতে মডেল এক্সট্রাকশন চালানোর অগ্রাধিকার দিই। আপনি যদি সিপিইউ ব্যবহার করতে পছন্দ করেন তবে কেবল জিপিইউ ক্ষেত্রটি ফাঁকা রেখে দিন।",
+ "Cache the dataset in GPU memory to speed up the training process.": "প্রশিক্ষণ প্রক্রিয়াটি গতি বাড়ানোর জন্য জিপিইউ মেমরিতে ডেটাসেটটি ক্যাশে করুন।",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "আমরা দ্রুত পারফরম্যান্সের জন্য জিপিইউতে মডেল প্রিপ্রসেসিং চালানোর অগ্রাধিকার দিই। আপনি যদি সিপিইউ ব্যবহার করতে পছন্দ করেন তবে কেবল জিপিইউ ক্ষেত্রটি ফাঁকা রেখে দিন।",
+ "Generate Index": "সূচী তৈরি করুন",
+ "Export Model": "রপ্তানি মডেল",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "কেমিয়ানস একটি ক্লাস্টারিং অ্যালগরিদম যা ডেটাসেটকে কে ক্লাস্টারে বিভক্ত করে। এই সেটিংটি বড় ডেটাসেটগুলির জন্য বিশেষভাবে কার্যকর।",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "পিচ গাইডেন্স নিয়োগ করে, এর পিচ সহ মূল ভয়েসের স্বরভঙ্গিটি মিরর করা সম্ভব হয়। এই বৈশিষ্ট্যটি গাওয়া এবং অন্যান্য পরিস্থিতিতে বিশেষত মূল্যবান যেখানে মূল সুর বা পিচ প্যাটার্ন সংরক্ষণ করা অপরিহার্য।",
+ "Upload": "আপলোড",
+ "Refresh": "সতেজ",
+ "Exported Pth file": "Pth ফাইল রপ্তানি করা হয়েছে",
+ "Voice Model": "ভয়েস মডেল",
+ "Exported Index file": "রপ্তানিকৃত সূচী ফাইল",
+ "Index File": "সূচী ফাইল",
+ "Unload Voice": "ভয়েস আনলোড করুন",
+ "Single": "একক",
+ "Select the index file to be exported": "রপ্তানী করার জন্য সূচী ফাইলটি নির্বাচন করুন",
+ "Select the pth file to be exported": "রপ্তানী করার জন্য pth ফাইলটি চয়ন করো",
+ "Upload Audio": "অডিও আপলোড করুন",
+ "Select Audio": "অডিও নির্বাচন করুন",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "কোনও উন্নতি শনাক্ত না হলে আপনার মডেলটি প্রশিক্ষণ বন্ধ করতে চান এমন সর্বাধিক সংখ্যক যুগ সেট করুন।",
+ "Advanced Settings": "উন্নত সেটিংস",
+ "Select the voice model to use for the conversion.": "রূপান্তরটির জন্য ব্যবহার করতে ভয়েস মডেলটি নির্বাচন করুন।",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "যদি আপনি স্ক্র্যাচ থেকে কোনও নতুন মডেলকে প্রশিক্ষণ দেন বা প্রশিক্ষণটি পুনরায় শুরু করেন তবেই এই সেটিংটি সক্ষম করুন। পূর্বে উত্পন্ন সমস্ত ওজন এবং টেনসরবোর্ড লগগুলি মুছে ফেলে।",
+ "Select the index file to use for the conversion.": "রূপান্তরটির জন্য ব্যবহার করতে সূচী ফাইলটি নির্বাচন করুন।",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "মডেলটিকে প্রশিক্ষণের ডেটা খুব ভালভাবে শিখতে এবং নতুন ডেটাতে সাধারণীকরণের ক্ষমতা হারাতে বাধা দেওয়ার জন্য ওভারট্রেনিং সনাক্ত করুন।",
+ "Output Path": "আউটপুট পাথ",
+ "Export Format": "রপ্তানি বিন্যাস",
+ "Custom Output Path": "কাস্টম আউটপুট পাথ",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "'আপলোড' বোতামটি কেবল গুগল কোলাবের জন্য: আপনার গুগল ড্রাইভে অ্যাপ্লিওএক্সপোর্ট ফোল্ডারে রফতানি করা ফাইলগুলি আপলোড করে।",
+ "Select the audio to convert.": "রূপান্তর করতে অডিও নির্বাচন করুন।",
+ "Split Audio": "অডিও বিভক্ত করুন",
+ "Autotune": "অটোটিউন",
+ "Clear Outputs (Deletes all audios in assets/audios)": "আউটপুট সাফ করুন (সম্পদ / অডিওতে সমস্ত অডিও মুছে ফেলে)",
+ "Clean Audio": "পরিষ্কার অডিও",
+ "Select the format to export the audio.": "অডিও রফতানি করতে ফর্ম্যাটটি চয়ন করো।",
+ "Upscale Audio": "আপস্কেল অডিও",
+ "Clean Strength": "পরিষ্কার শক্তি",
+ "Formant Shifting": "ফর্ম্যান্ট শিফটিং",
+ "Pitch": "পিচ",
+ "Default value is 1.0": "ডিফল্ট মান হল 1.0",
+ "Browse presets for formanting": "গঠনের জন্য প্রিসেটগুলি ব্রাউজ করুন",
+ "Filter Radius": "ফিল্টার ব্যাসার্ধ",
+ "Presets are located in /assets/formant_shift folder": "প্রিসেটগুলি /assets/formant_shift ফোল্ডারে অবস্থিত",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "পাথ যেখানে আউটপুট অডিও সংরক্ষণ করা হবে, সম্পদ / অডিও / output.wav ডিফল্টরূপে",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "আপনার অনুমানগুলিতে একটি নরম অটোটিউন প্রয়োগ করুন, রূপান্তরগুলি গাওয়ার জন্য প্রস্তাবিত।",
+ "Timbre for formant shifting": "ফর্ম্যান্ট শিফটিংয়ের জন্য টিম্বার",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "কিছু ক্ষেত্রে আরও ভাল ফলাফল পেতে অনুমানের জন্য অডিওটিকে খণ্ডগুলিতে বিভক্ত করুন।",
+ "Quefrency for formant shifting": "ফর্ম্যান্ট শিফটিং জন্য কোয়েফ্রেনসি",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "ফর্ম্যান্ট শিফটিং সক্ষম করুন। পুরুষ থেকে মহিলা এবং তদ্বিপরীত রূপান্তরের জন্য ব্যবহৃত হয়।",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "অডিও বলার জন্য প্রস্তাবিত কোলাহল শনাক্তকরণ অ্যালগরিদমগুলি ব্যবহার করে আপনার অডিও আউটপুট পরিষ্কার করুন।",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "নিম্ন-মানের অডিওগুলির জন্য প্রস্তাবিত অডিওটিকে একটি উচ্চতর গুণমানে আপস্কেল করুন। (অডিও প্রক্রিয়া করতে আরও বেশি সময় লাগতে পারে)",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "অডিওর পিচ সেট করুন, মান যত বেশি, পিচ তত বেশি।",
+ "Volume Envelope": "ভলিউম খাম",
+ "Batch": "ব্যাচ",
+ "Convert": "রূপান্তর",
+ "Search Feature Ratio": "অনুসন্ধান বৈশিষ্ট্য অনুপাত",
+ "Export Audio": "অডিও রপ্তানি করুন",
+ "Input Folder": "ইনপুট ফোল্ডার",
+ "Output Folder": "আউটপুট ফোল্ডার",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "আপনি যে অডিওটি চান তাতে ক্লিন-আপ স্তরটি সেট করুন, আপনি এটি যত বাড়াবেন তত বেশি এটি পরিষ্কার হবে, তবে এটি সম্ভব যে অডিওটি আরও সংকুচিত হবে।",
+ "Protect Voiceless Consonants": "কণ্ঠহীন ব্যঞ্জনবর্ণ রক্ষা করুন",
+ "Pitch extraction algorithm": "পিচ নিষ্কাশন অ্যালগরিদম",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "আউটপুটের ভলিউম খামের সাথে বিকল্প বা মিশ্রণ করুন। অনুপাতটি 1 এর কাছাকাছি হয়, তত বেশি আউটপুট খাম নিযুক্ত করা হয়।",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "ইনডেক্স ফাইল দ্বারা প্রভাবিত; একটি উচ্চতর মান বৃহত্তর প্রভাবের সাথে মিলে যায়। তবে, নিম্ন মানগুলি বেছে নেওয়া অডিওতে উপস্থিত নিদর্শনগুলি প্রশমিত করতে সহায়তা করতে পারে।",
+ "Enter output path": "আউটপুট পথ লিখুন",
+ "Enter input path": "ইনপুট পথ লিখুন",
+ "Get information about the audio": "অডিও সম্পর্কে তথ্য পান",
+ "## Voice Blender": "## ভয়েস ব্লেন্ডার",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "অডিও রূপান্তর জন্য ব্যবহার করতে পিচ নিষ্কাশন অ্যালগরিদম. ডিফল্ট অ্যালগরিদমটি আরএমভিপিই, যা বেশিরভাগ ক্ষেত্রে প্রস্তাবিত।",
+ "Select the folder containing the audios to convert.": "রূপান্তর করতে অডিওযুক্ত ফোল্ডারটি নির্বাচন করুন।",
+ "Blend Ratio": "ব্লেন্ড রেশিও",
+ "Voice Blender": "ভয়েস ব্লেন্ডার",
+ "Fusion": "ফিউশন",
+ "Drag and drop your model here": "আপনার মডেলটি এখানে টেনে এনে ছেড়ে দিন",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "যদি সংখ্যাটি তিনটির চেয়ে বেশি বা সমান হয় তবে সংগৃহীত স্বন ফলাফলগুলিতে মধ্যমা ফিল্টারিং নিয়োগ করা শ্বাসকষ্ট হ্রাস করার সম্ভাবনা রয়েছে।",
+ "You can also use a custom path.": "আপনি একটি কাস্টম পাথও ব্যবহার করতে পারেন।",
+ "View": "দর্শন",
+ "Path to Model": "মডেলের পথ",
+ "Select the folder where the output audios will be saved.": "ফোল্ডারটি নির্বাচন করুন যেখানে আউটপুট অডিওগুলি সংরক্ষণ করা হবে।",
+ "Enter path to model": "মডেলের পথ লিখুন",
+ "Model information to be placed": "মডেল তথ্য স্থাপন করা হবে",
+ "Inroduce the model information": "মডেলের তথ্য ইনরোডিউস করুন",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "ইলেক্ট্রো-অ্যাকোস্টিক ছিঁড়ে যাওয়া এবং অন্যান্য নিদর্শনগুলি রোধ করতে স্বতন্ত্র ব্যঞ্জনবর্ণ এবং শ্বাস প্রশ্বাসের শব্দগুলি রক্ষা করুন। প্যারামিটারটিকে তার সর্বোচ্চ মান 0.5 এ টানলে ব্যাপক সুরক্ষা সরবরাহ করে। যাইহোক, এই মান হ্রাস করা সম্ভাব্যভাবে সূচক প্রভাব প্রশমিত করার সময় সুরক্ষার পরিমাণ হ্রাস করতে পারে।",
+ "Model extraction": "মডেল নিষ্কাশন",
+ "Pth file": "Pth ফাইল",
+ "Model conversion": "মডেল রূপান্তর",
+ "View model information": "মডেল তথ্য দেখুন",
+ "Introduce the model pth path": "মডেল পিটিএইচ পাথ পরিচয় করিয়ে দিন",
+ "Output of the pth file": "পিটিএইচ ফাইলের আউটপুট",
+ "Extract F0 Curve": "এক্সট্রাক্ট F0 কার্ভ",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "দুটি ভয়েস মডেল নির্বাচন করুন, আপনার পছন্দসই মিশ্রণের শতাংশ সেট করুন এবং এগুলি সম্পূর্ণ নতুন ভয়েসে মিশ্রিত করুন।",
+ "Record": "রেকর্ড",
+ "Record Screen": "রেকর্ড স্ক্রিন",
+ "The information to be placed in the model (You can leave it blank or put anything).": "মডেলটিতে যে তথ্য রাখতে হবে (আপনি এটি ফাঁকা রেখে দিতে পারেন বা কিছু রাখতে পারেন)।",
+ "Stop Recording": "রেকর্ডিং বন্ধ করুন",
+ "# How to Report an Issue on GitHub": "# গিটহাবে একটি সমস্যা কিভাবে রিপোর্ট করবেন",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "৩. [GitHub Issues](https://github.com/IAHispano/Applio/issues) এ যান এবং 'New Issue' বাটনে ক্লিক করুন।",
+ "## Download Model": "## মডেল ডাউনলোড করুন",
+ "Model Link": "মডেল লিংক",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "একপাশে বা অন্যদিকে অবস্থানটি আরও সামঞ্জস্য করা মডেলটিকে প্রথম বা দ্বিতীয়টির সাথে আরও অনুরূপ করে তুলবে।",
+ "Introduce the model .pth path": "মডেল .pth পাথ পরিচয় করিয়ে দিন",
+ "See Model Information": "মডেল তথ্য দেখুন",
+ "Download Model": "মডেল ডাউনলোড করুন",
+ "## Drop files": "## ফাইল ড্রপ করুন",
+ "Search": "সন্ধান",
+ "## Search Model": "## সার্চ মডেল",
+ "Introduce the model link": "মডেল লিঙ্কটি পরিচয় করিয়ে দিন",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. আপনি যে সমস্যার সম্মুখীন হচ্ছেন তা রেকর্ড করা শুরু করতে নীচের 'রেকর্ড স্ক্রিন' বোতামে ক্লিক করুন।",
+ "## Download Pretrained Models": "## প্রিট্রেনড মডেল ডাউনলোড করুন",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "আপনার .pth ফাইল এবং .index ফাইলটি এই স্পেসে টেনে আনুন। একটা টেনে আনুন, তারপর অন্যটা।",
+ "TTS Speed": "TTS গতি",
+ "Select the pretrained model you want to download.": "আপনি যে প্রিট্রেনড মডেলটি ডাউনলোড করতে চান তা নির্বাচন করুন।",
+ "We couldn't find models by that name.": "এই নামে মডেল খুঁজে পাওয়া যায়নি।",
+ "TTS Voices": "টিটিএস ভয়েসেস",
+ "And select the sampling rate": "এবং নমুনা হার নির্বাচন করুন।",
+ "Introduce the model name to search.": "অনুসন্ধানে মডেলের নামটি পরিচয় করিয়ে দিন।",
+ "Increase or decrease TTS speed.": "TTS গতি বাড়ান বা কমান।",
+ "Upload a .txt file": "একটি .txt ফাইল আপলোড করুন",
+ "Text to Synthesize": "সংশ্লেষণ করার জন্য পাঠ্য",
+ "Input path for text file": "পাঠ্য ফাইলের জন্য ইনপুট পথ",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "এফ 0 বক্ররেখা সময়ের সাথে সাথে একটি ভয়েসের বেস ফ্রিকোয়েন্সির বিভিন্নতার প্রতিনিধিত্ব করে, পিচ কীভাবে উত্থান ও পতন হয় তা দেখায়।",
+ "Enter text to synthesize": "সংশ্লেষ করতে পাঠ্য লিখুন",
+ "Enter the text to synthesize.": "সংশ্লেষ করতে পাঠ্যটি প্রবেশ করান।",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. একবার আপনি সমস্যাটি রেকর্ড করা শেষ করার পরে, 'রেকর্ডিং বন্ধ করুন' বোতামে ক্লিক করুন (একই বোতাম, তবে আপনি সক্রিয়ভাবে রেকর্ড করছেন কিনা তার উপর নির্ভর করে লেবেলটি পরিবর্তিত হয়)।",
+ "Select the TTS voice to use for the conversion.": "রূপান্তরটির জন্য ব্যবহার করতে TTS ভয়েস নির্বাচন করুন।",
+ "Output Path for RVC Audio": "আরভিসি অডিওর জন্য আউটপুট পাথ",
+ "Output Path for TTS Audio": "TTS অডিওর জন্য আউটপুট পাথ",
+ "Enable fake GPU": "জাল GPU সক্ষম করুন",
+ "Theme": "থীম",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. প্রদত্ত ইস্যু টেমপ্লেটটি সম্পূর্ণ করুন, প্রয়োজন অনুসারে বিশদ অন্তর্ভুক্ত করা নিশ্চিত করুন এবং পূর্ববর্তী পদক্ষেপ থেকে রেকর্ড করা ফাইলটি আপলোড করতে সম্পদ বিভাগটি ব্যবহার করুন।",
+ "The path to the text file that contains content for text to speech.": "পাঠ্য ফাইলের পথ যা পাঠ্য থেকে বক্তৃতার জন্য সামগ্রী ধারণ করে।",
+ "Language": "ভাষা",
+ "Restart Applio": "Applio পুনঃশুরু করুন",
+ "Enable Applio integration with applio.org/models using flask": "ফ্লাস্ক ব্যবহার করে applio.org/models সাথে অ্যাপলিও ইন্টিগ্রেশন সক্ষম করুন",
+ "Enable Applio integration with Discord presence": "ডিসকর্ড উপস্থিতি সহ অ্যাপলিও ইন্টিগ্রেশন সক্ষম করুন",
+ "Precision": "যথার্থতা",
+ "Select the theme you want to use. (Requires restarting Applio)": "আপনি যে থিমটি ব্যবহার করতে চান তা নির্বাচন করুন। (অ্যাপলিও পুনরায় চালু করা প্রয়োজন)",
+ "Plugin Installer": "প্লাগইন ইনস্টলার",
+ "Select the language you want to use. (Requires restarting Applio)": "আপনি যে ভাষাটি ব্যবহার করতে চান তা নির্বাচন করুন। (অ্যাপলিও পুনরায় চালু করা প্রয়োজন)",
+ "It will activate the possibility of downloading models with a click from the website.": "এটি ওয়েবসাইট থেকে একটি ক্লিকের সাথে মডেলগুলি ডাউনলোড করার সম্ভাবনা সক্রিয় করবে।",
+ "Update precision": "যথার্থতা আপডেট করুন",
+ "Version Checker": "সংস্করণ পরীক্ষক",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "জিপিইউ না থাকার কারণে প্রশিক্ষণ বর্তমানে অসমর্থিত। প্রশিক্ষণ ট্যাবটি সক্রিয় করতে, সেটিংস ট্যাবে নেভিগেট করুন এবং 'ফেক জিপিইউ' বিকল্পটি সক্ষম করুন।",
+ "Check for updates": "আপডেটের জন্য পরীক্ষা করুন",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "এটি ডিসকর্ডে বর্তমান অ্যাপলিও ক্রিয়াকলাপ প্রদর্শনের সম্ভাবনা সক্রিয় করবে।",
+ "Post-Process": "পোস্ট-প্রসেস",
+ "Reverb": "রিভারব",
+ "Drag your plugin.zip to install it": "এটি ইনস্টল করতে আপনার plugin.zip টেনে আনুন",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "ট্রেন ট্যাবটি সক্রিয় করে। তবে, দয়া করে নোট করুন যে এই ডিভাইসটিতে জিপিইউ ক্ষমতার অভাব রয়েছে, তাই প্রশিক্ষণ সমর্থিত নয়। এই বিকল্পটি শুধুমাত্র পরীক্ষার উদ্দেশ্যে। (এই বিকল্পটি অ্যাপলিও পুনরায় চালু করবে)",
+ "Select the precision you want to use for training and inference.": "প্রশিক্ষণ এবং অনুমানের জন্য আপনি যে নির্ভুলতা ব্যবহার করতে চান তা নির্বাচন করুন।",
+ "Post-process the audio to apply effects to the output.": "আউটপুটে প্রভাব প্রয়োগ করতে অডিওটি পোস্ট-প্রসেস করুন।",
+ "Reverb Room Size": "রিভারব রুমের আকার",
+ "Apply reverb to the audio.": "অডিওতে রিভার্ব প্রয়োগ করুন।",
+ "Reverb Damping": "রিভারব ড্যাম্পিং",
+ "Set the room size of the reverb.": "রিভার্বের ঘরের আকার সেট করুন।",
+ "Reverb Wet Gain": "রিভারব ওয়েট গেইন",
+ "Set the wet gain of the reverb.": "রিভার্বের ভেজা লাভ সেট করুন।",
+ "Reverb Width": "রিভার্ব প্রস্থ",
+ "Check which version of Applio is the latest to see if you need to update.": "আপনার আপডেট করার প্রয়োজন আছে কিনা তা দেখতে অ্যাপলিওর কোন সংস্করণটি সর্বশেষতম তা পরীক্ষা করে দেখুন।",
+ "Set the damping of the reverb.": "রিভারবের স্যাঁতসেঁতে সেট করুন।",
+ "Set the width of the reverb.": "রিভার্বের প্রস্থ সেট করুন।",
+ "Reverb Dry Gain": "রিভারব ড্রাই গেইন",
+ "Set the dry gain of the reverb.": "রিভারবের শুকনো লাভ সেট করুন।",
+ "Reverb Freeze Mode": "রিভার্ব ফ্রিজ মোড",
+ "Limiter": "লিমিটার",
+ "Set the freeze mode of the reverb.": "রিভারবের ফ্রিজ মোড সেট করুন।",
+ "Pitch Shift": "পিচ শিফট",
+ "Gain": "মুনাফা",
+ "Pitch Shift Semitones": "পিচ শিফট সেমিটোন",
+ "Apply pitch shift to the audio.": "অডিওতে পিচ শিফট প্রয়োগ করুন।",
+ "Limiter Release Time": "লিমিটার রিলিজ টাইম",
+ "Apply limiter to the audio.": "অডিওতে লিমিটার প্রয়োগ করুন।",
+ "Set the gain dB.": "লাভ ডিবি সেট করুন।",
+ "Limiter Threshold dB": "লিমিটার থ্রেশহোল্ড ডিবি",
+ "Apply gain to the audio.": "অডিওতে লাভ প্রয়োগ করুন।",
+ "Set the limiter threshold dB.": "লিমিটার থ্রেশহোল্ড ডিবি সেট করুন।",
+ "Set the limiter release time.": "লিমিটার রিলিজের সময় সেট করুন।",
+ "Gain dB": "ডিবি লাভ করুন",
+ "Apply distortion to the audio.": "অডিওতে বিকৃতি প্রয়োগ করুন।",
+ "Distortion Gain": "বিকৃতি লাভ",
+ "Chorus": "কোরাস",
+ "Set the distortion gain.": "বিকৃতি লাভ সেট করুন।",
+ "Distortion": "বিকৃতি",
+ "Chorus Rate Hz": "কোরাস রেট Hz",
+ "Apply chorus to the audio.": "অডিওতে কোরাস প্রয়োগ করুন।",
+ "Chorus Depth": "কোরাস গভীরতা",
+ "Set the chorus rate Hz.": "কোরাস রেট Hz সেট করুন।",
+ "Set the chorus depth.": "কোরাস গভীরতা সেট করুন।",
+ "Chorus Mix": "কোরাস মিক্স",
+ "Bitcrush": "বিটক্রাশ",
+ "Chorus Feedback": "কোরাস ফিডব্যাক",
+ "Chorus Center Delay ms": "কোরাস সেন্টার বিলম্ব এমএস",
+ "Set the chorus center delay ms.": "কোরাস কেন্দ্র বিলম্ব এমএস সেট করুন।",
+ "Set the chorus mix.": "কোরাস মিশ্রণ সেট করুন।",
+ "Apply bitcrush to the audio.": "অডিওতে বিটক্রাশ প্রয়োগ করুন।",
+ "Set the chorus feedback.": "কোরাস প্রতিক্রিয়া সেট করুন।",
+ "Clipping": "ক্লিপিং",
+ "Bitcrush Bit Depth": "বিটক্রাশ বিট গভীরতা",
+ "Compressor": "কম্প্রেসার",
+ "Clipping Threshold": "ক্লিপিং থ্রেশহোল্ড",
+ "Apply clipping to the audio.": "অডিওতে ক্লিপিং প্রয়োগ করুন।",
+ "Set the bitcrush bit depth.": "বিটক্রাশ বিট গভীরতা সেট করুন।",
+ "Set the clipping threshold.": "ক্লিপিং থ্রেশহোল্ড সেট করুন।",
+ "Set the pitch shift semitones.": "পিচ শিফট সেমিটোন সেট করুন।",
+ "Compressor Ratio": "কম্প্রেসর অনুপাত",
+ "Delay": "বিলম্ব",
+ "Compressor Attack ms": "কম্প্রেসার অ্যাটাক এমএস",
+ "Apply compressor to the audio.": "অডিওতে সংকোচকারী প্রয়োগ করুন।",
+ "Compressor Threshold dB": "কম্প্রেসার থ্রেশহোল্ড ডিবি",
+ "Set the compressor ratio.": "সংকোচকারী অনুপাত সেট করুন।",
+ "Set the compressor threshold dB.": "সংকোচকারী থ্রেশহোল্ড ডিবি সেট করুন।",
+ "Compressor Release ms": "কম্প্রেসার রিলিজ এমএস",
+ "Set the compressor release ms.": "সংকোচকারী রিলিজ এমএস সেট করুন।",
+ "Set the compressor attack ms.": "সংকোচকারী আক্রমণ এমএস সেট করুন।",
+ "Delay Seconds": "সেকেন্ড বিলম্ব করুন",
+ "Set the delay seconds.": "বিলম্ব সেকেন্ড সেট করুন।",
+ "model information": "মডেল তথ্য",
+ "Delay Feedback": "বিলম্বিত প্রতিক্রিয়া",
+ "Apply delay to the audio.": "অডিওতে বিলম্ব প্রয়োগ করুন।",
+ "Upload .bin": ".bin আপলোড করুন",
+ "Set the delay feedback.": "বিলম্ব প্রতিক্রিয়া সেট করুন।",
+ "Set the delay mix.": "বিলম্ব মিশ্রণ সেট করুন।",
+ "Folder Name": "ফোল্ডারের নাম",
+ "Custom Embedder": "কাস্টম এম্বেডার",
+ "Upload .json": ".json আপলোড করুন",
+ "Select Custom Embedder": "কাস্টম এম্বেডার নির্বাচন করুন",
+ "Model Creator": "মডেল ক্রিয়েটর",
+ "Delay Mix": "বিলম্ব মিশ্রণ",
+ "Speaker ID": "স্পিকার ID",
+ "Refresh embedders": "রিফ্রেশ এম্বেডার",
+ "Name of the model creator. (Default: Unknown)": "মডেল নির্মাতার নাম। (ডিফল্ট: অজানা)",
+ "Move files to custom embedder folder": "কাস্টম এম্বেডার ফোল্ডারে ফাইলগুলি সরান",
+ "Set name": "নাম সেট করুন",
+ "Model Author Name": "মডেল লেখকের নাম",
+ "The name that will appear in the model information.": "মডেল তথ্যে যে নামটি উপস্থিত হবে।",
+ "Select the speaker ID to use for the conversion.": "রূপান্তরটির জন্য ব্যবহার করতে স্পিকার ID চয়ন করো।",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "অটোটিউন শক্তি সেট করুন - আপনি এটি যত বাড়াবেন তত বেশি এটি ক্রোম্যাটিক গ্রিডে স্ন্যাপ করবে।"
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/bs_BS.json b/assets/i18n/languages/bs_BS.json
new file mode 100644
index 0000000000000000000000000000000000000000..15bfd76bffb8dbed879ba052ccbd01414b6e8ad2
--- /dev/null
+++ b/assets/i18n/languages/bs_BS.json
@@ -0,0 +1,325 @@
+{
+ "Training": "Obuka",
+ "Extra": "Ekstra",
+ "Processing": "Obrada",
+ "Inference": "Zaključak",
+ "Output Information": "Izlazne informacije",
+ "The output information will be displayed here.": "Izlazne informacije će biti prikazane ovdje.",
+ "Merge Audios": "Spajanje audio zapisa",
+ "Settings": "Postavke",
+ "Download": "Preuzimanje",
+ "Plugins": "Dodaci",
+ "This section contains some extra utilities that often may be in experimental phases.": "Ovaj odjeljak sadrži neke dodatne uslužne programe koji često mogu biti u eksperimentalnim fazama.",
+ "Model Information": "Informacije o modelu",
+ "Audio Analyzer": "Audio analizator",
+ "Preprocess": "Predproces",
+ "Report a Bug": "Prijavi grešku",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "Jednostavan, kvalitetan alat za konverziju glasa fokusiran na jednostavnost korištenja i performanse.",
+ "Audio cutting": "Rezanje zvuka",
+ "Process effects": "Efekti procesa",
+ "Enter model name": "Unesite ime modela",
+ "Name of the new model.": "Ime novog modela.",
+ "Dataset Path": "Put skupa podataka",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "Preporučuje se da deaktivirate ovu opciju ako je vaš skup podataka već obrađen.",
+ "Path to the dataset folder.": "Put do foldera skupa podataka.",
+ "Dataset Creator": "Kreator skupa podataka",
+ "Name of the new dataset.": "Ime novog skupa podataka.",
+ "Enter dataset name": "Unesite ime skupa podataka",
+ "Refresh Datasets": "Osvježavanje skupova podataka",
+ "Dataset Name": "Naziv skupa podataka",
+ "Upload Audio Dataset": "Upload Audio Dataset",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Audio datoteka je uspješno dodana u skup podataka. Molimo kliknite na dugme za predobradu.",
+ "Enter dataset path": "Unesite putanju skupa podataka",
+ "Model Name": "Ime modela",
+ "Sampling Rate": "Brzina uzorkovanja",
+ "Model Architecture": "Arhitektura modela",
+ "Extract": "Izdvoji",
+ "Version of the model architecture.": "Verzija arhitekture modela.",
+ "Preprocess Dataset": "Skup podataka prije obrade",
+ "Embedder Model": "Embedder Model",
+ "Batch Size": "Veličina serije",
+ "The sampling rate of the audio files.": "Brzina uzorkovanja audio datoteka.",
+ "Model used for learning speaker embedding.": "Model koji se koristi za učenje ugradnje govornika.",
+ "Save Every Epoch": "Spasite svaku epohu",
+ "Total Epoch": "Totalna epoha",
+ "Hop Length": "Dužina skoka",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Označava trajanje koje je potrebno da sistem pređe na značajnu promjenu visine tona. Manje dužine skoka zahtijevaju više vremena za zaključivanje, ali imaju tendenciju da daju veću preciznost visine.",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Preporučljivo je da ga uskladite sa dostupnim VRAM-om vašeg GPU-a. Postavka 4 nudi poboljšanu preciznost, ali sporiju obradu, dok 8 pruža brže i standardne rezultate.",
+ "Determine at how many epochs the model will saved at.": "Odredite u koliko epoha će model biti sačuvan.",
+ "Pretrained": "Unaprijed obučeni",
+ "Specifies the overall quantity of epochs for the model training process.": "Specificira ukupnu količinu epoha za proces obuke modela.",
+ "Save Every Weights": "Sačuvaj svaku težinu",
+ "Save Only Latest": "Sačuvaj samo najnovije",
+ "Custom Pretrained": "Prilagođeni unaprijed obučeni",
+ "Upload Pretrained Model": "Upload unaprijed obučeni model",
+ "Pretrained Custom Settings": "Unaprijed obučene prilagođene postavke",
+ "Refresh Custom Pretraineds": "Osvježite prilagođene unaprijed obučene",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Omogućavanje ove postavke će rezultirati u G i D datotekama koje će sačuvati samo svoje najnovije verzije, efikasno štedeći prostor za pohranu.",
+ "GPU Settings": "Postavke GPU-a",
+ "Pretrained G Path": "Prilagođeni unaprijed obučeni G",
+ "Pretrained D Path": "Prilagođeni unaprijed obučeni D",
+ "The file you dropped is not a valid pretrained file. Please try again.": "Datoteka koju ste ispustili nije valjana unaprijed obučena datoteka. Molim te, pokušaj ponovo.",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Korištenje prilagođenih unaprijed obučenih modela može dovesti do superiornih rezultata, jer odabir najprikladnijih unaprijed obučenih modela prilagođenih specifičnom slučaju upotrebe može značajno poboljšati performanse.",
+ "GPU Custom Settings": "GPU prilagođene postavke",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Kliknite na dugme za osvježavanje da biste vidjeli unaprijed obučenu datoteku u padajućem meniju.",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Postavlja napredne GPU postavke, preporučene za korisnike sa boljom GPU arhitekturom.",
+ "GPU Number": "GPU broj",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Ova postavka vam omogućava da sačuvate težinu modela na kraju svake epohe.",
+ "0 to ∞ separated by -": "0 do ∞ razdvojeno sa -",
+ "The GPU information will be displayed here.": "Informacije o GPU-u će biti prikazane ovdje.",
+ "Pitch Guidance": "Pitch Guidance",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "Broj CPU jezgri koje će se koristiti u predprocesu. Podrazumevana postavka su vaše CPU jezgre, što se preporučuje za većinu slučajeva.",
+ "GPU Information": "Informacije o GPU-u",
+ "Use CPU": "Koristite CPU",
+ "Force the use of CPU for training.": "Prisiliti korištenje CPU-a za obuku.",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Navedite broj GPU-a koje želite koristiti za izdvajanje tako što ćete ih unijeti odvojene crticama (-).",
+ "Extract Features": "Značajke izvlačenja",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "Broj CPU jezgara koje se koriste u procesu ekstrakcije. Podrazumevana postavka su vaše CPU jezgre, što se preporučuje za većinu slučajeva.",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Koristite unaprijed obučene modele kada trenirate svoje. Ovaj pristup smanjuje trajanje treninga i poboljšava ukupni kvalitet.",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Navedite broj GPU-a koje želite koristiti za predprocesiranje tako što ćete ih unijeti odvojene crticama (-). U ovom trenutku, korištenje multi-gpu-a neće imati značajan učinak.",
+ "Cache Dataset in GPU": "Cache skup podataka u GPU-u",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Prioritet nam je pokretanje ekstrakcije modela na GPU-u za brže performanse. Ako više volite da koristite CPU, jednostavno ostavite polje GPU-a prazno.",
+ "Index Algorithm": "Algoritam indeksa",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Prioritet nam je pokretanje predobrade modela na GPU-u za brže performanse. Ako više volite da koristite CPU, jednostavno ostavite polje GPU-a prazno.",
+ "Overtraining Detector": "Detektor pretreniranosti",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Korištenjem navođenja visine tona, postaje izvodljivo zrcaliti intonaciju originalnog glasa, uključujući i njegovu visinu. Ova karakteristika je posebno vrijedna za pjevanje i druge scenarije gdje je očuvanje originalne melodije ili obrasca visine tona bitno.",
+ "Overtraining Detector Settings": "Postavke detektora pretreniranosti",
+ "Cache the dataset in GPU memory to speed up the training process.": "Spremite skup podataka u GPU memoriju kako biste ubrzali proces obuke.",
+ "Overtraining Threshold": "Prag pretreniranosti",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans je algoritam klasteriranja koji dijeli skup podataka u K klastera. Ova postavka je posebno korisna za velike skupove podataka.",
+ "Stop Training": "Prestani trenirati",
+ "Start Training": "Počni trenirati",
+ "Generate Index": "Generiraj indeks",
+ "Fresh Training": "Svježi trening",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Otkrijte pretreniranost kako biste spriječili model da previše dobro nauči podatke o obuci i izgubi sposobnost generalizacije na nove podatke.",
+ "Export Model": "Izvozni model",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "Omogućite ovu postavku samo ako trenirate novi model od nule ili ponovo pokrećete obuku. Briše sve prethodno generisane težine i dnevnike tensorboarda.",
+ "Exported Pth file": "Izvezena Pth datoteka",
+ "Upload": "Transfer",
+ "Exported Index file": "Izvezena Index datoteka",
+ "Select the pth file to be exported": "Odaberite pth datoteku za izvoz",
+ "Select the index file to be exported": "Odaberite indeksnu datoteku za izvoz",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "Dugme 'Upload' je samo za google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Podesite maksimalan broj epoha za koje želite da vaš model prestane trenirati ako se ne otkrije poboljšanje.",
+ "Voice Model": "Glasovni model",
+ "Single": "Sama",
+ "Index File": "Indeksna datoteka",
+ "Refresh": "Osvježi",
+ "Select the index file to use for the conversion.": "Odaberite datoteku indeksa koju ćete koristiti za konverziju.",
+ "Unload Voice": "Istovar Glas",
+ "Upload Audio": "Učitavanje zvuka",
+ "Select Audio": "Odaberite Audio",
+ "Select the audio to convert.": "Odaberite zvuk za konvertovanje.",
+ "Select the voice model to use for the conversion.": "Odaberite glasovni model koji ćete koristiti za konverziju.",
+ "Advanced Settings": "Napredna podešavanja",
+ "Output Path": "Izlazna putanja",
+ "Custom Output Path": "Prilagođena izlazna putanja",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Clear Outputs (Briše sve audio zapise u sredstvima/audios)",
+ "Split Audio": "Split Audio",
+ "Export Format": "Format izvoza",
+ "Autotune": "Autotune",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Podijelite zvuk na dijelove za zaključivanje kako biste dobili bolje rezultate u nekim slučajevima.",
+ "Clean Audio": "Čist zvuk",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "Put na kojem će izlazni zvuk biti sačuvan, po defaultu u assets/audios/output.wav",
+ "Clean Strength": "Čista snaga",
+ "Upscale Audio": "Vrhunski zvuk",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Primijenite meko automatsko podešavanje na svoje zaključke, preporučeno za konverzije pjevanja.",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Očistite svoj audio izlaz pomoću algoritama za detekciju buke, koji se preporučuju za govorne zvukove.",
+ "Formant Shifting": "Formant Shifting",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Povećajte zvuk na viši kvalitet, preporučuje se za audio zapise niskog kvaliteta. (Moglo bi potrajati duže za obradu zvuka)",
+ "Browse presets for formanting": "Pregledajte presetove za formiranje",
+ "Default value is 1.0": "Podrazumevana vrednost je 1.0",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Omogući premještanje formanata. Koristi se za muško u žensko i obrnuto konverzije.",
+ "Presets are located in /assets/formant_shift folder": "Presetovi se nalaze u folderu /assets/formant_shift",
+ "Pitch": "Pitch",
+ "Timbre for formant shifting": "Tembar za premještanje formanta",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Podesite nivo čišćenja na zvuk koji želite, što ga više povećavate to će se više čistiti, ali je moguće da će zvuk biti komprimiraniji.",
+ "Filter Radius": "Radijus filtera",
+ "Search Feature Ratio": "Omjer karakteristika pretraživanja",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Podesite visinu zvuka, što je veća vrijednost, to je viša visina.",
+ "Quefrency for formant shifting": "Quefrency za premještanje formanta",
+ "Volume Envelope": "Volumen Envelope",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Uticaj koji vrši indeksna datoteka; viša vrijednost odgovara većem utjecaju. Međutim, odabir nižih vrijednosti može pomoći u ublažavanju artefakata prisutnih u zvuku.",
+ "Convert": "Pretvori",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Ako je broj veći ili jednak tri, korištenje medijana filtriranja na prikupljenim rezultatima tona ima potencijal da smanji disanje.",
+ "Protect Voiceless Consonants": "Zaštitite bezvučne suglasnike",
+ "Pitch extraction algorithm": "Algoritam za ekstrakciju visine tona",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Zamijenite ili pomiješajte sa omotnicom volumena izlaza. Što je omjer bliži 1, to se više koristi izlazna omotnica.",
+ "Batch": "Serija",
+ "Export Audio": "Izvoz zvuka",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Algoritam za ekstrakciju visine tona koji se koristi za audio konverziju. Zadani algoritam je rmvpe, koji se preporučuje za većinu slučajeva.",
+ "Enter input path": "Unesite ulaznu putanju",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Zaštitite različite suglasnike i zvukove disanja kako biste spriječili elektro-akustično kidanje i druge artefakte. Povlačenje parametra na maksimalnu vrijednost od 0,5 nudi sveobuhvatnu zaštitu. Međutim, smanjenje ove vrijednosti može smanjiti obim zaštite dok potencijalno ublažava efekat indeksiranja.",
+ "Output Folder": "Izlazna mapa",
+ "Select the folder containing the audios to convert.": "Odaberite folder koji sadrži audio zapise za konvertovanje.",
+ "Input Folder": "Ulazna fascikla",
+ "Enter output path": "Unesite izlaznu stazu",
+ "Select the folder where the output audios will be saved.": "Odaberite folder u koji će izlazni audio zapisi biti spremljeni.",
+ "Select the format to export the audio.": "Odaberite format za izvoz zvuka.",
+ "## Voice Blender": "## Glasovni mikser",
+ "Voice Blender": "Glasovni mikser",
+ "Get information about the audio": "Saznajte informacije o zvuku",
+ "Drag and drop your model here": "Povuci i spusti svoj model ovdje",
+ "You can also use a custom path.": "Također možete koristiti prilagođenu putanju.",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Odaberite dva modela glasa, podesite željeni postotak miješanja i uklopite ih u potpuno novi glas.",
+ "Fusion": "Fuzija",
+ "Blend Ratio": "Omjer mješavine",
+ "Path to Model": "Put do modela",
+ "Enter path to model": "Unesite put do modela",
+ "Inroduce the model information": "Uvedite informacije o modelu",
+ "Model information to be placed": "Informacije o modelu koje treba postaviti",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Prilagođavanje položaja više prema jednoj ili drugoj strani učinit će model sličnijim prvom ili drugom.",
+ "View model information": "Pogledaj informacije o modelu",
+ "The information to be placed in the model (You can leave it blank or put anything).": "Informacije koje se stavljaju u model (možete ga ostaviti prazno ili staviti bilo što).",
+ "View": "Prikaz",
+ "Model extraction": "Ekstrakcija modela",
+ "Introduce the model pth path": "Uvedite model pth putanje",
+ "Pth file": "Pth fajl",
+ "Output of the pth file": "Izlaz pth datoteke",
+ "# How to Report an Issue on GitHub": "# Kako prijaviti problem na GitHubu",
+ "Extract F0 Curve": "Izdvajanje F0 krivulje",
+ "Model conversion": "Konverzija modela",
+ "Record Screen": "Snimanje ekrana",
+ "Record": "Dosije",
+ "Stop Recording": "Zaustavite snimanje",
+ "See Model Information": "Pogledajte informacije o modelu",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Kliknite na dugme 'Snimanje ekrana' ispod da biste započeli snimanje problema koji doživljavate.",
+ "## Download Model": "## Download Model",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "F0 krivulja predstavlja varijacije u osnovnoj frekvenciji glasa tokom vremena, pokazujući kako visina visine raste i pada.",
+ "Introduce the model .pth path": "Uvedite model .pth putanje",
+ "Model Link": "Model Link",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Idite na [GitHub Issues](https://github.com/IAHispano/Applio/issues) i kliknite na dugme 'New Issue'.",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Nakon što završite sa snimanjem problema, kliknite na dugme 'Zaustavi snimanje' (isto dugme, ali oznaka se mijenja ovisno o tome da li aktivno snimate ili ne).",
+ "Introduce the model link": "Predstavite link modela",
+ "Download Model": "Preuzmite model",
+ "Search": "Tražiti",
+ "## Search Model": "## Pretraži model",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Povucite svoj .pth fajl i .index fajl u ovaj prostor. Povuci jedno, pa drugo.",
+ "Introduce the model name to search.": "Uvedite ime modela za pretragu.",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Popunite priloženi predložak problema, osiguravajući da uključite detalje po potrebi, i koristite odjeljak sredstava za učitavanje snimljene datoteke iz prethodnog koraka.",
+ "## Download Pretrained Models": "## Preuzmite unaprijed obučene modele",
+ "TTS Voices": "TTS glasovi",
+ "## Drop files": "## Baci fajlove",
+ "TTS Speed": "TTS brzina",
+ "We couldn't find models by that name.": "Nismo mogli da nađemo modele sa tim imenom.",
+ "Select the pretrained model you want to download.": "Odaberite unaprijed obučeni model koji želite preuzeti.",
+ "Increase or decrease TTS speed.": "Povećajte ili smanjite TTS brzinu.",
+ "And select the sampling rate": "I izaberi brzinu uzorkovanja.",
+ "Text to Synthesize": "Tekst za sintezu",
+ "Enter the text to synthesize.": "Unesite tekst za sintezu.",
+ "Select the TTS voice to use for the conversion.": "Odaberite TTS glas koji ćete koristiti za konverziju.",
+ "Upload a .txt file": "Učitajte .txt datoteku",
+ "Input path for text file": "Ulazna putanja za tekstualnu datoteku",
+ "Enter text to synthesize": "Unesite tekst za sintezu",
+ "Output Path for TTS Audio": "Izlazna putanja za TTS audio",
+ "The path to the text file that contains content for text to speech.": "Put do tekstualne datoteke koja sadrži sadržaj za pretvaranje teksta u govor.",
+ "Output Path for RVC Audio": "Izlazna putanja za RVC audio",
+ "Theme": "Tema",
+ "Enable fake GPU": "Omogućite lažni GPU",
+ "Enable Applio integration with Discord presence": "Omogućite Applio integraciju sa Discord prisustvom",
+ "It will activate the possibility of downloading models with a click from the website.": "Aktivirat će mogućnost preuzimanja modela jednim klikom sa web stranice.",
+ "Language": "Jezik",
+ "Restart Applio": "Ponovno pokrenite aplikaciju",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "Aktivirat će mogućnost prikazivanja trenutne Applio aktivnosti u Discordu.",
+ "Select the theme you want to use. (Requires restarting Applio)": "Odaberite temu koju želite koristiti. (Zahtijeva ponovno pokretanje Applio-a)",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Aktivira karticu voza. Međutim, imajte na umu da ovom uređaju nedostaju GPU mogućnosti, stoga obuka nije podržana. Ova opcija je samo u svrhu testiranja. (Ova opcija će ponovo pokrenuti Applio)",
+ "Enable Applio integration with applio.org/models using flask": "Omogućite Applio integraciju sa applio.org/models koristeći flask",
+ "Precision": "Preciznost",
+ "Select the language you want to use. (Requires restarting Applio)": "Odaberite jezik koji želite koristiti. (Zahtijeva ponovno pokretanje Applio-a)",
+ "Update precision": "Preciznost ažuriranja",
+ "Plugin Installer": "Plugin Installer",
+ "Select the precision you want to use for training and inference.": "Odaberite preciznost koju želite koristiti za trening i zaključivanje.",
+ "Version Checker": "Provjera verzije",
+ "Post-Process": "Post-proces",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "Obuka je trenutno nepodržana zbog nedostatka GPU-a. Da biste aktivirali karticu za obuku, idite na karticu postavki i omogućite opciju 'Lažni GPU'.",
+ "Reverb": "Odjek",
+ "Post-process the audio to apply effects to the output.": "Post-procesirajte zvuk kako biste primijenili efekte na izlaz.",
+ "Check which version of Applio is the latest to see if you need to update.": "Provjerite koja je verzija Applia najnovija da vidite da li trebate ažurirati.",
+ "Drag your plugin.zip to install it": "Povucite plugin.zip da ga instalirate",
+ "Apply reverb to the audio.": "Primijeni reverb na audio.",
+ "Reverb Room Size": "Reverb Veličina sobe",
+ "Check for updates": "Provjerite ažuriranja",
+ "Reverb Damping": "Prigušivanje odjeka",
+ "Set the room size of the reverb.": "Podesite veličinu prostorije reverba.",
+ "Set the damping of the reverb.": "Podesite prigušenje reverba.",
+ "Reverb Dry Gain": "Reverb Dry Gain",
+ "Reverb Wet Gain": "Reverb Wet Gain",
+ "Set the wet gain of the reverb.": "Podesite mokro pojačanje reverba.",
+ "Set the dry gain of the reverb.": "Podesite suhi dobitak reverba.",
+ "Reverb Width": "Širina odjeka",
+ "Reverb Freeze Mode": "Reverb Freeze Mode",
+ "Pitch Shift": "Promjena visine tona",
+ "Set the width of the reverb.": "Podesite širinu odjeka.",
+ "Set the freeze mode of the reverb.": "Podesite način zamrzavanja reverba.",
+ "Pitch Shift Semitones": "Polutonovi pomaka visine tona",
+ "Apply pitch shift to the audio.": "Primijenite pitch shift na zvuk.",
+ "Limiter": "Limiter",
+ "Limiter Threshold dB": "Prag limitera dB",
+ "Gain": "Dobiti",
+ "Set the limiter threshold dB.": "Podesite prag limitera dB.",
+ "Set the pitch shift semitones.": "Podesite polutonove za promjenu visine tona.",
+ "Limiter Release Time": "Vrijeme otpuštanja limitera",
+ "Set the limiter release time.": "Podesite vrijeme otpuštanja limitera.",
+ "Gain dB": "Dobitak dB",
+ "Apply gain to the audio.": "Primijeni pojačanje na zvuk.",
+ "Distortion": "Distorzija",
+ "Set the gain dB.": "Podesite pojačanje dB.",
+ "Distortion Gain": "Pojačanje distorzije",
+ "Set the distortion gain.": "Podesite pojačanje distorzije.",
+ "Apply distortion to the audio.": "Primijenite izobličenje na zvuk.",
+ "Apply chorus to the audio.": "Primijenite refren na zvuk.",
+ "Apply limiter to the audio.": "Primijeni limiter na zvuk.",
+ "Chorus Depth": "Dubina refrena",
+ "Chorus Rate Hz": "Brzina refrena Hz",
+ "Set the chorus rate Hz.": "Podesite brzinu refrena Hz.",
+ "Chorus Center Delay ms": "Refren Centar Kašnjenje ms",
+ "Chorus Feedback": "Refren Povratne informacije",
+ "Set the chorus center delay ms.": "Podesite refren centar kašnjenja ms.",
+ "Chorus Mix": "Refren miks",
+ "Set the chorus feedback.": "Postavite povratnu informaciju refrena.",
+ "Set the chorus mix.": "Postavi refren miks.",
+ "Bitcrush": "Bitcrush",
+ "Set the chorus depth.": "Postavite dubinu refrena.",
+ "Apply bitcrush to the audio.": "Primijeni bitcrush na zvuk.",
+ "Set the bitcrush bit depth.": "Podesite dubinu bitcrush bita.",
+ "Clipping Threshold": "Prag izrezivanja",
+ "Bitcrush Bit Depth": "Bitcrush Bit Depth",
+ "Set the clipping threshold.": "Podesite prag za rezanje.",
+ "Apply clipping to the audio.": "Primijeni isječke na zvuk.",
+ "Clipping": "Isječak",
+ "Compressor Threshold dB": "Prag kompresora dB",
+ "Compressor": "Kompresor",
+ "Apply compressor to the audio.": "Primijeni kompresor na zvuk.",
+ "Compressor Ratio": "Omjer kompresora",
+ "Set the compressor threshold dB.": "Podesite prag kompresora dB.",
+ "Set the compressor ratio.": "Podesite omjer kompresora.",
+ "Compressor Attack ms": "Compressor Attack ms",
+ "Delay": "Kašnjenja",
+ "Compressor Release ms": "Compressor Release ms",
+ "Set the compressor attack ms.": "Namjestite napad na kompresor, gđice.",
+ "Chorus": "Refren",
+ "Set the compressor release ms.": "Podesite kompresor za otpuštanje ms.",
+ "Delay Seconds": "Sekunde kašnjenja",
+ "Apply delay to the audio.": "Primijeni kašnjenje na zvuk.",
+ "Set the delay seconds.": "Podesite sekunde kašnjenja.",
+ "Delay Feedback": "Odgoda povratne informacije",
+ "Delay Mix": "Odgoda miksa",
+ "Set the delay mix.": "Podesite miks odgode.",
+ "Set the delay feedback.": "Podesite povratnu informaciju o kašnjenju.",
+ "Custom Embedder": "Custom Embedder",
+ "Select Custom Embedder": "Odaberite Custom Embedder",
+ "Refresh embedders": "Osvježite embeddere",
+ "Upload .bin": "Učitajte .bin",
+ "Folder Name": "Naziv foldera",
+ "Model Creator": "Kreator modela",
+ "Speaker ID": "ID govornika",
+ "Upload .json": "Učitajte .json",
+ "Name of the model creator. (Default: Unknown)": "Ime kreatora modela. (Default: Nepoznato)",
+ "Select the speaker ID to use for the conversion.": "Odaberite ID govornika koji ćete koristiti za konverziju.",
+ "Move files to custom embedder folder": "Premjestite datoteke u prilagođenu embedder mapu",
+ "Set name": "Postavi ime",
+ "Model Author Name": "Model Ime autora",
+ "The name that will appear in the model information.": "Ime koje će se pojaviti u informacijama o modelu.",
+ "model information": "Informacije o modelu",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "Podesite jačinu automatskog podešavanja - što je više povećate, više će se pričvrstiti na hromatsku mrežu."
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/ca_CA.json b/assets/i18n/languages/ca_CA.json
new file mode 100644
index 0000000000000000000000000000000000000000..e41ca7c1aa2fb34dc7001ea3d3d80802b1d2bc42
--- /dev/null
+++ b/assets/i18n/languages/ca_CA.json
@@ -0,0 +1,325 @@
+{
+ "Inference": "Inferència",
+ "Extra": "Extra",
+ "Processing": "Processament",
+ "Training": "Entrenament",
+ "Output Information": "Informació de sortida",
+ "Merge Audios": "Combina àudios",
+ "Audio Analyzer": "Analitzador d'àudio",
+ "Download": "Descarregar",
+ "The output information will be displayed here.": "La informació de sortida es mostrarà aquí.",
+ "Plugins": "Connectors",
+ "Settings": "Configuració",
+ "This section contains some extra utilities that often may be in experimental phases.": "Aquesta secció conté algunes utilitats addicionals que sovint poden estar en fases experimentals.",
+ "Model Information": "Informació del model",
+ "Report a Bug": "Informar d'un error",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "Una eina de conversió de veu senzilla i d'alta qualitat centrada en la facilitat d'ús i el rendiment.",
+ "Preprocess": "Preprocés",
+ "Model Name": "Nom del model",
+ "Audio cutting": "Tall d'àudio",
+ "Process effects": "Efectes del procés",
+ "Name of the new model.": "Nom del nou model.",
+ "Enter model name": "Introduïu el nom del model",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "Es recomana desactivar aquesta opció si el conjunt de dades ja s'ha processat.",
+ "Refresh Datasets": "Actualitza els conjunts de dades",
+ "Path to the dataset folder.": "Camí a la carpeta del conjunt de dades.",
+ "Dataset Name": "Nom del conjunt de dades",
+ "Dataset Path": "Camí del conjunt de dades",
+ "Dataset Creator": "Creador de conjunts de dades",
+ "Name of the new dataset.": "Nom del nou conjunt de dades.",
+ "Enter dataset name": "Introduïu el nom del conjunt de dades",
+ "Enter dataset path": "Introduïu el camí del conjunt de dades",
+ "Upload Audio Dataset": "Carrega el conjunt de dades d'àudio",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "El fitxer d'àudio s'ha afegit correctament al conjunt de dades. Si us plau, feu clic al botó de preprocessament.",
+ "Sampling Rate": "Freqüència de mostreig",
+ "Version of the model architecture.": "Versió de l'arquitectura del model.",
+ "The sampling rate of the audio files.": "La freqüència de mostreig dels fitxers d'àudio.",
+ "Extract": "Extreure",
+ "Model Architecture": "Arquitectura de models",
+ "Embedder Model": "Model d'inserció",
+ "Preprocess Dataset": "Conjunt de dades de preprocessament",
+ "Hop Length": "Longitud del llúpol",
+ "Batch Size": "Mida del lot",
+ "Model used for learning speaker embedding.": "Model utilitzat per a l'aprenentatge de la incrustació de parlants.",
+ "Save Every Epoch": "Salva cada època",
+ "Determine at how many epochs the model will saved at.": "Determineu a quantes èpoques es guardarà el model.",
+ "Total Epoch": "Època total",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "És recomanable alinear-lo amb la VRAM disponible de la vostra GPU. Una configuració de 4 ofereix una precisió millorada però un processament més lent, mentre que 8 proporciona resultats més ràpids i estàndard.",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Denota la durada que triga el sistema a fer la transició a un canvi significatiu de to. Les longituds de salt més petites requereixen més temps per a la inferència, però tendeixen a produir una major precisió de to.",
+ "Pretrained": "Preentrenat",
+ "Specifies the overall quantity of epochs for the model training process.": "Especifica la quantitat total d'èpoques per al procés d'entrenament del model.",
+ "Save Only Latest": "Desa només l'últim",
+ "Save Every Weights": "Estalvia tots els pesos",
+ "Custom Pretrained": "Preentrenat personalitzat",
+ "Upload Pretrained Model": "Carrega el model entrenat prèviament",
+ "Refresh Custom Pretraineds": "Actualitza els entrenaments personalitzats",
+ "Pretrained Custom Settings": "Configuració personalitzada prèviament entrenada",
+ "Pretrained G Path": "G preentrenat personalitzat",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Aquesta configuració us permet desar els pesos del model al final de cada època.",
+ "The file you dropped is not a valid pretrained file. Please try again.": "El fitxer que heu deixat anar no és un fitxer vàlid entrenat prèviament. Si us plau, torneu-ho a provar.",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Si activeu aquesta configuració, els fitxers G i D desaran només les seves versions més recents, estalviant efectivament espai d'emmagatzematge.",
+ "GPU Settings": "Configuració de la GPU",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Feu clic al botó d'actualització per veure el fitxer entrenat prèviament al menú desplegable.",
+ "Pretrained D Path": "Preentrenat personalitzat D",
+ "GPU Custom Settings": "Configuració personalitzada de la GPU",
+ "GPU Number": "Número de GPU",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Estableix la configuració avançada de la GPU, recomanada per a usuaris amb una millor arquitectura de GPU.",
+ "0 to ∞ separated by -": "0 a ∞ separats per -",
+ "The GPU information will be displayed here.": "Aquí es mostrarà la informació de la GPU.",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "L'ús de models preentrenats personalitzats pot conduir a resultats superiors, ja que la selecció dels models preentrenats més adequats adaptats al cas d'ús específic pot millorar significativament el rendiment.",
+ "GPU Information": "Informació de la GPU",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "El nombre de nuclis de CPU que s'utilitzaran en el procés previ. La configuració predeterminada són els nuclis de la CPU, que es recomana per a la majoria dels casos.",
+ "Use CPU": "Utilitza la CPU",
+ "Pitch Guidance": "Guia de pitch",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Especifiqueu el nombre de GPU que voleu utilitzar per al preprocessament introduint-les separades per guions (-). De moment, l'ús de múltiples gpu no tindrà un efecte significatiu.",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Especifiqueu el nombre de GPU que voleu utilitzar per extreure introduint-les separades per guions (-).",
+ "Force the use of CPU for training.": "Forçar l'ús de la CPU per a l'entrenament.",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "El nombre de nuclis de CPU que s'utilitzaran en el procés d'extracció. La configuració predeterminada són els nuclis de la CPU, que es recomana per a la majoria dels casos.",
+ "Extract Features": "Característiques d'extracció",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Utilitzeu models preentrenats quan entreneu els vostres. Aquest enfocament redueix la durada de la formació i millora la qualitat general.",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Mitjançant l'ús de la guia de to, es fa factible reflectir l'entonació de la veu original, inclòs el seu to. Aquesta característica és especialment valuosa per cantar i altres escenaris on és essencial preservar la melodia original o el patró de to.",
+ "Cache Dataset in GPU": "Conjunt de dades de memòria cau a la GPU",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Prioritzem l'execució del preprocessament del model a la GPU per a un rendiment més ràpid. Si preferiu utilitzar la CPU, simplement deixeu el camp GPU en blanc.",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Prioritzem l'execució de l'extracció del model a la GPU per a un rendiment més ràpid. Si preferiu utilitzar la CPU, simplement deixeu el camp GPU en blanc.",
+ "Index Algorithm": "Algorisme d'índex",
+ "Cache the dataset in GPU memory to speed up the training process.": "Emmagatzemeu a la memòria cau el conjunt de dades a la memòria de la GPU per accelerar el procés d'entrenament.",
+ "Overtraining Detector": "Detector de sobreentrenament",
+ "Overtraining Threshold": "Llindar de sobreentrenament",
+ "Overtraining Detector Settings": "Configuració del detector de sobreentrenament",
+ "Start Training": "Comença a entrenar",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans és un algorisme de clustering que divideix el conjunt de dades en K clústers. Aquesta configuració és especialment útil per a conjunts de dades grans.",
+ "Stop Training": "Aturar l'entrenament",
+ "Fresh Training": "Formació fresca",
+ "Generate Index": "Genera índex",
+ "Export Model": "Model d'exportació",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "Activeu aquesta configuració només si esteu entrenant un model nou des de zero o reiniciant l'entrenament. Suprimeix tots els pesos generats anteriorment i els registres del tauler de tensor.",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Detecta el sobreentrenament per evitar que el model aprengui massa bé les dades d'entrenament i perdi la capacitat de generalitzar a noves dades.",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Definiu el nombre màxim d'èpoques que voleu que el model deixi d'entrenar si no es detecta cap millora.",
+ "Upload": "Pujar",
+ "Exported Pth file": "Fitxer Pth exportat",
+ "Exported Index file": "Fitxer d'índex exportat",
+ "Select the pth file to be exported": "Seleccioneu el fitxer pth que voleu exportar",
+ "Voice Model": "Model de veu",
+ "Select the index file to be exported": "Seleccioneu el fitxer d'índex que voleu exportar",
+ "Refresh": "Refrescar",
+ "Select the voice model to use for the conversion.": "Seleccioneu el model de veu que voleu utilitzar per a la conversió.",
+ "Single": "Solter",
+ "Index File": "Fitxer d'índex",
+ "Unload Voice": "Descarrega la veu",
+ "Upload Audio": "Puja àudio",
+ "Select the index file to use for the conversion.": "Seleccioneu el fitxer d'índex que voleu utilitzar per a la conversió.",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "El botó 'Carregar' és només per a google colab: Puja els fitxers exportats a la carpeta ApplioExported del vostre Google Drive.",
+ "Select Audio": "Seleccioneu Àudio",
+ "Select the audio to convert.": "Seleccioneu l'àudio que voleu convertir.",
+ "Advanced Settings": "Configuració avançada",
+ "Custom Output Path": "Camí de sortida personalitzat",
+ "Output Path": "Camí de sortida",
+ "Export Format": "Format d'exportació",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Esborra les sortides (suprimeix tots els àudios dels recursos/àudios)",
+ "Select the format to export the audio.": "Seleccioneu el format per exportar l'àudio.",
+ "Autotune": "Autotune",
+ "Split Audio": "Àudio dividit",
+ "Clean Audio": "Àudio net",
+ "Clean Strength": "Força neta",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "El camí on es desarà l'àudio de sortida, per defecte a assets/audios/output.wav",
+ "Upscale Audio": "Àudio de luxe",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Dividiu l'àudio en trossos per a la inferència per obtenir millors resultats en alguns casos.",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Apliqueu una sintonització automàtica suau a les inferències, recomanada per a les conversions de cant.",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Netegeu la sortida d'àudio mitjançant algorismes de detecció de soroll, recomanats per parlar àudios.",
+ "Formant Shifting": "Desplaçament de formants",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Augmenteu l'àudio a una qualitat superior, recomanada per a àudios de baixa qualitat. (Pot trigar més a processar l'àudio)",
+ "Browse presets for formanting": "Navega pels predefinits per al formant",
+ "Pitch": "Pega",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Habilita el canvi de formant. S'utilitza per a conversions d'home a femella i viceversa.",
+ "Default value is 1.0": "El valor per defecte és 1.0",
+ "Presets are located in /assets/formant_shift folder": "Els predefinits es troben a la carpeta /assets/formant_shift",
+ "Quefrency for formant shifting": "Quefrència per al desplaçament de formants",
+ "Filter Radius": "Radi del filtre",
+ "Timbre for formant shifting": "Timbre per al canvi de formants",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Configureu el nivell de neteja a l'àudio que vulgueu, com més l'augmenteu, més netejarà, però és possible que l'àudio estigui més comprimit.",
+ "Volume Envelope": "Sobre de volum",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Estableix el to de l'àudio, com més alt sigui el valor, més alt serà el to.",
+ "Search Feature Ratio": "Relació de característiques de cerca",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Influència exercida pel fitxer índex; un valor més alt correspon a una major influència. Tanmateix, optar per valors més baixos pot ajudar a mitigar els artefactes presents a l'àudio.",
+ "Protect Voiceless Consonants": "Protegir les consonants sordes",
+ "Convert": "Convertir",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Si el nombre és major o igual a tres, l'ús del filtratge mitjà en els resultats del to recollit té el potencial de disminuir la respiració.",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Substituïu o barregeu amb l'embolcall de volum de la sortida. Com més propera sigui la relació a 1, més s'utilitza l'embolcall de sortida.",
+ "Batch": "Fornada",
+ "Pitch extraction algorithm": "Algorisme d'extracció de to",
+ "Export Audio": "Exporta àudio",
+ "Input Folder": "Carpeta d'entrada",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Protegiu diferents consonants i sons respiratoris per evitar esquinçaments electroacústics i altres artefactes. Tirar el paràmetre al seu valor màxim de 0,5 ofereix una protecció completa. Tanmateix, reduir aquest valor pot disminuir l'abast de la protecció i mitigar l'efecte d'indexació.",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Algorisme d'extracció de to per utilitzar per a la conversió d'àudio. L'algorisme predeterminat és rmvpe, que es recomana per a la majoria dels casos.",
+ "Enter input path": "Introduïu el camí d'entrada",
+ "Select the folder containing the audios to convert.": "Seleccioneu la carpeta que conté els àudios que voleu convertir.",
+ "Output Folder": "Carpeta de sortida",
+ "Enter output path": "Introduïu el camí de sortida",
+ "Select the folder where the output audios will be saved.": "Seleccioneu la carpeta on es desaran els àudios de sortida.",
+ "Get information about the audio": "Obtenir informació sobre l'àudio",
+ "## Voice Blender": "## Batedora de veu",
+ "Voice Blender": "Batedora de veu",
+ "You can also use a custom path.": "També podeu utilitzar un camí personalitzat.",
+ "Blend Ratio": "Relació de barreja",
+ "Fusion": "Fusió",
+ "Drag and drop your model here": "Arrossegueu i deixeu anar el vostre model aquí",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Seleccioneu dos models de veu, definiu el percentatge de barreja desitjat i combineu-los en una veu completament nova.",
+ "Enter path to model": "Introduïu el camí al model",
+ "Inroduce the model information": "Introduïu la informació del model",
+ "View": "Vista",
+ "Model information to be placed": "Informació del model a col·locar",
+ "Path to Model": "Camí al model",
+ "View model information": "Veure informació del model",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Ajustar la posició més cap a un costat o cap a l'altre farà que el model s'assembli més al primer o segon.",
+ "The information to be placed in the model (You can leave it blank or put anything).": "La informació a col·locar al model (Pots deixar-lo en blanc o posar qualsevol cosa).",
+ "Model extraction": "Extracció de models",
+ "Model conversion": "Conversió de models",
+ "Output of the pth file": "Sortida del fitxer pth",
+ "Extract F0 Curve": "Extreu la corba F0",
+ "Introduce the model pth path": "Introduïu el model de camí pth",
+ "Pth file": "Fitxer Pth",
+ "# How to Report an Issue on GitHub": "# Com informar d'un problema a GitHub",
+ "Record": "Rècord",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "La corba f0 representa les variacions en la freqüència base d'una veu al llarg del temps, mostrant com puja i baixa el to.",
+ "Record Screen": "Pantalla de gravació",
+ "Stop Recording": "Atura la gravació",
+ "See Model Information": "Veure informació del model",
+ "Introduce the model .pth path": "Introduïu el camí .pth del model",
+ "## Download Model": "## Descarregar model",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Feu clic al botó \"Grava pantalla\" a continuació per començar a gravar el problema que esteu experimentant.",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Aneu a [Problemes de GitHub](https://github.com/IAHispano/Applio/issues) i feu clic al botó \"Nou problema\".",
+ "Model Link": "Enllaç del model",
+ "Download Model": "Descarregar model",
+ "## Drop files": "## Deixa anar fitxers",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Completeu la plantilla d'incidència proporcionada, assegurant-vos d'incloure els detalls necessaris i utilitzeu la secció d'actius per carregar el fitxer gravat del pas anterior.",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Un cop hàgiu acabat de gravar el problema, feu clic al botó \"Atura la gravació\" (el mateix botó, però l'etiqueta canvia depenent de si esteu gravant activament o no).",
+ "Search": "Buscar",
+ "## Search Model": "## Model de cerca",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Arrossegueu el fitxer .pth i el fitxer .index a aquest espai. Arrossegueu-ne un i després l'altre.",
+ "Introduce the model link": "Introdueix l'enllaç del model",
+ "Introduce the model name to search.": "Introduïu el nom del model per cercar.",
+ "We couldn't find models by that name.": "No vam poder trobar models amb aquest nom.",
+ "TTS Voices": "Veus TTS",
+ "Select the pretrained model you want to download.": "Seleccioneu el model entrenat prèviament que voleu baixar.",
+ "TTS Speed": "Velocitat TTS",
+ "## Download Pretrained Models": "## Descarregar models preentrenats",
+ "And select the sampling rate": "I seleccioneu la freqüència de mostreig.",
+ "Increase or decrease TTS speed.": "Augmenta o disminueix la velocitat TTS.",
+ "Select the TTS voice to use for the conversion.": "Seleccioneu la veu TTS que voleu utilitzar per a la conversió.",
+ "Text to Synthesize": "Text per sintetitzar",
+ "Enter the text to synthesize.": "Introduïu el text per sintetitzar.",
+ "Upload a .txt file": "Penjar un fitxer .txt",
+ "Input path for text file": "Camí d'entrada per al fitxer de text",
+ "Enter text to synthesize": "Introduïu text per sintetitzar",
+ "Output Path for RVC Audio": "Camí de sortida per a àudio RVC",
+ "Output Path for TTS Audio": "Camí de sortida per a àudio TTS",
+ "The path to the text file that contains content for text to speech.": "Camí al fitxer de text que conté contingut per a text a veu.",
+ "Enable Applio integration with Discord presence": "Activa la integració d'Applio amb la presència de Discord",
+ "Theme": "Tema",
+ "Language": "Llengua",
+ "Enable Applio integration with applio.org/models using flask": "Habilitar la integració d'Applio amb applio.org/models mitjançant el matràs",
+ "Enable fake GPU": "Activa la GPU falsa",
+ "It will activate the possibility of downloading models with a click from the website.": "Activarà la possibilitat de descarregar models amb un clic des de la pàgina web.",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "Activarà la possibilitat de mostrar l'activitat actual d'Applio a Discord.",
+ "Select the theme you want to use. (Requires restarting Applio)": "Seleccioneu el tema que voleu utilitzar. (Requereix reiniciar Applio)",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Activa la pestanya Tren. Tanmateix, tingueu en compte que aquest dispositiu no té capacitats de GPU, per tant, no s'admet l'entrenament. Aquesta opció només té finalitats de prova. (Aquesta opció reiniciarà Applio)",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "Actualment, l'entrenament no és compatible a causa de l'absència d'una GPU. Per activar la pestanya d'entrenament, aneu a la pestanya de configuració i activeu l'opció \"GPU falsa\".",
+ "Select the language you want to use. (Requires restarting Applio)": "Seleccioneu l'idioma que voleu utilitzar. (Requereix reiniciar Applio)",
+ "Update precision": "Actualitzar la precisió",
+ "Restart Applio": "Reinicia Applio",
+ "Select the precision you want to use for training and inference.": "Seleccioneu la precisió que voleu utilitzar per a l'entrenament i la inferència.",
+ "Plugin Installer": "Instal·lador de connectors",
+ "Post-Process": "Post-procés",
+ "Reverb": "Reverberació",
+ "Version Checker": "Verificador de versions",
+ "Drag your plugin.zip to install it": "Arrossegueu el plugin.zip per instal·lar-lo",
+ "Post-process the audio to apply effects to the output.": "Postprocesseu l'àudio per aplicar efectes a la sortida.",
+ "Precision": "Precisió",
+ "Check for updates": "Comprovar si hi ha actualitzacions",
+ "Check which version of Applio is the latest to see if you need to update.": "Comproveu quina versió d'Applio és l'última per veure si heu d'actualitzar-la.",
+ "Reverb Room Size": "Mida de la sala de reverberació",
+ "Apply reverb to the audio.": "Apliqueu la reverberació a l'àudio.",
+ "Reverb Damping": "Amortiment de reverberació",
+ "Reverb Wet Gain": "Guany humit de reverberació",
+ "Set the room size of the reverb.": "Estableix la mida de l'habitació de la reverberació.",
+ "Set the damping of the reverb.": "Estableix l'amortiment de la reverberació.",
+ "Reverb Dry Gain": "Guany sec de reverberació",
+ "Set the wet gain of the reverb.": "Estableix el guany humit de la reverberació.",
+ "Set the dry gain of the reverb.": "Estableix el guany sec de la reverberació.",
+ "Reverb Freeze Mode": "Mode de congelació de reverberació",
+ "Set the width of the reverb.": "Estableix l'amplada de la reverberació.",
+ "Pitch Shift": "Canvi de to",
+ "Reverb Width": "Amplada de reverberació",
+ "Limiter": "Limitador",
+ "Set the freeze mode of the reverb.": "Estableix el mode de congelació de la reverberació.",
+ "Pitch Shift Semitones": "Semitons de canvi de to",
+ "Set the pitch shift semitones.": "Estableix els semitones de canvi de to.",
+ "Gain": "Guany",
+ "Apply pitch shift to the audio.": "Aplica el canvi de to a l'àudio.",
+ "Apply limiter to the audio.": "Apliqueu un limitador a l'àudio.",
+ "Limiter Threshold dB": "Llindar del limitador dB",
+ "Set the limiter threshold dB.": "Estableix el llindar del limitador dB.",
+ "Limiter Release Time": "Temps d'alliberament del limitador",
+ "Distortion": "Distorsió",
+ "Set the limiter release time.": "Estableix el temps d'alliberament del limitador.",
+ "Apply gain to the audio.": "Apliqueu el guany a l'àudio.",
+ "Set the gain dB.": "Estableix el guany dB.",
+ "Chorus": "Cor",
+ "Gain dB": "Guanya dB",
+ "Distortion Gain": "Guany de distorsió",
+ "Apply distortion to the audio.": "Apliqueu distorsió a l'àudio.",
+ "Set the distortion gain.": "Estableix el guany de distorsió.",
+ "Chorus Rate Hz": "Velocitat del cor Hz",
+ "Chorus Depth": "Profunditat del cor",
+ "Apply chorus to the audio.": "Apliqueu el cor a l'àudio.",
+ "Set the chorus depth.": "Estableix la profunditat de la tornada.",
+ "Set the chorus rate Hz.": "Estableix la velocitat del cor Hz.",
+ "Chorus Center Delay ms": "Retard del centre del cor ms",
+ "Set the chorus center delay ms.": "Estableix el retard central del cor ms.",
+ "Chorus Feedback": "Comentaris del cor",
+ "Set the chorus feedback.": "Estableix la retroalimentació del cor.",
+ "Chorus Mix": "Barreja de cor",
+ "Set the chorus mix.": "Estableix la barreja de tornada.",
+ "Bitcrush": "Bitcrush",
+ "Clipping": "Retall",
+ "Bitcrush Bit Depth": "Profunditat de bits Bitcrush",
+ "Apply bitcrush to the audio.": "Apliqueu bitcrush a l'àudio.",
+ "Set the bitcrush bit depth.": "Establiu la profunditat de bits bitcrush.",
+ "Compressor": "Compressor",
+ "Apply clipping to the audio.": "Aplica el retall a l'àudio.",
+ "Clipping Threshold": "Llindar de retall",
+ "Set the clipping threshold.": "Definiu el llindar de retallada.",
+ "Apply compressor to the audio.": "Apliqueu compressor a l'àudio.",
+ "Compressor Attack ms": "Compressor Attack ms",
+ "Set the compressor ratio.": "Configureu la relació del compressor.",
+ "Set the compressor threshold dB.": "Establiu el llindar del compressor dB.",
+ "Delay": "Retard",
+ "Compressor Threshold dB": "Llindar del compressor dB",
+ "Compressor Ratio": "Relació del compressor",
+ "Compressor Release ms": "Alliberament del compressor ms",
+ "Set the compressor attack ms.": "Configureu l'atac del compressor ms.",
+ "Delay Seconds": "Segons de retard",
+ "Set the compressor release ms.": "Configureu l'alliberament del compressor ms.",
+ "Apply delay to the audio.": "Aplica retard a l'àudio.",
+ "Set the delay seconds.": "Establiu els segons de retard.",
+ "Delay Feedback": "Retarda els comentaris",
+ "Set the delay feedback.": "Definiu els comentaris de retard.",
+ "Set the delay mix.": "Configureu la mescla de retard.",
+ "Delay Mix": "Mescla de retard",
+ "Custom Embedder": "Incrustador personalitzat",
+ "Folder Name": "Nom de la carpeta",
+ "Select Custom Embedder": "Seleccioneu Inserció personalitzada",
+ "Refresh embedders": "Actualitza els incrustadors",
+ "Upload .json": "Puja .json",
+ "Upload .bin": "Puja .bin",
+ "model information": "Informació del model",
+ "Model Creator": "Creador de models",
+ "Move files to custom embedder folder": "Mou fitxers a la carpeta d'inserció personalitzada",
+ "Name of the model creator. (Default: Unknown)": "Nom del creador del model. (Per defecte: desconegut)",
+ "Speaker ID": "ID del ponent",
+ "Select the speaker ID to use for the conversion.": "Seleccioneu l'identificador de l'altaveu que voleu utilitzar per a la conversió.",
+ "Model Author Name": "Nom de l'autor del model",
+ "Set name": "Nom del conjunt",
+ "The name that will appear in the model information.": "El nom que apareixerà a la informació del model.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "Establiu la força de l'autotune - com més l'augmenteu, més s'ajustarà a la graella cromàtica."
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/ceb_CEB.json b/assets/i18n/languages/ceb_CEB.json
new file mode 100644
index 0000000000000000000000000000000000000000..2222c343a2be7023245ff25098d335c00b7eccac
--- /dev/null
+++ b/assets/i18n/languages/ceb_CEB.json
@@ -0,0 +1,325 @@
+{
+ "Save Every Weights": "Save Every Weights",
+ "## Download Model": "## Download Model",
+ "Upload": "Upload",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.",
+ "Batch Size": "Batch Size",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "This setting enables you to save the weights of the model at the conclusion of each epoch.",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "A simple, high-quality voice conversion tool focused on ease of use and performance.",
+ "This section contains some extra utilities that often may be in experimental phases.": "This section contains some extra utilities that often may be in experimental phases.",
+ "Overtraining Threshold": "Overtraining Threshold",
+ "Save Only Latest": "Save Only Latest",
+ "Exported Pth file": "Exported Pth file",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.",
+ "Specifies the overall quantity of epochs for the model training process.": "Specifies the overall quantity of epochs for the model training process.",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.",
+ "Dataset Creator": "Dataset Creator",
+ "Model Link": "Model Link",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.",
+ "Stop Recording": "Stop Recording",
+ "Upload Pretrained Model": "Upload Pretrained Model",
+ "Total Epoch": "Total Epoch",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).",
+ "Export Model": "Export Model",
+ "Determine at how many epochs the model will saved at.": "Determine at how many epochs the model will saved at.",
+ "Inference": "Inference",
+ "Select the pth file to be exported": "Select the pth file to be exported",
+ "Fresh Training": "Fresh Training",
+ "The output information will be displayed here.": "The output information will be displayed here.",
+ "Select the index file to be exported": "Select the index file to be exported",
+ "Extra": "Extra",
+ "Record": "Record",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.",
+ "Output Information": "Output Information",
+ "Refresh Custom Pretraineds": "Refresh Custom Pretraineds",
+ "Stop Training": "Stop Training",
+ "See Model Information": "See Model Information",
+ "Save Every Epoch": "Save Every Epoch",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Set the maximum number of epochs you want your model to stop training if no improvement is detected.",
+ "Introduce the model .pth path": "Introduce the model .pth path",
+ "Exported Index file": "Exported Index file",
+ "Voice Model": "Voice Model",
+ "Record Screen": "Record Screen",
+ "# How to Report an Issue on GitHub": "# How to Report an Issue on GitHub",
+ "Introduce the model link": "Introduce the model link",
+ "Pretrained": "Pretrained",
+ "Generate Index": "Generate Index",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.",
+ "Overtraining Detector Settings": "Overtraining Detector Settings",
+ "Start Training": "Start Training",
+ "Custom Pretrained": "Custom Pretrained",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Apply a soft autotune to your inferences, recommended for singing conversions.",
+ "Chorus Mix": "Chorus Mix",
+ "Processing": "Processing",
+ "Clean Strength": "Clean Strength",
+ "Custom Embedder": "Custom Embedder",
+ "Chorus Rate Hz": "Chorus Rate Hz",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "The path where the output audio will be saved, by default in assets/audios/output.wav",
+ "Chorus Center Delay ms": "Chorus Center Delay ms",
+ "Upload .bin": "Upload .bin",
+ "Set the delay mix.": "Set the delay mix.",
+ "model information": "model information",
+ "Browse presets for formanting": "Browse presets for formanting",
+ "Bitcrush": "Bitcrush",
+ "Set the chorus mix.": "Set the chorus mix.",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Split the audio into chunks for inference to obtain better results in some cases.",
+ "Set the delay feedback.": "Set the delay feedback.",
+ "Clean Audio": "Clean Audio",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)",
+ "Chorus Feedback": "Chorus Feedback",
+ "Model Creator": "Model Creator",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.",
+ "Set the delay seconds.": "Set the delay seconds.",
+ "Set the chorus rate Hz.": "Set the chorus rate Hz.",
+ "Select Custom Embedder": "Select Custom Embedder",
+ "Set the chorus depth.": "Set the chorus depth.",
+ "Presets are located in /assets/formant_shift folder": "Presets are located in /assets/formant_shift folder",
+ "Move files to custom embedder folder": "Move files to custom embedder folder",
+ "Split Audio": "Split Audio",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Clean your audio output using noise detection algorithms, recommended for speaking audios.",
+ "Apply chorus to the audio.": "Apply chorus to the audio.",
+ "Formant Shifting": "Formant Shifting",
+ "Autotune": "Autotune",
+ "Delay Feedback": "Delay Feedback",
+ "Set the chorus feedback.": "Set the chorus feedback.",
+ "Folder Name": "Folder Name",
+ "Set the chorus center delay ms.": "Set the chorus center delay ms.",
+ "Upscale Audio": "Upscale Audio",
+ "Delay Mix": "Delay Mix",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Enable formant shifting. Used for male to female and vice-versa convertions.",
+ "Refresh embedders": "Refresh embedders",
+ "Delay Seconds": "Delay Seconds",
+ "Upload .json": "Upload .json",
+ "Chorus Depth": "Chorus Depth",
+ "Index Algorithm": "Index Algorithm",
+ "Post-process the audio to apply effects to the output.": "Post-process the audio to apply effects to the output.",
+ "Pitch Guidance": "Pitch Guidance",
+ "Apply pitch shift to the audio.": "Apply pitch shift to the audio.",
+ "Report a Bug": "Report a Bug",
+ "Set name": "Set name",
+ "Reverb Room Size": "Reverb Room Size",
+ "Check for updates": "Check for updates",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.",
+ "Set the damping of the reverb.": "Set the damping of the reverb.",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Set the pitch of the audio, the higher the value, the higher the pitch.",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.",
+ "Plugin Installer": "Plugin Installer",
+ "Reverb Wet Gain": "Reverb Wet Gain",
+ "Update precision": "Update precision",
+ "Set the width of the reverb.": "Set the width of the reverb.",
+ "Preprocess": "Preprocess",
+ "Quefrency for formant shifting": "Quefrency for formant shifting",
+ "Filter Radius": "Filter Radius",
+ "The name that will appear in the model information.": "The name that will appear in the model information.",
+ "Default value is 1.0": "Default value is 1.0",
+ "Version Checker": "Version Checker",
+ "Search Feature Ratio": "Search Feature Ratio",
+ "Overtraining Detector": "Overtraining Detector",
+ "Precision": "Precision",
+ "Reverb Damping": "Reverb Damping",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.",
+ "Pitch Shift": "Pitch Shift",
+ "Model Author Name": "Model Author Name",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.",
+ "GPU Information": "GPU Information",
+ "Force the use of CPU for training.": "Force the use of CPU for training.",
+ "Speaker ID": "Speaker ID",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.",
+ "Dataset Path": "Dataset Path",
+ "Name of the model creator. (Default: Unknown)": "Name of the model creator. (Default: Unknown)",
+ "Check which version of Applio is the latest to see if you need to update.": "Check which version of Applio is the latest to see if you need to update.",
+ "Cache the dataset in GPU memory to speed up the training process.": "Cache the dataset in GPU memory to speed up the training process.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.",
+ "Volume Envelope": "Volume Envelope",
+ "Set the dry gain of the reverb.": "Set the dry gain of the reverb.",
+ "Pitch extraction algorithm": "Pitch extraction algorithm",
+ "Set the wet gain of the reverb.": "Set the wet gain of the reverb.",
+ "Reverb Dry Gain": "Reverb Dry Gain",
+ "Pitch Shift Semitones": "Pitch Shift Semitones",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.",
+ "Cache Dataset in GPU": "Cache Dataset in GPU",
+ "Set the freeze mode of the reverb.": "Set the freeze mode of the reverb.",
+ "Language": "Language",
+ "Apply reverb to the audio.": "Apply reverb to the audio.",
+ "Select the language you want to use. (Requires restarting Applio)": "Select the language you want to use. (Requires restarting Applio)",
+ "Reverb Width": "Reverb Width",
+ "Reverb": "Reverb",
+ "Reverb Freeze Mode": "Reverb Freeze Mode",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "It's recommended to deactivate this option if your dataset has already been processed.",
+ "Drag your plugin.zip to install it": "Drag your plugin.zip to install it",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.",
+ "Post-Process": "Post-Process",
+ "Pitch": "Pitch",
+ "Select the speaker ID to use for the conversion.": "Select the speaker ID to use for the conversion.",
+ "Extract Features": "Extract Features",
+ "Bitcrush Bit Depth": "Bitcrush Bit Depth",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.",
+ "Select the theme you want to use. (Requires restarting Applio)": "Select the theme you want to use. (Requires restarting Applio)",
+ "Set the bitcrush bit depth.": "Set the bitcrush bit depth.",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.",
+ "Protect Voiceless Consonants": "Protect Voiceless Consonants",
+ "Select the precision you want to use for training and inference.": "Select the precision you want to use for training and inference.",
+ "Apply bitcrush to the audio.": "Apply bitcrush to the audio.",
+ "Timbre for formant shifting": "Timbre for formant shifting",
+ "Use CPU": "Use CPU",
+ "Set the room size of the reverb.": "Set the room size of the reverb.",
+ "Custom Output Path": "Custom Output Path",
+ "Name of the new model.": "Name of the new model.",
+ "You can also use a custom path.": "You can also use a custom path.",
+ "Select the format to export the audio.": "Select the format to export the audio.",
+ "Training": "Training",
+ "Select the voice model to use for the conversion.": "Select the voice model to use for the conversion.",
+ "Blend Ratio": "Blend Ratio",
+ "Single": "Single",
+ "Advanced Settings": "Advanced Settings",
+ "## Voice Blender": "## Voice Blender",
+ "Merge Audios": "Merge Audios",
+ "Select the folder where the output audios will be saved.": "Select the folder where the output audios will be saved.",
+ "Upload Audio": "Upload Audio",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.",
+ "Plugins": "Plugins",
+ "Select the folder containing the audios to convert.": "Select the folder containing the audios to convert.",
+ "Audio Analyzer": "Audio Analyzer",
+ "Select Audio": "Select Audio",
+ "Voice Blender": "Voice Blender",
+ "Drag and drop your model here": "Drag and drop your model here",
+ "Enter input path": "Enter input path",
+ "Process effects": "Process effects",
+ "Output Path": "Output Path",
+ "Batch": "Batch",
+ "Model Information": "Model Information",
+ "Input Folder": "Input Folder",
+ "Select the index file to use for the conversion.": "Select the index file to use for the conversion.",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Clear Outputs (Deletes all audios in assets/audios)",
+ "Settings": "Settings",
+ "Refresh": "Refresh",
+ "Output Folder": "Output Folder",
+ "Convert": "Convert",
+ "Select the audio to convert.": "Select the audio to convert.",
+ "Get information about the audio": "Get information about the audio",
+ "Index File": "Index File",
+ "Export Audio": "Export Audio",
+ "Audio cutting": "Audio cutting",
+ "Unload Voice": "Unload Voice",
+ "Export Format": "Export Format",
+ "Enter output path": "Enter output path",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.",
+ "## Search Model": "## Search Model",
+ "And select the sampling rate": "And select the sampling rate.",
+ "Enter text to synthesize": "Enter text to synthesize",
+ "Enter the text to synthesize.": "Enter the text to synthesize.",
+ "## Download Pretrained Models": "## Download Pretrained Models",
+ "Select the pretrained model you want to download.": "Select the pretrained model you want to download.",
+ "The path to the text file that contains content for text to speech.": "The path to the text file that contains content for text to speech.",
+ "Theme": "Theme",
+ "## Drop files": "## Drop files",
+ "Output Path for TTS Audio": "Output Path for TTS Audio",
+ "Output Path for RVC Audio": "Output Path for RVC Audio",
+ "Input path for text file": "Input path for text file",
+ "Introduce the model name to search.": "Introduce the model name to search.",
+ "Download Model": "Download Model",
+ "Select the TTS voice to use for the conversion.": "Select the TTS voice to use for the conversion.",
+ "Dataset Name": "Dataset Name",
+ "Increase or decrease TTS speed.": "Increase or decrease TTS speed.",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Drag your .pth file and .index file into this space. Drag one and then the other.",
+ "Enable Applio integration with Discord presence": "Enable Applio integration with Discord presence",
+ "Text to Synthesize": "Text to Synthesize",
+ "We couldn't find models by that name.": "We couldn't find models by that name.",
+ "TTS Voices": "TTS Voices",
+ "Upload a .txt file": "Upload a .txt file",
+ "Restart Applio": "Restart Applio",
+ "TTS Speed": "TTS Speed",
+ "Enable fake GPU": "Enable fake GPU",
+ "Enable Applio integration with applio.org/models using flask": "Enable Applio integration with applio.org/models using flask",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "It will activate the possibility of displaying the current Applio activity in Discord.",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)",
+ "Search": "Search",
+ "It will activate the possibility of downloading models with a click from the website.": "It will activate the possibility of downloading models with a click from the website.",
+ "Pretrained D Path": "Custom Pretrained D",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Sets advanced GPU settings, recommended for users with better GPU architecture.",
+ "Compressor Release ms": "Compressor Release ms",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.",
+ "Apply delay to the audio.": "Apply delay to the audio.",
+ "Set the compressor attack ms.": "Set the compressor attack ms.",
+ "Compressor Threshold dB": "Compressor Threshold dB",
+ "Compressor Attack ms": "Compressor Attack ms",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.",
+ "Pretrained Custom Settings": "Pretrained Custom Settings",
+ "Set the compressor release ms.": "Set the compressor release ms.",
+ "GPU Settings": "GPU Settings",
+ "Clipping Threshold": "Clipping Threshold",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Click the refresh button to see the pretrained file in the dropdown menu.",
+ "Apply compressor to the audio.": "Apply compressor to the audio.",
+ "GPU Custom Settings": "GPU Custom Settings",
+ "0 to ∞ separated by -": "0 to ∞ separated by -",
+ "GPU Number": "GPU Number",
+ "The GPU information will be displayed here.": "The GPU information will be displayed here.",
+ "Clipping": "Clipping",
+ "The file you dropped is not a valid pretrained file. Please try again.": "The file you dropped is not a valid pretrained file. Please try again.",
+ "Pretrained G Path": "Custom Pretrained G",
+ "Set the compressor threshold dB.": "Set the compressor threshold dB.",
+ "Set the clipping threshold.": "Set the clipping threshold.",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).",
+ "Compressor Ratio": "Compressor Ratio",
+ "Apply clipping to the audio.": "Apply clipping to the audio.",
+ "Delay": "Delay",
+ "Set the compressor ratio.": "Set the compressor ratio.",
+ "Compressor": "Compressor",
+ "Hop Length": "Hop Length",
+ "Version of the model architecture.": "Version of the model architecture.",
+ "Enter model name": "Enter model name",
+ "Set the pitch shift semitones.": "Set the pitch shift semitones.",
+ "Distortion": "Distortion",
+ "Upload Audio Dataset": "Upload Audio Dataset",
+ "Set the limiter threshold dB.": "Set the limiter threshold dB.",
+ "The sampling rate of the audio files.": "The sampling rate of the audio files.",
+ "Apply limiter to the audio.": "Apply limiter to the audio.",
+ "Embedder Model": "Embedder Model",
+ "Sampling Rate": "Sampling Rate",
+ "Chorus": "Chorus",
+ "Name of the new dataset.": "Name of the new dataset.",
+ "Gain": "Gain",
+ "Model used for learning speaker embedding.": "Model used for learning speaker embedding.",
+ "Distortion Gain": "Distortion Gain",
+ "Gain dB": "Gain dB",
+ "Extract": "Extract",
+ "Set the gain dB.": "Set the gain dB.",
+ "Set the limiter release time.": "Set the limiter release time.",
+ "Preprocess Dataset": "Preprocess Dataset",
+ "Model Name": "Model Name",
+ "Apply distortion to the audio.": "Apply distortion to the audio.",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "The audio file has been successfully added to the dataset. Please click the preprocess button.",
+ "Limiter": "Limiter",
+ "Limiter Threshold dB": "Limiter Threshold dB",
+ "Model Architecture": "Model Architecture",
+ "Limiter Release Time": "Limiter Release Time",
+ "Apply gain to the audio.": "Apply gain to the audio.",
+ "Set the distortion gain.": "Set the distortion gain.",
+ "Model information to be placed": "Model information to be placed",
+ "Fusion": "Fusion",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.",
+ "Model extraction": "Model extraction",
+ "Pth file": "Pth file",
+ "Output of the pth file": "Output of the pth file",
+ "The information to be placed in the model (You can leave it blank or put anything).": "The information to be placed in the model (You can leave it blank or put anything).",
+ "View model information": "View model information",
+ "View": "View",
+ "Path to Model": "Path to Model",
+ "Inroduce the model information": "Inroduce the model information",
+ "Model conversion": "Model conversion",
+ "Introduce the model pth path": "Introduce the model pth path",
+ "Enter path to model": "Enter path to model",
+ "Extract F0 Curve": "Extract F0 Curve",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Adjusting the position more towards one side or the other will make the model more similar to the first or second.",
+ "Path to the dataset folder.": "Path to the dataset folder.",
+ "Download": "Download",
+ "Enter dataset path": "Enter dataset path",
+ "Enter dataset name": "Enter dataset name",
+ "Refresh Datasets": "Refresh Datasets"
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/cs_CS.json b/assets/i18n/languages/cs_CS.json
new file mode 100644
index 0000000000000000000000000000000000000000..4221ce06497c1b74dacffff42beb8af0213245d7
--- /dev/null
+++ b/assets/i18n/languages/cs_CS.json
@@ -0,0 +1,325 @@
+{
+ "Training": "Školení",
+ "Inference": "Odvození",
+ "Processing": "Zpracování",
+ "Output Information": "Informace o výstupu",
+ "Settings": "Nastavení",
+ "Download": "Stáhnout",
+ "The output information will be displayed here.": "Zde se zobrazí výstupní informace.",
+ "This section contains some extra utilities that often may be in experimental phases.": "Tato sekce obsahuje některé další nástroje, které mohou být často v experimentální fázi.",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "Jednoduchý, vysoce kvalitní nástroj pro převod hlasu zaměřený na snadné použití a výkon.",
+ "Preprocess": "Předběžně zpracovat",
+ "Plugins": "Zásuvné moduly",
+ "Report a Bug": "Nahlásit chybu",
+ "Model Information": "Informace o modelu",
+ "Audio Analyzer": "Analyzátor zvuku",
+ "Extra": "Extra",
+ "Merge Audios": "Sloučit zvuky",
+ "Process effects": "Efekty procesu",
+ "Model Name": "Název modelu",
+ "Audio cutting": "Řezání zvuku",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "Tuto možnost doporučujeme deaktivovat, pokud již byla datová sada zpracována.",
+ "Enter model name": "Zadejte název modelu",
+ "Name of the new model.": "Název nového modelu.",
+ "Refresh Datasets": "Aktualizace datových sad",
+ "Path to the dataset folder.": "Cesta ke složce datové sady.",
+ "Dataset Creator": "Tvůrce datové sady",
+ "Dataset Path": "Cesta k datové sadě",
+ "Dataset Name": "Název datové sady",
+ "Upload Audio Dataset": "Nahrát zvukovou datovou sadu",
+ "Enter dataset name": "Zadejte název datové sady",
+ "Enter dataset path": "Zadejte cestu k datové sadě",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Zvukový soubor byl úspěšně přidán do datové sady. Klikněte na tlačítko předběžného zpracování.",
+ "Name of the new dataset.": "Název nové datové sady.",
+ "Sampling Rate": "Vzorkovací frekvence",
+ "The sampling rate of the audio files.": "Vzorkovací frekvence zvukových souborů.",
+ "Extract": "Extrahovat",
+ "Model Architecture": "Architektura modelu",
+ "Version of the model architecture.": "Verze architektury modelu.",
+ "Preprocess Dataset": "Předběžná datová sada",
+ "Embedder Model": "Vložit model vkládacího zařízení",
+ "Hop Length": "Délka skoku",
+ "Model used for learning speaker embedding.": "Model používaný pro učení vkládání reproduktorů.",
+ "Batch Size": "Velikost šarže",
+ "Save Every Epoch": "Zachraňte každou epochu",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Označuje dobu, za kterou systém přejde k výrazné změně výšky tónu. Menší délky směrování vyžadují více času na odvození, ale mají tendenci poskytovat vyšší přesnost výšky tónu.",
+ "Determine at how many epochs the model will saved at.": "Určete, v kolika epochách se bude model ukládat.",
+ "Total Epoch": "Celková epocha",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Je vhodné jej sladit s dostupnou pamětí VRAM vašeho GPU. Nastavení 4 nabízí vyšší přesnost, ale pomalejší zpracování, zatímco 8 poskytuje rychlejší a standardní výsledky.",
+ "Pretrained": "Předem vytrénovaný",
+ "Save Every Weights": "Ušetřete každou váhu",
+ "Specifies the overall quantity of epochs for the model training process.": "Určuje celkové množství epoch pro proces trénování modelu.",
+ "Custom Pretrained": "Vlastní předtrénování",
+ "Save Only Latest": "Uložit pouze nejnovější",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Toto nastavení umožňuje uložit váhy modelu na konci každé epochy.",
+ "Refresh Custom Pretraineds": "Obnovit vlastní předtrénované prvky",
+ "Pretrained Custom Settings": "Předtrénovaná uživatelská nastavení",
+ "Upload Pretrained Model": "Nahrání předtrénovaného modelu",
+ "The file you dropped is not a valid pretrained file. Please try again.": "Soubor, který jste přetáhli, není platný předtrénovaný soubor. Zkuste to prosím znovu.",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Povolení tohoto nastavení bude mít za následek, že soubory G a D uloží pouze své nejnovější verze, čímž se efektivně šetří úložný prostor.",
+ "GPU Settings": "Nastavení GPU",
+ "Pretrained D Path": "Vlastní předtrénované D",
+ "Pretrained G Path": "Vlastní předtrénované G",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Využití vlastních předtrénovaných modelů může vést k vynikajícím výsledkům, protože výběr nejvhodnějších předtrénovaných modelů přizpůsobených konkrétnímu případu použití může výrazně zvýšit výkon.",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Kliknutím na tlačítko Obnovit zobrazíte předem natrénovaný soubor v rozevírací nabídce.",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Nastavuje pokročilá nastavení GPU, doporučená pro uživatele s lepší architekturou GPU.",
+ "GPU Custom Settings": "Vlastní nastavení GPU",
+ "GPU Number": "Číslo GPU",
+ "0 to ∞ separated by -": "0 až ∞ odděleny -",
+ "The GPU information will be displayed here.": "Zde se zobrazí informace o GPU.",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "Počet jader procesoru, která se mají použít v předběžném procesu. Výchozím nastavením jsou jádra procesoru, což se ve většině případů doporučuje.",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "Počet jader procesoru, která se mají použít v procesu extrakce. Výchozím nastavením jsou jádra procesoru, což se ve většině případů doporučuje.",
+ "GPU Information": "Informace o GPU",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Určete počet GPU, které chcete použít pro předběžné zpracování, a to tak, že je zadáte oddělené pomlčkami (-). V tuto chvíli nebude mít používání více GPU významný vliv.",
+ "Pitch Guidance": "Navádění výšky tónu",
+ "Use CPU": "Použít procesor",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Určete počet GPU, které chcete použít k extrahování, a to tak, že je zadáte oddělené pomlčkami (-).",
+ "Force the use of CPU for training.": "Vynutit použití CPU pro trénink.",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Použitím navádění výšky tónu je možné zrcadlit intonaci původního hlasu, včetně jeho výšky tónu. Tato funkce je zvláště cenná pro zpěv a další scénáře, kde je nezbytné zachovat původní melodii nebo vzor výšky tónu.",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Při trénování vlastních modelů využijte předtrénované modely. Tento přístup zkracuje dobu trvání školení a zvyšuje celkovou kvalitu.",
+ "Extract Features": "Extrahování funkcí",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Pro rychlejší výkon upřednostňujeme spuštění extrakce modelu na GPU. Pokud dáváte přednost použití procesoru, jednoduše ponechte pole GPU prázdné.",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Prioritou je spuštění předběžného zpracování modelu na GPU pro rychlejší výkon. Pokud dáváte přednost použití procesoru, jednoduše ponechte pole GPU prázdné.",
+ "Index Algorithm": "Indexový algoritmus",
+ "Cache Dataset in GPU": "Datová sada mezipaměti v GPU",
+ "Cache the dataset in GPU memory to speed up the training process.": "Uložte datovou sadu do paměti GPU, abyste urychlili proces trénování.",
+ "Overtraining Detector": "Detektor přetrénování",
+ "Fresh Training": "Čerstvé školení",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Nastavte maximální počet epoch, po které má model přestat trénovat, pokud není zjištěno žádné zlepšení.",
+ "Overtraining Threshold": "Práh přetrénování",
+ "Start Training": "Zahájit školení",
+ "Stop Training": "Přestat trénovat",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "Toto nastavení povolte pouze v případě, že trénujete nový model od začátku nebo znovu spouštíte trénování. Odstraní všechny dříve vygenerované váhy a protokoly tenzoru.",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Detekujte přetrénování, abyste zabránili tomu, aby se model příliš dobře učil trénovací data a ztratil schopnost zobecnit na nová data.",
+ "Overtraining Detector Settings": "Nastavení detektoru přetrénování",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans je shlukovací algoritmus, který rozděluje datovou sadu na K clustery. Toto nastavení je užitečné zejména pro velké datové sady.",
+ "Generate Index": "Generovat index",
+ "Export Model": "Exportovat model",
+ "Exported Pth file": "Exportovaný soubor Pth",
+ "Exported Index file": "Exportovaný soubor indexu",
+ "Select the index file to be exported": "Vyberte soubor indexu, který chcete exportovat",
+ "Select the pth file to be exported": "Vyberte soubor PTH, který chcete exportovat",
+ "Upload": "Upload",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "Tlačítko 'Nahrát' je pouze pro google colab: Nahraje exportované soubory do složky ApplioExported na vašem Disku Google.",
+ "Refresh": "Osvěžit",
+ "Single": "Jednotlivý",
+ "Voice Model": "Hlasový model",
+ "Index File": "Indexový soubor",
+ "Select the index file to use for the conversion.": "Vyberte soubor indexu, který chcete použít pro převod.",
+ "Unload Voice": "Uvolnit hlas",
+ "Select the voice model to use for the conversion.": "Vyberte hlasový model, který chcete použít pro převod.",
+ "Select Audio": "Vyberte možnost Zvuk",
+ "Advanced Settings": "Pokročilá nastavení",
+ "Upload Audio": "Nahrát zvuk",
+ "Select the audio to convert.": "Vyberte zvuk, který chcete převést.",
+ "Custom Output Path": "Vlastní výstupní cesta",
+ "Export Format": "Formát exportu",
+ "Output Path": "Výstupní cesta",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Vymazat výstupy (vymaže všechny zvuky v datových zdrojích/audioverzích)",
+ "Select the format to export the audio.": "Vyberte formát pro export zvuku.",
+ "Split Audio": "Rozdělit zvuk",
+ "Clean Audio": "Čistý zvuk",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "Cesta, kam se uloží výstupní zvuk, ve výchozím nastavení v části assets/audios/output.wav",
+ "Autotune": "Automatické ladění",
+ "Clean Strength": "Čistá síla",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Rozdělte zvuk na části pro odvození, abyste v některých případech získali lepší výsledky.",
+ "Upscale Audio": "Vyšší rozlišení zvuku",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Aplikujte na odvození měkké automatické ladění, které se doporučuje pro převody zpěvu.",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Vyčistěte zvukový výstup pomocí algoritmů detekce šumu, které se doporučují pro mluvené zvuky.",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Zvyšte rozlišení zvuku na vyšší kvalitu, která se doporučuje pro zvuk nízké kvality. (Zpracování zvuku může trvat déle)",
+ "Formant Shifting": "Posun formantu",
+ "Default value is 1.0": "Výchozí hodnota je 1.0",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Povolte posun formantu. Používá se pro konverzi samec na samici a naopak.",
+ "Browse presets for formanting": "Procházení přednastavení pro formování",
+ "Pitch": "Hřiště",
+ "Quefrency for formant shifting": "Quefrency pro posun formantů",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Nastavte úroveň čištění na požadovaný zvuk, čím více ji zvýšíte, tím více se vyčistí, ale je možné, že zvuk bude více komprimovaný.",
+ "Presets are located in /assets/formant_shift folder": "Přednastavení jsou umístěna ve složce /assets/formant_shift",
+ "Filter Radius": "Poloměr filtru",
+ "Timbre for formant shifting": "Zabarvení pro posun formantu",
+ "Search Feature Ratio": "Poměr funkcí vyhledávání",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Nastavte výšku zvuku, čím vyšší hodnota, tím vyšší výška.",
+ "Volume Envelope": "Obálka svazku",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Vliv vyvíjený indexovým souborem; Vyšší hodnota odpovídá většímu vlivu. Volba nižších hodnot však může pomoci zmírnit artefakty přítomné ve zvuku.",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Pokud je číslo větší nebo rovno třem, použití mediánového filtrování shromážděných výsledků tónů má potenciál snížit dýchání.",
+ "Protect Voiceless Consonants": "Ochrana neznělých souhlásek",
+ "Convert": "Přeměnit",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Nahraďte nebo prolněte s obálkou hlasitosti výstupu. Čím blíže je poměr k 1, tím více je využita výstupní obálka.",
+ "Batch": "Várka",
+ "Pitch extraction algorithm": "Algoritmus extrakce výšky tónu",
+ "Export Audio": "Exportovat zvuk",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Algoritmus extrakce výšky tónu, který se má použít pro převod zvuku. Výchozí algoritmus je rmvpe, který je doporučen pro většinu případů.",
+ "Input Folder": "Vstupní složka",
+ "Enter input path": "Zadejte vstupní cestu",
+ "Output Folder": "Výstupní složka",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Chraňte odlišné souhlásky a zvuky dýchání, abyste zabránili elektroakustickému trhání a dalším artefaktům. Přetažením parametru na maximální hodnotu 0,5 získáte komplexní ochranu. Snížení této hodnoty však může snížit rozsah ochrany a zároveň potenciálně zmírnit efekt indexování.",
+ "Select the folder containing the audios to convert.": "Vyberte složku obsahující audio, které chcete převést.",
+ "Enter output path": "Zadejte výstupní cestu",
+ "Get information about the audio": "Získání informací o audiu",
+ "Select the folder where the output audios will be saved.": "Vyberte složku, do které se budou ukládat výstupní audia.",
+ "Voice Blender": "Hlasový mixér",
+ "## Voice Blender": "## Hlasový mixér",
+ "Fusion": "Fúze",
+ "You can also use a custom path.": "Můžete také použít vlastní cestu.",
+ "Drag and drop your model here": "Sem přetáhněte svůj model",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Vyberte dva hlasové modely, nastavte požadované procento prolnutí a prolněte je do zcela nového hlasu.",
+ "Blend Ratio": "Poměr prolnutí",
+ "Path to Model": "Cesta k modelu",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Úpravou polohy více na jednu nebo druhou stranu se model bude více podobat prvnímu nebo druhému.",
+ "Enter path to model": "Zadejte cestu k modelu",
+ "Inroduce the model information": "Úvodní informace o modelu",
+ "Model information to be placed": "Informace o modelu, které mají být umístěny",
+ "View": "Pohled",
+ "View model information": "Zobrazit informace o modelu",
+ "The information to be placed in the model (You can leave it blank or put anything).": "Informace, které mají být umístěny do modelu (Můžete nechat prázdné nebo vložit cokoli).",
+ "Introduce the model pth path": "Představení modelu pth dráhy",
+ "Model extraction": "Extrakce modelu",
+ "Pth file": "Soubor Pth",
+ "Extract F0 Curve": "Extrahovat křivku F0",
+ "Output of the pth file": "Výstup souboru pth",
+ "Model conversion": "Konverze modelu",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "Křivka f0 představuje změny základní frekvence hlasu v průběhu času a ukazuje, jak výška tónu stoupá a klesá.",
+ "Record": "Záznam",
+ "Record Screen": "Obrazovka záznamu",
+ "# How to Report an Issue on GitHub": "# Jak nahlásit problém na GitHubu",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Kliknutím na tlačítko \"Nahrát obrazovku\" níže zahájíte nahrávání problému, se kterým se setkáváte.",
+ "Stop Recording": "Zastavit nahrávání",
+ "See Model Information": "Zobrazit informace o modelu",
+ "Introduce the model .pth path": "Představení cesty k modelu .pth",
+ "## Download Model": "## Stáhnout model",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Přejděte na stránku [Problémy na GitHubu](https://github.com/IAHispano/Applio/issues) a klikněte na tlačítko \"Nové vydání\".",
+ "Model Link": "Odkaz na model",
+ "Download Model": "Stáhnout model",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Jakmile dokončíte nahrávání problému, klikněte na tlačítko \"Zastavit nahrávání\" (stejné tlačítko, ale štítek se mění v závislosti na tom, zda aktivně nahráváte nebo ne).",
+ "## Drop files": "## Přetáhněte soubory",
+ "Introduce the model link": "Představení odkazu na model",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Dokončete poskytnutou šablonu problému, nezapomeňte podle potřeby zahrnout podrobnosti, a pomocí části Datové zdroje nahrajte zaznamenaný soubor z předchozího kroku.",
+ "Search": "Hledání",
+ "## Search Model": "## Vyhledávací model",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Přetáhněte do tohoto prostoru soubor .pth a .index. Přetáhněte jeden a poté druhý.",
+ "## Download Pretrained Models": "## Stáhněte si předtrénované modely",
+ "We couldn't find models by that name.": "Modely s tímto názvem jsme nenašli.",
+ "Introduce the model name to search.": "Do vyhledávání zadejte název modelu.",
+ "And select the sampling rate": "A vyberte vzorkovací kmitočet.",
+ "Select the pretrained model you want to download.": "Vyberte předem natrénovaný model, který chcete stáhnout.",
+ "TTS Speed": "Rychlost TTS",
+ "Increase or decrease TTS speed.": "Zvyšte nebo snižte rychlost TTS.",
+ "Enter the text to synthesize.": "Zadejte text, který chcete sloučit.",
+ "TTS Voices": "Hlasy TTS",
+ "Upload a .txt file": "Nahrání souboru .txt",
+ "Input path for text file": "Vstupní cesta pro textový soubor",
+ "Select the TTS voice to use for the conversion.": "Vyberte hlas TTS, který chcete použít pro převod.",
+ "Text to Synthesize": "Text k syntéze",
+ "Enter text to synthesize": "Zadejte text pro syntézu",
+ "Output Path for TTS Audio": "Výstupní cesta pro zvuk TTS",
+ "Output Path for RVC Audio": "Výstupní cesta pro zvuk RVC",
+ "Enable Applio integration with Discord presence": "Povolte integraci Applio s přítomností Discordu",
+ "Theme": "Téma",
+ "It will activate the possibility of downloading models with a click from the website.": "Aktivuje možnost stahování modelů kliknutím z webu.",
+ "Enable Applio integration with applio.org/models using flask": "Povolte integraci Applio s applio.org/models pomocí baňky",
+ "Enable fake GPU": "Povolit falešný GPU",
+ "The path to the text file that contains content for text to speech.": "Cesta k textovému souboru, který obsahuje obsah pro převod textu na řeč.",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "Aktivuje možnost zobrazení aktuální aktivity Applio v Discordu.",
+ "Restart Applio": "Restartovat aplikaci Applio",
+ "Select the language you want to use. (Requires restarting Applio)": "Vyberte jazyk, který chcete používat. (Vyžaduje restartování aplikace Applio)",
+ "Select the theme you want to use. (Requires restarting Applio)": "Vyberte motiv, který chcete použít. (Vyžaduje restartování aplikace Applio)",
+ "Precision": "Přesnost",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Aktivuje kartu vlaku. Upozorňujeme však, že toto zařízení postrádá funkce GPU, a proto školení není podporováno. Tato možnost slouží pouze pro testovací účely. (Tato možnost restartuje Applio)",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "Výuka není v současné době podporována z důvodu absence GPU. Chcete-li aktivovat kartu školení, přejděte na kartu nastavení a povolte možnost \"Falešný GPU\".",
+ "Language": "Jazyk",
+ "Select the precision you want to use for training and inference.": "Vyberte přesnost, kterou chcete použít pro trénování a odvozování.",
+ "Update precision": "Přesnost aktualizace",
+ "Plugin Installer": "Instalátor pluginů",
+ "Version Checker": "Kontrolor verzí",
+ "Check for updates": "Kontrola aktualizací",
+ "Post-Process": "Následný proces",
+ "Drag your plugin.zip to install it": "Nainstalujte jej přetažením plugin.zip",
+ "Reverb": "Ozvěna",
+ "Reverb Damping": "Tlumení dozvuku",
+ "Apply reverb to the audio.": "Aplikujte na zvuk dozvuk.",
+ "Set the room size of the reverb.": "Nastavte velikost místnosti dozvuku.",
+ "Check which version of Applio is the latest to see if you need to update.": "Zkontrolujte, která verze aplikace Applio je nejnovější, abyste zjistili, zda potřebujete aktualizaci.",
+ "Reverb Room Size": "Velikost místnosti Reverb",
+ "Post-process the audio to apply effects to the output.": "Následné zpracování zvuku a použití efektů na výstup.",
+ "Reverb Wet Gain": "Reverb Wet Gain",
+ "Set the damping of the reverb.": "Nastavte tlumení dozvuku.",
+ "Reverb Dry Gain": "Reverb Suchý zisk",
+ "Set the wet gain of the reverb.": "Nastavte mokrý zesílení dozvuku.",
+ "Set the dry gain of the reverb.": "Nastavte suchý zisk dozvuku.",
+ "Reverb Freeze Mode": "Režim zmrazení dozvuku",
+ "Reverb Width": "Šířka dozvuku",
+ "Set the width of the reverb.": "Nastavte šířku dozvuku.",
+ "Limiter": "Omezovač",
+ "Set the freeze mode of the reverb.": "Nastavte režim zmrazení dozvuku.",
+ "Pitch Shift": "Posun výšky tónu",
+ "Apply pitch shift to the audio.": "Použijte posun výšky tónu na zvuk.",
+ "Pitch Shift Semitones": "Posun výšky tónu, půltóny",
+ "Set the pitch shift semitones.": "Nastavte půltóny posunu výšky tónu.",
+ "Apply limiter to the audio.": "Aplikujte omezovač na zvuk.",
+ "Limiter Threshold dB": "Práh omezovače dB",
+ "Gain": "Získat",
+ "Set the limiter threshold dB.": "Nastavte prahovou hodnotu omezovače dB.",
+ "Limiter Release Time": "Čas uvolnění omezovače",
+ "Apply gain to the audio.": "Aplikujte zesílení na zvuk.",
+ "Distortion": "Zkreslení",
+ "Set the limiter release time.": "Nastavte čas uvolnění omezovače.",
+ "Set the gain dB.": "Nastavte zesílení dB.",
+ "Chorus": "Refrén",
+ "Set the distortion gain.": "Nastavte zesílení zkreslení.",
+ "Distortion Gain": "Zesílení zkreslení",
+ "Apply distortion to the audio.": "Aplikujte zkreslení na zvuk.",
+ "Gain dB": "Zisk dB",
+ "Chorus Rate Hz": "Chorusová frekvence Hz",
+ "Chorus Depth": "Hloubka refrénu",
+ "Apply chorus to the audio.": "Aplikujte chorus na zvuk.",
+ "Set the chorus rate Hz.": "Nastavte frekvenci chorusu v Hz.",
+ "Set the chorus depth.": "Nastavte hloubku refrénu.",
+ "Chorus Center Delay ms": "Zpoždění chorusového středu ms",
+ "Set the chorus center delay ms.": "Nastaví zpoždění chorusu středu ms.",
+ "Chorus Feedback": "Zpětná vazba od sboru",
+ "Chorus Mix": "Chorus Mix",
+ "Set the chorus feedback.": "Nastavte zpětnou vazbu refrénu.",
+ "Bitcrush": "Bitcrush",
+ "Set the chorus mix.": "Nastavte mix refrénu.",
+ "Clipping": "Odstřižek",
+ "Set the bitcrush bit depth.": "Nastavte bitovou hloubku bitu bitcrush.",
+ "Bitcrush Bit Depth": "Bitcrush Bitová hloubka",
+ "Apply clipping to the audio.": "Použijte oříznutí na zvuk.",
+ "Clipping Threshold": "Práh oříznutí",
+ "Compressor": "Kompresor",
+ "Apply bitcrush to the audio.": "Aplikujte bitcrush na zvuk.",
+ "Apply compressor to the audio.": "Aplikujte kompresor na zvuk.",
+ "Compressor Threshold dB": "Práh kompresoru dB",
+ "Set the compressor threshold dB.": "Nastavte prahovou hodnotu kompresoru dB.",
+ "Set the clipping threshold.": "Nastavte práh oříznutí.",
+ "Compressor Ratio": "Poměr kompresoru",
+ "Compressor Attack ms": "Kompresor Attack ms",
+ "Set the compressor ratio.": "Nastavte poměr kompresoru.",
+ "Delay": "Zpoždění",
+ "Compressor Release ms": "Uvolnění kompresoru ms",
+ "Set the compressor release ms.": "Nastavte uvolnění kompresoru ms.",
+ "Apply delay to the audio.": "Aplikujte zpoždění na zvuk.",
+ "Set the compressor attack ms.": "Nastavte útok kompresoru ms.",
+ "Delay Seconds": "Zpoždění sekund",
+ "Set the delay seconds.": "Nastavte sekundy zpoždění.",
+ "Set the delay feedback.": "Nastavte zpětnou vazbu zpoždění.",
+ "Delay Feedback": "Zpožděná zpětná vazba",
+ "Delay Mix": "Delay Mix",
+ "Set the delay mix.": "Nastavte míchání zpoždění.",
+ "Select Custom Embedder": "Vyberte možnost Vlastní vložený modul",
+ "Custom Embedder": "Vlastní vkládač",
+ "Folder Name": "Název složky",
+ "Refresh embedders": "Obnovit vložené soubory",
+ "Upload .bin": "Nahrát .bin",
+ "model information": "Informace o modelu",
+ "Upload .json": "Nahrát .json",
+ "Model Creator": "Tvůrce modelů",
+ "Name of the model creator. (Default: Unknown)": "Jméno tvůrce modelu. (Výchozí: Neznámý)",
+ "Move files to custom embedder folder": "Přesunutí souborů do vlastní složky embedderu",
+ "Speaker ID": "ID mluvčího",
+ "Select the speaker ID to use for the conversion.": "Vyberte ID mluvčího, které chcete použít pro převod.",
+ "Set name": "Název sady",
+ "Model Author Name": "Model Jméno autora",
+ "The name that will appear in the model information.": "Název, který se objeví v informacích o modelu.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "Nastavte sílu automatického ladění - čím více ji zvýšíte, tím více se bude přichytávat k chromatické mřížce."
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/de_DE.json b/assets/i18n/languages/de_DE.json
new file mode 100644
index 0000000000000000000000000000000000000000..6aa87a86a61866bbc61b729cc45ef504c5c44def
--- /dev/null
+++ b/assets/i18n/languages/de_DE.json
@@ -0,0 +1,325 @@
+{
+ "Training": "Ausbildung",
+ "Processing": "Verarbeitung",
+ "Inference": "Schlussfolgerung",
+ "Output Information": "Informationen zur Ausgabe",
+ "Merge Audios": "Audios zusammenführen",
+ "Download": "Herunterladen",
+ "Settings": "Einstellungen",
+ "Preprocess": "Vorverarbeiten",
+ "The output information will be displayed here.": "Hier werden die Ausgabeinformationen angezeigt.",
+ "Audio Analyzer": "Audio-Analysator",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "Ein einfaches, qualitativ hochwertiges Sprachkonvertierungstool, das sich auf Benutzerfreundlichkeit und Leistung konzentriert.",
+ "Report a Bug": "Einen Fehler melden",
+ "This section contains some extra utilities that often may be in experimental phases.": "Dieser Abschnitt enthält einige zusätzliche Dienstprogramme, die sich oft in der experimentellen Phase befinden.",
+ "Model Information": "Informationen zum Modell",
+ "Process effects": "Auswirkungen des Prozesses",
+ "Model Name": "Modellname",
+ "Extra": "Extra",
+ "Name of the new model.": "Name des neuen Modells.",
+ "Dataset Path": "Pfad des Datensatzes",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "Es wird empfohlen, diese Option zu deaktivieren, wenn Ihr Datensatz bereits verarbeitet wurde.",
+ "Enter model name": "Geben Sie den Modellnamen ein",
+ "Path to the dataset folder.": "Pfad zum Datensatzordner.",
+ "Dataset Name": "Name des Datensatzes",
+ "Audio cutting": "Audio-Schnitt",
+ "Refresh Datasets": "Aktualisieren von Datensätzen",
+ "Dataset Creator": "Datensatz-Ersteller",
+ "Enter dataset name": "Geben Sie den Namen des Datensatzes ein",
+ "Name of the new dataset.": "Name des neuen Datasets.",
+ "Upload Audio Dataset": "Audio-Datensatz hochladen",
+ "Plugins": "Plugins",
+ "Sampling Rate": "Samplingrate",
+ "Enter dataset path": "Geben Sie den Datensatzpfad ein",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Die Audiodatei wurde dem Dataset erfolgreich hinzugefügt. Bitte klicken Sie auf die Schaltfläche Vorverarbeiten.",
+ "Extract": "Auszug",
+ "Model Architecture": "Modellarchitektur",
+ "Batch Size": "Losgröße",
+ "Embedder Model": "Embedder-Modell",
+ "Version of the model architecture.": "Version der Modellarchitektur.",
+ "The sampling rate of the audio files.": "Die Abtastrate der Audiodateien.",
+ "Preprocess Dataset": "Datensatz vorverarbeiten",
+ "Hop Length": "Hopfen-Länge",
+ "Model used for learning speaker embedding.": "Modell zum Erlernen der Lautsprechereinbettung.",
+ "Save Every Epoch": "Speichern Sie jede Epoche",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Gibt die Dauer an, die das System benötigt, um zu einer signifikanten Tonhöhenänderung überzugehen. Kleinere Hopfenlängen benötigen mehr Zeit für die Inferenz, führen aber tendenziell zu einer höheren Tongenauigkeit.",
+ "Determine at how many epochs the model will saved at.": "Bestimmen Sie, in wie vielen Epochen das Modell gespeichert wird.",
+ "Total Epoch": "Totale Epoche",
+ "Pretrained": "Vortrainiert",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Es ist ratsam, es an den verfügbaren VRAM Ihrer GPU anzupassen. Eine Einstellung von 4 bietet eine verbesserte Genauigkeit, aber eine langsamere Verarbeitung, während 8 schnellere und standardmäßige Ergebnisse liefert.",
+ "Save Only Latest": "Speichern Sie nur das Neueste",
+ "Save Every Weights": "Speichern Sie alle Gewichte",
+ "Specifies the overall quantity of epochs for the model training process.": "Gibt die Gesamtanzahl der Epochen für den Modelltrainingsprozess an.",
+ "Custom Pretrained": "Individuell vortrainiert",
+ "Pretrained Custom Settings": "Vortrainierte benutzerdefinierte Einstellungen",
+ "Refresh Custom Pretraineds": "Aktualisieren von benutzerdefinierten vortrainierten Elementen",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Wenn Sie diese Einstellung aktivieren, werden für die G- und D-Dateien nur die neuesten Versionen gespeichert, wodurch Speicherplatz gespart wird.",
+ "Upload Pretrained Model": "Vortrainiertes Modell hochladen",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Mit dieser Einstellung können Sie die Gewichtungen des Modells am Ende jeder Epoche speichern.",
+ "The file you dropped is not a valid pretrained file. Please try again.": "Bei der Datei, die Sie abgelegt haben, handelt es sich nicht um eine gültige vortrainierte Datei. Bitte versuchen Sie es erneut.",
+ "Pretrained G Path": "Benutzerdefiniertes vortrainiertes G",
+ "Pretrained D Path": "Benutzerdefiniertes vortrainiertes D",
+ "GPU Custom Settings": "Benutzerdefinierte GPU-Einstellungen",
+ "GPU Settings": "GPU-Einstellungen",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Klicken Sie auf die Schaltfläche Aktualisieren, um die vortrainierte Datei im Dropdown-Menü anzuzeigen.",
+ "GPU Number": "GPU-Nummer",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Die Verwendung von benutzerdefinierten vortrainierten Modellen kann zu besseren Ergebnissen führen, da die Auswahl der am besten geeigneten vortrainierten Modelle, die auf den jeweiligen Anwendungsfall zugeschnitten sind, die Leistung erheblich verbessern kann.",
+ "The GPU information will be displayed here.": "Hier werden die GPU-Informationen angezeigt.",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Legt erweiterte GPU-Einstellungen fest, die für Benutzer mit besserer GPU-Architektur empfohlen werden.",
+ "0 to ∞ separated by -": "0 bis ∞ getrennt durch -",
+ "GPU Information": "GPU-Informationen",
+ "Pitch Guidance": "Anleitung für die Tonhöhe",
+ "Use CPU": "CPU verwenden",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "Die Anzahl der CPU-Kerne, die bei der Extraktion verwendet werden sollen. Die Standardeinstellung sind Ihre CPU-Kerne, was in den meisten Fällen empfohlen wird.",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "Die Anzahl der CPU-Kerne, die in der Vorverarbeitung verwendet werden sollen. Die Standardeinstellung sind Ihre CPU-Kerne, was in den meisten Fällen empfohlen wird.",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Geben Sie die Anzahl der GPUs an, die Sie für die Vorverarbeitung verwenden möchten, indem Sie sie durch Bindestriche (-) getrennt eingeben. Im Moment hat die Verwendung von Multi-GPUs keine signifikanten Auswirkungen.",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Geben Sie die Anzahl der GPUs an, die Sie zum Extrahieren verwenden möchten, indem Sie sie durch Bindestriche (-) getrennt eingeben.",
+ "Force the use of CPU for training.": "Erzwingen Sie die Verwendung der CPU für das Training.",
+ "Extract Features": "Merkmale extrahieren",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Verwenden Sie vortrainierte Modelle, wenn Sie Ihre eigenen Modelle trainieren. Dieser Ansatz verkürzt die Schulungsdauer und verbessert die Gesamtqualität.",
+ "Cache Dataset in GPU": "Cache-Dataset in GPU",
+ "Index Algorithm": "Index-Algorithmus",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Wir priorisieren das Ausführen der Modellextraktion auf der GPU, um eine schnellere Leistung zu erzielen. Wenn Sie lieber die CPU verwenden möchten, lassen Sie das GPU-Feld einfach leer.",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Durch den Einsatz von Tonhöhenführung wird es möglich, die Intonation der Originalstimme, einschließlich ihrer Tonhöhe, zu spiegeln. Diese Funktion ist besonders wertvoll für Gesang und andere Szenarien, in denen die Beibehaltung der ursprünglichen Melodie oder des Tonhöhenmusters unerlässlich ist.",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Wir priorisieren das Ausführen der Modellvorverarbeitung auf der GPU, um eine schnellere Leistung zu erzielen. Wenn Sie lieber die CPU verwenden möchten, lassen Sie das GPU-Feld einfach leer.",
+ "Overtraining Detector": "Übertrainings-Detektor",
+ "Cache the dataset in GPU memory to speed up the training process.": "Zwischenspeichern Sie das Dataset im GPU-Speicher, um den Trainingsprozess zu beschleunigen.",
+ "Overtraining Threshold": "Schwellenwert für Übertraining",
+ "Fresh Training": "Frisches Training",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans ist ein Clustering-Algorithmus, der das Dataset in K-Cluster unterteilt. Diese Einstellung ist besonders nützlich für große Datasets.",
+ "Start Training": "Training starten",
+ "Overtraining Detector Settings": "Einstellungen für den Übertrainingsdetektor",
+ "Stop Training": "Training beenden",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Legen Sie die maximale Anzahl von Epochen fest, für die das Modell das Training beenden soll, wenn keine Verbesserung festgestellt wird.",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Erkennen Sie ein Übertraining, um zu verhindern, dass das Modell die Trainingsdaten zu gut lernt und die Fähigkeit zur Generalisierung auf neue Daten verliert.",
+ "Export Model": "Modell exportieren",
+ "Generate Index": "Index generieren",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "Aktivieren Sie diese Einstellung nur, wenn Sie ein neues Modell von Grund auf neu trainieren oder das Training neu starten. Löscht alle zuvor generierten Gewichtungen und Tensorboard-Protokolle.",
+ "Exported Pth file": "Exportierte P-th-Datei",
+ "Upload": "Hochladen",
+ "Exported Index file": "Exportierte Indexdatei",
+ "Select the index file to be exported": "Wählen Sie die zu exportierende Indexdatei aus",
+ "Select the pth file to be exported": "Wählen Sie die p-te Datei aus, die exportiert werden soll",
+ "Index File": "Index-Datei",
+ "Refresh": "Auffrischen",
+ "Voice Model": "Stimmmodell",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "Der Button 'Hochladen' ist nur für Google Colab: Lädt die exportierten Dateien in den ApplioExported Ordner in Ihrem Google Drive hoch.",
+ "Select the voice model to use for the conversion.": "Wählen Sie das Sprachmodell aus, das für die Konvertierung verwendet werden soll.",
+ "Unload Voice": "Stimme entladen",
+ "Single": "Ledig",
+ "Upload Audio": "Audio hochladen",
+ "Select Audio": "Audio auswählen",
+ "Advanced Settings": "Erweiterte Einstellungen",
+ "Select the index file to use for the conversion.": "Wählen Sie die Indexdatei aus, die für die Konvertierung verwendet werden soll.",
+ "Select the audio to convert.": "Wählen Sie das Audio aus, das konvertiert werden soll.",
+ "Custom Output Path": "Benutzerdefinierter Ausgabepfad",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Clear Outputs (Löscht alle Audios in Assets/Audios)",
+ "Output Path": "Ausgabepfad",
+ "Export Format": "Format exportieren",
+ "Split Audio": "Audio teilen",
+ "Autotune": "Autotuning",
+ "Select the format to export the audio.": "Wählen Sie das Format aus, in das das Audio exportiert werden soll.",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "Der Pfad, in dem die Audioausgabe gespeichert wird, standardmäßig in assets/audios/output.wav",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Teilen Sie die Audiodaten für die Inferenz in Blöcke auf, um in einigen Fällen bessere Ergebnisse zu erzielen.",
+ "Clean Audio": "Sauberes Audio",
+ "Clean Strength": "Saubere Festigkeit",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Wenden Sie ein weiches Autotune auf Ihre Inferenzen an, das für Gesangskonvertierungen empfohlen wird.",
+ "Upscale Audio": "Gehobenes Audio",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Reinigen Sie Ihre Audioausgabe mit Rauscherkennungsalgorithmen, die für sprechende Audios empfohlen werden.",
+ "Formant Shifting": "Formant-Verschiebung",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Skalieren Sie den Ton auf eine höhere Qualität, empfohlen für Audiodaten mit geringer Qualität. (Die Verarbeitung des Audiomaterials kann länger dauern)",
+ "Browse presets for formanting": "Durchsuchen von Presets für Formanting",
+ "Presets are located in /assets/formant_shift folder": "Presets befinden sich im Ordner /assets/formant_shift",
+ "Pitch": "Pech",
+ "Default value is 1.0": "Der Standardwert ist 1,0",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Aktivieren Sie das Formant-Shifting. Wird für die Umwandlung von Stecker zu Buchse und umgekehrt verwendet.",
+ "Quefrency for formant shifting": "Quefrency für Formantverschiebung",
+ "Timbre for formant shifting": "Klangfarbe für Formantenverschiebung",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Stellen Sie den Bereinigungspegel auf den gewünschten Ton ein, je mehr Sie ihn erhöhen, desto mehr wird er bereinigt, aber es ist möglich, dass der Ton stärker komprimiert wird.",
+ "Filter Radius": "Radius filtern",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Stellen Sie die Tonhöhe des Audiomaterials ein, je höher der Wert, desto höher die Tonhöhe.",
+ "Search Feature Ratio": "Verhältnis der Suchfunktion",
+ "Volume Envelope": "Lautstärke-Hüllkurve",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Einfluss, der von der Indexdatei ausgeübt wird; Ein höherer Wert entspricht einem größeren Einfluss. Die Entscheidung für niedrigere Werte kann jedoch dazu beitragen, Artefakte in der Audiodatei zu verringern.",
+ "Convert": "Umwandeln",
+ "Batch": "Stapel",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Ersetzen oder mischen Sie mit der Lautstärkehüllkurve des Ausgangs. Je näher das Verhältnis an 1 liegt, desto mehr wird die Ausgangshüllkurve genutzt.",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Wenn die Zahl größer oder gleich drei ist, kann die Verwendung von Medianfiltern auf die gesammelten Tonergebnisse die Atmung verringern.",
+ "Pitch extraction algorithm": "Algorithmus zur Extraktion der Tonhöhe",
+ "Export Audio": "Audio exportieren",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Algorithmus zur Extraktion der Tonhöhe, der für die Audiokonvertierung verwendet werden soll. Der Standardalgorithmus ist rmvpe, der in den meisten Fällen empfohlen wird.",
+ "Input Folder": "Eingabe-Ordner",
+ "Protect Voiceless Consonants": "Schützen Sie stimmlose Konsonanten",
+ "Select the folder containing the audios to convert.": "Wählen Sie den Ordner aus, der die zu konvertierenden Audios enthält.",
+ "Output Folder": "Ausgabe-Ordner",
+ "Enter input path": "Eingabepfad eingeben",
+ "Enter output path": "Geben Sie den Ausgabepfad ein",
+ "Get information about the audio": "Abrufen von Informationen über das Audio",
+ "Select the folder where the output audios will be saved.": "Wählen Sie den Ordner aus, in dem die ausgegebenen Audiodateien gespeichert werden sollen.",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Schützen Sie unterschiedliche Konsonanten und Atemgeräusche, um elektroakustisches Reißen und andere Artefakte zu verhindern. Das Ziehen des Parameters auf den Maximalwert von 0,5 bietet umfassenden Schutz. Das Verringern dieses Werts kann jedoch den Umfang des Schutzes verringern und gleichzeitig den Indizierungseffekt möglicherweise abschwächen.",
+ "Blend Ratio": "Mischverhältnis",
+ "Fusion": "Verschmelzung",
+ "You can also use a custom path.": "Sie können auch einen benutzerdefinierten Pfad verwenden.",
+ "Path to Model": "Pfad zum Modell",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Wählen Sie zwei Stimmmodelle aus, legen Sie den gewünschten Mischprozentsatz fest und mischen Sie sie zu einer völlig neuen Stimme.",
+ "Inroduce the model information": "Geben Sie die Modellinformationen ein",
+ "Enter path to model": "Geben Sie den Pfad zum Modell ein",
+ "Model information to be placed": "Zu platzierende Modellinformationen",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Wenn Sie die Position mehr in Richtung der einen oder anderen Seite anpassen, wird das Modell dem ersten oder zweiten Modell ähnlicher.",
+ "## Voice Blender": "## Voice Blender",
+ "View": "Ansehen",
+ "Introduce the model pth path": "Einführung des Modell-PTH-Pfads",
+ "The information to be placed in the model (You can leave it blank or put anything).": "Die Informationen, die in das Modell eingefügt werden sollen (Sie können es leer lassen oder etwas anderes einfügen).",
+ "Model extraction": "Extraktion des Modells",
+ "Pth file": "P-th-Datei",
+ "Voice Blender": "Voice Blender",
+ "View model information": "Anzeigen von Modellinformationen",
+ "Model conversion": "Modell-Konvertierung",
+ "Output of the pth file": "Ausgabe der p-ten Datei",
+ "Drag and drop your model here": "Ziehen Sie Ihr Modell hierher und legen Sie es dort ab",
+ "Extract F0 Curve": "F0-Kurve extrahieren",
+ "# How to Report an Issue on GitHub": "# So melden Sie ein Problem auf GitHub",
+ "Record": "Aufzeichnung",
+ "Record Screen": "Bildschirm aufnehmen",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Klicken Sie unten auf die Schaltfläche \"Bildschirm aufnehmen\", um mit der Aufzeichnung des Problems zu beginnen.",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "Die f0-Kurve stellt die Schwankungen der Grundfrequenz einer Stimme im Laufe der Zeit dar und zeigt, wie die Tonhöhe steigt und fällt.",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Gehen Sie zu [GitHub Issues](https://github.com/IAHispano/Applio/issues) und klicken Sie auf die Schaltfläche \"Neues Problem\".",
+ "Stop Recording": "Aufzeichnung stoppen",
+ "Model Link": "Modell-Link",
+ "See Model Information": "Siehe Modellinformationen",
+ "## Download Model": "## Modell herunterladen",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Wenn Sie mit der Aufzeichnung des Problems fertig sind, klicken Sie auf die Schaltfläche \"Aufzeichnung stoppen\" (dieselbe Schaltfläche, aber die Beschriftung ändert sich, je nachdem, ob Sie aktiv aufnehmen oder nicht).",
+ "Introduce the model link": "Einführung des Modelllinks",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Füllen Sie die bereitgestellte Problemvorlage aus, stellen Sie sicher, dass Sie bei Bedarf Details angeben, und verwenden Sie den Abschnitt \"Assets\", um die aufgezeichnete Datei aus dem vorherigen Schritt hochzuladen.",
+ "Introduce the model .pth path": "Einführung des Modells .pth path",
+ "## Drop files": "## Dateien ablegen",
+ "Search": "Suchen",
+ "## Search Model": "## Modell suchen",
+ "Introduce the model name to search.": "Geben Sie den Modellnamen für die Suche ein.",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Ziehen Sie Ihre .pth-Datei und .index-Datei in diesen Bereich. Ziehen Sie eine und dann die andere.",
+ "## Download Pretrained Models": "## Vortrainierte Modelle herunterladen",
+ "TTS Speed": "TTS-Geschwindigkeit",
+ "Select the pretrained model you want to download.": "Wählen Sie das vortrainierte Modell aus, das Sie herunterladen möchten.",
+ "We couldn't find models by that name.": "Wir konnten keine Modelle mit diesem Namen finden.",
+ "Download Model": "Modell herunterladen",
+ "Increase or decrease TTS speed.": "Erhöhen oder verringern Sie die TTS-Geschwindigkeit.",
+ "Enter the text to synthesize.": "Geben Sie den zu synthetisierenden Text ein.",
+ "Text to Synthesize": "Zu synthetisierender Text",
+ "And select the sampling rate": "Und wählen Sie die Abtastrate aus.",
+ "Upload a .txt file": "Laden Sie eine .txt Datei hoch",
+ "Select the TTS voice to use for the conversion.": "Wählen Sie die TTS-Stimme aus, die für die Konvertierung verwendet werden soll.",
+ "Input path for text file": "Eingabepfad für Textdatei",
+ "The path to the text file that contains content for text to speech.": "Der Pfad zu der Textdatei, die Inhalte für Text-to-Speech enthält.",
+ "TTS Voices": "TTS-Stimmen",
+ "Output Path for TTS Audio": "Ausgabepfad für TTS-Audio",
+ "Output Path for RVC Audio": "Ausgangspfad für RVC-Audio",
+ "Enter text to synthesize": "Geben Sie den zu synthetisierenden Text ein",
+ "Theme": "Thema",
+ "Enable Applio integration with Discord presence": "Aktivieren Sie die Applio-Integration mit Discord-Präsenz",
+ "Enable fake GPU": "Gefälschte GPU aktivieren",
+ "Restart Applio": "Starten Sie Applio neu",
+ "Language": "Sprache",
+ "Enable Applio integration with applio.org/models using flask": "Aktivieren der Applio-Integration mit applio.org/models mithilfe von Flask",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "Damit wird die Möglichkeit aktiviert, die aktuelle Applio-Aktivität in Discord anzuzeigen.",
+ "Select the theme you want to use. (Requires restarting Applio)": "Wählen Sie das Design aus, das Sie verwenden möchten. (Erfordert einen Neustart von Applio)",
+ "It will activate the possibility of downloading models with a click from the website.": "Es wird die Möglichkeit aktiviert, Modelle mit einem Klick von der Website herunterzuladen.",
+ "Precision": "Präzision",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Aktiviert die Registerkarte \"Trainieren\". Bitte beachten Sie jedoch, dass diesem Gerät GPU-Funktionen fehlen, sodass das Training nicht unterstützt wird. Diese Option dient nur zu Testzwecken. (Diese Option startet Applio neu)",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "Das Training wird derzeit nicht unterstützt, da keine GPU vorhanden ist. Um die Registerkarte \"Training\" zu aktivieren, navigieren Sie zur Registerkarte \"Einstellungen\" und aktivieren Sie die Option \"Gefälschte GPU\".",
+ "Update precision": "Genauigkeit aktualisieren",
+ "Plugin Installer": "Plugin-Installer",
+ "Select the language you want to use. (Requires restarting Applio)": "Wählen Sie die Sprache aus, die Sie verwenden möchten. (Erfordert einen Neustart von Applio)",
+ "Select the precision you want to use for training and inference.": "Wählen Sie die Genauigkeit aus, die Sie für Training und Rückschluss verwenden möchten.",
+ "Reverb": "Hall",
+ "Version Checker": "Versionsprüfung",
+ "Drag your plugin.zip to install it": "Ziehen Sie Ihre plugin.zip, um sie zu installieren.",
+ "Check for updates": "Nach Updates suchen",
+ "Post-Process": "Nachbearbeitung",
+ "Check which version of Applio is the latest to see if you need to update.": "Überprüfen Sie, welche Version von Applio die neueste ist, um zu sehen, ob Sie ein Update benötigen.",
+ "Post-process the audio to apply effects to the output.": "Bearbeiten Sie die Audiodaten nach, um Effekte auf die Ausgabe anzuwenden.",
+ "Apply reverb to the audio.": "Wenden Sie Hall auf das Audio an.",
+ "Reverb Damping": "Reverb-Dämpfung",
+ "Set the room size of the reverb.": "Legen Sie die Raumgröße des Halls fest.",
+ "Set the damping of the reverb.": "Stellen Sie die Dämpfung des Halls ein.",
+ "Reverb Room Size": "Größe des Hallraums",
+ "Set the wet gain of the reverb.": "Stellen Sie den Wet-Gain des Halls ein.",
+ "Set the dry gain of the reverb.": "Stellen Sie den Dry Gain des Halls ein.",
+ "Reverb Width": "Breite des Halls",
+ "Set the width of the reverb.": "Legen Sie die Breite des Halls fest.",
+ "Reverb Freeze Mode": "Reverb-Freeze-Modus",
+ "Pitch Shift": "Tonhöhen-Verschiebung",
+ "Limiter": "Begrenzer",
+ "Pitch Shift Semitones": "Tonhöhenverschiebung Halbtöne",
+ "Apply pitch shift to the audio.": "Wenden Sie die Tonhöhenverschiebung auf das Audio an.",
+ "Set the pitch shift semitones.": "Stellen Sie die Halbtöne für die Tonhöhenverschiebung ein.",
+ "Apply limiter to the audio.": "Wenden Sie einen Limiter auf das Audio an.",
+ "Limiter Threshold dB": "Limiter-Schwellenwert dB",
+ "Set the freeze mode of the reverb.": "Stellen Sie den Freeze-Modus des Halls ein.",
+ "Set the limiter threshold dB.": "Stellen Sie den Limiter-Schwellenwert dB ein.",
+ "Limiter Release Time": "Release-Zeit des Limiters",
+ "Gain": "Gewinnen",
+ "Reverb Wet Gain": "Reverb Wet Gain",
+ "Distortion": "Verzerrung",
+ "Gain dB": "Verstärkung dB",
+ "Reverb Dry Gain": "Reverb Dry Gain",
+ "Apply gain to the audio.": "Wenden Sie Verstärkung auf das Audio an.",
+ "Set the limiter release time.": "Stellen Sie die Freigabezeit des Limiters ein.",
+ "Set the gain dB.": "Stellen Sie die Verstärkung dB ein.",
+ "Chorus": "Chor",
+ "Apply distortion to the audio.": "Wenden Sie Verzerrungen auf das Audio an.",
+ "Distortion Gain": "Verzerrungsverstärkung",
+ "Set the distortion gain.": "Stellen Sie die Verzerrungsverstärkung ein.",
+ "Apply chorus to the audio.": "Wenden Sie Chorus auf das Audio an.",
+ "Chorus Rate Hz": "Chorus-Rate Hz",
+ "Set the chorus rate Hz.": "Stellen Sie die Chorusrate Hz ein.",
+ "Chorus Depth": "Chorus-Tiefe",
+ "Set the chorus depth.": "Legen Sie die Chorus-Tiefe fest.",
+ "Chorus Feedback": "Chorus-Rückkopplung",
+ "Chorus Center Delay ms": "Chorus Center Verzögerung ms",
+ "Chorus Mix": "Chorus-Mischung",
+ "Set the chorus center delay ms.": "Stellen Sie das Chorus Center Delay ms ein.",
+ "Set the chorus feedback.": "Stellen Sie das Chorus-Feedback ein.",
+ "Set the chorus mix.": "Legen Sie den Chorus-Mix fest.",
+ "Clipping": "Ausschnitt",
+ "Apply bitcrush to the audio.": "Wenden Sie Bitcrush auf das Audio an.",
+ "Set the bitcrush bit depth.": "Legen Sie die Bitcrush-Bittiefe fest.",
+ "Bitcrush Bit Depth": "Bitcrush Bit-Tiefe",
+ "Clipping Threshold": "Clipping-Schwellenwert",
+ "Apply clipping to the audio.": "Wenden Sie Clipping auf das Audio an.",
+ "Compressor": "Kompressor",
+ "Set the clipping threshold.": "Legen Sie den Clipping-Schwellenwert fest.",
+ "Bitcrush": "Bitcrush",
+ "Set the compressor threshold dB.": "Stellen Sie den Kompressor-Schwellenwert dB ein.",
+ "Compressor Attack ms": "Kompressor Attack ms",
+ "Compressor Ratio": "Kompressor-Verhältnis",
+ "Set the compressor ratio.": "Stellen Sie das Kompressorverhältnis ein.",
+ "Apply compressor to the audio.": "Wenden Sie den Kompressor auf das Audiomaterial an.",
+ "Delay": "Verzögerung",
+ "Set the compressor attack ms.": "Stellen Sie den Kompressor-Attack ms ein.",
+ "Compressor Release ms": "Kompressor Release ms",
+ "Compressor Threshold dB": "Kompressor-Schwellenwert dB",
+ "Set the compressor release ms.": "Stellen Sie den Kompressor-Release ms ein.",
+ "Delay Seconds": "Sekunden verzögern",
+ "Apply delay to the audio.": "Wenden Sie eine Verzögerung auf das Audio an.",
+ "Delay Feedback": "Verzögerungs-Feedback",
+ "Set the delay seconds.": "Stellen Sie die Verzögerungssekunden ein.",
+ "Delay Mix": "Delay-Mix",
+ "Set the delay feedback.": "Stellen Sie das Delay-Feedback ein.",
+ "Custom Embedder": "Benutzerdefinierter Einbetter",
+ "Set the delay mix.": "Stellen Sie den Delay-Mix ein.",
+ "Select Custom Embedder": "Benutzerdefinierter Embedder auswählen",
+ "Refresh embedders": "Aktualisieren von Embeddern",
+ "Folder Name": "Name des Ordners",
+ "Upload .bin": ".bin hochladen",
+ "Upload .json": ".json hochladen",
+ "Model Creator": "Modell-Ersteller",
+ "model information": "Informationen zum Modell",
+ "Speaker ID": "Sprecher-ID",
+ "Name of the model creator. (Default: Unknown)": "Name des Modellerstellers. (Standardeinstellung: Unbekannt)",
+ "Select the speaker ID to use for the conversion.": "Wählen Sie die Lautsprecher-ID aus, die für die Konvertierung verwendet werden soll.",
+ "Move files to custom embedder folder": "Verschieben von Dateien in einen benutzerdefinierten Embedder-Ordner",
+ "Model Author Name": "Name des Modellautors",
+ "Set name": "Name des Sets",
+ "The name that will appear in the model information.": "Der Name, der in den Modellinformationen angezeigt wird.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "Stellen Sie die Autotune-Stärke ein - je mehr Sie sie erhöhen, desto mehr rastet sie am chromatischen Raster ein."
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/el_EL.json b/assets/i18n/languages/el_EL.json
new file mode 100644
index 0000000000000000000000000000000000000000..4ee74806ff2a8a5a43c8f4f3d89ff7acd1545de6
--- /dev/null
+++ b/assets/i18n/languages/el_EL.json
@@ -0,0 +1,325 @@
+{
+ "Inference": "Συμπέρασμα",
+ "Training": "Εκπαίδευση",
+ "Processing": "Επεξεργασία",
+ "Extra": "Επιπλέον",
+ "Audio Analyzer": "Αναλυτής ήχου",
+ "Settings": "Ρυθμίσεις",
+ "Plugins": "Πρόσθετα",
+ "Merge Audios": "Συγχώνευση ήχων",
+ "Download": "Καταφόρτωση",
+ "Output Information": "Πληροφορίες εξόδου",
+ "Preprocess": "Προεπεξεργασία",
+ "Report a Bug": "Αναφορά σφάλματος",
+ "Model Information": "Πληροφορίες μοντέλου",
+ "The output information will be displayed here.": "Οι πληροφορίες εξόδου θα εμφανιστούν εδώ.",
+ "Audio cutting": "Κοπή ήχου",
+ "Model Name": "Όνομα μοντέλου",
+ "Process effects": "Επιπτώσεις της διαδικασίας",
+ "Name of the new model.": "Όνομα του νέου μοντέλου.",
+ "Dataset Path": "Διαδρομή συνόλου δεδομένων",
+ "Enter model name": "Εισαγάγετε το όνομα μοντέλου",
+ "Dataset Creator": "Δημιουργός συνόλου δεδομένων",
+ "Name of the new dataset.": "Όνομα του νέου συνόλου δεδομένων.",
+ "Dataset Name": "Όνομα συνόλου δεδομένων",
+ "Refresh Datasets": "Ανανέωση συνόλων δεδομένων",
+ "Path to the dataset folder.": "Διαδρομή προς το φάκελο συνόλου δεδομένων.",
+ "Enter dataset name": "Εισαγωγή ονόματος συνόλου δεδομένων",
+ "Enter dataset path": "Εισαγωγή διαδρομής συνόλου δεδομένων",
+ "This section contains some extra utilities that often may be in experimental phases.": "Αυτή η ενότητα περιέχει μερικά επιπλέον βοηθητικά προγράμματα που συχνά μπορεί να βρίσκονται σε πειραματικές φάσεις.",
+ "Sampling Rate": "Ρυθμός δειγματοληψίας",
+ "Upload Audio Dataset": "Μεταφόρτωση συνόλου δεδομένων ήχου",
+ "Extract": "Απόσπασμα",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Το αρχείο ήχου προστέθηκε με επιτυχία στο σύνολο δεδομένων. Κάντε κλικ στο κουμπί προεπεξεργασίας.",
+ "Model Architecture": "Πρότυπη Αρχιτεκτονική",
+ "Embedder Model": "Μοντέλο ενσωμάτωσης",
+ "Hop Length": "Μήκος λυκίσκου",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "Συνιστάται να απενεργοποιήσετε αυτήν την επιλογή εάν το σύνολο δεδομένων σας έχει ήδη υποβληθεί σε επεξεργασία.",
+ "Version of the model architecture.": "Έκδοση της αρχιτεκτονικής μοντέλου.",
+ "Preprocess Dataset": "Σύνολο δεδομένων προεπεξεργασίας",
+ "The sampling rate of the audio files.": "Ο ρυθμός δειγματοληψίας των αρχείων ήχου.",
+ "Batch Size": "Μέγεθος παρτίδας",
+ "Total Epoch": "Συνολική Εποχή",
+ "Save Every Epoch": "Σώστε κάθε εποχή",
+ "Model used for learning speaker embedding.": "Μοντέλο που χρησιμοποιείται για την εκμάθηση ενσωμάτωσης ηχείων.",
+ "Pretrained": "Προεκπαιδευμένο",
+ "Save Only Latest": "Αποθήκευση μόνο των τελευταίων",
+ "Save Every Weights": "Εξοικονομήστε κάθε βάρος",
+ "Determine at how many epochs the model will saved at.": "Προσδιορίστε σε πόσες εποχές θα αποθηκευτεί το μοντέλο.",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "Ένα απλό, υψηλής ποιότητας εργαλείο μετατροπής φωνής που επικεντρώνεται στην ευκολία χρήσης και απόδοσης.",
+ "Custom Pretrained": "Προσαρμοσμένο προεκπαιδευμένο",
+ "Upload Pretrained Model": "Μεταφόρτωση προεκπαιδευμένου μοντέλου",
+ "Refresh Custom Pretraineds": "Ανανέωση προσαρμοσμένων προεκπαιδευμένων",
+ "Specifies the overall quantity of epochs for the model training process.": "Καθορίζει τη συνολική ποσότητα εποχών για τη διαδικασία εκπαίδευσης μοντέλου.",
+ "GPU Settings": "Ρυθμίσεις GPU",
+ "Pretrained Custom Settings": "Προεκπαιδευμένες προσαρμοσμένες ρυθμίσεις",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Συνιστάται να το ευθυγραμμίσετε με τη διαθέσιμη VRAM της GPU σας. Η ρύθμιση 4 προσφέρει βελτιωμένη ακρίβεια αλλά πιο αργή επεξεργασία, ενώ το 8 παρέχει ταχύτερα και τυπικά αποτελέσματα.",
+ "The file you dropped is not a valid pretrained file. Please try again.": "Το αρχείο που απορρίψατε δεν είναι έγκυρο προεκπαιδευμένο αρχείο. Παρακαλώ προσπαθήστε ξανά.",
+ "Pretrained D Path": "Προσαρμοσμένο προεκπαιδευμένο D",
+ "Pretrained G Path": "Προσαρμοσμένο Προεκπαιδευμένο G",
+ "GPU Number": "Αριθμός GPU",
+ "GPU Custom Settings": "Προσαρμοσμένες ρυθμίσεις GPU",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Υποδηλώνει τη διάρκεια που χρειάζεται το σύστημα για να μεταβεί σε μια σημαντική αλλαγή βήματος. Τα μικρότερα μήκη λυκίσκου απαιτούν περισσότερο χρόνο για την εξαγωγή συμπερασμάτων, αλλά τείνουν να αποδίδουν υψηλότερη ακρίβεια βήματος.",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Αυτή η ρύθμιση σάς επιτρέπει να αποθηκεύετε τα βάρη του μοντέλου στο τέλος κάθε εποχής.",
+ "0 to ∞ separated by -": "0 έως ∞ διαχωρισμένα με -",
+ "GPU Information": "Πληροφορίες GPU",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Κάντε κλικ στο κουμπί ανανέωσης για να δείτε το προεκπαιδευμένο αρχείο στο αναπτυσσόμενο μενού.",
+ "Use CPU": "Χρήση CPU",
+ "Pitch Guidance": "Καθοδήγηση βήματος",
+ "The GPU information will be displayed here.": "Οι πληροφορίες GPU θα εμφανιστούν εδώ.",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Ορίζει προηγμένες ρυθμίσεις GPU, οι οποίες συνιστώνται για χρήστες με καλύτερη αρχιτεκτονική GPU.",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Η ενεργοποίηση αυτής της ρύθμισης θα έχει ως αποτέλεσμα τα αρχεία G και D να αποθηκεύουν μόνο τις πιο πρόσφατες εκδόσεις τους, εξοικονομώντας αποτελεσματικά χώρο αποθήκευσης.",
+ "Force the use of CPU for training.": "Αναγκάστε τη χρήση της CPU για εκπαίδευση.",
+ "Extract Features": "Εξαγωγή χαρακτηριστικών",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "Ο αριθμός των πυρήνων CPU που θα χρησιμοποιηθούν στην προδιεργασία. Η προεπιλεγμένη ρύθμιση είναι οι πυρήνες της CPU, η οποία συνιστάται για τις περισσότερες περιπτώσεις.",
+ "Index Algorithm": "Αλγόριθμος ευρετηρίου",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "Ο αριθμός των πυρήνων CPU που θα χρησιμοποιηθούν στη διαδικασία εξαγωγής. Η προεπιλεγμένη ρύθμιση είναι οι πυρήνες της CPU, η οποία συνιστάται για τις περισσότερες περιπτώσεις.",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Η χρήση προσαρμοσμένων προεκπαιδευμένων μοντέλων μπορεί να οδηγήσει σε ανώτερα αποτελέσματα, καθώς η επιλογή των καταλληλότερων προεκπαιδευμένων μοντέλων προσαρμοσμένων στη συγκεκριμένη περίπτωση χρήσης μπορεί να βελτιώσει σημαντικά την απόδοση.",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Καθορίστε τον αριθμό των GPU που θέλετε να χρησιμοποιήσετε για εξαγωγή εισάγοντάς τις διαχωρισμένες με παύλες (-).",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Καθορίστε τον αριθμό των GPU που θέλετε να χρησιμοποιήσετε για προεπεξεργασία εισάγοντάς τις διαχωρισμένες με παύλες (-). Προς το παρόν, η χρήση πολλαπλών GPU δεν θα έχει σημαντική επίδραση.",
+ "Cache Dataset in GPU": "Σύνολο δεδομένων προσωρινής μνήμης σε GPU",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Χρησιμοποιήστε προ-εκπαιδευμένα μοντέλα όταν εκπαιδεύετε τα δικά σας. Αυτή η προσέγγιση μειώνει τη διάρκεια της κατάρτισης και βελτιώνει τη συνολική ποιότητα.",
+ "Overtraining Detector": "Ανιχνευτής υπερβολικής προπόνησης",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Δίνουμε προτεραιότητα στην εκτέλεση της προεπεξεργασίας μοντέλου στη GPU για ταχύτερη απόδοση. Εάν προτιμάτε να χρησιμοποιήσετε τη CPU, απλώς αφήστε κενό το πεδίο GPU.",
+ "Overtraining Threshold": "Όριο υπερβολικής προπόνησης",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Δίνουμε προτεραιότητα στην εκτέλεση της εξαγωγής μοντέλου στη GPU για ταχύτερη απόδοση. Εάν προτιμάτε να χρησιμοποιήσετε τη CPU, απλώς αφήστε κενό το πεδίο GPU.",
+ "Overtraining Detector Settings": "Ρυθμίσεις ανιχνευτή υπερβολικής προπόνησης",
+ "Start Training": "Ξεκινήστε την προπόνηση",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Χρησιμοποιώντας καθοδήγηση τόνου, καθίσταται εφικτό να αντικατοπτρίζεται ο τόνος της αρχικής φωνής, συμπεριλαμβανομένου του τόνου της. Αυτό το χαρακτηριστικό είναι ιδιαίτερα πολύτιμο για τραγούδι και άλλα σενάρια όπου η διατήρηση της αρχικής μελωδίας ή του μοτίβου τόνου είναι απαραίτητη.",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "Το KMeans είναι ένας αλγόριθμος ομαδοποίησης που διαιρεί το σύνολο δεδομένων σε συμπλέγματα K. Αυτή η ρύθμιση είναι ιδιαίτερα χρήσιμη για μεγάλα σύνολα δεδομένων.",
+ "Stop Training": "Διακοπή προπόνησης",
+ "Cache the dataset in GPU memory to speed up the training process.": "Αποθηκεύστε προσωρινά το σύνολο δεδομένων στη μνήμη GPU για να επιταχύνετε τη διαδικασία εκπαίδευσης.",
+ "Generate Index": "Δημιουργία ευρετηρίου",
+ "Export Model": "Μοντέλο εξαγωγής",
+ "Fresh Training": "Φρέσκια προπόνηση",
+ "Exported Pth file": "Εξαγόμενο αρχείο Pth",
+ "Upload": "Ανέβασμα",
+ "Voice Model": "Μοντέλο φωνής",
+ "Select the pth file to be exported": "Επιλέξτε το αρχείο pth που θα εξαχθεί",
+ "Exported Index file": "Εξαγόμενο αρχείο ευρετηρίου",
+ "Refresh": "Δροσίζω",
+ "Index File": "Αρχείο ευρετηρίου",
+ "Select the index file to be exported": "Επιλέξτε το αρχείο ευρετηρίου που θα εξαχθεί",
+ "Unload Voice": "Εκφόρτωση φωνής",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "Ενεργοποιήστε αυτήν τη ρύθμιση μόνο εάν εκπαιδεύετε ένα νέο μοντέλο από την αρχή ή επανεκκινείτε την εκπαίδευση. Διαγράφει όλα τα βάρη που δημιουργήθηκαν προηγουμένως και τα αρχεία καταγραφής τανυστών.",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Εντοπίστε την υπερβολική προπόνηση για να αποτρέψετε το μοντέλο από το να μάθει πολύ καλά τα δεδομένα εκπαίδευσης και να χάσει την ικανότητα γενίκευσης σε νέα δεδομένα.",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Ορίστε τον μέγιστο αριθμό εποχών που θέλετε να σταματήσει η προπόνηση του μοντέλου σας εάν δεν εντοπιστεί βελτίωση.",
+ "Upload Audio": "Μεταφόρτωση ήχου",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "Το κουμπί \"Μεταφόρτωση\" είναι μόνο για το google colab: Ανεβάζει τα εξαγόμενα αρχεία στον φάκελο ApplioExported στο Google Drive σας.",
+ "Select Audio": "Επιλέξτε Ήχος",
+ "Select the voice model to use for the conversion.": "Επιλέξτε το φωνητικό μοντέλο που θα χρησιμοποιηθεί για τη μετατροπή.",
+ "Select the index file to use for the conversion.": "Επιλέξτε το αρχείο ευρετηρίου που θα χρησιμοποιηθεί για τη μετατροπή.",
+ "Output Path": "Διαδρομή εξόδου",
+ "Advanced Settings": "Ρυθμίσεις για προχωρημένους",
+ "Export Format": "Μορφή εξαγωγής",
+ "Single": "Άγαμος",
+ "Select the audio to convert.": "Επιλέξτε τον ήχο που θέλετε να μετατρέψετε.",
+ "Split Audio": "Διαχωρισμός ήχου",
+ "Custom Output Path": "Προσαρμοσμένη διαδρομή εξόδου",
+ "Select the format to export the audio.": "Επιλέξτε τη μορφή για εξαγωγή του ήχου.",
+ "Clean Audio": "Καθαρός ήχος",
+ "Autotune": "Αυτόματος συντονισμός",
+ "Clean Strength": "Καθαρή αντοχή",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Εκκαθάριση εξόδων (Διαγράφει όλους τους ήχους σε στοιχεία / ήχους)",
+ "Upscale Audio": "Αναβαθμισμένος ήχος",
+ "Pitch": "Πίσσα",
+ "Formant Shifting": "Μετατόπιση φορμιστών",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "Η διαδρομή όπου θα αποθηκευτεί ο ήχος εξόδου, από προεπιλογή σε στοιχεία / ήχους / output.wav",
+ "Default value is 1.0": "Η προεπιλεγμένη τιμή είναι 1,0",
+ "Presets are located in /assets/formant_shift folder": "Οι προεπιλογές βρίσκονται στο φάκελο /assets/formant_shift",
+ "Quefrency for formant shifting": "Quefrency για μετατόπιση διαμορφωτή",
+ "Browse presets for formanting": "Αναζήτηση προκαθορισμένων ρυθμίσεων για διαμόρφωση",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Διαχωρίστε τον ήχο σε κομμάτια για εξαγωγή συμπερασμάτων για να έχετε καλύτερα αποτελέσματα σε ορισμένες περιπτώσεις.",
+ "Timbre for formant shifting": "Στύλος για μετατόπιση σχηματισμού",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Εφαρμόστε έναν μαλακό αυτόματο συντονισμό στα συμπεράσματά σας, που συνιστάται για μετατροπές τραγουδιού.",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Ενεργοποίηση μετατόπισης φορμού. Χρησιμοποιείται για μετατροπές ανδρών σε γυναίκες και αντίστροφα.",
+ "Filter Radius": "Ακτίνα φίλτρου",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Αναβαθμίστε τον ήχο σε υψηλότερη ποιότητα, συνιστάται για ήχους χαμηλής ποιότητας. (Μπορεί να χρειαστεί περισσότερος χρόνος για την επεξεργασία του ήχου)",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Καθαρίστε την έξοδο ήχου χρησιμοποιώντας αλγόριθμους ανίχνευσης θορύβου, που συνιστώνται για ήχους ομιλίας.",
+ "Volume Envelope": "Φάκελος τόμου",
+ "Search Feature Ratio": "Αναλογία δυνατοτήτων αναζήτησης",
+ "Convert": "Μετατρέπω",
+ "Batch": "Δέσμη",
+ "Export Audio": "Εξαγωγή ήχου",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Ρυθμίστε τον τόνο του ήχου, όσο υψηλότερη είναι η τιμή, τόσο υψηλότερος είναι ο τόνος.",
+ "Protect Voiceless Consonants": "Προστατέψτε τα σύμφωνα χωρίς φωνή",
+ "Input Folder": "Φάκελος εισόδου",
+ "Pitch extraction algorithm": "Αλγόριθμος εξαγωγής βήματος",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Ρυθμίστε το επίπεδο καθαρισμού στον ήχο που θέλετε, όσο περισσότερο το αυξάνετε τόσο περισσότερο θα καθαρίσει, αλλά είναι πιθανό ο ήχος να είναι πιο συμπιεσμένος.",
+ "Output Folder": "Φάκελος εξόδου",
+ "Enter input path": "Εισαγωγή διαδρομής εισόδου",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Αντικαταστήστε ή αναμείξτε με το φάκελο όγκου της εξόδου. Όσο πιο κοντά είναι ο λόγος προς 1, τόσο περισσότερο χρησιμοποιείται ο φάκελος εξόδου.",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Αλγόριθμος εξαγωγής τόνου για χρήση για τη μετατροπή ήχου. Ο προεπιλεγμένος αλγόριθμος είναι rmvpe, ο οποίος συνιστάται για τις περισσότερες περιπτώσεις.",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Επιρροή που ασκείται από το αρχείο ευρετηρίου. Μια υψηλότερη τιμή αντιστοιχεί σε μεγαλύτερη επιρροή. Ωστόσο, η επιλογή χαμηλότερων τιμών μπορεί να βοηθήσει στον μετριασμό των τεχνουργημάτων που υπάρχουν στον ήχο.",
+ "## Voice Blender": "## Μπλέντερ φωνής",
+ "Get information about the audio": "Λήψη πληροφοριών σχετικά με τον ήχο",
+ "Select the folder containing the audios to convert.": "Επιλέξτε το φάκελο που περιέχει τα ηχητικά μηνύματα για μετατροπή.",
+ "Voice Blender": "Μπλέντερ φωνής",
+ "Enter output path": "Εισαγάγετε τη διαδρομή εξόδου",
+ "Select the folder where the output audios will be saved.": "Επιλέξτε το φάκελο όπου θα αποθηκευτούν οι ήχοι εξόδου.",
+ "Fusion": "Ένωση",
+ "Drag and drop your model here": "Σύρετε και αποθέστε το μοντέλο σας εδώ",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Προστατεύστε τα διακριτά σύμφωνα και τους ήχους αναπνοής για να αποτρέψετε το ηλεκτροακουστικό σχίσιμο και άλλα τεχνουργήματα. Το τράβηγμα της παραμέτρου στη μέγιστη τιμή του 0,5 προσφέρει ολοκληρωμένη προστασία. Ωστόσο, η μείωση αυτής της τιμής ενδέχεται να μειώσει την έκταση της προστασίας, ενώ ενδέχεται να μετριάσει το αποτέλεσμα ευρετηρίου.",
+ "Blend Ratio": "Αναλογία ανάμειξης",
+ "Path to Model": "Διαδρομή προς το μοντέλο",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Εάν ο αριθμός είναι μεγαλύτερος ή ίσος με τρία, η χρήση διάμεσου φιλτραρίσματος στα αποτελέσματα τόνου που συλλέγονται έχει τη δυνατότητα να μειώσει την αναπνοή.",
+ "Enter path to model": "Εισαγωγή διαδρομής προς το μοντέλο",
+ "View": "Άποψη",
+ "Pth file": "Αρχείο Pth",
+ "You can also use a custom path.": "Μπορείτε επίσης να χρησιμοποιήσετε μια προσαρμοσμένη διαδρομή.",
+ "Inroduce the model information": "Εισαγωγή των πληροφοριών μοντέλου",
+ "Model extraction": "Εξαγωγή μοντέλου",
+ "View model information": "Προβολή πληροφοριών μοντέλου",
+ "Model conversion": "Μετατροπή μοντέλου",
+ "Model information to be placed": "Πληροφορίες υποδείγματος που πρέπει να τοποθετηθούν",
+ "Output of the pth file": "Έξοδος του αρχείου pth",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Επιλέξτε δύο μοντέλα φωνής, ορίστε το επιθυμητό ποσοστό ανάμειξης και συνδυάστε τα σε μια εντελώς νέα φωνή.",
+ "Introduce the model pth path": "Εισαγωγή της διαδρομής pth μοντέλου",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Η προσαρμογή της θέσης περισσότερο προς τη μία ή την άλλη πλευρά θα κάνει το μοντέλο πιο παρόμοιο με το πρώτο ή το δεύτερο.",
+ "# How to Report an Issue on GitHub": "# Πώς να αναφέρετε ένα ζήτημα στο GitHub",
+ "Record": "Καταγράφω",
+ "Extract F0 Curve": "Απόσπασμα καμπύλης F0",
+ "Record Screen": "Εγγραφή οθόνης",
+ "Stop Recording": "Διακοπή εγγραφής",
+ "## Download Model": "## Λήψη μοντέλου",
+ "Model Link": "Σύνδεσμος μοντέλου",
+ "See Model Information": "Δείτε πληροφορίες μοντέλου",
+ "Introduce the model .pth path": "Εισαγωγή της διαδρομής .pth μοντέλου",
+ "The information to be placed in the model (You can leave it blank or put anything).": "Οι πληροφορίες που πρέπει να τοποθετηθούν στο μοντέλο (Μπορείτε να το αφήσετε κενό ή να βάλετε οτιδήποτε).",
+ "Download Model": "Λήψη μοντέλου",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Μεταβείτε στο [GitHub Issues](https://github.com/IAHispano/Applio/issues) και κάντε κλικ στο κουμπί 'New Issue'.",
+ "Introduce the model link": "Παρουσιάστε τον σύνδεσμο μοντέλου",
+ "Search": "Αναζήτηση",
+ "## Drop files": "## Απόθεση αρχείων",
+ "## Search Model": "## Μοντέλο αναζήτησης",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Σύρετε το αρχείο .pth και το αρχείο .index σε αυτόν τον χώρο. Σύρετε το ένα και, στη συνέχεια, το άλλο.",
+ "TTS Voices": "Φωνές TTS",
+ "We couldn't find models by that name.": "Δεν μπορέσαμε να βρούμε μοντέλα με αυτό το όνομα.",
+ "TTS Speed": "Ταχύτητα TTS",
+ "And select the sampling rate": "Και επιλέξτε το ρυθμό δειγματοληψίας.",
+ "Introduce the model name to search.": "Εισαγάγετε το όνομα του μοντέλου στην αναζήτηση.",
+ "## Download Pretrained Models": "## Λήψη προεκπαιδευμένων μοντέλων",
+ "Text to Synthesize": "Κείμενο για σύνθεση",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Κάντε κλικ στο κουμπί \"Εγγραφή οθόνης\" παρακάτω για να ξεκινήσετε την καταγραφή του προβλήματος που αντιμετωπίζετε.",
+ "Select the pretrained model you want to download.": "Επιλέξτε το προεκπαιδευμένο μοντέλο που θέλετε να κατεβάσετε.",
+ "Increase or decrease TTS speed.": "Αυξήστε ή μειώστε την ταχύτητα TTS.",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "Η καμπύλη f0 αντιπροσωπεύει τις διακυμάνσεις στη βασική συχνότητα μιας φωνής με την πάροδο του χρόνου, δείχνοντας πώς αυξάνεται και μειώνεται ο τόνος.",
+ "Upload a .txt file": "Αποστολή αρχείου .txt",
+ "Select the TTS voice to use for the conversion.": "Επιλέξτε τη φωνή TTS που θα χρησιμοποιήσετε για τη μετατροπή.",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Μόλις ολοκληρώσετε την εγγραφή του προβλήματος, κάντε κλικ στο κουμπί \"Διακοπή εγγραφής\" (το ίδιο κουμπί, αλλά η ετικέτα αλλάζει ανάλογα με το αν εγγράφετε ενεργά ή όχι).",
+ "Enter the text to synthesize.": "Εισαγάγετε το κείμενο που θέλετε να συνθέσετε.",
+ "Input path for text file": "Διαδρομή εισαγωγής για αρχείο κειμένου",
+ "Output Path for TTS Audio": "Διαδρομή εξόδου για ήχο TTS",
+ "Output Path for RVC Audio": "Διαδρομή εξόδου για ήχο RVC",
+ "Enter text to synthesize": "Εισαγωγή κειμένου για σύνθεση",
+ "Enable Applio integration with Discord presence": "Ενεργοποιήστε την ενσωμάτωση του Applio με την παρουσία του Discord",
+ "Enable fake GPU": "Ενεργοποιήστε την ψεύτικη GPU",
+ "Theme": "Θέμα",
+ "Restart Applio": "Επανεκκινήστε το Applio",
+ "The path to the text file that contains content for text to speech.": "Η διαδρομή προς το αρχείο κειμένου που περιέχει περιεχόμενο για μετατροπή κειμένου σε ομιλία.",
+ "Language": "Γλώσσα",
+ "Enable Applio integration with applio.org/models using flask": "Ενεργοποίηση ενσωμάτωσης Applio με applio.org/models χρησιμοποιώντας φιάλη",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Συμπληρώστε το παρεχόμενο πρότυπο ζητήματος, φροντίζοντας να συμπεριλάβετε λεπτομέρειες όπως απαιτείται και χρησιμοποιήστε την ενότητα περιουσιακών στοιχείων για να ανεβάσετε το εγγεγραμμένο αρχείο από το προηγούμενο βήμα.",
+ "Precision": "Ακρίβεια",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "Θα ενεργοποιήσει τη δυνατότητα εμφάνισης της τρέχουσας δραστηριότητας Applio στο Discord.",
+ "It will activate the possibility of downloading models with a click from the website.": "Θα ενεργοποιήσει τη δυνατότητα λήψης μοντέλων με ένα κλικ από τον ιστότοπο.",
+ "Select the theme you want to use. (Requires restarting Applio)": "Επιλέξτε το θέμα που θέλετε να χρησιμοποιήσετε. (Απαιτείται επανεκκίνηση του Applio)",
+ "Update precision": "Ενημέρωση ακρίβειας",
+ "Version Checker": "Έλεγχος έκδοσης",
+ "Reverb": "Αντήχηση",
+ "Select the language you want to use. (Requires restarting Applio)": "Επιλέξτε τη γλώσσα που θέλετε να χρησιμοποιήσετε. (Απαιτείται επανεκκίνηση του Applio)",
+ "Drag your plugin.zip to install it": "Σύρετε το plugin.zip σας για να το εγκαταστήσετε",
+ "Check for updates": "Έλεγχος για ενημερώσεις",
+ "Post-Process": "Μετά τη διαδικασία",
+ "Plugin Installer": "Πρόγραμμα εγκατάστασης προσθηκών",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "Η εκπαίδευση δεν υποστηρίζεται προς το παρόν λόγω απουσίας GPU. Για να ενεργοποιήσετε την καρτέλα εκπαίδευσης, μεταβείτε στην καρτέλα ρυθμίσεων και ενεργοποιήστε την επιλογή \"Ψεύτικη GPU\".",
+ "Post-process the audio to apply effects to the output.": "Μετά την επεξεργασία του ήχου για την εφαρμογή εφέ στην έξοδο.",
+ "Select the precision you want to use for training and inference.": "Επιλέξτε την ακρίβεια που θέλετε να χρησιμοποιήσετε για την εκπαίδευση και την εξαγωγή συμπερασμάτων.",
+ "Reverb Room Size": "Μέγεθος δωματίου Reverb",
+ "Apply reverb to the audio.": "Εφαρμόστε αντήχηση στον ήχο.",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Ενεργοποιεί την καρτέλα τρένου. Ωστόσο, λάβετε υπόψη ότι αυτή η συσκευή δεν διαθέτει δυνατότητες GPU, επομένως η εκπαίδευση δεν υποστηρίζεται. Αυτή η επιλογή είναι μόνο για δοκιμαστικούς σκοπούς. (Αυτή η επιλογή θα επανεκκινήσει το Applio)",
+ "Set the room size of the reverb.": "Ορίστε το μέγεθος δωματίου της αντήχησης.",
+ "Reverb Wet Gain": "Αντήχηση υγρού κέρδους",
+ "Set the damping of the reverb.": "Ρυθμίστε την απόσβεση της αντήχησης.",
+ "Check which version of Applio is the latest to see if you need to update.": "Ελέγξτε ποια έκδοση του Applio είναι η πιο πρόσφατη για να δείτε αν πρέπει να κάνετε ενημέρωση.",
+ "Reverb Damping": "Απόσβεση αντήχησης",
+ "Set the wet gain of the reverb.": "Ρυθμίστε το υγρό κέρδος της αντήχησης.",
+ "Set the width of the reverb.": "Ορίστε το πλάτος της αντήχησης.",
+ "Reverb Dry Gain": "Αντήχηση ξηρού κέρδους",
+ "Pitch Shift": "Μετατόπιση βήματος",
+ "Reverb Width": "Πλάτος αντήχησης",
+ "Set the freeze mode of the reverb.": "Ρυθμίστε τη λειτουργία παγώματος της αντήχησης.",
+ "Set the dry gain of the reverb.": "Ρυθμίστε το ξηρό κέρδος της αντήχησης.",
+ "Reverb Freeze Mode": "Λειτουργία παγώματος αντήχησης",
+ "Limiter": "Περιοριστής",
+ "Apply pitch shift to the audio.": "Εφαρμόστε μετατόπιση τόνου στον ήχο.",
+ "Gain": "Κερδίζω",
+ "Set the pitch shift semitones.": "Ρυθμίστε τα ημιτόνια μετατόπισης τόνου.",
+ "Pitch Shift Semitones": "Ημιτόνια μετατόπισης βήματος",
+ "Gain dB": "Κέρδος dB",
+ "Apply limiter to the audio.": "Εφαρμόστε περιοριστή στον ήχο.",
+ "Set the limiter threshold dB.": "Ορίστε το όριο περιορισμού dB.",
+ "Limiter Threshold dB": "Όριο περιοριστή dB",
+ "Distortion": "Παραμόρφωση",
+ "Apply gain to the audio.": "Εφαρμόστε κέρδος στον ήχο.",
+ "Limiter Release Time": "Χρόνος κυκλοφορίας περιοριστή",
+ "Set the gain dB.": "Ρυθμίστε το κέρδος dB.",
+ "Chorus": "Χορωδία",
+ "Set the limiter release time.": "Ορίστε τον χρόνο απελευθέρωσης του περιοριστή.",
+ "Distortion Gain": "Κέρδος παραμόρφωσης",
+ "Set the distortion gain.": "Ορίστε το κέρδος παραμόρφωσης.",
+ "Apply distortion to the audio.": "Εφαρμόστε παραμόρφωση στον ήχο.",
+ "Chorus Rate Hz": "Ρυθμός χορωδίας Hz",
+ "Chorus Depth": "Βάθος χορωδίας",
+ "Bitcrush": "Bitcrush",
+ "Apply chorus to the audio.": "Εφαρμόστε χορωδία στον ήχο.",
+ "Set the chorus rate Hz.": "Ρυθμίστε το ρυθμό χορωδίας Hz.",
+ "Chorus Mix": "Μίξη χορωδίας",
+ "Chorus Feedback": "Ανατροφοδότηση χορωδίας",
+ "Bitcrush Bit Depth": "Bitcrush Βάθος bit",
+ "Set the chorus depth.": "Ρυθμίστε το βάθος της χορωδίας.",
+ "Chorus Center Delay ms": "Καθυστέρηση Κέντρου Χορωδίας ms",
+ "Apply bitcrush to the audio.": "Εφαρμόστε bitcrush στον ήχο.",
+ "Set the chorus mix.": "Ρυθμίστε τη μίξη χορωδίας.",
+ "Set the chorus feedback.": "Ορίστε τα σχόλια χορωδίας.",
+ "Clipping": "Απόκομμα",
+ "Set the chorus center delay ms.": "Ρυθμίστε την καθυστέρηση του κέντρου χορωδίας ms.",
+ "Compressor": "Συμπιεστής",
+ "Set the bitcrush bit depth.": "Ορίστε το βάθος bit bitcrush.",
+ "Apply clipping to the audio.": "Εφαρμόστε αποκοπή στον ήχο.",
+ "Clipping Threshold": "Κατώφλι αποκοπής",
+ "Set the clipping threshold.": "Ορίστε το όριο αποκοπής.",
+ "Apply compressor to the audio.": "Εφαρμόστε συμπιεστή στον ήχο.",
+ "Compressor Threshold dB": "Κατώφλι συμπιεστή dB",
+ "Compressor Ratio": "Αναλογία συμπιεστή",
+ "Delay": "Καθυστέρηση",
+ "Compressor Release ms": "Απελευθέρωση συμπιεστή ms",
+ "Set the compressor threshold dB.": "Ρυθμίστε το κατώφλι του συμπιεστή dB.",
+ "Compressor Attack ms": "Επίθεση συμπιεστή ms",
+ "Set the compressor ratio.": "Ρυθμίστε την αναλογία συμπιεστή.",
+ "Set the compressor attack ms.": "Ρυθμίστε την επίθεση συμπιεστή ms.",
+ "Apply delay to the audio.": "Εφαρμόστε καθυστέρηση στον ήχο.",
+ "Delay Seconds": "Δευτερόλεπτα καθυστέρησης",
+ "Delay Feedback": "Καθυστέρηση σχολίων",
+ "Set the compressor release ms.": "Ρυθμίστε την απελευθέρωση του συμπιεστή ms.",
+ "Delay Mix": "Καθυστέρηση Mix",
+ "Set the delay seconds.": "Ορίστε τα δευτερόλεπτα καθυστέρησης.",
+ "Set the delay feedback.": "Ορίστε τα σχόλια καθυστέρησης.",
+ "Custom Embedder": "Προσαρμοσμένο Embedder",
+ "Set the delay mix.": "Ρυθμίστε το μίγμα καθυστέρησης.",
+ "Select Custom Embedder": "Επιλέξτε Custom Embedder",
+ "model information": "Πληροφορίες μοντέλου",
+ "Refresh embedders": "Ανανέωση ενσωματωτών",
+ "Upload .bin": "Ανεβάστε .bin",
+ "Upload .json": "Ανεβάστε .json",
+ "Folder Name": "Όνομα φακέλου",
+ "Model Creator": "Δημιουργός μοντέλων",
+ "Speaker ID": "Αναγνωριστικό ηχείου",
+ "Set name": "Όνομα συνόλου",
+ "Model Author Name": "Όνομα συγγραφέα μοντέλου",
+ "Name of the model creator. (Default: Unknown)": "Όνομα του δημιουργού μοντέλου. (Προεπιλογή: Άγνωστο)",
+ "Move files to custom embedder folder": "Μετακίνηση αρχείων σε προσαρμοσμένο φάκελο ενσωμάτωσης",
+ "The name that will appear in the model information.": "Το όνομα που θα εμφανίζεται στις πληροφορίες μοντέλου.",
+ "Select the speaker ID to use for the conversion.": "Επιλέξτε το αναγνωριστικό ηχείου που θα χρησιμοποιηθεί για τη μετατροπή.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "Ρυθμίστε την ισχύ του autotune - όσο περισσότερο την αυξάνετε, τόσο περισσότερο θα προσκολληθεί στο χρωματικό πλέγμα."
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/en_EN.json b/assets/i18n/languages/en_EN.json
new file mode 100644
index 0000000000000000000000000000000000000000..69d84692c3ef24df01688b0a11db296cb49cb7b0
--- /dev/null
+++ b/assets/i18n/languages/en_EN.json
@@ -0,0 +1,325 @@
+{
+ "Cache Dataset in GPU": "Cache Dataset in GPU",
+ "Set the compressor threshold dB.": "Set the compressor threshold dB.",
+ "Set the limiter release time.": "Set the limiter release time.",
+ "The GPU information will be displayed here.": "The GPU information will be displayed here.",
+ "Limiter Threshold dB": "Limiter Threshold dB",
+ "Save Only Latest": "Save Only Latest",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.",
+ "Apply compressor to the audio.": "Apply compressor to the audio.",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "This setting enables you to save the weights of the model at the conclusion of each epoch.",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.",
+ "Compressor Threshold dB": "Compressor Threshold dB",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).",
+ "Compressor Ratio": "Compressor Ratio",
+ "Apply pitch shift to the audio.": "Apply pitch shift to the audio.",
+ "Preprocess Dataset": "Preprocess Dataset",
+ "Specifies the overall quantity of epochs for the model training process.": "Specifies the overall quantity of epochs for the model training process.",
+ "Custom Pretrained": "Custom Pretrained",
+ "Pitch Shift Semitones": "Pitch Shift Semitones",
+ "Cache the dataset in GPU memory to speed up the training process.": "Cache the dataset in GPU memory to speed up the training process.",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.",
+ "Determine at how many epochs the model will saved at.": "Determine at how many epochs the model will saved at.",
+ "Set the gain dB.": "Set the gain dB.",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.",
+ "Extract Features": "Extract Features",
+ "Embedder Model": "Embedder Model",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.",
+ "Bitcrush": "Bitcrush",
+ "Model used for learning speaker embedding.": "Model used for learning speaker embedding.",
+ "Apply gain to the audio.": "Apply gain to the audio.",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.",
+ "Upload Pretrained Model": "Upload Pretrained Model",
+ "Save Every Epoch": "Save Every Epoch",
+ "Apply bitcrush to the audio.": "Apply bitcrush to the audio.",
+ "Limiter Release Time": "Limiter Release Time",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Sets advanced GPU settings, recommended for users with better GPU architecture.",
+ "Set the bitcrush bit depth.": "Set the bitcrush bit depth.",
+ "GPU Information": "GPU Information",
+ "Bitcrush Bit Depth": "Bitcrush Bit Depth",
+ "Extract": "Extract",
+ "Set the clipping threshold.": "Set the clipping threshold.",
+ "Limiter": "Limiter",
+ "Refresh Custom Pretraineds": "Refresh Custom Pretraineds",
+ "Pretrained Custom Settings": "Pretrained Custom Settings",
+ "Set the compressor attack ms.": "Set the compressor attack ms.",
+ "Pitch Guidance": "Pitch Guidance",
+ "0 to ∞ separated by -": "0 to ∞ separated by -",
+ "Hop Length": "Hop Length",
+ "Use CPU": "Use CPU",
+ "Distortion": "Distortion",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.",
+ "GPU Settings": "GPU Settings",
+ "Set the compressor ratio.": "Set the compressor ratio.",
+ "Compressor": "Compressor",
+ "Set the pitch shift semitones.": "Set the pitch shift semitones.",
+ "The file you dropped is not a valid pretrained file. Please try again.": "The file you dropped is not a valid pretrained file. Please try again.",
+ "Total Epoch": "Total Epoch",
+ "Compressor Attack ms": "Compressor Attack ms",
+ "Gain dB": "Gain dB",
+ "Index Algorithm": "Index Algorithm",
+ "Apply clipping to the audio.": "Apply clipping to the audio.",
+ "Save Every Weights": "Save Every Weights",
+ "Force the use of CPU for training.": "Force the use of CPU for training.",
+ "Set the limiter threshold dB.": "Set the limiter threshold dB.",
+ "GPU Custom Settings": "GPU Custom Settings",
+ "Batch Size": "Batch Size",
+ "Apply limiter to the audio.": "Apply limiter to the audio.",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.",
+ "Pretrained": "Pretrained",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Click the refresh button to see the pretrained file in the dropdown menu.",
+ "Pretrained D Path": "Custom Pretrained D",
+ "Clipping Threshold": "Clipping Threshold",
+ "Pretrained G Path": "Custom Pretrained G",
+ "Gain": "Gain",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.",
+ "GPU Number": "GPU Number",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.",
+ "Clipping": "Clipping",
+ "Delay Seconds": "Delay Seconds",
+ "Overtraining Detector Settings": "Overtraining Detector Settings",
+ "Overtraining Threshold": "Overtraining Threshold",
+ "Set the delay seconds.": "Set the delay seconds.",
+ "Apply delay to the audio.": "Apply delay to the audio.",
+ "Extra": "Extra",
+ "Enter dataset path": "Enter dataset path",
+ "Compressor Release ms": "Compressor Release ms",
+ "Settings": "Settings",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Set the maximum number of epochs you want your model to stop training if no improvement is detected.",
+ "Set the compressor release ms.": "Set the compressor release ms.",
+ "Delay": "Delay",
+ "Model Name": "Model Name",
+ "Upload .bin": "Upload .bin",
+ "Download": "Download",
+ "Fresh Training": "Fresh Training",
+ "Processing": "Processing",
+ "Start Training": "Start Training",
+ "Folder Name": "Folder Name",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "It's recommended to deactivate this option if your dataset has already been processed.",
+ "Refresh embedders": "Refresh embedders",
+ "Delay Mix": "Delay Mix",
+ "Generate Index": "Generate Index",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.",
+ "Set the delay mix.": "Set the delay mix.",
+ "Report a Bug": "Report a Bug",
+ "Export Model": "Export Model",
+ "Set the delay feedback.": "Set the delay feedback.",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.",
+ "Model Information": "Model Information",
+ "Delay Feedback": "Delay Feedback",
+ "Stop Training": "Stop Training",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.",
+ "Custom Embedder": "Custom Embedder",
+ "Select Custom Embedder": "Select Custom Embedder",
+ "Plugins": "Plugins",
+ "Unload Voice": "Unload Voice",
+ "Select Audio": "Select Audio",
+ "Set the distortion gain.": "Set the distortion gain.",
+ "Drag your plugin.zip to install it": "Drag your plugin.zip to install it",
+ "Refresh": "Refresh",
+ "Chorus": "Chorus",
+ "Precision": "Precision",
+ "Set the chorus depth.": "Set the chorus depth.",
+ "Apply chorus to the audio.": "Apply chorus to the audio.",
+ "Single": "Single",
+ "Chorus Center Delay ms": "Chorus Center Delay ms",
+ "Post-Process": "Post-Process",
+ "Language": "Language",
+ "Chorus Depth": "Chorus Depth",
+ "Select the precision you want to use for training and inference.": "Select the precision you want to use for training and inference.",
+ "Index File": "Index File",
+ "Set the chorus rate Hz.": "Set the chorus rate Hz.",
+ "Exported Index file": "Exported Index file",
+ "Chorus Feedback": "Chorus Feedback",
+ "Update precision": "Update precision",
+ "Chorus Mix": "Chorus Mix",
+ "Select the voice model to use for the conversion.": "Select the voice model to use for the conversion.",
+ "Exported Pth file": "Exported Pth file",
+ "Select the theme you want to use. (Requires restarting Applio)": "Select the theme you want to use. (Requires restarting Applio)",
+ "Select the index file to use for the conversion.": "Select the index file to use for the conversion.",
+ "Theme": "Theme",
+ "Restart Applio": "Restart Applio",
+ "Set the chorus center delay ms.": "Set the chorus center delay ms.",
+ "Select the pth file to be exported": "Select the pth file to be exported",
+ "Set the chorus feedback.": "Set the chorus feedback.",
+ "Select the index file to be exported": "Select the index file to be exported",
+ "Version Checker": "Version Checker",
+ "Plugin Installer": "Plugin Installer",
+ "Set the chorus mix.": "Set the chorus mix.",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.",
+ "Upload": "Upload",
+ "Overtraining Detector": "Overtraining Detector",
+ "Chorus Rate Hz": "Chorus Rate Hz",
+ "Check which version of Applio is the latest to see if you need to update.": "Check which version of Applio is the latest to see if you need to update.",
+ "Upload Audio": "Upload Audio",
+ "Select the language you want to use. (Requires restarting Applio)": "Select the language you want to use. (Requires restarting Applio)",
+ "Check for updates": "Check for updates",
+ "Apply distortion to the audio.": "Apply distortion to the audio.",
+ "Distortion Gain": "Distortion Gain",
+ "Post-process the audio to apply effects to the output.": "Post-process the audio to apply effects to the output.",
+ "Voice Model": "Voice Model",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Apply a soft autotune to your inferences, recommended for singing conversions.",
+ "Select the audio to convert.": "Select the audio to convert.",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.",
+ "Drag and drop your model here": "Drag and drop your model here",
+ "Upload a .txt file": "Upload a .txt file",
+ "The output information will be displayed here.": "The output information will be displayed here.",
+ "Introduce the model pth path": "Introduce the model pth path",
+ "Advanced Settings": "Advanced Settings",
+ "You can also use a custom path.": "You can also use a custom path.",
+ "Audio Analyzer": "Audio Analyzer",
+ "Output Path for TTS Audio": "Output Path for TTS Audio",
+ "Inference": "Inference",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Clear Outputs (Deletes all audios in assets/audios)",
+ "Blend Ratio": "Blend Ratio",
+ "Custom Output Path": "Custom Output Path",
+ "Enter text to synthesize": "Enter text to synthesize",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Adjusting the position more towards one side or the other will make the model more similar to the first or second.",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "It will activate the possibility of displaying the current Applio activity in Discord.",
+ "Enable fake GPU": "Enable fake GPU",
+ "Upscale Audio": "Upscale Audio",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "A simple, high-quality voice conversion tool focused on ease of use and performance.",
+ "Output Path": "Output Path",
+ "Fusion": "Fusion",
+ "Inroduce the model information": "Inroduce the model information",
+ "It will activate the possibility of downloading models with a click from the website.": "It will activate the possibility of downloading models with a click from the website.",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)",
+ "Autotune": "Autotune",
+ "Training": "Training",
+ "Export Format": "Export Format",
+ "Enter the text to synthesize.": "Enter the text to synthesize.",
+ "Path to Model": "Path to Model",
+ "Text to Synthesize": "Text to Synthesize",
+ "Select the format to export the audio.": "Select the format to export the audio.",
+ "View model information": "View model information",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Clean your audio output using noise detection algorithms, recommended for speaking audios.",
+ "Clean Audio": "Clean Audio",
+ "Select the TTS voice to use for the conversion.": "Select the TTS voice to use for the conversion.",
+ "Output Path for RVC Audio": "Output Path for RVC Audio",
+ "Enter path to model": "Enter path to model",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "The path where the output audio will be saved, by default in assets/audios/output.wav",
+ "Model conversion": "Model conversion",
+ "Clean Strength": "Clean Strength",
+ "This section contains some extra utilities that often may be in experimental phases.": "This section contains some extra utilities that often may be in experimental phases.",
+ "Output Information": "Output Information",
+ "Input path for text file": "Input path for text file",
+ "Split Audio": "Split Audio",
+ "Enable Applio integration with applio.org/models using flask": "Enable Applio integration with applio.org/models using flask",
+ "Pth file": "Pth file",
+ "The information to be placed in the model (You can leave it blank or put anything).": "The information to be placed in the model (You can leave it blank or put anything).",
+ "The path to the text file that contains content for text to speech.": "The path to the text file that contains content for text to speech.",
+ "View": "View",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Split the audio into chunks for inference to obtain better results in some cases.",
+ "Model information to be placed": "Model information to be placed",
+ "Merge Audios": "Merge Audios",
+ "Enable Applio integration with Discord presence": "Enable Applio integration with Discord presence",
+ "Model extraction": "Model extraction",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Drag your .pth file and .index file into this space. Drag one and then the other.",
+ "Download Model": "Download Model",
+ "## Drop files": "## Drop files",
+ "Introduce the model name to search.": "Introduce the model name to search.",
+ "Dataset Creator": "Dataset Creator",
+ "Increase or decrease TTS speed.": "Increase or decrease TTS speed.",
+ "## Search Model": "## Search Model",
+ "TTS Speed": "TTS Speed",
+ "TTS Voices": "TTS Voices",
+ "And select the sampling rate": "And select the sampling rate.",
+ "## Download Pretrained Models": "## Download Pretrained Models",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "The audio file has been successfully added to the dataset. Please click the preprocess button.",
+ "Search": "Search",
+ "Introduce the model link": "Introduce the model link",
+ "Model Architecture": "Model Architecture",
+ "Model Link": "Model Link",
+ "Select the pretrained model you want to download.": "Select the pretrained model you want to download.",
+ "We couldn't find models by that name.": "We couldn't find models by that name.",
+ "Set the width of the reverb.": "Set the width of the reverb.",
+ "Protect Voiceless Consonants": "Protect Voiceless Consonants",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.",
+ "Pitch extraction algorithm": "Pitch extraction algorithm",
+ "Get information about the audio": "Get information about the audio",
+ "Model Creator": "Model Creator",
+ "## Voice Blender": "## Voice Blender",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.",
+ "Upload .json": "Upload .json",
+ "Voice Blender": "Voice Blender",
+ "Move files to custom embedder folder": "Move files to custom embedder folder",
+ "Convert": "Convert",
+ "Enter output path": "Enter output path",
+ "model information": "model information",
+ "Reverb": "Reverb",
+ "Export Audio": "Export Audio",
+ "Apply reverb to the audio.": "Apply reverb to the audio.",
+ "Output Folder": "Output Folder",
+ "Speaker ID": "Speaker ID",
+ "Select the speaker ID to use for the conversion.": "Select the speaker ID to use for the conversion.",
+ "Name of the model creator. (Default: Unknown)": "Name of the model creator. (Default: Unknown)",
+ "Reverb Room Size": "Reverb Room Size",
+ "Batch": "Batch",
+ "Set the dry gain of the reverb.": "Set the dry gain of the reverb.",
+ "Pitch Shift": "Pitch Shift",
+ "Reverb Damping": "Reverb Damping",
+ "Set the wet gain of the reverb.": "Set the wet gain of the reverb.",
+ "Reverb Wet Gain": "Reverb Wet Gain",
+ "Model Author Name": "Model Author Name",
+ "Set the freeze mode of the reverb.": "Set the freeze mode of the reverb.",
+ "Input Folder": "Input Folder",
+ "Select the folder containing the audios to convert.": "Select the folder containing the audios to convert.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.",
+ "Reverb Freeze Mode": "Reverb Freeze Mode",
+ "Reverb Width": "Reverb Width",
+ "Set the damping of the reverb.": "Set the damping of the reverb.",
+ "Set the room size of the reverb.": "Set the room size of the reverb.",
+ "Reverb Dry Gain": "Reverb Dry Gain",
+ "The name that will appear in the model information.": "The name that will appear in the model information.",
+ "Set name": "Set name",
+ "Enter input path": "Enter input path",
+ "Select the folder where the output audios will be saved.": "Select the folder where the output audios will be saved.",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.",
+ "Preprocess": "Preprocess",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.",
+ "Enter dataset name": "Enter dataset name",
+ "Audio cutting": "Audio cutting",
+ "Formant Shifting": "Formant Shifting",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.",
+ "Refresh Datasets": "Refresh Datasets",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Enable formant shifting. Used for male to female and vice-versa convertions.",
+ "Search Feature Ratio": "Search Feature Ratio",
+ "Browse presets for formanting": "Browse presets for formanting",
+ "Presets are located in /assets/formant_shift folder": "Presets are located in /assets/formant_shift folder",
+ "Dataset Name": "Dataset Name",
+ "Dataset Path": "Dataset Path",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.",
+ "Process effects": "Process effects",
+ "Default value is 1.0": "Default value is 1.0",
+ "Quefrency for formant shifting": "Quefrency for formant shifting",
+ "Volume Envelope": "Volume Envelope",
+ "Timbre for formant shifting": "Timbre for formant shifting",
+ "Filter Radius": "Filter Radius",
+ "Pitch": "Pitch",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Set the pitch of the audio, the higher the value, the higher the pitch.",
+ "Name of the new model.": "Name of the new model.",
+ "Stop Recording": "Stop Recording",
+ "## Download Model": "## Download Model",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.",
+ "# How to Report an Issue on GitHub": "# How to Report an Issue on GitHub",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.",
+ "Record Screen": "Record Screen",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).",
+ "See Model Information": "See Model Information",
+ "Output of the pth file": "Output of the pth file",
+ "Extract F0 Curve": "Extract F0 Curve",
+ "Record": "Record",
+ "Introduce the model .pth path": "Introduce the model .pth path",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.",
+ "Name of the new dataset.": "Name of the new dataset.",
+ "Upload Audio Dataset": "Upload Audio Dataset",
+ "Sampling Rate": "Sampling Rate",
+ "Version of the model architecture.": "Version of the model architecture.",
+ "Path to the dataset folder.": "Path to the dataset folder.",
+ "Enter model name": "Enter model name",
+ "The sampling rate of the audio files.": "The sampling rate of the audio files."
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/en_US.json b/assets/i18n/languages/en_US.json
new file mode 100644
index 0000000000000000000000000000000000000000..083677160476bda1a2437c3372ffecc970803a01
--- /dev/null
+++ b/assets/i18n/languages/en_US.json
@@ -0,0 +1,325 @@
+{
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "A simple, high-quality voice conversion tool focused on ease of use and performance.",
+ "This section contains some extra utilities that often may be in experimental phases.": "This section contains some extra utilities that often may be in experimental phases.",
+ "Output Information": "Output Information",
+ "The output information will be displayed here.": "The output information will be displayed here.",
+ "Inference": "Inference",
+ "Training": "Training",
+ "Extra": "Extra",
+ "Merge Audios": "Merge Audios",
+ "Processing": "Processing",
+ "Audio Analyzer": "Audio Analyzer",
+ "Model Information": "Model Information",
+ "Plugins": "Plugins",
+ "Download": "Download",
+ "Report a Bug": "Report a Bug",
+ "Settings": "Settings",
+ "Preprocess": "Preprocess",
+ "Audio cutting": "Audio cutting",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "It's recommended to deactivate this option if your dataset has already been processed.",
+ "Process effects": "Process effects",
+ "Model Name": "Model Name",
+ "Name of the new model.": "Name of the new model.",
+ "Enter model name": "Enter model name",
+ "Dataset Path": "Dataset Path",
+ "Path to the dataset folder.": "Path to the dataset folder.",
+ "Refresh Datasets": "Refresh Datasets",
+ "Dataset Creator": "Dataset Creator",
+ "Dataset Name": "Dataset Name",
+ "Name of the new dataset.": "Name of the new dataset.",
+ "Enter dataset name": "Enter dataset name",
+ "Upload Audio Dataset": "Upload Audio Dataset",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "The audio file has been successfully added to the dataset. Please click the preprocess button.",
+ "Enter dataset path": "Enter dataset path",
+ "Sampling Rate": "Sampling Rate",
+ "The sampling rate of the audio files.": "The sampling rate of the audio files.",
+ "Model Architecture": "Model Architecture",
+ "Version of the model architecture.": "Version of the model architecture.",
+ "Preprocess Dataset": "Preprocess Dataset",
+ "Embedder Model": "Embedder Model",
+ "Model used for learning speaker embedding.": "Model used for learning speaker embedding.",
+ "Extract": "Extract",
+ "Hop Length": "Hop Length",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.",
+ "Batch Size": "Batch Size",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.",
+ "Save Every Epoch": "Save Every Epoch",
+ "Determine at how many epochs the model will saved at.": "Determine at how many epochs the model will saved at.",
+ "Total Epoch": "Total Epoch",
+ "Specifies the overall quantity of epochs for the model training process.": "Specifies the overall quantity of epochs for the model training process.",
+ "Pretrained": "Pretrained",
+ "Save Only Latest": "Save Only Latest",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.",
+ "Save Every Weights": "Save Every Weights",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "This setting enables you to save the weights of the model at the conclusion of each epoch.",
+ "Custom Pretrained": "Custom Pretrained",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.",
+ "Upload Pretrained Model": "Upload Pretrained Model",
+ "Refresh Custom Pretraineds": "Refresh Custom Pretraineds",
+ "Pretrained Custom Settings": "Pretrained Custom Settings",
+ "The file you dropped is not a valid pretrained file. Please try again.": "The file you dropped is not a valid pretrained file. Please try again.",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Click the refresh button to see the pretrained file in the dropdown menu.",
+ "Pretrained G Path": "Custom Pretrained G",
+ "Pretrained D Path": "Custom Pretrained D",
+ "GPU Settings": "GPU Settings",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Sets advanced GPU settings, recommended for users with better GPU architecture.",
+ "GPU Custom Settings": "GPU Custom Settings",
+ "GPU Number": "GPU Number",
+ "0 to ∞ separated by -": "0 to ∞ separated by -",
+ "The GPU information will be displayed here.": "The GPU information will be displayed here.",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.",
+ "GPU Information": "GPU Information",
+ "Pitch Guidance": "Pitch Guidance",
+ "Use CPU": "Use CPU",
+ "Force the use of CPU for training.": "Force the use of CPU for training.",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.",
+ "Extract Features": "Extract Features",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.",
+ "Cache Dataset in GPU": "Cache Dataset in GPU",
+ "Cache the dataset in GPU memory to speed up the training process.": "Cache the dataset in GPU memory to speed up the training process.",
+ "Index Algorithm": "Index Algorithm",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.",
+ "Overtraining Detector": "Overtraining Detector",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.",
+ "Overtraining Detector Settings": "Overtraining Detector Settings",
+ "Overtraining Threshold": "Overtraining Threshold",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Set the maximum number of epochs you want your model to stop training if no improvement is detected.",
+ "Fresh Training": "Fresh Training",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.",
+ "Start Training": "Start Training",
+ "Stop Training": "Stop Training",
+ "Generate Index": "Generate Index",
+ "Export Model": "Export Model",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.",
+ "Exported Pth file": "Exported Pth file",
+ "Exported Index file": "Exported Index file",
+ "Select the pth file to be exported": "Select the pth file to be exported",
+ "Select the index file to be exported": "Select the index file to be exported",
+ "Upload": "Upload",
+ "Voice Model": "Voice Model",
+ "Select the voice model to use for the conversion.": "Select the voice model to use for the conversion.",
+ "Index File": "Index File",
+ "Select the index file to use for the conversion.": "Select the index file to use for the conversion.",
+ "Refresh": "Refresh",
+ "Unload Voice": "Unload Voice",
+ "Single": "Single",
+ "Upload Audio": "Upload Audio",
+ "Select Audio": "Select Audio",
+ "Select the audio to convert.": "Select the audio to convert.",
+ "Advanced Settings": "Advanced Settings",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Clear Outputs (Deletes all audios in assets/audios)",
+ "Custom Output Path": "Custom Output Path",
+ "Output Path": "Output Path",
+ "Export Format": "Export Format",
+ "Select the format to export the audio.": "Select the format to export the audio.",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "The path where the output audio will be saved, by default in assets/audios/output.wav",
+ "Split Audio": "Split Audio",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Split the audio into chunks for inference to obtain better results in some cases.",
+ "Autotune": "Autotune",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Apply a soft autotune to your inferences, recommended for singing conversions.",
+ "Clean Audio": "Clean Audio",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Clean your audio output using noise detection algorithms, recommended for speaking audios.",
+ "Clean Strength": "Clean Strength",
+ "Upscale Audio": "Upscale Audio",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.",
+ "Formant Shifting": "Formant Shifting",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Enable formant shifting. Used for male to female and vice-versa convertions.",
+ "Browse presets for formanting": "Browse presets for formanting",
+ "Presets are located in /assets/formant_shift folder": "Presets are located in /assets/formant_shift folder",
+ "Default value is 1.0": "Default value is 1.0",
+ "Quefrency for formant shifting": "Quefrency for formant shifting",
+ "Timbre for formant shifting": "Timbre for formant shifting",
+ "Pitch": "Pitch",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Set the pitch of the audio, the higher the value, the higher the pitch.",
+ "Filter Radius": "Filter Radius",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.",
+ "Search Feature Ratio": "Search Feature Ratio",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.",
+ "Volume Envelope": "Volume Envelope",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.",
+ "Protect Voiceless Consonants": "Protect Voiceless Consonants",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.",
+ "Pitch extraction algorithm": "Pitch extraction algorithm",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.",
+ "Convert": "Convert",
+ "Export Audio": "Export Audio",
+ "Batch": "Batch",
+ "Input Folder": "Input Folder",
+ "Select the folder containing the audios to convert.": "Select the folder containing the audios to convert.",
+ "Enter input path": "Enter input path",
+ "Output Folder": "Output Folder",
+ "Select the folder where the output audios will be saved.": "Select the folder where the output audios will be saved.",
+ "Enter output path": "Enter output path",
+ "Get information about the audio": "Get information about the audio",
+ "## Voice Blender": "## Voice Blender",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.",
+ "Voice Blender": "Voice Blender",
+ "Drag and drop your model here": "Drag and drop your model here",
+ "You can also use a custom path.": "You can also use a custom path.",
+ "Blend Ratio": "Blend Ratio",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Adjusting the position more towards one side or the other will make the model more similar to the first or second.",
+ "Fusion": "Fusion",
+ "Path to Model": "Path to Model",
+ "Enter path to model": "Enter path to model",
+ "Model information to be placed": "Model information to be placed",
+ "Inroduce the model information": "Inroduce the model information",
+ "The information to be placed in the model (You can leave it blank or put anything).": "The information to be placed in the model (You can leave it blank or put anything).",
+ "View model information": "View model information",
+ "Introduce the model pth path": "Introduce the model pth path",
+ "View": "View",
+ "Model extraction": "Model extraction",
+ "Model conversion": "Model conversion",
+ "Pth file": "Pth file",
+ "Output of the pth file": "Output of the pth file",
+ "Extract F0 Curve": "Extract F0 Curve",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.",
+ "# How to Report an Issue on GitHub": "# How to Report an Issue on GitHub",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.",
+ "Record Screen": "Record Screen",
+ "Record": "Record",
+ "Stop Recording": "Stop Recording",
+ "Introduce the model .pth path": "Introduce the model .pth path",
+ "See Model Information": "See Model Information",
+ "## Download Model": "## Download Model",
+ "Model Link": "Model Link",
+ "Introduce the model link": "Introduce the model link",
+ "Download Model": "Download Model",
+ "## Drop files": "## Drop files",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Drag your .pth file and .index file into this space. Drag one and then the other.",
+ "## Search Model": "## Search Model",
+ "Search": "Search",
+ "Introduce the model name to search.": "Introduce the model name to search.",
+ "We couldn't find models by that name.": "We couldn't find models by that name.",
+ "## Download Pretrained Models": "## Download Pretrained Models",
+ "Select the pretrained model you want to download.": "Select the pretrained model you want to download.",
+ "And select the sampling rate": "And select the sampling rate.",
+ "TTS Voices": "TTS Voices",
+ "TTS Speed": "TTS Speed",
+ "Increase or decrease TTS speed.": "Increase or decrease TTS speed.",
+ "Select the TTS voice to use for the conversion.": "Select the TTS voice to use for the conversion.",
+ "Text to Synthesize": "Text to Synthesize",
+ "Enter the text to synthesize.": "Enter the text to synthesize.",
+ "Upload a .txt file": "Upload a .txt file",
+ "Input path for text file": "Input path for text file",
+ "The path to the text file that contains content for text to speech.": "The path to the text file that contains content for text to speech.",
+ "Enter text to synthesize": "Enter text to synthesize",
+ "Output Path for TTS Audio": "Output Path for TTS Audio",
+ "Output Path for RVC Audio": "Output Path for RVC Audio",
+ "Enable Applio integration with Discord presence": "Enable Applio integration with Discord presence",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "It will activate the possibility of displaying the current Applio activity in Discord.",
+ "Enable Applio integration with applio.org/models using flask": "Enable Applio integration with applio.org/models using flask",
+ "It will activate the possibility of downloading models with a click from the website.": "It will activate the possibility of downloading models with a click from the website.",
+ "Enable fake GPU": "Enable fake GPU",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)",
+ "Restart Applio": "Restart Applio",
+ "Theme": "Theme",
+ "Select the theme you want to use. (Requires restarting Applio)": "Select the theme you want to use. (Requires restarting Applio)",
+ "Language": "Language",
+ "Select the language you want to use. (Requires restarting Applio)": "Select the language you want to use. (Requires restarting Applio)",
+ "Precision": "Precision",
+ "Select the precision you want to use for training and inference.": "Select the precision you want to use for training and inference.",
+ "Update precision": "Update precision",
+ "Plugin Installer": "Plugin Installer",
+ "Drag your plugin.zip to install it": "Drag your plugin.zip to install it",
+ "Version Checker": "Version Checker",
+ "Check which version of Applio is the latest to see if you need to update.": "Check which version of Applio is the latest to see if you need to update.",
+ "Check for updates": "Check for updates",
+ "Post-Process": "Post-Process",
+ "Post-process the audio to apply effects to the output.": "Post-process the audio to apply effects to the output.",
+ "Reverb": "Reverb",
+ "Apply reverb to the audio.": "Apply reverb to the audio.",
+ "Reverb Room Size": "Reverb Room Size",
+ "Set the room size of the reverb.": "Set the room size of the reverb.",
+ "Reverb Damping": "Reverb Damping",
+ "Set the damping of the reverb.": "Set the damping of the reverb.",
+ "Reverb Wet Gain": "Reverb Wet Gain",
+ "Set the wet gain of the reverb.": "Set the wet gain of the reverb.",
+ "Reverb Dry Gain": "Reverb Dry Gain",
+ "Set the dry gain of the reverb.": "Set the dry gain of the reverb.",
+ "Reverb Width": "Reverb Width",
+ "Set the width of the reverb.": "Set the width of the reverb.",
+ "Reverb Freeze Mode": "Reverb Freeze Mode",
+ "Set the freeze mode of the reverb.": "Set the freeze mode of the reverb.",
+ "Pitch Shift": "Pitch Shift",
+ "Apply pitch shift to the audio.": "Apply pitch shift to the audio.",
+ "Pitch Shift Semitones": "Pitch Shift Semitones",
+ "Set the pitch shift semitones.": "Set the pitch shift semitones.",
+ "Limiter": "Limiter",
+ "Apply limiter to the audio.": "Apply limiter to the audio.",
+ "Limiter Threshold dB": "Limiter Threshold dB",
+ "Set the limiter threshold dB.": "Set the limiter threshold dB.",
+ "Limiter Release Time": "Limiter Release Time",
+ "Set the limiter release time.": "Set the limiter release time.",
+ "Gain": "Gain",
+ "Apply gain to the audio.": "Apply gain to the audio.",
+ "Gain dB": "Gain dB",
+ "Set the gain dB.": "Set the gain dB.",
+ "Distortion": "Distortion",
+ "Apply distortion to the audio.": "Apply distortion to the audio.",
+ "Distortion Gain": "Distortion Gain",
+ "Set the distortion gain.": "Set the distortion gain.",
+ "Chorus": "Chorus",
+ "Apply chorus to the audio.": "Apply chorus to the audio.",
+ "Chorus Rate Hz": "Chorus Rate Hz",
+ "Set the chorus rate Hz.": "Set the chorus rate Hz.",
+ "Chorus Depth": "Chorus Depth",
+ "Set the chorus depth.": "Set the chorus depth.",
+ "Chorus Center Delay ms": "Chorus Center Delay ms",
+ "Set the chorus center delay ms.": "Set the chorus center delay ms.",
+ "Chorus Feedback": "Chorus Feedback",
+ "Set the chorus feedback.": "Set the chorus feedback.",
+ "Chorus Mix": "Chorus Mix",
+ "Set the chorus mix.": "Set the chorus mix.",
+ "Bitcrush": "Bitcrush",
+ "Apply bitcrush to the audio.": "Apply bitcrush to the audio.",
+ "Bitcrush Bit Depth": "Bitcrush Bit Depth",
+ "Set the bitcrush bit depth.": "Set the bitcrush bit depth.",
+ "Clipping": "Clipping",
+ "Apply clipping to the audio.": "Apply clipping to the audio.",
+ "Clipping Threshold": "Clipping Threshold",
+ "Set the clipping threshold.": "Set the clipping threshold.",
+ "Compressor": "Compressor",
+ "Apply compressor to the audio.": "Apply compressor to the audio.",
+ "Compressor Threshold dB": "Compressor Threshold dB",
+ "Set the compressor threshold dB.": "Set the compressor threshold dB.",
+ "Compressor Ratio": "Compressor Ratio",
+ "Set the compressor ratio.": "Set the compressor ratio.",
+ "Compressor Attack ms": "Compressor Attack ms",
+ "Set the compressor attack ms.": "Set the compressor attack ms.",
+ "Compressor Release ms": "Compressor Release ms",
+ "Set the compressor release ms.": "Set the compressor release ms.",
+ "Delay": "Delay",
+ "Apply delay to the audio.": "Apply delay to the audio.",
+ "Delay Seconds": "Delay Seconds",
+ "Set the delay seconds.": "Set the delay seconds.",
+ "Delay Feedback": "Delay Feedback",
+ "Set the delay feedback.": "Set the delay feedback.",
+ "Delay Mix": "Delay Mix",
+ "Set the delay mix.": "Set the delay mix.",
+ "Custom Embedder": "Custom Embedder",
+ "Select Custom Embedder": "Select Custom Embedder",
+ "Refresh embedders": "Refresh embedders",
+ "Folder Name": "Folder Name",
+ "Upload .bin": "Upload .bin",
+ "Upload .json": "Upload .json",
+ "Move files to custom embedder folder": "Move files to custom embedder folder",
+ "model information": "model information",
+ "Model Creator": "Model Creator",
+ "Name of the model creator. (Default: Unknown)": "Name of the model creator. (Default: Unknown)",
+ "Speaker ID": "Speaker ID",
+ "Select the speaker ID to use for the conversion.": "Select the speaker ID to use for the conversion.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.",
+ "Model Author Name": "Model Author Name",
+ "The name that will appear in the model information.": "The name that will appear in the model information.",
+ "Set name": "Set name"
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/es_ES.json b/assets/i18n/languages/es_ES.json
new file mode 100644
index 0000000000000000000000000000000000000000..41ffa886f6d296ff98fe228e810f83de77e37d2b
--- /dev/null
+++ b/assets/i18n/languages/es_ES.json
@@ -0,0 +1,325 @@
+{
+ "Training": "Adiestramiento",
+ "Inference": "Inferencia",
+ "Processing": "Tratamiento",
+ "Output Information": "Información de salida",
+ "Merge Audios": "Fusionar audios",
+ "The output information will be displayed here.": "La información de salida se mostrará aquí.",
+ "This section contains some extra utilities that often may be in experimental phases.": "Esta sección contiene algunas utilidades adicionales que a menudo pueden estar en fases experimentales.",
+ "Settings": "Configuración",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "Una herramienta de conversión de voz sencilla y de alta calidad centrada en la facilidad de uso y el rendimiento.",
+ "Download": "Descargar",
+ "Preprocess": "Preprocesar",
+ "Plugins": "Complementos",
+ "Report a Bug": "Informar de un error",
+ "Audio cutting": "Corte de audio",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "Se recomienda desactivar esta opción si el conjunto de datos ya se ha procesado.",
+ "Dataset Path": "Ruta del conjunto de datos",
+ "Refresh Datasets": "Actualizar conjuntos de datos",
+ "Enter dataset name": "Introduzca el nombre del conjunto de datos",
+ "Extra": "Extra",
+ "Sampling Rate": "Frecuencia de muestreo",
+ "Model Architecture": "Arquitectura de modelos",
+ "Model Information": "Información del modelo",
+ "Process effects": "Efectos del proceso",
+ "Audio Analyzer": "Analizador de audio",
+ "Embedder Model": "Modelo de incrustación",
+ "Extract": "Extraer",
+ "Name of the new model.": "Nombre del nuevo modelo.",
+ "Hop Length": "Longitud del lúpulo",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Denota el tiempo que tarda el sistema en realizar la transición a un cambio de tono significativo. Las longitudes de salto más pequeñas requieren más tiempo para la inferencia, pero tienden a producir una mayor precisión de tono.",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Es recomendable alinearlo con la VRAM disponible de su GPU. Un ajuste de 4 ofrece una precisión mejorada pero un procesamiento más lento, mientras que 8 proporciona resultados más rápidos y estándar.",
+ "Model Name": "Nombre del modelo",
+ "Dataset Name": "Nombre del conjunto de datos",
+ "Path to the dataset folder.": "Ruta de acceso a la carpeta del conjunto de datos.",
+ "Version of the model architecture.": "Versión de la arquitectura del modelo.",
+ "Name of the new dataset.": "Nombre del nuevo conjunto de datos.",
+ "Enter dataset path": "Introduzca la ruta del conjunto de datos",
+ "Upload Audio Dataset": "Cargar conjunto de datos de audio",
+ "Enter model name": "Introduzca el nombre del modelo",
+ "The sampling rate of the audio files.": "La frecuencia de muestreo de los archivos de audio.",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "El archivo de audio se ha agregado correctamente al conjunto de datos. Haga clic en el botón de preprocesamiento.",
+ "Save Only Latest": "Guarde solo lo más reciente",
+ "Pretrained": "Preentrenado",
+ "Preprocess Dataset": "Conjunto de datos de preprocesamiento",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Este ajuste le permite guardar los pesos del modelo al final de cada época.",
+ "Custom Pretrained": "Personalizado preentrenado",
+ "Upload Pretrained Model": "Cargar modelo preentrenado",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Haga clic en el botón Actualizar para ver el archivo previamente entrenado en el menú desplegable.",
+ "The file you dropped is not a valid pretrained file. Please try again.": "El archivo que ha quitado no es un archivo preentrenado válido. Por favor, inténtelo de nuevo.",
+ "Pretrained D Path": "D preentrenado personalizado",
+ "GPU Settings": "Configuración de GPU",
+ "GPU Custom Settings": "Configuración personalizada de la GPU",
+ "GPU Number": "Número de GPU",
+ "0 to ∞ separated by -": "0 a ∞ separados por -",
+ "Dataset Creator": "Creador de conjuntos de datos",
+ "Batch Size": "Tamaño del lote",
+ "Save Every Epoch": "Salva todas las épocas",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "El número de núcleos de CPU que se van a utilizar en el preproceso. La configuración predeterminada son los núcleos de la CPU, que se recomienda para la mayoría de los casos.",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Especifique el número de GPU que desea utilizar para la extracción introduciéndolas separadas por guiones (-).",
+ "Model used for learning speaker embedding.": "Modelo utilizado para aprender la incrustación de altavoces.",
+ "Total Epoch": "Época total",
+ "Save Every Weights": "Ahorre todos los pesos",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Al habilitar esta configuración, los archivos G y D se guardarán solo sus versiones más recientes, lo que conservará efectivamente el espacio de almacenamiento.",
+ "Pretrained Custom Settings": "Configuración personalizada previamente entrenada",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "El uso de modelos preentrenados personalizados puede conducir a resultados superiores, ya que la selección de los modelos preentrenados más adecuados adaptados al caso de uso específico puede mejorar significativamente el rendimiento.",
+ "Refresh Custom Pretraineds": "Actualización de preentrenados personalizados",
+ "The GPU information will be displayed here.": "La información de la GPU se mostrará aquí.",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Especifique el número de GPU que desea utilizar para el preprocesamiento introduciéndolas separadas por guiones (-). Por el momento, el uso de múltiples gpu no tendrá un efecto significativo.",
+ "Pretrained G Path": "G preentrenado personalizado",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "El número de núcleos de CPU que se van a utilizar en el proceso de extracción. La configuración predeterminada son los núcleos de la CPU, que se recomienda para la mayoría de los casos.",
+ "GPU Information": "Información de GPU",
+ "Pitch Guidance": "Guía de lanzamiento",
+ "Use CPU": "Usar CPU",
+ "Force the use of CPU for training.": "Forzar el uso de la CPU para el entrenamiento.",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Utilice modelos preentrenados cuando entrene los suyos propios. Este enfoque reduce la duración de la formación y mejora la calidad general.",
+ "Extract Features": "Extraer características",
+ "Index Algorithm": "Algoritmo de índice",
+ "Cache Dataset in GPU": "Conjunto de datos de caché en GPU",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Priorizamos la ejecución de la extracción del modelo en la GPU para obtener un rendimiento más rápido. Si prefiere usar la CPU, simplemente deje el campo GPU en blanco.",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Al emplear la guía de tono, es factible reflejar la entonación de la voz original, incluido su tono. Esta característica es particularmente valiosa para el canto y otros escenarios en los que es esencial preservar la melodía original o el patrón de tono.",
+ "Specifies the overall quantity of epochs for the model training process.": "Especifica la cantidad total de épocas para el proceso de entrenamiento del modelo.",
+ "Cache the dataset in GPU memory to speed up the training process.": "Almacene en caché el conjunto de datos en la memoria de la GPU para acelerar el proceso de entrenamiento.",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Priorizamos la ejecución del preprocesamiento del modelo en la GPU para obtener un rendimiento más rápido. Si prefiere usar la CPU, simplemente deje el campo GPU en blanco.",
+ "Overtraining Detector": "Detector de sobreentrenamiento",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans es un algoritmo de agrupación que divide el conjunto de datos en K clústeres. Esta configuración es especialmente útil para conjuntos de datos grandes.",
+ "Overtraining Detector Settings": "Configuración del detector de sobreentrenamiento",
+ "Overtraining Threshold": "Umbral de sobreentrenamiento",
+ "Fresh Training": "Formación fresca",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Detecte el sobreentrenamiento para evitar que el modelo aprenda demasiado bien los datos de entrenamiento y pierda la capacidad de generalizar a nuevos datos.",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Establezca el número máximo de épocas que desea que el modelo deje de entrenar si no se detecta ninguna mejora.",
+ "Start Training": "Empezar a entrenar",
+ "Stop Training": "Dejar de entrenar",
+ "Generate Index": "Generar índice",
+ "Export Model": "Modelo de exportación",
+ "Exported Index file": "Archivo de índice exportado",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "Habilite esta configuración solo si está entrenando un nuevo modelo desde cero o reiniciando el entrenamiento. Elimina todos los pesos y registros de tensorboard generados anteriormente.",
+ "Exported Pth file": "Archivo Pth exportado",
+ "Upload": "Subir",
+ "Select the pth file to be exported": "Seleccione el archivo pth que se va a exportar",
+ "Select the index file to be exported": "Seleccione el archivo de índice que se va a exportar",
+ "Refresh": "Actualizar",
+ "Voice Model": "Modelo de voz",
+ "Index File": "Archivo de índice",
+ "Single": "Solo",
+ "Unload Voice": "Descargar voz",
+ "Select Audio": "Seleccionar audio",
+ "Upload Audio": "Subir audio",
+ "Select the audio to convert.": "Selecciona el audio que quieres convertir.",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "El botón 'Subir' es solo para google colab: Sube los archivos exportados a la carpeta ApplioExported en tu Google Drive.",
+ "Select the index file to use for the conversion.": "Seleccione el archivo de índice que se utilizará para la conversión.",
+ "Advanced Settings": "Ajustes avanzados",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Borrar salidas (elimina todos los audios de los recursos/audios)",
+ "Custom Output Path": "Ruta de salida personalizada",
+ "Output Path": "Ruta de salida",
+ "Export Format": "Formato de exportación",
+ "Autotune": "Ajuste automático",
+ "Split Audio": "Audio dividido",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "La ruta donde se guardará el audio de salida, de forma predeterminada en assets/audios/output.wav",
+ "Clean Audio": "Audio limpio",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Divida el audio en fragmentos para la inferencia y obtener mejores resultados en algunos casos.",
+ "Select the format to export the audio.": "Selecciona el formato para exportar el audio.",
+ "Upscale Audio": "Audio de lujo",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Limpie su salida de audio utilizando algoritmos de detección de ruido, recomendados para audios hablados.",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Aplique un autotune suave a sus inferencias, recomendado para conversiones de canto.",
+ "Formant Shifting": "Cambio de formantes",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Aumente la escala del audio a una calidad más alta, recomendado para audios de baja calidad. (Podría llevar más tiempo procesar el audio)",
+ "Clean Strength": "Fuerza limpia",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Habilite el cambio de formantes. Se utiliza para conversiones de macho a hembra y viceversa.",
+ "Browse presets for formanting": "Examinar los ajustes preestablecidos para el formante",
+ "Pitch": "Alquitrán",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Establezca el nivel de limpieza en el audio que desee, cuanto más lo aumente, más se limpiará, pero es posible que el audio esté más comprimido.",
+ "Default value is 1.0": "El valor predeterminado es 1.0",
+ "Presets are located in /assets/formant_shift folder": "Los ajustes preestablecidos se encuentran en la carpeta /assets/formant_shift",
+ "Timbre for formant shifting": "Timbre para el cambio de formantes",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Establezca el tono del audio, cuanto mayor sea el valor, mayor será el tono.",
+ "Convert": "Convertir",
+ "Pitch extraction algorithm": "Algoritmo de extracción de tono",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Influencia ejercida por el fichero índice; Un valor más alto corresponde a una mayor influencia. Sin embargo, optar por valores más bajos puede ayudar a mitigar los artefactos presentes en el audio.",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Si el número es mayor o igual a tres, el empleo del filtrado de la mediana en los resultados tonales recopilados tiene el potencial de disminuir la respiración.",
+ "Volume Envelope": "Envolvente de volumen",
+ "Filter Radius": "Radio del filtro",
+ "Determine at how many epochs the model will saved at.": "Determine en cuántas épocas se guardará el modelo.",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Sustituya o mezcle con la envolvente de volumen de la salida. Cuanto más cerca esté la relación de 1, más se empleará la envolvente de salida.",
+ "Search Feature Ratio": "Relación de características de búsqueda",
+ "Protect Voiceless Consonants": "Proteger las consonantes sordas",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Proteja las consonantes distintivas y los sonidos respiratorios para evitar desgarros electroacústicos y otros artefactos. Llevar el parámetro a su valor máximo de 0,5 ofrece una protección completa. Sin embargo, la reducción de este valor podría disminuir el alcance de la protección y, al mismo tiempo, mitigar el efecto de indexación.",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Algoritmo de extracción de tono para usar en la conversión de audio. El algoritmo predeterminado es rmvpe, que se recomienda para la mayoría de los casos.",
+ "Quefrency for formant shifting": "Quefrency for formant shifting",
+ "Export Audio": "Exportar audio",
+ "Batch": "Lote",
+ "Select the folder containing the audios to convert.": "Seleccione la carpeta que contiene los audios para convertir.",
+ "Output Folder": "Carpeta de salida",
+ "Enter output path": "Introduzca la ruta de salida",
+ "Get information about the audio": "Obtener información sobre el audio",
+ "Voice Blender": "Licuadora de voz",
+ "## Voice Blender": "## Licuadora de voz",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Seleccione dos modelos de voz, establezca el porcentaje de mezcla deseado y combínelos en una voz completamente nueva.",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Ajustar la posición más hacia un lado u otro hará que el modelo se parezca más al primero o al segundo.",
+ "Select the folder where the output audios will be saved.": "Seleccione la carpeta donde se guardarán los audios de salida.",
+ "You can also use a custom path.": "También puede utilizar una ruta de acceso personalizada.",
+ "Blend Ratio": "Proporción de mezcla",
+ "Drag and drop your model here": "Arrastra y suelta tu modelo aquí",
+ "The information to be placed in the model (You can leave it blank or put anything).": "La información que se va a colocar en el modelo (Puedes dejarlo en blanco o poner cualquier cosa).",
+ "Model extraction": "Extracción de modelos",
+ "Model conversion": "Conversión de modelos",
+ "Select the voice model to use for the conversion.": "Seleccione el modelo de voz que se utilizará para la conversión.",
+ "Extract F0 Curve": "Extraer curva F0",
+ "Input Folder": "Carpeta de entrada",
+ "Enter input path": "Introduzca la ruta de entrada",
+ "Fusion": "Fusión",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Haga clic en el botón 'Grabar pantalla' a continuación para comenzar a grabar el problema que está experimentando.",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Establece la configuración avanzada del GPU, recomendada para usuarios con una mejor arquitectura de GPU.",
+ "Record Screen": "Pantalla de grabación",
+ "Record": "Grabar",
+ "Stop Recording": "Detener grabación",
+ "Model information to be placed": "Información del modelo que se va a colocar",
+ "Introduce the model pth path": "Introducción de la ruta pth del modelo",
+ "View": "Vista",
+ "Inroduce the model information": "Introducir la información del modelo",
+ "Path to Model": "Ruta de acceso al modelo",
+ "Model Link": "Enlace del modelo",
+ "Pth file": "Archivo Pth",
+ "Output of the pth file": "Salida del fichero pth",
+ "# How to Report an Issue on GitHub": "# Cómo reportar un problema en GitHub",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Vaya a [Problemas de GitHub] (https://github.com/IAHispano/Applio/issues) y haga clic en el botón 'Nuevo problema'.",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Una vez que hayas terminado de grabar el número, haz clic en el botón 'Detener grabación' (el mismo botón, pero la etiqueta cambia dependiendo de si estás grabando activamente o no).",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Arrastre el archivo .pth y el archivo .index a este espacio. Arrastre uno y luego el otro.",
+ "Enter path to model": "Introduzca la ruta al modelo",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "La curva f0 representa las variaciones en la frecuencia base de una voz a lo largo del tiempo, mostrando cómo sube y baja el tono.",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Complete la plantilla de problema proporcionada, asegurándose de incluir los detalles según sea necesario, y utilice la sección de activos para cargar el archivo grabado del paso anterior.",
+ "View model information": "Ver información del modelo",
+ "## Download Model": "## Descargar modelo",
+ "TTS Voices": "Voces TTS",
+ "Increase or decrease TTS speed.": "Aumente o disminuya la velocidad TTS.",
+ "Download Model": "Descargar modelo",
+ "See Model Information": "Ver información del modelo",
+ "## Search Model": "## Modelo de búsqueda",
+ "## Download Pretrained Models": "## Descargar modelos preentrenados",
+ "TTS Speed": "Velocidad TTS",
+ "Select the TTS voice to use for the conversion.": "Seleccione la voz TTS que se utilizará para la conversión.",
+ "And select the sampling rate": "Y seleccione la frecuencia de muestreo.",
+ "Upload a .txt file": "Subir un archivo .txt",
+ "Introduce the model link": "Presentar el enlace del modelo",
+ "Input path for text file": "Ruta de entrada para el archivo de texto",
+ "Output Path for TTS Audio": "Ruta de salida para audio TTS",
+ "Output Path for RVC Audio": "Ruta de salida para audio RVC",
+ "Enable Applio integration with Discord presence": "Habilitar la integración de Applio con la presencia de Discord",
+ "Enable Applio integration with applio.org/models using flask": "Habilite la integración de Applio con applio.org/models mediante matraz",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "Se activará la posibilidad de mostrar la actividad actual de Applio en Discord.",
+ "It will activate the possibility of downloading models with a click from the website.": "Se activará la posibilidad de descargar modelos con un clic desde la página web.",
+ "Enable fake GPU": "Habilitar GPU falsa",
+ "Search": "Buscar",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Activa la pestaña de tren. Sin embargo, tenga en cuenta que este dispositivo carece de capacidades de GPU, por lo que no se admite la capacitación. Esta opción es solo para fines de prueba. (Esta opción reiniciará Applio)",
+ "Introduce the model .pth path": "Introducción de la ruta de acceso .pth del modelo",
+ "## Drop files": "## Soltar archivos",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "Actualmente, el entrenamiento no es compatible debido a la ausencia de una GPU. Para activar la pestaña de entrenamiento, vaya a la pestaña de configuración y habilite la opción 'GPU falsa'.",
+ "Theme": "Tema",
+ "Update precision": "Precisión de la actualización",
+ "We couldn't find models by that name.": "No pudimos encontrar modelos con ese nombre.",
+ "Drag your plugin.zip to install it": "Arrastra tu plugin.zip para instalarlo",
+ "Check which version of Applio is the latest to see if you need to update.": "Compruebe qué versión de Applio es la más reciente para ver si necesita actualizar.",
+ "Check for updates": "Buscar actualizaciones",
+ "Post-process the audio to apply effects to the output.": "Procesa el audio para aplicar efectos a la salida.",
+ "Reverb": "Reverberación",
+ "Apply reverb to the audio.": "Aplica reverberación al audio.",
+ "Version Checker": "Comprobador de versiones",
+ "Introduce the model name to search.": "Introduzca el nombre del modelo para buscar.",
+ "Text to Synthesize": "Texto a sintetizar",
+ "Enter the text to synthesize.": "Introduzca el texto que desea sintetizar.",
+ "Enter text to synthesize": "Introduzca el texto que desea sintetizar",
+ "The path to the text file that contains content for text to speech.": "Ruta de acceso al archivo de texto que contiene contenido para la conversión de texto a voz.",
+ "Restart Applio": "Reiniciar Applio",
+ "Select the theme you want to use. (Requires restarting Applio)": "Seleccione el tema que desea utilizar. (Requiere reiniciar Applio)",
+ "Precision": "Precisión",
+ "Select the language you want to use. (Requires restarting Applio)": "Seleccione el idioma que desea utilizar. (Requiere reiniciar Applio)",
+ "Language": "Idioma",
+ "Select the precision you want to use for training and inference.": "Seleccione la precisión que desea usar para el entrenamiento y la inferencia.",
+ "Set the room size of the reverb.": "Establezca el tamaño de la sala de la reverberación.",
+ "Reverb Wet Gain": "Reverberación Ganancia Húmeda",
+ "Set the damping of the reverb.": "Ajusta la amortiguación de la reverberación.",
+ "Reverb Freeze Mode": "Modo de congelación de reverberación",
+ "Reverb Width": "Ancho de reverberación",
+ "Set the dry gain of the reverb.": "Ajusta la ganancia en seco de la reverberación.",
+ "Reverb Dry Gain": "Reverberación Ganancia en seco",
+ "Apply pitch shift to the audio.": "Aplica un cambio de tono al audio.",
+ "Pitch Shift Semitones": "Semitonos de cambio de tono",
+ "Set the pitch shift semitones.": "Establezca los semitonos de cambio de tono.",
+ "Apply limiter to the audio.": "Aplique un limitador al audio.",
+ "Select the pretrained model you want to download.": "Seleccione el modelo previamente entrenado que desea descargar.",
+ "Limiter Threshold dB": "Umbral del limitador dB",
+ "Set the limiter threshold dB.": "Establezca el umbral del limitador en dB.",
+ "Gain": "Ganar",
+ "Set the limiter release time.": "Establezca el tiempo de liberación del limitador.",
+ "Apply gain to the audio.": "Aplica ganancia al audio.",
+ "Limiter Release Time": "Tiempo de liberación del limitador",
+ "Gain dB": "Ganancia dB",
+ "Set the gain dB.": "Ajuste la ganancia dB.",
+ "Chorus": "Coro",
+ "Apply chorus to the audio.": "Aplica coro al audio.",
+ "Plugin Installer": "Instalador de plugins",
+ "Post-Process": "Post-Proceso",
+ "Set the chorus rate Hz.": "Ajuste la velocidad del coro Hz.",
+ "Set the wet gain of the reverb.": "Ajusta la ganancia húmeda de la reverberación.",
+ "Reverb Room Size": "Tamaño de la sala de reverberación",
+ "Reverb Damping": "Amortiguación de reverberación",
+ "Set the width of the reverb.": "Establezca el ancho de la reverberación.",
+ "Pitch Shift": "Cambio de tono",
+ "Chorus Depth": "Profundidad del coro",
+ "Set the freeze mode of the reverb.": "Establezca el modo de congelación de la reverberación.",
+ "Set the chorus depth.": "Ajusta la profundidad del coro.",
+ "Set the chorus center delay ms.": "Establezca el retardo del centro del coro ms.",
+ "Set the chorus mix.": "Ajusta la mezcla de coro.",
+ "Set the chorus feedback.": "Establezca la retroalimentación del coro.",
+ "Chorus Feedback": "Comentarios del coro",
+ "Clipping": "Recorte",
+ "Bitcrush": "Bitcrush (en inglés)",
+ "Set the clipping threshold.": "Establezca el umbral de recorte.",
+ "Clipping Threshold": "Umbral de recorte",
+ "Set the bitcrush bit depth.": "Establezca la profundidad del bit de trituración de bits.",
+ "Apply clipping to the audio.": "Aplica recorte al audio.",
+ "Apply compressor to the audio.": "Aplique el compresor al audio.",
+ "Compressor Threshold dB": "Umbral del compresor dB",
+ "Compressor Ratio": "Relación del compresor",
+ "Set the compressor ratio.": "Ajuste la relación del compresor.",
+ "Bitcrush Bit Depth": "Profundidad de bits de Bitcrush",
+ "Set the compressor attack ms.": "Configure el ataque del compresor ms.",
+ "Set the compressor release ms.": "Ajuste la liberación del compresor ms.",
+ "Apply delay to the audio.": "Aplica retardo al audio.",
+ "Limiter": "Limitador",
+ "Distortion": "Distorsión",
+ "Apply distortion to the audio.": "Aplica distorsión al audio.",
+ "Distortion Gain": "Ganancia de distorsión",
+ "Chorus Rate Hz": "Frecuencia de coro Hz",
+ "Set the distortion gain.": "Ajusta la ganancia de distorsión.",
+ "Chorus Center Delay ms": "Retardo del centro de coro ms",
+ "Apply bitcrush to the audio.": "Aplica bitcrush al audio.",
+ "Chorus Mix": "Mezcla de coros",
+ "Set the delay seconds.": "Establezca los segundos de retardo.",
+ "Compressor": "Compresor",
+ "Set the compressor threshold dB.": "Ajuste el umbral del compresor en dB.",
+ "Compressor Attack ms": "Ataque del compresor ms",
+ "Compressor Release ms": "Liberación del compresor ms",
+ "Delay": "Demorar",
+ "Delay Seconds": "Segundos de retraso",
+ "Custom Embedder": "Incrustador personalizado",
+ "Delay Mix": "Mezcla de retardo",
+ "Set the delay mix.": "Ajusta la mezcla de retardo.",
+ "Select Custom Embedder": "Seleccione Incrustador personalizado",
+ "Upload .bin": "Subir .bin",
+ "Set the delay feedback.": "Establezca la retroalimentación de retraso.",
+ "Folder Name": "Nombre de la carpeta",
+ "Delay Feedback": "Retroalimentación de retraso",
+ "Refresh embedders": "Actualización de incrustaciones",
+ "Upload .json": "Subir .json",
+ "Move files to custom embedder folder": "Mover archivos a una carpeta de incrustación personalizada",
+ "Name of the model creator. (Default: Unknown)": "Nombre del creador del modelo. (Predeterminado: Desconocido)",
+ "Model Creator": "Creador de modelos",
+ "model information": "Información del modelo",
+ "Set name": "Nombre del conjunto",
+ "Speaker ID": "ID del altavoz",
+ "Model Author Name": "Nombre del autor del modelo",
+ "Select the speaker ID to use for the conversion.": "Seleccione el ID de altavoz que se utilizará para la conversión.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "Establezca la intensidad del ajuste automático: cuanto más lo aumente, más se ajustará a la cuadrícula cromática.",
+ "The name that will appear in the model information.": "El nombre que aparecerá en la información del modelo."
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/eu_EU.json b/assets/i18n/languages/eu_EU.json
new file mode 100644
index 0000000000000000000000000000000000000000..6774c1e25380c7b2e6d1b923cd101beaa128265a
--- /dev/null
+++ b/assets/i18n/languages/eu_EU.json
@@ -0,0 +1,325 @@
+{
+ "Processing": "Tratamendu",
+ "Output Information": "Irteera-informazioa",
+ "Extra": "Apartekoa",
+ "Training": "Trebatzea",
+ "The output information will be displayed here.": "Irteerako informazioa hemen erakutsiko da.",
+ "Audio Analyzer": "Audio-aztogilea",
+ "Merge Audios": "Audioak bat egin",
+ "Settings": "Konfigurazioa",
+ "This section contains some extra utilities that often may be in experimental phases.": "Atal honek maiz fase esperimentaletan egon daitezkeen erabilgarritasun gehigarri batzuk jasotzen ditu.",
+ "Model Information": "Ereduaren informazioa",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "Ahots erraza eta kalitate handikoa bihurtzeko tresna bat, erabiltzeko erraztasunean eta errendimenduan oinarritua.",
+ "Report a Bug": "Akats baten berri ematea",
+ "Download": "Deskargatu",
+ "Plugins": "Osagarriak",
+ "Preprocess": "Aurreprozektatzea",
+ "Inference": "Inferentzia",
+ "Audio cutting": "Audio mozketa",
+ "Model Name": "Ereduaren izena",
+ "Process effects": "Prozesuaren ondorioak",
+ "Name of the new model.": "Eredu berriaren izena.",
+ "Dataset Path": "Datu multzoaren ibilbidea",
+ "Enter model name": "Sartu ereduaren izena",
+ "Dataset Name": "Datu-multzoaren izena",
+ "Enter dataset name": "Sartu datu-multzoaren izena",
+ "Refresh Datasets": "Datu-multzoak eguneratzea",
+ "Upload Audio Dataset": "Audio-datuen multzoa kargatzea",
+ "Path to the dataset folder.": "Datu-multzoaren karpetara sartzeko ibilbidea.",
+ "Name of the new dataset.": "Datu-multzo berriaren izena.",
+ "Enter dataset path": "Sartu datu-multzoaren ibilbidea",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "Datu-multzoa dagoeneko prozesatu bada, aukera hori desaktibatzea gomendatzen da.",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Audio artxiboa datu multzoari behar bezala erantsi zaio. Klik egin aurreprozesamendu botoian.",
+ "Dataset Creator": "Datu-multzoen sortzailea",
+ "Sampling Rate": "Laginketa maiztasuna",
+ "Model Architecture": "Ereduen arkitektura",
+ "Embedder Model": "Inkrustazio-eredua",
+ "Version of the model architecture.": "Ereduaren arkitekturaren bertsioa.",
+ "Extract": "Atera",
+ "The sampling rate of the audio files.": "Audio-artxiboen laginketa-maiztasuna.",
+ "Batch Size": "Lotearen tamaina",
+ "Preprocess Dataset": "Aurreprozesamenduko datuen multzoa",
+ "Hop Length": "Lupuluaren luzera",
+ "Save Every Epoch": "Salbatu garai guztiak",
+ "Determine at how many epochs the model will saved at.": "Zehaztu zein garaitan gordeko den eredua.",
+ "Total Epoch": "Garai osoa",
+ "Specifies the overall quantity of epochs for the model training process.": "Ereduaren entrenamendu-prozesurako garaien guztizko kopurua zehazten du.",
+ "Model used for learning speaker embedding.": "Bozgorailuak sartzen ikasteko erabiltzen den eredua.",
+ "Pretrained": "Preentrenadoa",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Sistemak tonu-aldaketa esanguratsu baterako trantsizioa egiteko behar duen denboraz ohartgabetzen du. Jauzi-luzera txikienek denbora gehiago behar dute inferentziarako, baina tonu-zehaztasun handiagoa sortzeko joera dute.",
+ "Save Only Latest": "Gorde oraintsuena bakarrik",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Gomendagarria da GPUren VRAM erabilgarriarekin lerrokatzea. 4ko doikuntzak zehaztasun hobetua eskaintzen du, baina prozesatze motelagoa, eta 8k emaitza azkarragoak eta estandarragoak ematen ditu.",
+ "Save Every Weights": "Pisu guztiak aurreztu",
+ "Upload Pretrained Model": "Aurrez prestatutako eredua kargatzea",
+ "Refresh Custom Pretraineds": "Aurreentu pertsonalizatuak eguneratzea",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Doikuntza horri esker, ereduaren pisuak garai bakoitzaren amaieran gorde ahal izango dituzu.",
+ "Custom Pretrained": "Aurrez prestatutako pertsonalizatua",
+ "Pretrained Custom Settings": "Aldez aurretik entrenatuta dagoen konfigurazio pertsonalizatua",
+ "The file you dropped is not a valid pretrained file. Please try again.": "Kendu duen artxiboa ez da artxibo baliozkoa. Mesedez, saia zaitez berriro.",
+ "Pretrained G Path": "G, pertsonalizatua",
+ "Pretrained D Path": "Pertsonalizatutako D",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Konfigurazio hori gaitzean, G eta D artxiboak bertsio berrienak bakarrik gordeko dira, eta horrek biltegiratzeko espazioa gordeko du.",
+ "GPU Settings": "GPUren konfigurazioa",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Aurreendonatu pertsonalizatuak erabiltzeak emaitza handiagoak izan ditzake, izan ere, erabilera espezifikoaren kasura egokitutako eredu egokienen hautaketak errendimendua nabarmen hobetu dezake.",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Klik eguneratu botoian, aldez aurretik menu zabalgarrian entrenatutako artxiboa ikusteko.",
+ "GPU Number": "GPU zenbakia",
+ "GPU Custom Settings": "GPUren konfigurazio pertsonalizatua",
+ "0 to ∞ separated by -": "0tik ∞- bananduta",
+ "The GPU information will be displayed here.": "GPUren informazioa hemen erakutsiko da.",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "GPUren konfigurazio aurreratua ezartzen du, GPUren arkitektura hobea duten erabiltzaileentzat gomendatua.",
+ "Use CPU": "CPU erabili",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Zehaztu aurreprozesamendurako erabili nahi duzun GPU kopurua, gidoien bidez bereiziz (-). Oraingoz, gpu anitzen erabilerak ez du eragin esanguratsurik izango.",
+ "Pitch Guidance": "Jaurtiketa gida",
+ "GPU Information": "GPUren informazioa",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "Aurrekoprozesoan erabiliko diren CPU nukleoen kopurua. Aurrez zehaztutako konfigurazioa CPUren nukleoak dira, kasu gehienetarako gomendatzen dena.",
+ "Force the use of CPU for training.": "Entrenamendurako CPUren erabilera behartzea.",
+ "Extract Features": "Ezaugarriak atera",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "Erauzketa-prozesuan erabiliko diren CPU nukleoen kopurua. Aurrez zehaztutako konfigurazioa CPUren nukleoak dira, kasu gehienetarako gomendatzen dena.",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Zehaztu zer GPU erabili nahi duzun erauzketarako, eta gidoien bidez bereizita sartu (-).",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Erabil itzazu bereak entrenatzen dituenean. Ikuspegi horrek prestakuntzaren iraupena murrizten du eta kalitate orokorra hobetzen du.",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "GPUn ereduaren erauzketa gauzatzea lehenesten dugu, errendimendu azkarragoa lortzeko. CPU erabili nahi baduzu, utzi GPU zelaia zuri.",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Tonu-gida erabiltzean, posible da jatorrizko ahotsaren intonazioa islatzea, tonua barne. Ezaugarri hori bereziki baliotsua da kanturako eta beste eszenatoki batzuetarako, zeinetan funtsezkoa baita jatorrizko melodia edo tonu-eredua zaintzea.",
+ "Cache Dataset in GPU": "GPUko katxe-datuen multzoa",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "GPUn ereduaren aurreprozesamendua gauzatzea lehenesten dugu, errendimendu azkarragoa lortzeko. CPU erabili nahi baduzu, utzi GPU zelaia zuri.",
+ "Index Algorithm": "Indize algoritmoa",
+ "Cache the dataset in GPU memory to speed up the training process.": "GPUren memorian gorde datu-multzoa, entrenamendu-prozesua bizkortzeko.",
+ "Overtraining Detector": "Gainentrenamendu-detektagailua",
+ "Overtraining Detector Settings": "Gainentrenamendu-detektagailuaren konfigurazioa",
+ "Overtraining Threshold": "Gainentrenamendu-atalasea",
+ "Fresh Training": "Prestakuntza freskoa",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans Klusterretan datu-multzoa banatzen duen talde algoritmoa da. Konfigurazio hori bereziki baliagarria da datu-multzo handientzat.",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Detekta ezazu gainentrenamendua, ereduak entrenamendu datuak ondoegi ikas ez dezan eta datu berriak orokortzeko gaitasuna gal ez dezan.",
+ "Generate Index": "Indizea sortu",
+ "Export Model": "Esportazio-eredua",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Ereduak entrenatzeari uztea nahi duen gehienezko garai kopurua ezarri, hobekuntzarik antzeman ezean.",
+ "Start Training": "Entrenatzen hasi",
+ "Stop Training": "Entrenatzeari uztea",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "Konfigurazio hori, eredu berri bat zerotik entrenatzen ari bada edo entrenamendua berrabiaraziz gero bakarrik. Ezabatu aurretik sortutako tensorboard-pisu eta erregistro guztiak.",
+ "Exported Pth file": "Esportatutako Pth artxiboa",
+ "Exported Index file": "Esportatutako indizearen artxiboa",
+ "Upload": "Igo",
+ "Select the pth file to be exported": "Esportatuko den pth artxiboa hautatu",
+ "Select the index file to be exported": "Esportatuko den aurkibide-artxiboa hautatu",
+ "Index File": "Aurkibide-artxiboa",
+ "Refresh": "Eguneratu",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "'Subir' botoia google colab-entzat baino ez da: ApplioExported karpetara esportatutako artxiboak igo ditu zure Google Drive-n.",
+ "Single": "Ezkongai",
+ "Voice Model": "Ahots-eredua",
+ "Select the voice model to use for the conversion.": "Bihurtzeko erabiliko den ahots-eredua hautatu.",
+ "Select Audio": "Audioa aukeratu",
+ "Upload Audio": "Audioa igo",
+ "Select the index file to use for the conversion.": "Bihurtzeko erabiliko den aurkibide-artxiboa hautatu.",
+ "Unload Voice": "Ahotsa deskargatu",
+ "Select the audio to convert.": "Aukeratu bihurtu nahi duzun audioa.",
+ "Advanced Settings": "Doikuntza aurreratuak",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Ezabatu irteerak (baliabide/audioen audio guztiak kendu)",
+ "Output Path": "Irteera-ibilbidea",
+ "Custom Output Path": "Irteera-ibilbide pertsonalizatua",
+ "Export Format": "Esportazio formatua",
+ "Select the format to export the audio.": "Aukeratu audioa esportatzeko formatua.",
+ "Split Audio": "Audio zatitua",
+ "Clean Audio": "Audio garbia",
+ "Clean Strength": "Indar garbia",
+ "Upscale Audio": "Luxuzko audioa",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Aplika iezken autotune leun bat bere inferentziari, kantu-konbertsioetarako gomendatua.",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Garbitu audio-irteera, zarata detektatzeko algoritmoak erabiliz, hitz egindako audioetarako gomendatuta.",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "Irteerako audioa gordeko den ibilbidea, aldez aurretik asset/ audio/ output.wav",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Audioaren eskala kalitate baxuagora igotzea, kalitate baxuko audioetarako gomendatua. (Denbora gehiago eman lezake audioa prozesatzeko)",
+ "Formant Shifting": "Formatzaileen aldaketa",
+ "Browse presets for formanting": "Formatzailearentzat aurrez ezarritako doikuntzak aztertzea",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Treba ezazu formatzaileen aldaketa. Artik eme izatera konbersioetarako erabiltzen da, eta alderantziz.",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Audioa zatitan zatitu inferentziarako eta emaitza hobeak lortzen ditu kasu batzuetan.",
+ "Pitch": "Mundruna",
+ "Autotune": "Doikuntza automatikoa",
+ "Default value is 1.0": "Aurrez zehaztutako balioa 1.0 da",
+ "Timbre for formant shifting": "Formanteak aldatzeko tinbrea",
+ "Quefrency for formant shifting": "Quefrency for formant shifting",
+ "Presets are located in /assets/formant_shift folder": "Aurrez ezarritako doikuntzak /assets/formant_shift karpetan daude",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Nahi duen audioan garbitasun maila ezarri, zenbat eta gehiago handitu, orduan eta garbiagoa izango da, baina baliteke audioa konprimituago egotea.",
+ "Filter Radius": "Iragazkiaren irratia",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Audioaren tonua ezarri, zenbat eta handiagoa izan balioa, orduan eta tonu handiagoa izango da.",
+ "Volume Envelope": "Bolumenaren inguratzailea",
+ "Search Feature Ratio": "Bilaketa-ezaugarrien zerrenda",
+ "Protect Voiceless Consonants": "Kontsonante gorrak babestea",
+ "Convert": "Bihurtu",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Fitxategi aurkilearen eragina; Balio handiagoa eragin handiagoari dagokio. Hala ere, balio baxuagoak aukeratzeak audioan dauden lehergailuak arintzen lagun dezake.",
+ "Pitch extraction algorithm": "Tonua erauzteko algoritmoa",
+ "Export Audio": "Audioa esportatu",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Ordeztu edo nahastu irteeraren bolumen-inguratzailearekin. Zenbat eta hurbilago egon 1eko zerrenda, orduan eta gehiago erabiliko da irteera-inguratzailea.",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Kopurua hiru edo handiagoa bada, bildutako emaitza tonaletan erdibanarraren iragazketa erabiltzeak arnasketa gutxitzeko ahalmena du.",
+ "Batch": "Lotea",
+ "Input Folder": "Sarrerako karpeta",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Tonua erauzteko algoritmoa, audioaren bihurketan erabiltzeko. Aurrez zehaztutako algoritmoa rmvpe da, kasu gehienetarako gomendatzen dena.",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Babestu kontsonante bereizgarriak eta arnas soinuak, ukendu elektroakustikoak eta beste lehergailu batzuk saihesteko. Parametroa gehienez 0,5 baliora eramateak babes osoa eskaintzen du. Hala ere, balio hori murrizteak babesaren irismena murriztu dezake eta, aldi berean, indexazio-efektua arindu.",
+ "Select the folder containing the audios to convert.": "Aukeratu audioek duten karpeta, bihurtzeko.",
+ "Enter input path": "Sartu sarrerako ibilbidea",
+ "Output Folder": "Irteera karpeta",
+ "Enter output path": "Sartu irteera-ibilbidea",
+ "Get information about the audio": "Audioari buruzko informazioa eskuratzea",
+ "Select the folder where the output audios will be saved.": "Aukeratu irteerako audioak gordeko diren karpeta.",
+ "Voice Blender": "Ahots-likuagailua",
+ "## Voice Blender": "## Licuadora de voz",
+ "Drag and drop your model here": "Arrastaka eta askatu zure eredua hemen",
+ "You can also use a custom path.": "Sarbide pertsonalizatuko ibilbide bat ere erabil dezakezu.",
+ "Blend Ratio": "Nahasketa-proportzioa",
+ "Path to Model": "Eredura sartzeko ibilbidea",
+ "Fusion": "Bat-egitea",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Bi ahots-eredu hautatu, nahi den nahasketa-ehunekoa ezarri eta ahots guztiz berri batean konbinatzeko.",
+ "Enter path to model": "Sartu ibilbidea eredura",
+ "Inroduce the model information": "Ereduaren informazioa sartu",
+ "Model information to be placed": "Jarriko den ereduaren informazioa",
+ "View": "Ikuspegia",
+ "The information to be placed in the model (You can leave it blank or put anything).": "Ereduan jarriko den informazioa (Zuri utzi dezakezu edo edozer gauza jarri).",
+ "View model information": "Ikusi ereduari buruzko informazioa",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Posizioa alde batera edo bestera egokitzeak eredua lehenengoaren edo bigarrenaren antz handiagoa izango du.",
+ "Introduce the model pth path": "Ereduaren pth ibilbidearen sarrera",
+ "Model conversion": "Ereduen bihurketa",
+ "Model extraction": "Ereduak erauztea",
+ "Pth file": "Pth artxiboa",
+ "Output of the pth file": "Pth fitxategiaren irteera",
+ "Extract F0 Curve": "F0 kurba atera",
+ "# How to Report an Issue on GitHub": "# Cómo reportar un problema en GitHub",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Egin klik jarraian 'Grabar pantaila' botoian, esperimentatzen ari den arazoa grabatzen hasteko.",
+ "Record Screen": "Grabazio-pantaila",
+ "See Model Information": "Ikusi ereduari buruzko informazioa",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "f0 kurbak ahots baten oinarrizko maiztasunean gertatzen diren aldakuntzak irudikatzen ditu denboran zehar, tonua nola igotzen eta jaisten den erakutsiz.",
+ "Stop Recording": "Grabazioa gelditu",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Vaya a [Problemas de GitHub] (https://github.com/IAHispano/Applio/issues) eta klik egin 'Nuevo problema' botoian.",
+ "Record": "Grabatu",
+ "## Download Model": "## Descargar modelo",
+ "Model Link": "Ereduaren esteka",
+ "Introduce the model link": "Ereduaren lotura aurkeztea",
+ "Introduce the model .pth path": "Ereduaren sarrera-ibilbidearen sarrera.pth",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Osatu arazo-plantilla proportzionatua, xehetasunak behar den neurrian sartuko direla ziurtatuz, eta erabili aktiboen atala aurreko pasabideko artxibo grabatua kargatzeko.",
+ "Download Model": "Eredua deskargatu",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Zenbakia grabatzen amaitu ondoren, egin klik 'Detener grabazio' botoian (botoi bera, baina etiketa aldatu egiten da, modu aktiboan grabatzen ari zaren ala ez kontuan hartuta).",
+ "## Drop files": "## Soltar archivos",
+ "Search": "Bilatu",
+ "## Search Model": "## Modelo de búsqueda",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": ".pth artxiboa eta .index artxiboa eraman espazio honetara. Bata arrastatu eta gero bestea.",
+ "Introduce the model name to search.": "Sartu modeloaren izena bilatzeko.",
+ "TTS Voices": "TTS ahotsak",
+ "TTS Speed": "Abiadura TTS",
+ "## Download Pretrained Models": "## Descargar modelos preentrenados",
+ "Select the pretrained model you want to download.": "Deskargatu nahi duzun aldez aurretik entrenatutako eredua hautatu.",
+ "Text to Synthesize": "Laburbildu beharreko testua",
+ "And select the sampling rate": "Eta laginketa-maiztasuna aukeratu.",
+ "Increase or decrease TTS speed.": "TTS abiadura handitu edo murriztu.",
+ "Enter the text to synthesize.": "Sartu laburtu nahi duzun testua.",
+ "Select the TTS voice to use for the conversion.": "Konbertsiorako erabiliko den TTS ahotsa hautatu.",
+ "Input path for text file": "Testu-artxiborako sarrera-ibilbidea",
+ "Upload a .txt file": "Artxibo .txt bat igo",
+ "We couldn't find models by that name.": "Ezin izan genuen izen horrekin eredurik aurkitu.",
+ "Output Path for TTS Audio": "Audio TTSrako irteera-ibilbidea",
+ "Enter text to synthesize": "Sartu laburtu nahi duzun testua",
+ "The path to the text file that contains content for text to speech.": "Testu-artxibora sartzeko ibilbidea, testutik ahotsera bihurtzeko edukia duena.",
+ "Output Path for RVC Audio": "Audio RVC-rako irteera-ibilbidea",
+ "Enable Applio integration with Discord presence": "Applioren integrazioa eta Discord-en presentzia",
+ "Enable fake GPU": "GPU faltsua gaitzea",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "Applioren egungo jarduera Discord-en erakusteko aukera aktibatuko da.",
+ "Enable Applio integration with applio.org/models using flask": "Applioren integrazioa matraz bidez applio.org/models",
+ "Restart Applio": "Applio berriro hastea",
+ "It will activate the possibility of downloading models with a click from the website.": "Web orritik klik batekin ereduak deskargatzeko aukera aktibatuko da.",
+ "Theme": "Gaia",
+ "Language": "Hizkuntza",
+ "Select the theme you want to use. (Requires restarting Applio)": "Aukeratu erabili nahi duzun gaia. (Applio berriro hastea beharrezkoa da)",
+ "Select the language you want to use. (Requires restarting Applio)": "Aukeratu erabili nahi duzun hizkuntza. (Applio berriro hastea beharrezkoa da)",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Aktibatu trenaren betilea. Hala ere, kontuan izan gailu honek ez duela GPU gaitasunik, eta, beraz, ez dela trebakuntza onartzen. Aukera hau proba-helburuetarako baino ez da. (Aukera horrek Appliori berrekingo dio)",
+ "Precision": "Zehaztasuna",
+ "Update precision": "Eguneratzearen zehaztasuna",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "Gaur egun, entrenamendua ez da bateragarria, GPUrik ez dagoelako. Entrenamendu betilea aktibatzeko, joan konfigurazio-betilera eta jarri 'GPU faltsua' aukera.",
+ "Select the precision you want to use for training and inference.": "Aukeratu entrenamendurako eta inferentziarako erabili nahi duzun zehaztasuna.",
+ "Plugin Installer": "Plugin-instalatzailea",
+ "Post-Process": "Post-Prozesua",
+ "Reverb": "Erreberberazioa",
+ "Version Checker": "Bertsioen egiaztatzailea",
+ "Apply reverb to the audio.": "Audioari erreberberazioa aplikatzen dio.",
+ "Reverb Room Size": "Erreberberazio-aretoaren tamaina",
+ "Post-process the audio to apply effects to the output.": "Audioa prozesatzen du, irteeran ondorioak aplikatzeko.",
+ "Check for updates": "Eguneratzeak bilatu",
+ "Check which version of Applio is the latest to see if you need to update.": "Egiazta ezazu Applioren zer bertsio den berriena, ea eguneratu behar duzun.",
+ "Drag your plugin.zip to install it": "Arrastatu zure plugin.zip instalatzeko",
+ "Reverb Wet Gain": "Irabazpena Hezetasuna",
+ "Set the damping of the reverb.": "Erreberberazioaren moteltzea doitzen du.",
+ "Set the room size of the reverb.": "Erreberberazio-aretoaren tamaina ezartzen du.",
+ "Reverb Damping": "Erreberberazio-moteltzea",
+ "Set the wet gain of the reverb.": "Erreberberazioaren irabazi hezea doitzen du.",
+ "Reverb Dry Gain": "Irabazpena lehorrean",
+ "Set the dry gain of the reverb.": "Erreberberazioaren irabazia lehor egokitzen du.",
+ "Reverb Width": "Erreberberazio-zabalera",
+ "Set the width of the reverb.": "Erabertsifikazioaren zabalera ezarri.",
+ "Reverb Freeze Mode": "Erreberberazioa izozteko modua",
+ "Pitch Shift": "Tonu aldaketa",
+ "Apply pitch shift to the audio.": "Ea tonu aldaketa bat aplikatzen dion audioari.",
+ "Set the freeze mode of the reverb.": "Era berean, itzulketa izozteko modua ezarri.",
+ "Pitch Shift Semitones": "Tonu-aldaketaren erdi-erdiak",
+ "Limiter": "Mugatzailea",
+ "Limiter Threshold dB": "dB mugatzailearen atalasea",
+ "Gain": "Irabazi",
+ "Limiter Release Time": "Mugatzailearen askapen-denbora",
+ "Apply limiter to the audio.": "Aplika iezken audioaren mugatzaile bat.",
+ "Set the limiter threshold dB.": "Mugatzailearen atalasea dB-n ezarri.",
+ "Set the limiter release time.": "Mugatzailea askatzeko denbora ezarri.",
+ "Apply gain to the audio.": "Audioari irabazia ematen dio.",
+ "Set the pitch shift semitones.": "Tonu-aldaketaren tonu-erdiak ezarri.",
+ "Gain dB": "dB irabazia",
+ "Distortion": "Distortsioa",
+ "Set the gain dB.": "DB irabazia doitzen du.",
+ "Chorus": "Abesbatza",
+ "Distortion Gain": "Distortsio-irabazia",
+ "Apply distortion to the audio.": "Ea distortsioa aplikatzen dion audioari.",
+ "Apply chorus to the audio.": "Ea korua aplikatzen dion audioari.",
+ "Chorus Rate Hz": "Hz koruaren maiztasuna",
+ "Chorus Depth": "Koruaren sakontasuna",
+ "Set the chorus rate Hz.": "Hz koruaren abiadura doitzen du.",
+ "Set the chorus depth.": "Koruaren sakontasuna doitzen du.",
+ "Set the chorus center delay ms.": "Ms koruaren erdialdeko atzeraeratzea ezarri.",
+ "Set the distortion gain.": "Distortsio-irabazia doitzen du.",
+ "Chorus Center Delay ms": "Koru-zentroko atzerakoi-hesia ms",
+ "Chorus Mix": "Koruen nahasketa",
+ "Chorus Feedback": "Koruaren iruzkinak",
+ "Set the chorus mix.": "Koruaren nahasketa doitzen du.",
+ "Set the chorus feedback.": "Koruaren atzera-elikatu.",
+ "Clipping": "Murrizketa",
+ "Bitcrush": "Bitcrush (ingelesez)",
+ "Bitcrush Bit Depth": "Bitcrush-en biten sakonera",
+ "Apply bitcrush to the audio.": "Bitcrush-a aplikatzen dio audioari.",
+ "Clipping Threshold": "Murrizketa-atalasea",
+ "Apply clipping to the audio.": "Ea aplikatzen duen audioa.",
+ "Set the bitcrush bit depth.": "Bit-ak birrintzeko bitaren sakontasuna ezartzea.",
+ "Set the clipping threshold.": "Murrizketa-atalasea ezarri.",
+ "Compressor": "Konpresorea",
+ "Apply compressor to the audio.": "Aplikatu konpresorea audioari.",
+ "Compressor Ratio": "Konpresorearen zerrenda",
+ "Compressor Threshold dB": "dB konpresorearen atalasea",
+ "Set the compressor threshold dB.": "Konpresorearen atalasea dB-an doitu.",
+ "Set the compressor ratio.": "Konpresorearen zerrenda doitzen du.",
+ "Compressor Attack ms": "Ms konpresorearen erasoa",
+ "Delay": "Atzeratu",
+ "Apply delay to the audio.": "Ea aplikatzen duen atzerapada audioa.",
+ "Delay Seconds": "Atzerapen segundoak",
+ "Set the compressor release ms.": "Ms konpresorearen askapena doitzen du.",
+ "Compressor Release ms": "Ms konpresorearen askapena",
+ "Delay Feedback": "Atzerapenaren atzera-alimentazioa",
+ "Delay Mix": "Atzeratutako nahasketa",
+ "Set the delay seconds.": "Bigarren atzerakoak ezarri.",
+ "Set the delay feedback.": "Atzerapenaren atzera-alimentazioa ezartzea.",
+ "Custom Embedder": "Inkrustatzaile pertsonalizatua",
+ "Set the delay mix.": "Ea doitzen duen atzeratutako nahasketa.",
+ "Select Custom Embedder": "Hautaketa Inkrustatzaile pertsonalizatua",
+ "Refresh embedders": "Inkrustazioak eguneratzea",
+ "Folder Name": "Karpetaren izena",
+ "Upload .bin": ".bin igo",
+ "model information": "Ereduaren informazioa",
+ "Upload .json": "Igo .json",
+ "Name of the model creator. (Default: Unknown)": "Ereduaren sortzailearen izena. (Aurredeterminatua: Ezezaguna)",
+ "Model Creator": "Ereduen sortzailea",
+ "Speaker ID": "Bozgorailuaren IDa",
+ "Model Author Name": "Ereduaren egilearen izena",
+ "Move files to custom embedder folder": "Artxiboak inkrustazio pertsonalizatuko karpeta batera mugitu",
+ "Select the speaker ID to use for the conversion.": "Bihurtzeko erabiliko den bozgorailuaren IDa hautatu.",
+ "Set name": "Multzoaren izena",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "Doikuntza automatikoaren intentsitatea ezartzen du: zenbat eta gehiago handitu, orduan eta gehiago egokituko da lauki kromatikora.",
+ "The name that will appear in the model information.": "Ereduaren informazioan agertuko den izena.",
+ "Set the compressor attack ms.": "Konfigura ezazu ms konpresorearen erasoa."
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/fa_FA.json b/assets/i18n/languages/fa_FA.json
new file mode 100644
index 0000000000000000000000000000000000000000..b0e14ebabfd23f64bbb62bf3489010fc88709637
--- /dev/null
+++ b/assets/i18n/languages/fa_FA.json
@@ -0,0 +1,325 @@
+{
+ "Training": "آموزش",
+ "Extra": "اضافی",
+ "Processing": "پردازش",
+ "Output Information": "اطلاعات خروجی",
+ "Inference": "استنتاج",
+ "The output information will be displayed here.": "اطلاعات خروجی در اینجا نمایش داده می شود.",
+ "Plugins": "پلاگین",
+ "Settings": "تنظیمات",
+ "Model Information": "اطلاعات مدل",
+ "Download": "دانلود",
+ "Merge Audios": "ادغام فایل های صوتی",
+ "Audio Analyzer": "آنالایزر صوتی",
+ "Preprocess": "پیش فرآیند",
+ "Report a Bug": "گزارش یک باگ",
+ "Audio cutting": "برش صدا",
+ "Process effects": "اثرات فرآیند",
+ "Name of the new model.": "نام مدل جدید.",
+ "Enter model name": "نام مدل را وارد کنید",
+ "Model Name": "نام مدل",
+ "Refresh Datasets": "مجموعه داده ها را رفرش کنید",
+ "Dataset Path": "مسیر مجموعه داده",
+ "Dataset Name": "نام مجموعه داده",
+ "Dataset Creator": "سازنده مجموعه داده",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "یک ابزار تبدیل صدا ساده و با کیفیت بالا با تمرکز بر سهولت استفاده و عملکرد.",
+ "Path to the dataset folder.": "مسیر به پوشه مجموعه داده",
+ "Name of the new dataset.": "نام مجموعه داده جدید",
+ "Enter dataset name": "نام مجموعه داده را وارد کنید",
+ "This section contains some extra utilities that often may be in experimental phases.": "این بخش شامل برخی از ابزارهای اضافی است که اغلب ممکن است در مراحل آزمایشی باشند.",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "توصیه می شود اگر مجموعه داده شما قبلا پردازش شده است، این گزینه را غیرفعال کنید.",
+ "Upload Audio Dataset": "آپلود مجموعه داده صوتی",
+ "Model Architecture": "معماری مدل",
+ "Enter dataset path": "مسیر مجموعه داده را وارد کنید",
+ "Extract": "عصاره",
+ "Version of the model architecture.": "نسخه معماری مدل.",
+ "Sampling Rate": "نرخ نمونه برداری",
+ "Embedder Model": "مدل تعبیه شده",
+ "Preprocess Dataset": "مجموعه داده پیش پردازش",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "فایل صوتی با موفقیت به مجموعه داده اضافه شد. لطفا روی دکمه پیش پردازش کلیک کنید.",
+ "Hop Length": "طول هاپ",
+ "The sampling rate of the audio files.": "نرخ نمونه برداری فایل های صوتی.",
+ "Batch Size": "اندازه دسته ای",
+ "Model used for learning speaker embedding.": "مدل مورد استفاده برای یادگیری تعبیه بلندگو.",
+ "Pretrained": "از پیش آموزش دیده",
+ "Total Epoch": "کل دوره",
+ "Save Every Epoch": "هر دوره را نجات دهید",
+ "Save Every Weights": "ذخیره هر وزن",
+ "Determine at how many epochs the model will saved at.": "تعیین کنید که مدل در چند دوره ذخیره می شود.",
+ "Save Only Latest": "ذخیره فقط آخرین",
+ "Custom Pretrained": "سفارشی از پیش آموزش دیده",
+ "Upload Pretrained Model": "آپلود مدل از پیش آموزش دیده",
+ "Specifies the overall quantity of epochs for the model training process.": "مقدار کلی دوره ها را برای فرآیند آموزش مدل مشخص می کند.",
+ "Refresh Custom Pretraineds": "سفارشی Pretrainingeds را رفرش کنید",
+ "Pretrained G Path": "G از پیش آموزش دیده سفارشی",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "این تنظیم شما را قادر می سازد تا وزن مدل را در پایان هر دوره ذخیره کنید.",
+ "GPU Settings": "تنظیمات GPU",
+ "Pretrained Custom Settings": "تنظیمات سفارشی از پیش آموزش دیده",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "نشان دهنده مدت زمانی است که طول می کشد تا سیستم به یک تغییر قابل توجه در زیر و بم تبدیل شود. طول هاپ کوچکتر به زمان بیشتری برای استنتاج نیاز دارد اما دقت گام بالاتری را به دست می آورد.",
+ "Pretrained D Path": "سفارشی از پیش آموزش دیده D",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "توصیه می شود آن را با VRAM موجود GPU خود هماهنگ کنید. تنظیم 4 دقت بهبود یافته اما پردازش کندتر را ارائه می دهد، در حالی که 8 نتایج سریع تر و استاندارد را ارائه می دهد.",
+ "GPU Number": "شماره GPU",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "فعال کردن این تنظیمات باعث می شود که فایل های G و D فقط جدیدترین نسخه های خود را ذخیره کنند و به طور موثر فضای ذخیره سازی را حفظ کنند.",
+ "The file you dropped is not a valid pretrained file. Please try again.": "فایلی که رها کرده اید یک فایل از پیش آموزش دیده معتبر نیست. لطفا دوباره امتحان کنید.",
+ "0 to ∞ separated by -": "0 تا ∞ با -",
+ "GPU Information": "اطلاعات GPU",
+ "GPU Custom Settings": "تنظیمات سفارشی GPU",
+ "The GPU information will be displayed here.": "اطلاعات GPU در اینجا نمایش داده می شود.",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "روی دکمه تازه سازی کلیک کنید تا فایل از پیش آموزش دیده را در منوی کشویی ببینید.",
+ "Use CPU": "از CPU استفاده کنید",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "تنظیمات پیشرفته GPU را تنظیم می کند که برای کاربرانی با معماری GPU بهتر توصیه می شود.",
+ "Pitch Guidance": "راهنمایی گام",
+ "Force the use of CPU for training.": "استفاده از CPU را برای آموزش اجباری کنید.",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "تعداد هسته های CPU برای استفاده در فرآیند استخراج. تنظیمات پیش فرض هسته های CPU شما هستند که برای اکثر موارد توصیه می شود.",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "تعداد هسته های CPU برای استفاده در پیش فرآیند. تنظیمات پیش فرض هسته های CPU شما هستند که برای اکثر موارد توصیه می شود.",
+ "Cache Dataset in GPU": "مجموعه داده های کش در GPU",
+ "Extract Features": "ویژگی های استخراج",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "تعداد پردازنده های گرافیکی را که می خواهید برای استخراج استفاده کنید با وارد کردن آنها که با خط تیره جدا شده اند (-) مشخص کنید.",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "تعداد پردازنده های گرافیکی را که می خواهید برای پیش پردازش استفاده کنید با وارد کردن آنها از هم جدا شده با خط تیره (-) مشخص کنید. در حال حاضر، استفاده از چند GPU تأثیر قابل توجهی نخواهد داشت.",
+ "Index Algorithm": "الگوریتم شاخص",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "استفاده از مدل های از پیش آموزش دیده سفارشی می تواند منجر به نتایج برتر شود، زیرا انتخاب مناسب ترین مدل های از پیش آموزش دیده متناسب با مورد استفاده خاص می تواند عملکرد را به میزان قابل توجهی افزایش دهد.",
+ "Overtraining Detector": "آشکارساز آموزش بیش از حد",
+ "Fresh Training": "آموزش تازه",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "ما اجرای استخراج مدل بر روی GPU را برای عملکرد سریعتر در اولویت قرار می دهیم. اگر ترجیح می دهید از CPU استفاده کنید، به سادگی فیلد GPU را خالی بگذارید.",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "هنگام آموزش مدل های خود از مدل های از پیش آموزش دیده استفاده کنید. این رویکرد مدت زمان تمرین را کاهش می دهد و کیفیت کلی را افزایش می دهد.",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "ما اجرای پیش پردازش مدل را روی GPU برای عملکرد سریعتر در اولویت قرار می دهیم. اگر ترجیح می دهید از CPU استفاده کنید، به سادگی فیلد GPU را خالی بگذارید.",
+ "Overtraining Detector Settings": "تنظیمات آشکارساز بیش از حد",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "با استفاده از هدایت زیر و بم، منعکس کردن لحن صدای اصلی، از جمله زیر و بم آن امکان پذیر می شود. این ویژگی به ویژه برای آواز خواندن و سناریوهای دیگری که حفظ ملودی اصلی یا الگوی زیر و بم ضروری است، ارزشمند است.",
+ "Overtraining Threshold": "آستانه تمرین بیش از حد",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans یک الگوریتم خوشه بندی است که مجموعه داده را به خوشه های K تقسیم می کند. این تنظیم به ویژه برای مجموعه داده های بزرگ مفید است.",
+ "Start Training": "شروع آموزش",
+ "Stop Training": "آموزش را متوقف کنید",
+ "Export Model": "مدل صادراتی",
+ "Generate Index": "ایجاد ایندکس",
+ "Cache the dataset in GPU memory to speed up the training process.": "مجموعه داده را در حافظه GPU ذخیره کنید تا روند آموزش سرعت یابد.",
+ "Upload": "آپلود",
+ "Exported Pth file": "فایل Pth صادر شده",
+ "Exported Index file": "فایل فهرست صادر شده",
+ "Voice Model": "مدل صدا",
+ "Index File": "فایل فهرست",
+ "Refresh": "نوسازی",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "حداکثر تعداد دوره هایی را که می خواهید مدل شما آموزش را متوقف کند، در صورت عدم مشاهده بهبود، تنظیم کنید.",
+ "Select the pth file to be exported": "فایل pth را برای اکسپورت انتخاب کنید",
+ "Select the index file to be exported": "فایل فهرست مورد نظر را برای صادرات انتخاب کنید",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "آموزش بیش از حد را تشخیص دهید تا از یادگیری بیش از حد خوب داده های آموزشی توسط مدل و از دست دادن توانایی تعمیم به داده های جدید جلوگیری شود.",
+ "Single": "تک",
+ "Select the index file to use for the conversion.": "فایل فهرست را برای استفاده برای تبدیل انتخاب کنید.",
+ "Select Audio": "صدا را انتخاب کنید",
+ "Select the voice model to use for the conversion.": "مدل صوتی مورد استفاده برای تبدیل را انتخاب کنید.",
+ "Unload Voice": "تخلیه صدا",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "این تنظیم را فقط در صورتی فعال کنید که در حال آموزش یک مدل جدید از ابتدا هستید یا آموزش را دوباره راه اندازی می کنید. تمام وزن ها و گزارش های تنسوربرد تولید شده قبلی را حذف می کند.",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "دکمه \"آپلود\" فقط برای google colab است: فایل های صادر شده را در پوشه ApplioExported در Google Drive شما آپلود می کند.",
+ "Advanced Settings": "تنظیمات پیشرفته",
+ "Select the audio to convert.": "صدا را برای تبدیل انتخاب کنید.",
+ "Upload Audio": "آپلود صدا",
+ "Autotune": "Autotune",
+ "Output Path": "مسیر خروجی",
+ "Custom Output Path": "مسیر خروجی سفارشی",
+ "Clean Audio": "صدای تمیز",
+ "Split Audio": "تقسیم صدا",
+ "Upscale Audio": "صدای مجلل",
+ "Formant Shifting": "Formant Shifting",
+ "Clean Strength": "قدرت تمیز",
+ "Select the format to export the audio.": "فرمت صادراتی را برای صادرات صدا انتخاب کنید.",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "مسیری که صدای خروجی به طور پیش فرض در assets/audios/output.wav ذخیره می شود.",
+ "Export Format": "فرمت صادرات",
+ "Clear Outputs (Deletes all audios in assets/audios)": "پاک کردن خروجی ها (تمام فایل های صوتی موجود در دارایی ها/فایل های صوتی را حذف می کند)",
+ "Pitch": "زمین",
+ "Presets are located in /assets/formant_shift folder": "از پیش تنظیم ها در پوشه /assets/formant_shift قرار دارند",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "صدا را برای استنتاج به تکه هایی تقسیم کنید تا در برخی موارد نتایج بهتری به دست آورید.",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "یک تنظیم خودکار نرم را روی استنتاج های خود اعمال کنید که برای تبدیل آواز توصیه می شود.",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "صدا را به کیفیت بالاتری ارتقا دهید که برای صداهای بی کیفیت توصیه می شود. (پردازش صدا ممکن است بیشتر طول بکشد)",
+ "Default value is 1.0": "مقدار پیش فرض 1.0 است",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "خروجی صوتی خود را با استفاده از الگوریتم های تشخیص نویز که برای صحبت کردن صداها توصیه می شود، تمیز کنید.",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "تغییر شکل را فعال کنید. برای تبدیل های مرد به زن و بالعکس استفاده می شود.",
+ "Timbre for formant shifting": "Timbre برای تغییر شکل دهنده",
+ "Browse presets for formanting": "مرور تنظیمات از پیش تعیین شده برای شکل گیری",
+ "Filter Radius": "شعاع فیلتر",
+ "Quefrency for formant shifting": "quefrency برای تغییر شکل دهنده",
+ "Search Feature Ratio": "نسبت ویژگی جستجو",
+ "Convert": "تبدیل",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "زیر و بم صدا را تنظیم کنید، هر چه مقدار بالاتر باشد، زیر و بم بالاتر است.",
+ "Batch": "دسته",
+ "Volume Envelope": "پاکت حجم",
+ "Protect Voiceless Consonants": "از صامت های بی صدا محافظت کنید",
+ "Export Audio": "صادرات صدا",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "سطح پاکسازی را روی صدای مورد نظر خود تنظیم کنید، هر چه بیشتر آن را افزایش دهید، بیشتر تمیز می شود، اما ممکن است صدا فشرده تر شود.",
+ "Pitch extraction algorithm": "الگوریتم استخراج گام",
+ "Enter input path": "مسیر ورودی را وارد کنید",
+ "Input Folder": "پوشه ورودی",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "پاکت حجم خروجی را جایگزین یا مخلوط کنید. هرچه نسبت به 1 نزدیکتر باشد، پاکت خروجی بیشتر استفاده می شود.",
+ "Output Folder": "پوشه خروجی",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "تأثیر اعمال شده توسط فایل فهرست؛ مقدار بالاتر مربوط به نفوذ بیشتر است. با این حال، انتخاب مقادیر پایین تر می تواند به کاهش مصنوعات موجود در صدا کمک کند.",
+ "Select the folder containing the audios to convert.": "پوشه حاوی فایل های صوتی را برای تبدیل انتخاب کنید.",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "اگر عدد بیشتر یا مساوی سه باشد، استفاده از فیلتر میانه بر روی نتایج تون جمع آوری شده پتانسیل کاهش تنفس را دارد.",
+ "Get information about the audio": "دریافت اطلاعات در مورد صدا",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "الگوریتم استخراج زیر و بم برای استفاده برای تبدیل صدا. الگوریتم پیش فرض rmvpe است که برای اکثر موارد توصیه می شود.",
+ "## Voice Blender": "## مخلوط کن صوتی",
+ "Voice Blender": "بلندر صوتی",
+ "Drag and drop your model here": "مدل خود را در اینجا بکشید و رها کنید",
+ "Select the folder where the output audios will be saved.": "پوشه ای را انتخاب کنید که صداهای خروجی در آن ذخیره می شوند.",
+ "Blend Ratio": "نسبت ترکیب",
+ "Enter output path": "مسیر خروجی را وارد کنید",
+ "You can also use a custom path.": "همچنین می توانید از یک مسیر سفارشی استفاده کنید.",
+ "Path to Model": "مسیر مدل سازی",
+ "Inroduce the model information": "اطلاعات مدل را وارد کنید",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "از صامت های متمایز و صداهای تنفسی محافظت کنید تا از پارگی الکترو آکوستیک و سایر مصنوعات جلوگیری کنید. کشیدن پارامتر به حداکثر مقدار 0.5 محافظت جامعی را ارائه می دهد. با این حال، کاهش این مقدار ممکن است میزان حفاظت را کاهش دهد و در عین حال به طور بالقوه اثر نمایه سازی را کاهش دهد.",
+ "Model conversion": "تبدیل مدل",
+ "Enter path to model": "مسیر مدل را وارد کنید",
+ "Introduce the model pth path": "معرفی مدل مسیر pth",
+ "View model information": "مشاهده اطلاعات مدل",
+ "Model extraction": "استخراج مدل",
+ "Output of the pth file": "خروجی فایل pth",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "تنظیم موقعیت بیشتر به سمت یک طرف یا طرف دیگر، مدل را شبیه تر به اولی یا دوم می کند.",
+ "Extract F0 Curve": "منحنی F0 را استخراج کنید",
+ "# How to Report an Issue on GitHub": "# نحوه گزارش یک مشکل در GitHub",
+ "Record Screen": "صفحه ضبط",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. به [GitHub Issues](https://github.com/IAHispano/Applio/issues) بروید و روی دکمه \"New Issue\" کلیک کنید.",
+ "Record": "رکورد",
+ "Pth file": "فایل Pth",
+ "Stop Recording": "ضبط را متوقف کنید",
+ "See Model Information": "اطلاعات مدل را ببینید",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. روی دکمه \"Record Screen\" در زیر کلیک کنید تا ضبط مشکلی را که با آن مواجه هستید شروع کنید.",
+ "Introduce the model .pth path": "معرفی مدل .pth path",
+ "Model Link": "پیوند مدل",
+ "## Download Model": "## مدل را دانلود کنید",
+ "Fusion": "همجوشی",
+ "Introduce the model link": "معرفی لینک مدل",
+ "## Drop files": "## فایل ها را رها کنید",
+ "View": "مشاهده",
+ "Model information to be placed": "اطلاعات مدل قرار داده می شود",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "منحنی f0 تغییرات فرکانس پایه یک صدا را در طول زمان نشان می دهد و نشان می دهد که چگونه زیر و بم بالا و پایین می رود.",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "دو مدل صوتی را انتخاب کنید، درصد ترکیب مورد نظر خود را تنظیم کنید و آنها را با صدایی کاملا جدید ترکیب کنید.",
+ "Search": "جستجو",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. پس از اتمام ضبط مشکل، روی دکمه \"توقف ضبط\" کلیک کنید (همان دکمه، اما بسته به اینکه آیا به طور فعال ضبط می کنید یا نه، برچسب تغییر می کند).",
+ "## Search Model": "## مدل جستجو",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "فایل .pth و فایل .index خود را به این فضا بکشید. یکی و سپس دیگری را بکشید.",
+ "Introduce the model name to search.": "نام مدل را برای جستجو معرفی کنید.",
+ "TTS Speed": "سرعت TTS",
+ "TTS Voices": "صداهای TTS",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. الگوی مسئله ارائه شده را تکمیل کنید و اطمینان حاصل کنید که در صورت نیاز جزئیات را درج کنید و از بخش دارایی ها برای آپلود فایل ضبط شده از مرحله قبل استفاده کنید.",
+ "## Download Pretrained Models": "## مدل های از پیش آموزش دیده را دانلود کنید",
+ "Download Model": "دانلود مدل",
+ "We couldn't find models by that name.": "ما نتوانستیم مدل هایی با این نام پیدا کنیم.",
+ "And select the sampling rate": "و نرخ نمونه برداری را انتخاب کنید.",
+ "The information to be placed in the model (You can leave it blank or put anything).": "اطلاعاتی که باید در مدل قرار گیرد (می توانید آن را خالی بگذارید یا هر چیزی را قرار دهید).",
+ "Select the TTS voice to use for the conversion.": "صدای TTS را برای استفاده برای تبدیل انتخاب کنید.",
+ "Increase or decrease TTS speed.": "افزایش یا کاهش سرعت TTS.",
+ "Select the pretrained model you want to download.": "مدل از پیش آموزش دیده ای را که می خواهید دانلود کنید انتخاب کنید.",
+ "Upload a .txt file": "آپلود فایل .txt",
+ "Enter the text to synthesize.": "متن را برای سنتز وارد کنید.",
+ "Text to Synthesize": "متن برای سنتز",
+ "Input path for text file": "مسیر ورودی برای فایل متنی",
+ "Enter text to synthesize": "متن را برای سنتز وارد کنید",
+ "Output Path for TTS Audio": "مسیر خروجی برای TTS Audio",
+ "Output Path for RVC Audio": "مسیر خروجی برای صدای RVC",
+ "Enable Applio integration with Discord presence": "ادغام Applio را با حضور Discord فعال کنید",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "امکان نمایش فعالیت فعلی Applio در Discord را فعال می کند.",
+ "Language": "زبان",
+ "Restart Applio": "Applio را مجددا راه اندازی کنید",
+ "Enable Applio integration with applio.org/models using flask": "فعال سازی یکپارچه سازی Applio با applio.org/models با استفاده از فلسک",
+ "It will activate the possibility of downloading models with a click from the website.": "امکان دانلود مدل ها را با یک کلیک از وب سایت فعال می کند.",
+ "Theme": "تم",
+ "Precision": "دقت",
+ "Update precision": "دقت را به روز کنید",
+ "The path to the text file that contains content for text to speech.": "مسیر فایل متنی که حاوی محتوایی برای تبدیل متن به گفتار است.",
+ "Select the language you want to use. (Requires restarting Applio)": "زبانی را که می خواهید استفاده کنید انتخاب کنید. (نیاز به راه اندازی مجدد Applio دارد)",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "آموزش در حال حاضر به دلیل عدم وجود GPU پشتیبانی نمی شود. برای فعال کردن برگه آموزش، به برگه تنظیمات بروید و گزینه «Fake GPU» را فعال کنید.",
+ "Plugin Installer": "نصب کننده پلاگین",
+ "Reverb": "Reverb",
+ "Select the precision you want to use for training and inference.": "دقتی را که می خواهید برای آموزش و استنتاج استفاده کنید انتخاب کنید.",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "برگه قطار را فعال می کند. با این حال، لطفا توجه داشته باشید که این دستگاه فاقد قابلیت GPU است، از این رو آموزش پشتیبانی نمی شود. این گزینه فقط برای اهداف آزمایشی است. (این گزینه Applio را مجددا راه اندازی می کند)",
+ "Select the theme you want to use. (Requires restarting Applio)": "طرح زمینه موردنظرتان را برای استفاده انتخاب کنید؛ (نیاز به راه اندازی مجدد Applio دارد)",
+ "Drag your plugin.zip to install it": "plugin.zip خود را بکشید تا آن را نصب کنید",
+ "Post-Process": "پس از فرآیند",
+ "Check for updates": "بررسی به روزرسانی ها",
+ "Reverb Room Size": "اندازه اتاق Reverb",
+ "Post-process the audio to apply effects to the output.": "صدا را پس از پردازش کنید تا جلوه ها را روی خروجی اعمال کنید.",
+ "Reverb Damping": "میرایی انعکاس",
+ "Reverb Wet Gain": "Reverb Wet Gain",
+ "Set the damping of the reverb.": "میرایی ریورب را تنظیم کنید.",
+ "Set the room size of the reverb.": "اندازه اتاق ریورب را تنظیم کنید.",
+ "Reverb Dry Gain": "Reverb Dry Gain",
+ "Apply reverb to the audio.": "ریورب را روی صدا اعمال کنید.",
+ "Check which version of Applio is the latest to see if you need to update.": "بررسی کنید کدام نسخه Applio آخرین نسخه است تا ببینید آیا نیاز به به روز رسانی دارید یا خیر.",
+ "Set the width of the reverb.": "عرض ریورب را تنظیم کنید.",
+ "Set the dry gain of the reverb.": "بهره خشک ریورب را تنظیم کنید.",
+ "Version Checker": "جستجوگر نسخه",
+ "Reverb Width": "عرض انعکاس",
+ "Set the wet gain of the reverb.": "افزایش مرطوب ریورب را تنظیم کنید.",
+ "Pitch Shift": "تغییر گام",
+ "Reverb Freeze Mode": "حالت انجماد انعکاس",
+ "Set the freeze mode of the reverb.": "حالت انجماد ریورب را تنظیم کنید.",
+ "Limiter": "محدود",
+ "Gain": "دست آوردن",
+ "Apply pitch shift to the audio.": "تغییر زیر و بم را روی صدا اعمال کنید.",
+ "Set the limiter threshold dB.": "آستانه محدود کننده dB را تنظیم کنید.",
+ "Apply limiter to the audio.": "محدود کننده را روی صدا اعمال کنید.",
+ "Pitch Shift Semitones": "نیم پرده های تغییر زیر و بم",
+ "Limiter Threshold dB": "آستانه محدود کننده dB",
+ "Set the pitch shift semitones.": "نیم پرده های تغییر گام را تنظیم کنید.",
+ "Limiter Release Time": "زمان انتشار محدود کننده",
+ "Set the limiter release time.": "زمان انتشار محدود کننده را تنظیم کنید.",
+ "Set the gain dB.": "مقدار بهره dB را تنظیم کنید.",
+ "Distortion": "اعوجاج",
+ "Apply gain to the audio.": "افزایش را روی صدا اعمال کنید.",
+ "Gain dB": "به دست آوردن دسی بل",
+ "Apply distortion to the audio.": "اعوجاج را به صدا اعمال کنید.",
+ "Chorus": "کر",
+ "Distortion Gain": "افزایش اعوجاج",
+ "Set the distortion gain.": "افزایش اعوجاج را تنظیم کنید.",
+ "Chorus Depth": "عمق کر",
+ "Chorus Rate Hz": "نرخ کر هرتز",
+ "Chorus Mix": "کر میکس",
+ "Set the chorus depth.": "عمق کر را تنظیم کنید.",
+ "Apply chorus to the audio.": "کر را روی صدا اعمال کنید.",
+ "Bitcrush": "Bitcrush",
+ "Set the chorus rate Hz.": "نرخ کر هرتز را تنظیم کنید.",
+ "Set the chorus mix.": "میکس کر را تنظیم کنید.",
+ "Chorus Center Delay ms": "مرکز کر تاخیر ms",
+ "Apply bitcrush to the audio.": "bitcrush را روی صدا اعمال کنید.",
+ "Set the chorus center delay ms.": "مرکز کر را تنظیم کنید تاخیر ms.",
+ "Set the chorus feedback.": "بازخورد کر را تنظیم کنید.",
+ "Bitcrush Bit Depth": "عمق بیت Bitcrush",
+ "Clipping": "قطع",
+ "Chorus Feedback": "بازخورد کر",
+ "Apply clipping to the audio.": "بریدن را روی صدا اعمال کنید.",
+ "Compressor": "کمپرسور",
+ "Set the bitcrush bit depth.": "عمق بیت bitcrush را تنظیم کنید.",
+ "Clipping Threshold": "آستانه برش",
+ "Set the clipping threshold.": "آستانه برش را تنظیم کنید.",
+ "Apply compressor to the audio.": "کمپرسور را روی صدا اعمال کنید.",
+ "Delay": "تاخیر",
+ "Compressor Threshold dB": "آستانه کمپرسور dB",
+ "Compressor Attack ms": "حمله کمپرسور ms",
+ "Compressor Ratio": "نسبت کمپرسور",
+ "Set the compressor threshold dB.": "آستانه کمپرسور dB را تنظیم کنید.",
+ "Set the compressor release ms.": "کمپرسور را رها کنید ms.",
+ "Compressor Release ms": "انتشار کمپرسور ms",
+ "Set the compressor ratio.": "نسبت کمپرسور را تنظیم کنید.",
+ "Set the compressor attack ms.": "حمله کمپرسور ms را تنظیم کنید.",
+ "Apply delay to the audio.": "تأخیر را برای صدا اعمال کنید.",
+ "Delay Seconds": "ثانیه های تأخیر",
+ "Delay Feedback": "بازخورد تأخیر",
+ "Delay Mix": "مخلوط تأخیر",
+ "Set the delay seconds.": "ثانیه های تأخیر را تنظیم کنید.",
+ "Set the delay feedback.": "بازخورد تأخیر را تنظیم کنید.",
+ "Select Custom Embedder": "سفارشی Embedder را انتخاب کنید",
+ "Refresh embedders": "تعبیه ها را تازه کنید",
+ "Set the delay mix.": "میکس تأخیر را تنظیم کنید.",
+ "Custom Embedder": "تعبیه شده سفارشی",
+ "Folder Name": "نام پوشه",
+ "Upload .json": "آپلود .json",
+ "Upload .bin": "آپلود .bin",
+ "model information": "اطلاعات مدل",
+ "Model Creator": "خالق مدل",
+ "Move files to custom embedder folder": "انتقال فایل ها به پوشه تعبیه شده سفارشی",
+ "Set name": "نام مجموعه",
+ "Speaker ID": "شناسه گوینده",
+ "Model Author Name": "نام نویسنده مدل",
+ "Name of the model creator. (Default: Unknown)": "نام سازنده مدل. (پیش فرض: ناشناس)",
+ "The name that will appear in the model information.": "نامی که در اطلاعات مدل ظاهر می شود.",
+ "Select the speaker ID to use for the conversion.": "شناسه بلندگو را برای استفاده برای تبدیل انتخاب کنید.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "قدرت تنظیم خودکار را تنظیم کنید - هرچه بیشتر آن را افزایش دهید، بیشتر به شبکه رنگی متصل می شود.",
+ "Enable fake GPU": "Enable fake GPU"
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/fj_FJ.json b/assets/i18n/languages/fj_FJ.json
new file mode 100644
index 0000000000000000000000000000000000000000..97caf122685ab47f4d7c00cf21d50d848fd61629
--- /dev/null
+++ b/assets/i18n/languages/fj_FJ.json
@@ -0,0 +1,325 @@
+{
+ "Processing": "Cakacakataki",
+ "Extra": "Eso tale",
+ "Merge Audios": "Cokovata na Vakarorogo",
+ "Inference": "iVakaleka",
+ "Audio Analyzer": "Dauvakadidike ni Vakarorogo",
+ "Output Information": "iTukutuku ni iTuvatuva",
+ "Plugins": "Vakacobara",
+ "Settings": "iTuvatuva",
+ "Model Information": "iTukutuku ni iVakaraitaki",
+ "Download": "Lavetaka",
+ "Training": "Vuli",
+ "The output information will be displayed here.": "Ena vakaraitaki eke na itukutuku ni output.",
+ "Preprocess": "iSausau taumada",
+ "Report a Bug": "Ripotetaka e Dua na Leqa",
+ "This section contains some extra utilities that often may be in experimental phases.": "Na iwasewase oqo e tiko kina eso tale na iyaya ni bula ka dau yaco vakawasoma ena iwasewase ni vakatovotovo.",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "E dua na iyaya ni saumaki mai rawarawa, ka vinaka sara ka vakanamata ki na rawarawa ni kena vakayagataki kei na cakacakataki.",
+ "Audio cutting": "iSema ni vakarorogo",
+ "Process effects": "iSau ni kena cakacakataki",
+ "Model Name": "Yaca ni iVakaraitaki",
+ "Name of the new model.": "Yaca ni ivakaraitaki vou.",
+ "Enter model name": "Vakacuruma na yaca ni ivakaraitaki",
+ "Dataset Path": "Sala ni Kato ni Itukutuku",
+ "Path to the dataset folder.": "Sala ki na folder ni kato ni itukutuku.",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "E vakaturi me bokoci na digidigi oqo kevaka sa cakacakataki oti na nomu kato ni itukutuku.",
+ "Name of the new dataset.": "Yaca ni dataset vou.",
+ "Dataset Name": "Yaca ni Kato ni Itukutuku",
+ "Upload Audio Dataset": "Vakavodoka na iTuvatuva ni Vakarorogo",
+ "Enter dataset name": "Vakacuruma na yaca ni kato ni itukutuku",
+ "Dataset Creator": "Dauveibuli ni iTuvatuva ni iTukutuku",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Sa vakuri rawa na faile ni vakarorogo ki na kato ni itukutuku. Yalovinaka kiliki ena bulukau ni preprocess.",
+ "Refresh Datasets": "Vakavoui ni iTuvatuva ni Itukutuku",
+ "Enter dataset path": "Vakacuruma na sala ni kato ni itukutuku",
+ "Sampling Rate": "iWiliwili ni Sabolo",
+ "Model Architecture": "iVakaraitaki ni iYau",
+ "The sampling rate of the audio files.": "Na ivakarau ni faile ni vakarorogo.",
+ "Extract": "Tauri",
+ "Embedder Model": "iVakaraitaki ni Vakacurumi",
+ "Version of the model architecture.": "iVakaraitaki ni itaratara.",
+ "Preprocess Dataset": "iTuvatuva ni iTukutuku ni Bera na Kena iTuvatuva",
+ "Batch Size": "iWiliwili ni iWiliwili",
+ "Hop Length": "Balavu ni Hop",
+ "Save Every Epoch": "Vakabula na Ifireti Yadua",
+ "Determine at how many epochs the model will saved at.": "Vakadeitaka na levu ni itabagauna ena vakabulai kina na ivakaraitaki.",
+ "Pretrained": "Vakavulici taumada",
+ "Model used for learning speaker embedding.": "iVakaraitaki e vakayagataki me vakacurumi kina na vosa ni vuli.",
+ "Save Only Latest": "Maroroya walega na veika vou",
+ "Save Every Weights": "Vakabula na Bibi Kecega",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "E dusia na balavu ni gauna me veisau kina na ivakarau ni veisau ki na dua na veisau levu. Na balavu ni vakanuinui lailai e gadrevi kina e levu cake na gauna me vakaleqai kina ia e dau vakacokotaki vakalevu cake na kena dodonu.",
+ "Custom Pretrained": "Vakasaurarataki Taumada",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "E ka vakasakiti me salavata kei na VRAM ni nomu GPU. Na ituvatuva ni 4 e vakarautaka na dodonu vinaka cake ia e berabera na kena cakacakataki, ia na 8 e vakarautaka na macala totolo ka ivakatagedegede.",
+ "Specifies the overall quantity of epochs for the model training process.": "Vakamatatataka na iwiliwili raraba ni epochs me baleta na iwalewale ni veituberi ni ivakaraitaki.",
+ "Total Epoch": "iWiliwili Taucoko ni Ioka",
+ "Upload Pretrained Model": "Vakavodoka na iVakaraitaki ni Vakavulici Taumada",
+ "Refresh Custom Pretraineds": "Vakavouya na iVakarau ni Vakatovotovo ni Vakatovotovo",
+ "Pretrained Custom Settings": "iTuvatuva ni iVakarau ni Vakatovotovo",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Na kena rawati na ituvatuva oqo ena yaco kina na faile ni G kei na D ka maroroi walega na nodra ituvatuva vou duadua, ka na maroroi vakavinaka sara na vanua ni mamaroroi.",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Na ituvatuva oqo ena rawa kina vei iko mo vakabula na bibi ni ivakaraitaki ena itinitini ni veitabagauna yadua.",
+ "GPU Settings": "iTuvatuva ni GPU",
+ "The file you dropped is not a valid pretrained file. Please try again.": "Na faile o biuta e sega ni faile ni vakatovotovotaki taumada. Yalovinaka tovolea tale.",
+ "Pretrained D Path": "Vakasaurarataki Taumada D",
+ "Pretrained G Path": "Vakasaurarataki Taumada G",
+ "GPU Number": "Naba NI GPU",
+ "GPU Custom Settings": "iTuvatuva ni iTuvatuva ni GPU",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Kiliki ena bulukau ni vakavoui mo raica na faile ni vakatovotovotaki taumada ena dropdown menu.",
+ "0 to ∞ separated by -": "0 me ∞ tawasei tani mai na -",
+ "The GPU information will be displayed here.": "Ena vakaraitaki eke na itukutuku ni GPU.",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Na kena vakayagataki na ivakaraitaki ni vakatovotovo sa oti e rawa ni vakavuna na kena cecere cake, ni digitaki na ivakaraitaki veiganiti duadua ni vakatovotovo sa vakatovotovotaki rawa ki na kisi ni vakayagataki taumada ena rawa ni vakavinakataka cake sara na cakacaka.",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Tuvanaka na ituvatuva torocake ni GPU, vakaturi me baleti ira era vakayagataka ka vinaka cake na kena droini na GPU.",
+ "GPU Information": "iTukutuku ni GPU",
+ "Pitch Guidance": "iDusidusi ni iYaloyalo",
+ "Use CPU": "Vakayagataka na CPU",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "Na iwiliwili ni uto ni CPU me vakayagataki ena preprocess. Na ituvatuva sega ni vakayagataki sa nomu cpu cores, ka sa vakaturi tu me baleta e vuqa na kisi.",
+ "Force the use of CPU for training.": "Vakasaurarataka na vakayagataki ni CPU me baleta na veituberi.",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Vakamatatataka na iwiliwili ni GPUs o gadreva mo vakayagataka me baleta na kena tauri ena nomu vakacuruma ka tawasei mai na hyphens (-).",
+ "Extract Features": "iYaya ni Tauri",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "Na iwiliwili ni CPU cores me vakayagataki ena iwalewale ni kena tauri. Na ituvatuva sega ni vakayagataki sa nomu cpu cores, ka sa vakaturi tu me baleta e vuqa na kisi.",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Vakamatatataka na iwiliwili ni GPUs o gadreva mo vakayagataka me baleta na preprocess ena nomu vakacuruma ka tawasei mai vei hyphens (-). Ena gauna oqo, na vakayagataki ni multi-gpu ena sega ni dua na kena revurevu bibi.",
+ "Cache Dataset in GPU": "Cache Dataset ena GPU",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Vakayagataka na ivakaraitaki sa vakasaurarataki oti ni ko veituberi vakataki iko. Na iwalewale oqo ena vakalailaitaka na balavu ni vuli ka vakavinakataka cake na ivakarau taucoko.",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Keitou vakaliuca na kena cicivaki na ivakaraitaki ni ivakatakilakila ena GPU me totolo cake kina na cakacaka. Kevaka o vinakata mo vakayagataka na CPU, laiva ga me lala tu na lomanibai ni GPU.",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Eda vakaliuca na kena cicivaki na ivakaraitaki taumada ena GPU me totolo cake kina na cakacaka. Kevaka o vinakata mo vakayagataka na CPU, laiva ga me lala tu na lomanibai ni GPU.",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Ni vakayagataki na veidusimaki ni rorogo, sa na rawa ni vakavotuya na domo taumada, oka kina na kena rogo. Na ivakatakilakila oqo e yaga sara vakalevu ena lagasere kei na so tale na ituvaki ka yaga kina na kena maroroi na ivakatagi taumada se ivakarau ni birika.",
+ "Overtraining Detector": "iVakatakilakila ni Vakatovotovo",
+ "Index Algorithm": "Algorithm ni iTuvatuva Vakamatanivola",
+ "Cache the dataset in GPU memory to speed up the training process.": "Cache na itukutukuset ena vakananumi ni GPU me vakatotolotaka na iwalewale ni veituberi.",
+ "Overtraining Detector Settings": "iTuvatuva ni iVakatakilakila ni Vakatovotovo",
+ "Overtraining Threshold": "iLavo ni Vakatovotovo",
+ "Fresh Training": "Vuli Bulabula",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "Na KMeans e dua na algorithm clustering ka wasea na dataset ki na K clusters. Na ituvatuva oqo e yaga vakalevu sara ki na kato ni itukutuku lelevu.",
+ "Start Training": "Tekivuna na Vuli",
+ "Generate Index": "Vakarautaka na iTuvatuva Vakamatanivola",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Vakarautaka na iwiliwili levu duadua ni epochs o vinakata me tarova na nomu veituberi kevaka e sega ni kunei na kena vakavinakataki.",
+ "Export Model": "iVakaraitaki ni Vakauta",
+ "Exported Pth file": "Faile vakau ni Pth",
+ "Upload": "Vakavodoka",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Raica na vakatovotovo vakasivia me tarovi kina na ivakaraitaki ni kena vulici vakavinaka na itukutuku ni veituberi ka vakayalia na kena rawa ni raraba ki na itukutuku vou.",
+ "Voice Model": "iVakaraitaki ni Domo",
+ "Exported Index file": "Faile ni iTuvatuva Vakamatanivola sa Vakau Yani",
+ "Select the index file to be exported": "Digitaka na faile ni ituvatuva vakamatanivola me na vakau yani",
+ "Select the pth file to be exported": "Digitaka na faile ni pth me vakau",
+ "Select the voice model to use for the conversion.": "Digitaka na ivakaraitaki ni domo me vakayagataki me baleta na saumaki mai.",
+ "Index File": "Faile ni iTuvatuva Vakamatanivola",
+ "Stop Training": "Muduka na Vuli",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "Na bulukau 'Upload' e baleta walega na Google colab: Uploads na faile sa vakau yani ki na folder ApplioExported ena nomu Google Drive.",
+ "Refresh": "Vakavoui",
+ "Single": "Sega ni Vakawati",
+ "Select the index file to use for the conversion.": "Digitaka na faile ni ituvatuva vakamatanivola me vakayagataki ena saumaki mai.",
+ "Unload Voice": "Vakavodoka na Domo",
+ "Select Audio": "Digitaka na Vakarorogo",
+ "Upload Audio": "Vakavodoka na Vakarorogo",
+ "Select the audio to convert.": "Digitaka na vakarorogo mo saumaki mai.",
+ "Output Path": "Sala ni Output",
+ "Advanced Settings": "iTuvatuva Torocake",
+ "Custom Output Path": "Sala ni Output",
+ "Export Format": "Vakauta na iTuvatuva",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Vagalalataka na Outputs (Bokoca na vakarorogo kece ena iyautaukeni/vakarorogo)",
+ "Split Audio": "Wasea na Vakarorogo",
+ "Select the format to export the audio.": "Digitaka na ituvatuva mo vakauta kina na vakarorogo.",
+ "Autotune": "Autotune",
+ "Clean Audio": "Vakarorogo Savasava",
+ "Clean Strength": "Kaukauwa Savasava",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "Na sala ena maroroi kina na sala e output audio kina, ena sega ni vakayagataki ena iyautaukeni/vakarorogo/output.wav",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Wasea vakavica na vakarorogo me baleta na kena vakadeitaki me rawati kina na kena macala vinaka cake ena so na gauna.",
+ "Formant Shifting": "Veisau ni Fomu",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Vakayagataka e dua na autotune malumu ki na nomu vakasama, ka vakaturi me lagasere na saumaki mai.",
+ "Upscale Audio": "Vakarorogo ena iTuvatuva Ni iTuva",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Samaka na vakarorogo ena nomu vakayagataka na algorithm ni vakadidike ni rorogo, ka vakaturi me vosataki kina na vakarorogo.",
+ "Browse presets for formanting": "Rai yani ki na ituvatuva taumada ni vaqara",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Na vakarorogo e vinaka cake, ka vakaturi me baleta na vakarorogo e sega soti ni vinaka. (Ena taura e dua na gauna balavu me cakacakataki kina na vakarorogo)",
+ "Default value is 1.0": "Na yavunilewa sega ni vakayagataki e 1.0",
+ "Timbre for formant shifting": "Timbre me baleta na veisau ni fomu",
+ "Presets are located in /assets/formant_shift folder": "Na presets era tiko ena /assets/formant_shift folder",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Vakayagataka na veisau ni fomu. Vakayagataki me baleta na tagane ki na yalewa kei na veibasai ni saumaki mai.",
+ "Pitch": "iYaloyalo",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Vakarautaka na ivakatagedegede ni sasamaki ki na vakarorogo o vinakata, na levu ga ni nomu vakalevutaka na kena samaki, ia ena rawa ni compressed vakalevu cake na vakarorogo.",
+ "Quefrency for formant shifting": "Quefrency me baleta na veisau ni yago",
+ "Filter Radius": "Vakataotaka na Radius",
+ "Volume Envelope": "Waqanivola ni iVola",
+ "Search Feature Ratio": "iWiliwili ni iVakatakilakila ni Vakasaqaqara",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Vakarautaka na rorogo, na kena e cecere cake na kena yaga, na kena e cecere cake na rorogo.",
+ "Convert": "Saumaki Mai",
+ "Protect Voiceless Consonants": "Taqomaka na Consonants Sega ni Domo",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Veisosomitaki se veiwaki kei na waqanivola levu ni icurucuru. Na kena voleka ni ivakatautauvata e 1, na levu ga ni kena vakayagataki na waqanivola ni output.",
+ "Export Audio": "Vakauta na Vakarorogo",
+ "Pitch extraction algorithm": "Algorithm ni tauri ni qito",
+ "Batch": "iWiliwili",
+ "Input Folder": "Folder ni Vakacurumi",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Kevaka e levu cake se tautauvata na iwiliwili mai na tolu, na kena vakayagataki na itatarovi ni loma ni rorogo e rawa ni vakalailaitaka na icegu.",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Algorithm ni ivakatakilakila ni rorogo me vakayagataki me baleta na saumaki mai ni vakarorogo. Na algorithm e sega ni vakatarai e rmvpe, ka vakaturi me baleta e vuqa na gauna.",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "Vakayagataka ga na ituvatuva oqo kevaka o sa vulica tiko e dua na ivakaraitaki vou mai na kena vakaoti se tekivutaki tale na veituberi. Bokoca na bibi kece e sa gacagaca oti kei na ivola ni tensorboard.",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Veivakauqeti e vakayagataki ena faile ni ituvatuva vakamatanivola; e dua na yavunilewa cecere cake e salavata kei na veivakayarayarataki levu cake. Ia, na kena digitaki na yavunilewa e lailai e rawa ni vukea na kena vakamamadataki na iyaya e tiko ena vakarorogo.",
+ "Select the folder containing the audios to convert.": "Digitaka na folder ka tiko kina na vakarorogo me saumaki mai.",
+ "Enter input path": "Vakacuruma na sala ni vakacurumi",
+ "Output Folder": "Output Folder",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Taqomaka na rorogo duidui ni consonants kei na rorogo ni icegu me tarova na dresuka vakalivaliva kei na iyaya tale eso. Na dreti ni ivakatakilakila ki na kena yaga levu duadua e 0.5 e vakarautaka na veitaqomaki taucoko. Ia, na kena vakalailaitaki sobu na yavunilewa oqo ena rawa ni vakalailaitaka na veitaqomaki ni o rawa ni vakalailaitaka na kena revurevu ni caka idusidusi.",
+ "Enter output path": "Vakacuruma na sala ni output",
+ "Select the folder where the output audios will be saved.": "Digitaka na folder ka na maroroi kina na vakarorogo ni output.",
+ "Voice Blender": "Dauveivakaduavatataki ni Domo",
+ "## Voice Blender": "## Domo Blender",
+ "Fusion": "Fusion",
+ "Get information about the audio": "Taura na itukutuku me baleta na vakarorogo",
+ "Drag and drop your model here": "Dreti ka vakalutuma na nomu ivakaraitaki eke",
+ "Blend Ratio": "Veiwaki ni Ratio",
+ "Path to Model": "Sala ki na iVakaraitaki",
+ "Enter path to model": "Vakacuruma na sala ki na ivakaraitaki",
+ "You can also use a custom path.": "E rawa talega ni o vakayagataka e dua na sala vakavanua.",
+ "Inroduce the model information": "Inroduce na itukutuku ni ivakaraitaki",
+ "Model information to be placed": "iVakaraitaki ni itukutuku me na biu",
+ "View model information": "Raica na itukutuku ni ivakaraitaki",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Digitaka e rua na ivakaraitaki ni domo, tuvanaka na pasede o gadreva, ka vakasotara vata ki na dua na domo vou.",
+ "Introduce the model pth path": "Vakamacalataka na ivakaraitaki ni salatu",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Na kena veisautaki vakalevu cake na itutu ki na dua na yasana se dua tale ena vakavuna me tautauvata vakalevu cake na ivakaraitaki kei na imatai se ikarua.",
+ "Model extraction": "iVakaraitaki ni iVakaraitaki",
+ "Model conversion": "Saumaki mai na ivakaraitaki",
+ "Pth file": "Faile ni Pth",
+ "The information to be placed in the model (You can leave it blank or put anything).": "Na itukutuku me biu ena ivakaraitaki (Sa rawa mo biuta lala se biuta e dua na ka).",
+ "Extract F0 Curve": "Tikitaka na F0 Curve",
+ "Output of the pth file": "Output ni faile ni pth",
+ "View": "Raica",
+ "Record": "iTukutuku",
+ "Record Screen": "Sikirini ni iTukutuku",
+ "Stop Recording": "Muduka na Katokatoni",
+ "# How to Report an Issue on GitHub": "# Na Sala me Ripotetaki Kina e Dua na iLavelave ena GitHub",
+ "Model Link": "iSema ni iVakaraitaki",
+ "See Model Information": "Raica na iTukutuku ni iVakaraitaki",
+ "## Download Model": "## Lavetaka na ivakaraitaki",
+ "Introduce the model .pth path": "Vakamacalataka na ivakaraitaki .pth salatu",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Lako ki na [GitHub Issues](https://github.com/IAHispano/Applio/issues) ka kiliki ena bulukau ni 'New Issue'.",
+ "Download Model": "Lavetaka na iVakaraitaki",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Kiliki ena bulukau ni 'Sikirini ni iTukutuku' e ra mo tekivu katona kina na leqa o sotava tiko.",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "Na f0 ni icurucuru e matataka na kena duidui ena ivakarau ni dua na domo ena toso ni gauna, ka vakaraitaka na kena tubu cake ka lutu.",
+ "Introduce the model link": "Vakamacalataka na isema ni ivakaraitaki",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Ni o sa katona oti na leqa, kiliki ena bulukau ni 'Tarovi ni Katokatoni' (na bulukau vata ga, ia na ivakatakilakila ena veisau vakatau ena nomu katona tiko se sega).",
+ "## Search Model": "## iVakaraitaki ni Vakasaqaqara",
+ "Search": "Vakasaqaqara",
+ "## Drop files": "## Vakalutuka na faile",
+ "Introduce the model name to search.": "Vakamacalataka na yaca ni ivakaraitaki me vakasaqarai.",
+ "TTS Speed": "Totolo ni TTS",
+ "We couldn't find models by that name.": "Keitou sega ni kunea rawa na ivakaraitaki ena yaca o ya.",
+ "TTS Voices": "Domo ni TTS",
+ "And select the sampling rate": "Ka digitaka na kena sabolo.",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Vakalewena na template ni ilavelave sa vakarautaki tu, ka vakadeitaka me okata na kena matailalai kevaka e gadrevi, ka vakayagataka na iwasewase ni iyautaukeni me vakavodoki kina na faile volai mai na ikalawa sa oti.",
+ "Select the pretrained model you want to download.": "Digitaka na ivakaraitaki o via lavetaka.",
+ "Text to Synthesize": "iTukutuku ki na Synthesize",
+ "Increase or decrease TTS speed.": "Vakalevutaka se vakalailaitaka na totolo ni TTS.",
+ "Select the TTS voice to use for the conversion.": "Digitaka na domo ni TTS me vakayagataki me baleta na saumaki mai.",
+ "## Download Pretrained Models": "## Lavetaka na iVakaraitaki ni Vakatovotovo Taumada",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Dreta na nomu faile .pth kei na faile ni .index ki na vanua oqo. Dreti e dua ka qai dua tale.",
+ "Enter the text to synthesize.": "Vakacuruma na itukutuku me synthesize.",
+ "Upload a .txt file": "Vakavodoka e dua na faile .txt",
+ "Input path for text file": "Sala ni vakacurumi ni faile ni text",
+ "Enable Applio integration with Discord presence": "Vakayagataka na Applio vata kei na veisei",
+ "Enter text to synthesize": "Vakacuruma na itukutuku me synthesize",
+ "Enable fake GPU": "Vakayagataka na GPU vakamatavulo",
+ "Output Path for TTS Audio": "Sala ni Output ni Vakarorogo ni TTS",
+ "Output Path for RVC Audio": "Sala ni Output ni RVC Vakarorogo",
+ "Enable Applio integration with applio.org/models using flask": "Vakayagataka na Applio vata kei applio.org/models ena kena vakayagataki na flask",
+ "Theme": "iKau",
+ "Restart Applio": "Tekivu Tale Applio",
+ "The path to the text file that contains content for text to speech.": "Na sala ki na faile ni itukutuku ka tiko kina na lewena me baleta na itukutuku me tukuni.",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "Ena vakabulabulataka na kena rawa ni vakaraitaki na itaviqaravi ni Applio ena gauna oqo ena Veisei.",
+ "It will activate the possibility of downloading models with a click from the website.": "Ena vakabulabulataka na kena rawa ni lavetaki na ivakaraitaki ena dua na kiliki mai na mataveilawa.",
+ "Select the theme you want to use. (Requires restarting Applio)": "Digitaka na ikau o via vakayagataka. (Gadrevi me tekivutaki tale na Applio)",
+ "Language": "Vosa",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "Ena sega ni tokoni na vuli ena gauna oqo ena vuku ni sega ni tiko e dua na GPU. Mo vakayagataka na bulukau ni veituberi, gole ki na bulukau ni ituvatuva ka vakatara na digidigi ni 'Vakamatavulo GPU'.",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Vakayagataka na bulukau ni sitimanivanua. Ia, yalovinaka mo kila ni sega ni rawata na GPU na misini oqo, sa sega kina ni tokoni na veituberi. Na digidigi oqo e baleta walega na inaki ni vakatovotovo. (Na digidigi oqo ena tekivu tale Applio)",
+ "Precision": "Dodonu",
+ "Update precision": "Vakavoui vakavinaka",
+ "Select the language you want to use. (Requires restarting Applio)": "Digitaka na vosa o via vakayagataka. (Gadrevi me tekivutaki tale na Applio)",
+ "Plugin Installer": "Dauvakacuruma na Vakacurumi ni Vakacurumi",
+ "Reverb": "Vakarokoroko",
+ "Post-Process": "iWalewale ni Oti",
+ "Version Checker": "Dauvakadewa ni Kena Mataqali",
+ "Drag your plugin.zip to install it": "Dreta na nomu plugin.zip mo vakacuruma",
+ "Select the precision you want to use for training and inference.": "Digitaka na kena dodonu o via vakayagataka me baleta na veituberi kei na kena ivakarau.",
+ "Post-process the audio to apply effects to the output.": "Ni oti na kena cakacakataki na vakarorogo me vakayagataki kina na revurevu ni kena icurucuru.",
+ "Reverb Room Size": "Levu ni Rumu ni Vakarokoroko",
+ "Apply reverb to the audio.": "Vakayagataka na vakarokoroko ki na vakarorogo.",
+ "Check which version of Applio is the latest to see if you need to update.": "Raica na kena mataqali Applio e vou mo raica kevaka o gadreva mo vakavoui.",
+ "Reverb Damping": "Vakasuasuataki ni iVakaro",
+ "Set the room size of the reverb.": "Vakarautaka na levu ni rumu ni reverb.",
+ "Set the damping of the reverb.": "Vakarautaka na suasua ni ivakaboi.",
+ "Reverb Wet Gain": "iYavu ni Vakarokoroko Suasua",
+ "Reverb Dry Gain": "iTaba Mamaca ni Vakarokoroko",
+ "Reverb Width": "Rabana na Vakarokoroko",
+ "Set the dry gain of the reverb.": "Vakarautaka na ka mamaca ni vakarokoroko.",
+ "Reverb Freeze Mode": "iVakarau ni Freezeb",
+ "Set the wet gain of the reverb.": "Vakarautaka na tubu suasua ni vakarokoroko.",
+ "Set the width of the reverb.": "Vakarautaka na rabana ni reverb.",
+ "Check for updates": "Raica na vakavoui",
+ "Set the freeze mode of the reverb.": "Tuvanaka na ivakarau ni ivakatakaraka ni vakarokoroko.",
+ "Limiter": "iYauqaqa",
+ "Pitch Shift Semitones": "iVakatagi ni Veisau Semitones",
+ "Set the pitch shift semitones.": "Vakarautaka na veisotari ni qito semitones.",
+ "Apply pitch shift to the audio.": "Vakabira na veisau ni birika ki na vakarorogo.",
+ "Pitch Shift": "Veisau ni iYaloyalo",
+ "Apply limiter to the audio.": "Vakabira na iyaya ni vakarorogo.",
+ "Limiter Threshold dB": "Limiter Threshold dB",
+ "Set the limiter threshold dB.": "Vakarautaka na icurucuru ni icurucuru dB.",
+ "Gain": "Rawata",
+ "Gain dB": "Rawata na dB",
+ "Apply gain to the audio.": "Vakayagataka na kena rawati ki na vakarorogo.",
+ "Limiter Release Time": "Gauna e Vagalalataki Kina na iYauqaqa",
+ "Set the limiter release time.": "Vakarautaka na gauna ni kena vagalalataki na iyalayala ni gauna.",
+ "Set the gain dB.": "Vakarautaka na kena rawati na dB.",
+ "Apply distortion to the audio.": "Vakayagataka na veivakacalai ni vakarorogo.",
+ "Chorus": "iVakatagi",
+ "Distortion Gain": "iYaloyalo Veivakacalai",
+ "Chorus Rate Hz": "iTuvatuva ni iVakatagi Hz",
+ "Apply chorus to the audio.": "Vakabira na sere ki na vakarorogo.",
+ "Set the distortion gain.": "Vakarautaka na kena rawati na veivakacalai.",
+ "Chorus Depth": "Vakatitobutaki ni iVakatagi",
+ "Set the chorus rate Hz.": "Vakarautaka na iwiliwili ni ivakatagi Hz.",
+ "Set the chorus depth.": "Vakarautaka na titobu ni ivakatagi.",
+ "Chorus Feedback": "iTukutuku Lesu Mai ni iVakatagi",
+ "Chorus Center Delay ms": "Vakaberabera ni Valenivolavola ni iVakatagi GTV",
+ "Chorus Mix": "Veiwaki ni iVakatagi",
+ "Set the chorus center delay ms.": "Vakarautaka na valenivolavola ni ivakatagi vakaberabera ms.",
+ "Clipping": "Tasii ni",
+ "Bitcrush Bit Depth": "Titobu ni Bitcrush",
+ "Set the bitcrush bit depth.": "Vakatitobutaka na bitcrush.",
+ "Set the chorus mix.": "Vakarautaka na veiwaki ni ivakatagi.",
+ "Apply bitcrush to the audio.": "Vakabira na barasi bitcrush ki na vakarorogo.",
+ "Apply clipping to the audio.": "Vakabira na tasia ki na vakarorogo.",
+ "Set the chorus feedback.": "Vakarautaka na vakasama ni ivakatagi.",
+ "Clipping Threshold": "iTuvatuva ni iTabataba",
+ "Bitcrush": "Bitcrush",
+ "Set the clipping threshold.": "Tuvanaka na icurucuru.",
+ "Compressor": "Compressor",
+ "Compressor Threshold dB": "Compressor iCurucuru dB",
+ "Distortion": "Veivakacalai",
+ "Compressor Attack ms": "Compressor ravuti ms",
+ "Set the compressor threshold dB.": "Vakarautaka na icurucuru ni compressor dB.",
+ "Compressor Release ms": "Compressor Vagalalataki MS",
+ "Compressor Ratio": "iWiliwili ni Compressor",
+ "Apply compressor to the audio.": "Vakabira na compressor ki na vakarorogo.",
+ "Set the compressor attack ms.": "Tuvanaka na mate compressor ms.",
+ "Set the compressor ratio.": "Vakarautaka na ivakatautauvata ni compressor.",
+ "Apply delay to the audio.": "Vaka lokuyarataka na vakarorogo.",
+ "Set the compressor release ms.": "Vakarautaka na compressor vagalalataki ms.",
+ "Delay Seconds": "Lokuyarataka na Sekodi",
+ "Delay": "Lokuyara",
+ "Delay Feedback": "Vakaberaberataki ni iTukutuku Lesu Mai",
+ "Set the delay feedback.": "Vakarautaka na nomu nanuma lesu.",
+ "Delay Mix": "Lokuyarataka na Veiwaki",
+ "Custom Embedder": "iTuvatuva ni iTuvatuva",
+ "Upload .json": "Vakavodoka na .json",
+ "Folder Name": "Yaca ni iYauqaqa",
+ "Refresh embedders": "Vakavoui ni ivakacurumi",
+ "Select Custom Embedder": "Digitaka na iVakatakilakila ni iTuvatuva",
+ "Upload .bin": "Vakavodoka .bin",
+ "Set the delay seconds.": "Tuvanaka na sekodi ni bera.",
+ "Speaker ID": "ID ni Vosa",
+ "model information": "itukutuku ni ivakaraitaki",
+ "Move files to custom embedder folder": "Tokitaka na faile ki na folder ni icurucuru",
+ "Name of the model creator. (Default: Unknown)": "Yacai koya e bulia na ivakaraitaki. (Sega ni Kilai: Tawakilai)",
+ "Model Creator": "Dauveibuli iVakaraitaki",
+ "Select the speaker ID to use for the conversion.": "Digitaka na ID ni vosa me vakayagataka me baleta na saumaki mai.",
+ "Model Author Name": "Yaca Dauvolaivola ni iVakaraitaki",
+ "The name that will appear in the model information.": "Na yaca ena basika ena itukutuku ni ivakaraitaki.",
+ "Set name": "Tuvanaka na yaca",
+ "Set the delay mix.": "Vakarautaka na veiwaki ni bera.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "Vakarautaka na kaukauwa ni autotune-na levu ni nomu vakalevutaka na kena totolo ki na veilawa ni chromatic."
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/fr_FR.json b/assets/i18n/languages/fr_FR.json
new file mode 100644
index 0000000000000000000000000000000000000000..a541b48ccb8aa16acafa8d726c9df1afc2b3799c
--- /dev/null
+++ b/assets/i18n/languages/fr_FR.json
@@ -0,0 +1,325 @@
+{
+ "Training": "Formation",
+ "Inference": "Inférence",
+ "Processing": "Traitement",
+ "Extra": "Supplémentaire",
+ "Output Information": "Informations de sortie",
+ "The output information will be displayed here.": "Les informations de sortie seront affichées ici.",
+ "Audio Analyzer": "Analyseur audio",
+ "Download": "Télécharger",
+ "Merge Audios": "Fusionner les audios",
+ "Settings": "Paramètres",
+ "This section contains some extra utilities that often may be in experimental phases.": "Cette section contient quelques utilitaires supplémentaires qui peuvent souvent être en phase expérimentale.",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "Un outil de conversion vocale simple et de haute qualité axé sur la facilité d’utilisation et les performances.",
+ "Preprocess": "Prétraitement",
+ "Plugins": "Plug-ins",
+ "Report a Bug": "Signaler un bug",
+ "Model Information": "Informations sur le modèle",
+ "Audio cutting": "Découpage audio",
+ "Model Name": "Nom du modèle",
+ "Process effects": "Effets du processus",
+ "Enter model name": "Entrez le nom du modèle",
+ "Dataset Path": "Chemin d’accès à l’ensemble de données",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "Il est recommandé de désactiver cette option si votre ensemble de données a déjà été traité.",
+ "Refresh Datasets": "Actualiser les jeux de données",
+ "Dataset Name": "Nom du jeu de données",
+ "Name of the new model.": "Nom du nouveau modèle.",
+ "Upload Audio Dataset": "Télécharger un ensemble de données audio",
+ "Enter dataset name": "Entrez le nom du jeu de données",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Le fichier audio a été ajouté avec succès à l’ensemble de données. Veuillez cliquer sur le bouton de prétraitement.",
+ "Name of the new dataset.": "Nom du nouveau jeu de données.",
+ "Enter dataset path": "Entrez le chemin d’accès au jeu de données",
+ "Path to the dataset folder.": "Chemin d’accès au dossier du jeu de données.",
+ "Sampling Rate": "Taux d’échantillonnage",
+ "Model Architecture": "Architecture du modèle",
+ "The sampling rate of the audio files.": "Le taux d’échantillonnage des fichiers audio.",
+ "Extract": "Extraire",
+ "Embedder Model": "Modèle d’intégration",
+ "Preprocess Dataset": "Prétraitement de l’ensemble de données",
+ "Version of the model architecture.": "Version de l’architecture du modèle.",
+ "Hop Length": "Longueur du houblon",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Il est conseillé de l’aligner avec la VRAM disponible de votre GPU. Un réglage de 4 offre une précision accrue mais un traitement plus lent, tandis que 8 fournit des résultats plus rapides et standard.",
+ "Specifies the overall quantity of epochs for the model training process.": "Spécifie la quantité globale d’époques pour le processus d’entraînement du modèle.",
+ "Model used for learning speaker embedding.": "Modèle utilisé pour l’apprentissage de l’intégration de haut-parleurs.",
+ "Batch Size": "Taille du lot",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Indique le temps qu’il faut au système pour passer à un changement de hauteur significatif. Les longueurs de saut plus petites nécessitent plus de temps pour l’inférence, mais ont tendance à donner une plus grande précision de hauteur.",
+ "Save Every Weights": "Économisez tous les poids",
+ "Pretrained": "Pré-entraîné",
+ "Determine at how many epochs the model will saved at.": "Déterminez à combien d’époques le modèle sera enregistré.",
+ "Save Only Latest": "Enregistrer uniquement les dernières années",
+ "Save Every Epoch": "Sauvez chaque époque",
+ "Custom Pretrained": "Pré-entraîné sur mesure",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "L’activation de ce paramètre permet aux fichiers G et D d’enregistrer uniquement leurs versions les plus récentes, ce qui permet d’économiser de l’espace de stockage.",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Ce paramètre vous permet d’enregistrer les poids du modèle à la fin de chaque époque.",
+ "Upload Pretrained Model": "Télécharger un modèle pré-entraîné",
+ "Total Epoch": "Époque totale",
+ "Refresh Custom Pretraineds": "Actualiser les pré-entraînés personnalisés",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "L’utilisation de modèles pré-entraînés personnalisés peut conduire à des résultats supérieurs, car la sélection des modèles pré-entraînés les plus appropriés et adaptés au cas d’utilisation spécifique peut améliorer considérablement les performances.",
+ "Pretrained D Path": "Pré-entraîné D personnalisé",
+ "Pretrained G Path": "G pré-entraîné sur mesure",
+ "GPU Number": "Numéro GPU",
+ "GPU Settings": "Paramètres GPU",
+ "Pretrained Custom Settings": "Paramètres personnalisés pré-entraînés",
+ "GPU Custom Settings": "Paramètres personnalisés du GPU",
+ "The GPU information will be displayed here.": "Les informations du GPU seront affichées ici.",
+ "0 to ∞ separated by -": "0 à ∞ séparés par -",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Cliquez sur le bouton d’actualisation pour afficher le fichier pré-entraîné dans le menu déroulant.",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Spécifiez le nombre de GPU que vous souhaitez utiliser pour le prétraitement en les saisissant séparés par des traits d’union (-). Pour le moment, l’utilisation de plusieurs GPU n’aura pas d’effet significatif.",
+ "GPU Information": "Informations sur le GPU",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "Nombre de cœurs de processeur à utiliser dans le prétraitement. Le paramètre par défaut est vos cœurs de processeur, ce qui est recommandé dans la plupart des cas.",
+ "Pitch Guidance": "Guide d’inclinaison",
+ "Use CPU": "Utiliser le processeur",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "Nombre de cœurs de processeur à utiliser dans le processus d’extraction. Le paramètre par défaut est vos cœurs de processeur, ce qui est recommandé dans la plupart des cas.",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Spécifiez le nombre de GPU que vous souhaitez utiliser pour l’extraction en les saisissant séparés par des traits d’union (-).",
+ "The file you dropped is not a valid pretrained file. Please try again.": "Le fichier que vous avez déposé n’est pas un fichier pré-entraîné valide. Veuillez réessayer.",
+ "Force the use of CPU for training.": "Forcer l’utilisation du processeur pour l’entraînement.",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "En utilisant le guidage de la hauteur, il devient possible de refléter l’intonation de la voix originale, y compris sa hauteur. Cette fonctionnalité est particulièrement précieuse pour le chant et d’autres scénarios où la préservation de la mélodie ou du motif de hauteur original est essentielle.",
+ "Extract Features": "Extraire les fonctionnalités",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Utilisez des modèles pré-entraînés lors de l’entraînement des vôtres. Cette approche réduit la durée de la formation et améliore la qualité globale.",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Nous donnons la priorité à l’exécution de l’extraction du modèle sur le GPU pour des performances plus rapides. Si vous préférez utiliser le CPU, laissez simplement le champ GPU vide.",
+ "Index Algorithm": "Algorithme d’indice",
+ "Overtraining Detector": "Détecteur de surentraînement",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Nous donnons la priorité à l’exécution du prétraitement du modèle sur le GPU pour des performances plus rapides. Si vous préférez utiliser le CPU, laissez simplement le champ GPU vide.",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans est un algorithme de clustering qui divise l’ensemble de données en K clusters. Ce paramètre est particulièrement utile pour les jeux de données volumineux.",
+ "Overtraining Threshold": "Seuil de surentraînement",
+ "Fresh Training": "Formation fraîche",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Définissez le nombre maximal d’époques pendant lesquelles votre modèle doit arrêter l’entraînement si aucune amélioration n’est détectée.",
+ "Start Training": "Commencer la formation",
+ "Export Model": "Exporter le modèle",
+ "Cache Dataset in GPU": "Cache du jeu de données dans le GPU",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "N’activez ce paramètre que si vous entraînez un nouveau modèle à partir de zéro ou si vous redémarrez l’entraînement. Supprime tous les poids et journaux tensorboard précédemment générés.",
+ "Dataset Creator": "Créateur de jeux de données",
+ "Exported Index file": "Fichier d’index exporté",
+ "Cache the dataset in GPU memory to speed up the training process.": "Mettez en cache l’ensemble de données dans la mémoire GPU pour accélérer le processus d’entraînement.",
+ "Upload": "Télécharger",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Détectez le surentraînement pour éviter que le modèle n’apprenne trop bien les données d’entraînement et ne perde la capacité de généraliser à de nouvelles données.",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "Le bouton « Télécharger » est réservé à google colab : télécharge les fichiers exportés dans le dossier ApplioExported de votre Google Drive.",
+ "Stop Training": "Arrêter la formation",
+ "Generate Index": "Générer un index",
+ "Exported Pth file": "Fichier Pth exporté",
+ "Select the pth file to be exported": "Sélectionnez le fichier pth à exporter",
+ "Overtraining Detector Settings": "Paramètres du détecteur de surentraînement",
+ "Voice Model": "Modèle de voix",
+ "Select the voice model to use for the conversion.": "Sélectionnez le modèle vocal à utiliser pour la conversion.",
+ "Select the index file to be exported": "Sélectionnez le fichier d’index à exporter",
+ "Refresh": "Rafraîchir",
+ "Index File": "Fichier d’index",
+ "Unload Voice": "Décharger la voix",
+ "Select the index file to use for the conversion.": "Sélectionnez le fichier d’index à utiliser pour la conversion.",
+ "Select Audio": "Sélectionnez l’audio",
+ "Advanced Settings": "Paramètres avancés",
+ "Upload Audio": "Télécharger l’audio",
+ "Single": "Célibataire",
+ "Select the audio to convert.": "Sélectionnez l’audio à convertir.",
+ "Output Path": "Chemin de sortie",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Effacer les sorties (supprime tous les fichiers audio dans les ressources/audios)",
+ "Select the format to export the audio.": "Sélectionnez le format d’exportation de l’audio.",
+ "Custom Output Path": "Chemin de sortie personnalisé",
+ "Autotune": "Réglage automatique",
+ "Clean Strength": "Résistance propre",
+ "Clean Audio": "Audio propre",
+ "Upscale Audio": "Audio haut de gamme",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Divisez l’audio en morceaux pour l’inférence afin d’obtenir de meilleurs résultats dans certains cas.",
+ "Formant Shifting": "Décalage des formants",
+ "Browse presets for formanting": "Parcourir les préréglages pour le formage",
+ "Presets are located in /assets/formant_shift folder": "Les préréglages se trouvent dans le dossier /assets/formant_shift",
+ "Timbre for formant shifting": "Timbre pour le décalage des formants",
+ "Quefrency for formant shifting": "Quefrence pour le déplacement des formants",
+ "Default value is 1.0": "La valeur par défaut est 1,0",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Réglez le niveau de nettoyage sur l’audio que vous voulez, plus vous l’augmentez, plus il nettoiera, mais il est possible que l’audio soit plus compressé.",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Réglez la hauteur de l’audio, plus la valeur est élevée, plus la hauteur est élevée.",
+ "Search Feature Ratio": "Rapport de fonctionnalités de recherche",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Influence exercée par le fichier d’index ; Une valeur plus élevée correspond à une plus grande influence. Cependant, le fait d’opter pour des valeurs inférieures peut aider à atténuer les artefacts présents dans l’audio.",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Remplacez ou fusionnez avec l’enveloppe de volume de la sortie. Plus le rapport est proche de 1, plus l’enveloppe de sortie est utilisée.",
+ "Protect Voiceless Consonants": "Protéger les consonnes sourdes",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Protégez les consonnes distinctes et les sons respiratoires pour éviter les déchirures électroacoustiques et autres artefacts. Le fait de porter le paramètre à sa valeur maximale de 0,5 offre une protection complète. Toutefois, la réduction de cette valeur peut réduire l’étendue de la protection tout en atténuant l’effet d’indexation.",
+ "Pitch extraction algorithm": "Algorithme d’extraction de hauteur",
+ "Convert": "Convertir",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Algorithme d’extraction de hauteur à utiliser pour la conversion audio. L’algorithme par défaut est rmvpe, ce qui est recommandé dans la plupart des cas.",
+ "Batch": "Lot",
+ "Enter input path": "Entrez le chemin d’entrée",
+ "Output Folder": "Dossier de sortie",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Définit les paramètres GPU avancés, recommandés pour les utilisateurs disposant d’une meilleure architecture GPU.",
+ "Export Format": "Format d’exportation",
+ "Split Audio": "Diviser l’audio",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "Le chemin d’accès où l’audio de sortie sera enregistré, par défaut dans assets/audios/output.wav",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Appliquez un autotune doux à vos inférences, recommandé pour les conversions de chant.",
+ "Pitch": "Tanguer",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Activez le décalage des formants. Utilisé pour les conversions mâle à femelle et vice-versa.",
+ "Filter Radius": "Rayon du filtre",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Améliorez la qualité de l’audio, recommandée pour les audios de mauvaise qualité. (Le traitement de l’audio peut prendre plus de temps)",
+ "Volume Envelope": "Enveloppe de volume",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Si le nombre est supérieur ou égal à trois, l’utilisation d’un filtrage médian sur les résultats de tonalité collectés a le potentiel de diminuer la respiration.",
+ "Input Folder": "Dossier d’entrée",
+ "Select the folder containing the audios to convert.": "Sélectionnez le dossier contenant les audios à convertir.",
+ "Export Audio": "Exporter l’audio",
+ "Select the folder where the output audios will be saved.": "Sélectionnez le dossier dans lequel les audios de sortie seront enregistrés.",
+ "Enter output path": "Entrez le chemin de sortie",
+ "Get information about the audio": "Obtenir des informations sur l’audio",
+ "## Voice Blender": "## Mélangeur vocal",
+ "Voice Blender": "Mélangeur vocal",
+ "Blend Ratio": "Rapport de mélange",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Nettoyez votre sortie audio à l’aide d’algorithmes de détection de bruit, recommandés pour les audios parlés.",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Sélectionnez deux modèles de voix, définissez le pourcentage de fusion souhaité et fusionnez-les en une toute nouvelle voix.",
+ "Path to Model": "Chemin d’accès au modèle",
+ "Model information to be placed": "Informations sur le modèle à placer",
+ "Enter path to model": "Entrez le chemin d’accès au modèle",
+ "Inroduce the model information": "Intégrer les informations du modèle",
+ "Drag and drop your model here": "Faites glisser et déposez votre modèle ici",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "En ajustant la position plus vers un côté ou l’autre, vous rendrez le modèle plus similaire au premier ou au second.",
+ "View": "Vue",
+ "You can also use a custom path.": "Vous pouvez également utiliser un chemin d’accès personnalisé.",
+ "Model extraction": "Extraction du modèle",
+ "Introduce the model pth path": "Présentation du modèle de chemin pth",
+ "View model information": "Afficher les informations sur le modèle",
+ "The information to be placed in the model (You can leave it blank or put anything).": "Les informations à placer dans le modèle (vous pouvez le laisser vide ou mettre n’importe quoi).",
+ "Model conversion": "Conversion de modèle",
+ "Pth file": "Fichier Pth",
+ "Fusion": "Fusion",
+ "Output of the pth file": "Sortie du fichier pth",
+ "Extract F0 Curve": "Extraire la courbe F0",
+ "# How to Report an Issue on GitHub": "# Comment signaler un problème sur GitHub",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "La courbe f0 représente les variations de la fréquence de base d’une voix au fil du temps, montrant comment la hauteur monte et descend.",
+ "Record": "Enregistrer",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Cliquez sur le bouton « Enregistrer l’écran » ci-dessous pour commencer à enregistrer le problème que vous rencontrez.",
+ "Record Screen": "Écran d’enregistrement",
+ "## Download Model": "## Télécharger le modèle",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Remplissez le modèle de problème fourni, en vous assurant d’inclure les détails nécessaires, et utilisez la section des ressources pour télécharger le fichier enregistré de l’étape précédente.",
+ "See Model Information": "Voir les informations sur le modèle",
+ "Introduce the model .pth path": "Introduire le chemin d’accès du modèle .pth",
+ "Introduce the model link": "Introduire le lien du modèle",
+ "Model Link": "Lien vers le modèle",
+ "Download Model": "Télécharger le modèle",
+ "## Drop files": "## Déposez des fichiers",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Une fois que vous avez terminé d’enregistrer le numéro, cliquez sur le bouton « Arrêter l’enregistrement » (le même bouton, mais l’étiquette change selon que vous enregistrez activement ou non).",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Allez dans [GitHub Issues](https://github.com/IAHispano/Applio/issues) et cliquez sur le bouton 'Nouveau problème'.",
+ "Search": "Rechercher",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Faites glisser votre fichier .pth et votre fichier .index dans cet espace. Faites glisser l’un puis l’autre.",
+ "Stop Recording": "Arrêter l’enregistrement",
+ "## Search Model": "## Modèle de recherche",
+ "Introduce the model name to search.": "Introduisez le nom du modèle à rechercher.",
+ "## Download Pretrained Models": "## Télécharger des modèles pré-entraînés",
+ "And select the sampling rate": "Et sélectionnez le taux d’échantillonnage.",
+ "Select the TTS voice to use for the conversion.": "Sélectionnez la voix TTS à utiliser pour la conversion.",
+ "TTS Speed": "Vitesse TTS",
+ "Increase or decrease TTS speed.": "Augmentez ou diminuez la vitesse TTS.",
+ "TTS Voices": "Voix TTS",
+ "Enter the text to synthesize.": "Entrez le texte à synthétiser.",
+ "Text to Synthesize": "Texte à synthétiser",
+ "Select the pretrained model you want to download.": "Sélectionnez le modèle pré-entraîné que vous souhaitez télécharger.",
+ "We couldn't find models by that name.": "Nous n’avons pas trouvé de modèles de ce nom.",
+ "Input path for text file": "Chemin d’entrée pour le fichier texte",
+ "Upload a .txt file": "Télécharger un fichier .txt",
+ "Enter text to synthesize": "Entrez le texte à synthétiser",
+ "Output Path for TTS Audio": "Chemin de sortie pour l’audio TTS",
+ "The path to the text file that contains content for text to speech.": "Chemin d’accès au fichier texte qui contient le contenu de la synthèse vocale.",
+ "Output Path for RVC Audio": "Chemin de sortie pour l’audio RVC",
+ "Enable Applio integration with Discord presence": "Activer l’intégration d’Applio avec la présence de Discord",
+ "Theme": "Thème",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "Il activera la possibilité d’afficher l’activité actuelle d’Applio dans Discord.",
+ "Enable fake GPU": "Activer le faux GPU",
+ "Language": "Langue",
+ "It will activate the possibility of downloading models with a click from the website.": "Il activera la possibilité de télécharger des modèles en un clic depuis le site Web.",
+ "Restart Applio": "Redémarrer Applio",
+ "Precision": "Précision",
+ "Select the theme you want to use. (Requires restarting Applio)": "Sélectionnez le thème que vous souhaitez utiliser. (Nécessite le redémarrage d’Applio)",
+ "Enable Applio integration with applio.org/models using flask": "Activer l’intégration d’Applio avec applio.org/models à l’aide de flask",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Active l’onglet Train. Cependant, veuillez noter que cet appareil ne dispose pas de capacités GPU, donc la formation n’est pas prise en charge. Cette option n’est utilisée qu’à des fins de test. (Cette option redémarrera Applio)",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "La formation n’est actuellement pas prise en charge en raison de l’absence de GPU. Pour activer l’onglet d’entraînement, accédez à l’onglet des paramètres et activez l’option « Faux GPU ».",
+ "Update precision": "Précision de la mise à jour",
+ "Select the precision you want to use for training and inference.": "Sélectionnez la précision que vous souhaitez utiliser pour l’entraînement et l’inférence.",
+ "Drag your plugin.zip to install it": "Faites glisser votre plugin.zip pour l’installer",
+ "Reverb": "Réverbe",
+ "Post-Process": "Post-traitement",
+ "Check for updates": "Rechercher des mises à jour",
+ "Select the language you want to use. (Requires restarting Applio)": "Sélectionnez la langue que vous souhaitez utiliser. (Nécessite le redémarrage d’Applio)",
+ "Post-process the audio to apply effects to the output.": "Post-traitez l’audio pour appliquer des effets à la sortie.",
+ "Set the room size of the reverb.": "Définissez la taille de la pièce de la réverbération.",
+ "Set the damping of the reverb.": "Réglez l’amortissement de la réverbération.",
+ "Reverb Wet Gain": "Gain humide de la réverbération",
+ "Reverb Damping": "Amortissement de la réverbération",
+ "Reverb Freeze Mode": "Mode de gel de la réverbération",
+ "Reverb Dry Gain": "Gain sec de réverbération",
+ "Set the dry gain of the reverb.": "Réglez le gain sec de la réverbération.",
+ "Pitch Shift": "Décalage de hauteur",
+ "Apply pitch shift to the audio.": "Appliquez un décalage de hauteur à l’audio.",
+ "Pitch Shift Semitones": "Demi-tons de décalage de hauteur",
+ "Set the pitch shift semitones.": "Réglez les demi-tons du décalage de hauteur.",
+ "Set the freeze mode of the reverb.": "Réglez le mode de gel de la réverbération.",
+ "Limiter": "Limitateur",
+ "Limiter Threshold dB": "Seuil du limiteur dB",
+ "Apply limiter to the audio.": "Appliquez un limiteur à l’audio.",
+ "Set the limiter threshold dB.": "Réglez le seuil de limitation dB.",
+ "Gain": "Gagner",
+ "Apply gain to the audio.": "Appliquez du gain à l’audio.",
+ "Limiter Release Time": "Temps de relâchement du limiteur",
+ "Apply distortion to the audio.": "Appliquez une distorsion à l’audio.",
+ "Distortion Gain": "Gain de distorsion",
+ "Gain dB": "Gain dB",
+ "Plugin Installer": "Installateur de plugins",
+ "Chorus": "Chœur",
+ "Set the distortion gain.": "Réglez le gain de distorsion.",
+ "Set the chorus depth.": "Réglez la profondeur du chorus.",
+ "Set the chorus rate Hz.": "Réglez la fréquence du chorus Hz.",
+ "Chorus Feedback": "Retour de chorus",
+ "Version Checker": "Vérificateur de version",
+ "Reverb Room Size": "Taille de la salle de réverbération",
+ "Chorus Center Delay ms": "Chorus Center Delay ms",
+ "Set the chorus feedback.": "Réglez le retour du chorus.",
+ "Apply reverb to the audio.": "Appliquez une réverbération à l’audio.",
+ "Chorus Mix": "Mixage de chorus",
+ "Set the wet gain of the reverb.": "Réglez le gain humide de la réverbération.",
+ "Set the width of the reverb.": "Définissez la largeur de la réverbération.",
+ "Reverb Width": "Largeur de la réverbération",
+ "Set the limiter release time.": "Réglez le temps de relâchement du limiteur.",
+ "Distortion": "Distorsion",
+ "Set the gain dB.": "Réglez le gain dB.",
+ "Chorus Rate Hz": "Taux de chorus Hz",
+ "Chorus Depth": "Profondeur du chorus",
+ "Set the chorus center delay ms.": "Réglez le chorus center delay ms.",
+ "Set the chorus mix.": "Réglez le mixage du chorus.",
+ "Set the bitcrush bit depth.": "Définissez la profondeur de bits bitcrush.",
+ "Compressor": "Compresseur",
+ "Apply clipping to the audio.": "Appliquez un écrêtage à l’audio.",
+ "Clipping Threshold": "Seuil d’écrêtage",
+ "Apply compressor to the audio.": "Appliquez le compresseur à l’audio.",
+ "Compressor Threshold dB": "Seuil du compresseur dB",
+ "Set the compressor threshold dB.": "Réglez le seuil du compresseur dB.",
+ "Bitcrush": "Bitcrush (en anglais)",
+ "Clipping": "Écrêtage",
+ "Apply bitcrush to the audio.": "Appliquez bitcrush à l’audio.",
+ "Compressor Ratio": "Rapport du compresseur",
+ "Apply chorus to the audio.": "Appliquez le chorus à l’audio.",
+ "Bitcrush Bit Depth": "Profondeur de mèche Bitcrush",
+ "Set the compressor ratio.": "Réglez le rapport du compresseur.",
+ "Set the clipping threshold.": "Définissez le seuil d’écrêtage.",
+ "Set the compressor attack ms.": "Réglez le compresseur attack ms.",
+ "Compressor Attack ms": "Attaque du compresseur ms",
+ "Delay": "Retarder",
+ "Compressor Release ms": "Relâchement du compresseur ms",
+ "Set the compressor release ms.": "Réglez le relâchement du compresseur ms.",
+ "Delay Seconds": "Délai en secondes",
+ "Apply delay to the audio.": "Appliquez un délai à l’audio.",
+ "Set the delay feedback.": "Définissez le retour d’information.",
+ "Set the delay seconds.": "Réglez le délai en secondes.",
+ "Set the delay mix.": "Réglez le mixage de délai.",
+ "Delay Mix": "Mixage Delay",
+ "Custom Embedder": "Embedder personnalisé",
+ "Delay Feedback": "Rétroaction différée",
+ "Select Custom Embedder": "Sélectionnez l’embedder personnalisé",
+ "Folder Name": "Nom du dossier",
+ "Upload .bin": "Télécharger .bin",
+ "Upload .json": "Télécharger .json",
+ "model information": "Informations sur le modèle",
+ "The name that will appear in the model information.": "Nom qui apparaîtra dans les informations du modèle.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "Réglez l’intensité de l’autotune - plus vous l’augmentez, plus il s’alignera sur la grille chromatique.",
+ "Name of the model creator. (Default: Unknown)": "Nom du créateur du modèle. (Par défaut : Inconnu)",
+ "Move files to custom embedder folder": "Déplacer les fichiers vers le dossier d’intégration personnalisé",
+ "Model Creator": "Créateur de modèles",
+ "Refresh embedders": "Actualiser les intégrateurs",
+ "Set name": "Nom de l’ensemble",
+ "Select the speaker ID to use for the conversion.": "Sélectionnez l’ID du haut-parleur à utiliser pour la conversion.",
+ "Check which version of Applio is the latest to see if you need to update.": "Vérifiez quelle version d’Applio est le plus récent pour voir si vous devez mettre à jour.",
+ "Model Author Name": "Nom de l’auteur du modèle",
+ "Speaker ID": "ID de l’intervenant"
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/ga_GA.json b/assets/i18n/languages/ga_GA.json
new file mode 100644
index 0000000000000000000000000000000000000000..54479bf303406950184ea06aa69760b713218ea0
--- /dev/null
+++ b/assets/i18n/languages/ga_GA.json
@@ -0,0 +1,325 @@
+{
+ "Training": "Oiliúint",
+ "Output Information": "Eolas Aschurtha",
+ "Processing": "Próiseáil",
+ "Inference": "Tátal",
+ "Audio Analyzer": "Anailíseoir Fuaime",
+ "Extra": "Breise",
+ "Merge Audios": "Cumaisc Fuaimeanna",
+ "The output information will be displayed here.": "Taispeánfar an t-eolas aschuir anseo.",
+ "Report a Bug": "Tuairiscigh Fabht",
+ "Model Information": "Eolas Eiseamláireach",
+ "Settings": "Socruithe",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "Uirlis tiontaithe gutha simplí ardchaighdeáin atá dírithe ar éascaíocht úsáide agus feidhmíochta.",
+ "Download": "Íoslódáil",
+ "Plugins": "Breiseáin",
+ "This section contains some extra utilities that often may be in experimental phases.": "Tá roinnt fóntais bhreise sa chuid seo a d'fhéadfadh a bheith go minic i gcéimeanna turgnamhacha.",
+ "Audio cutting": "Gearradh fuaime",
+ "Preprocess": "Réamhphróiseáil",
+ "Process effects": "Éifeachtaí próisis",
+ "Model Name": "Ainm an Mhúnla",
+ "Dataset Path": "Conair Tacar Sonraí",
+ "Enter model name": "Iontráil ainm an mhúnla",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "Moltar an rogha seo a dhíghníomhachtú má próiseáladh do thacar sonraí cheana féin.",
+ "Enter dataset name": "Iontráil ainm an tacair sonraí",
+ "Name of the new dataset.": "Ainm an tacair sonraí nua.",
+ "Dataset Name": "Ainm an Tacair Sonraí",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Cuireadh an comhad fuaime leis an tacar sonraí go rathúil. Cliceáil ar an gcnaipe réamhphróiseála.",
+ "Upload Audio Dataset": "Uaslódáil Tacar Sonraí Fuaime",
+ "Path to the dataset folder.": "Conair chuig an bhfillteán tacar sonraí.",
+ "Dataset Creator": "Cruthaitheoir Tacar Sonraí",
+ "Refresh Datasets": "Athnuaigh Tacair Shonraí",
+ "Sampling Rate": "Ráta Samplála",
+ "Name of the new model.": "Ainm an mhúnla nua.",
+ "Enter dataset path": "Iontráil conair thacar sonraí",
+ "Model Architecture": "Ailtireacht Mhúnla",
+ "The sampling rate of the audio files.": "Ráta samplála na gcomhad fuaime.",
+ "Preprocess Dataset": "Tacar Sonraí Réamhphróiseála",
+ "Embedder Model": "Samhail leabaithe",
+ "Hop Length": "Fad an Leannlusanna",
+ "Version of the model architecture.": "Leagan den ailtireacht mhúnla.",
+ "Extract": "Sliocht",
+ "Batch Size": "Méid na Baisc",
+ "Model used for learning speaker embedding.": "Samhail a úsáidtear chun leabú cainteoirí a fhoghlaim.",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Seasann sé don fhad a thógann sé ar an gcóras aistriú chuig athrú suntasach páirce. Éilíonn faid hop níos lú níos mó ama le haghaidh tátal ach claonadh a thabhairt cruinneas páirce níos airde.",
+ "Save Every Epoch": "Sábháil Gach Epoch",
+ "Determine at how many epochs the model will saved at.": "Socraigh cé mhéad epochs a shábháil an tsamhail ag.",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Moltar duit é a ailíniú leis an VRAM atá ar fáil de do GPU. Cuireann socrú 4 cruinneas feabhsaithe ach próiseáil níos moille ar fáil, agus soláthraíonn 8 torthaí níos tapúla agus caighdeánacha.",
+ "Total Epoch": "Epoch Iomlán",
+ "Save Only Latest": "Sábháil ach an ceann is déanaí",
+ "Pretrained": "Réamhoiliúint",
+ "Specifies the overall quantity of epochs for the model training process.": "Sonraíonn sé an méid foriomlán epochs don phróiseas oiliúna múnla.",
+ "Save Every Weights": "Sábháil Gach Meáchan",
+ "Upload Pretrained Model": "Uaslódáil Samhail Réamhoiliúna",
+ "Pretrained Custom Settings": "Socruithe Saincheaptha Réamhoilte",
+ "Refresh Custom Pretraineds": "Athnuaigh Pretraineds Saincheaptha",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Cuireann an socrú seo ar do chumas meáchain na samhla a shábháil ag deireadh gach aga.",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Má chumasaítear an socrú seo, ní shábhálfaidh comhaid G agus D ach na leaganacha is déanaí atá acu, rud a chaomhnaíonn spás stórála go héifeachtach.",
+ "Pretrained G Path": "Saincheaptha Pretrained G",
+ "The file you dropped is not a valid pretrained file. Please try again.": "Ní comhad réamhshrianta bailí é an comhad a d'fhág tú. Bain triail eile as.",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Cliceáil ar an gcnaipe athnuachana chun an comhad réamhshrianta a fheiceáil sa roghchlár anuas.",
+ "Pretrained D Path": "Saincheaptha Pretrained D",
+ "GPU Custom Settings": "Socruithe Saincheaptha GPU",
+ "GPU Settings": "Socruithe GPU",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Socraigh ardsocruithe GPU, molta d'úsáideoirí a bhfuil ailtireacht GPU níos fearr acu.",
+ "GPU Number": "Uimhir GPU",
+ "Custom Pretrained": "Réamhoiliúint Shaincheaptha",
+ "0 to ∞ separated by -": "0 go ∞ scartha ag -",
+ "The GPU information will be displayed here.": "Taispeánfar an t-eolas faoin GPU anseo.",
+ "Use CPU": "Úsáid LAP",
+ "Pitch Guidance": "Treoir pháirce",
+ "GPU Information": "Eolas GPU",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "Líon na gcroíthe LAP le húsáid sa réamhphróiseas. Is é an socrú réamhshocraithe do chroíthe lap, a mholtar don chuid is mó cásanna.",
+ "Force the use of CPU for training.": "Cuir iallach ar úsáid LAP le haghaidh oiliúna.",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "Líon na gcroíthe LAP le húsáid sa phróiseas eastósctha. Is é an socrú réamhshocraithe do chroíthe lap, a mholtar don chuid is mó cásanna.",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Sonraigh líon na ndochtúirí teaghlaigh is mian leat a úsáid le haghaidh eastóscadh trí iad a chur isteach scartha le fleiscíní (-).",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Sonraigh líon na ndochtúirí teaghlaigh is mian leat a úsáid le haghaidh réamhphróiseála trí iad a chur isteach scartha le fleiscíní (-). I láthair na huaire, ní bheidh éifeacht shuntasach ag baint úsáide as il-gpu.",
+ "Extract Features": "Gnéithe Sliocht",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Bain úsáid as samhlacha réamhoiliúna agus tú ag traenáil do chuid féin. Laghdaíonn an cur chuige seo fad na hoiliúna agus feabhsaíonn sé cáilíocht fhoriomlán.",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Is féidir torthaí níos fearr a bheith mar thoradh ar úsáid a bhaint as samhlacha saincheaptha réamhoiliúna, mar is féidir le roghnú na samhlacha réamhoiliúna is oiriúnaí atá curtha in oiriúint don chás úsáide ar leith feidhmíocht a fheabhsú go suntasach.",
+ "Cache Dataset in GPU": "Tacar Sonraí Taisce in GPU",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Trí threoir pháirce a úsáid, is féidir tuin chainte an ghutha bhunaidh a léiriú, lena n-áirítear a pháirc. Tá an ghné seo thar a bheith luachmhar don amhránaíocht agus do chásanna eile ina bhfuil sé riachtanach an bunphatrún séise nó páirce a chaomhnú.",
+ "Index Algorithm": "Algartam Innéacs",
+ "Overtraining Detector": "Brathadóir Overtraining",
+ "Cache the dataset in GPU memory to speed up the training process.": "Taisce an tacar sonraí i gcuimhne GPU chun dlús a chur leis an bpróiseas oiliúna.",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Tugaimid tús áite d'eastóscadh na samhla ar an GPU le haghaidh feidhmíochta níos tapúla. Más fearr leat an LAP a úsáid, fág an réimse GPU bán.",
+ "Fresh Training": "Oiliúint Úr",
+ "Overtraining Threshold": "Tairseach Róthraenála",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Tugaimid tús áite do reáchtáil na réamhphróiseála samhla ar an GPU le haghaidh feidhmíochta níos tapúla. Más fearr leat an LAP a úsáid, fág an réimse GPU bán.",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Bhrath overtraining chun cosc a chur ar an tsamhail ó fhoghlaim na sonraí oiliúna ró-mhaith agus a chailliúint ar an gcumas a generalize le sonraí nua.",
+ "Start Training": "Tosaigh Oiliúint",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "Is algartam braislithe é KMeans a roinneann an tacar sonraí i mbraislí K. Tá an socrú seo úsáideach go háirithe do thacair shonraí mhóra.",
+ "Stop Training": "Stop Oiliúint",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Socraigh an líon uasta epochs is mian leat do mhúnla chun stop a chur le hoiliúint mura mbraitear aon fheabhsúchán.",
+ "Generate Index": "Gin Innéacs",
+ "Overtraining Detector Settings": "Socruithe Brathadóra Overtraining",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "Cumasaigh an socrú seo ach amháin má tá tú ag traenáil samhail nua ó thús nó ag atosú na hoiliúna. Scrios gach meáchan a gineadh roimhe seo agus logs tensorboard.",
+ "Export Model": "Easpórtáil Samhail",
+ "Exported Pth file": "Easpórtáil comhad Pth",
+ "Upload": "Uasluchtú",
+ "Select the pth file to be exported": "Roghnaigh an comhad pth le heaspórtáil",
+ "Select the index file to be exported": "Roghnaigh an comhad innéacs le heaspórtáil",
+ "Voice Model": "Samhail Ghutha",
+ "Index File": "Comhad Innéacs",
+ "Select the voice model to use for the conversion.": "Roghnaigh an tsamhail ghutha le húsáid le haghaidh an chomhshó.",
+ "Refresh": "Athnuaigh",
+ "Select the index file to use for the conversion.": "Roghnaigh an comhad innéacs a úsáid le haghaidh an chomhshó.",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "Is é an cnaipe 'Uaslódáil' ach amháin le haghaidh google colab: Uaslódáil na comhaid a onnmhairítear chuig an fillteán ApplioExported i do Google Drive.",
+ "Single": "Singil",
+ "Exported Index file": "Easpórtáil Comhad Innéacs",
+ "Unload Voice": "Díluchtaigh Guth",
+ "Select Audio": "Roghnaigh Fuaim",
+ "Upload Audio": "Uaslódáil Fuaim",
+ "Select the audio to convert.": "Roghnaigh an fhuaim a thiontú.",
+ "Advanced Settings": "Ardsocruithe",
+ "Custom Output Path": "Conair Aschurtha Saincheaptha",
+ "Export Format": "Easpórtáil Formáid",
+ "Output Path": "Conair Aschurtha",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Aschuir Clear (Scrios gach fuaimeanna i sócmhainní / fuaimeanna)",
+ "Select the format to export the audio.": "Roghnaigh an fhormáid a onnmhairiú an fuaime.",
+ "Split Audio": "Scoilt Fuaim",
+ "Autotune": "Uathtiún",
+ "Clean Audio": "Glan Fuaim",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Roinn an fhuaim i smutáin le haghaidh tátal chun torthaí níos fearr a fháil i gcásanna áirithe.",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "An cosán ina mbeidh an fhuaim aschur a shábháil, de réir réamhshocraithe i sócmhainní / fuaimeanna / output.wav",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Cuir autotune bog i bhfeidhm ar do thátail, molta le haghaidh tiontuithe amhránaíochta.",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Glan d'aschur fuaime ag baint úsáide as halgartaim braite torainn, molta le haghaidh fuaimeanna a labhairt.",
+ "Upscale Audio": "Upscale Fuaime",
+ "Clean Strength": "Neart Glan",
+ "Formant Shifting": "Aistriú Formant",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Upscale an fuaime ar chaighdeán níos airde, molta le haghaidh fuaimeanna íseal-chaighdeán. (D'fhéadfadh sé níos faide an fhuaim a phróiseáil)",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Cumasaigh aistriú formant. Úsáidte le haghaidh fireann go baineann agus vice-versa convertions.",
+ "Presets are located in /assets/formant_shift folder": "Tá réamhshocruithe suite i bhfillteán / sócmhainní / formant_shift",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Socraigh an leibhéal glantacháin leis an bhfuaim is mian leat, is ea is mó a mhéadóidh tú é is ea is mó a ghlanfaidh sé, ach is féidir go mbeidh an fhuaim níos comhbhrúite.",
+ "Quefrency for formant shifting": "Quefrency le haghaidh aistriú formant",
+ "Pitch": "Páirc Imeartha",
+ "Default value is 1.0": "Is é 1.0 an luach réamhshocraithe",
+ "Filter Radius": "Ga Scagaire",
+ "Browse presets for formanting": "Brabhsáil réamhshocruithe le haghaidh formanting",
+ "Timbre for formant shifting": "Timbre le haghaidh aistriú formant",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Socraigh páirc na fuaime, is airde an luach, is airde an pháirc.",
+ "Search Feature Ratio": "Cóimheas Gné Cuardaigh",
+ "Volume Envelope": "Clúdach Imleabhair",
+ "Protect Voiceless Consonants": "Cosain Chonsain Gan Ghuth",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Tionchar a imríonn an comhad innéacs; freagraíonn luach níos airde do thionchar níos mó. Mar sin féin, is féidir le roghnú luachanna níos ísle cabhrú le déantáin atá i láthair sa fhuaim a mhaolú.",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Clúdach toirte an aschuir a chur in ionad nó a chumasc. Dá ghéire an cóimheas ná 1, is ea is mó a úsáidtear an clúdach aschuir.",
+ "Convert": "Tiontaigh",
+ "Pitch extraction algorithm": "Algartam eastósctha Pic",
+ "Batch": "Baisc",
+ "Input Folder": "Fillteán Ionchurtha",
+ "Export Audio": "Easpórtáil Fuaim",
+ "Enter input path": "Iontráil conair ionchurtha",
+ "Select the folder containing the audios to convert.": "Roghnaigh an fillteán ina bhfuil na fuaimeanna a thiontú.",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Má tá an uimhir níos mó ná nó cothrom le trí cinn, d'fhéadfadh scagadh airmheánach a úsáid ar na torthaí ton bailithe riospráid a laghdú.",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Algartam eastóscadh Pic a úsáid le haghaidh an chomhshó fuaime. Is é an algartam réamhshocraithe rmvpe, a mholtar don chuid is mó cásanna.",
+ "Output Folder": "Fillteán Aschurtha",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Consain ar leith agus fuaimeanna análaithe a chosaint chun cuimilt leictreafhuaimiúil agus déantáin eile a chosc. Ag tarraingt an pharaiméadair go dtí a luach uasta de 0.5 Cuireann cosaint chuimsitheach. Mar sin féin, d'fhéadfadh laghdú a dhéanamh ar an luach sin méid na cosanta a laghdú agus d'fhéadfadh sé an éifeacht innéacsaithe a mhaolú ag an am céanna.",
+ "Select the folder where the output audios will be saved.": "Roghnaigh an fillteán ina sábhálfar na fuaimeanna aschuir.",
+ "Enter output path": "Iontráil conair aschurtha",
+ "## Voice Blender": "## Cumascóir Gutha",
+ "Get information about the audio": "Faigh eolas faoin bhfuaim",
+ "Voice Blender": "Cumascóir Gutha",
+ "Blend Ratio": "Cóimheas Cumaisc",
+ "You can also use a custom path.": "Is féidir leat cosán saincheaptha a úsáid freisin.",
+ "Fusion": "Comhleá",
+ "Path to Model": "Conair na Samhla",
+ "Enter path to model": "Iontráil conair na samhla",
+ "Inroduce the model information": "Inroduce an t-eolas samhail",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Roghnaigh dhá mhúnla gutha, socraigh do chéatadán cumaisc atá ag teastáil, agus déan iad a chumasc i nguth iomlán nua.",
+ "Drag and drop your model here": "Tarraing agus scaoil do mhúnla anseo",
+ "View model information": "Féach ar fhaisnéis faoin tsamhail",
+ "Introduce the model pth path": "Tabhair isteach an cosán samhail pth",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Má choigeartaítear an suíomh níos mó i dtreo taobh amháin nó an taobh eile, beidh an tsamhail níos cosúla leis an gcéad nó an dara ceann.",
+ "The information to be placed in the model (You can leave it blank or put anything).": "An t-eolas atá le cur sa tsamhail (Is féidir leat é a fhágáil bán nó aon rud a chur).",
+ "View": "Amharc",
+ "Model extraction": "Eastóscadh samhail",
+ "Model conversion": "Comhshó samhail",
+ "Pth file": "Comhad Pth",
+ "Output of the pth file": "Aschur an chomhaid pth",
+ "Extract F0 Curve": "Sliocht Cuar F0",
+ "Model information to be placed": "Samhail d'fhaisnéis atá le cur",
+ "# How to Report an Issue on GitHub": "# Conas Saincheist a Thuairisciú ar GitHub",
+ "Record": "Taifead",
+ "Record Screen": "Scáileán Ceirníní",
+ "Stop Recording": "Stop Taifeadadh",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "Léiríonn an cuar f0 na héagsúlachtaí i minicíocht bonn guth le himeacht ama, ag taispeáint conas a ardaíonn agus a thiteann an pháirc.",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Cliceáil ar an gcnaipe 'Scáileán Taifead' thíos chun tús a chur le taifeadadh a dhéanamh ar an gceist atá agat.",
+ "Introduce the model .pth path": "Tabhair isteach an tsamhail .pth cosán",
+ "See Model Information": "Féach Eolas faoin tSamhail",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Téigh go dtí [Saincheisteanna GitHub](https://github.com/IAHispano/Applio/issues) agus cliceáil ar an gcnaipe 'Saincheist Nua'.",
+ "## Download Model": "## Múnla Íosluchtaigh",
+ "Model Link": "Nasc Samhail",
+ "Introduce the model link": "Tabhair isteach an nasc samhail",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Nuair a bheidh an cheist críochnaithe agat, cliceáil ar an gcnaipe 'Stop Recording' (an cnaipe céanna, ach athraíonn an lipéad ag brath ar cibé an bhfuil tú ag taifeadadh go gníomhach nó nach bhfuil).",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Comhlánaigh an teimpléad eisiúna atá curtha ar fáil, ag cinntiú go n-áireofar sonraí de réir mar is gá, agus bain úsáid as an rannán sócmhainní chun an comhad taifeadta a uaslódáil ón gcéim roimhe seo.",
+ "Search": "Cuardaigh",
+ "Download Model": "Íoslódáil an tSamhail",
+ "## Search Model": "## Samhail Chuardaigh",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Tarraing do chomhad .pth agus do chomhad .index isteach sa spás seo. Tarraing ceann amháin agus ansin an ceann eile.",
+ "We couldn't find models by that name.": "Ní raibh muid in ann samhlacha a aimsiú faoin ainm sin.",
+ "## Download Pretrained Models": "## Íoslódáil Múnlaí Réamhoiliúna",
+ "Introduce the model name to search.": "Tabhair isteach ainm an mhúnla chun cuardach a dhéanamh.",
+ "And select the sampling rate": "Agus roghnaigh an ráta samplála.",
+ "TTS Speed": "Luas TTS",
+ "Select the pretrained model you want to download.": "Roghnaigh an tsamhail réamhoiliúna is mian leat a íoslódáil.",
+ "TTS Voices": "Guthanna TTS",
+ "Increase or decrease TTS speed.": "Luas TTS a mhéadú nó a laghdú.",
+ "Text to Synthesize": "Téacs le Sintéisiú",
+ "Enter the text to synthesize.": "Iontráil an téacs chun sintéisiú a dhéanamh.",
+ "Upload a .txt file": "Uaslódáil comhad .txt",
+ "Input path for text file": "Conair ionchurtha le haghaidh téacschomhad",
+ "Select the TTS voice to use for the conversion.": "Roghnaigh an guth TTS le húsáid le haghaidh an chomhshó.",
+ "Enter text to synthesize": "Iontráil téacs chun sintéisiú a dhéanamh",
+ "## Drop files": "## Comhaid titim",
+ "The path to the text file that contains content for text to speech.": "An cosán chuig an gcomhad téacs ina bhfuil ábhar do théacs go caint.",
+ "Output Path for TTS Audio": "Conair Aschurtha le haghaidh Fuaime TTS",
+ "Enable Applio integration with Discord presence": "Cumasaigh comhtháthú Applio le láithreacht Discord",
+ "Output Path for RVC Audio": "Conair Aschurtha le haghaidh Fuaime RVC",
+ "Enable fake GPU": "Cumasaigh GPU bréige",
+ "It will activate the possibility of downloading models with a click from the website.": "Gníomhóidh sé an fhéidearthacht samhlacha a íoslódáil le cliceáil ón láithreán gréasáin.",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "Gníomhóidh sé an fhéidearthacht an ghníomhaíocht Applio reatha a thaispeáint i Discord.",
+ "Enable Applio integration with applio.org/models using flask": "Cumasaigh comhtháthú Applio le applio.org/models ag baint úsáide as fleascán",
+ "Restart Applio": "Atosaigh Applio",
+ "Theme": "Téama",
+ "Language": "Teanga",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "Ní thacaítear le hoiliúint faoi láthair mar gheall ar easpa GPU. Chun an cluaisín oiliúna a ghníomhachtú, nascleanúint a dhéanamh chuig an táb socruithe agus an rogha 'Fake GPU' a chumasú.",
+ "Precision": "Beachtas",
+ "Select the language you want to use. (Requires restarting Applio)": "Roghnaigh an teanga is mian leat a úsáid. (Éilíonn atosú Applio)",
+ "Select the theme you want to use. (Requires restarting Applio)": "Roghnaigh an téama is mian leat a úsáid. (Éilíonn atosú Applio)",
+ "Update precision": "Nuashonraigh cruinneas",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Gníomhachtaigh an cluaisín traenach. Tabhair faoi deara, áfach, nach bhfuil cumais GPU ag an ngléas seo, mar sin ní thacaítear le hoiliúint. Is chun críocha tástála amháin atá an rogha seo. (Atosóidh an rogha seo Applio)",
+ "Select the precision you want to use for training and inference.": "Roghnaigh an cruinneas is mian leat a úsáid le haghaidh oiliúna agus tátal.",
+ "Plugin Installer": "Suiteálaí Breiseáin",
+ "Version Checker": "Seiceálaí Leagain",
+ "Drag your plugin.zip to install it": "Tarraing do plugin.zip chun é a shuiteáil",
+ "Post-Process": "Iarphróiseas",
+ "Check for updates": "Seiceáil le haghaidh nuashonruithe",
+ "Reverb": "ReverbName",
+ "Post-process the audio to apply effects to the output.": "Iar-phróiseas an fuaime chun éifeachtaí a chur i bhfeidhm ar an aschur.",
+ "Apply reverb to the audio.": "Cuir reverb i bhfeidhm ar an bhfuaim.",
+ "Reverb Room Size": "Méid an tSeomra Reverb",
+ "Set the room size of the reverb.": "Socraigh méid an tseomra den reverb.",
+ "Reverb Damping": "Reverb Damping",
+ "Set the damping of the reverb.": "Socraigh damping an reverb.",
+ "Reverb Wet Gain": "Gnóthachan Fliuch Reverb",
+ "Set the wet gain of the reverb.": "Socraigh gnóthachan fliuch an reverb.",
+ "Reverb Dry Gain": "Reverb Gnóthachan Tirim",
+ "Reverb Width": "Leithead an Urramaigh",
+ "Set the width of the reverb.": "Socraigh leithead an reverb.",
+ "Pitch Shift": "Athrú Pic",
+ "Reverb Freeze Mode": "Mód Reverb Freeze",
+ "Set the freeze mode of the reverb.": "Socraigh modh reoite an reverb.",
+ "Pitch Shift Semitones": "Páirc Shift Semitones",
+ "Apply pitch shift to the audio.": "Cuir athrú páirce i bhfeidhm ar an bhfuaim.",
+ "Check which version of Applio is the latest to see if you need to update.": "Seiceáil cén leagan de Applio is déanaí le feiceáil an gá duit nuashonrú a dhéanamh.",
+ "Set the dry gain of the reverb.": "Socraigh gnóthachan tirim an reverb.",
+ "Limiter": "LimiterName",
+ "Set the pitch shift semitones.": "Socraigh na semitones athrú pháirc.",
+ "Set the limiter threshold dB.": "Socraigh an tairseach limiter dB.",
+ "Limiter Threshold dB": "Tairseach Limiter dB",
+ "Limiter Release Time": "Am Scaoilte Limiter",
+ "Apply limiter to the audio.": "Cuir limiter i bhfeidhm ar an bhfuaim.",
+ "Apply gain to the audio.": "Cuir gnóthachan i bhfeidhm ar an bhfuaim.",
+ "Gain dB": "Gnóthachan dB",
+ "Set the limiter release time.": "Socraigh an t-am scaoilte limiter.",
+ "Distortion": "Saobhadh",
+ "Gain": "Gnóthachan",
+ "Set the gain dB.": "Socraigh an gnóthachan dB.",
+ "Distortion Gain": "Gnóthachan Saobhadh",
+ "Apply distortion to the audio.": "Cuir saobhadh i bhfeidhm ar an bhfuaim.",
+ "Chorus": "Curfá",
+ "Apply chorus to the audio.": "Cuir curfá i bhfeidhm ar an bhfuaim.",
+ "Set the distortion gain.": "Socraigh an gnóthachan saobhadh.",
+ "Chorus Depth": "Doimhneacht Curfá",
+ "Chorus Rate Hz": "Ráta Chorus Hz",
+ "Set the chorus rate Hz.": "Socraigh an ráta curfá Hz.",
+ "Set the chorus depth.": "Socraigh doimhneacht an churfá.",
+ "Chorus Center Delay ms": "Chorus Center Moill ms",
+ "Chorus Feedback": "Aiseolas Curfá",
+ "Chorus Mix": "Meascán Curfá",
+ "Bitcrush": "BitcrushName",
+ "Set the chorus mix.": "Socraigh an meascán curfá.",
+ "Set the chorus center delay ms.": "Socraigh moill an ionaid choráis ms.",
+ "Set the chorus feedback.": "Socraigh an t-aiseolas curfá.",
+ "Apply bitcrush to the audio.": "Cuir bitcrush i bhfeidhm ar an bhfuaim.",
+ "Bitcrush Bit Depth": "Doimhneacht Giotán Bitcrush",
+ "Set the bitcrush bit depth.": "Socraigh doimhneacht giotán bitcrush.",
+ "Clipping": "Bearradh",
+ "Compressor": "Comhbhrúiteoir",
+ "Clipping Threshold": "Tairseach Fáiscthe",
+ "Apply clipping to the audio.": "Cuir clipping i bhfeidhm ar an bhfuaim.",
+ "Set the clipping threshold.": "Socraigh an tairseach fáiscthe.",
+ "Apply compressor to the audio.": "Cuir comhbhrúiteoir i bhfeidhm ar an bhfuaim.",
+ "Compressor Threshold dB": "Tairseach Comhbhrúiteoir dB",
+ "Compressor Ratio": "Cóimheas Comhbhrúiteora",
+ "Compressor Attack ms": "Comhbhrúiteoir Ionsaí MS",
+ "Set the compressor threshold dB.": "Socraigh an tairseach comhbhrúiteora dB.",
+ "Set the compressor ratio.": "Socraigh an cóimheas comhbhrúiteora.",
+ "Set the compressor attack ms.": "Socraigh an ionsaí comhbhrúiteoir ms.",
+ "Delay": "Moill",
+ "Compressor Release ms": "Scaoileadh Comhbhrúiteoir MS",
+ "Delay Seconds": "Soicind Moille",
+ "Delay Feedback": "Aiseolas Moillithe",
+ "Set the delay seconds.": "Socraigh na soicindí moille.",
+ "Delay Mix": "Meascán Moille",
+ "Apply delay to the audio.": "Cuir moill i bhfeidhm ar an bhfuaim.",
+ "Set the delay feedback.": "Socraigh aiseolas na moille.",
+ "Set the compressor release ms.": "Socraigh an scaoileadh comhbhrúiteoir ms.",
+ "Set the delay mix.": "Socraigh an meascán moille.",
+ "Custom Embedder": "Leabaithe Saincheaptha",
+ "Select Custom Embedder": "Roghnaigh Leabaithe Saincheaptha",
+ "Folder Name": "Ainm an Fhillteáin",
+ "Upload .bin": "Uasluchtú .bin",
+ "Refresh embedders": "Athnuaigh leabaithe",
+ "Upload .json": "Uasluchtaigh .json",
+ "model information": "Eolas Eiseamláireach",
+ "Move files to custom embedder folder": "Bog comhaid go fillteán leabaithe saincheaptha",
+ "Name of the model creator. (Default: Unknown)": "Ainm chruthaitheoir na samhla. (Réamhshocrú: anaithnid)",
+ "Speaker ID": "Aitheantas an chainteora",
+ "Model Author Name": "Ainm Údar Samhail",
+ "Select the speaker ID to use for the conversion.": "Roghnaigh an ID cainteoir a úsáid le haghaidh an chomhshó.",
+ "Set name": "Socraigh ainm",
+ "The name that will appear in the model information.": "An t-ainm a bheidh le feiceáil san fhaisnéis mhúnla.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "Socraigh an neart autotune - dá mhéad a mhéadaíonn tú é is ea is mó a léimfidh sé chuig an eangach chrómatach.",
+ "Model Creator": "Cruthaitheoir Samhail"
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/gu_GU.json b/assets/i18n/languages/gu_GU.json
new file mode 100644
index 0000000000000000000000000000000000000000..5ad9af9855e1f3b2f1a596036a4d5248afa9e5d3
--- /dev/null
+++ b/assets/i18n/languages/gu_GU.json
@@ -0,0 +1,325 @@
+{
+ "Training": "તાલીમ",
+ "Inference": "અનુમાન",
+ "Download": "ડાઉનલોડ",
+ "Extra": "વધારાનું",
+ "Plugins": "પ્લગઇનો",
+ "Settings": "સુયોજનો",
+ "Output Information": "આઉટપુટ જાણકારી",
+ "Audio Analyzer": "ઓડિયો વિશ્લેષક",
+ "Merge Audios": "ઓડિયો ભેગા કરો",
+ "Preprocess": "પ્રીપ્રોસેસ",
+ "Model Information": "મોડેલ જાણકારી",
+ "Processing": "પ્રક્રિયા કરી રહ્યા છીએ",
+ "Report a Bug": "ભૂલનો અહેવાલ આપો",
+ "The output information will be displayed here.": "આઉટપુટ જાણકારી અંહિ દર્શાવવામાં આવશે.",
+ "Audio cutting": "ઓડિયો કટીંગ",
+ "Model Name": "મોડેલ નામ",
+ "Process effects": "પ્રક્રિયા અસરો",
+ "Dataset Path": "ડેટાસેટ પાથ",
+ "Dataset Name": "ડેટાસેટ નામ",
+ "Enter model name": "મોડેલ નામ દાખલ કરો",
+ "Dataset Creator": "ડેટાસેટ બનાવનાર",
+ "Name of the new model.": "નવા મોડેલનું નામ.",
+ "Refresh Datasets": "ડેટાસેટ્સ પુનઃતાજું કરો",
+ "Path to the dataset folder.": "ડેટાસેટ ફોલ્ડરનો પાથ.",
+ "Name of the new dataset.": "નવા ડેટાસેટનું નામ.",
+ "Enter dataset name": "ડેટાસેટ નામ દાખલ કરો",
+ "Upload Audio Dataset": "ઓડિયો ડેટાસેટ અપલોડ કરો",
+ "This section contains some extra utilities that often may be in experimental phases.": "આ વિભાગમાં કેટલીક વધારાની ઉપયોગિતાઓ છે જે ઘણીવાર પ્રાયોગિક તબક્કામાં હોઈ શકે છે.",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "એક સરળ, ઉચ્ચ-ગુણવત્તાવાળું વોઇસ કન્વર્ઝન ટૂલ ઉપયોગની સરળતા અને કામગીરી પર ધ્યાન કેન્દ્રિત કરે છે.",
+ "Sampling Rate": "નમૂનાનો દર",
+ "Embedder Model": "જડિત મોડેલ",
+ "Extract": "અર્ક કાઢો",
+ "Enter dataset path": "ડેટાસેટ પાથને દાખલ કરો",
+ "Model Architecture": "મોડેલ આર્કિટેક્ચર",
+ "Hop Length": "હોપ લંબાઈ",
+ "The sampling rate of the audio files.": "ઓડિયો ફાઈલોનો નમૂનાનો દર.",
+ "Version of the model architecture.": "મોડેલ આર્કિટેક્ચરનું સંસ્કરણ.",
+ "Preprocess Dataset": "પ્રીપ્રોસેસ ડેટાસેટ",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "ઓડિયો ફાઈલ સફળતાપૂર્વક ડેટાસેટમાં ઉમેરાઈ ગઈ છે. કૃપા કરીને પ્રીપ્રોસેસ બટન પર ક્લિક કરો.",
+ "Batch Size": "બેચ માપ",
+ "Total Epoch": "કુલ ઈપોક",
+ "Model used for learning speaker embedding.": "સ્પીકર એમ્બેડિંગ શીખવા માટે ઉપયોગમાં લેવાતું મોડેલ.",
+ "Pretrained": "પૂર્વપ્રશિક્ષિત",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "જો તમારા ડેટાસેટ પર પહેલેથી જ પ્રક્રિયા કરવામાં આવી હોય તો આ વિકલ્પને નિષ્ક્રિય કરવાની ભલામણ કરવામાં આવે છે.",
+ "Save Every Epoch": "દરેક ઈપોકનો સંગ્રહ કરો",
+ "Save Every Weights": "દરેક વજનોને બચાવો",
+ "Determine at how many epochs the model will saved at.": "મોડેલ કેટલા યુગમાં સંગ્રહાશે તે નક્કી કરો.",
+ "Save Only Latest": "ફક્ત તાજેતરનાં ને સંગ્રહો",
+ "Custom Pretrained": "વૈવિધ્યપૂર્ણ પૂર્વટ્રેઈન થયેલ",
+ "Upload Pretrained Model": "પહેલેથી પ્રશિક્ષિત મોડેલ અપલોડ કરો",
+ "Specifies the overall quantity of epochs for the model training process.": "મોડેલ તાલીમ પ્રક્રિયા માટે યુગોનો એકંદર જથ્થો સ્પષ્ટ કરે છે.",
+ "Refresh Custom Pretraineds": "કસ્ટમ પૂર્વપ્રશિક્ષિતોને તાજુ કરો",
+ "GPU Settings": "GPU સુયોજનો",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "સિસ્ટમને નોંધપાત્ર પિચ પરિવર્તનમાં સંક્રમણ કરવામાં જે સમયગાળો લાગે છે તે સૂચવે છે. નાના હોપની લંબાઈને અનુમાન માટે વધુ સમયની જરૂર હોય છે પરંતુ ઉચ્ચ પિચ ચોકસાઈ પ્રાપ્ત કરવાનું વલણ ધરાવે છે.",
+ "Pretrained G Path": "વૈવિધ્યપૂર્ણ પૂર્વપ્રશિક્ષિત G",
+ "Pretrained Custom Settings": "પહેલેથી પ્રશિક્ષિત વૈવિધ્યપૂર્ણ સુયોજનો",
+ "Pretrained D Path": "વૈવિધ્યપૂર્ણ પૂર્વપ્રશિક્ષિત D",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "તેને તમારા જીપીયુના ઉપલબ્ધ વીઆરએએમ સાથે સંરેખિત કરવાની સલાહ આપવામાં આવે છે. 4નું સેટિંગ સુધારેલી ચોકસાઈ આપે છે પરંતુ પ્રક્રિયા ધીમી છે, જ્યારે 8 ઝડપી અને પ્રમાણભૂત પરિણામો પ્રદાન કરે છે.",
+ "GPU Custom Settings": "GPU કસ્ટમ સુયોજનો",
+ "The file you dropped is not a valid pretrained file. Please try again.": "તમે મૂકેલી ફાઇલ એ યોગ્ય પૂર્વતાલીમવાળી ફાઇલ નથી. કૃપા કરીને ફરી પ્રયાસ કરો.",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "આ ગોઠવણી તમને દરેક યુગના અંતે મોડેલના વજનને બચાવવા માટે સક્ષમ બનાવે છે.",
+ "GPU Number": "GPU નંબર",
+ "GPU Information": "GPU જાણકારી",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "ડ્રોપડાઉન મેનુમાં પહેલેથી તાલીમ લીધેલ ફાઈલ જોવા માટે રિફ્રેશ બટન પર ક્લિક કરો.",
+ "Use CPU": "CPU ને વાપરો",
+ "Pitch Guidance": "પિચ માર્ગદર્શન",
+ "0 to ∞ separated by -": "0 થી ∞ આના દ્વારા અલગ પાડવામાં આવે છે -",
+ "The GPU information will be displayed here.": "જીપીયુની માહિતી અહીં પ્રદર્શિત કરવામાં આવશે.",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "આ ગોઠવણને સક્રિય કરવાથી જી અને ડી (G) અને ડી (D) ફાઇલો માત્ર તેમના તાજેતરના વર્ઝનને જ સેવ કરી શકશે, અસરકારક રીતે સ્ટોરેજ સ્પેસનું સંરક્ષણ કરશે.",
+ "Force the use of CPU for training.": "તાલીમ માટે CPU ના ઉપયોગ પર દબાણ કરો.",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "અદ્યતન GPU ગોઠવણો સુયોજિત કરે છે, જે વધુ સારા GPU આર્કિટેક્ચર ધરાવતા વપરાશકર્તાઓ માટે આગ્રહણીય છે.",
+ "Cache Dataset in GPU": "GPU માં કેશ ડેટાસેટ",
+ "Extract Features": "લક્ષણોનો અર્ક કાઢો",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "પ્રીપ્રોસેસમાં વાપરવા માટે CPU કોરની સંખ્યા. મૂળભૂત સુયોજન એ તમારા cpu કોર છે, કે જે મોટાભાગના કિસ્સાઓ માટે આગ્રહણીય છે.",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "નિષ્કર્ષણ પ્રક્રિયામાં વાપરવા માટે CPU કોરની સંખ્યા. મૂળભૂત સુયોજન એ તમારા cpu કોર છે, કે જે મોટાભાગના કિસ્સાઓ માટે આગ્રહણીય છે.",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "કસ્ટમ પ્રીટ્રેઇન્ડ મોડેલ્સનો ઉપયોગ કરવાથી શ્રેષ્ઠ પરિણામો મળી શકે છે, કારણ કે ચોક્કસ ઉપયોગના કિસ્સાને અનુરૂપ સૌથી યોગ્ય પ્રિટ્રેઇન્ડ મોડેલ્સની પસંદગી કરવાથી કામગીરીમાં નોંધપાત્ર વધારો થઈ શકે છે.",
+ "Index Algorithm": "અનુક્રમણિકા અલગોરિધમ",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "તમારા પોતાનાને તાલીમ આપતી વખતે પૂર્વપ્રશિક્ષિત મોડેલોનો ઉપયોગ કરો. આ અભિગમ તાલીમનો સમયગાળો ઘટાડે છે અને એકંદર ગુણવત્તામાં વધારો કરે છે.",
+ "Overtraining Detector": "ઓવરટ્રેઈનીંગ ડિટેક્ટર",
+ "Overtraining Threshold": "થ્રેશોલ્ડની વધુ પડતી તાલીમ",
+ "Fresh Training": "તાજી તાલીમ",
+ "Overtraining Detector Settings": "ઓવરટ્રેઈનિંગ ડિટેક્ટર સેટિંગ્સ",
+ "Cache the dataset in GPU memory to speed up the training process.": "તાલીમ પ્રક્રિયાને ઝડપી બનાવવા માટે જીપીયુ મેમરીમાં ડેટાસેટને કેશ કરો.",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "હાઇફન (-) દ્વારા અલગ પાડવામાં આવેલ દાખલ કરીને તમે તેનો અર્ક કાઢવા માટે ઉપયોગ કરવા માંગતા હોય તેવા જીપીયુની સંખ્યા સ્પષ્ટ કરો.",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "હાઇફન (-) દ્વારા અલગ પાડવામાં આવેલા તેમને દાખલ કરીને તમે પ્રિપ્રોસેસ માટે વાપરવા માંગતા હોય તેવા જીપીયુની સંખ્યાને સ્પષ્ટ કરો (-). અત્યારે મલ્ટિ-જીપીયુનો ઉપયોગ કરવાથી કોઇ ખાસ અસર નહીં થાય.",
+ "Start Training": "તાલીમ શરૂ કરો",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "અમે ઝડપી કામગીરી માટે જીપીયુ પર મોડેલ નિષ્કર્ષણ ચલાવવાને પ્રાધાન્ય આપીએ છીએ. જો તમે સીપીયુનો ઉપયોગ કરવાનું પસંદ કરો છો, તો ફક્ત જીપીયુ ફીલ્ડને ખાલી છોડી દો.",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "અમે ઝડપી કામગીરી માટે જીપીયુ પર મોડેલ પ્રીપ્રોસેસિંગ ચલાવવાને પ્રાથમિકતા આપીએ છીએ. જો તમે સીપીયુનો ઉપયોગ કરવાનું પસંદ કરો છો, તો ફક્ત જીપીયુ ફીલ્ડને ખાલી છોડી દો.",
+ "Stop Training": "તાલીમ અટકાવો",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "પિચ માર્ગદર્શનનો ઉપયોગ કરીને, મૂળ અવાજના રણકારને પ્રતિબિંબિત કરવાનું શક્ય બને છે, જેમાં તેની પીચનો પણ સમાવેશ થાય છે. આ સુવિધા ખાસ કરીને ગાવા અને અન્ય દૃશ્યો માટે મૂલ્યવાન છે જ્યાં મૂળ મેલોડી અથવા પિચ પેટર્નને સાચવવી જરૂરી છે.",
+ "Export Model": "મોડેલ નિકાસ કરો",
+ "Generate Index": "અનુક્રમણિકા બનાવો",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "કેમીન્સ એ એક ક્લસ્ટરિંગ અલ્ગોરિધમ છે જે ડેટાસેટને કે ક્લસ્ટરોમાં વિભાજિત કરે છે. આ ગોઠવણ ખાસ કરીને મોટા ડેટાસેટ્સ માટે ઉપયોગી છે.",
+ "Upload": "અપલોડ",
+ "Exported Pth file": "નિકાસ થયેલ Pth ફાઇલ",
+ "Voice Model": "અવાજ મોડેલ",
+ "Exported Index file": "નિકાસ થયેલ અનુક્રમણિકા ફાઇલ",
+ "Single": "એકલું",
+ "Select the pth file to be exported": "નિકાસ કરવા માટેની pth ફાઇલ પસંદ કરો",
+ "Index File": "અનુક્રમણિકા ફાઇલ",
+ "Refresh": "પુનઃતાજું કરો",
+ "Select the index file to be exported": "નિકાસ કરવા માટેની અનુક્રમણિકા ફાઈલ પસંદ કરો",
+ "Upload Audio": "ઓડિયો અપલોડ કરો",
+ "Unload Voice": "અવાજ અનલોડ કરો",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "જો કોઈ સુધારો જોવા ન મળે તો તમારું મોડેલ તાલીમ બંધ કરવા માંગો છો તે ઇપોક્સની મહત્તમ સંખ્યાને સુયોજિત કરો.",
+ "Select the voice model to use for the conversion.": "રૂપાંતરણ માટે વાપરવા માટે વોઇસ મોડેલ પસંદ કરો.",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "મોડેલને તાલીમ ડેટા ખૂબ સારી રીતે શીખવાથી અને નવા ડેટામાં સામાન્યકરણ કરવાની ક્ષમતા ગુમાવવાથી રોકવા માટે ઓવરટ્રેનિંગને શોધો.",
+ "Select the index file to use for the conversion.": "રૂપાંતરણ માટે વાપરવા માટે અનુક્રમણિકા ફાઈલ પસંદ કરો.",
+ "Advanced Settings": "અદ્યતન સુયોજનો",
+ "Select Audio": "ઓડિયો પસંદ કરો",
+ "Custom Output Path": "કસ્ટમ આઉટપુટ પાથ",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "ફક્ત ત્યારે જ આ સુયોજનને સક્રિય કરો જો તમે નવા મોડલને શરૂઆતથી તાલીમ આપી રહ્યા હોય અથવા તાલીમ ફરીથી શરૂ કરી રહ્યા હોય. અગાઉ પેદા થયેલ બધા વજનો અને ટેન્સરબોર્ડ લોગ્સને કાઢી નાંખો.",
+ "Output Path": "આઉટપુટ પાથ",
+ "Export Format": "બંધારણ નિકાસ કરો",
+ "Autotune": "Autotune",
+ "Split Audio": "ઓડિયો વિભાજિત કરો",
+ "Clean Audio": "ઓડિયો સાફ કરો",
+ "Select the format to export the audio.": "ઓડિયો નિકાસ કરવા માટે બંધારણ પસંદ કરો.",
+ "Upscale Audio": "અપસ્કેલ ઓડિયો",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "'અપલોડ' બટન માત્ર Google colab માટે જ છે: નિકાસ થયેલ ફાઇલોને તમારી Google ડ્રાઇવમાં ApplioExported ફોલ્ડરમાં અપલોડ કરે છે.",
+ "Formant Shifting": "ફોર્મન્ટ બદલી રહ્યા છીએ",
+ "Default value is 1.0": "મૂળભૂત કિંમત ૧.૦ છે",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "કેટલાક કિસ્સાઓમાં વધુ સારા પરિણામો મેળવવા માટે અનુમાન માટે ઓડિઓને ભાગોમાં વિભાજિત કરો.",
+ "Browse presets for formanting": "ફોર્મેન્ટીંગ માટે પૂર્વસુયોજનોને બ્રાઉઝ કરો",
+ "Pitch": "પિચ",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "ફોર્મન્ટ સ્થળાંતર કરવાનું સક્રિય કરો. પુરુષથી સ્ત્રી અને તેનાથી વિપરીત રૂપાંતરણ માટે વપરાય છે.",
+ "Quefrency for formant shifting": "ફોર્મન્ટ શિફ્ટિંગ માટે ક્વેફ્રન્સી",
+ "Presets are located in /assets/formant_shift folder": "પૂર્વસુયોજનો /assets/formant_shift ફોલ્ડરમાં સ્થિત થયેલ છે",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "ઓડિયોને ઉચ્ચ ગુણવત્તા સુધી અપસ્કેલ કરો, ઓછી-ગુણવત્તાવાળા ઓડિયો માટે આગ્રહણીય. (ઓડિયો પર પ્રક્રિયા કરવામાં વધુ સમય લાગી શકે છે)",
+ "Timbre for formant shifting": "ફોર્મન્ટ શિફ્ટિંગ માટે ટિમ્બ્રે",
+ "Select the audio to convert.": "રૂપાંતરિત કરવા માટે ઓડિયો પસંદ કરો.",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "તમારા અનુમાનો પર નરમ ઓટોટ્યુન લાગુ કરો, જે ગાવા માટે ભલામણ કરવામાં આવે છે રૂપાંતરણો ગાવા માટે ભલામણ કરવામાં આવે છે.",
+ "Filter Radius": "ફિલ્ટર ત્રિજ્યા",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "ઓડિયો બોલવા માટે ભલામણ કરવામાં આવેલા નોઇઝ ડિટેક્શન એલ્ગોરિધમ્સનો ઉપયોગ કરીને તમારા ઓડિયો આઉટપુટને સાફ કરો.",
+ "Search Feature Ratio": "શોધ લક્ષણ ગુણોત્તર",
+ "Volume Envelope": "વોલ્યુમ કવરpaper size",
+ "Clean Strength": "સ્વચ્છ મજબૂતાઈ",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "તમે ઇચ્છો તે ઓડિયો પર સફાઇનું સ્તર સુયોજિત કરો, તમે તેને જેટલું વધારશો તેટલું તે સાફ થશે, પરંતુ શક્ય છે કે ઓડિયો વધુ સંકુચિત હશે.",
+ "Clear Outputs (Deletes all audios in assets/audios)": "આઉટપુટ સાફ કરો (સંપત્તિઓ/ઓડિયોમાં બધા ઓડિયો કાઢી નાંખે છે)",
+ "Convert": "રૂપાંતર કરો",
+ "Batch": "બેચ",
+ "Pitch extraction algorithm": "પિચ નિષ્કર્ષણ અલગોરિધમ",
+ "Protect Voiceless Consonants": "અવાજ વગરના વ્યંજનોનું રક્ષણ કરો",
+ "Export Audio": "ઓડિયો નિકાસ કરો",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "ઓડિયોની પિચ સુયોજિત કરો, કિંમત જેટલી ઊંચી હશે, તેટલી પીચ વધુ ઊંચી હશે.",
+ "Input Folder": "ઇનપુટ ફોલ્ડર",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "પાથ કે જ્યાં આઉટપુટ ઓડિયો એ મૂળભૂત રીતે assets/audios/output.wav માં સંગ્રહાશે",
+ "Output Folder": "આઉટપુટ ફોલ્ડર",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "ઓડિઓ રૂપાંતર માટે વાપરવા માટે પિચ નિષ્કર્ષણ અલ્ગોરિધમનો. મૂળભૂત અલ્ગોરિધમ એ rmvpe છે, જે મોટાભાગના કિસ્સાઓમાં ભલામણ કરવામાં આવે છે.",
+ "## Voice Blender": "## વોઇસ બ્લેન્ડર",
+ "Enter output path": "આઉટપુટ પાથ દાખલ કરો",
+ "Get information about the audio": "ઓડિયો વિશે જાણકારી મેળવો",
+ "Enter input path": "ઇનપુટ પાથને દાખલ કરો",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "આઉટપુટના વોલ્યુમ પરબિડીયા સાથે અવેજી અથવા મિશ્રણ કરો. ગુણોત્તર 1 ની નજીક હોય છે, આઉટપુટ પરબિડીયાને વધુ ઉપયોગમાં લેવામાં આવે છે.",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "અનુક્રમણિકા ફાઈલ દ્વારા લાગતો પ્રભાવ; ઉચ્ચતર મૂલ્ય વધુ પ્રભાવને મળતું આવે છે. જો કે, નીચા મૂલ્યોની પસંદગી કરવાથી ઓડિયોમાં હાજર કલાકૃતિઓને ઘટાડવામાં મદદ મળી શકે છે.",
+ "Voice Blender": "અવાજ બ્લેન્ડર",
+ "Select the folder containing the audios to convert.": "ફેરવવા માટે ઓડિયો સમાવતા ફોલ્ડરને પસંદ કરો.",
+ "Fusion": "ફ્યુઝન",
+ "Select the folder where the output audios will be saved.": "ફોલ્ડર પસંદ કરો કે જ્યાં આઉટપુટ ઓડિયો સંગ્રહાશે.",
+ "Drag and drop your model here": "તમારા મોડેલને અંહિ ખેંચો અને મૂકો",
+ "Blend Ratio": "મિશ્રણ ગુણોત્તર",
+ "Path to Model": "મોડેલનો પાથ",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "જો સંખ્યા ત્રણ કરતા વધારે અથવા સમાન હોય, તો એકત્રિત સ્વર પરિણામો પર મધ્યમ ફિલ્ટરિંગનો ઉપયોગ કરવાથી શ્વસનનક્કી થવાની સંભાવના રહે છે.",
+ "You can also use a custom path.": "તમે કસ્ટમ પાથનો પણ ઉપયોગ કરી શકો છો.",
+ "Enter path to model": "મોડેલ માટે પાથને દાખલ કરો",
+ "View model information": "મોડેલ જાણકારી જુઓ",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "ઇલેક્ટ્રો-એકોસ્ટિક ફાટી ન જાય અને અન્ય કલાકૃતિઓ ન ફાટી જાય તે માટે વિશિષ્ટ વ્યંજનો અને શ્વાસોચ્છવાસના અવાજનું રક્ષણ કરો. પરિમાણને તેના ૦.૫ ના મહત્તમ મૂલ્ય તરફ ખેંચવું એ વ્યાપક સુરક્ષા પ્રદાન કરે છે. જો કે, આ મૂલ્યમાં ઘટાડો કરવાથી અનુક્રમણિકાની અસરને સંભવિતપણે ઘટાડવાની સાથે સંરક્ષણની હદમાં ઘટાડો થઈ શકે છે.",
+ "Inroduce the model information": "મોડેલની જાણકારીને ઇનરોડ્યુસ કરો",
+ "View": "જુઓ",
+ "Model information to be placed": "મૂકવાની મોડેલ માહિતી",
+ "Pth file": "Pth ફાઈલ",
+ "Introduce the model pth path": "મોડેલ pth પાથનો પરિચય આપો",
+ "Model extraction": "મોડેલ નિષ્કર્ષણ",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "બે વોઇસ મોડલ્સ પસંદ કરો, તમારી ઇચ્છિત મિશ્રણ ટકાવારી સેટ કરો અને તેને સંપૂર્ણપણે નવા અવાજમાં મિશ્રિત કરો.",
+ "Model conversion": "મોડેલ રૂપાંતરણ",
+ "Output of the pth file": "pth ફાઇલનું આઉટપુટ",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "સ્થિતિને એક બાજુ અથવા બીજી બાજુ વધુ સમાયોજિત કરવાથી મોડેલને પ્રથમ અથવા બીજી બાજુ વધુ સમાન બનાવશે.",
+ "The information to be placed in the model (You can leave it blank or put anything).": "મોડેલમાં મૂકવાની માહિતી (તમે તેને ખાલી છોડી શકો છો અથવા કંઈપણ મૂકી શકો છો).",
+ "Record Screen": "રેકોર્ડ સ્ક્રીન",
+ "See Model Information": "મોડેલ જાણકારી જુઓ",
+ "Extract F0 Curve": "F0 વળાંકનો અર્ક કાઢો",
+ "Record": "રેકોર્ડ",
+ "Stop Recording": "રેકોર્ડ કરવાનું બંધ કરો",
+ "Introduce the model .pth path": "મોડલ .pth પાથને રજૂ કરો",
+ "# How to Report an Issue on GitHub": "# GitHub પર કોઈ સમસ્યાની જાણ કેવી રીતે કરવી",
+ "Model Link": "મોડેલ કડી",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. [GitHub issues] (https://github.com/IAHispano/Applio/issues) પર જાઓ અને 'ન્યૂ ઇશ્યૂ' બટન પર ક્લિક કરો.",
+ "## Download Model": "## ડાઉનલોડ મોડેલ",
+ "Introduce the model link": "મોડેલ કડીનો પરિચય આપો",
+ "Download Model": "ડાઉનલોડ મોડેલ",
+ "## Drop files": "## ફાઇલો મૂકો",
+ "Search": "શોધવું",
+ "## Search Model": "## શોધ મોડેલ",
+ "TTS Voices": "TTS અવાજો",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "આ જગ્યામાં તમારી .pth ફાઇલ અને .index ફાઇલને ખેંચો. એકને ખેંચો અને પછી બીજું.",
+ "TTS Speed": "TTS ઝડપ",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "એફ0 (F0) વળાંક સમય જતાં અવાજની બેઝ ફ્રિક્વન્સીમાં ભિન્નતા દર્શાવે છે, જે દર્શાવે છે કે પિચ કેવી રીતે વધે છે અને ઘટે છે.",
+ "Introduce the model name to search.": "શોધવા માટે મોડેલ નામનો પરિચય આપો.",
+ "And select the sampling rate": "અને સેમ્પલિંગ રેટ પસંદ કરો.",
+ "## Download Pretrained Models": "## પ્રીટ્રેઈન્ડ મોડલ ડાઉનલોડ કરો",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. તમે જે સમસ્યાનો સામનો કરી રહ્યા છો તેને રેકોર્ડ કરવાનું શરૂ કરવા માટે નીચે આપેલા 'રેકોર્ડ સ્ક્રીન' બટન પર ક્લિક કરો.",
+ "We couldn't find models by that name.": "અમે તે નામથી મોડેલો શોધી શક્યા નહીં.",
+ "Text to Synthesize": "સંશ્લેષણ કરવા માટેનું લખાણ",
+ "Select the TTS voice to use for the conversion.": "રૂપાંતરણ માટે વાપરવા માટે TTS અવાજ પસંદ કરો.",
+ "Increase or decrease TTS speed.": "ટીટીએસની ઝડપમાં વધારો કે ઘટાડો.",
+ "Upload a .txt file": ".txt ફાઈલ અપલોડ કરો",
+ "Select the pretrained model you want to download.": "તમે ડાઉનલોડ કરવા માંગો છો તે પૂર્વપ્રશિક્ષિત મોડેલ પસંદ કરો.",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. એક વખત તમે સમસ્યાનું રેકોર્ડિંગ પૂરું કરી લો એટલે 'સ્ટોપ રેકોર્ડિંગ' બટન પર ક્લિક કરો (આ જ બટન, પરંતુ તમે સક્રિયપણે રેકોર્ડિંગ કરી રહ્યા છો કે નહીં તેના આધારે લેબલ બદલાય છે).",
+ "Enter the text to synthesize.": "સંશ્લેષણ કરવા માટે લખાણ દાખલ કરો.",
+ "Output Path for RVC Audio": "RVC ઓડિયો માટે આઉટપુટ પાથ",
+ "Output Path for TTS Audio": "TTS ઓડિયો માટે આઉટપુટ પાથ",
+ "Input path for text file": "લખાણ ફાઈલ માટે ઈનપુટ પાથ",
+ "Enter text to synthesize": "સંશ્લેષણ કરવા માટે લખાણ દાખલ કરો",
+ "Language": "ભાષા",
+ "Theme": "થીમ",
+ "Restart Applio": "એપ્લિઓને પુન:શરૂ કરો",
+ "Enable fake GPU": "નકલી GPU સક્રિય કરો",
+ "Enable Applio integration with applio.org/models using flask": "ફ્લાસ્કની મદદથી applio.org/models સાથે એપ્લિયો સંકલન સક્રિય કરો",
+ "Enable Applio integration with Discord presence": "ડિસ્કોર્ડ હાજરી સાથે એપ્લિઓ સંકલન સક્રિય કરો",
+ "Precision": "ચોકસાઈ",
+ "The path to the text file that contains content for text to speech.": "લખાણ ફાઇલનો પાથ કે જે લખાણથી વાણી માટે સમાવિષ્ટો સમાવે છે.",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "તે ડિસ્કોર્ડમાં વર્તમાન એપ્લિયો પ્રવૃત્તિ પ્રદર્શિત કરવાની સંભાવનાને સક્રિય કરશે.",
+ "Select the language you want to use. (Requires restarting Applio)": "તમે જે ભાષા વાપરવા માંગો તે પસંદ કરો. (એપ્લિયોને ફરી શરૂ કરવાની જરૂર છે)",
+ "Update precision": "સુધારો ચોકસાઇ",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. પૂરી પાડવામાં આવેલ ઇશ્યૂ ટેમ્પલેટ પૂર્ણ કરો, જરૂરિયાત મુજબ વિગતોનો સમાવેશ કરવાની ખાતરી કરો અને અગાઉના પગલામાંથી રેકોર્ડ કરેલી ફાઇલને અપલોડ કરવા માટે અસ્કયામતોના વિભાગનો ઉપયોગ કરો.",
+ "Select the theme you want to use. (Requires restarting Applio)": "થીમ પસંદ કરો જે તમે વાપરવા માંગો છો. (એપ્લિયોને ફરી શરૂ કરવાની જરૂર છે)",
+ "Plugin Installer": "પ્લગઇન સ્થાપનાર",
+ "Version Checker": "આવૃત્તિ ચકાસનાર",
+ "Check for updates": "સુધારાઓ માટે ચકાસો",
+ "Post-Process": "પછીની પ્રક્રિયા",
+ "Drag your plugin.zip to install it": "તેને સ્થાપિત કરવા માટે તમારા plugin.zip ખેંચો",
+ "It will activate the possibility of downloading models with a click from the website.": "તે વેબસાઇટ પરથી એક ક્લિક સાથે મોડેલો ડાઉનલોડ કરવાની સંભાવનાને સક્રિય કરશે.",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "જીપીયુની ગેરહાજરીને કારણે હાલમાં તાલીમ બિનઆધારભૂત છે. ટ્રેનિંગ ટેબને એક્ટિવેટ કરવા માટે, સેટિંગ્સ ટેબ પર નેવિગેટ કરો અને 'ફેક જીપીયુ' વિકલ્પ સક્રિય કરો.",
+ "Reverb": "ઉલટાવો",
+ "Select the precision you want to use for training and inference.": "તાલીમ અને અનુમાન માટે તમે જે ચોકસાઇનો ઉપયોગ કરવા માંગો છો તે પસંદ કરો.",
+ "Reverb Damping": "ડેમ્પીંગ ઉલટાવો",
+ "Reverb Room Size": "ઓરડાના માપને ઉલટાવો",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "ટ્રેનનું ટેબ એક્ટિવેટ કરે છે. જા કે, કૃપા કરીને એ બાબતની નોંધ લેશો કે આ ઉપકરણમાં જીપીયુ (GPU) ક્ષમતાઓનો અભાવ છે, તેથી તાલીમ આધારભૂત નથી. આ વિકલ્પ ફક્ત પરીક્ષણ હેતુ માટે છે. (આ વિકલ્પ એપ્લિઓને ફરી શરૂ કરશે)",
+ "Apply reverb to the audio.": "ઓડિયોમાં રેવર્બ લગાવો.",
+ "Post-process the audio to apply effects to the output.": "આઉટપુટ પર અસરો લાગુ કરવા માટે ઓડિયોની પ્રક્રિયા પછીની પ્રક્રિયા કરો.",
+ "Set the damping of the reverb.": "રેવબનું ડેમ્પિંગ સેટ કરો.",
+ "Reverb Wet Gain": "રેવરબ વેટ ગેઇન",
+ "Set the room size of the reverb.": "રેવર્બના ઓરડાનું માપ સુયોજિત કરો.",
+ "Reverb Width": "પહોળાઈ ઉલટાવો",
+ "Reverb Dry Gain": "ડ્રાય ગેઇન ઉલટાવો",
+ "Pitch Shift": "પિચ Shift",
+ "Set the dry gain of the reverb.": "રેવ્બનો ડ્રાય ગેઇન સેટ કરો.",
+ "Reverb Freeze Mode": "રેવરબ ફ્રીઝ સ્થિતિ",
+ "Set the wet gain of the reverb.": "રેવબનો ભીનો લાભ સેટ કરો.",
+ "Check which version of Applio is the latest to see if you need to update.": "તમારે અપડેટ કરવાની જરૂર છે કે નહીં તે જોવા માટે એપ્લિઓનું કયું સંસ્કરણ નવીનતમ છે તે તપાસો.",
+ "Set the width of the reverb.": "પ્રતિવાદની પહોળાઈ સુયોજિત કરો.",
+ "Pitch Shift Semitones": "પિચ શિફ્ટ સેમિટોન્સ",
+ "Set the freeze mode of the reverb.": "રેવરબનો ફ્રીઝ મોડ સેટ કરો.",
+ "Limiter": "મર્યાદિત કરનાર",
+ "Apply limiter to the audio.": "ઓડિયો માટે લિમિટર લાગુ કરો.",
+ "Gain": "લાભ",
+ "Set the pitch shift semitones.": "પિચ શિફ્ટ સેમિટોન્સને સેટ કરો.",
+ "Limiter Threshold dB": "લિમિટર થ્રેશોલ્ડ dB",
+ "Apply pitch shift to the audio.": "ઓડિયોમાં પિચ શિફ્ટ લાગુ કરો.",
+ "Set the limiter threshold dB.": "મર્યાદા થ્રેશોલ્ડ dB ને સુયોજિત કરો.",
+ "Gain dB": "dB મેળવો",
+ "Limiter Release Time": "મર્યાદા પ્રકાશન સમય",
+ "Apply gain to the audio.": "ઓડિયો પર ગેઇન લગાવો.",
+ "Distortion": "ભંગાણ",
+ "Chorus": "કોરસ",
+ "Set the gain dB.": "ગેઇન ડીબી સેટ કરો.",
+ "Distortion Gain": "વિકૃતિ લાભ",
+ "Apply distortion to the audio.": "ઓડિયોમાં વિકૃતિ લાગુ કરો.",
+ "Set the limiter release time.": "મર્યાદિત પ્રકાશન સમયને સુયોજિત કરો.",
+ "Chorus Rate Hz": "કોરસ દર Hz",
+ "Set the distortion gain.": "વિકૃતિ લાભને સુયોજિત કરો.",
+ "Chorus Depth": "કોરસ ઊંડાઈ",
+ "Apply chorus to the audio.": "ઓડિયો પર સમૂહગીત લાગુ કરો.",
+ "Set the chorus rate Hz.": "સમૂહગીત દર Hz ને સુયોજિત કરો.",
+ "Chorus Feedback": "કોરસ ફીડબેક",
+ "Chorus Center Delay ms": "ચોરસ કેન્દ્ર વિલંબ ms",
+ "Bitcrush": "બીટક્રશ",
+ "Bitcrush Bit Depth": "Bitcrush બીટ ઊંડાઈ",
+ "Set the chorus feedback.": "સમૂહગીત પ્રતિસાદ સેટ કરો.",
+ "Clipping": "ક્લિપિંગ",
+ "Apply bitcrush to the audio.": "ઓડિયો પર બીટક્રશ લગાવો.",
+ "Set the chorus center delay ms.": "સમૂહગીત કેન્દ્ર વિલંબ ms ને સુયોજિત કરો.",
+ "Chorus Mix": "ચોરસ મિશ્રણ",
+ "Clipping Threshold": "ક્લિપિંગ થ્રેશોલ્ડ",
+ "Compressor": "કોમ્પ્રેસર",
+ "Set the chorus depth.": "સમૂહગીતની ઊંડાઈ સુયોજિત કરો.",
+ "Set the chorus mix.": "સમૂહગીત મિશ્રણને સુયોજિત કરો.",
+ "Set the bitcrush bit depth.": "બીટક્રશ બીટ ઊંડાઈને સુયોજિત કરો.",
+ "Apply clipping to the audio.": "ઓડિયો પર ક્લિપિંગ લગાવો.",
+ "Set the clipping threshold.": "ક્લિપિંગ થ્રેશોલ્ડને સુયોજિત કરો.",
+ "Compressor Threshold dB": "કોમ્પ્રેસર થ્રેશોલ્ડ dB",
+ "Apply compressor to the audio.": "ઓડિયોમાં કોમ્પ્રેસર લગાવો.",
+ "Compressor Ratio": "કોમ્પ્રેસરનો ગુણોત્તર",
+ "Delay": "વિલંબ",
+ "Compressor Attack ms": "કોમ્પ્રેસર એટેક ms",
+ "Delay Seconds": "વિલંબ સેકંડો",
+ "Apply delay to the audio.": "ઓડિયોમાં વિલંબ લાગુ કરો.",
+ "Compressor Release ms": "કોમ્પ્રેસર પ્રકાશન ms",
+ "Set the compressor ratio.": "કોમ્પ્રેસરનો ગુણોત્તર સુયોજિત કરો.",
+ "Delay Feedback": "વિલંબ પ્રતિસાદ",
+ "Set the compressor attack ms.": "કોમ્પ્રેસર એટેક ms ને સુયોજિત કરો.",
+ "Set the compressor release ms.": "કોમ્પ્રેસર પ્રકાશન ms ને સુયોજિત કરો.",
+ "Delay Mix": "વિલંબ મિશ્રણ",
+ "Set the delay seconds.": "વિલંબની સેકન્ડો સુયોજિત કરો.",
+ "Set the delay feedback.": "વિલંબ પ્રતિસાદને સુયોજિત કરો.",
+ "Custom Embedder": "વૈવિધ્યપૂર્ણ જડિત",
+ "Set the delay mix.": "વિલંબ મિશ્રણને સુયોજિત કરો.",
+ "Upload .json": ".json અપલોડ કરો",
+ "model information": "મોડેલ જાણકારી",
+ "Folder Name": "ફોલ્ડર નામ",
+ "Set the compressor threshold dB.": "કોમ્પ્રેસર થ્રેશોલ્ડ dB ગોઠવો.",
+ "Model Creator": "મોડેલ બનાવનાર",
+ "Upload .bin": ".bin અપલોડ કરો",
+ "Speaker ID": "સ્પીકર ID",
+ "Refresh embedders": "જડિતરો તાજા કરો",
+ "Select Custom Embedder": "વૈવિધ્યપૂર્ણ એમ્બાઇન્ડર પસંદ કરો",
+ "Name of the model creator. (Default: Unknown)": "મોડેલ સર્જકનું નામ. (મૂળભૂત: અજ્ઞાત)",
+ "Set name": "નામને સુયોજિત કરો",
+ "Model Author Name": "મોડેલ લેખક નામ",
+ "Select the speaker ID to use for the conversion.": "રૂપાંતરણ માટે વાપરવા માટે સ્પીકર ID પસંદ કરો.",
+ "Move files to custom embedder folder": "કસ્ટમ એમ્બેડર ફોલ્ડરમાં ફાઇલોને ખસેડો",
+ "The name that will appear in the model information.": "નામ કે જે મોડેલ માહિતીમાં દેખાશે.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "ઓટોટ્યુન સ્ટ્રેન્થ સેટ કરો - તમે તેને જેટલું વધારશો તેટલું તે ક્રોમેટિક ગ્રીડ પર સ્નેપ થશે."
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/he_HE.json b/assets/i18n/languages/he_HE.json
new file mode 100644
index 0000000000000000000000000000000000000000..b221e8386ca4126ce24fb6c74976c58ecba4b17d
--- /dev/null
+++ b/assets/i18n/languages/he_HE.json
@@ -0,0 +1,325 @@
+{
+ "Processing": "עיבוד",
+ "Extra": "נוספות",
+ "Training": "הדרכה",
+ "Inference": "הסקה",
+ "Output Information": "מידע פלט",
+ "Download": "הורדה",
+ "Audio Analyzer": "מנתח אודיו",
+ "Merge Audios": "מיזוג אודיו",
+ "Settings": "הגדרות",
+ "The output information will be displayed here.": "פרטי הפלט יוצגו כאן.",
+ "Plugins": "תוספים",
+ "Model Information": "מידע על הדגם",
+ "Report a Bug": "דווח על באג",
+ "Preprocess": "תהליך מקדים",
+ "Audio cutting": "חיתוך אודיו",
+ "Model Name": "שם דגם",
+ "Process effects": "אפקטי תהליך",
+ "Name of the new model.": "שם הדגם החדש.",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "כלי המרת קול פשוט ואיכותי המתמקד בקלות השימוש והביצועים.",
+ "Refresh Datasets": "רענון ערכות נתונים",
+ "Dataset Name": "שם ערכת נתונים",
+ "Dataset Path": "נתיב ערכת נתונים",
+ "Dataset Creator": "יוצר ערכת נתונים",
+ "Enter dataset name": "הזן שם ערכת נתונים",
+ "This section contains some extra utilities that often may be in experimental phases.": "סעיף זה מכיל כמה כלי עזר נוספים שלעתים קרובות עשויים להיות בשלבי ניסוי.",
+ "Enter model name": "הזן שם דגם",
+ "Path to the dataset folder.": "נתיב לתיקיית ערכת הנתונים.",
+ "Name of the new dataset.": "שם ערכת הנתונים החדשה.",
+ "Upload Audio Dataset": "העלה ערכת נתוני שמע",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "מומלץ לבטל אפשרות זו אם ערכת הנתונים שלך כבר עובדה.",
+ "Sampling Rate": "קצב הדגימה",
+ "Enter dataset path": "הזן נתיב ערכת נתונים",
+ "Embedder Model": "מודל Embedder",
+ "Extract": "תמצית",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "קובץ השמע נוסף בהצלחה לערכת הנתונים. אנא לחץ על כפתור התהליך המקדים.",
+ "Hop Length": "אורך הופ",
+ "Model Architecture": "ארכיטקטורת מודל",
+ "Preprocess Dataset": "ערכת נתונים של קדם-תהליך",
+ "Batch Size": "גודל אצווה",
+ "The sampling rate of the audio files.": "קצב הדגימה של קבצי האודיו.",
+ "Version of the model architecture.": "גרסה של ארכיטקטורת המודל.",
+ "Total Epoch": "סה\"כ תקופה",
+ "Save Every Epoch": "הצילו כל תקופה",
+ "Model used for learning speaker embedding.": "מודל המשמש ללימוד הטמעת רמקולים.",
+ "Pretrained": "הוכשר מראש",
+ "Save Every Weights": "חסוך כל משקולות",
+ "Determine at how many epochs the model will saved at.": "קבע בכמה תקופות יישמר המודל.",
+ "Save Only Latest": "שמור רק את העדכני ביותר",
+ "Custom Pretrained": "מותאם אישית שהוכשר מראש",
+ "Upload Pretrained Model": "העלה מודל מאומן מראש",
+ "Specifies the overall quantity of epochs for the model training process.": "מציין את הכמות הכוללת של תקופות עבור תהליך אימון המודל.",
+ "Refresh Custom Pretraineds": "רענון מאומנים מראש מותאמים אישית",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "מציין את משך הזמן שלוקח למערכת לעבור לשינוי גובה צליל משמעותי. אורכי דילוג קטנים יותר דורשים זמן רב יותר להסקת מסקנות אך נוטים להניב דיוק גובה צליל גבוה יותר.",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "מומלץ ליישר אותו עם ה-VRAM הזמין של המעבד הגרפי. הגדרה 4 מציעה דיוק משופר אך עיבוד איטי יותר, בעוד 8 מספקת תוצאות מהירות וסטנדרטיות.",
+ "Pretrained G Path": "G מותאם אישית מאומן מראש",
+ "GPU Settings": "הגדרות GPU",
+ "Pretrained Custom Settings": "הגדרות מותאמות אישית שהוכשרו מראש",
+ "GPU Number": "מספר GPU",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "הגדרה זו מאפשרת לך לשמור את המשקולות של המודל בסוף כל תקופה.",
+ "Pretrained D Path": "מותאם אישית מאומן מראש D",
+ "GPU Custom Settings": "הגדרות מותאמות אישית של GPU",
+ "The file you dropped is not a valid pretrained file. Please try again.": "הקובץ ששחררת אינו קובץ חוקי שהוכשר מראש. נסה שוב.",
+ "0 to ∞ separated by -": "0 עד ∞ מופרדים על ידי -",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "לחץ על לחצן הרענון כדי לראות את הקובץ המאומן מראש בתפריט הנפתח.",
+ "Use CPU": "שימוש ב- CPU",
+ "The GPU information will be displayed here.": "פרטי המעבד הגרפי יוצגו כאן.",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "הפעלת הגדרה זו תגרום לכך שקובצי G ו- D ישמרו רק את הגרסאות העדכניות ביותר שלהם, ובכך יחסכו ביעילות שטח אחסון.",
+ "Pitch Guidance": "הנחיית פיץ'",
+ "GPU Information": "מידע על המעבד הגרפי",
+ "Extract Features": "תכונות חלץ",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "הגדרת הגדרות GPU מתקדמות, מומלצות למשתמשים עם ארכיטקטורת GPU טובה יותר.",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "מספר ליבות המעבד לשימוש בתהליך המקדים. הגדרת ברירת המחדל היא ליבות ה- CPU שלך, המומלצת ברוב המקרים.",
+ "Force the use of CPU for training.": "כפה את השימוש ב- CPU לאימון.",
+ "Cache Dataset in GPU": "ערכת נתונים של מטמון במעבד הגרפי",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "מספר ליבות המעבד לשימוש בתהליך החילוץ. הגדרת ברירת המחדל היא ליבות ה- CPU שלך, המומלצת ברוב המקרים.",
+ "Index Algorithm": "אלגוריתם אינדקס",
+ "Overtraining Detector": "גלאי אימון יתר",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "ציין את מספר המעבדים הגרפיים שברצונך להשתמש בהם לחילוץ על-ידי הכנסתם כשהם מופרדים באמצעות מקפים (-).",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "ציין את מספר המעבדים הגרפיים שברצונך להשתמש בהם לעיבוד מקדים על-ידי הכנסתם כשהם מופרדים באמצעות מקפים (-). כרגע, לשימוש ב- multi-gpu לא תהיה השפעה משמעותית.",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "השתמש במודלים מאומנים מראש בעת אימון משלך. גישה זו מפחיתה את משך האימון ומשפרת את האיכות הכוללת.",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "שימוש במודלים מותאמים אישית שהוכשרו מראש יכול להוביל לתוצאות מעולות, שכן בחירת הדגמים המתאימים ביותר שהוכשרו מראש המותאמים למקרה השימוש הספציפי יכולה לשפר משמעותית את הביצועים.",
+ "Overtraining Detector Settings": "הגדרות גלאי אימון יתר",
+ "Fresh Training": "אימון טרי",
+ "Cache the dataset in GPU memory to speed up the training process.": "שמור במטמון את ערכת הנתונים בזיכרון GPU כדי להאיץ את תהליך האימון.",
+ "Start Training": "התחל להתאמן",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "אנו נותנים עדיפות להפעלת חילוץ הדגם על המעבד הגרפי לקבלת ביצועים מהירים יותר. אם אתה מעדיף להשתמש במעבד, פשוט השאר את שדה המעבד הגרפי ריק.",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans הוא אלגוריתם אשכולות המחלק את מערך הנתונים לאשכולות K. הגדרה זו שימושית במיוחד לערכות נתונים גדולות.",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "אנו נותנים עדיפות להפעלת העיבוד המקדים של הדגם במעבד הגרפי לקבלת ביצועים מהירים יותר. אם אתה מעדיף להשתמש במעבד, פשוט השאר את שדה המעבד הגרפי ריק.",
+ "Stop Training": "הפסקת אימונים",
+ "Overtraining Threshold": "סף אימון יתר",
+ "Generate Index": "יצירת אינדקס",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "על ידי שימוש בהנחיית גובה הצליל, ניתן יהיה לשקף את האינטונציה של הקול המקורי, כולל גובה הצליל שלו. תכונה זו חשובה במיוחד לשירה ולתרחישים אחרים שבהם שמירה על המנגינה או תבנית גובה הצליל המקורית היא חיונית.",
+ "Export Model": "מודל ייצוא",
+ "Exported Pth file": "קובץ Pth מיוצא",
+ "Exported Index file": "קובץ אינדקס מיוצא",
+ "Select the pth file to be exported": "בחר את קובץ ה- pth לייצוא",
+ "Upload": "העלאה",
+ "Voice Model": "מודל קולי",
+ "Refresh": "לרענן",
+ "Index File": "קובץ אינדקס",
+ "Select the index file to be exported": "בחר את קובץ האינדקס לייצוא",
+ "Single": "סינגל",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "זהה אימון יתר כדי למנוע מהמודל ללמוד את נתוני האימון טוב מדי ולאבד את היכולת להכליל לנתונים חדשים.",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "הגדר את המספר המרבי של תקופות שברצונך שהמודל שלך יפסיק להתאמן אם לא זוהה שיפור.",
+ "Upload Audio": "העלה אודיו",
+ "Unload Voice": "ביטול טעינת קול",
+ "Select Audio": "בחר שמע",
+ "Select the voice model to use for the conversion.": "בחר את הדגם הקולי שישמש להמרה.",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "הפוך הגדרה זו לזמינה רק אם אתה מאמן דגם חדש מאפס או מפעיל מחדש את האימון. מוחק את כל המשקולות ויומני הטנזורבורד שנוצרו בעבר.",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "הלחצן 'העלה' מיועד רק ל-google colab: מעלה את הקבצים המיוצאים לתיקייה ApplioExported ב-Google Drive.",
+ "Advanced Settings": "הגדרות מתקדמות",
+ "Select the audio to convert.": "בחר את האודיו להמרה.",
+ "Select the index file to use for the conversion.": "בחר את קובץ האינדקס שישמש להמרה.",
+ "Custom Output Path": "נתיב פלט מותאם אישית",
+ "Output Path": "נתיב פלט",
+ "Export Format": "תבנית ייצוא",
+ "Split Audio": "שמע מפוצל",
+ "Clean Audio": "שמע נקי",
+ "Select the format to export the audio.": "בחר את הפורמט לייצוא השמע.",
+ "Autotune": "כוונון אוטומטי",
+ "Clean Strength": "חוזק נקי",
+ "Upscale Audio": "שמע יוקרתי",
+ "Clear Outputs (Deletes all audios in assets/audios)": "נקה יציאות (מחיקת כל רכיבי השמע במשאבים/שמעים)",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "הנתיב שבו יישמר שמע הפלט, כברירת מחדל ב- assets/audios/output.wav",
+ "Formant Shifting": "הסטה פורמנטית",
+ "Quefrency for formant shifting": "Quefrency עבור הסטה פורמנטית",
+ "Default value is 1.0": "ערך ברירת המחדל הוא 1.0",
+ "Pitch": "המגרש",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "נקה את פלט השמע באמצעות אלגוריתמים לזיהוי רעשים, המומלצים לדיבור אודיו.",
+ "Timbre for formant shifting": "גוון להזזת פורמנט",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "החל כוונון אוטומטי רך על המסקנות שלך, מומלץ לשירת המרות.",
+ "Filter Radius": "רדיוס מסנן",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "פצל את השמע למקטעים לצורך הסקה כדי להשיג תוצאות טובות יותר במקרים מסוימים.",
+ "Browse presets for formanting": "עיון בקביעות מוגדרות מראש לפורמאנטינג",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "אפשר הזזה פורמנטית. משמש להמרה מזכר לנקבה ולהיפך.",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "שדרג את השמע לאיכות גבוהה יותר, המומלצת לשמע באיכות נמוכה. (עיבוד השמע עשוי להימשך זמן רב יותר)",
+ "Search Feature Ratio": "יחס תכונות חיפוש",
+ "Volume Envelope": "מעטפת נפח",
+ "Convert": "מומר",
+ "Batch": "אצווה",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "הגדר את גובה הצליל של השמע, ככל שהערך גבוה יותר, כך גובה הצליל גבוה יותר.",
+ "Protect Voiceless Consonants": "הגנה על עיצורים חסרי קול",
+ "Export Audio": "ייצוא אודיו",
+ "Pitch extraction algorithm": "אלגוריתם חילוץ גובה המגרש",
+ "Input Folder": "תיקיית קלט",
+ "Presets are located in /assets/formant_shift folder": "קביעות מוגדרות מראש ממוקמות בתיקייה /assets/formant_shift",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "הגדר את רמת הניקוי לשמע הרצוי, ככל שתגדיל אותה כך היא תנקה יותר, אך ייתכן שהשמע יהיה דחוס יותר.",
+ "Enter input path": "הזן נתיב קלט",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "יש להחליף או למזג עם מעטפת הנפח של הפלט. ככל שהיחס קרוב יותר ל-1, כך מעטפת הפלט מועסקת יותר.",
+ "Output Folder": "תיקיית פלט",
+ "Select the folder containing the audios to convert.": "בחר את התיקיה המכילה את האודיו להמרה.",
+ "## Voice Blender": "## בלנדר קולי",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "אלגוריתם חילוץ גובה הצליל לשימוש בהמרת השמע. אלגוריתם ברירת המחדל הוא rmvpe, המומלץ ברוב המקרים.",
+ "Enter output path": "הזן נתיב פלט",
+ "Voice Blender": "בלנדר קולי",
+ "Get information about the audio": "קבלת מידע אודות השמע",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "השפעה המופעלת על ידי קובץ האינדקס; ערך גבוה יותר מתאים להשפעה גדולה יותר. עם זאת, בחירה בערכים נמוכים יותר יכולה לסייע בהפחתת לכלוכים הקיימים בשמע.",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "אם המספר גדול או שווה לשלושה, שימוש בסינון חציוני על תוצאות הטון שנאסף עלול להפחית את הנשימה.",
+ "Select the folder where the output audios will be saved.": "בחר את התיקיה שבה יישמרו שמעי הפלט.",
+ "Fusion": "היתוך",
+ "Blend Ratio": "יחס מיזוג",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "הגן על עיצורים וצלילי נשימה מובחנים כדי למנוע קריעה אלקטרו-אקוסטית וחפצים אחרים. משיכת הפרמטר לערכו המקסימלי של 0.5 מציעה הגנה מקיפה. עם זאת, הפחתת ערך זה עשויה להקטין את היקף ההגנה תוך מיתון אפקט האינדקס.",
+ "You can also use a custom path.": "ניתן גם להשתמש בנתיב מותאם אישית.",
+ "Path to Model": "נתיב למודל",
+ "Enter path to model": "הזן נתיב לדגם",
+ "Inroduce the model information": "הצגת מידע המודל",
+ "View model information": "הצגת פרטי דגם",
+ "Introduce the model pth path": "הצגת נתיב pth של המודל",
+ "Model information to be placed": "מידע על הדגם שיש למקם",
+ "View": "נוף",
+ "Pth file": "קובץ Pth",
+ "Model extraction": "חילוץ מודל",
+ "Model conversion": "המרת מודל",
+ "Output of the pth file": "פלט של קובץ pth",
+ "Extract F0 Curve": "חלץ עקומת F0",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "בחרו שני מודלים קוליים, הגדירו את אחוז המיזוג הרצוי ומזגו אותם לקול חדש לחלוטין.",
+ "# How to Report an Issue on GitHub": "# כיצד לדווח על בעיה ב- GitHub",
+ "Record": "שיא",
+ "Drag and drop your model here": "גרור ושחרר את הדגם שלך לכאן",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "התאמת המיקום יותר לצד זה או אחר תהפוך את המודל לדומה יותר לראשון או השני.",
+ "The information to be placed in the model (You can leave it blank or put anything).": "המידע שיש להציב במודל (אתה יכול להשאיר אותו ריק או לשים כל דבר).",
+ "Record Screen": "מסך הקלטה",
+ "Stop Recording": "הפסקת הקלטה",
+ "Introduce the model .pth path": "הצגת נתיב .pth של המודל",
+ "## Download Model": "## הורד דגם",
+ "See Model Information": "ראה מידע על הדגם",
+ "Model Link": "קישור לדגם",
+ "Download Model": "הורד דגם",
+ "Search": "חיפוש",
+ "Introduce the model link": "הצג את הקישור לדגם",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. עבור אל [בעיות GitHub](https://github.com/IAHispano/Applio/issues) ולחץ על כפתור 'בעיה חדשה'.",
+ "## Drop files": "## שחרר קבצים",
+ "## Search Model": "## מודל חיפוש",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. לחץ על כפתור 'הקלט מסך' למטה כדי להתחיל להקליט את הבעיה שאתה חווה.",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "עקומת f0 מייצגת את השינויים בתדר הבסיס של קול לאורך זמן, ומראה כיצד גובה הצליל עולה ויורד.",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "גרור את קובץ ה- .pth ואת קובץ ה- .index לשטח זה. גרור אחד ולאחר מכן את השני.",
+ "TTS Voices": "קולות TTS",
+ "We couldn't find models by that name.": "לא מצאנו דוגמניות בשם הזה.",
+ "TTS Speed": "מהירות TTS",
+ "Introduce the model name to search.": "הצג את שם הדגם לחיפוש.",
+ "## Download Pretrained Models": "## הורד דגמים מאומנים מראש",
+ "And select the sampling rate": "ובחר את קצב הדגימה.",
+ "Text to Synthesize": "טקסט לסנתז",
+ "Increase or decrease TTS speed.": "הגדל או הקטן את מהירות TTS.",
+ "Upload a .txt file": "העלאת קובץ .txt",
+ "Enter the text to synthesize.": "הזן את הטקסט לסנתזה.",
+ "Select the TTS voice to use for the conversion.": "בחר את קול TTS לשימוש עבור ההמרה.",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. לאחר שסיימת להקליט את הבעיה, לחץ על כפתור 'הפסק הקלטה' (אותו כפתור, אך התווית משתנה בהתאם לשאלה אם אתה מקליט באופן פעיל או לא).",
+ "Output Path for TTS Audio": "נתיב פלט עבור שמע TTS",
+ "Select the pretrained model you want to download.": "בחר את הדגם המאומן מראש שברצונך להוריד.",
+ "Input path for text file": "נתיב קלט עבור קובץ טקסט",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. השלם את תבנית הבעיה שסופקה, הקפד לכלול פרטים לפי הצורך, והשתמש בסעיף הנכסים כדי להעלות את הקובץ המוקלט מהשלב הקודם.",
+ "Enter text to synthesize": "הזן טקסט לסנתזה",
+ "Output Path for RVC Audio": "נתיב פלט עבור שמע RVC",
+ "Enable Applio integration with Discord presence": "אפשר שילוב Applio עם נוכחות Discord",
+ "Enable fake GPU": "הפעל GPU מזויף",
+ "Language": "שפה",
+ "Restart Applio": "הפעל מחדש את Applio",
+ "Theme": "ערכת נושא",
+ "Enable Applio integration with applio.org/models using flask": "אפשר שילוב Applio עם applio.org/models באמצעות בקבוק",
+ "The path to the text file that contains content for text to speech.": "הנתיב לקובץ הטקסט המכיל תוכן עבור טקסט לדיבור.",
+ "Precision": "דיוק",
+ "It will activate the possibility of downloading models with a click from the website.": "זה יפעיל את האפשרות להוריד דגמים בלחיצה מהאתר.",
+ "Select the language you want to use. (Requires restarting Applio)": "בחר את השפה שבה ברצונך להשתמש. (דורש הפעלה מחדש של Applio)",
+ "Plugin Installer": "מתקין תוספים",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "זה יפעיל את האפשרות להציג את הפעילות הנוכחית Applio בדיסקורד.",
+ "Select the theme you want to use. (Requires restarting Applio)": "בחר את ערכת הנושא שבה ברצונך להשתמש. (דורש הפעלה מחדש של Applio)",
+ "Update precision": "דיוק העדכון",
+ "Drag your plugin.zip to install it": "גרור את plugin.zip כדי להתקין אותו",
+ "Version Checker": "בודק גרסאות",
+ "Post-Process": "לאחר התהליך",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "הפעלת כרטיסיית הרכבת. עם זאת, שים לב שמכשיר זה חסר יכולות GPU, ולכן אימון אינו נתמך. אפשרות זו היא למטרות בדיקה בלבד. (אפשרות זו תפעיל מחדש את Applio)",
+ "Check for updates": "בדוק אם קיימים עדכונים",
+ "Reverb": "ריוורב",
+ "Apply reverb to the audio.": "החל הדהוד על השמע.",
+ "Reverb Wet Gain": "רווח רטוב Reverb",
+ "Reverb Damping": "דעיכת הדהוד",
+ "Select the precision you want to use for training and inference.": "בחר את הדיוק שבו ברצונך להשתמש לצורך הדרכה והסקת מסקנות.",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "ההדרכה אינה נתמכת כעת עקב היעדר GPU. כדי להפעיל את כרטיסיית האימון, נווטו לכרטיסיית ההגדרות והפעילו את האפשרות 'GPU מזויף'.",
+ "Post-process the audio to apply effects to the output.": "לאחר עיבוד השמע כדי להחיל אפקטים על הפלט.",
+ "Reverb Room Size": "Reverb גודל החדר",
+ "Reverb Dry Gain": "רווח יבש Reverb",
+ "Set the damping of the reverb.": "הגדר את השיכוך של הדהוד.",
+ "Set the wet gain of the reverb.": "הגדר את הרווח הרטוב של הדהוד.",
+ "Set the room size of the reverb.": "הגדר את גודל החדר של הריוורב.",
+ "Reverb Width": "רוחב הדהוד",
+ "Reverb Freeze Mode": "מצב הקפאה של Reverb",
+ "Check which version of Applio is the latest to see if you need to update.": "בדוק איזו גרסה של Applio היא העדכנית ביותר כדי לראות אם עליך לעדכן.",
+ "Set the dry gain of the reverb.": "הגדר את הרווח היבש של הדהוד.",
+ "Set the width of the reverb.": "הגדר את רוחב ההדהוד.",
+ "Limiter": "מגביל",
+ "Pitch Shift": "שינוי גובה הצליל",
+ "Apply limiter to the audio.": "החל מגביל על השמע.",
+ "Limiter Threshold dB": "סף מגביל dB",
+ "Set the limiter threshold dB.": "הגדר את סף המגביל dB.",
+ "Gain": "לקבל",
+ "Pitch Shift Semitones": "הסטת גובה צליל חצאי טונים",
+ "Set the pitch shift semitones.": "הגדר את חצאי הגוונים של שינוי גובה הצליל.",
+ "Set the freeze mode of the reverb.": "הגדר את מצב ההקפאה של ההדהוד.",
+ "Gain dB": "רווח dB",
+ "Apply pitch shift to the audio.": "החל שינוי גובה צליל על השמע.",
+ "Distortion": "עיוות",
+ "Limiter Release Time": "זמן שחרור מגביל",
+ "Set the limiter release time.": "הגדר את זמן השחרור של המגביל.",
+ "Set the gain dB.": "הגדר את dB הרווח.",
+ "Apply gain to the audio.": "החל רווח על השמע.",
+ "Chorus": "מקהלה",
+ "Apply distortion to the audio.": "החל עיוות על השמע.",
+ "Distortion Gain": "רווח עיוות",
+ "Set the distortion gain.": "הגדר את רווח העיוות.",
+ "Set the chorus rate Hz.": "הגדר את קצב הפזמון Hz.",
+ "Chorus Rate Hz": "קצב פזמון הרץ",
+ "Chorus Depth": "עומק הפזמון",
+ "Apply chorus to the audio.": "החל פזמון על השמע.",
+ "Chorus Feedback": "משוב מקהלה",
+ "Set the chorus depth.": "הגדר את עומק הפזמון.",
+ "Chorus Mix": "מיקס פזמון",
+ "Chorus Center Delay ms": "מרכז המקהלה עיכוב ms",
+ "Bitcrush": "ביטקראש",
+ "Set the chorus feedback.": "הגדר את משוב המקהלה.",
+ "Bitcrush Bit Depth": "Bitcrush Bit עומק",
+ "Apply bitcrush to the audio.": "החל bitcrush על השמע.",
+ "Set the chorus mix.": "הגדר את מיקס הפזמון.",
+ "Clipping": "מסיכה",
+ "Set the bitcrush bit depth.": "הגדר את עומק סיביות bitcrush.",
+ "Set the chorus center delay ms.": "הגדר את השהיית מרכז הפזמון ms.",
+ "Compressor": "מדחס",
+ "Clipping Threshold": "סף גזירה",
+ "Apply compressor to the audio.": "החל מדחס על השמע.",
+ "Set the clipping threshold.": "הגדר את סף הגזירה.",
+ "Compressor Threshold dB": "סף מדחס dB",
+ "Apply clipping to the audio.": "החל גזירה על השמע.",
+ "Compressor Attack ms": "Compressor Attack ms",
+ "Compressor Ratio": "יחס מדחס",
+ "Delay": "לעכב",
+ "Compressor Release ms": "שחרור מדחס ms",
+ "Set the compressor attack ms.": "הגדר את התקפת המדחס ms.",
+ "Set the compressor ratio.": "הגדר את יחס המדחס.",
+ "Set the compressor threshold dB.": "הגדר את סף המדחס dB.",
+ "Delay Feedback": "עיכוב משוב",
+ "Delay Seconds": "שניות השהיה",
+ "Apply delay to the audio.": "החל השהיה על השמע.",
+ "Set the compressor release ms.": "הגדר את שחרור המדחס ms.",
+ "Delay Mix": "ערבוב השהיה",
+ "Set the delay seconds.": "הגדר את שניות ההשהיה.",
+ "Set the delay mix.": "הגדר את תערובת ההשהיה.",
+ "Set the delay feedback.": "הגדר את משוב ההשהיה.",
+ "Folder Name": "שם תיקיה",
+ "model information": "מידע על הדגם",
+ "Upload .bin": "העלה .bin",
+ "Upload .json": "העלה .json",
+ "Custom Embedder": "הטמעה מותאמת אישית",
+ "Refresh embedders": "רענון הטבעות",
+ "Select Custom Embedder": "בחר מטביע מותאם אישית",
+ "Model Creator": "יוצר מודלים",
+ "Speaker ID": "מזהה דובר",
+ "Name of the model creator. (Default: Unknown)": "שם יוצר המודל. (ברירת מחדל: לא ידוע)",
+ "Set name": "שם הגדרה",
+ "Move files to custom embedder folder": "העברת קבצים לתיקיית הטבעה מותאמת אישית",
+ "The name that will appear in the model information.": "השם שיופיע בפרטי הדגם.",
+ "Select the speaker ID to use for the conversion.": "בחר את מזהה הדובר שישמש להמרה.",
+ "Model Author Name": "שם מחבר הדגם",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "הגדר את חוזק הכוונון האוטומטי - ככל שתגדיל אותו כך הוא ייצמד לרשת הכרומטית."
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/hi_IN.json b/assets/i18n/languages/hi_IN.json
new file mode 100644
index 0000000000000000000000000000000000000000..c087ce6e358345405c33307fa04bb0853a2920ef
--- /dev/null
+++ b/assets/i18n/languages/hi_IN.json
@@ -0,0 +1,325 @@
+{
+ "Cache Dataset in GPU":"GPU में डेटासेट कैश करें",
+ "Set the compressor threshold dB.":"कंप्रेसर थ्रेशोल्ड dB सेट करें।",
+ "Set the limiter release time.":"लिमिटर रिलीज़ समय सेट करें।",
+ "The GPU information will be displayed here.":"GPU जानकारी यहाँ प्रदर्शित होगी।",
+ "Limiter Threshold dB":"लिमिटर थ्रेशोल्ड dB",
+ "Save Only Latest":"केवल नवीनतम सहेजें",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.":"हाइफ़न (-) द्वारा अलग करके पूर्व-प्रक्रिया के लिए उपयोग करने के लिए इच्छित GPU की संख्या निर्दिष्ट करें। फिलहाल, मल्टी-जीपीयू का उपयोग करने का कोई महत्वपूर्ण प्रभाव नहीं पड़ेगा।",
+ "Apply compressor to the audio.":"ऑडियो पर कंप्रेसर लागू करें।",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.":"यह सेटिंग आपको प्रत्येक युग के अंत में मॉडल के वज़न को सहेजने में सक्षम बनाती है।",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.":"इस सेटिंग को सक्षम करने से G और D फ़ाइलें केवल अपने सबसे हाल के संस्करणों को सहेजेंगी, जिससे संग्रहण स्थान प्रभावी रूप से बच जाएगा।",
+ "Compressor Threshold dB":"कंप्रेसर थ्रेशोल्ड dB",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).":"हाइफ़न (-) द्वारा अलग करके निकालने के लिए उपयोग करने के लिए इच्छित GPU की संख्या निर्दिष्ट करें।",
+ "Compressor Ratio":"कंप्रेसर अनुपात",
+ "Apply pitch shift to the audio.":"ऑडियो पर पिच शिफ्ट लागू करें।",
+ "Preprocess Dataset":"डेटासेट को प्रीप्रोसेस करें",
+ "Specifies the overall quantity of epochs for the model training process.":"मॉडल प्रशिक्षण प्रक्रिया के लिए युगों की कुल मात्रा निर्दिष्ट करता है।",
+ "Custom Pretrained":"कस्टम प्रीट्रेंड",
+ "Pitch Shift Semitones":"पिच शिफ्ट सेमीटोन",
+ "Cache the dataset in GPU memory to speed up the training process.":"प्रशिक्षण प्रक्रिया को गति देने के लिए GPU मेमोरी में डेटासेट को कैश करें।",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.":"कस्टम प्रीट्रेंड मॉडल का उपयोग करने से बेहतर परिणाम मिल सकते हैं, क्योंकि विशिष्ट उपयोग के मामले के अनुरूप सबसे उपयुक्त प्रीट्रेंड मॉडल का चयन करने से प्रदर्शन में काफी वृद्धि हो सकती है।",
+ "Determine at how many epochs the model will saved at.":"निर्धारित करें कि मॉडल कितने युगों में सहेजा जाएगा।",
+ "Set the gain dB.":"गेन dB सेट करें।",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.":"पूर्व-प्रक्रिया में उपयोग करने के लिए CPU कोर की संख्या। डिफ़ॉल्ट सेटिंग आपके CPU कोर हैं, जो अधिकांश मामलों के लिए अनुशंसित है।",
+ "Extract Features":"विशेषताएँ निकालें",
+ "Embedder Model":"एम्बेडर मॉडल",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.":"निष्कर्षण प्रक्रिया में उपयोग करने के लिए CPU कोर की संख्या। डिफ़ॉल्ट सेटिंग आपके CPU कोर हैं, जो अधिकांश मामलों के लिए अनुशंसित है।",
+ "Bitcrush":"बिटक्रश",
+ "Model used for learning speaker embedding.":"स्पीकर एम्बेडिंग सीखने के लिए प्रयुक्त मॉडल।",
+ "Apply gain to the audio.":"ऑडियो पर गेन लागू करें।",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.":"हम तेज़ प्रदर्शन के लिए GPU पर मॉडल प्रीप्रोसेसिंग चलाने को प्राथमिकता देते हैं। यदि आप CPU का उपयोग करना पसंद करते हैं, तो बस GPU फ़ील्ड को खाली छोड़ दें।",
+ "Upload Pretrained Model":"प्रीट्रेंड मॉडल अपलोड करें",
+ "Save Every Epoch":"प्रत्येक युग सहेजें",
+ "Apply bitcrush to the audio.":"ऑडियो पर बिटक्रश लागू करें।",
+ "Limiter Release Time":"लिमिटर रिलीज़ समय",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.":"बेहतर GPU आर्किटेक्चर वाले उपयोगकर्ताओं के लिए अनुशंसित, उन्नत GPU सेटिंग्स सेट करता है।",
+ "Set the bitcrush bit depth.":"बिटक्रश बिट गहराई सेट करें।",
+ "GPU Information":"GPU जानकारी",
+ "Bitcrush Bit Depth":"बिटक्रश बिट गहराई",
+ "Extract":"निकालें",
+ "Set the clipping threshold.":"क्लिपिंग थ्रेशोल्ड सेट करें।",
+ "Limiter":"लिमिटर",
+ "Refresh Custom Pretraineds":"कस्टम प्रीट्रेंड को रीफ़्रेश करें",
+ "Pretrained Custom Settings":"प्रीट्रेंड कस्टम सेटिंग्स",
+ "Set the compressor attack ms.":"कंप्रेसर अटैक ms सेट करें।",
+ "Pitch Guidance":"पिच मार्गदर्शन",
+ "0 to ∞ separated by -":"0 से ∞ तक - द्वारा अलग किया गया",
+ "Hop Length":"हॉप लंबाई",
+ "Use CPU":"CPU का उपयोग करें",
+ "Distortion":"विरूपण",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.":"यह उस अवधि को दर्शाता है जो सिस्टम को एक महत्वपूर्ण पिच परिवर्तन में बदलने में लगती है। छोटी हॉप लंबाई के लिए अनुमान लगाने में अधिक समय लगता है लेकिन इससे उच्च पिच सटीकता प्राप्त होती है।",
+ "GPU Settings":"GPU सेटिंग्स",
+ "Set the compressor ratio.":"कंप्रेसर अनुपात सेट करें।",
+ "Compressor":"कंप्रेसर",
+ "Set the pitch shift semitones.":"पिच शिफ्ट सेमीटोन सेट करें।",
+ "The file you dropped is not a valid pretrained file. Please try again.":"आपके द्वारा छोड़ी गई फ़ाइल कोई मान्य प्रीट्रेंड फ़ाइल नहीं है। कृपया पुन: प्रयास करें।",
+ "Total Epoch":"कुल युग",
+ "Compressor Attack ms":"कंप्रेसर अटैक ms",
+ "Gain dB":"गेन dB",
+ "Index Algorithm":"इंडेक्स एल्गोरिथम",
+ "Apply clipping to the audio.":"ऑडियो पर क्लिपिंग लागू करें।",
+ "Save Every Weights":"हर वज़न सहेजें",
+ "Force the use of CPU for training.":"प्रशिक्षण के लिए CPU के उपयोग के लिए बाध्य करें।",
+ "Set the limiter threshold dB.":"लिमिटर थ्रेशोल्ड dB सेट करें।",
+ "GPU Custom Settings":"GPU कस्टम सेटिंग्स",
+ "Batch Size":"बैच आकार",
+ "Apply limiter to the audio.":"ऑडियो पर लिमिटर लागू करें।",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.":"हम तेज़ प्रदर्शन के लिए GPU पर मॉडल निष्कर्षण चलाने को प्राथमिकता देते हैं। यदि आप CPU का उपयोग करना पसंद करते हैं, तो बस GPU फ़ील्ड को खाली छोड़ दें।",
+ "Pretrained":"प्रीट्रेंड",
+ "Click the refresh button to see the pretrained file in the dropdown menu.":"ड्रॉपडाउन मेनू में प्रीट्रेंड फ़ाइल देखने के लिए रीफ़्रेश बटन पर क्लिक करें।",
+ "Pretrained D Path":"कस्टम प्रीट्रेंड D",
+ "Clipping Threshold":"क्लिपिंग थ्रेशोल्ड",
+ "Pretrained G Path":"कस्टम प्रीट्रेंड G",
+ "Gain":"गेन",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.":"पिच मार्गदर्शन को नियोजित करके, मूल आवाज के स्वर को उसकी पिच सहित प्रतिबिंबित करना संभव हो जाता है। यह सुविधा गायन और अन्य परिदृश्यों के लिए विशेष रूप से मूल्यवान है जहाँ मूल राग या पिच पैटर्न को संरक्षित करना आवश्यक है।",
+ "GPU Number":"GPU संख्या",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.":"इसे आपके GPU के उपलब्ध VRAM के साथ संरेखित करने की सलाह दी जाती है। 4 की सेटिंग बेहतर सटीकता प्रदान करती है लेकिन धीमी प्रोसेसिंग करती है, जबकि 8 तेज़ और मानक परिणाम प्रदान करती है।",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.":"अपना खुद का प्रशिक्षण देते समय प्रीट्रेंड मॉडल का उपयोग करें। यह दृष्टिकोण प्रशिक्षण अवधि को कम करता है और समग्र गुणवत्ता को बढ़ाता है।",
+ "Clipping":"क्लिपिंग",
+ "Delay Seconds":"विलंब सेकंड",
+ "Overtraining Detector Settings":"ओवरट्रेनिंग डिटेक्टर सेटिंग्स",
+ "Overtraining Threshold":"ओवरट्रेनिंग थ्रेशोल्ड",
+ "Set the delay seconds.":"विलंब सेकंड सेट करें।",
+ "Apply delay to the audio.":"ऑडियो में विलंब लागू करें।",
+ "Extra":"अतिरिक्त",
+ "Enter dataset path":"डेटासेट पथ दर्ज करें",
+ "Compressor Release ms":"कंप्रेसर रिलीज़ ms",
+ "Settings":"सेटिंग्स",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.":"यदि कोई सुधार नहीं पाया जाता है तो आप अपने मॉडल को प्रशिक्षण बंद करने के लिए अधिकतम युगों की संख्या निर्धारित करें।",
+ "Set the compressor release ms.":"कंप्रेसर रिलीज़ ms सेट करें।",
+ "Delay":"विलंब",
+ "Model Name":"मॉडल का नाम",
+ "Upload .bin":".bin अपलोड करें",
+ "Download":"डाउनलोड",
+ "Fresh Training":"ताज़ा प्रशिक्षण",
+ "Processing":"प्रसंस्करण",
+ "Start Training":"प्रशिक्षण शुरू करें",
+ "Folder Name":"फ़ोल्डर का नाम",
+ "It's recommended to deactivate this option if your dataset has already been processed.":"यदि आपका डेटासेट पहले ही संसाधित हो चुका है तो इस विकल्प को निष्क्रिय करने की अनुशंसा की जाती है।",
+ "Refresh embedders":"एम्बेडर रीफ़्रेश करें",
+ "Delay Mix":"विलंब मिश्रण",
+ "Generate Index":"इंडेक्स जनरेट करें",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.":"'अपलोड' बटन केवल Google colab के लिए है: निर्यात की गई फ़ाइलों को आपके Google डिस्क में ApplioExported फ़ोल्डर में अपलोड करता है।",
+ "Set the delay mix.":"विलंब मिश्रण सेट करें।",
+ "Report a Bug":"एक बग की रिपोर्ट करें",
+ "Export Model":"मॉडल निर्यात करें",
+ "Set the delay feedback.":"विलंब प्रतिक्रिया सेट करें।",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.":"यह सेटिंग केवल तभी सक्षम करें जब आप स्क्रैच से कोई नया मॉडल प्रशिक्षित कर रहे हों या प्रशिक्षण को पुनरारंभ कर रहे हों। पहले से जेनरेट किए गए सभी वज़न और टेंसरबोर्ड लॉग हटा देता है।",
+ "Model Information":"मॉडल जानकारी",
+ "Delay Feedback":"विलंब प्रतिक्रिया",
+ "Stop Training":"प्रशिक्षण बंद करो",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.":"मॉडल को प्रशिक्षण डेटा को बहुत अच्छी तरह से सीखने और नए डेटा के सामान्यीकरण की क्षमता खोने से रोकने के लिए ओवरट्रेनिंग का पता लगाएं।",
+ "Custom Embedder":"कस्टम एम्बेडर",
+ "Select Custom Embedder":"कस्टम एम्बेडर चुनें",
+ "Plugins":"प्लगइन्स",
+ "Unload Voice":"आवाज अनलोड करें",
+ "Select Audio":"ऑडियो चुनें",
+ "Set the distortion gain.":"विरूपण लाभ सेट करें।",
+ "Drag your plugin.zip to install it":"इसे स्थापित करने के लिए अपने plugin.zip को खींचें",
+ "Refresh":"रीफ़्रेश करें",
+ "Chorus":"कोरस",
+ "Precision":"परिशुद्धता",
+ "Set the chorus depth.":"कोरस गहराई सेट करें।",
+ "Apply chorus to the audio.":"ऑडियो पर कोरस लागू करें।",
+ "Single":"एकल",
+ "Chorus Center Delay ms":"कोरस सेंटर विलंब ms",
+ "Post-Process":"पोस्ट-प्रोसेस",
+ "Language":"भाषा",
+ "Chorus Depth":"कोरस गहराई",
+ "Select the precision you want to use for training and inference.":"वह परिशुद्धता चुनें जिसका आप प्रशिक्षण और अनुमान के लिए उपयोग करना चाहते हैं।",
+ "Index File":"इंडेक्स फ़ाइल",
+ "Set the chorus rate Hz.":"कोरस दर Hz सेट करें।",
+ "Exported Index file":"निर्यात की गई इंडेक्स फ़ाइल",
+ "Chorus Feedback":"कोरस प्रतिक्रिया",
+ "Update precision":"परिशुद्धता अद्यतन करें",
+ "Chorus Mix":"कोरस मिक्स",
+ "Select the voice model to use for the conversion.":"रूपांतरण के लिए उपयोग करने के लिए वॉइस मॉडल का चयन करें।",
+ "Exported Pth file":"निर्यात की गई Pth फ़ाइल",
+ "Select the theme you want to use. (Requires restarting Applio)":"वह थीम चुनें जिसका आप उपयोग करना चाहते हैं। (Applio को पुनरारंभ करने की आवश्यकता है)",
+ "Select the index file to use for the conversion.":"रूपांतरण के लिए उपयोग करने के लिए इंडेक्स फ़ाइल का चयन करें।",
+ "Theme":"थीम",
+ "Restart Applio":"Applio को पुनरारंभ करें",
+ "Set the chorus center delay ms.":"कोरस सेंटर विलंब ms सेट करें।",
+ "Select the pth file to be exported":"निर्यात की जाने वाली pth फ़ाइल का चयन करें",
+ "Set the chorus feedback.":"कोरस प्रतिक्रिया सेट करें।",
+ "Select the index file to be exported":"निर्यात की जाने वाली इंडेक्स फ़ाइल का चयन करें",
+ "Version Checker":"संस्करण चेकर",
+ "Plugin Installer":"प्लगइन इंस्टॉलर",
+ "Set the chorus mix.":"कोरस मिक्स सेट करें।",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.":"KMeans एक क्लस्टरिंग एल्गोरिथम है जो डेटासेट को K क्लस्टर में विभाजित करता है। यह सेटिंग विशेष रूप से बड़े डेटासेट के लिए उपयोगी है।",
+ "Upload":"अपलोड करें",
+ "Overtraining Detector":"ओवरट्रेनिंग डिटेक्टर",
+ "Chorus Rate Hz":"कोरस दर Hz",
+ "Check which version of Applio is the latest to see if you need to update.":"यह देखने के लिए जांचें कि Applio का कौन सा संस्करण नवीनतम है, यह देखने के लिए कि क्या आपको अपडेट करने की आवश्यकता है।",
+ "Upload Audio":"ऑडियो अपलोड करें",
+ "Select the language you want to use. (Requires restarting Applio)":"वह भाषा चुनें जिसका आप उपयोग करना चाहते हैं। (Applio को पुनरारंभ करने की आवश्यकता है)",
+ "Check for updates":"अपडेट के लिए जाँच करें",
+ "Apply distortion to the audio.":"ऑडियो पर विरूपण लागू करें।",
+ "Distortion Gain":"विरूपण लाभ",
+ "Post-process the audio to apply effects to the output.":"आउटपुट पर प्रभाव लागू करने के लिए ऑडियो को पोस्ट-प्रोसेस करें।",
+ "Voice Model":"वॉइस मॉडल",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.":"अपने अनुमानों पर एक सॉफ्ट ऑटोट्यून लागू करें, गायन रूपांतरणों के लिए अनुशंसित।",
+ "Select the audio to convert.":"रूपांतरित करने के लिए ऑडियो का चयन करें।",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.":"GPU की अनुपस्थिति के कारण प्रशिक्षण वर्तमान में असमर्थित है। प्रशिक्षण टैब को सक्रिय करने के लिए, सेटिंग टैब पर नेविगेट करें और 'नकली GPU' विकल्प को सक्षम करें।",
+ "Drag and drop your model here":"अपने मॉडल को यहां खींचें और छोड़ें",
+ "Upload a .txt file":"एक .txt फ़ाइल अपलोड करें",
+ "The output information will be displayed here.":"आउटपुट जानकारी यहां प्रदर्शित की जाएगी।",
+ "Introduce the model pth path":"मॉडल pth पथ का परिचय दें",
+ "Advanced Settings":"उन्नत सेटिंग्स",
+ "You can also use a custom path.":"आप एक कस्टम पथ का भी उपयोग कर सकते हैं।",
+ "Audio Analyzer":"ऑडियो विश्लेषक",
+ "Output Path for TTS Audio":"TTS ऑडियो के लिए आउटपुट पथ",
+ "Inference":"अनुमान",
+ "Clear Outputs (Deletes all audios in assets/audios)":"आउटपुट साफ़ करें (एसेट/ऑडियो में सभी ऑडियो हटा देता है)",
+ "Blend Ratio":"मिश्रण अनुपात",
+ "Custom Output Path":"कस्टम आउटपुट पथ",
+ "Enter text to synthesize":"संश्लेषण के लिए टेक्स्ट दर्ज करें",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.":"स्थिति को एक तरफ या दूसरी तरफ अधिक समायोजित करने से मॉडल पहले या दूसरे के समान हो जाएगा।",
+ "It will activate the possibility of displaying the current Applio activity in Discord.":"यह Discord में वर्तमान Applio गतिविधि को प्रदर्शित करने की संभावना को सक्रिय करेगा।",
+ "Enable fake GPU":"नकली GPU सक्षम करें",
+ "Upscale Audio":"ऑडियो अपस्केल करें",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.":"उपयोग में आसानी और प्रदर्शन पर केंद्रित एक सरल, उच्च-गुणवत्ता वाला वॉइस रूपांतरण उपकरण।\n[हिंदी अनुवाद: एनेस](https://discord.com/users/1140031358006202468)",
+ "Output Path":"आउटपुट पथ",
+ "Fusion":"फ्यूजन",
+ "Inroduce the model information":"मॉडल जानकारी का परिचय दें",
+ "It will activate the possibility of downloading models with a click from the website.":"यह वेबसाइट से एक क्लिक से मॉडल डाउनलोड करने की संभावना को सक्रिय करेगा।",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)":"ट्रेन टैब को सक्रिय करता है। हालाँकि, कृपया ध्यान दें कि इस डिवाइस में GPU क्षमताएं नहीं हैं, इसलिए प्रशिक्षण समर्थित नहीं है। यह विकल्प केवल परीक्षण उद्देश्यों के लिए है। (यह विकल्प Applio को पुनरारंभ करेगा)",
+ "Autotune":"ऑटोट्यून",
+ "Training":"प्रशिक्षण",
+ "Export Format":"निर्यात प्रारूप",
+ "Enter the text to synthesize.":"संश्लेषण के लिए टेक्स्ट दर्ज करें।",
+ "Path to Model":"मॉडल का पथ",
+ "Text to Synthesize":"संश्लेषण के लिए टेक्स्ट",
+ "Select the format to export the audio.":"ऑडियो निर्यात करने के लिए प्रारूप का चयन करें।",
+ "View model information":"मॉडल जानकारी देखें",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.":"शोर का पता लगाने वाले एल्गोरिदम का उपयोग करके अपने ऑडियो आउटपुट को साफ करें, बोलने वाले ऑडियो के लिए अनुशंसित।",
+ "Clean Audio":"ऑडियो साफ़ करें",
+ "Select the TTS voice to use for the conversion.":"रूपांतरण के लिए उपयोग करने के लिए TTS वॉइस का चयन करें।",
+ "Output Path for RVC Audio":"RVC ऑडियो के लिए आउटपुट पथ",
+ "Enter path to model":"मॉडल का पथ दर्ज करें",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav":"वह पथ जहां आउटपुट ऑडियो सहेजा जाएगा, डिफ़ॉल्ट रूप से एसेट/ऑडियो/आउटपुट.wav में",
+ "Model conversion":"मॉडल रूपांतरण",
+ "Clean Strength":"साफ ताकत",
+ "This section contains some extra utilities that often may be in experimental phases.":"इस खंड में कुछ अतिरिक्त उपयोगिताएँ हैं जो अक्सर प्रायोगिक चरणों में हो सकती हैं।",
+ "Output Information":"आउटपुट जानकारी",
+ "Input path for text file":"टेक्स्ट फ़ाइल के लिए इनपुट पथ",
+ "Split Audio":"ऑडियो विभाजित करें",
+ "Enable Applio integration with applio.org/models using flask":"फ्लास्क का उपयोग करके applio.org/मॉडल के साथ Applio एकीकरण सक्षम करें",
+ "Pth file":"Pth फ़ाइल",
+ "The information to be placed in the model (You can leave it blank or put anything).":"मॉडल में रखी जाने वाली जानकारी (आप इसे खाली छोड़ सकते हैं या कुछ भी डाल सकते हैं)।",
+ "The path to the text file that contains content for text to speech.":"टेक्स्ट फ़ाइल का पथ जिसमें टेक्स्ट टू स्पीच की सामग्री है।",
+ "View":"देखें",
+ "Split the audio into chunks for inference to obtain better results in some cases.":"कुछ मामलों में बेहतर परिणाम प्राप्त करने के लिए अनुमान के लिए ऑडियो को टुकड़ों में विभाजित करें।",
+ "Model information to be placed":"रखी जाने वाली मॉडल जानकारी",
+ "Merge Audios":"ऑडियो मर्ज करें",
+ "Enable Applio integration with Discord presence":"Discord उपस्थिति के साथ Applio एकीकरण सक्षम करें",
+ "Model extraction":"मॉडल निष्कर्षण",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.":"अपनी .pth फ़ाइल और .index फ़ाइल को इस स्थान पर खींचें। एक को खींचें और फिर दूसरे को।",
+ "Download Model":"मॉडल डाउनलोड करें",
+ "## Drop files":"## फ़ाइलें छोड़ें",
+ "Introduce the model name to search.":"खोज करने के लिए मॉडल का नाम दर्ज करें।",
+ "Dataset Creator":"डेटासेट निर्माता",
+ "Increase or decrease TTS speed.":"TTS गति बढ़ाएँ या घटाएँ।",
+ "## Search Model":"## मॉडल खोजें",
+ "TTS Speed":"TTS गति",
+ "TTS Voices":"TTS आवाज़ें",
+ "And select the sampling rate":"और नमूना दर का चयन करें",
+ "## Download Pretrained Models":"## प्रीट्रेंड मॉडल डाउनलोड करें",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.":"ऑडियो फ़ाइल को डेटासेट में सफलतापूर्वक जोड़ दिया गया है। कृपया प्रीप्रोसेस बटन पर क्लिक करें।",
+ "Search":"खोजें",
+ "Introduce the model link":"मॉडल लिंक का परिचय दें",
+ "Model Architecture":"मॉडल आर्किटेक्चर",
+ "Model Link":"मॉडल लिंक",
+ "Select the pretrained model you want to download.":"वह प्रीट्रेंड मॉडल चुनें जिसे आप डाउनलोड करना चाहते हैं।",
+ "We couldn't find models by that name.":"हमें उस नाम से कोई मॉडल नहीं मिला।",
+ "Set the width of the reverb.":"रिवर्ब की चौड़ाई सेट करें।",
+ "Protect Voiceless Consonants":"ध्वनिरहित व्यंजन सुरक्षित रखें",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.":"इलेक्ट्रो-ध्वनिक फटने और अन्य कलाकृतियों को रोकने के लिए अलग-अलग व्यंजन और सांस लेने की आवाज़ को सुरक्षित रखें। पैरामीटर को उसके अधिकतम मान 0.5 पर खींचने से व्यापक सुरक्षा मिलती है। हालाँकि, इस मान को कम करने से सुरक्षा की सीमा कम हो सकती है जबकि संभावित रूप से अनुक्रमण प्रभाव कम हो सकता है।",
+ "Pitch extraction algorithm":"पिच निष्कर्षण एल्गोरिथम",
+ "Get information about the audio":"ऑडियो के बारे में जानकारी प्राप्त करें",
+ "Model Creator":"मॉडल निर्माता",
+ "## Voice Blender":"## वॉइस ब्लेंडर",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.":"ऑडियो रूपांतरण के लिए उपयोग करने के लिए पिच निष्कर्षण एल्गोरिथम। डिफ़ॉल्ट एल्गोरिथम rmvpe है, जो अधिकांश मामलों के लिए अनुशंसित है।",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.":"दो वॉइस मॉडल चुनें, अपना वांछित मिश्रण प्रतिशत सेट करें, और उन्हें पूरी तरह से नई आवाज में मिलाएं।",
+ "Upload .json":".json अपलोड करें",
+ "Voice Blender":"वॉइस ब्लेंडर",
+ "Move files to custom embedder folder":"फ़ाइलों को कस्टम एम्बेडर फ़ोल्डर में ले जाएं",
+ "Convert":"रूपांतरित करें",
+ "Enter output path":"आउटपुट पथ दर्ज करें",
+ "model information":"मॉडल जानकारी",
+ "Reverb":"रिवर्ब",
+ "Export Audio":"ऑडियो निर्यात करें",
+ "Apply reverb to the audio.":"ऑडियो पर रिवर्ब लागू करें।",
+ "Output Folder":"आउटपुट फ़ोल्डर",
+ "Speaker ID":"स्पीकर आईडी",
+ "Select the speaker ID to use for the conversion.":"रूपांतरण के लिए उपयोग करने के लिए स्पीकर आईडी का चयन करें।",
+ "Name of the model creator. (Default: Unknown)":"मॉडल निर्माता का नाम। (डिफ़ॉल्ट: अज्ञात)",
+ "Reverb Room Size":"रिवर्ब कक्ष आकार",
+ "Batch":"बैच",
+ "Set the dry gain of the reverb.":"रिवर्ब का ड्राई गेन सेट करें।",
+ "Pitch Shift":"पिच शिफ्ट",
+ "Reverb Damping":"रिवर्ब डंपिंग",
+ "Set the wet gain of the reverb.":"रिवर्ब का वेट गेन सेट करें।",
+ "Reverb Wet Gain":"रिवर्ब वेट गेन",
+ "Model Author Name":"मॉडल लेखक का नाम",
+ "Set the freeze mode of the reverb.":"रिवर्ब का फ्रीज मोड सेट करें।",
+ "Input Folder":"इनपुट फ़ोल्डर",
+ "Select the folder containing the audios to convert.":"रूपांतरित करने के लिए ऑडियो वाले फ़ोल्डर का चयन करें।",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.":"ऑटोट्यून ताकत सेट करें - जितना अधिक आप इसे बढ़ाएंगे उतना ही यह रंगीन ग्रिड पर स्नैप करेगा।",
+ "Reverb Freeze Mode":"रिवर्ब फ्रीज मोड",
+ "Reverb Width":"रिवर्ब चौड़ाई",
+ "Set the damping of the reverb.":"रिवर्ब का डंपिंग सेट करें।",
+ "Set the room size of the reverb.":"रिवर्ब के कमरे का आकार सेट करें।",
+ "Reverb Dry Gain":"रिवर्ब ड्राई गेन",
+ "The name that will appear in the model information.":"वह नाम जो मॉडल जानकारी में दिखाई देगा।",
+ "Set name":"नाम सेट करें",
+ "Enter input path":"इनपुट पथ दर्ज करें",
+ "Select the folder where the output audios will be saved.":"उस फ़ोल्डर का चयन करें जहां आउटपुट ऑडियो सहेजे जाएंगे।",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)":"ऑडियो को उच्च गुणवत्ता में अपस्केल करें, निम्न-गुणवत्ता वाले ऑडियो के लिए अनुशंसित। (ऑडियो को संसाधित करने में अधिक समय लग सकता है)",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.":"इंडेक्स फ़ाइल द्वारा लगाया गया प्रभाव; एक उच्च मान अधिक प्रभाव से मेल खाता है। हालाँकि, कम मानों का चयन करने से ऑडियो में मौजूद कलाकृतियों को कम करने में मदद मिल सकती है।",
+ "Preprocess":"प्रीप्रोसेस",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.":"अपने इच्छित ऑडियो पर क्लीन-अप स्तर सेट करें, जितना अधिक आप इसे बढ़ाएंगे उतना ही यह साफ होगा, लेकिन यह संभव है कि ऑडियो अधिक संपीड़ित हो।",
+ "Enter dataset name":"डेटासेट का नाम दर्ज करें",
+ "Audio cutting":"ऑडियो कटिंग",
+ "Formant Shifting":"फ़ॉर्मैंट शिफ्टिंग",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.":"आउटपुट के वॉल्यूम लिफाफे के साथ बदलें या ब्लेंड करें। अनुपात 1 के जितना करीब होगा, आउटपुट लिफाफा उतना ही अधिक नियोजित होगा।",
+ "Refresh Datasets":"डेटासेट रीफ़्रेश करें",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.":"फ़ॉर्मैंट शिफ्टिंग सक्षम करें। पुरुष से महिला और इसके विपरीत रूपांतरण के लिए उपयोग किया जाता है।",
+ "Search Feature Ratio":"खोज सुविधा अनुपात",
+ "Browse presets for formanting":"फ़ॉर्मेटिंग के लिए प्रीसेट ब्राउज़ करें",
+ "Presets are located in /assets/formant_shift folder":"प्रीसेट /एसेट/फ़ॉर्मैंट_शिफ्ट फ़ोल्डर में स्थित हैं",
+ "Dataset Name":"डेटासेट का नाम",
+ "Dataset Path":"डेटासेट पथ",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.":"यदि संख्या तीन या तीन से अधिक है, तो एकत्रित स्वर परिणामों पर माध्यिका फ़िल्टरिंग का उपयोग करने से श्वसन कम होने की संभावना है।",
+ "Process effects":"प्रभाव संसाधित करें",
+ "Default value is 1.0":"डिफ़ॉल्ट मान 1.0 है",
+ "Quefrency for formant shifting":"फ़ॉर्मैंट शिफ्टिंग के लिए क्वेफ़्रेंसी",
+ "Volume Envelope":"वॉल्यूम लिफाफा",
+ "Timbre for formant shifting":"फ़ॉर्मैंट शिफ्टिंग के लिए समय",
+ "Filter Radius":"फ़िल्टर त्रिज्या",
+ "Pitch":"पिच",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.":"ऑडियो की पिच सेट करें, मान जितना अधिक होगा, पिच उतनी ही अधिक होगी।",
+ "Name of the new model.":"नए मॉडल का नाम।",
+ "Stop Recording":"रिकॉर्डिंग बंद करो",
+ "## Download Model":"## मॉडल डाउनलोड करें",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.":"f0 वक्र समय के साथ आवाज की आधार आवृत्ति में बदलाव का प्रतिनिधित्व करता है, यह दर्शाता है कि पिच कैसे ऊपर और नीचे जाती है।",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.":"1. आपके सामने आ रही समस्या को रिकॉर्ड करना शुरू करने के लिए नीचे दिए गए 'रिकॉर्ड स्क्रीन' बटन पर क्लिक करें।",
+ "# How to Report an Issue on GitHub":"# GitHub पर कोई समस्या कैसे रिपोर्ट करें",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.":"3. [GitHub Issues](https://github.com/IAHispano/Applio/issues) पर जाएं और 'नया मुद्दा' बटन पर क्लिक करें।",
+ "Record Screen":"स्क्रीन रिकॉर्ड करें",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).":"2. एक बार जब आप समस्या को रिकॉर्ड करना समाप्त कर लेते हैं, तो 'रिकॉर्डिंग बंद करो' बटन पर क्लिक करें (वही बटन, लेकिन लेबल इस पर निर्भर करता है कि आप सक्रिय रूप से रिकॉर्डिंग कर रहे हैं या नहीं)।",
+ "See Model Information":"मॉडल जानकारी देखें",
+ "Output of the pth file":"pth फ़ाइल का आउटपुट",
+ "Extract F0 Curve":"F0 वक्र निकालें",
+ "Record":"रिकॉर्ड",
+ "Introduce the model .pth path":"मॉडल .pth पथ का परिचय दें",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.":"4. प्रदान किए गए समस्या टेम्पलेट को पूरा करें, आवश्यकतानुसार विवरण शामिल करना सुनिश्चित करें, और पिछले चरण से रिकॉर्ड की गई फ़ाइल अपलोड करने के लिए एसेट अनुभाग का उपयोग करें।",
+ "Name of the new dataset.":"नए डेटासेट का नाम।",
+ "Upload Audio Dataset":"ऑडियो डेटासेट अपलोड करें",
+ "Sampling Rate":"नमूना दर",
+ "Version of the model architecture.":"मॉडल आर्किटेक्चर का संस्करण।",
+ "Path to the dataset folder.":"डेटासेट फ़ोल्डर का पथ।",
+ "Enter model name":"मॉडल का नाम दर्ज करें",
+ "The sampling rate of the audio files.":"ऑडियो फ़ाइलों की नमूना दर।"
+}
diff --git a/assets/i18n/languages/hr_HR.json b/assets/i18n/languages/hr_HR.json
new file mode 100644
index 0000000000000000000000000000000000000000..3b567f1e3caabb0c91918c98270e875ca9419019
--- /dev/null
+++ b/assets/i18n/languages/hr_HR.json
@@ -0,0 +1,325 @@
+{
+ "Extra": "Ekstra",
+ "Processing": "Prerada",
+ "Training": "Obuka",
+ "Output Information": "Izlazne informacije",
+ "The output information will be displayed here.": "Ovdje će se prikazati izlazne informacije.",
+ "Audio Analyzer": "Audio analizator",
+ "Settings": "Postavkama",
+ "Merge Audios": "Spajanje audio zapisa",
+ "Download": "Preuzimanje",
+ "Plugins": "Dodaci",
+ "Inference": "Zaključak",
+ "This section contains some extra utilities that often may be in experimental phases.": "Ovaj odjeljak sadrži neke dodatne uslužne programe koji često mogu biti u eksperimentalnoj fazi.",
+ "Report a Bug": "Prijavite grešku",
+ "Preprocess": "Prethodna obrada",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "Jednostavan, visokokvalitetan alat za pretvorbu glasa usmjeren na jednostavnost korištenja i izvedbu.",
+ "Model Information": "Podaci o modelu",
+ "Audio cutting": "Rezanje zvuka",
+ "Model Name": "Naziv modela",
+ "Process effects": "Učinci procesa",
+ "Enter model name": "Unesite naziv modela",
+ "Name of the new model.": "Naziv novog modela.",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "Preporučuje se deaktivirati ovu mogućnost ako je vaš skup podataka već obrađen.",
+ "Dataset Path": "Put skupa podataka",
+ "Refresh Datasets": "Osvježavanje skupova podataka",
+ "Path to the dataset folder.": "Put do mape skupa podataka.",
+ "Dataset Creator": "Kreator skupa podataka",
+ "Enter dataset name": "Unesite naziv skupa podataka",
+ "Dataset Name": "Naziv skupa podataka",
+ "Upload Audio Dataset": "Prijenos skupa podataka zvuka",
+ "Name of the new dataset.": "Naziv novog skupa podataka.",
+ "Enter dataset path": "Unos puta skupa podataka",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Audiodatoteka je uspješno dodana u skup podataka. Kliknite gumb za predobradu.",
+ "Sampling Rate": "Brzina uzorkovanja",
+ "Model Architecture": "Arhitektura modela",
+ "Extract": "Izvaditi",
+ "Version of the model architecture.": "Verzija arhitekture modela.",
+ "Embedder Model": "Model ugradnje",
+ "Preprocess Dataset": "Skup podataka prije obrade",
+ "Hop Length": "Duljina hmelja",
+ "Model used for learning speaker embedding.": "Model koji se koristi za učenje ugradnje zvučnika.",
+ "Save Every Epoch": "Spasite svaku epohu",
+ "Batch Size": "Veličina serije",
+ "The sampling rate of the audio files.": "Brzina uzorkovanja audio datoteka.",
+ "Determine at how many epochs the model will saved at.": "Odredite u koliko će epoha model biti spreman.",
+ "Specifies the overall quantity of epochs for the model training process.": "Određuje ukupnu količinu epoha za proces obuke modela.",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Označava trajanje potrebno da sustav prijeđe na značajnu promjenu visine tona. Manje duljine skoka zahtijevaju više vremena za zaključivanje, ali obično daju veću točnost visine.",
+ "Save Only Latest": "Spremi samo najnovije",
+ "Pretrained": "Unaprijed obučeni",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Preporučljivo je uskladiti ga s dostupnim VRAM-om vašeg GPU-a. Postavka 4 nudi poboljšanu točnost, ali sporiju obradu, dok 8 daje brže i standardnije rezultate.",
+ "Total Epoch": "Ukupna epoha",
+ "Save Every Weights": "Uštedite svaku težinu",
+ "Custom Pretrained": "Prilagođeno unaprijed obučeno",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Ova postavka omogućuje vam spremanje težine modela na kraju svake epohe.",
+ "Upload Pretrained Model": "Prijenos unaprijed obučenog modela",
+ "Pretrained Custom Settings": "Unaprijed obučene prilagođene postavke",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Omogućavanje ove postavke rezultirat će time da datoteke G i D spremaju samo svoje najnovije verzije, čime se učinkovito štedi prostor za pohranu.",
+ "The file you dropped is not a valid pretrained file. Please try again.": "Datoteka koju ste ispustili nije valjana unaprijed obučena datoteka. Pokušajte ponovno.",
+ "Refresh Custom Pretraineds": "Osvježavanje prilagođenih unaprijed obučenih",
+ "Pretrained D Path": "Prilagođeni unaprijed obučeni D",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Kliknite gumb za osvježavanje da biste vidjeli unaprijed obučenu datoteku na padajućem izborniku.",
+ "Pretrained G Path": "Prilagođeni unaprijed obučeni G",
+ "GPU Settings": "Postavke GPU-a",
+ "GPU Custom Settings": "Prilagođene postavke GPU-a",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Korištenje prilagođenih unaprijed obučenih modela može dovesti do vrhunskih rezultata, jer odabir najprikladnijih unaprijed obučenih modela prilagođenih specifičnom slučaju upotrebe može značajno poboljšati performanse.",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Postavlja napredne postavke GPU-a, preporučuje se korisnicima s boljom GPU arhitekturom.",
+ "GPU Number": "GPU broj",
+ "0 to ∞ separated by -": "0 do ∞ odvojeno s -",
+ "GPU Information": "Informacije o GPU-u",
+ "The GPU information will be displayed here.": "Ovdje će se prikazati podaci o GPU-u.",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Navedite broj GPU-ova koje želite koristiti za predobradu tako da ih unesete odvojene crticama (-). Trenutno korištenje multi-gpu-a neće imati značajan učinak.",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Navedite broj GPU-ova koje želite koristiti za izdvajanje tako da ih unesete odvojene crticama (-).",
+ "Pitch Guidance": "Smjernice za nagib",
+ "Use CPU": "Koristite CPU",
+ "Force the use of CPU for training.": "Prisilno korištenje CPU-a za obuku.",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "Broj CPU jezgri koje će se koristiti u procesu ekstrakcije. Zadana postavka su jezgre vašeg CPU-a, što se preporučuje u većini slučajeva.",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "Broj CPU jezgri koje će se koristiti u predprocesu. Zadana postavka su jezgre vašeg CPU-a, što se preporučuje u većini slučajeva.",
+ "Extract Features": "Značajke izdvajanja",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Koristite unaprijed obučene modele kada trenirate vlastite. Ovaj pristup smanjuje trajanje treninga i poboljšava ukupnu kvalitetu.",
+ "Cache Dataset in GPU": "Skup podataka predmemorije u GPU-u",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Korištenjem navođenja visine tona, postaje izvedivo zrcaliti intonaciju izvornog glasa, uključujući njegovu visinu. Ova je značajka posebno vrijedna za pjevanje i druge scenarije u kojima je očuvanje izvorne melodije ili uzorka visine tona bitno.",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Prioritet nam je pokretanje ekstrakcije modela na GPU-u za brže performanse. Ako više volite koristiti CPU, jednostavno ostavite polje GPU-a prazno.",
+ "Cache the dataset in GPU memory to speed up the training process.": "Predmemorirajte skup podataka u GPU memoriju kako biste ubrzali proces obuke.",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Prioritet nam je pokretanje predobrade modela na GPU-u za brže performanse. Ako više volite koristiti CPU, jednostavno ostavite polje GPU-a prazno.",
+ "Index Algorithm": "Algoritam indeksa",
+ "Overtraining Detector": "Detektor pretreniranosti",
+ "Overtraining Detector Settings": "Postavke detektora pretreniranosti",
+ "Overtraining Threshold": "Prag pretreniranosti",
+ "Fresh Training": "Svježi trening",
+ "Stop Training": "Prestanite trenirati",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans je algoritam klasteriranja koji dijeli skup podataka u K klastera. Ova je postavka posebno korisna za velike skupove podataka.",
+ "Start Training": "Započnite trening",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Otkrijte prekomjerno treniranje kako biste spriječili model da previše dobro nauči podatke za obuku i izgubi mogućnost generalizacije na nove podatke.",
+ "Generate Index": "Generiraj indeks",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Postavite maksimalan broj epoha u kojima želite da vaš model prestane trenirati ako se ne otkrije poboljšanje.",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "Omogućite ovu postavku samo ako trenirate novi model od nule ili ponovno pokrećete vježbanje. Briše sve prethodno generirane utege i zapisnike tensorboarda.",
+ "Export Model": "Model izvoza",
+ "Upload": "Otpremanje",
+ "Exported Pth file": "Izvezena Pth datoteka",
+ "Exported Index file": "Izvezena datoteka indeksa",
+ "Select the index file to be exported": "Odaberite datoteku indeksa za izvoz",
+ "Select the pth file to be exported": "Odaberite pth datoteku za izvoz",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "Gumb \"Prijenos\" namijenjen je samo Google colabu: prenosi izvezene datoteke u mapu ApplioExported na vašem Google disku.",
+ "Index File": "Indeksna datoteka",
+ "Refresh": "Osvježiti",
+ "Select the voice model to use for the conversion.": "Odaberite glasovni model koji želite koristiti za pretvorbu.",
+ "Upload Audio": "Prijenos zvuka",
+ "Unload Voice": "Istovarite glas",
+ "Select Audio": "Odaberite Audio",
+ "Select the audio to convert.": "Odaberite zvuk za pretvaranje.",
+ "Advanced Settings": "Napredne postavke",
+ "Voice Model": "Glasovni model",
+ "Custom Output Path": "Prilagođeni izlazni put",
+ "Output Path": "Izlazni put",
+ "Export Format": "Format izvoza",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Clear Outputs (briše sve audio zapise u resursima/audiozapisima)",
+ "Select the index file to use for the conversion.": "Odaberite datoteku indeksa koju želite upotrijebiti za pretvorbu.",
+ "Split Audio": "Podijeljeni zvuk",
+ "Select the format to export the audio.": "Odaberite format za izvoz zvuka.",
+ "Autotune": "Automatsko podešavanje",
+ "Clean Audio": "Čist zvuk",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "Put na koji će se spremati izlazni zvuk, prema zadanim postavkama u assets/audios/output.wav",
+ "Clean Strength": "Čista snaga",
+ "Upscale Audio": "Vrhunski zvuk",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Podijelite zvuk na dijelove radi zaključivanja kako biste dobili bolje rezultate u nekim slučajevima.",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Primijenite meko automatsko podešavanje na svoje zaključke, preporučeno za pretvorbe pjevanja.",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Očistite svoj audio izlaz pomoću algoritama za otkrivanje buke, koji se preporučuju za govorne zvukove.",
+ "Formant Shifting": "Promjena formanta",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Povećajte kvalitetu zvuka, preporučuje se za zvuk niske kvalitete. (Obrada zvuka mogla bi potrajati dulje)",
+ "Browse presets for formanting": "Pregledajte unaprijed postavljene postavke za oblikovanje",
+ "Default value is 1.0": "Zadana vrijednost je 1,0",
+ "Pitch": "Baciti",
+ "Quefrency for formant shifting": "Quefrency za premještanje formanta",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Postavite razinu čišćenja na zvuk koji želite, što ga više povećate, to će se više očistiti, ali moguće je da će zvuk biti komprimiraniji.",
+ "Timbre for formant shifting": "Boja za pomicanje formanta",
+ "Filter Radius": "Radijus filtra",
+ "Presets are located in /assets/formant_shift folder": "Unaprijed postavljene postavke nalaze se u mapi /assets/formant_shift",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Omogućite premještanje formanata. Koristi se za konverzije muškaraca u žene i obrnuto.",
+ "Search Feature Ratio": "Omjer značajki pretraživanja",
+ "Volume Envelope": "Omotnica volumena",
+ "Protect Voiceless Consonants": "Zaštita bezvučnih suglasnika",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Ako je broj veći ili jednak tri, korištenje srednjeg filtriranja na prikupljenim rezultatima tona može smanjiti disanje.",
+ "Convert": "Pretvoriti",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Utjecaj indeksne datoteke; Viša vrijednost odgovara većem utjecaju. Međutim, odabir nižih vrijednosti može pomoći u ublažavanju artefakata prisutnih u zvuku.",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Postavite visinu zvuka, što je veća vrijednost, to je viša visina.",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Zamijenite ili pomiješajte s omotnicom glasnoće izlaza. Što je omjer bliži 1, to se više koristi izlazna omotnica.",
+ "Pitch extraction algorithm": "Algoritam za ekstrakciju koraka",
+ "Single": "Neoženjen",
+ "Batch": "Gomila",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Zaštitite različite suglasnike i zvukove disanja kako biste spriječili elektroakustično kidanje i druge artefakte. Povlačenje parametra na maksimalnu vrijednost od 0,5 nudi sveobuhvatnu zaštitu. Međutim, smanjenje ove vrijednosti može smanjiti opseg zaštite, a istovremeno potencijalno ublažiti učinak indeksiranja.",
+ "Input Folder": "Mapa za unos",
+ "Export Audio": "Izvoz zvuka",
+ "Select the folder containing the audios to convert.": "Odaberite mapu koja sadrži audiozapise za pretvaranje.",
+ "Enter input path": "Unesite put unosa",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Algoritam za izdvajanje visine tona koji se koristi za pretvorbu zvuka. Zadani algoritam je rmvpe, koji se preporučuje za većinu slučajeva.",
+ "Output Folder": "Izlazna mapa",
+ "Enter output path": "Unesite izlazni put",
+ "Get information about the audio": "Učitavanje informacija o zvuku",
+ "Voice Blender": "Glasovni mikser",
+ "## Voice Blender": "## Glasovni mikser",
+ "Fusion": "Topljenje",
+ "Drag and drop your model here": "Ovdje povucite i ispustite svoj model",
+ "Select the folder where the output audios will be saved.": "Odaberite mapu u koju će se spremati izlazni audiozapisi.",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Odaberite dva modela glasa, postavite željeni postotak miješanja i stapajte ih u potpuno novi glas.",
+ "Path to Model": "Put do modela",
+ "Blend Ratio": "Omjer mješavine",
+ "Enter path to model": "Unos puta do modela",
+ "You can also use a custom path.": "Također možete koristiti prilagođeni put.",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Prilagođavanje položaja više prema jednoj ili drugoj strani učinit će model sličnijim prvom ili drugom.",
+ "View": "Pogled",
+ "The information to be placed in the model (You can leave it blank or put anything).": "Podaci koji se stavljaju u model (Možete ga ostaviti prazno ili staviti bilo što).",
+ "Introduce the model pth path": "Uvedite model pth putanje",
+ "View model information": "Prikaz informacija o modelu",
+ "Model extraction": "Ekstrakcija modela",
+ "Model conversion": "Pretvorba modela",
+ "Pth file": "Pth datoteka",
+ "Output of the pth file": "Izlaz pth datoteke",
+ "Extract F0 Curve": "Izdvojite krivulju F0",
+ "# How to Report an Issue on GitHub": "# Kako prijaviti problem na GitHubu",
+ "Record": "Zapis",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "Krivulja f0 predstavlja varijacije u osnovnoj frekvenciji glasa tijekom vremena, pokazujući kako visina visine raste i pada.",
+ "Record Screen": "Zaslon za snimanje",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Kliknite na gumb 'Snimi zaslon' u nastavku kako biste započeli snimanje problema s kojim se susrećete.",
+ "See Model Information": "Pogledajte informacije o modelu",
+ "Introduce the model .pth path": "Uvedite .pth put modela",
+ "Stop Recording": "Zaustavite snimanje",
+ "## Download Model": "## Preuzmite model",
+ "Model Link": "Poveznica modela",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Nakon što završite sa snimanjem problema, kliknite na gumb 'Zaustavi snimanje' (isti gumb, ali oznaka se mijenja ovisno o tome snimate li aktivno ili ne).",
+ "Introduce the model link": "Predstavljanje veze modela",
+ "Download Model": "Preuzmite model",
+ "Search": "Pretraživanje",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Povucite .pth datoteku i .index datoteku u ovaj prostor. Povucite jedno, a zatim drugo.",
+ "Introduce the model name to search.": "Unesite naziv modela za pretraživanje.",
+ "And select the sampling rate": "I odaberite brzinu uzorkovanja.",
+ "## Download Pretrained Models": "## Preuzmite unaprijed obučene modele",
+ "Select the pretrained model you want to download.": "Odaberite unaprijed obučeni model koji želite preuzeti.",
+ "TTS Speed": "TTS brzina",
+ "TTS Voices": "TTS glasovi",
+ "## Drop files": "## Ispustite datoteke",
+ "Increase or decrease TTS speed.": "Povećajte ili smanjite brzinu TTS-a.",
+ "Text to Synthesize": "Tekst za sintezu",
+ "Model information to be placed": "Informacije o modelu koje treba postaviti",
+ "Select the TTS voice to use for the conversion.": "Odaberite glas TTS-a koji želite upotrijebiti za pretvorbu.",
+ "Inroduce the model information": "Unesite podatke o modelu",
+ "Input path for text file": "Put za unos za tekstualnu datoteku",
+ "Enter the text to synthesize.": "Unesite tekst za sintezu.",
+ "Output Path for TTS Audio": "Izlazna putanja za TTS zvuk",
+ "Upload a .txt file": "Prijenos .txt datoteke",
+ "The path to the text file that contains content for text to speech.": "Put do tekstne datoteke koja sadrži sadržaj za pretvaranje teksta u govor.",
+ "Enter text to synthesize": "Unos teksta za sintezu",
+ "Output Path for RVC Audio": "Izlazni put za RVC audio",
+ "Enable Applio integration with Discord presence": "Omogućite Applio integraciju s Discord prisutnošću",
+ "Enable fake GPU": "Omogućite lažni GPU",
+ "Language": "Jezik",
+ "Enable Applio integration with applio.org/models using flask": "Omogućite Applio integraciju s applio.org/models pomoću tikvice",
+ "Theme": "Tema",
+ "It will activate the possibility of downloading models with a click from the website.": "Aktivirat će mogućnost preuzimanja modela jednim klikom s web stranice.",
+ "Restart Applio": "Ponovno pokrenite aplikaciju",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "Aktivirat će mogućnost prikaza trenutne Applio aktivnosti u Discordu.",
+ "Select the theme you want to use. (Requires restarting Applio)": "Odaberite temu koju želite koristiti. (Zahtijeva ponovno pokretanje Applia)",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Aktivira karticu vlaka. Međutim, imajte na umu da ovom uređaju nedostaju GPU mogućnosti, stoga obuka nije podržana. Ova je opcija samo u svrhu testiranja. (Ova opcija će ponovno pokrenuti Applio)",
+ "Precision": "Preciznost",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "Obuka trenutno nije podržana zbog nedostatka GPU-a. Da biste aktivirali karticu za obuku, idite na karticu postavki i omogućite opciju 'Lažni GPU'.",
+ "Select the language you want to use. (Requires restarting Applio)": "Odaberite jezik koji želite koristiti. (Zahtijeva ponovno pokretanje Applia)",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Dovršite priloženi predložak problema, pazeći da po potrebi uključite detalje i upotrijebite odjeljak imovine za prijenos snimljene datoteke iz prethodnog koraka.",
+ "Update precision": "Preciznost ažuriranja",
+ "Plugin Installer": "Instalacijski program dodataka",
+ "Reverb": "Reverb",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Idite na [GitHub Issues](https://github.com/IAHispano/Applio/issues) i kliknite na gumb 'Novi problem'.",
+ "Post-Process": "Naknadni proces",
+ "Drag your plugin.zip to install it": "Povucite plugin.zip da biste ga instalirali",
+ "Version Checker": "Provjera verzija",
+ "Select the precision you want to use for training and inference.": "Odaberite preciznost koju želite koristiti za vježbanje i zaključivanje.",
+ "Check for updates": "Provjerite ima li ažuriranja",
+ "Apply reverb to the audio.": "Primijenite reverb na zvuk.",
+ "Check which version of Applio is the latest to see if you need to update.": "Provjerite koja je verzija Applia najnovija da biste vidjeli trebate li ažurirati.",
+ "Post-process the audio to apply effects to the output.": "Naknadno obradite zvuk kako biste primijenili efekte na izlaz.",
+ "Reverb Room Size": "Reverb Veličina sobe",
+ "Set the room size of the reverb.": "Postavite veličinu prostorije reverba.",
+ "## Search Model": "## Model pretraživanja",
+ "We couldn't find models by that name.": "Nismo mogli pronaći modele s tim imenom.",
+ "Reverb Damping": "Prigušivanje reverba",
+ "Reverb Wet Gain": "Reverb mokro pojačanje",
+ "Set the damping of the reverb.": "Postavite prigušenje reverba.",
+ "Reverb Width": "Širina odjeka",
+ "Set the dry gain of the reverb.": "Postavite suhi dobitak reverba.",
+ "Set the wet gain of the reverb.": "Postavite mokro pojačanje reverba.",
+ "Reverb Freeze Mode": "Način zamrzavanja reverba",
+ "Set the freeze mode of the reverb.": "Postavite način zamrzavanja reverba.",
+ "Set the width of the reverb.": "Postavite širinu reverba.",
+ "Pitch Shift": "Promjena visine tona",
+ "Reverb Dry Gain": "Reverb suhi dobitak",
+ "Pitch Shift Semitones": "Polutonovi pomaka visine tona",
+ "Apply pitch shift to the audio.": "Primijenite pomak visine na zvuk.",
+ "Limiter": "Limiter",
+ "Apply limiter to the audio.": "Primijenite limiter na zvuk.",
+ "Gain": "Dobiti",
+ "Set the pitch shift semitones.": "Postavite polutonove pomaka visine tona.",
+ "Set the limiter threshold dB.": "Postavite prag graničnika dB.",
+ "Distortion": "Izobličenje",
+ "Limiter Release Time": "Vrijeme otpuštanja limitera",
+ "Limiter Threshold dB": "Prag graničnika dB",
+ "Set the limiter release time.": "Postavite vrijeme otpuštanja limitera.",
+ "Gain dB": "Pojačanje dB",
+ "Chorus": "Hor",
+ "Set the gain dB.": "Podesite pojačanje dB.",
+ "Distortion Gain": "Pojačanje izobličenja",
+ "Apply gain to the audio.": "Primijenite pojačanje na zvuk.",
+ "Apply distortion to the audio.": "Primijenite izobličenje na zvuk.",
+ "Apply chorus to the audio.": "Primijenite refren na zvuk.",
+ "Set the distortion gain.": "Postavite pojačanje izobličenja.",
+ "Set the chorus rate Hz.": "Postavite brzinu refrena Hz.",
+ "Chorus Depth": "Dubina refrena",
+ "Set the chorus depth.": "Postavite dubinu refrena.",
+ "Chorus Mix": "Refren miks",
+ "Chorus Feedback": "Povratne informacije refrena",
+ "Chorus Center Delay ms": "Kašnjenje središta zbora ms",
+ "Set the chorus feedback.": "Postavite povratnu informaciju refrena.",
+ "Set the chorus mix.": "Postavite mješavinu refrena.",
+ "Set the chorus center delay ms.": "Postavite kašnjenje središta refrena ms.",
+ "Chorus Rate Hz": "Brzina refrena Hz",
+ "Clipping": "Clipping",
+ "Apply bitcrush to the audio.": "Primijenite bitcrush na zvuk.",
+ "Bitcrush Bit Depth": "Bitcrush Dubina bita",
+ "Bitcrush": "Bitcrush",
+ "Apply clipping to the audio.": "Primijenite isječke na zvuk.",
+ "Set the bitcrush bit depth.": "Postavite dubinu bitcrush bita.",
+ "Compressor": "Kompresor",
+ "Clipping Threshold": "Prag izrezivanja",
+ "Set the clipping threshold.": "Postavite prag izrezivanja.",
+ "Set the compressor threshold dB.": "Postavite prag kompresora dB.",
+ "Compressor Threshold dB": "Prag kompresora dB",
+ "Compressor Ratio": "Omjer kompresora",
+ "Set the compressor ratio.": "Postavite omjer kompresora.",
+ "Compressor Attack ms": "Napad kompresora ms",
+ "Delay": "Kašnjenje",
+ "Set the compressor attack ms.": "Postavite napad kompresora ms.",
+ "Compressor Release ms": "Otpuštanje kompresora ms",
+ "Apply compressor to the audio.": "Primijenite kompresor na zvuk.",
+ "Set the compressor release ms.": "Postavite ms za otpuštanje kompresora.",
+ "Delay Seconds": "Sekunde kašnjenja",
+ "Apply delay to the audio.": "Primijenite odgodu zvuka.",
+ "Delay Feedback": "Odgodite povratne informacije",
+ "Set the delay seconds.": "Postavite sekunde odgode.",
+ "Set the delay feedback.": "Postavite povratnu informaciju o odgodi.",
+ "Delay Mix": "Odgoda mješavine",
+ "Custom Embedder": "Prilagođeni ugradivač",
+ "Set the delay mix.": "Postavite odgodu mješavine.",
+ "Select Custom Embedder": "Odaberite Custom Embedder",
+ "Refresh embedders": "Osvježite ugrađivače",
+ "Upload .bin": "Prenesite .bin",
+ "Model Creator": "Kreator modela",
+ "Upload .json": "Prenesite .json",
+ "Move files to custom embedder folder": "Premještanje datoteka u prilagođenu mapu za ugradnju",
+ "model information": "Informacije o modelu",
+ "Name of the model creator. (Default: Unknown)": "Ime kreatora modela. (Zadano: Nepoznato)",
+ "Speaker ID": "ID govornika",
+ "Select the speaker ID to use for the conversion.": "Odaberite ID govornika koji želite upotrijebiti za pretvorbu.",
+ "Model Author Name": "Ime autora modela",
+ "Set name": "Postavi naziv",
+ "The name that will appear in the model information.": "Naziv koji će se pojaviti u informacijama o modelu.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "Postavite jačinu automatskog podešavanja - što je više povećate, to će se više pričvrstiti na kromatsku mrežu.",
+ "Folder Name": "Naziv mape"
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/ht_HT.json b/assets/i18n/languages/ht_HT.json
new file mode 100644
index 0000000000000000000000000000000000000000..d0e41a132279444e6532b5a9270b8f43e7c2d121
--- /dev/null
+++ b/assets/i18n/languages/ht_HT.json
@@ -0,0 +1,325 @@
+{
+ "Training": "Antrènman",
+ "Output Information": "Enfòmasyon pwodiksyon",
+ "Extra": "Siplemantè",
+ "Processing": "Tretman",
+ "Inference": "enferans",
+ "Merge Audios": "Mereng Audios",
+ "The output information will be displayed here.": "Enfòmasyon pwodiksyon an ap parèt isit la.",
+ "Audio Analyzer": "Audio Analyzer",
+ "Download": "Rale li",
+ "Model Information": "Enfòmasyon modèl",
+ "Preprocess": "Prepwoche",
+ "Report a Bug": "Rapòte yon ensèk",
+ "Plugins": "Grefon",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "Yon senp,-wo kalite zouti konvèsyon vwa konsantre sou fasilite nan itilize ak pèfòmans.",
+ "Settings": "Anviwònman",
+ "Audio cutting": "Koupe odyo",
+ "Model Name": "Non modèl",
+ "Enter model name": "Antre non modèl",
+ "This section contains some extra utilities that often may be in experimental phases.": "Seksyon sa a gen kèk sèvis piblik siplemantè ki souvan ka nan faz eksperimantal.",
+ "Dataset Path": "Datase Chemen",
+ "Process effects": "Efè Pwosesis",
+ "Name of the new model.": "Non nouvo modèl la.",
+ "Path to the dataset folder.": "Chemen nan katab la dataset.",
+ "Refresh Datasets": "Refresh Datasets",
+ "Dataset Name": "Dataset Name",
+ "Dataset Creator": "Dataset Creator",
+ "Enter dataset name": "Antre non dataset",
+ "Name of the new dataset.": "Non nouvo dataset la.",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "Li rekòmande pou dezaktive opsyon sa a si dataset ou te deja trete.",
+ "Enter dataset path": "Antre nan wòl dataset",
+ "Sampling Rate": "Pousantaj echantiyon",
+ "Model Architecture": "Modèl Achitekti",
+ "Embedder Model": "Embedder Modèl",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Dosye a odyo te avèk siksè te ajoute nan dataset la. Tanpri klike sou bouton an preprocess.",
+ "Extract": "Ekstrè",
+ "Version of the model architecture.": "Vèsyon nan achitekti modèl la.",
+ "Model used for learning speaker embedding.": "Modèl yo itilize pou aprann oratè entegre.",
+ "The sampling rate of the audio files.": "Pousantaj echantiyon an nan dosye yo odyo.",
+ "Preprocess Dataset": "Preprocess Dataset",
+ "Hop Length": "Èspwa Longè",
+ "Batch Size": "Gwosè pakèt",
+ "Save Every Epoch": "Sove chak epok",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Endike dire a li pran pou sistèm nan tranzisyon nan yon chanjman anplasman enpòtan. Longè espere mande pou plis tan pou enferans men yo gen tandans sede pi wo presizyon anplasman.",
+ "Total Epoch": "Total Epok",
+ "Determine at how many epochs the model will saved at.": "Detèmine nan konbyen epok modèl la pral sove nan.",
+ "Upload Audio Dataset": "Upload Audio Dataset",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Li rekòmande aliyen li ak VRAM ki disponib nan GPU ou. Yon anviwònman nan 4 ofri presizyon amelyore men pi dousman pwosesis, pandan y ap 8 bay pi vit ak rezilta estanda.",
+ "Save Only Latest": "Sove sèlman Dènye",
+ "Save Every Weights": "Sove tout pwa",
+ "Pretrained": "Brize",
+ "Custom Pretrained": "Koutim Prezante",
+ "Upload Pretrained Model": "Upload Pretrained Modèl",
+ "Specifies the overall quantity of epochs for the model training process.": "Espesifye kantite an jeneral nan epok pou pwosesis fòmasyon modèl la.",
+ "Refresh Custom Pretraineds": "Rafrechi Koutim Pretraineds",
+ "Pretrained Custom Settings": "Anviwònman koutim prevantif",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Anviwònman sa a pèmèt ou pou konsève pou pwa yo nan modèl la nan konklizyon an nan chak epok.",
+ "The file you dropped is not a valid pretrained file. Please try again.": "Dosye a ou tonpe se pa yon dosye ki valab prezante. Tanpri eseye ankò.",
+ "Pretrained G Path": "Koutim prezante G",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Pèmèt anviwònman sa a pral lakòz nan G la ak D dosye ekonomize sèlman vèsyon ki pi resan yo, efektivman konsève espas depo.",
+ "Pretrained D Path": "Koutim prezante D",
+ "GPU Number": "nimewo GPU",
+ "GPU Settings": "Anviwònman GPU",
+ "0 to ∞ separated by -": "0 a ∞ separe pa -",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Klike sou bouton an rafrechi yo wè dosye a twò prevansyon nan meni an gout.",
+ "GPU Custom Settings": "GPU anviwònman koutim",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Itilize modèl koutim prevantif ka mennen nan rezilta siperyè, kòm chwazi modèl yo ki pi apwopriye prevantif pwepare nan ka a itilize espesifik ka siyifikativman amelyore pèfòmans.",
+ "The GPU information will be displayed here.": "Enfòmasyon GPU a ap parèt isit la.",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Anviwònman GPU avanse GPU, rekòmande pou itilizatè yo ak pi bon achitekti GPU.",
+ "Pitch Guidance": "Gidans lanse",
+ "GPU Information": "Enfòmasyon sou GPU",
+ "Use CPU": "Sèvi ak CPU",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Espesifye kantite GPUs ou ta vle itilize pou preprocess pa antre nan yo separe pa hyphens (-). Nan moman sa a, lè l sèvi avèk milti-gpu pa pral gen yon efè enpòtan.",
+ "Force the use of CPU for training.": "Fòse itilize nan CPU pou fòmasyon.",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Espesifye kantite GPUs ou ta vle itilize pou ekstrè pa antre nan yo separe pa hyphens (-).",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "Nimewo a nan nwayo CPU yo itilize nan preprocess yo. Anviwònman an default yo se nwayo cpu ou, ki rekòmande pou pifò ka yo.",
+ "Extract Features": "Karakteristik ekstrè",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "Nimewo a nan cPU nwayo yo sèvi ak nan pwosesis ekstraksyon an. Anviwònman an default yo se nwayo cpu ou, ki rekòmande pou pifò ka yo.",
+ "Cache Dataset in GPU": "Cache Dataset in GPU",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Itilize modèl tris lè fòmasyon pwòp ou yo. Apwòch sa a diminye dire fòmasyon ak amelyore bon jan kalite an jeneral.",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Nou priyorite kouri ekstraksyon modèl la sou GPU a pou pèfòmans pi vit. Si ou prefere sèvi ak CPU a, tou senpleman kite jaden an GPU vid.",
+ "Index Algorithm": "Index Algorithm",
+ "Cache the dataset in GPU memory to speed up the training process.": "Cache dataset la nan memwa GPU pi vit pwosesis fòmasyon an.",
+ "Overtraining Detector": "Detektè estrawòdinè",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Nou priyorite kouri modèl la prepwograsyon sou GPU a pou pèfòmans pi vit. Si ou prefere sèvi ak CPU a, tou senpleman kite jaden an GPU vid.",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Pa anplwaye konsèy anplwaye, li vin posib pou glas entonasyon an nan vwa orijinal la, ki gen ladan anplasman li yo. Karakteristik sa a se patikilyèman enpòtan pou chante ak lòt senaryo kote prezève melodi orijinal la oswa modèl anplasman se esansyèl.",
+ "Fresh Training": "Fòmasyon fre",
+ "Overtraining Threshold": "Papòt depase",
+ "Start Training": "Kòmanse fòmasyon",
+ "Overtraining Detector Settings": "Anviwònman detektè detektè",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans se yon algorithm clustering ki divize dataset la nan grap K. Anviwònman sa a se patikilyèman itil pou gwo datasets.",
+ "Stop Training": "Sispann fòmasyon",
+ "Generate Index": "Jenere Endèks",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Mete kantite maksimòm epok ou vle modèl ou a sispann fòmasyon si pa gen okenn amelyorasyon detekte.",
+ "Export Model": "Ekspòtasyon Modèl",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "Pèmèt anviwònman sa a sèlman si w ap fòme yon nouvo modèl nan grate oswa rekòmanse fòmasyon an. Efase tout pwa deja pwodwi pwa ak mòso bwa tanpon.",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Detekte twòp pou anpeche modèl la nan aprann done fòmasyon yo twò byen epi pèdi kapasite nan jeneralize nan nouvo done.",
+ "Exported Pth file": "Ekspòte dosye Pyès",
+ "Exported Index file": "Ekspòte dosye endèks",
+ "Select the pth file to be exported": "Chwazi dosye a pth yo dwe ekspòte",
+ "Upload": "Upload",
+ "Select the index file to be exported": "Chwazi dosye a endèks yo dwe ekspòte",
+ "Index File": "Dosye endèks",
+ "Select the voice model to use for the conversion.": "Chwazi modèl la vwa yo sèvi ak pou konvèsyon an.",
+ "Voice Model": "Modèl Vwa",
+ "Single": "Sèl",
+ "Refresh": "Rafrechi",
+ "Select the index file to use for the conversion.": "Chwazi dosye a endèks yo sèvi ak pou konvèsyon an.",
+ "Unload Voice": "Vwa dechaje",
+ "Upload Audio": "Upload Audio",
+ "Select Audio": "Chwazi Odyo",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "Bouton an 'Upload' se sèlman pou google kolaborasyon: Uploads dosye yo ekspòte nan katab la ApplioExported nan google ou.",
+ "Select the audio to convert.": "Chwazi odyo a konvèti.",
+ "Advanced Settings": "Anviwònman avanse",
+ "Output Path": "Chemen Pwodiksyon",
+ "Export Format": "Fòma ekspòtasyon",
+ "Custom Output Path": "Chemen Pwodiksyon Koutim",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Clear Sòti (Efase tout odyo nan byen / audios)",
+ "Select the format to export the audio.": "Chwazi fòma a ekspòtasyon odyo a.",
+ "Split Audio": "Fann odyo",
+ "Autotune": "Ototòn",
+ "Clean Strength": "Fòs pwòp",
+ "Clean Audio": "Netwaye Odyo",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "Chemen kote pwodiksyon an ap sove, pa default nan byen / odyo / output.wav",
+ "Upscale Audio": "Upscale Audio",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Fann odyo a nan moso pou enferans jwenn pi bon rezilta nan kèk ka.",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Aplike yon ototòn mou nan enferans ou, rekòmande pou chante konvèsyon.",
+ "Formant Shifting": "Formant chanjman",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Netwaye pwodiksyon odyo ou lè l sèvi avèk algoritm deteksyon bri, rekòmande pou pale odyo.",
+ "Browse presets for formanting": "Browse prereglaj pou forman",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Pèmèt chanjman fòm. Itilize pou gason nan fi ak vis-versa konvèsyon.",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Upscale odyo a nan yon bon jan kalite ki pi wo, rekòmande pou odyo ki ba-bon jan kalite. (Li ta ka pran pi lontan nan pwosesis odyo a)",
+ "Quefrency for formant shifting": "Quefrency pou chanjman forman",
+ "Presets are located in /assets/formant_shift folder": "Evalye yo sitiye nan /byen/ formant_shift katab",
+ "Default value is 1.0": "Valè default se 1.0",
+ "Pitch": "anplasman",
+ "Timbre for formant shifting": "Timbre forman forman chanjman",
+ "Filter Radius": "Reyon filtre",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Mete nivo pwòp odyo a ou vle, plis la ou ogmante li plis la li pral netwaye, men li posib ke odyo a pral pi konprese.",
+ "Volume Envelope": "Anvlòp volim",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Mete anplasman an nan odyo a, ki pi wo a valè a, ki pi wo a anplasman an.",
+ "Protect Voiceless Consonants": "Pwoteje Konsòn Vwa",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Enfliyanse pa dosye endèks la; yon valè ki pi wo koresponn ak pi gwo enfliyans. Sepandan, chwazi pou pi ba valè yo ka ede bese atifisyèl prezan nan odyo a.",
+ "Convert": "Konvèti",
+ "Batch": "Pakèt",
+ "Export Audio": "Ekspòtasyon Odyo",
+ "Search Feature Ratio": "Rechèch Karakteristik Pousantaj",
+ "Pitch extraction algorithm": "Lanse algoritm ekstraksyon",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Ranplase oswa melanje ak anvlòp la volim nan pwodiksyon an. Pi pre rapò a se 1, anvlòp la pwodiksyon an se anvlòp la se anvlòp la.",
+ "Input Folder": "Katab enpème",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Si nimewo a pi gran pase oswa egal a twa, anplwaye medyàn filtraj sou rezilta yo ton ranmase gen potansyèl la diminye respirasyon.",
+ "Enter input path": "Antre nan chemen opinon",
+ "Select the folder containing the audios to convert.": "Chwazi katab la ki gen odyo yo konvèti.",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Lanse algoritm ekstraksyon yo itilize pou konvèsyon an odyo. Algorithm nan default se rmvpe, ki rekòmande pou pifò ka yo.",
+ "Output Folder": "Katab pwodiksyon",
+ "Select the folder where the output audios will be saved.": "Chwazi katab la kote pwodiksyon an odyo yo pral sove.",
+ "Enter output path": "Antre nan chemen pwodiksyon",
+ "Get information about the audio": "Jwenn enfòmasyon sou odyo a",
+ "Voice Blender": "Vwa Blender",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Pwoteje konsòn diferan ak respire son pou anpeche dlo elektwo-acoustic ak lòt atifisyèl. Rale paramèt la nan valè maksimòm li yo nan 0.5 ofri pwoteksyon konplè. Sepandan, diminye valè sa a ta ka diminye limit la nan pwoteksyon pandan y ap potansyèlman bese efè endèks la.",
+ "## Voice Blender": "## Voice Blender",
+ "Blend Ratio": "Melanje Pousantaj",
+ "You can also use a custom path.": "Ou kapab tou itilize yon chemen koutim.",
+ "Fusion": "Fizyon",
+ "Drag and drop your model here": "Trennen epi laje modèl ou isit la",
+ "Path to Model": "Chemen pou Modèl",
+ "Inroduce the model information": "Prezante enfòmasyon modèl la",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Chwazi de modèl vwa, mete pousantaj melanj ou vle, ak melanje yo nan yon vwa antyèman nouvo.",
+ "Model information to be placed": "Enfòmasyon modèl yo dwe mete",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Ajiste pozisyon an plis nan direksyon pou yon bò oswa lòt la ap fè modèl la pi sanble ak premye a oswa dezyèm.",
+ "View": "View",
+ "View model information": "View enfòmasyon modèl",
+ "Introduce the model pth path": "Prezante chemen modèl la",
+ "The information to be placed in the model (You can leave it blank or put anything).": "Enfòmasyon yo dwe mete nan modèl la (Ou ka kite li vid oswa mete anyen).",
+ "Model extraction": "Modèl ekstraksyon",
+ "Extract F0 Curve": "Ekstrè Koub F0",
+ "Model conversion": "Modèl konvèsyon",
+ "Enter path to model": "Antre nan chemen pou modèl",
+ "Pth file": "Dosye pyès",
+ "Output of the pth file": "Pwodiksyon nan dosye a pyès",
+ "Record": "Dosye",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "Koub la f0 reprezante varyasyon yo nan frekans nan baz yon vwa sou tan, ki montre ki jan lanse monte ak tonbe.",
+ "Record Screen": "Dosye ekran",
+ "Stop Recording": "Sispann anrejistreman",
+ "# How to Report an Issue on GitHub": "# Ki jan yo rapòte yon pwoblèm sou GitHub",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Ale nan [GitHub Pwoblèm](https://github.com/IAHispano/Applio/issues) epi klike sou bouton 'Nouvo Pwoblèm'.",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Klike sou bouton 'Dosye ekran' anba a yo kòmanse anrejistreman pwoblèm nan w ap fè eksperyans.",
+ "Introduce the model .pth path": "Prezante chemen modèl la .chemen an .chemen",
+ "## Download Model": "## Download Modèl",
+ "Introduce the model link": "Prezante lyen modèl la",
+ "See Model Information": "Gade Enfòmasyon modèl",
+ "## Drop files": "## Gout dosye",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Yon fwa ou te fini anrejistreman pwoblèm nan, klike sou bouton an 'Stop Anrejistreman' (bouton an menm, men chanjman yo etikèt depann sou si ou aktivman anrejistreman oswa ou pa).",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Ranpli modèl la bay pwoblèm, asire yo enkli detay jan sa nesesè, epi itilize seksyon yo byen yo Upload dosye a anrejistre nan etap la anvan yo.",
+ "Search": "Fouye",
+ "Download Model": "Download Modèl",
+ "## Search Model": "## Search Modèl",
+ "Introduce the model name to search.": "Prezante non modèl la pou fè rechèch.",
+ "We couldn't find models by that name.": "Nou pa t 'kapab jwenn modèl pa non sa a.",
+ "## Download Pretrained Models": "## Download Pretrained Modèl",
+ "And select the sampling rate": "Epi chwazi pousantaj echantiyon an.",
+ "TTS Speed": "TTS vitès",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Trennen dosye .pth ou ak .dosye endèks nan espas sa a. Trennen yon sèl ak Lè sa a, lòt la.",
+ "Increase or decrease TTS speed.": "Ogmantasyon oswa diminye vitès TTS.",
+ "Model Link": "Modèl Lyen",
+ "Select the pretrained model you want to download.": "Chwazi modèl la twò prevansyon ou vle download.",
+ "TTS Voices": "TTS Vwa",
+ "Upload a .txt file": "Upload yon dosye .txt",
+ "Text to Synthesize": "Tèks pou sentèz",
+ "Enter the text to synthesize.": "Antre nan tèks la pou sentèz.",
+ "Select the TTS voice to use for the conversion.": "Chwazi vwa TTS la pou itilize pou konvèsyon an.",
+ "Input path for text file": "Chemen enèji pou dosye tèks",
+ "Enter text to synthesize": "Antre nan tèks pou sentèz",
+ "Enable fake GPU": "Pèmèt GPU fo",
+ "Output Path for TTS Audio": "Chemen Sòti pou TTS Odyo",
+ "Output Path for RVC Audio": "Chemen Sòti pou RVC Odyo",
+ "The path to the text file that contains content for text to speech.": "Chemen an nan dosye a tèks ki gen kontni pou tèks diskou.",
+ "Language": "Lang",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "Li pral aktive posibilite pou montre aktivite aktyèl applio aktyèl la nan Dezakò.",
+ "Enable Applio integration with applio.org/models using flask": "Pèmèt Entegrasyon Applio ak applio.org/models lè l sèvi avèk flask",
+ "Restart Applio": "Rekòmanse Applio",
+ "Theme": "Tèm",
+ "Enable Applio integration with Discord presence": "Pèmèt entegrasyon Applio ak prezans Dekorasyon",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "Fòmasyon aktyèlman pa sipòte akòz absans la nan yon GPU. Pou aktive tab la fòmasyon, navige nan tab la anviwònman ak pèmèt opsyon nan 'Fo GPU'.",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Aktive tab tren an. Sepandan, tanpri sonje ke aparèy sa a manke kapasite GPU, kon sa fòmasyon pa sipòte. Opsyon sa a se sèlman pou rezon tès. (Opsyon sa a ap rekòmanse Applio)",
+ "Select the theme you want to use. (Requires restarting Applio)": "Chwazi tèm nan ou vle itilize. (Mande pou rekòmanse Applio)",
+ "Precision": "Presizyon",
+ "Select the language you want to use. (Requires restarting Applio)": "Chwazi lang ou vle itilize a. (Mande pou rekòmanse Applio)",
+ "Update precision": "Mizajou presizyon",
+ "Plugin Installer": "Plugin Installer",
+ "Select the precision you want to use for training and inference.": "Chwazi presizyon ou vle itilize pou fòmasyon ak enferans.",
+ "Version Checker": "Vèsyon Tcheke",
+ "Drag your plugin.zip to install it": "Trennen plugin.zip ou pou enstale li",
+ "Check for updates": "Tcheke pou dènye nouvèl yo",
+ "Post-Process": "Pwosesis pou restrenn",
+ "Apply reverb to the audio.": "Aplike ranvèse nan odyo a.",
+ "Reverb Room Size": "gwosè chanm reverb",
+ "Check which version of Applio is the latest to see if you need to update.": "Tcheke ki vèsyon AnPlio se dènye a yo wè si ou bezwen mete ajou.",
+ "Set the room size of the reverb.": "Mete gwosè a nan vèb la.",
+ "Post-process the audio to apply effects to the output.": "Post-pwosesis odyo a pou aplike efè nan pwodiksyon an.",
+ "Reverb Damping": "ranvèse Damping",
+ "It will activate the possibility of downloading models with a click from the website.": "Li pral aktive posibilite pou telechaje modèl ak yon klike sou soti nan sit entènèt la.",
+ "Set the damping of the reverb.": "Fikse mouye revèb la.",
+ "Set the wet gain of the reverb.": "Mete mouye a nan ranvèse a.",
+ "Reverb Width": "Lajè revèb",
+ "Set the dry gain of the reverb.": "Mete benefis sèk la nan ranvèse a.",
+ "Reverb Wet Gain": "Ranvèse Mouye Benefis",
+ "Set the width of the reverb.": "Mete lajè ranvèse a.",
+ "Reverb Freeze Mode": "Ranvèse mòd friz",
+ "Limiter": "Limitè",
+ "Pitch Shift": "Chanjman anplasman",
+ "Set the freeze mode of the reverb.": "Mete mòd nan friz nan vèb la.",
+ "Pitch Shift Semitones": "Pitch Shift Semitones",
+ "Apply limiter to the audio.": "Aplike limite nan odyo a.",
+ "Set the pitch shift semitones.": "Mete anplasman an chanjman semis.",
+ "Apply pitch shift to the audio.": "Aplike chanjman anplasman nan odyo a.",
+ "Limiter Threshold dB": "Limiter Papòt dB",
+ "Limiter Release Time": "Limitè Tan liberasyon",
+ "Set the limiter threshold dB.": "Mete papòt la limite dB.",
+ "Gain": "Benefis",
+ "Set the limiter release time.": "Mete tan an lage limit.",
+ "Reverb Dry Gain": "Ranvèse Sèk Benefis",
+ "Apply gain to the audio.": "Aplike genyen nan odyo a.",
+ "Gain dB": "Jwenn dB",
+ "Distortion": "Defòmasyon",
+ "Chorus": "Koral",
+ "Distortion Gain": "Defòmasyon Benefis",
+ "Set the distortion gain.": "Mete defòmasyon an.",
+ "Apply distortion to the audio.": "Aplike defòmasyon nan odyo a.",
+ "Apply chorus to the audio.": "Aplike koral nan odyo a.",
+ "Chorus Rate Hz": "Pousantaj koral Hz",
+ "Set the chorus rate Hz.": "Mete pousantaj koral la Hz.",
+ "Set the chorus depth.": "Mete pwofondè koral la.",
+ "Chorus Center Delay ms": "Koral Sant reta ms",
+ "Chorus Feedback": "Koral Fidbak",
+ "Set the chorus center delay ms.": "Mete sant koral la ret tann ms.",
+ "Reverb": "ranvèse",
+ "Set the chorus mix.": "Mete melanj koral la.",
+ "Chorus Mix": "Koral Melanj",
+ "Set the chorus feedback.": "Mete fidbak la koral.",
+ "Bitcrush": "Bitcrush",
+ "Apply bitcrush to the audio.": "Aplike bitcrush nan odyo a.",
+ "Set the bitcrush bit depth.": "Mete ti jan bitcrush la.",
+ "Bitcrush Bit Depth": "Bitcrush ti jan pwofondè",
+ "Clipping": "Klips",
+ "Set the gain dB.": "Mete dB a benefisyè.",
+ "Clipping Threshold": "Clipping Papòt",
+ "Apply clipping to the audio.": "Aplike clipping nan odyo a.",
+ "Compressor": "Compresse",
+ "Compressor Ratio": "Konpresè Pousantaj",
+ "Set the clipping threshold.": "Mete papòt la klip.",
+ "Apply compressor to the audio.": "Aplike compressor nan odyo a.",
+ "Set the compressor threshold dB.": "Mete papòt la compresse dB.",
+ "Compressor Attack ms": "Compresse atak ms",
+ "Set the compressor ratio.": "Mete rapò a compresse.",
+ "Set the compressor attack ms.": "Mete atak la compressor.",
+ "Compressor Threshold dB": "Compressor Papòt dB",
+ "Compressor Release ms": "Compressor Lage ms",
+ "Set the compressor release ms.": "Mete konpresè a lage ms.",
+ "Apply delay to the audio.": "Aplike reta nan odyo a.",
+ "Delay Seconds": "Reta Segonn",
+ "Delay Feedback": "Reta Fidbak",
+ "Set the delay seconds.": "Mete segonn yo reta.",
+ "Set the delay feedback.": "Mete fidbak la reta.",
+ "Set the delay mix.": "Mete melanj lan reta.",
+ "Delay Mix": "Reta Mix",
+ "Folder Name": "Non katab",
+ "Select Custom Embedder": "Chwazi Koutim Entegre",
+ "Custom Embedder": "Koutim",
+ "Refresh embedders": "Rafrechisman entegre",
+ "Upload .json": "Upload .json",
+ "Upload .bin": "Upload .bin",
+ "model information": "enfòmasyon modèl",
+ "Model Creator": "Modèl Kreyatè",
+ "Delay": "Ret a ret tan",
+ "Speaker ID": "Oratè ID",
+ "Move files to custom embedder folder": "Deplase dosye nan katab koutim entegre",
+ "Name of the model creator. (Default: Unknown)": "Non kreyatè modèl la. (Default: Unknown)",
+ "Select the speaker ID to use for the conversion.": "Chwazi ID oratè a pou itilize pou konvèsyon an.",
+ "Set name": "Fikse non",
+ "The name that will appear in the model information.": "Non ki pral parèt nan enfòmasyon modèl la.",
+ "Chorus Depth": "Pwofondè koral",
+ "Model Author Name": "Non Otè modèl",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "Mete fòs ototin lan - plis ou ogmante li plis la li pral mennen nan kadriyaj la kromatik."
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/hu_HU.json b/assets/i18n/languages/hu_HU.json
new file mode 100644
index 0000000000000000000000000000000000000000..889876eadf56403e7710c2dfc982c74896ba2dd3
--- /dev/null
+++ b/assets/i18n/languages/hu_HU.json
@@ -0,0 +1,325 @@
+{
+ "Inference": "Következtetés",
+ "Extra": "Többlet",
+ "Training": "Képzés",
+ "Output Information": "Kimeneti információk",
+ "Processing": "Feldolgozás",
+ "Merge Audios": "Hangok egyesítése",
+ "Audio Analyzer": "Hangelemző",
+ "Download": "Letöltés",
+ "The output information will be displayed here.": "A kimeneti információk itt jelennek meg.",
+ "Settings": "Beállítások",
+ "Preprocess": "Előfeldolgozás",
+ "Report a Bug": "Hiba jelentése",
+ "Plugins": "Bővítmények",
+ "Model Information": "Modell információk",
+ "This section contains some extra utilities that often may be in experimental phases.": "Ez a szakasz néhány további segédprogramot tartalmaz, amelyek gyakran kísérleti fázisban vannak.",
+ "Process effects": "Folyamathatások",
+ "Audio cutting": "Hangvágás",
+ "Enter model name": "Adja meg a modell nevét",
+ "Dataset Path": "Adatkészlet elérési útja",
+ "Model Name": "Modell neve",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "Javasoljuk, hogy inaktiválja ezt a beállítást, ha az adatkészlet már fel van dolgozva.",
+ "Name of the new model.": "Az új modell neve.",
+ "Path to the dataset folder.": "Az adatkészletmappa elérési útja.",
+ "Refresh Datasets": "Adatkészletek frissítése",
+ "Dataset Creator": "Adatkészlet létrehozója",
+ "Enter dataset name": "Adja meg az adatkészlet nevét",
+ "Dataset Name": "Adatkészlet neve",
+ "Name of the new dataset.": "Az új adatkészlet neve.",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "A hangfájl sikeresen hozzá lett adva az adatkészlethez. Kérem kattintson az előfeldolgozás gombra.",
+ "Upload Audio Dataset": "Hangadatkészlet feltöltése",
+ "Sampling Rate": "Mintavételi arány",
+ "Enter dataset path": "Adja meg az adatkészlet elérési útját",
+ "Extract": "Kivonat",
+ "The sampling rate of the audio files.": "Az audiofájlok mintavételi frekvenciája.",
+ "Model Architecture": "Modell architektúra",
+ "Version of the model architecture.": "A modellarchitektúra verziója.",
+ "Embedder Model": "Embedder modell",
+ "Preprocess Dataset": "Adatkészlet előfeldolgozása",
+ "Hop Length": "Komló hossza",
+ "Model used for learning speaker embedding.": "A beszélők beágyazásának megtanulásához használt modell.",
+ "Batch Size": "Tétel mérete",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Azt az időtartamot jelöli, amely alatt a rendszer jelentős hangmagasság-változásra vált. A kisebb ugráshosszak több időt igényelnek a következtetéshez, de általában nagyobb hangmagasság-pontosságot eredményeznek.",
+ "Save Every Epoch": "Mentsd meg minden korszakot",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Javasoljuk, hogy igazítsa a GPU rendelkezésre álló VRAM-jához. A 4-es beállítás nagyobb pontosságot, de lassabb feldolgozást biztosít, míg a 8-as gyorsabb és szabványos eredményeket biztosít.",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "Egy egyszerű, kiváló minőségű hangkonvertáló eszköz, amely a könnyű használatra és a teljesítményre összpontosított.",
+ "Total Epoch": "Teljes korszak",
+ "Pretrained": "Előre betanított",
+ "Save Only Latest": "Csak a legújabbak mentése",
+ "Determine at how many epochs the model will saved at.": "Határozza meg, hogy hány korszakban menti a modellt.",
+ "Specifies the overall quantity of epochs for the model training process.": "A modell betanítási folyamatának epocháinak teljes mennyiségét adja meg.",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Ez a beállítás lehetővé teszi a modell súlyozásának mentését az egyes korszakok végén.",
+ "Custom Pretrained": "Egyéni előképzett",
+ "Upload Pretrained Model": "Előre betanított modell feltöltése",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "A beállítás engedélyezése azt eredményezi, hogy a G és D fájlok csak a legújabb verziójukat mentik, így hatékonyan megtakarítják a tárhelyet.",
+ "Refresh Custom Pretraineds": "Egyéni előképzetek frissítése",
+ "Save Every Weights": "Takarítson meg minden súlyt",
+ "Pretrained Custom Settings": "Előre betanított egyéni beállítások",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Az egyéni előre betanított modellek használata kiváló eredményekhez vezethet, mivel az adott használati esetre szabott legmegfelelőbb előre betanított modellek kiválasztása jelentősen javíthatja a teljesítményt.",
+ "The file you dropped is not a valid pretrained file. Please try again.": "Az eldobott fájl nem érvényes előre betanított fájl. Kérjük, próbálja újra.",
+ "Pretrained D Path": "Egyéni előképzett D",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Kattintson a frissítés gombra az előre betanított fájl megjelenítéséhez a legördülő menüben.",
+ "GPU Settings": "GPU-beállítások",
+ "GPU Custom Settings": "GPU egyéni beállítások",
+ "Pretrained G Path": "Egyéni előképzett G",
+ "GPU Number": "GPU-szám",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Speciális GPU-beállításokat állít be, amelyek a jobb GPU-architektúrával rendelkező felhasználók számára ajánlottak.",
+ "The GPU information will be displayed here.": "A GPU adatai itt jelennek meg.",
+ "0 to ∞ separated by -": "0-tól ∞-ig - választja el",
+ "GPU Information": "GPU-információk",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "Az előfolyamatban használandó CPU-magok száma. Az alapértelmezett beállítás a processzormagok, ami a legtöbb esetben ajánlott.",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Adja meg az előfeldolgozáshoz használni kívánt GPU-k számát kötőjelekkel (-) elválasztva. Jelenleg a multi-gpu használata nem lesz jelentős hatással.",
+ "Pitch Guidance": "Pitch útmutatás",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Adja meg a kinyeréshez használni kívánt GPU-k számát kötőjelekkel (-) elválasztva.",
+ "Use CPU": "CPU használata",
+ "Force the use of CPU for training.": "Kényszerítse a CPU használatát a betanításhoz.",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "A kinyerési folyamatban használt CPU-magok száma. Az alapértelmezett beállítás a processzormagok, ami a legtöbb esetben ajánlott.",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Használja az előre betanított modelleket a saját betanításakor. Ez a megközelítés csökkenti a képzés időtartamát és javítja az általános minőséget.",
+ "Cache Dataset in GPU": "Adatkészlet gyorsítótárazása a GPU-ban",
+ "Extract Features": "Jellemzők kivonása",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "A gyorsabb teljesítmény érdekében prioritásként kezeljük a modell kinyerésének GPU-n való futtatását. Ha inkább a CPU-t szeretné használni, egyszerűen hagyja üresen a GPU mezőt.",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "A gyorsabb teljesítmény érdekében prioritásként kezeljük a modell előfeldolgozásának GPU-n való futtatását. Ha inkább a CPU-t szeretné használni, egyszerűen hagyja üresen a GPU mezőt.",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "A hangmagasság-útmutatás alkalmazásával megvalósíthatóvá válik az eredeti hang intonációjának tükrözése, beleértve annak hangmagasságát is. Ez a funkció különösen értékes énekléshez és más forgatókönyvekhez, ahol az eredeti dallam vagy hangmagasság minta megőrzése elengedhetetlen.",
+ "Index Algorithm": "Index algoritmus",
+ "Overtraining Detector": "Túledzés érzékelő",
+ "Overtraining Detector Settings": "Túledzésérzékelő beállításai",
+ "Overtraining Threshold": "Túledzési küszöb",
+ "Cache the dataset in GPU memory to speed up the training process.": "Gyorsítótárazza az adatkészletet a GPU-memóriában a betanítási folyamat felgyorsítása érdekében.",
+ "Fresh Training": "Friss képzés",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "A KMeans egy fürtözési algoritmus, amely az adatkészletet K klaszterekre osztja. Ez a beállítás különösen nagy adatkészletek esetén hasznos.",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Állítsa be azon korszakok maximális számát, amelyek esetében a modell leállítja a betanítást, ha a rendszer nem észlel javulást.",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Észlelje a túlképzést, hogy megakadályozza, hogy a modell túl jól tanulja meg a betanítás adatait, és elveszítse az új adatokra való általánosítás képességét.",
+ "Start Training": "Kezdje el az edzést",
+ "Stop Training": "Edzés leállítása",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "Ezt a beállítást csak akkor engedélyezze, ha egy új modellt teljesen új modellt tanít be, vagy újraindítja a betanítást. Törli az összes korábban létrehozott súlyozást és tensorboard naplót.",
+ "Generate Index": "Index létrehozása",
+ "Export Model": "Modell exportálása",
+ "Exported Index file": "Exportált indexfájl",
+ "Upload": "Feltölt",
+ "Select the pth file to be exported": "Válassza ki az exportálni kívánt pth fájlt",
+ "Exported Pth file": "Exportált Pth fájl",
+ "Select the index file to be exported": "Válassza ki az exportálni kívánt indexfájlt",
+ "Refresh": "Felfrissít",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "A \"Feltöltés\" gomb csak a Google Colab esetében használható: Feltölti az exportált fájlokat a Google Drive ApplioExported mappájába.",
+ "Single": "Nőtlen",
+ "Select the voice model to use for the conversion.": "Válassza ki az átalakításhoz használni kívánt hangmodellt.",
+ "Unload Voice": "Hang eltávolítása",
+ "Upload Audio": "Hang feltöltése",
+ "Select the index file to use for the conversion.": "Válassza ki az átalakításhoz használni kívánt indexfájlt.",
+ "Voice Model": "Hangmodell",
+ "Select Audio": "Válassza az Audio lehetőséget",
+ "Advanced Settings": "Speciális beállítások",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Kimenetek törlése (Törli az összes hangot az eszközökből/hangokból)",
+ "Output Path": "Kimeneti útvonal",
+ "Custom Output Path": "Egyéni kimeneti útvonal",
+ "Select the audio to convert.": "Válassza ki a konvertálni kívánt hangot.",
+ "Export Format": "Formátum exportálása",
+ "Select the format to export the audio.": "Válassza ki a hangot exportáló formátumot.",
+ "Autotune": "Automatikus hangolás",
+ "Split Audio": "Osztott hang",
+ "Clean Audio": "Tiszta hangzás",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Ossza fel a hangot darabokra a következtetéshez, hogy bizonyos esetekben jobb eredményeket érjen el.",
+ "Clean Strength": "Tiszta szilárdság",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "Az elérési út, ahová a kimeneti hang mentésre kerül, alapértelmezés szerint az eszközökben / hangokban / output.wav",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Tisztítsa meg a hangkimenetet zajérzékelő algoritmusokkal, amelyek a hangok beszédéhez ajánlottak.",
+ "Upscale Audio": "Előkelő hangzás",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Alkalmazzon lágy automatikus hangolást a következtetésekre, ami az énekkonverziókhoz ajánlott.",
+ "Formant Shifting": "Formáns váltás",
+ "Index File": "Index fájl",
+ "Browse presets for formanting": "Készletek tallózása formázáshoz",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Formánváltások engedélyezése. Férfi-nő átalakításhoz és fordítva.",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Skálázza fel a hangot jobb minőségre, alacsony minőségű hangokhoz ajánlott. (A hang feldolgozása hosszabb időt vehet igénybe)",
+ "Default value is 1.0": "Az alapértelmezett érték 1,0",
+ "Pitch": "Hangmagasság",
+ "Presets are located in /assets/formant_shift folder": "A készletek az /assets/formant_shift mappában találhatók",
+ "Timbre for formant shifting": "Hangszín a formáns váltáshoz",
+ "Quefrency for formant shifting": "Quefrency for formant shifting",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Állítsa be a tisztítási szintet a kívánt hangra, minél jobban növeli, annál jobban megtisztítja, de lehetséges, hogy a hang tömörítettebb lesz.",
+ "Filter Radius": "Szűrési sugár",
+ "Volume Envelope": "Térfogat boríték",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Állítsa be a hang hangmagasságát, minél magasabb az érték, annál magasabb a hangmagasság.",
+ "Search Feature Ratio": "Keresési funkciók aránya",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Ha a szám nagyobb vagy egyenlő hárommal, az összegyűjtött tónuseredmények medián szűrésének alkalmazása csökkentheti a légzést.",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Az indexfájl által gyakorolt hatás; A magasabb érték nagyobb befolyásnak felel meg. Az alacsonyabb értékek választása azonban segíthet enyhíteni a hangban jelen lévő műtermékeket.",
+ "Pitch extraction algorithm": "Pitch extrakciós algoritmus",
+ "Convert": "Megtérít",
+ "Protect Voiceless Consonants": "Zöngétlen mássalhangzók védelme",
+ "Batch": "Halom",
+ "Export Audio": "Hang exportálása",
+ "Input Folder": "Bemeneti mappa",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Védje a különálló mássalhangzókat és légzési hangokat, hogy megakadályozza az elektroakusztikus szakadást és más műtermékeket. A paraméter maximális 0,5-ös értékre való lekérése átfogó védelmet nyújt. Ennek az értéknek a csökkentése azonban csökkentheti a védelem mértékét, miközben potenciálisan enyhítheti az indexelési hatást.",
+ "Enter input path": "Adja meg a bemeneti útvonalat",
+ "Select the folder containing the audios to convert.": "Válassza ki a konvertálni kívánt hangokat tartalmazó mappát.",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Hangmagasság-kinyerési algoritmus az audio konvertáláshoz. Az alapértelmezett algoritmus az rmvpe, amely a legtöbb esetben ajánlott.",
+ "Output Folder": "Kimeneti mappa",
+ "Enter output path": "Adja meg a kimeneti útvonalat",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Helyettesítse vagy keverje össze a kimenet térfogatburkológörbéjét. Minél közelebb van az arány az 1-hez, annál nagyobb a kimeneti burkológörbe.",
+ "## Voice Blender": "## Hangos turmixgép",
+ "Voice Blender": "Hangos turmixgép",
+ "Drag and drop your model here": "Húzza ide a modellt",
+ "Select the folder where the output audios will be saved.": "Válassza ki azt a mappát, ahová a kimeneti hangokat menteni kívánja.",
+ "You can also use a custom path.": "Egyéni elérési utat is használhat.",
+ "Fusion": "Fúzió",
+ "Get information about the audio": "Információk lekérése a hangról",
+ "Blend Ratio": "Keverési arány",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Válasszon ki két hangmodellt, állítsa be a kívánt keverési százalékot, és keverje össze őket egy teljesen új hangszínbe.",
+ "Model information to be placed": "Az elhelyezendő modellinformációk",
+ "Enter path to model": "Adja meg a modell elérési útját",
+ "Path to Model": "A modell elérési útja",
+ "Inroduce the model information": "A modellinformációk bemutatása",
+ "View": "Nézet",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Ha a pozíciót jobban az egyik vagy a másik oldalra állítja, a modell jobban hasonlít az elsőhöz vagy a másodikhoz.",
+ "View model information": "Modellinformációk megtekintése",
+ "Model conversion": "Modell átalakítás",
+ "The information to be placed in the model (You can leave it blank or put anything).": "A modellben elhelyezendő információk (üresen hagyhatja, vagy bármit betehet).",
+ "Introduce the model pth path": "A modell pth elérési útjának bemutatása",
+ "Pth file": "Pth fájl",
+ "Output of the pth file": "A pth fájl kimenete",
+ "Extract F0 Curve": "F0 görbe kivonása",
+ "# How to Report an Issue on GitHub": "# Hogyan jelenthet problémát a GitHubon",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "Az f0 görbe a hang alapfrekvenciájának időbeli változásait ábrázolja, megmutatva, hogyan emelkedik és csökken a hangmagasság.",
+ "Record": "Rekord",
+ "Record Screen": "Felvétel képernyő",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Kattintson az alábbi \"Felvétel képernyő\" gombra a tapasztalt probléma rögzítésének megkezdéséhez.",
+ "Stop Recording": "Felvétel leállítása",
+ "See Model Information": "Modellinformációk megtekintése",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Töltse ki a megadott problémasablont, ügyelve arra, hogy szükség szerint tartalmazza a részleteket, és használja az eszközök szakaszt az előző lépésből rögzített fájl feltöltéséhez.",
+ "Model Link": "Modell link",
+ "Introduce the model link": "A modellhivatkozás bemutatása",
+ "Introduce the model .pth path": "A modell .pth elérési útjának bemutatása",
+ "Download Model": "Modell letöltése",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Miután befejezte a probléma rögzítését, kattintson a \"Felvétel leállítása\" gombra (ugyanaz a gomb, de a címke attól függően változik, hogy aktívan rögzít-e vagy sem).",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Lépjen a [GitHub-problémák](https://github.com/IAHispano/Applio/issues) oldalra, és kattintson az \"Új probléma\" gombra.",
+ "## Drop files": "## Dobja el a fájlokat",
+ "Search": "Keresés",
+ "## Download Model": "## Modell letöltése",
+ "## Search Model": "## Modell keresése",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Húzza a .pth és .index fájlt erre a helyre. Húzza az egyiket, majd a másikat.",
+ "Introduce the model name to search.": "Mutassa be a modell nevét a kereséshez.",
+ "We couldn't find models by that name.": "Nem találtunk modelleket ezen a néven.",
+ "## Download Pretrained Models": "## Előre betanított modellek letöltése",
+ "TTS Voices": "TTS-hangok",
+ "Increase or decrease TTS speed.": "Növelje vagy csökkentse a TTS sebességét.",
+ "Select the pretrained model you want to download.": "Válassza ki a letölteni kívánt előre betanított modellt.",
+ "Text to Synthesize": "Szintetizálandó szöveg",
+ "And select the sampling rate": "És válassza ki a mintavételi sebességet.",
+ "Select the TTS voice to use for the conversion.": "Válassza ki az átalakításhoz használni kívánt TTS-hangot.",
+ "Enter the text to synthesize.": "Írja be a szintetizálni kívánt szöveget.",
+ "Input path for text file": "A szövegfájl bemeneti elérési útja",
+ "TTS Speed": "TTS-sebesség",
+ "The path to the text file that contains content for text to speech.": "A szövegfelolvasás tartalmát tartalmazó szövegfájl elérési útja.",
+ "Enter text to synthesize": "Írja be a szintetizálni kívánt szöveget",
+ "Upload a .txt file": ".txt fájl feltöltése",
+ "Output Path for TTS Audio": "A TTS Audio kimeneti útvonala",
+ "Output Path for RVC Audio": "Az RVC Audio kimeneti útvonala",
+ "Enable fake GPU": "Hamis GPU engedélyezése",
+ "Enable Applio integration with Discord presence": "Engedélyezze az Applio integrációját a Discord jelenléttel",
+ "It will activate the possibility of downloading models with a click from the website.": "Aktiválja a modellek letöltésének lehetőségét egy kattintással a weboldalról.",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "Aktiválja az aktuális Applio tevékenység megjelenítésének lehetőségét a Discordban.",
+ "Enable Applio integration with applio.org/models using flask": "Az Applio és a applio.org/models integrációjának engedélyezése lombik használatával",
+ "Theme": "Téma",
+ "Restart Applio": "Indítsa újra az Applio-t",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "A betanítás jelenleg GPU hiánya miatt nem támogatott. Az edzés fül aktiválásához navigáljon a beállítások fülre, és engedélyezze a \"Hamis GPU\" opciót.",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Aktiválja a vonat fület. Kérjük, vegye figyelembe, hogy ez az eszköz nem rendelkezik GPU-képességekkel, ezért a betanítás nem támogatott. Ez az opció csak tesztelési célokra szolgál. (Ez az opció újraindítja az Applio-t)",
+ "Language": "Nyelv",
+ "Select the theme you want to use. (Requires restarting Applio)": "Válassza ki a használni kívánt témát. (Az Applio újraindítását igényli)",
+ "Select the language you want to use. (Requires restarting Applio)": "Válassza ki a használni kívánt nyelvet. (Az Applio újraindítását igényli)",
+ "Update precision": "Frissítési pontosság",
+ "Precision": "Precizitás",
+ "Select the precision you want to use for training and inference.": "Válassza ki a betanításhoz és a következtetéshez használni kívánt pontosságot.",
+ "Version Checker": "Verzióellenőrző",
+ "Drag your plugin.zip to install it": "Húzza a plugin.zip a telepítéshez",
+ "Check for updates": "Frissítések keresése",
+ "Reverb": "Reverb",
+ "Plugin Installer": "Bővítmény telepítő",
+ "Post-Process": "Utómunka",
+ "Check which version of Applio is the latest to see if you need to update.": "Ellenőrizze, hogy az Applio melyik verziója a legújabb, hogy lássa, frissítenie kell-e.",
+ "Post-process the audio to apply effects to the output.": "A hang utófeldolgozásával effektusokat alkalmazhat a kimenetre.",
+ "Apply reverb to the audio.": "Vigyen fel visszhangot a hangra.",
+ "Reverb Room Size": "Reverb szoba mérete",
+ "Reverb Damping": "Zengetés csillapítás",
+ "Set the room size of the reverb.": "Állítsa be a zengetés szobaméretét.",
+ "Set the damping of the reverb.": "Állítsa be a zengetés csillapítását.",
+ "Reverb Wet Gain": "Reverb nedves nyereség",
+ "Set the wet gain of the reverb.": "Állítsa be a zengetés nedves erősítését.",
+ "Reverb Width": "Zengetés szélessége",
+ "Reverb Dry Gain": "Reverb Dry Gain",
+ "Set the dry gain of the reverb.": "Állítsa be a zengetés száraz erősítését.",
+ "Model extraction": "Modell kinyerése",
+ "Set the freeze mode of the reverb.": "Állítsa be a zengetés fagyasztási módját.",
+ "Set the width of the reverb.": "Állítsa be a zengetés szélességét.",
+ "Limiter": "Limiter",
+ "Apply pitch shift to the audio.": "Alkalmazzon hangmagasság-eltolást a hangra.",
+ "Pitch Shift": "Pitch Shift",
+ "Set the pitch shift semitones.": "Állítsa be a hangmagasság-eltolás félhangjait.",
+ "Apply limiter to the audio.": "Alkalmazzon korlátozót a hangra.",
+ "Reverb Freeze Mode": "Reverb fagyasztási mód",
+ "Limiter Threshold dB": "Korlátozó küszöbérték dB",
+ "Pitch Shift Semitones": "Hangmagasság-eltolásos félhangok",
+ "Gain": "Nyereség",
+ "Set the limiter threshold dB.": "Állítsa be a korlátozó küszöbértéket dB.",
+ "Limiter Release Time": "Limiter kiadási ideje",
+ "Distortion": "Torzulás",
+ "Set the limiter release time.": "Állítsa be a korlátozó kiadási idejét.",
+ "Apply gain to the audio.": "Alkalmazzon erősítést a hangra.",
+ "Set the gain dB.": "Állítsa be az erősítés dB-jét.",
+ "Gain dB": "dB erősítés",
+ "Apply distortion to the audio.": "Torzítás alkalmazása a hangra.",
+ "Distortion Gain": "Torzítási nyereség",
+ "Chorus": "Kórus",
+ "Set the distortion gain.": "Állítsa be a torzítási erősítést.",
+ "Chorus Depth": "Kórus mélysége",
+ "Chorus Rate Hz": "Kórus frekvencia Hz",
+ "Set the chorus rate Hz.": "Állítsa be a kórus frekvenciáját Hz.",
+ "Apply chorus to the audio.": "Alkalmazzon kórust a hangra.",
+ "Set the chorus depth.": "Állítsa be a kórus mélységét.",
+ "Chorus Center Delay ms": "Kórusközpont késleltetése ms",
+ "Chorus Feedback": "Kórus visszajelzés",
+ "Set the chorus feedback.": "Állítsa be a kórus visszajelzését.",
+ "Chorus Mix": "Kórus mix",
+ "Bitcrush": "Bitcrush",
+ "Set the chorus center delay ms.": "Állítsa be a kórusközpont késleltetését ms.",
+ "Set the chorus mix.": "Állítsa be a kóruskeveréket.",
+ "Apply bitcrush to the audio.": "Vigyen fel bitcrusht a hangra.",
+ "Bitcrush Bit Depth": "Bitcrush bitmélység",
+ "Compressor": "Kompresszor",
+ "Set the bitcrush bit depth.": "Állítsa be a bittörés bitmélységét.",
+ "Clipping": "Nyírás",
+ "Clipping Threshold": "Vágási küszöb",
+ "Apply clipping to the audio.": "Alkalmazzon vágást a hangra.",
+ "Set the clipping threshold.": "Állítsa be a vágási küszöböt.",
+ "Compressor Threshold dB": "Kompresszor küszöbérték dB",
+ "Apply compressor to the audio.": "Vigyen fel kompresszort a hangra.",
+ "Compressor Ratio": "Kompresszor arány",
+ "Set the compressor threshold dB.": "Állítsa be a kompresszor dB küszöbértékét.",
+ "Compressor Attack ms": "Kompresszor támadás ms",
+ "Set the compressor ratio.": "Állítsa be a kompresszor arányát.",
+ "Compressor Release ms": "Kompresszor kioldása ms",
+ "Delay": "Késés",
+ "Set the compressor attack ms.": "Állítsa be a kompresszor támadását ms.",
+ "Apply delay to the audio.": "Alkalmazzon késleltetést a hangra.",
+ "Delay Seconds": "Késleltetés másodpercben",
+ "Delay Feedback": "Visszajelzés késleltetése",
+ "Set the delay seconds.": "Állítsa be a késleltetési másodperceket.",
+ "Set the compressor release ms.": "Állítsa be a kompresszor kioldását ms.",
+ "Set the delay feedback.": "Állítsa be a késleltetési visszajelzést.",
+ "Custom Embedder": "Egyéni beágyazó",
+ "Set the delay mix.": "Állítsa be a késleltetési keveréket.",
+ "Delay Mix": "Késleltetési keverék",
+ "Select Custom Embedder": "Egyéni beágyazó kiválasztása",
+ "Folder Name": "Mappa neve",
+ "Upload .bin": "Feltöltési .bin",
+ "Refresh embedders": "Beágyazók frissítése",
+ "Move files to custom embedder folder": "Fájlok áthelyezése egyéni beágyazási mappába",
+ "Upload .json": "Feltöltési .json",
+ "model information": "Modell információk",
+ "Name of the model creator. (Default: Unknown)": "A modell létrehozójának neve. (Alapértelmezés: ismeretlen)",
+ "Speaker ID": "Hangszóró azonosítója",
+ "Model Creator": "Modell készítője",
+ "Select the speaker ID to use for the conversion.": "Válassza ki az átalakításhoz használni kívánt hangszóróazonosítót.",
+ "Model Author Name": "Modell szerzőjének neve",
+ "Set name": "Név beállítása",
+ "The name that will appear in the model information.": "A modelladatokban megjelenő név.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "Állítsa be az automatikus hangolás erősségét - minél jobban növeli, annál jobban illeszkedik a kromatikus rácshoz."
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/id_ID.json b/assets/i18n/languages/id_ID.json
new file mode 100644
index 0000000000000000000000000000000000000000..14a2d7bc314c4313038766e0a208f214d4dfe803
--- /dev/null
+++ b/assets/i18n/languages/id_ID.json
@@ -0,0 +1,325 @@
+{
+ "Training": "Pelatihan",
+ "Inference": "Kesimpulan",
+ "Processing": "Pengolahan",
+ "Merge Audios": "Gabungkan Audio",
+ "Audio Analyzer": "Penganalisis Audio",
+ "Output Information": "Informasi Keluaran",
+ "Download": "Mengunduh",
+ "Extra": "Ekstra",
+ "The output information will be displayed here.": "Informasi keluaran akan ditampilkan di sini.",
+ "Settings": "Pengaturan",
+ "This section contains some extra utilities that often may be in experimental phases.": "Bagian ini berisi beberapa utilitas tambahan yang sering kali mungkin dalam fase eksperimental.",
+ "Model Information": "Informasi Model",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "Alat konversi suara sederhana dan berkualitas tinggi yang berfokus pada kemudahan penggunaan dan kinerja.",
+ "Plugins": "Plugin",
+ "Preprocess": "Praproses",
+ "Report a Bug": "Laporkan Bug",
+ "Audio cutting": "Pemotongan audio",
+ "Enter model name": "Masukkan nama model",
+ "Name of the new model.": "Nama model baru.",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "Disarankan untuk menonaktifkan opsi ini jika himpunan data Anda telah diproses.",
+ "Dataset Path": "Jalur Himpunan Data",
+ "Dataset Name": "Nama Himpunan Data",
+ "Path to the dataset folder.": "Jalur ke folder himpunan data.",
+ "Refresh Datasets": "Segarkan Himpunan Data",
+ "Name of the new dataset.": "Nama himpunan data baru.",
+ "Enter dataset name": "Masukkan nama himpunan data",
+ "Process effects": "Efek proses",
+ "Model Name": "Nama Model",
+ "Enter dataset path": "Masukkan jalur himpunan data",
+ "Dataset Creator": "Pembuat Kumpulan Data",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "File audio telah berhasil ditambahkan ke himpunan data. Silakan klik tombol praproses.",
+ "Upload Audio Dataset": "Unggah Himpunan Data Audio",
+ "Sampling Rate": "Tingkat pengambilan sampel",
+ "Extract": "Ekstrak",
+ "The sampling rate of the audio files.": "Tingkat pengambilan sampel file audio.",
+ "Model Architecture": "Arsitektur Model",
+ "Preprocess Dataset": "Kumpulan Data Praproses",
+ "Version of the model architecture.": "Versi arsitektur model.",
+ "Embedder Model": "Embedder Model",
+ "Hop Length": "Panjang Hop",
+ "Model used for learning speaker embedding.": "Model yang digunakan untuk mempelajari penyematan speaker.",
+ "Save Every Epoch": "Simpan Setiap Epoch",
+ "Determine at how many epochs the model will saved at.": "Tentukan berapa banyak zaman model akan disimpan.",
+ "Total Epoch": "Total Epoch",
+ "Batch Size": "Ukuran Batch",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Menunjukkan durasi yang diperlukan sistem untuk bertransisi ke perubahan nada yang signifikan. Panjang lompatan yang lebih kecil membutuhkan lebih banyak waktu untuk inferensi tetapi cenderung menghasilkan akurasi nada yang lebih tinggi.",
+ "Specifies the overall quantity of epochs for the model training process.": "Menentukan jumlah keseluruhan epoch untuk proses pelatihan model.",
+ "Pretrained": "Dilatih sebelumnya",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Dianjurkan untuk menyelaraskannya dengan VRAM GPU Anda yang tersedia. Pengaturan 4 menawarkan akurasi yang lebih baik tetapi pemrosesan yang lebih lambat, sementara 8 memberikan hasil yang lebih cepat dan standar.",
+ "Save Only Latest": "Simpan Hanya Terbaru",
+ "Save Every Weights": "Simpan Setiap Bobot",
+ "Custom Pretrained": "Kustom Pralatih",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Mengaktifkan pengaturan ini akan menghasilkan file G dan D hanya menyimpan versi terbarunya, sehingga secara efektif menghemat ruang penyimpanan.",
+ "Upload Pretrained Model": "Unggah Model yang telah dilatih sebelumnya",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Pengaturan ini memungkinkan Anda menyimpan bobot model pada akhir setiap zaman.",
+ "Refresh Custom Pretraineds": "Refresh Kustom Pralatih",
+ "Pretrained Custom Settings": "Pengaturan Kustom yang telah dilatih sebelumnya",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Memanfaatkan model pralatih khusus dapat menghasilkan hasil yang unggul, karena memilih model pralatih yang paling sesuai yang disesuaikan dengan kasus penggunaan tertentu dapat meningkatkan kinerja secara signifikan.",
+ "The file you dropped is not a valid pretrained file. Please try again.": "File yang Anda jatuhkan bukanlah file yang telah dilatih sebelumnya. Silakan coba lagi.",
+ "Pretrained D Path": "D Pralatih Kustom",
+ "GPU Settings": "Pengaturan GPU",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Klik tombol refresh untuk melihat file yang telah dilatih sebelumnya di menu dropdown.",
+ "GPU Custom Settings": "Pengaturan Kustom GPU",
+ "Pretrained G Path": "Kustom Pralatih G",
+ "GPU Number": "Nomor GPU",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Mengatur pengaturan GPU lanjutan, direkomendasikan untuk pengguna dengan arsitektur GPU yang lebih baik.",
+ "0 to ∞ separated by -": "0 hingga ∞ dipisahkan oleh -",
+ "The GPU information will be displayed here.": "Informasi GPU akan ditampilkan di sini.",
+ "Use CPU": "Gunakan CPU",
+ "Pitch Guidance": "Panduan Pitch",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "Jumlah inti CPU yang akan digunakan dalam praproses. Pengaturan default adalah inti cpu Anda, yang direkomendasikan untuk sebagian besar kasus.",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Tentukan jumlah GPU yang ingin Anda gunakan untuk mengekstrak dengan memasukkannya dipisahkan oleh tanda hubung (-).",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "Jumlah inti CPU yang akan digunakan dalam proses ekstraksi. Pengaturan default adalah inti cpu Anda, yang direkomendasikan untuk sebagian besar kasus.",
+ "Extract Features": "Ekstrak Fitur",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Tentukan jumlah GPU yang ingin Anda gunakan untuk praproses dengan memasukkannya dipisahkan oleh tanda hubung (-). Saat ini, menggunakan multi-gpu tidak akan berpengaruh signifikan.",
+ "GPU Information": "Informasi GPU",
+ "Cache Dataset in GPU": "Himpunan Data Cache di GPU",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Dengan menggunakan panduan nada, menjadi layak untuk mencerminkan intonasi suara aslinya, termasuk nadanya. Fitur ini sangat berharga untuk menyanyi dan skenario lain di mana mempertahankan melodi atau pola nada asli sangat penting.",
+ "Force the use of CPU for training.": "Paksa penggunaan CPU untuk pelatihan.",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Manfaatkan model yang telah dilatih sebelumnya saat melatih model Anda sendiri. Pendekatan ini mengurangi durasi pelatihan dan meningkatkan kualitas secara keseluruhan.",
+ "Index Algorithm": "Algoritma Indeks",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Kami memprioritaskan menjalankan ekstraksi model pada GPU untuk performa yang lebih cepat. Jika Anda lebih suka menggunakan CPU, biarkan kolom GPU kosong.",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Kami memprioritaskan menjalankan prapemrosesan model pada GPU untuk kinerja yang lebih cepat. Jika Anda lebih suka menggunakan CPU, biarkan kolom GPU kosong.",
+ "Cache the dataset in GPU memory to speed up the training process.": "Cache himpunan data di memori GPU untuk mempercepat proses pelatihan.",
+ "Overtraining Detector": "Detektor Overtraining",
+ "Overtraining Detector Settings": "Pengaturan Detektor Overtraining",
+ "Overtraining Threshold": "Ambang Batas Overtraining",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans adalah algoritma pengelompokan yang membagi kumpulan data menjadi K kluster. Pengaturan ini sangat berguna untuk himpunan data besar.",
+ "Fresh Training": "Pelatihan Segar",
+ "Start Training": "Mulai Pelatihan",
+ "Stop Training": "Hentikan Pelatihan",
+ "Export Model": "Model Ekspor",
+ "Generate Index": "Hasilkan Indeks",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "Aktifkan pengaturan ini hanya jika Anda melatih model baru dari awal atau memulai ulang pelatihan. Menghapus semua bobot dan log tensorboard yang dihasilkan sebelumnya.",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Deteksi pelatihan berlebihan untuk mencegah model mempelajari data pelatihan dengan terlalu baik dan kehilangan kemampuan untuk menggeneralisasi ke data baru.",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Tetapkan jumlah maksimum epoch yang Anda inginkan untuk model Anda menghentikan pelatihan jika tidak ada peningkatan yang terdeteksi.",
+ "Exported Index file": "File Indeks yang diekspor",
+ "Exported Pth file": "File Pth yang diekspor",
+ "Select the index file to be exported": "Pilih file indeks yang akan diekspor",
+ "Select the pth file to be exported": "Pilih file pth yang akan diekspor",
+ "Voice Model": "Model Suara",
+ "Refresh": "Refresh",
+ "Index File": "File Indeks",
+ "Select the voice model to use for the conversion.": "Pilih model suara yang akan digunakan untuk konversi.",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "Tombol 'Unggah' hanya untuk google colab: Mengunggah file yang diekspor ke folder ApplioExported di Google Drive Anda.",
+ "Unload Voice": "Bongkar Suara",
+ "Single": "Satu",
+ "Select the index file to use for the conversion.": "Pilih file indeks yang akan digunakan untuk konversi.",
+ "Upload Audio": "Unggah Audio",
+ "Select Audio": "Pilih Audio",
+ "Upload": "Unggah",
+ "Advanced Settings": "Pengaturan Lanjutan",
+ "Select the audio to convert.": "Pilih audio yang akan dikonversi.",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Hapus Output (Menghapus semua audio dalam aset/audio)",
+ "Custom Output Path": "Jalur Output Kustom",
+ "Output Path": "Jalur Keluaran",
+ "Export Format": "Format Ekspor",
+ "Split Audio": "Pisahkan Audio",
+ "Select the format to export the audio.": "Pilih format untuk mengekspor audio.",
+ "Autotune": "Penyetelan otomatis",
+ "Clean Audio": "Audio Bersih",
+ "Clean Strength": "Kekuatan Bersih",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Pisahkan audio menjadi beberapa bagian untuk inferensi guna mendapatkan hasil yang lebih baik dalam beberapa kasus.",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Terapkan autotune lembut ke kesimpulan Anda, yang direkomendasikan untuk konversi nyanyian.",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "Jalur tempat audio keluaran akan disimpan, secara default di assets/audios/output.wav",
+ "Upscale Audio": "Audio Kelas Atas",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Bersihkan output audio Anda menggunakan algoritme deteksi kebisingan, yang direkomendasikan untuk audio berbicara.",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Tingkatkan audio ke kualitas yang lebih tinggi, direkomendasikan untuk audio berkualitas rendah. (Mungkin perlu waktu lebih lama untuk memproses audio)",
+ "Formant Shifting": "Pergeseran Forman",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Aktifkan pergeseran forman. Digunakan untuk konversi pria ke wanita dan sebaliknya.",
+ "Browse presets for formanting": "Jelajahi preset untuk formanting",
+ "Default value is 1.0": "Nilai defaultnya adalah 1,0",
+ "Pitch": "Lempar",
+ "Timbre for formant shifting": "Timbre untuk pergeseran forman",
+ "Quefrency for formant shifting": "Quefrency untuk pergeseran forman",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Atur tingkat pembersihan ke audio yang Anda inginkan, semakin banyak Anda meningkatkannya, semakin banyak yang akan dibersihkan, tetapi ada kemungkinan audio akan lebih terkompresi.",
+ "Presets are located in /assets/formant_shift folder": "Preset terletak di folder /assets/formant_shift",
+ "Filter Radius": "Filter Radius",
+ "Search Feature Ratio": "Rasio Fitur Pencarian",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Atur nada audio, semakin tinggi nilainya, semakin tinggi nadanya.",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Pengaruh yang diberikan oleh file indeks; nilai yang lebih tinggi sesuai dengan pengaruh yang lebih besar. Namun, memilih nilai yang lebih rendah dapat membantu mengurangi artefak yang ada dalam audio.",
+ "Protect Voiceless Consonants": "Lindungi Konsonan Tanpa Suara",
+ "Convert": "Mengkonversi",
+ "Pitch extraction algorithm": "Algoritma ekstraksi pitch",
+ "Volume Envelope": "Amplop Volume",
+ "Batch": "Batch",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Jika jumlahnya lebih besar dari atau sama dengan tiga, menggunakan penyaringan median pada hasil nada yang dikumpulkan berpotensi mengurangi pernapasan.",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Algoritma ekstraksi nada untuk digunakan untuk konversi audio. Algoritma default adalah rmvpe, yang direkomendasikan untuk sebagian besar kasus.",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Ganti atau campur dengan amplop volume output. Semakin dekat rasionya dengan 1, semakin banyak amplop keluaran yang digunakan.",
+ "Export Audio": "Ekspor Audio",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Lindungi konsonan dan suara pernapasan yang berbeda untuk mencegah robekan elektro-akustik dan artefak lainnya. Menarik parameter ke nilai maksimum 0,5 menawarkan perlindungan komprehensif. Namun, mengurangi nilai ini dapat mengurangi tingkat perlindungan sekaligus berpotensi mengurangi efek pengindeksan.",
+ "Input Folder": "Folder Masukan",
+ "Output Folder": "Folder Keluaran",
+ "Select the folder containing the audios to convert.": "Pilih folder yang berisi audio yang akan dikonversi.",
+ "Enter input path": "Masukkan jalur input",
+ "Enter output path": "Masukkan jalur keluaran",
+ "Select the folder where the output audios will be saved.": "Pilih folder tempat audio keluaran akan disimpan.",
+ "## Voice Blender": "## Blender Suara",
+ "Voice Blender": "Blender Suara",
+ "Fusion": "Fusi",
+ "Drag and drop your model here": "Seret dan lepas model Anda di sini",
+ "You can also use a custom path.": "Anda juga dapat menggunakan jalur kustom.",
+ "Blend Ratio": "Rasio Campuran",
+ "Get information about the audio": "Mendapatkan informasi tentang audio",
+ "Path to Model": "Jalur Menuju Model",
+ "Enter path to model": "Masukkan jalur ke model",
+ "Model information to be placed": "Informasi model yang akan ditempatkan",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Pilih dua model suara, atur persentase campuran yang Anda inginkan, dan gabungkan menjadi suara yang sama sekali baru.",
+ "Inroduce the model information": "Mempelajari informasi model",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Menyesuaikan posisi lebih ke satu sisi atau sisi lain akan membuat model lebih mirip dengan yang pertama atau kedua.",
+ "View": "Melihat",
+ "The information to be placed in the model (You can leave it blank or put anything).": "Informasi yang akan ditempatkan dalam model (Anda dapat membiarkannya kosong atau meletakkan apa pun).",
+ "View model information": "Lihat informasi model",
+ "Introduce the model pth path": "Perkenalkan jalur pth model",
+ "Model extraction": "Ekstraksi model",
+ "Model conversion": "Konversi model",
+ "Pth file": "File Pth",
+ "# How to Report an Issue on GitHub": "# Cara Melaporkan Masalah di GitHub",
+ "Output of the pth file": "Output dari file pth",
+ "Record": "Rekor",
+ "Extract F0 Curve": "Ekstrak Kurva F0",
+ "Record Screen": "Rekam Layar",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "Kurva f0 mewakili variasi frekuensi dasar suara dari waktu ke waktu, menunjukkan bagaimana nada naik dan turun.",
+ "Stop Recording": "Berhenti Merekam",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Buka [GitHub Issues](https://github.com/IAHispano/Applio/issues) dan klik tombol 'New Issue'.",
+ "Introduce the model .pth path": "Perkenalkan jalur model .pth",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Setelah Anda selesai merekam masalah, klik tombol 'Hentikan Perekaman' (tombol yang sama, tetapi labelnya berubah tergantung pada apakah Anda aktif merekam atau tidak).",
+ "Model Link": "Tautan Model",
+ "## Download Model": "## Unduh Model",
+ "See Model Information": "Lihat Informasi Model",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Klik tombol 'Rekam Layar' di bawah ini untuk mulai merekam masalah yang Anda alami.",
+ "Introduce the model link": "Perkenalkan tautan model",
+ "Download Model": "Unduh Model",
+ "Search": "Mencari",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Lengkapi template masalah yang disediakan, pastikan untuk menyertakan detail sesuai kebutuhan, dan gunakan bagian aset untuk mengunggah file yang direkam dari langkah sebelumnya.",
+ "## Drop files": "## Jatuhkan file",
+ "Introduce the model name to search.": "Perkenalkan nama model untuk dicari.",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Seret file .pth dan file .index Anda ke ruang ini. Seret satu dan kemudian yang lain.",
+ "We couldn't find models by that name.": "Kami tidak dapat menemukan model dengan nama itu.",
+ "## Search Model": "## Model Pencarian",
+ "## Download Pretrained Models": "## Unduh Model yang telah dilatih sebelumnya",
+ "And select the sampling rate": "Dan pilih laju pengambilan sampel.",
+ "TTS Speed": "Kecepatan TTS",
+ "Increase or decrease TTS speed.": "Menambah atau mengurangi kecepatan TTS.",
+ "TTS Voices": "Suara TTS",
+ "Select the pretrained model you want to download.": "Pilih model pralatih yang ingin Anda unduh.",
+ "Select the TTS voice to use for the conversion.": "Pilih suara TTS yang akan digunakan untuk konversi.",
+ "Text to Synthesize": "Teks untuk Disintesis",
+ "Enter the text to synthesize.": "Masukkan teks yang akan disintesis.",
+ "Upload a .txt file": "Mengunggah file .txt",
+ "Enter text to synthesize": "Masukkan teks untuk disintesis",
+ "Input path for text file": "Jalur input untuk file teks",
+ "Output Path for TTS Audio": "Jalur Output untuk Audio TTS",
+ "The path to the text file that contains content for text to speech.": "Jalur ke file teks yang berisi konten untuk teks ke ucapan.",
+ "Output Path for RVC Audio": "Jalur Keluaran untuk Audio RVC",
+ "Enable Applio integration with Discord presence": "Aktifkan integrasi Applio dengan kehadiran Discord",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "Ini akan mengaktifkan kemungkinan menampilkan aktivitas Applio saat ini di Discord.",
+ "Theme": "Tema",
+ "Enable fake GPU": "Aktifkan GPU palsu",
+ "Enable Applio integration with applio.org/models using flask": "Aktifkan integrasi Applio dengan applio.org/models menggunakan labu",
+ "Restart Applio": "Mulai ulang aplikasi",
+ "Language": "Bahasa",
+ "It will activate the possibility of downloading models with a click from the website.": "Ini akan mengaktifkan kemungkinan mengunduh model dengan satu klik dari situs web.",
+ "Select the theme you want to use. (Requires restarting Applio)": "Pilih tema yang ingin Anda gunakan. (Membutuhkan memulai ulang Applio)",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Mengaktifkan tab kereta. Namun, harap dicatat bahwa perangkat ini tidak memiliki kemampuan GPU, sehingga pelatihan tidak didukung. Opsi ini hanya untuk tujuan pengujian. (Opsi ini akan memulai ulang Applio)",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "Pelatihan saat ini tidak didukung karena tidak adanya GPU. Untuk mengaktifkan tab pelatihan, navigasikan ke tab pengaturan dan aktifkan opsi 'GPU palsu'.",
+ "Precision": "Presisi",
+ "Plugin Installer": "Penginstal Plugin",
+ "Select the language you want to use. (Requires restarting Applio)": "Pilih bahasa yang ingin Anda gunakan. (Membutuhkan memulai ulang Applio)",
+ "Update precision": "Perbarui presisi",
+ "Drag your plugin.zip to install it": "Seret plugin.zip Anda untuk menginstalnya",
+ "Check for updates": "Periksa pembaruan",
+ "Select the precision you want to use for training and inference.": "Pilih presisi yang ingin Anda gunakan untuk pelatihan dan inferensi.",
+ "Reverb": "Reverb",
+ "Version Checker": "Pemeriksa Versi",
+ "Apply reverb to the audio.": "Terapkan reverb ke audio.",
+ "Check which version of Applio is the latest to see if you need to update.": "Periksa versi Applio mana yang terbaru untuk melihat apakah Anda perlu memperbarui.",
+ "Post-Process": "Pasca-Proses",
+ "Reverb Room Size": "Ukuran Kamar Reverb",
+ "Post-process the audio to apply effects to the output.": "Pasca-proses audio untuk menerapkan efek ke output.",
+ "Reverb Damping": "Reverb Redaman",
+ "Set the room size of the reverb.": "Atur ukuran ruangan reverb.",
+ "Set the damping of the reverb.": "Atur redaman reverb.",
+ "Reverb Dry Gain": "Reverb Keuntungan Kering",
+ "Reverb Wet Gain": "Penguatan Basah Reverb",
+ "Reverb Width": "Lebar Reverb",
+ "Set the dry gain of the reverb.": "Atur gain kering dari reverb.",
+ "Set the freeze mode of the reverb.": "Atur mode beku reverb.",
+ "Set the wet gain of the reverb.": "Atur penguatan basah dari reverb.",
+ "Limiter": "Limiter",
+ "Set the width of the reverb.": "Atur lebar reverb.",
+ "Pitch Shift Semitones": "Semitone Pergeseran Nada",
+ "Reverb Freeze Mode": "Mode Pembekuan Reverb",
+ "Apply pitch shift to the audio.": "Terapkan pergeseran nada ke audio.",
+ "Limiter Threshold dB": "Ambang batas dB",
+ "Set the pitch shift semitones.": "Atur semitone pergeseran nada.",
+ "Apply limiter to the audio.": "Terapkan pembatas ke audio.",
+ "Set the limiter threshold dB.": "Atur ambang batas dB.",
+ "Limiter Release Time": "Waktu Rilis Pembatas",
+ "Gain": "Mendapatkan",
+ "Set the limiter release time.": "Atur waktu pelepasan pembatas.",
+ "Distortion": "Distorsi",
+ "Gain dB": "Mendapatkan dB",
+ "Apply gain to the audio.": "Terapkan penguatan ke audio.",
+ "Chorus": "Paduan suara",
+ "Pitch Shift": "Pergeseran Nada",
+ "Distortion Gain": "Penguatan Distorsi",
+ "Apply distortion to the audio.": "Terapkan distorsi ke audio.",
+ "Set the distortion gain.": "Atur penguatan distorsi.",
+ "Apply chorus to the audio.": "Terapkan paduan suara ke audio.",
+ "Set the chorus rate Hz.": "Atur laju chorus Hz.",
+ "Chorus Depth": "Kedalaman Paduan Suara",
+ "Chorus Rate Hz": "Tingkat Paduan Suara Hz",
+ "Set the gain dB.": "Atur penguatan dB.",
+ "Chorus Center Delay ms": "Chorus Center Penundaan ms",
+ "Set the chorus center delay ms.": "Atur penundaan pusat paduan suara ms.",
+ "Set the chorus depth.": "Atur kedalaman paduan suara.",
+ "Chorus Feedback": "Umpan Balik Paduan Suara",
+ "Chorus Mix": "Campuran Paduan Suara",
+ "Set the chorus feedback.": "Atur umpan balik paduan suara.",
+ "Bitcrush": "Hancurkan bit",
+ "Set the chorus mix.": "Atur campuran paduan suara.",
+ "Bitcrush Bit Depth": "Kedalaman Bit Bitcrush",
+ "Set the bitcrush bit depth.": "Atur kedalaman bit bitcrush.",
+ "Apply bitcrush to the audio.": "Terapkan bitcrush ke audio.",
+ "Clipping": "Kliping",
+ "Apply clipping to the audio.": "Terapkan kliping ke audio.",
+ "Clipping Threshold": "Ambang Kliping",
+ "Compressor": "Compressor",
+ "Compressor Ratio": "Rasio Kompresor",
+ "Set the compressor threshold dB.": "Atur ambang batas kompresor dB.",
+ "Compressor Threshold dB": "Ambang Kompresor dB",
+ "Apply compressor to the audio.": "Terapkan kompresor ke audio.",
+ "Set the compressor ratio.": "Atur rasio kompresor.",
+ "Compressor Attack ms": "Serangan Kompresor ms",
+ "Delay": "Menunda",
+ "Compressor Release ms": "Rilis Kompresor ms",
+ "Set the compressor attack ms.": "Atur serangan kompresor ms.",
+ "Apply delay to the audio.": "Terapkan penundaan ke audio.",
+ "Set the compressor release ms.": "Atur pelepasan kompresor ms.",
+ "Set the clipping threshold.": "Atur ambang kliping.",
+ "Delay Seconds": "Penundaan Detik",
+ "Set the delay seconds.": "Atur detik penundaan.",
+ "Delay Feedback": "Umpan Balik Penundaan",
+ "Set the delay feedback.": "Tetapkan umpan balik penundaan.",
+ "Delay Mix": "Campuran Penundaan",
+ "Set the delay mix.": "Atur campuran penundaan.",
+ "Refresh embedders": "Segarkan penyematan",
+ "Folder Name": "Nama Folder",
+ "Custom Embedder": "Penyematan Kustom",
+ "Select Custom Embedder": "Pilih Penyematan Kustom",
+ "Upload .json": "Unggah .json",
+ "Upload .bin": "Unggah .bin",
+ "Model Creator": "Pencipta Model",
+ "Move files to custom embedder folder": "Memindahkan file ke folder penyematan kustom",
+ "Name of the model creator. (Default: Unknown)": "Nama pembuat model. (Default: Tidak Diketahui)",
+ "Speaker ID": "ID Pembicara",
+ "model information": "Informasi model",
+ "Set name": "Set nama",
+ "Select the speaker ID to use for the conversion.": "Pilih ID speaker yang akan digunakan untuk konversi.",
+ "Model Author Name": "Nama Penulis Model",
+ "The name that will appear in the model information.": "Nama yang akan muncul di informasi model.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "Atur kekuatan autotune - semakin Anda meningkatkannya, semakin banyak itu akan terpasang ke kisi kromatik."
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/it_IT.json b/assets/i18n/languages/it_IT.json
new file mode 100644
index 0000000000000000000000000000000000000000..1fe592587acccd564ca2f7219c69f2e55fdea39f
--- /dev/null
+++ b/assets/i18n/languages/it_IT.json
@@ -0,0 +1,325 @@
+{
+ "Training": "Formazione",
+ "Inference": "Inferenza",
+ "Processing": "Elaborazione",
+ "Extra": "Supplementare",
+ "Output Information": "Informazioni di output",
+ "Download": "Scaricare",
+ "Settings": "Impostazioni",
+ "This section contains some extra utilities that often may be in experimental phases.": "Questa sezione contiene alcune utilità extra che spesso possono essere in fase sperimentale.",
+ "Plugins": "Plugin",
+ "Preprocess": "Pre-elaborazione",
+ "Merge Audios": "Unisci audio",
+ "The output information will be displayed here.": "Qui verranno visualizzate le informazioni di output.",
+ "Report a Bug": "Segnala un bug",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "Uno strumento di conversione vocale semplice e di alta qualità incentrato sulla facilità d'uso e sulle prestazioni.",
+ "Process effects": "Effetti del processo",
+ "Path to the dataset folder.": "Percorso della cartella del dataset.",
+ "Enter dataset name": "Immettere il nome del set di dati",
+ "Dataset Name": "Nome set di dati",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Il file audio è stato aggiunto correttamente al set di dati. Fare clic sul pulsante di pre-elaborazione.",
+ "Audio Analyzer": "Analizzatore audio",
+ "Audio cutting": "Taglio audio",
+ "Name of the new model.": "Nome del nuovo modello.",
+ "Enter model name": "Inserisci il nome del modello",
+ "Upload Audio Dataset": "Carica set di dati audio",
+ "Enter dataset path": "Immettere il percorso del set di dati",
+ "The sampling rate of the audio files.": "La frequenza di campionamento dei file audio.",
+ "Model Architecture": "Architettura del modello",
+ "Extract": "Estrarre",
+ "Model Information": "Informazioni sul modello",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "Si consiglia di disattivare questa opzione se il set di dati è già stato elaborato.",
+ "Dataset Path": "Percorso del set di dati",
+ "Refresh Datasets": "Aggiornare i set di dati",
+ "Model Name": "Nome del modello",
+ "Sampling Rate": "Frequenza di campionamento",
+ "Name of the new dataset.": "Nome del nuovo set di dati.",
+ "Preprocess Dataset": "Set di dati di pre-elaborazione",
+ "Embedder Model": "Modello di embedder",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Si consiglia di allinearlo con la VRAM disponibile della GPU. Un'impostazione di 4 offre una maggiore precisione ma un'elaborazione più lenta, mentre 8 fornisce risultati più rapidi e standard.",
+ "Save Every Epoch": "Salva ogni epoca",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Indica il tempo necessario al sistema per passare a un cambio di altezza significativo. Le lunghezze di salto più piccole richiedono più tempo per l'inferenza, ma tendono a produrre una maggiore precisione dell'intonazione.",
+ "Hop Length": "Lunghezza del salto",
+ "Batch Size": "Dimensione del lotto",
+ "Total Epoch": "Epoca totale",
+ "Pretrained": "Pre-addestrato",
+ "Save Every Weights": "Salva tutti i pesi",
+ "Version of the model architecture.": "Versione dell'architettura del modello.",
+ "Pretrained Custom Settings": "Impostazioni personalizzate pre-addestrate",
+ "The file you dropped is not a valid pretrained file. Please try again.": "Il file che hai rilasciato non è un file pre-addestrato valido. Riprova.",
+ "Dataset Creator": "Creatore di set di dati",
+ "Save Only Latest": "Salva solo l'ultima versione",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Abilitando questa impostazione, i file G e D salveranno solo le versioni più recenti, risparmiando efficacemente lo spazio di archiviazione.",
+ "Model used for learning speaker embedding.": "Modello utilizzato per l'apprendimento dell'incorporamento del parlante.",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Fare clic sul pulsante di aggiornamento per visualizzare il file pre-addestrato nel menu a discesa.",
+ "GPU Settings": "Impostazioni GPU",
+ "Refresh Custom Pretraineds": "Aggiornare i pre-addestrati personalizzati",
+ "Specifies the overall quantity of epochs for the model training process.": "Specifica la quantità complessiva di epoche per il processo di training del modello.",
+ "Custom Pretrained": "Pre-addestrato personalizzato",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Questa impostazione consente di salvare i pesi del modello alla conclusione di ogni epoca.",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "L'utilizzo di modelli pre-addestrati personalizzati può portare a risultati superiori, poiché la selezione dei modelli pre-addestrati più adatti al caso d'uso specifico può migliorare significativamente le prestazioni.",
+ "Pretrained G Path": "Personalizzato Pre-addestrato G",
+ "Pretrained D Path": "Personalizzato Pre-addestrato D",
+ "GPU Custom Settings": "Impostazioni personalizzate della GPU",
+ "0 to ∞ separated by -": "Da 0 a ∞ separati da -",
+ "GPU Number": "Numero GPU",
+ "The GPU information will be displayed here.": "Le informazioni sulla GPU verranno visualizzate qui.",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Imposta le impostazioni avanzate della GPU, consigliate per gli utenti con una migliore architettura GPU.",
+ "Pitch Guidance": "Guida all'intonazione",
+ "GPU Information": "Informazioni sulla GPU",
+ "Use CPU": "Usa CPU",
+ "Force the use of CPU for training.": "Forzare l'uso della CPU per l'addestramento.",
+ "Extract Features": "Funzioni di estrazione",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Diamo la priorità all'esecuzione dell'estrazione del modello sulla GPU per ottenere prestazioni più veloci. Se preferisci utilizzare la CPU, lascia semplicemente vuoto il campo GPU.",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Utilizzando la guida dell'intonazione, diventa possibile rispecchiare l'intonazione della voce originale, inclusa la sua altezza. Questa funzione è particolarmente utile per il canto e altri scenari in cui è essenziale preservare la melodia originale o il modello di intonazione.",
+ "Cache Dataset in GPU": "Memorizza il set di dati nella cache nella GPU",
+ "Cache the dataset in GPU memory to speed up the training process.": "Memorizza nella cache il set di dati nella memoria GPU per velocizzare il processo di addestramento.",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Diamo la priorità all'esecuzione della pre-elaborazione del modello sulla GPU per ottenere prestazioni più veloci. Se preferisci utilizzare la CPU, lascia semplicemente vuoto il campo GPU.",
+ "Overtraining Detector": "Rilevatore di overtraining",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Utilizza modelli pre-addestrati durante l'addestramento dei tuoi. Questo approccio riduce la durata della formazione e migliora la qualità complessiva.",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans è un algoritmo di clustering che divide il set di dati in K cluster. Questa impostazione è particolarmente utile per set di dati di grandi dimensioni.",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "Il numero di core della CPU da utilizzare nel processo di estrazione. L'impostazione predefinita sono i core della CPU, consigliata per la maggior parte dei casi.",
+ "Upload Pretrained Model": "Caricare un modello pre-addestrato",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "Numero di core CPU da utilizzare nella pre-elaborazione. L'impostazione predefinita sono i core della CPU, consigliata per la maggior parte dei casi.",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Specificare il numero di GPU che si desidera utilizzare per l'estrazione immettendole separate da trattini (-).",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Specificare il numero di GPU che si desidera utilizzare per la pre-elaborazione immettendole separate da trattini (-). Al momento, l'utilizzo di più GPU non avrà un effetto significativo.",
+ "Overtraining Threshold": "Soglia di sovrallenamento",
+ "Index Algorithm": "Algoritmo dell'indice",
+ "Start Training": "Inizia la formazione",
+ "Overtraining Detector Settings": "Impostazioni del rilevatore di overtraining",
+ "Stop Training": "Smetti di allenarti",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Imposta il numero massimo di epoche in cui desideri che il modello interrompa l'addestramento se non viene rilevato alcun miglioramento.",
+ "Generate Index": "Genera indice",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Rilevare l'overtraining per evitare che il modello apprenda troppo bene i dati di training e perda la capacità di generalizzare a nuovi dati.",
+ "Fresh Training": "Nuova formazione",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "Abilitare questa impostazione solo se si sta addestrando un nuovo modello da zero o se si sta riavviando l'addestramento. Elimina tutti i registri dei pesi e della scheda tensorimetrica generati in precedenza.",
+ "Upload": "Caricare",
+ "Exported Index file": "File di indice esportato",
+ "Select the pth file to be exported": "Seleziona il file pth da esportare",
+ "Index File": "File di indice",
+ "Unload Voice": "Scarica voce",
+ "Select the index file to use for the conversion.": "Selezionare il file di indice da utilizzare per la conversione.",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "Il pulsante 'Carica' è solo per Google Colab: Carica i file esportati nella cartella ApplioExported nel tuo Google Drive.",
+ "Upload Audio": "Carica audio",
+ "Select Audio": "Seleziona audio",
+ "Single": "Singolo",
+ "Advanced Settings": "Impostazioni avanzate",
+ "Select the format to export the audio.": "Seleziona il formato per esportare l'audio.",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "Il percorso in cui verrà salvato l'audio di output, per impostazione predefinita in assets/audios/output.wav",
+ "Autotune": "Regolazione automatica",
+ "Determine at how many epochs the model will saved at.": "Determina a quante epoche verrà salvato il modello.",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Applica un autotune morbido alle tue inferenze, consigliato per le conversioni di canto.",
+ "Clean Strength": "Forza pulita",
+ "Export Model": "Esporta modello",
+ "Select the index file to be exported": "Selezionare il file di indice da esportare",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Pulisci l'uscita audio utilizzando algoritmi di rilevamento del rumore, consigliati per l'audio parlato.",
+ "Exported Pth file": "File Pth esportato",
+ "Formant Shifting": "Spostamento delle formanti",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Abilita lo spostamento delle formanti. Utilizzato per conversioni da maschio a femmina e viceversa.",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Esegui l'upscaling dell'audio a una qualità superiore, consigliato per audio di bassa qualità. (L'elaborazione dell'audio potrebbe richiedere più tempo)",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Imposta il livello di pulizia sull'audio che desideri, più lo aumenti più pulirà, ma è possibile che l'audio sia più compresso.",
+ "Browse presets for formanting": "Sfogliare i predefiniti per la formatura",
+ "Default value is 1.0": "Il valore predefinito è 1.0",
+ "Presets are located in /assets/formant_shift folder": "I preset si trovano nella cartella /assets/formant_shift",
+ "Refresh": "Aggiornare",
+ "Quefrency for formant shifting": "Quefrency per lo spostamento delle formanti",
+ "Select the voice model to use for the conversion.": "Seleziona il modello vocale da utilizzare per la conversione.",
+ "Pitch": "Pece",
+ "Timbre for formant shifting": "Timbro per lo spostamento delle formanti",
+ "Search Feature Ratio": "Rapporto funzioni di ricerca",
+ "Filter Radius": "Raggio filtro",
+ "Volume Envelope": "Inviluppo del volume",
+ "Voice Model": "Modello vocale",
+ "Select the audio to convert.": "Seleziona l'audio da convertire.",
+ "Custom Output Path": "Percorso di output personalizzato",
+ "Output Path": "Percorso di output",
+ "Split Audio": "Dividi audio",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Cancella uscite (elimina tutti gli audio nelle risorse/audio)",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Dividi l'audio in blocchi per l'inferenza per ottenere risultati migliori in alcuni casi.",
+ "Clean Audio": "Audio pulito",
+ "Upscale Audio": "Audio di alto livello",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Se il numero è maggiore o uguale a tre, l'utilizzo del filtro mediano sui risultati del tono raccolti ha il potenziale per ridurre la respirazione.",
+ "Export Format": "Formato di esportazione",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Imposta l'intonazione dell'audio, più alto è il valore, più alta è l'intonazione.",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Influenza esercitata dal file indice; Un valore più alto corrisponde a una maggiore influenza. Tuttavia, la scelta di valori più bassi può aiutare a mitigare gli artefatti presenti nell'audio.",
+ "Batch": "Lotto",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Sostituire o fondere con l'inviluppo del volume dell'output. Più il rapporto è vicino a 1, più viene impiegato l'inviluppo di output.",
+ "Pitch extraction algorithm": "Algoritmo di estrazione del passo",
+ "Input Folder": "Cartella di input",
+ "Export Audio": "Esporta audio",
+ "Enter input path": "Inserisci il percorso di input",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Algoritmo di estrazione del passo da utilizzare per la conversione audio. L'algoritmo predefinito è rmvpe, che è consigliato per la maggior parte dei casi.",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Proteggi le consonanti distinte e i suoni respiratori per prevenire lo strappo elettroacustico e altri artefatti. Portando il parametro al suo valore massimo di 0,5 offre una protezione completa. Tuttavia, la riduzione di questo valore potrebbe ridurre l'estensione della protezione, mitigando potenzialmente l'effetto di indicizzazione.",
+ "Output Folder": "Cartella di output",
+ "Select the folder containing the audios to convert.": "Seleziona la cartella contenente gli audio da convertire.",
+ "Enter output path": "Immettere il percorso di output",
+ "Select the folder where the output audios will be saved.": "Seleziona la cartella in cui verranno salvati gli audio in uscita.",
+ "## Voice Blender": "## Frullatore vocale",
+ "Convert": "Convertire",
+ "Voice Blender": "Frullatore vocale",
+ "Fusion": "Fusione",
+ "Blend Ratio": "Rapporto di miscelazione",
+ "Get information about the audio": "Ottieni informazioni sull'audio",
+ "Protect Voiceless Consonants": "Proteggi le consonanti sorde",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Seleziona due modelli di voce, imposta la percentuale di fusione desiderata e combinali in una voce completamente nuova.",
+ "Drag and drop your model here": "Trascina e rilascia il tuo modello qui",
+ "Model information to be placed": "Informazioni sul modello da posizionare",
+ "The information to be placed in the model (You can leave it blank or put anything).": "Le informazioni da inserire nel modello (puoi lasciarlo vuoto o mettere qualsiasi cosa).",
+ "Inroduce the model information": "Inroduce le informazioni del modello",
+ "Extract F0 Curve": "Estrai curva F0",
+ "Output of the pth file": "Output del file pth",
+ "# How to Report an Issue on GitHub": "# Come segnalare un problema su GitHub",
+ "Record Screen": "Registra schermo",
+ "Enter path to model": "Inserisci il percorso del modello",
+ "Record": "Registrazione",
+ "Path to Model": "Percorso del modello",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Regolando la posizione più verso un lato o l'altro, il modello sarà più simile al primo o al secondo.",
+ "Model extraction": "Estrazione del modello",
+ "You can also use a custom path.": "È inoltre possibile utilizzare un percorso personalizzato.",
+ "Pth file": "File Pth",
+ "View model information": "Visualizza le informazioni sul modello",
+ "View": "Vista",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "La curva f0 rappresenta le variazioni della frequenza di base di una voce nel tempo, mostrando l'aumento e la diminuzione dell'intonazione.",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Fai clic sul pulsante \"Registra schermo\" in basso per avviare la registrazione del problema che stai riscontrando.",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Vai su [GitHub Issues](https://github.com/IAHispano/Applio/issues) e fai clic sul pulsante \"Nuovo problema\".",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Una volta terminata la registrazione del numero, fai clic sul pulsante \"Interrompi registrazione\" (lo stesso pulsante, ma l'etichetta cambia a seconda che tu stia registrando attivamente o meno).",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Completa il modello di problema fornito, assicurandoti di includere i dettagli secondo necessità e utilizza la sezione delle risorse per caricare il file registrato dal passaggio precedente.",
+ "Model conversion": "Conversione del modello",
+ "Introduce the model pth path": "Introduzione al percorso pth del modello",
+ "## Download Model": "## Scarica il modello",
+ "Download Model": "Scarica il modello",
+ "See Model Information": "Vedere le informazioni sul modello",
+ "Search": "Ricerca",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Trascina il file .pth e il file .index in questo spazio. Trascina l'uno e poi l'altro.",
+ "Stop Recording": "Interrompi registrazione",
+ "And select the sampling rate": "E seleziona la frequenza di campionamento.",
+ "Increase or decrease TTS speed.": "Aumentare o diminuire la velocità TTS.",
+ "Introduce the model link": "Introduci il collegamento del modello",
+ "## Search Model": "## Cerca modello",
+ "## Download Pretrained Models": "## Scarica i modelli pre-addestrati",
+ "TTS Speed": "Velocità TTS",
+ "Select the TTS voice to use for the conversion.": "Selezionare la voce TTS da utilizzare per la conversione.",
+ "Enter the text to synthesize.": "Inserisci il testo da sintetizzare.",
+ "Output Path for TTS Audio": "Percorso di uscita per l'audio TTS",
+ "Enable Applio integration with Discord presence": "Abilita l'integrazione di Applio con la presenza di Discord",
+ "It will activate the possibility of downloading models with a click from the website.": "Attiverà la possibilità di scaricare i modelli con un clic dal sito web.",
+ "Enable fake GPU": "Abilita GPU false",
+ "Introduce the model .pth path": "Introduzione al percorso .pth del modello",
+ "Model Link": "Collegamento al modello",
+ "## Drop files": "## Rilascia i file",
+ "Select the pretrained model you want to download.": "Selezionare il modello pre-addestrato che si desidera scaricare.",
+ "Output Path for RVC Audio": "Percorso di uscita per l'audio RVC",
+ "Enable Applio integration with applio.org/models using flask": "Abilita l'integrazione di Applio con applio.org/models utilizzando il pallone",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "Attiverà la possibilità di visualizzare l'attività corrente di Applio in Discord.",
+ "Upload a .txt file": "Caricare un file .txt",
+ "Restart Applio": "Riavvia Applio",
+ "Select the precision you want to use for training and inference.": "Selezionare la precisione che si desidera utilizzare per l'addestramento e l'inferenza.",
+ "Plugin Installer": "Programma di installazione del plug-in",
+ "Introduce the model name to search.": "Introdurre il nome del modello da cercare.",
+ "Theme": "Tema",
+ "Update precision": "Precisione dell'aggiornamento",
+ "Version Checker": "Controllo versione",
+ "Drag your plugin.zip to install it": "Trascina il tuo plugin.zip per installarlo",
+ "Post-process the audio to apply effects to the output.": "Post-elaborazione dell'audio per applicare gli effetti all'output.",
+ "TTS Voices": "Voci TTS",
+ "Text to Synthesize": "Testo da sintetizzare",
+ "Input path for text file": "Percorso di input per il file di testo",
+ "Enter text to synthesize": "Inserisci il testo da sintetizzare",
+ "The path to the text file that contains content for text to speech.": "Percorso del file di testo che contiene il contenuto per la sintesi vocale.",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "L'addestramento non è attualmente supportato a causa dell'assenza di una GPU. Per attivare la scheda di allenamento, vai alla scheda delle impostazioni e abilita l'opzione \"GPU falsa\".",
+ "Precision": "Precisione",
+ "Language": "Lingua",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Attiva la scheda treno. Tuttavia, si noti che questo dispositivo non dispone di funzionalità GPU, quindi l'addestramento non è supportato. Questa opzione è solo a scopo di test. (Questa opzione riavvierà Applio)",
+ "Select the theme you want to use. (Requires restarting Applio)": "Seleziona il tema che desideri utilizzare. (Richiede il riavvio di Applio)",
+ "Select the language you want to use. (Requires restarting Applio)": "Seleziona la lingua che desideri utilizzare. (Richiede il riavvio di Applio)",
+ "Check for updates": "Controlla gli aggiornamenti",
+ "Reverb": "Riverbero",
+ "Set the damping of the reverb.": "Imposta lo smorzamento del riverbero.",
+ "Reverb Damping": "Smorzamento del riverbero",
+ "Set the wet gain of the reverb.": "Imposta il guadagno bagnato del riverbero.",
+ "Reverb Width": "Larghezza del riverbero",
+ "Set the dry gain of the reverb.": "Imposta il guadagno secco del riverbero.",
+ "Set the width of the reverb.": "Imposta la larghezza del riverbero.",
+ "Reverb Wet Gain": "Riverbero Wet Gain",
+ "Reverb Freeze Mode": "Modalità di congelamento del riverbero",
+ "Set the room size of the reverb.": "Imposta la dimensione della stanza del riverbero.",
+ "Set the freeze mode of the reverb.": "Imposta la modalità di congelamento del riverbero.",
+ "Set the pitch shift semitones.": "Imposta i semitoni del pitch shift.",
+ "Set the limiter threshold dB.": "Impostare la soglia del limitatore dB.",
+ "Pitch Shift Semitones": "Spostamento dell'intonazione dei semitoni",
+ "Set the limiter release time.": "Impostare il tempo di rilascio del limitatore.",
+ "Limiter Threshold dB": "Soglia limitatore dB",
+ "Gain": "Guadagnare",
+ "Gain dB": "Guadagno dB",
+ "Post-Process": "Post-elaborazione",
+ "Apply reverb to the audio.": "Applica il riverbero all'audio.",
+ "Reverb Room Size": "Dimensioni della stanza di riverbero",
+ "Reverb Dry Gain": "Riverbero Dry Gain",
+ "Pitch Shift": "Cambio di passo",
+ "Limiter": "Limitatore",
+ "Apply limiter to the audio.": "Applicare il limitatore all'audio.",
+ "Limiter Release Time": "Tempo di rilascio del limitatore",
+ "Apply gain to the audio.": "Applica il guadagno all'audio.",
+ "Apply distortion to the audio.": "Applica la distorsione all'audio.",
+ "Set the gain dB.": "Impostare il guadagno dB.",
+ "Distortion": "Distorsione",
+ "Distortion Gain": "Guadagno di distorsione",
+ "Apply pitch shift to the audio.": "Applica lo spostamento dell'intonazione all'audio.",
+ "Chorus": "Coro",
+ "Chorus Rate Hz": "Frequenza chorus Hz",
+ "Set the distortion gain.": "Impostare il guadagno di distorsione.",
+ "Set the chorus rate Hz.": "Imposta la frequenza del chorus in Hz.",
+ "Chorus Feedback": "Feedback sul coro",
+ "Set the chorus feedback.": "Imposta il feedback del coro.",
+ "Set the chorus center delay ms.": "Imposta il ritardo centrale del chorus ms.",
+ "Chorus Center Delay ms": "Ritardo centrale coro ms",
+ "Clipping": "Ritaglio",
+ "Bitcrush Bit Depth": "Bitcrush Profondità di bit",
+ "Set the bitcrush bit depth.": "Impostare la profondità di bit di bitcrush.",
+ "Apply clipping to the audio.": "Applica il ritaglio all'audio.",
+ "Clipping Threshold": "Soglia di ritaglio",
+ "Set the clipping threshold.": "Impostare la soglia di ritaglio.",
+ "Apply compressor to the audio.": "Applica il compressore all'audio.",
+ "Set the compressor threshold dB.": "Impostare la soglia del compressore dB.",
+ "Compressor Ratio": "Rapporto compressore",
+ "Set the compressor ratio.": "Impostare il rapporto del compressore.",
+ "Compressor Attack ms": "Attacco compressore ms",
+ "Compressor Release ms": "Rilascio compressore ms",
+ "Set the compressor release ms.": "Impostare il rilascio del compressore ms.",
+ "Apply delay to the audio.": "Applica il ritardo all'audio.",
+ "Delay Seconds": "Secondi di ritardo",
+ "Check which version of Applio is the latest to see if you need to update.": "Controlla quale versione di Applio è l'ultima per vedere se è necessario aggiornare.",
+ "Apply chorus to the audio.": "Applica il coro all'audio.",
+ "Set the chorus depth.": "Imposta la profondità del chorus.",
+ "Delay Feedback": "Feedback ritardato",
+ "Chorus Mix": "Mix di cori",
+ "Chorus Depth": "Profondità del coro",
+ "Bitcrush": "Bitcrush",
+ "Apply bitcrush to the audio.": "Applica bitcrush all'audio.",
+ "Compressor Threshold dB": "Soglia compressore dB",
+ "Set the chorus mix.": "Imposta il mix del ritornello.",
+ "Set the compressor attack ms.": "Impostare l'attacco del compressore ms.",
+ "We couldn't find models by that name.": "Non siamo riusciti a trovare modelli con quel nome.",
+ "Compressor": "Compressore",
+ "Delay": "Ritardo",
+ "Set the delay feedback.": "Impostare il feedback del ritardo.",
+ "Delay Mix": "Mix di ritardo",
+ "Set the delay mix.": "Imposta il mix di ritardo.",
+ "Folder Name": "Nome cartella",
+ "Select Custom Embedder": "Seleziona Embedder personalizzato",
+ "Refresh embedders": "Aggiorna embedder",
+ "Custom Embedder": "Incorporatore personalizzato",
+ "Upload .bin": "Carica .bin",
+ "Upload .json": "Carica .json",
+ "Speaker ID": "ID altoparlante",
+ "Set the delay seconds.": "Impostare i secondi di ritardo.",
+ "Move files to custom embedder folder": "Sposta i file in una cartella di incorporamento personalizzata",
+ "Name of the model creator. (Default: Unknown)": "Nome del creatore del modello. (Predefinito: Sconosciuto)",
+ "Set name": "Imposta nome",
+ "Select the speaker ID to use for the conversion.": "Seleziona l'ID del parlante da utilizzare per la conversione.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "Imposta la forza dell'autotune: più la aumenti, più si aggancerà alla griglia cromatica.",
+ "model information": "Informazioni sul modello",
+ "The name that will appear in the model information.": "Il nome che apparirà nelle informazioni del modello.",
+ "Model Creator": "Creatore di modelli",
+ "Model Author Name": "Nome dell'autore del modello"
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/ja_JA.json b/assets/i18n/languages/ja_JA.json
new file mode 100644
index 0000000000000000000000000000000000000000..640ffe4f05daecebb05ab41a139ff1fd579d4274
--- /dev/null
+++ b/assets/i18n/languages/ja_JA.json
@@ -0,0 +1,325 @@
+{
+ "Training": "トレーニング",
+ "Extra": "おまけ",
+ "Processing": "加工",
+ "Inference": "推論",
+ "Output Information": "出力情報",
+ "Merge Audios": "オーディオのマージ",
+ "Preprocess": "前処理",
+ "Settings": "設定",
+ "Audio Analyzer": "オーディオアナライザー",
+ "Plugins": "プラグイン",
+ "Report a Bug": "バグの報告",
+ "Model Information": "モデル情報",
+ "Download": "ダウンロード",
+ "Model Name": "モデル名",
+ "Audio cutting": "オーディオ分割",
+ "The output information will be displayed here.": "出力情報がここに表示されます。",
+ "Process effects": "エフェクトを処理",
+ "Dataset Path": "データセットパス",
+ "Name of the new model.": "新しいモデルの名前。",
+ "Dataset Name": "データセット名",
+ "Refresh Datasets": "データセットの更新",
+ "This section contains some extra utilities that often may be in experimental phases.": "このセクションには、実験段階にあることが多い追加のユーティリティがいくつか含まれています。",
+ "Dataset Creator": "データセットクリエーター",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "使いやすさとパフォーマンスにこだわったシンプルで高品質な音声変換ツール。",
+ "Path to the dataset folder.": "データセットフォルダーへのパス。",
+ "Enter model name": "モデル名を入力してください",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "データセットがすでに処理されている場合は、このオプションを無効にすることをお勧めします。",
+ "Enter dataset name": "データセット名を入力",
+ "Name of the new dataset.": "新しいデータセットの名前。",
+ "Upload Audio Dataset": "オーディオデータセットのアップロード",
+ "Extract": "抜く",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "オーディオ ファイルがデータセットに正常に追加されました。前処理ボタンをクリックしてください。",
+ "Enter dataset path": "データセットのパスを入力",
+ "Preprocess Dataset": "データセットの前処理",
+ "Sampling Rate": "サンプリングレート",
+ "Model Architecture": "モデルアーキテクチャ",
+ "Hop Length": "ホップ長",
+ "Version of the model architecture.": "モデルアーキテクチャのバージョン。",
+ "Embedder Model": "埋め込みモデル",
+ "The sampling rate of the audio files.": "オーディオファイルのサンプリングレート。",
+ "Batch Size": "バッチサイズ",
+ "Save Every Epoch": "すべてのエポックを保存",
+ "Total Epoch": "合計エポック",
+ "Model used for learning speaker embedding.": "スピーカー埋め込みの学習に使用されたモデル。",
+ "Pretrained": "事前学習済みモデルを使用する",
+ "Save Only Latest": "最新のみ保存",
+ "Save Every Weights": "すべてのウェイトを保存",
+ "Determine at how many epochs the model will saved at.": "モデルが何エポックで保存されるかを決定します。",
+ "Custom Pretrained": "カスタム事前トレーニング済みモデル",
+ "Upload Pretrained Model": "事前学習済みモデルのアップロード",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "システムがピッチの大幅な変化に移行するのにかかる時間を示します。ホップ長が小さいほど、推論に時間がかかりますが、ピッチ精度が高くなる傾向があります。",
+ "Specifies the overall quantity of epochs for the model training process.": "モデル学習プロセスの全体的なエポック数を指定します。",
+ "GPU Settings": "GPU設定",
+ "Refresh Custom Pretraineds": "カスタム事前トレーニング済みモデルの更新",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "GPUの利用可能なVRAMに合わせることをお勧めします。4 に設定すると精度は向上しますが処理は遅くなり、8 に設定するとより高速で標準的な結果が得られます。",
+ "Pretrained D Path": "カスタム事前学習済みDモデル",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "この設定により、各エポックの終了時にモデルの重みを保存できます。",
+ "Pretrained G Path": "カスタム事前トレーニング済みGモデル",
+ "GPU Number": "GPU番号",
+ "The file you dropped is not a valid pretrained file. Please try again.": "ドロップしたファイルは有効な事前学習済みファイルではありません。もう一度お試しください。",
+ "GPU Custom Settings": "GPUカスタム設定",
+ "Pretrained Custom Settings": "事前トレーニング済みモデルのカスタム設定",
+ "The GPU information will be displayed here.": "ここにGPU情報が表示されます。",
+ "0 to ∞ separated by -": "0 から ∞ は - で区切られます。",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "この設定を有効にすると、GファイルとDファイルは最新バージョンのみを保存するため、ストレージスペースが効果的に節約されます。",
+ "GPU Information": "GPU情報",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "GPU アーキテクチャが優れているユーザーに推奨される高度な GPU 設定を設定します。",
+ "Pitch Guidance": "ピッチガイダンス",
+ "Use CPU": "CPU を使用する",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "更新ボタンをクリックすると、ドロップダウンメニューに事前学習済みファイルが表示されます。",
+ "Force the use of CPU for training.": "トレーニングに CPU の使用を強制します。",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "前処理で使用する CPU コアの数。デフォルト設定はCPUコアであり、ほとんどの場合に推奨されます。",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "抽出プロセスで使用する CPU コアの数。デフォルト設定はCPUコアであり、ほとんどの場合に推奨されます。",
+ "Extract Features": "特徴量の抽出",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "前処理に使用するGPUの数をハイフン(-)で区切って入力して指定します。現時点では、マルチGPUを使用しても大きな影響はありません。",
+ "Cache Dataset in GPU": "GPU でのデータセットのキャッシュ",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "抽出に使用するGPUの数をハイフン(-)で区切って入力します。",
+ "Index Algorithm": "インデックスアルゴリズム",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "カスタムの事前学習済みモデルを利用すると、特定のユースケースに合わせて最適な事前学習済みモデルを選択することでパフォーマンスを大幅に向上させることができるため、優れた結果を得ることができます。",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "パフォーマンスを高速化するために、モデルの前処理を GPU で実行することを優先します。CPU を使用する場合は、GPU フィールドを空白のままにします。",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "パフォーマンスを高速化するために、モデル抽出を GPU で実行することを優先します。CPU を使用する場合は、GPU フィールドを空白のままにします。",
+ "Overtraining Detector": "過学習検出",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "独自のモデルをトレーニングする場合は、事前トレーニング済みのモデルを利用します。このアプローチにより、トレーニング時間が短縮され、全体的な品質が向上します。",
+ "Fresh Training": "フレッシュトレーニング",
+ "Cache the dataset in GPU memory to speed up the training process.": "データセットをGPUメモリにキャッシュして、トレーニングプロセスを高速化します。",
+ "Overtraining Threshold": "過学習のしきい値",
+ "Overtraining Detector Settings": "過学習検出の設定",
+ "Start Training": "トレーニングを開始",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "ピッチガイダンスを採用することで、ピッチを含む元の声のイントネーションを反映させることが可能になります。この機能は、歌唱や、元のメロディーやピッチパターンを保持することが不可欠なその他のシナリオで特に役立ちます。",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeansは、データセットをK個のクラスターに分割するクラスタリングアルゴリズムです。この設定は、大規模なデータセットに特に役立ちます。",
+ "Generate Index": "インデックスの生成",
+ "Export Model": "モデルのエクスポート",
+ "Stop Training": "トレーニングの停止",
+ "Exported Pth file": "エクスポートされた Pth ファイル",
+ "Exported Index file": "エクスポートされたインデックスファイル",
+ "Upload": "アップロード",
+ "Index File": "インデックスファイル",
+ "Voice Model": "音声モデル",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "この設定は、新しいモデルを最初からトレーニングする場合、またはトレーニングを再開する場合にのみ有効にします。以前に生成された重みとテンソルボードのログをすべて削除します。",
+ "Refresh": "リフレッシュ",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "改善が検出されない場合にモデルのトレーニングを停止するエポックの最大数を設定します。",
+ "Select the pth file to be exported": "エクスポートするpthファイルを選択します",
+ "Select the index file to be exported": "エクスポートするインデックスファイルを選択します",
+ "Unload Voice": "モデルのアンロード",
+ "Single": "単一ファイル",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "過学習を検出して、モデルがトレーニング データを十分に学習しすぎて、新しいデータに一般化する能力を失うのを防ぎます。",
+ "Select Audio": "オーディオを選択",
+ "Select the voice model to use for the conversion.": "変換に使用する音声モデルを選択します。",
+ "Select the index file to use for the conversion.": "変換に使用するインデックスファイルを選択します。",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "「アップロード」ボタンはGoogle Colab専用です:エクスポートしたファイルをGoogleドライブのApplioExportedフォルダにアップロードします。",
+ "Upload Audio": "オーディオのアップロード",
+ "Select the audio to convert.": "変換するオーディオを選択します。",
+ "Advanced Settings": "詳細設定",
+ "Output Path": "出力パス",
+ "Export Format": "エクスポート形式",
+ "Custom Output Path": "カスタム出力パス",
+ "Autotune": "オートチューン",
+ "Split Audio": "オーディオの分割",
+ "Select the format to export the audio.": "オーディオをエクスポートする形式を選択します。",
+ "Clean Audio": "オーディオをクリーニング",
+ "Clean Strength": "クリーニング強度",
+ "Upscale Audio": "オーディオをアップスケールする",
+ "Clear Outputs (Deletes all audios in assets/audios)": "出力をクリア (アセット/オーディオ内のすべてのオーディオを削除します)",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "出力オーディオが保存されるパス (デフォルトでは assets/audios/output.wav",
+ "Formant Shifting": "フォルマントシフティング",
+ "Presets are located in /assets/formant_shift folder": "プリセットは /assets/formant_shift フォルダにあります",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "オーディオをチャンクに分割して推論します.場合によってはより良い結果を得ることができます。",
+ "Browse presets for formanting": "フォルマンティングのプリセットを参照",
+ "Default value is 1.0": "デフォルト値は 1.0 です",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "推論にソフトオートチューンを適用し、歌声の変換に推奨します。",
+ "Pitch": "ピッチ",
+ "Quefrency for formant shifting": "フォルマントシフトのためのケフレンシー",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "オーディオを高品質にアップスケールします (低品質のオーディオに推奨)。(オーディオの処理に時間がかかる場合があります)",
+ "Timbre for formant shifting": "フォルマントシフトのための音色",
+ "Filter Radius": "フィルター半径",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "フォルマントシフトを有効にします。男性から女性へ、またはその逆の変換に使用されます。",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "ノイズ検出アルゴリズムを使用してオーディオ出力をクリーニングします。これは、音声の読み上げに推奨されます。",
+ "Volume Envelope": "ボリュームエンベロープ",
+ "Convert": "変換",
+ "Batch": "バッチ",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "クリーンアップレベルを希望のオーディオに設定し、上げるほどクリーンアップされますが、オーディオがより圧縮される可能性があります。",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "オーディオのピッチを設定し、値が高いほどピッチが高くなります。",
+ "Export Audio": "オーディオのエクスポート",
+ "Search Feature Ratio": "検索特徴量の割合",
+ "Protect Voiceless Consonants": "無声子音の保護",
+ "Pitch extraction algorithm": "ピッチ抽出アルゴリズム",
+ "Input Folder": "入力フォルダ",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "インデックスファイルによって及ぼされる影響。値が大きいほど、影響が大きくなります。ただし、低い値を選択すると、オーディオに存在するアーティファクトを軽減するのに役立ちます。",
+ "Output Folder": "出力フォルダ",
+ "Enter input path": "入力パスを入力",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "出力のボリュームエンベロープに置き換えるか、ブレンドします。比率が1に近いほど、出力エンベロープがより多く使用されます。",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "オーディオ変換に使用するピッチ抽出アルゴリズム。デフォルトのアルゴリズムは rmvpe で、ほとんどの場合に推奨されます。",
+ "Enter output path": "出力パスを入力",
+ "Select the folder containing the audios to convert.": "変換するオーディオを含むフォルダを選択します。",
+ "Voice Blender": "ボイスブレンダー",
+ "Select the folder where the output audios will be saved.": "出力オーディオを保存するフォルダを選択します。",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "数値が 3 以上の場合、収集されたトーン結果に中央値フィルタリングを使用すると、呼吸が減少する可能性があります。",
+ "Drag and drop your model here": "ここにモデルをドラッグアンドドロップします",
+ "Fusion": "融合",
+ "Blend Ratio": "ブレンド比率",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "明確な子音と呼吸音を保護して、電気音響の引き裂きやその他のアーティファクトを防ぎます。パラメータを最大値の 0.5 にプルすると、包括的な保護が提供されます。ただし、この値を小さくすると、保護の範囲が減少する一方で、インデックス作成の影響が軽減される可能性があります。",
+ "You can also use a custom path.": "カスタムパスを使用することもできます。",
+ "View model information": "モデル情報の表示",
+ "Model information to be placed": "配置するモデル情報",
+ "Path to Model": "モデルへのパス",
+ "Inroduce the model information": "モデル情報の提供",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "2 つの音声モデルを選択し、希望のブレンド率を設定して、まったく新しい音声にブレンドします。",
+ "Enter path to model": "モデルへのパスを入力",
+ "Model extraction": "モデルを抽出",
+ "View": "表示する",
+ "Model conversion": "モデル変換",
+ "Pth file": "Pth ファイル",
+ "The information to be placed in the model (You can leave it blank or put anything).": "モデルに配置する情報(空白のままにするか、何でも入れることができます)。",
+ "Output of the pth file": "pth ファイルの出力",
+ "Extract F0 Curve": "F0 カーブを抽出",
+ "Record": "記録",
+ "Record Screen": "画面録画",
+ "# How to Report an Issue on GitHub": "# GitHubで問題を報告する方法",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "位置をどちらか一方に調整すると、モデルは1番目または2番目により近くなります。",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. [GitHub Issues](https://github.com/IAHispano/Applio/issues)に移動し、[New Issue]ボタンをクリックします。",
+ "Stop Recording": "録音を停止する",
+ "Introduce the model .pth path": "モデルの.pthパスを導入",
+ "See Model Information": "モデル情報を見る",
+ "## Download Model": "## ダウンロードモデル",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1.下の[画面の記録]ボタンをクリックして、発生している問題の記録を開始します。",
+ "Model Link": "モデルリンク",
+ "Get information about the audio": "オーディオに関する情報を取得する",
+ "## Voice Blender": "## ボイスブレンダー",
+ "Download Model": "モデルのダウンロード",
+ "Introduce the model link": "モデルリンクを紹介",
+ "## Drop files": "## ファイルをドロップ",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": ".pth ファイルと .index ファイルをこのスペースにドラッグします。一方をドラッグしてから、もう一方をドラッグします。",
+ "Search": "捜索",
+ "## Search Model": "## 検索モデル",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2.問題の録音が終了したら、[録音の停止]ボタンをクリックします(同じボタンですが、アクティブに録音しているかどうかによってラベルが変わります)。",
+ "Introduce the model pth path": "モデルのpthパスを紹介",
+ "We couldn't find models by that name.": "その名前のモデルは見つかりませんでした。",
+ "TTS Speed": "TTSスピード",
+ "Introduce the model name to search.": "検索するモデル名を紹介します。",
+ "TTS Voices": "TTSボイス",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "f0 曲線は、時間の経過に伴う音声の基本周波数の変化を表し、ピッチがどのように上昇および下降するかを示します。",
+ "Increase or decrease TTS speed.": "TTS速度を増減します。",
+ "## Download Pretrained Models": "## 事前学習済みモデルのダウンロード",
+ "Select the TTS voice to use for the conversion.": "変換に使用する TTS 音声を選択します。",
+ "Text to Synthesize": "合成するテキスト",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. 提供された問題テンプレートを完成させ、必要に応じて詳細を含めるようにし、アセットセクションを使用して前のステップで記録したファイルをアップロードします。",
+ "And select the sampling rate": "そして、サンプリングレートを選択します。",
+ "Upload a .txt file": ".txtファイルをアップロードする",
+ "Enter the text to synthesize.": "合成するテキストを入力します。",
+ "Select the pretrained model you want to download.": "ダウンロードする事前学習済みモデルを選択します。",
+ "Input path for text file": "テキストファイルの入力パス",
+ "Enter text to synthesize": "合成するテキストを入力する",
+ "Output Path for TTS Audio": "TTS オーディオの出力パス",
+ "Output Path for RVC Audio": "RVCオーディオの出力パス",
+ "Enable Applio integration with Discord presence": "Applio と Discord プレゼンスの統合を有効にする",
+ "Enable fake GPU": "フェイクGPUを有効にする",
+ "Restart Applio": "Applioを再起動します",
+ "Enable Applio integration with applio.org/models using flask": "Flaskを使用してApplioと applio.org/models の統合を有効にする",
+ "The path to the text file that contains content for text to speech.": "テキスト読み上げのコンテンツを含むテキスト ファイルへのパス。",
+ "Precision": "精度",
+ "It will activate the possibility of downloading models with a click from the website.": "Webサイトからクリックするだけでモデルをダウンロードすることが可能になります。",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "これにより、Discordで現在のApplioアクティビティを表示が有効になります。",
+ "Select the theme you want to use. (Requires restarting Applio)": "使用するテーマを選択します。(Applioの再起動が必要です)",
+ "Language": "言語",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "GPU がないため、トレーニングは現在サポートされていません。トレーニングタブを有効にするには、設定タブに移動し、「Fake GPU」オプションを有効にします。",
+ "Select the language you want to use. (Requires restarting Applio)": "使用する言語を選択します。(Applioの再起動が必要です)",
+ "Theme": "テーマ",
+ "Update precision": "使用する精度を更新する",
+ "Drag your plugin.zip to install it": "plugin.zipをドラッグしてインストールします",
+ "Plugin Installer": "プラグインインストーラー",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "[トレーニング] タブをアクティブにします。ただし、このデバイスにはGPU機能がないため、トレーニングには対応していないことに注意してください。このオプションは、テストのみを目的としています。(このオプションはApplioを再起動します)",
+ "Version Checker": "バージョンチェッカー",
+ "Reverb": "リバーブ",
+ "Post-Process": "後処理",
+ "Check for updates": "アップデートの確認",
+ "Select the precision you want to use for training and inference.": "トレーニングと推論に使用する精度を選択します。",
+ "Reverb Room Size": "リバーブルームサイズ",
+ "Reverb Damping": "リバーブダンピング",
+ "Set the room size of the reverb.": "リバーブの部屋のサイズを設定します。",
+ "Apply reverb to the audio.": "オーディオにリバーブを適用します。",
+ "Reverb Wet Gain": "リバーブウェットゲイン",
+ "Post-process the audio to apply effects to the output.": "オーディオを後処理して、出力にエフェクトを適用します。",
+ "Reverb Dry Gain": "リバーブドライゲイン",
+ "Set the wet gain of the reverb.": "リバーブのウェットゲインを設定します。",
+ "Reverb Width": "リバーブ幅",
+ "Check which version of Applio is the latest to see if you need to update.": "Applioのどのバージョンが最新かを確認して、更新が必要かどうかを確認してください。",
+ "Set the damping of the reverb.": "リバーブのダンピングを設定します。",
+ "Set the dry gain of the reverb.": "リバーブのドライゲインを設定します。",
+ "Set the width of the reverb.": "リバーブの幅を設定します。",
+ "Set the freeze mode of the reverb.": "リバーブのフリーズモードを設定します。",
+ "Pitch Shift": "ピッチシフト",
+ "Reverb Freeze Mode": "リバーブフリーズモード",
+ "Limiter": "リミッタ",
+ "Apply pitch shift to the audio.": "オーディオにピッチシフトを適用します。",
+ "Pitch Shift Semitones": "ピッチシフト半音",
+ "Gain": "得",
+ "Distortion": "歪み",
+ "Apply limiter to the audio.": "オーディオにリミッターを適用します。",
+ "Set the pitch shift semitones.": "ピッチシフトを半音に設定します。",
+ "Limiter Threshold dB": "リミッターしきい値dB",
+ "Gain dB": "ゲインdB",
+ "Limiter Release Time": "リミッターリリースタイム",
+ "Set the limiter threshold dB.": "リミッターしきい値 dB を設定します。",
+ "Set the gain dB.": "ゲインdBを設定します。",
+ "Apply gain to the audio.": "オーディオにゲインを適用します。",
+ "Chorus": "コーラス",
+ "Set the limiter release time.": "リミッターのリリース時間を設定します。",
+ "Apply distortion to the audio.": "オーディオに歪みを適用します。",
+ "Set the distortion gain.": "ディストーションゲインを設定します。",
+ "Chorus Rate Hz": "コーラスレート Hz",
+ "Apply chorus to the audio.": "オーディオにコーラスを適用します。",
+ "Set the chorus depth.": "コーラスの深さを設定します。",
+ "Chorus Depth": "コーラスの深さ",
+ "Chorus Feedback": "コーラスフィードバック",
+ "Set the chorus rate Hz.": "コーラスレートをHzに設定します。",
+ "Distortion Gain": "ディストーションゲイン",
+ "Chorus Center Delay ms": "コーラスセンターディレイms",
+ "Bitcrush": "ビットクラッシュ",
+ "Set the chorus mix.": "コーラスミックスを設定します。",
+ "Set the chorus feedback.": "コーラスのフィードバックを設定します。",
+ "Chorus Mix": "コーラスミックス",
+ "Bitcrush Bit Depth": "Bitcrushビット深度",
+ "Set the chorus center delay ms.": "コーラスの中心ディレイmsを設定します。",
+ "Apply bitcrush to the audio.": "オーディオにbitcrushを適用します。",
+ "Clipping": "クリッピング",
+ "Compressor": "コンプレッサー",
+ "Set the bitcrush bit depth.": "bitcrush ビット深度を設定します。",
+ "Apply clipping to the audio.": "オーディオにクリッピングを適用します。",
+ "Clipping Threshold": "クリッピングしきい値",
+ "Set the clipping threshold.": "クリッピングのしきい値を設定します。",
+ "Delay": "ディレイ",
+ "Apply compressor to the audio.": "オーディオにコンプレッサーを適用します。",
+ "Compressor Threshold dB": "コンプレッサーしきい値dB",
+ "Compressor Ratio": "コンプレッサー比",
+ "Set the compressor ratio.": "コンプレッサー比を設定します。",
+ "Apply delay to the audio.": "オーディオにディレイを適用します。",
+ "Set the compressor attack ms.": "コンプレッサーのアタックmsを設定します。",
+ "Set the compressor release ms.": "コンプレッサーのリリースmsを設定します。",
+ "Set the compressor threshold dB.": "コンプレッサーのしきい値dBを設定します。",
+ "Compressor Release ms": "コンプレッサーリリースミリ秒",
+ "Compressor Attack ms": "コンプレッサーアタックms",
+ "Delay Seconds": "ディレイ秒数",
+ "Set the delay seconds.": "ディレイ秒数を設定します。",
+ "Set the delay mix.": "ディレイミックスを設定します。",
+ "Set the delay feedback.": "ディレイフィードバックを設定します。",
+ "Delay Mix": "ディレイミックス",
+ "Custom Embedder": "カスタムエンベッダー",
+ "Refresh embedders": "埋め込みのリフレッシュ",
+ "model information": "モデル情報",
+ "Upload .bin": ".binをアップロード",
+ "Delay Feedback": "ディレイフィードバック",
+ "Upload .json": ".jsonをアップロード",
+ "Select Custom Embedder": "カスタム埋め込みを選択します",
+ "Model Creator": "モデルクリエーター",
+ "Speaker ID": "スピーカーID",
+ "Move files to custom embedder folder": "ファイルをカスタム埋め込みフォルダーに移動する",
+ "Name of the model creator. (Default: Unknown)": "モデルの作成者の名前。(デフォルト: Unknown)",
+ "The name that will appear in the model information.": "モデル情報に表示される名前。",
+ "Set name": "名前を設定する",
+ "Folder Name": "フォルダ名",
+ "Select the speaker ID to use for the conversion.": "変換に使用するスピーカー ID を選択します。",
+ "Model Author Name": "モデル作成者名",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "オートチューンの強さを設定します - 上げるほど、クロマチックグリッドにスナップします。"
+}
diff --git a/assets/i18n/languages/jv_JV.json b/assets/i18n/languages/jv_JV.json
new file mode 100644
index 0000000000000000000000000000000000000000..9e26dfeeb6e641a33dae4961196235bdb965b21b
--- /dev/null
+++ b/assets/i18n/languages/jv_JV.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/assets/i18n/languages/ko_KO.json b/assets/i18n/languages/ko_KO.json
new file mode 100644
index 0000000000000000000000000000000000000000..2507ffb1df650699f8c6190e3ff8aa71235702af
--- /dev/null
+++ b/assets/i18n/languages/ko_KO.json
@@ -0,0 +1,325 @@
+{
+ "Inference": "추론",
+ "Training": "훈련",
+ "Processing": "가공",
+ "Extra": "여분의",
+ "Merge Audios": "오디오 병합",
+ "Download": "다운로드",
+ "Settings": "설정",
+ "Output Information": "출력 정보",
+ "Audio Analyzer": "오디오 분석기",
+ "Preprocess": "전처리",
+ "Report a Bug": "버그 신고",
+ "Plugins": "플러그인",
+ "Model Information": "모델 정보",
+ "Audio cutting": "오디오 커팅",
+ "The output information will be displayed here.": "출력 정보가 여기에 표시됩니다.",
+ "Process effects": "프로세스 효과",
+ "Model Name": "모델명",
+ "Enter model name": "모델명 입력",
+ "Dataset Name": "데이터 세트 이름",
+ "Name of the new model.": "새 모델의 이름입니다.",
+ "Dataset Path": "데이터셋 경로",
+ "Dataset Creator": "데이터셋 생성기",
+ "Path to the dataset folder.": "데이터 세트 폴더의 경로입니다.",
+ "Refresh Datasets": "데이터셋 새로 고침",
+ "Enter dataset name": "데이터 세트 이름 입력",
+ "Name of the new dataset.": "새 데이터 세트의 이름입니다.",
+ "Upload Audio Dataset": "오디오 데이터셋 업로드",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "사용 편의성과 성능에 중점을 둔 간단한 고품질 음성 변환 도구입니다.",
+ "Sampling Rate": "샘플링 속도",
+ "This section contains some extra utilities that often may be in experimental phases.": "이 섹션에는 종종 실험 단계에 있을 수 있는 몇 가지 추가 유틸리티가 포함되어 있습니다.",
+ "Enter dataset path": "데이터 세트 경로 입력",
+ "Extract": "추출물",
+ "Embedder Model": "임베더 모델",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "데이터 세트가 이미 처리된 경우 이 옵션을 비활성화하는 것이 좋습니다.",
+ "Hop Length": "홉 길이",
+ "Model Architecture": "모델 아키텍처",
+ "Preprocess Dataset": "데이터셋 전처리",
+ "The sampling rate of the audio files.": "오디오 파일의 샘플링 속도입니다.",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "오디오 파일이 데이터 세트에 성공적으로 추가되었습니다. 전처리 버튼을 클릭하십시오.",
+ "Version of the model architecture.": "모델 아키텍처의 버전입니다.",
+ "Batch Size": "배치 크기",
+ "Total Epoch": "총 에포크",
+ "Save Every Epoch": "모든 에포크 저장",
+ "Model used for learning speaker embedding.": "화자 임베딩을 학습하는 데 사용되는 모델입니다.",
+ "Pretrained": "사전 훈련된",
+ "Refresh Custom Pretraineds": "Custom Pretraineds 새로 고침",
+ "Save Only Latest": "최신 항목만 저장",
+ "Save Every Weights": "모든 무게를 저장하십시오",
+ "Upload Pretrained Model": "사전 훈련된 모델 업로드",
+ "Determine at how many epochs the model will saved at.": "모델이 얼마나 많은 Epochs에서 저장될지 결정합니다.",
+ "Custom Pretrained": "사용자 지정 사전 학습",
+ "Specifies the overall quantity of epochs for the model training process.": "모델 학습 프로세스에 대한 Epoch의 전체 수량을 지정합니다.",
+ "GPU Settings": "GPU 설정",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "시스템이 중요한 피치 변경으로 전환되는 데 걸리는 시간을 나타냅니다. 홉 길이가 작을수록 추론에 더 많은 시간이 필요하지만 피치 정확도가 높아지는 경향이 있습니다.",
+ "Pretrained Custom Settings": "사전 훈련된 사용자 지정 설정",
+ "GPU Number": "GPU 번호",
+ "Pretrained D Path": "사용자 지정 사전 훈련된 D",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "이 설정을 사용하면 각 Epoch가 끝날 때 모델의 가중치를 저장할 수 있습니다.",
+ "GPU Custom Settings": "GPU 사용자 지정 설정",
+ "Pretrained G Path": "사용자 지정 사전 훈련된 G",
+ "The file you dropped is not a valid pretrained file. Please try again.": "드롭한 파일은 유효한 사전 학습된 파일이 아닙니다. 다시 시도하십시오.",
+ "0 to ∞ separated by -": "0에서 ∞까지 - 로 구분",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "GPU의 사용 가능한 VRAM에 맞추는 것이 좋습니다. 4로 설정하면 정확도가 향상되지만 처리 속도가 느려지고, 8로 설정하면 더 빠르고 표준적인 결과를 얻을 수 있습니다.",
+ "The GPU information will be displayed here.": "GPU 정보가 여기에 표시됩니다.",
+ "GPU Information": "GPU 정보",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "이 설정을 사용하면 G 및 D 파일이 최신 버전만 저장되므로 저장 공간이 효과적으로 절약됩니다.",
+ "Use CPU": "CPU 사용",
+ "Pitch Guidance": "피치 가이드",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "새로 고침 버튼을 클릭하면 드롭다운 메뉴에서 사전 훈련된 파일을 볼 수 있습니다.",
+ "Extract Features": "피처 추출",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "더 나은 GPU 아키텍처를 사용하는 사용자에게 권장되는 고급 GPU 설정을 지정합니다.",
+ "Force the use of CPU for training.": "훈련을 위해 CPU를 강제로 사용합니다.",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "추출 프로세스에 사용할 CPU 코어 수입니다. 기본 설정은 대부분의 경우에 권장되는 cpu 코어입니다.",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "전처리에서 사용할 CPU 코어 수입니다. 기본 설정은 대부분의 경우에 권장되는 cpu 코어입니다.",
+ "Cache Dataset in GPU": "GPU의 캐시 데이터셋",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "전처리에 사용할 GPU의 수를 하이픈(-)으로 구분하여 입력하여 지정합니다. 현재로서는 다중 GPU를 사용해도 큰 효과가 없습니다.",
+ "Index Algorithm": "인덱스 알고리즘",
+ "Overtraining Detector": "Overtraining Detector",
+ "Overtraining Detector Settings": "Overtraining Detector 설정",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "자체 모델을 학습할 때 사전 학습된 모델을 활용합니다. 이 접근 방식은 교육 시간을 줄이고 전반적인 품질을 향상시킵니다.",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "사용자 지정 사전 훈련된 모델을 활용하면 특정 사용 사례에 맞는 가장 적합한 사전 훈련된 모델을 선택하면 성능이 크게 향상될 수 있으므로 우수한 결과를 얻을 수 있습니다.",
+ "Fresh Training": "새로운 교육",
+ "Stop Training": "훈련 중지",
+ "Start Training": "트레이닝 시작하기",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "더 빠른 성능을 위해 GPU에서 모델 추출을 실행하는 것을 우선시합니다. CPU를 사용하려면 GPU 필드를 비워 두기만 하면 됩니다.",
+ "Overtraining Threshold": "Overtraining Threshold(오버트레이닝 임계값)",
+ "Cache the dataset in GPU memory to speed up the training process.": "데이터셋을 GPU 메모리에 캐시하여 훈련 프로세스의 속도를 높입니다.",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans는 데이터 세트를 K 클러스터로 나누는 클러스터링 알고리즘입니다. 이 설정은 대규모 데이터 세트에 특히 유용합니다.",
+ "Generate Index": "인덱스 생성",
+ "Export Model": "모델 내보내기",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "추출에 사용할 GPU 수를 하이픈(-)으로 구분하여 입력하여 지정합니다.",
+ "Upload": "업로드",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "더 빠른 성능을 위해 GPU에서 모델 전처리를 실행하는 것을 우선시합니다. CPU를 사용하려면 GPU 필드를 비워 두기만 하면 됩니다.",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "피치 가이드를 사용하면 피치를 포함하여 원래 음성의 억양을 미러링하는 것이 가능해집니다. 이 기능은 노래 및 원래 멜로디 또는 피치 패턴을 보존하는 것이 필수적인 기타 시나리오에 특히 유용합니다.",
+ "Exported Pth file": "내보낸 Pth 파일",
+ "Exported Index file": "내보낸 색인 파일",
+ "Voice Model": "음성 모델",
+ "Index File": "인덱스 파일",
+ "Refresh": "리프레쉬",
+ "Select the index file to be exported": "내보낼 인덱스 파일을 선택합니다.",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "개선이 감지되지 않을 경우 모델이 훈련을 중지할 최대 epoch 수를 설정합니다.",
+ "Unload Voice": "언로드 보이스",
+ "Select the pth file to be exported": "내보낼 p번째 파일을 선택합니다.",
+ "Upload Audio": "오디오 업로드",
+ "Select Audio": "오디오 선택",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "'업로드'버튼은 Google colab 전용입니다 : 내 보낸 파일을 Google 드라이브의 ApplioExported 폴더에 업로드합니다.",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "새 모델을 처음부터 학습시키거나 훈련을 다시 시작하는 경우에만 이 설정을 사용하도록 설정합니다. 이전에 생성된 모든 가중치 및 텐서보드 로그를 삭제합니다.",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "모델이 훈련 데이터를 너무 잘 학습하여 새 데이터로 일반화하는 기능을 잃지 않도록 과잉 훈련을 감지합니다.",
+ "Advanced Settings": "Advanced Settings(고급 설정)",
+ "Select the index file to use for the conversion.": "변환에 사용할 색인 파일을 선택합니다.",
+ "Select the voice model to use for the conversion.": "변환에 사용할 음성 모델을 선택합니다.",
+ "Select the audio to convert.": "변환할 오디오를 선택합니다.",
+ "Single": "싱글",
+ "Export Format": "내보내기 형식",
+ "Split Audio": "오디오 분할",
+ "Custom Output Path": "사용자 지정 출력 경로",
+ "Clear Outputs (Deletes all audios in assets/audios)": "출력 지우기(자산/오디오의 모든 오디오 삭제)",
+ "Autotune": "오토튠",
+ "Clean Audio": "클린 오디오",
+ "Upscale Audio": "업스케일 오디오",
+ "Select the format to export the audio.": "오디오를 내보낼 형식을 선택합니다.",
+ "Clean Strength": "클린 스트렝스",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "출력 오디오가 저장될 경로로, 기본적으로 assets/audios/output.wav",
+ "Formant Shifting": "포먼트 시프팅",
+ "Default value is 1.0": "기본값은 1.0입니다.",
+ "Pitch": "음조",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "추론에 소프트 오토튠을 적용하여 노래 변환에 권장됩니다.",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "경우에 따라 더 나은 결과를 얻기 위해 추론을 위해 오디오를 청크로 분할합니다.",
+ "Presets are located in /assets/formant_shift folder": "사전 설정은 /assets/formant_shift 폴더에 있습니다.",
+ "Quefrency for formant shifting": "포먼트 이동을 위한 Quefrency",
+ "Browse presets for formanting": "포만팅을 위한 사전 설정 찾아보기",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "저품질 오디오에 권장되는 더 높은 품질로 오디오를 업스케일링합니다. (오디오를 처리하는 데 시간이 더 오래 걸릴 수 있음)",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "오디오 말하기에 권장되는 소음 감지 알고리즘을 사용하여 오디오 출력을 청소하십시오.",
+ "Filter Radius": "필터 반경",
+ "Timbre for formant shifting": "포먼트 시프팅을 위한 음색",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "포먼트 시프팅을 활성화합니다. 남성에서 여성으로 또는 그 반대로 변환하는 데 사용됩니다.",
+ "Output Path": "출력 경로",
+ "Volume Envelope": "볼륨 엔벨로프",
+ "Protect Voiceless Consonants": "무성 자음 보호",
+ "Search Feature Ratio": "Search Feature Ratio(검색 피처 비율)",
+ "Convert": "변환",
+ "Export Audio": "오디오 내보내기",
+ "Batch": "일괄",
+ "Pitch extraction algorithm": "피치 추출 알고리즘",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "정리 수준을 원하는 오디오로 설정하고 높일수록 정리가 많아지지만 오디오가 더 압축될 수 있습니다.",
+ "Input Folder": "입력 폴더",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "오디오의 피치를 설정하고 값이 높을수록 피치가 높아집니다.",
+ "Output Folder": "출력 폴더",
+ "Enter input path": "입력 경로 입력",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "출력의 볼륨 엔벨로프로 대체하거나 혼합합니다. 비율이 1에 가까울수록 출력 엔벨로프가 더 많이 사용됩니다.",
+ "## Voice Blender": "## 보이스 블렌더",
+ "Enter output path": "출력 경로 입력",
+ "Voice Blender": "보이스 블렌더",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "오디오 변환에 사용할 피치 추출 알고리즘입니다. 기본 알고리즘은 rmvpe이며, 대부분의 경우에 권장됩니다.",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "인덱스 파일에 의해 발휘된 영향; 값이 높을수록 영향력이 커집니다. 그러나 더 낮은 값을 선택하면 오디오에 있는 아티팩트를 완화하는 데 도움이 될 수 있습니다.",
+ "Select the folder containing the audios to convert.": "변환할 오디오가 들어 있는 폴더를 선택합니다.",
+ "Get information about the audio": "오디오에 대한 정보 가져오기",
+ "Fusion": "융해",
+ "Blend Ratio": "블렌드 비율(Blend Ratio)",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "뚜렷한 자음과 숨소리를 보호하여 전기 음향 찢어짐 및 기타 아티팩트를 방지합니다. 매개 변수를 최대값인 0.5로 끌어오면 포괄적인 보호가 제공됩니다. 그러나 이 값을 줄이면 보호 범위가 줄어들면서 인덱싱 효과가 완화될 수 있습니다.",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "숫자가 3보다 크거나 같은 경우 수집된 톤 결과에 중앙값 필터링을 사용하면 호흡이 감소할 수 있습니다.",
+ "Drag and drop your model here": "여기에 모델을 끌어다 놓습니다.",
+ "Select the folder where the output audios will be saved.": "출력 오디오가 저장될 폴더를 선택합니다.",
+ "Path to Model": "모델링으로 가는 길",
+ "View": "보기",
+ "Enter path to model": "모델 경로 입력",
+ "You can also use a custom path.": "사용자 지정 경로를 사용할 수도 있습니다.",
+ "Inroduce the model information": "모델 정보 도입",
+ "Model information to be placed": "배치할 모델 정보",
+ "View model information": "모델 정보 보기",
+ "Introduce the model pth path": "모델 pth 경로 소개",
+ "Model conversion": "모델 변환",
+ "Model extraction": "모델 추출",
+ "Pth file": "Pth 파일",
+ "Extract F0 Curve": "F0 곡선 추출하기",
+ "Output of the pth file": "p번째 파일의 출력",
+ "Record": "기록",
+ "The information to be placed in the model (You can leave it blank or put anything).": "모델에 배치할 정보(비워 두거나 아무 것이나 넣을 수 있음).",
+ "See Model Information": "모델 정보 보기",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "두 개의 음성 모델을 선택하고, 원하는 블렌드 비율을 설정하고, 완전히 새로운 보이스로 블렌딩합니다.",
+ "Record Screen": "녹화 화면",
+ "# How to Report an Issue on GitHub": "# GitHub에서 문제를 보고하는 방법",
+ "Introduce the model .pth path": "모델 .pth 경로 소개",
+ "## Download Model": "## 모델 다운로드",
+ "Stop Recording": "녹음 중지",
+ "Model Link": "모델 링크",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "위치를 한쪽 또는 다른 쪽으로 더 조정하면 모델이 첫 번째 또는 두 번째와 더 유사해집니다.",
+ "Introduce the model link": "모델 소개 링크",
+ "Download Model": "모델 다운로드",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. [GitHub Issues](https://github.com/IAHispano/Applio/issues)로 이동하여 'New Issue' 버튼을 클릭합니다.",
+ "## Drop files": "## 파일 드롭",
+ "Search": "검색",
+ "## Search Model": "## 검색 모델",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. 아래의 '녹화 화면' 버튼을 클릭하여 발생한 문제의 녹화를 시작합니다.",
+ "TTS Voices": "TTS 음성",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": ".pth 파일과 .index 파일을 이 공간으로 드래그합니다. 하나를 드래그한 다음 다른 하나를 드래그합니다.",
+ "TTS Speed": "TTS 속도",
+ "Introduce the model name to search.": "검색할 모델명을 소개합니다.",
+ "And select the sampling rate": "그리고 샘플링 속도를 선택합니다.",
+ "We couldn't find models by that name.": "우리는 그 이름의 모델을 찾을 수 없습니다.",
+ "Text to Synthesize": "합성할 텍스트",
+ "## Download Pretrained Models": "## 사전 훈련된 모델 다운로드",
+ "Select the pretrained model you want to download.": "다운로드하려는 사전 훈련된 모델을 선택합니다.",
+ "Upload a .txt file": ".txt 파일 업로드",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "f0 곡선은 시간 경과에 따른 음성의 기본 주파수 변화를 나타내며 피치가 어떻게 올라가고 내려가는지 보여줍니다.",
+ "Enter the text to synthesize.": "합성할 텍스트를 입력합니다.",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. 문제 기록이 끝나면 '기록 중지' 버튼을 클릭합니다(동일한 버튼이지만 활성 기록 중인지 여부에 따라 레이블이 변경됨).",
+ "Increase or decrease TTS speed.": "TTS 속도를 높이거나 낮춥니다.",
+ "Input path for text file": "텍스트 파일의 입력 경로",
+ "Output Path for TTS Audio": "TTS 오디오의 출력 경로",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. 제공된 문제 템플릿을 완료하고 필요에 따라 세부 정보를 포함하고 자산 섹션을 활용하여 이전 단계에서 기록된 파일을 업로드합니다.",
+ "Select the TTS voice to use for the conversion.": "변환에 사용할 TTS 음성을 선택합니다.",
+ "Enter text to synthesize": "합성할 텍스트를 입력합니다.",
+ "Theme": "주제",
+ "Enable Applio integration with Discord presence": "Discord 프레즌스와 Applio 통합 활성화",
+ "Output Path for RVC Audio": "RVC 오디오의 출력 경로",
+ "Restart Applio": "Applio 다시 시작",
+ "Language": "언어",
+ "Enable fake GPU": "가짜 GPU 활성화",
+ "Precision": "정밀",
+ "The path to the text file that contains content for text to speech.": "텍스트 음성 변환에 대한 콘텐츠가 포함된 텍스트 파일의 경로입니다.",
+ "Enable Applio integration with applio.org/models using flask": "플라스크를 사용하여 applio.org/models 와 Applio 통합 활성화",
+ "Select the theme you want to use. (Requires restarting Applio)": "사용할 테마를 선택합니다. (Applio를 다시 시작해야 함)",
+ "It will activate the possibility of downloading models with a click from the website.": "웹 사이트에서 클릭 한 번으로 모델을 다운로드 할 수 있습니다.",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "Discord에서 현재 Applio 활동을 표시할 수 있는 가능성을 활성화합니다.",
+ "Select the language you want to use. (Requires restarting Applio)": "사용할 언어를 선택합니다. (Applio를 다시 시작해야 함)",
+ "Update precision": "정밀도 업데이트",
+ "Version Checker": "버전 검사기",
+ "Check for updates": "업데이트 확인",
+ "Drag your plugin.zip to install it": "plugin.zip 드래그하여 설치하십시오.",
+ "Post-Process": "포스트 프로세스",
+ "Plugin Installer": "플러그인 설치 프로그램",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "기차 탭을 활성화합니다. 그러나 이 장치에는 GPU 기능이 없으므로 교육이 지원되지 않습니다. 이 옵션은 테스트 목적으로만 사용됩니다. (이 옵션은 Applio를 다시 시작합니다)",
+ "Reverb": "반향",
+ "Select the precision you want to use for training and inference.": "학습 및 추론에 사용할 정밀도를 선택합니다.",
+ "Reverb Room Size": "리버브 룸 크기",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "훈련은 현재 GPU가 없기 때문에 지원되지 않습니다. 교육 탭을 활성화하려면 설정 탭으로 이동하여 '가짜 GPU' 옵션을 활성화합니다.",
+ "Reverb Damping": "리버브 댐핑",
+ "Reverb Wet Gain": "리버브 웻 게인",
+ "Reverb Width": "리버브 폭",
+ "Apply reverb to the audio.": "오디오에 반향을 적용합니다.",
+ "Reverb Dry Gain": "리버브 드라이 게인",
+ "Set the damping of the reverb.": "리버브의 댐핑을 설정합니다.",
+ "Set the wet gain of the reverb.": "리버브의 웻 게인을 설정합니다.",
+ "Set the room size of the reverb.": "리버브의 방 크기를 설정합니다.",
+ "Reverb Freeze Mode": "리버브 프리즈 모드",
+ "Post-process the audio to apply effects to the output.": "오디오를 후처리하여 출력에 효과를 적용합니다.",
+ "Check which version of Applio is the latest to see if you need to update.": "Applio의 최신 버전을 확인하여 업데이트가 필요한지 확인하십시오.",
+ "Pitch Shift": "피치 시프트",
+ "Set the width of the reverb.": "반향의 너비를 설정합니다.",
+ "Limiter": "제한",
+ "Set the dry gain of the reverb.": "리버브의 드라이 게인을 설정합니다.",
+ "Pitch Shift Semitones": "피치 시프트 반음",
+ "Set the freeze mode of the reverb.": "리버브의 고정 모드를 설정합니다.",
+ "Set the pitch shift semitones.": "피치 시프트 반음을 설정합니다.",
+ "Gain": "이득",
+ "Gain dB": "이득 dB",
+ "Distortion": "왜곡",
+ "Limiter Release Time": "리미터 릴리스 시간",
+ "Apply pitch shift to the audio.": "오디오에 피치 시프트를 적용합니다.",
+ "Apply limiter to the audio.": "오디오에 리미터를 적용합니다.",
+ "Limiter Threshold dB": "리미터 임계값 dB",
+ "Set the limiter threshold dB.": "리미터 임계값 dB를 설정합니다.",
+ "Chorus": "합창",
+ "Set the gain dB.": "게인 dB를 설정합니다.",
+ "Apply gain to the audio.": "오디오에 게인을 적용합니다.",
+ "Distortion Gain": "디스토션 게인(Distortion Gain)",
+ "Set the limiter release time.": "리미터 해제 시간을 설정합니다.",
+ "Apply distortion to the audio.": "오디오에 왜곡을 적용합니다.",
+ "Chorus Rate Hz": "코러스 속도 Hz",
+ "Set the distortion gain.": "왜곡 게인을 설정합니다.",
+ "Chorus Depth": "코러스 뎁스",
+ "Apply chorus to the audio.": "오디오에 코러스를 적용합니다.",
+ "Chorus Center Delay ms": "코러스 중심 지연 ms",
+ "Set the chorus rate Hz.": "코러스 속도 Hz를 설정합니다.",
+ "Set the chorus center delay ms.": "코러스 중심 지연 ms를 설정합니다.",
+ "Chorus Feedback": "코러스 피드백",
+ "Chorus Mix": "코러스 믹스",
+ "Bitcrush": "비트크러시",
+ "Set the chorus depth.": "코러스 깊이를 설정합니다.",
+ "Bitcrush Bit Depth": "Bitcrush 비트 깊이",
+ "Set the chorus feedback.": "코러스 피드백을 설정합니다.",
+ "Clipping": "클리핑",
+ "Set the chorus mix.": "코러스 믹스를 설정합니다.",
+ "Apply bitcrush to the audio.": "오디오에 bitcrush를 적용합니다.",
+ "Compressor": "압축기",
+ "Compressor Ratio": "압축기 비율",
+ "Clipping Threshold": "클리핑 임계값(Clipping Threshold)",
+ "Compressor Threshold dB": "압축기 임계값 dB",
+ "Set the clipping threshold.": "클리핑 임계값을 설정합니다.",
+ "Set the bitcrush bit depth.": "비트크러시 비트 깊이를 설정합니다.",
+ "Apply clipping to the audio.": "오디오에 클리핑을 적용합니다.",
+ "Compressor Attack ms": "압축기 공격 ms",
+ "Delay": "지연",
+ "Apply compressor to the audio.": "오디오에 압축기를 적용합니다.",
+ "Set the compressor ratio.": "압축기 비율을 설정합니다.",
+ "Compressor Release ms": "압축기 릴리스 ms",
+ "Set the compressor threshold dB.": "압축기 임계값 dB를 설정합니다.",
+ "Delay Seconds": "지연 시간(초)",
+ "Set the compressor attack ms.": "압축기 공격 ms를 설정합니다.",
+ "Delay Mix": "딜레이 믹스",
+ "Delay Feedback": "지연 피드백",
+ "Set the delay mix.": "딜레이 믹스를 설정합니다.",
+ "Set the compressor release ms.": "압축기 릴리스 ms를 설정합니다.",
+ "Apply delay to the audio.": "오디오에 지연을 적용합니다.",
+ "Custom Embedder": "맞춤형 임베더",
+ "Select Custom Embedder": "Custom Embedder를 선택합니다.",
+ "Set the delay seconds.": "지연 시간(초)을 설정합니다.",
+ "model information": "모델 정보",
+ "Set the delay feedback.": "지연 피드백을 설정합니다.",
+ "Refresh embedders": "임베더 새로 고침",
+ "Folder Name": "폴더 이름",
+ "Upload .bin": ".bin 업로드",
+ "Upload .json": ".json 업로드",
+ "Speaker ID": "스피커 ID",
+ "Model Creator": "모델 작성자",
+ "Set name": "세트 이름",
+ "Move files to custom embedder folder": "사용자 지정 임베더 폴더로 파일 이동",
+ "Model Author Name": "모델 작성자 이름",
+ "Name of the model creator. (Default: Unknown)": "모델 작성자의 이름입니다. (기본값: 알 수 없음)",
+ "The name that will appear in the model information.": "모델 정보에 표시될 이름입니다.",
+ "Select the speaker ID to use for the conversion.": "변환에 사용할 스피커 ID를 선택합니다.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "오토튠 강도 설정 - 더 많이 높일수록 반음계 그리드에 더 많이 스냅됩니다."
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/lt_LT.json b/assets/i18n/languages/lt_LT.json
new file mode 100644
index 0000000000000000000000000000000000000000..e655e12745493bb5abbe817c8fee1cb1fe8ffcc3
--- /dev/null
+++ b/assets/i18n/languages/lt_LT.json
@@ -0,0 +1,325 @@
+{
+ "Extra": "Papildomų",
+ "Training": "Mokymo",
+ "Inference": "Išvada",
+ "Output Information": "Išvesties informacija",
+ "Processing": "Perdirbimo",
+ "Audio Analyzer": "Garso analizatorius",
+ "The output information will be displayed here.": "Čia bus rodoma išvesties informacija.",
+ "Merge Audios": "Sujunkite \"Audios\"",
+ "This section contains some extra utilities that often may be in experimental phases.": "Šiame skyriuje yra keletas papildomų paslaugų, kurios dažnai gali būti eksperimentinėse fazėse.",
+ "Settings": "Parametrai",
+ "Download": "Atsisiųsti",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "Paprastas, aukštos kokybės balso konvertavimo įrankis, orientuotas į naudojimo paprastumą ir našumą.",
+ "Model Information": "Modelio informacija",
+ "Plugins": "Įskiepiai",
+ "Report a Bug": "Praneškite apie klaidą",
+ "Preprocess": "Išankstinis apdorojimas",
+ "Audio cutting": "Garso pjovimas",
+ "Process effects": "Proceso efektai",
+ "Model Name": "Modelio pavadinimas",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "Rekomenduojama išjungti šią parinktį, jei jūsų duomenų rinkinys jau buvo apdorotas.",
+ "Enter model name": "Įveskite modelio pavadinimą",
+ "Dataset Path": "Duomenų rinkinio kelias",
+ "Path to the dataset folder.": "Kelias į duomenų rinkinio aplanką.",
+ "Name of the new model.": "Naujo modelio pavadinimas.",
+ "Refresh Datasets": "Duomenų rinkinių atnaujinimas",
+ "Dataset Name": "Duomenų rinkinio pavadinimas",
+ "Dataset Creator": "Duomenų rinkinio kūrėjas",
+ "Enter dataset name": "Duomenų rinkinio pavadinimo įvedimas",
+ "Name of the new dataset.": "Naujo duomenų rinkinio pavadinimas.",
+ "Upload Audio Dataset": "Garso duomenų rinkinio įkėlimas",
+ "Enter dataset path": "Duomenų rinkinio kelio įvedimas",
+ "Sampling Rate": "Mėginių ėmimo dažnis",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Garso failas sėkmingai įtrauktas į duomenų rinkinį. Spustelkite išankstinio apdorojimo mygtuką.",
+ "Model Architecture": "Modelio architektūra",
+ "Embedder Model": "Įdėjimo modelis",
+ "Extract": "Ekstraktas",
+ "Preprocess Dataset": "Išankstinio apdorojimo duomenų rinkinys",
+ "Version of the model architecture.": "Modelio architektūros versija.",
+ "The sampling rate of the audio files.": "Garso failų atrankos dažnis.",
+ "Hop Length": "Apynių ilgis",
+ "Model used for learning speaker embedding.": "Modelis, naudojamas garsiakalbių įterpimo mokymuisi.",
+ "Batch Size": "Partijos dydis",
+ "Save Every Epoch": "Išsaugokite kiekvieną epochą",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Nurodo trukmę, per kurią sistema pereina prie reikšmingo žingsnio pokyčio. Mažesniems apynių ilgiams reikia daugiau laiko išvadoms padaryti, tačiau paprastai gaunamas didesnis žingsnio tikslumas.",
+ "Pretrained": "Iš anksto apmokytas",
+ "Determine at how many epochs the model will saved at.": "Nustatykite, kiek epochų modelis bus išsaugotas.",
+ "Total Epoch": "Bendra epocha",
+ "Specifies the overall quantity of epochs for the model training process.": "Nurodo bendrą epochų kiekį modelio mokymo procesui.",
+ "Save Only Latest": "Išsaugoti tik naujausią",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Patartina jį suderinti su galimu GPU VRAM. 4 nustatymas siūlo geresnį tikslumą, bet lėtesnį apdorojimą, o 8 užtikrina greitesnius ir standartinius rezultatus.",
+ "Save Every Weights": "Taupykite kiekvieną svorį",
+ "Custom Pretrained": "Individualus išankstinis mokymas",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Šis nustatymas leidžia išsaugoti modelio svorius kiekvienos epochos pabaigoje.",
+ "Upload Pretrained Model": "Įkelkite iš anksto parengtą modelį",
+ "Refresh Custom Pretraineds": "Atnaujinti pasirinktinius iš anksto parengtus",
+ "Pretrained Custom Settings": "Iš anksto parengti pasirinktiniai nustatymai",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Įjungus šį nustatymą, G ir D failai išsaugos tik naujausias versijas, efektyviai taupydami saugyklos vietą.",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Naudojant pasirinktinius iš anksto parengtus modelius, galima pasiekti puikių rezultatų, nes pasirinkus tinkamiausius iš anksto parengtus modelius, pritaikytus konkrečiam naudojimo atvejui, galima žymiai pagerinti našumą.",
+ "The file you dropped is not a valid pretrained file. Please try again.": "Failas, kurį numetėte, nėra tinkamas iš anksto parengtas failas. Bandykite dar kartą.",
+ "GPU Settings": "GPU nustatymai",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Spustelėkite atnaujinimo mygtuką, kad išskleidžiamajame meniu pamatytumėte iš anksto paruoštą failą.",
+ "Pretrained G Path": "Individualus iš anksto apmokytas G",
+ "GPU Number": "GPU numeris",
+ "GPU Custom Settings": "GPU pasirinktiniai nustatymai",
+ "Pretrained D Path": "Individualus iš anksto apmokytas D",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Nustato išplėstinius GPU nustatymus, rekomenduojamus vartotojams, turintiems geresnę GPU architektūrą.",
+ "0 to ∞ separated by -": "Nuo 0 iki ∞ atskirtas -",
+ "GPU Information": "GPU informacija",
+ "The GPU information will be displayed here.": "Čia bus rodoma GPU informacija.",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "CPU branduolių, naudojamų išankstiniame procese, skaičius. Numatytasis nustatymas yra jūsų procesoriaus branduoliai, kuris rekomenduojamas daugeliu atvejų.",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Nurodykite GPU, kuriuos norite naudoti išankstiniam apdorojimui, skaičių, įvesdami juos atskirai brūkšneliais (-). Šiuo metu kelių gpu naudojimas neturės reikšmingo poveikio.",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "CPU branduolių, naudojamų ekstrahavimo procese, skaičius. Numatytasis nustatymas yra jūsų procesoriaus branduoliai, kuris rekomenduojamas daugeliu atvejų.",
+ "Pitch Guidance": "Žingsnio gairės",
+ "Use CPU": "Naudokite procesorių",
+ "Force the use of CPU for training.": "Priverskite naudoti procesorių mokymui.",
+ "Extract Features": "Ištraukos funkcijos",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Nurodykite GPU, kuriuos norite naudoti išskleidimui, skaičių, įvesdami juos atskirai brūkšneliais (-).",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Mokydamiesi naudokite iš anksto parengtus modelius. Šis metodas sumažina mokymo trukmę ir pagerina bendrą kokybę.",
+ "Cache Dataset in GPU": "Talpyklos duomenų rinkinys GPU",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Naudojant aukščio nurodymus, tampa įmanoma atspindėti pradinio balso intonaciją, įskaitant jo aukštį. Ši funkcija ypač vertinga dainuojant ir kitais atvejais, kai būtina išsaugoti originalią melodiją ar tono modelį.",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Mes teikiame pirmenybę modelio ištraukimo vykdymui GPU, kad būtų greitesnis veikimas. Jei norite naudoti procesorių, tiesiog palikite GPU lauką tuščią.",
+ "Index Algorithm": "Indekso algoritmas",
+ "Cache the dataset in GPU memory to speed up the training process.": "Talpykloje laikykite duomenų rinkinį GPU atmintyje, kad pagreitintumėte mokymo procesą.",
+ "Overtraining Detector": "Persitreniravimo detektorius",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Pirmenybę teikiame išankstiniam modelio apdorojimui GPU, kad veiktų greičiau. Jei norite naudoti procesorių, tiesiog palikite GPU lauką tuščią.",
+ "Overtraining Detector Settings": "Persitreniravimo detektoriaus nustatymai",
+ "Overtraining Threshold": "Persitreniravimo slenkstis",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans yra grupavimo algoritmas, kuris padalija duomenų rinkinį į K grupes. Šis parametras ypač naudingas dideliems duomenų rinkiniams.",
+ "Fresh Training": "Šviežias mokymas",
+ "Start Training": "Pradėkite treniruotis",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Aptikti pervargimą, kad modelis per gerai neišmoktų mokymo duomenų ir neprarastų galimybės apibendrinti į naujus duomenis.",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Nustatykite maksimalų epochų skaičių, kurį norite, kad jūsų modelis nutrauktų mokymą, jei nebus aptikta pagerėjimo.",
+ "Export Model": "Eksportavimo modelis",
+ "Generate Index": "Generuoti indeksą",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "Įjunkite šį parametrą tik tuo atveju, jei treniruojate naują modelį nuo nulio arba iš naujo paleidžiate mokymą. Ištrina visus anksčiau sugeneruotus svorius ir tenzorinės lentos žurnalus.",
+ "Exported Pth file": "Eksportuotas Pth failas",
+ "Upload": "Nusiuntimas",
+ "Exported Index file": "Eksportuotas indekso failas",
+ "Select the index file to be exported": "Pasirinkite norimą eksportuoti indekso failą",
+ "Voice Model": "Balso modelis",
+ "Select the pth file to be exported": "Pasirinkite pth failą, kurį norite eksportuoti",
+ "Stop Training": "Sustabdyti mokymą",
+ "Refresh": "Atnaujinti",
+ "Index File": "Rodyklės failas",
+ "Select the voice model to use for the conversion.": "Pasirinkite balso modelį, kurį norite naudoti konvertuodami.",
+ "Select the index file to use for the conversion.": "Pasirinkite indekso failą, kurį norite naudoti konvertuodami.",
+ "Single": "Vieną",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "Mygtukas \"Įkelti\" skirtas tik \"Google Colab\": Įkelia eksportuotus failus į \"ApplioExported\" aplanką \"Google\" diske.",
+ "Select Audio": "Pasirinkite Garsas",
+ "Unload Voice": "Iškrauti balsą",
+ "Upload Audio": "Garso įrašo įkėlimas",
+ "Select the audio to convert.": "Pasirinkite garsą, kurį norite konvertuoti.",
+ "Advanced Settings": "Išplėstiniai nustatymai",
+ "Custom Output Path": "Pasirinktinis išvesties kelias",
+ "Export Format": "Eksportavimo formatas",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Išvalyti išvestis (ištrinami visi ištekliuose / garso įrašuose esantys garso įrašai)",
+ "Output Path": "Išvesties kelias",
+ "Split Audio": "Padalintas garsas",
+ "Select the format to export the audio.": "Pasirinkite formatą, kuriuo norite eksportuoti garsą.",
+ "Autotune": "Autotune",
+ "Clean Strength": "Švarus stiprumas",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "Kelias, kuriuo pagal numatytuosius nustatymus bus išsaugotas išvesties garsas turtuose / garso įrašuose / output.wav",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Savo išvadoms taikykite švelnų automatinį derinimą, rekomenduojamą dainuojant konversijas.",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Padalinkite garsą į dalis, kad padarytumėte išvadą, kad kai kuriais atvejais gautumėte geresnių rezultatų.",
+ "Clean Audio": "Švarus garsas",
+ "Upscale Audio": "\"Upscale\" garsas",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Išvalykite garso išvestį naudodami triukšmo aptikimo algoritmus, rekomenduojamus garsams kalbėti.",
+ "Formant Shifting": "Formantų poslinkis",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Įgalinti formantų perkėlimą. Naudojamas vyrų ir moterų konvertijoms ir atvirkščiai.",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Padidinkite garsą iki aukštesnės kokybės, rekomenduojamos žemos kokybės garsams. (Garso apdorojimas gali užtrukti ilgiau)",
+ "Presets are located in /assets/formant_shift folder": "Išankstiniai nustatymai yra aplanke /assets/formant_shift",
+ "Browse presets for formanting": "Formavimo išankstinių nustatymų naršymas",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Nustatykite norimą garso valymo lygį, kuo labiau jį padidinsite, tuo labiau jis išvalys, tačiau gali būti, kad garsas bus labiau suspaustas.",
+ "Quefrency for formant shifting": "Quefrency formantų poslinkiui",
+ "Pitch": "Pikio",
+ "Timbre for formant shifting": "Formanto poslinkio tembras",
+ "Default value is 1.0": "Numatytoji reikšmė yra 1,0",
+ "Search Feature Ratio": "Paieškos funkcijų santykis",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Nustatykite garso aukštį, kuo didesnė vertė, tuo didesnis žingsnis.",
+ "Volume Envelope": "Tūrio vokas",
+ "Filter Radius": "Filtro spindulys",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Rodyklės rinkmenos įtaka; didesnė vertė atitinka didesnę įtaką. Tačiau pasirinkus mažesnes reikšmes, galima sušvelninti garso įraše esančius artefaktus.",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Jei skaičius yra didesnis arba lygus trims, naudojant surinktų tonų rezultatų medianą, gali sumažėti kvėpavimas.",
+ "Protect Voiceless Consonants": "Apsaugokite bebalsius priebalsius",
+ "Convert": "Konvertuoti",
+ "Pitch extraction algorithm": "Pikio ištraukimo algoritmas",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Pakeiskite arba sumaišykite su išvesties tūrio apvalkalu. Kuo artimesnis santykis yra 1, tuo daugiau naudojamas išvesties vokas.",
+ "Batch": "Paketinę",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Žingsnio ištraukimo algoritmas, naudojamas garso konvertavimui. Numatytasis algoritmas yra rmvpe, kuris rekomenduojamas daugeliu atvejų.",
+ "Export Audio": "Eksportuoti garsą",
+ "Input Folder": "Įvesties aplankas",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Apsaugokite skirtingus priebalsius ir kvėpavimo garsus, kad išvengtumėte elektroakustinio plyšimo ir kitų artefaktų. Parametro traukimas iki maksimalios 0, 5 vertės suteikia visapusišką apsaugą. Tačiau sumažinus šią vertę gali sumažėti apsaugos mastas ir kartu gali sumažėti indeksavimo poveikis.",
+ "Enter input path": "Įveskite įvesties kelią",
+ "Enter output path": "Įveskite išvesties kelią",
+ "Output Folder": "Išvesties aplankas",
+ "Select the folder where the output audios will be saved.": "Pasirinkite aplanką, kuriame bus išsaugoti išvesties garsai.",
+ "Get information about the audio": "Informacijos apie garso įrašą gavimas",
+ "Voice Blender": "Balso maišytuvas",
+ "Select the folder containing the audios to convert.": "Pasirinkite aplanką, kuriame yra garso įrašai, kuriuos norite konvertuoti.",
+ "Drag and drop your model here": "Nuvilkite savo modelį čia",
+ "Fusion": "Fusion",
+ "## Voice Blender": "## Balso maišytuvas",
+ "Blend Ratio": "Mišinio santykis",
+ "You can also use a custom path.": "Taip pat galite naudoti pasirinktinį kelią.",
+ "Path to Model": "Kelias į modelį",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Pasirinkite du balso modelius, nustatykite norimą mišinio procentą ir sujunkite juos į visiškai naują balsą.",
+ "Enter path to model": "Įveskite kelią į modelį",
+ "Model information to be placed": "Pateiktina modelio informacija",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Pakoregavus padėtį labiau į vieną ar kitą pusę, modelis taps panašesnis į pirmąją ar antrąją.",
+ "View": "Rodinys",
+ "Inroduce the model information": "Įveskite modelio informaciją",
+ "View model information": "Peržiūrėti modelio informaciją",
+ "Introduce the model pth path": "Pristatykite modelį pth kelias",
+ "Model extraction": "Modelio ištraukimas",
+ "Model conversion": "Modelio konvertavimas",
+ "Pth file": "Pth failas",
+ "The information to be placed in the model (You can leave it blank or put anything).": "Informacija, kurią reikia įdėti į modelį (galite palikti ją tuščią arba įdėti bet ką).",
+ "Output of the pth file": "Pth failo išvestis",
+ "Extract F0 Curve": "Ištraukite F0 kreivę",
+ "# How to Report an Issue on GitHub": "# Kaip pranešti apie problemą \"GitHub\".",
+ "Record": "Įrašas",
+ "Record Screen": "Įrašymo ekranas",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Spustelėkite žemiau esantį mygtuką \"Įrašyti ekraną\", kad pradėtumėte įrašyti problemą, su kuria susiduriate.",
+ "Stop Recording": "Sustabdyti įrašymą",
+ "Introduce the model .pth path": "Pristatykite modelį .pth kelias",
+ "See Model Information": "Žiūrėkite modelio informaciją",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Eikite į [GitHub Issues](https://github.com/IAHispano/Applio/issues) ir spustelėkite mygtuką \"Nauja problema\".",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "F0 kreivė rodo balso bazinio dažnio pokyčius laikui bėgant, parodydama, kaip žingsnis kyla ir krinta.",
+ "## Download Model": "## Atsisiųsti modelį",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Baigę įrašyti problemą, spustelėkite mygtuką \"Sustabdyti įrašymą\" (tas pats mygtukas, tačiau etiketė keičiasi priklausomai nuo to, ar aktyviai įrašote, ar ne).",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Užpildykite pateiktą problemos šabloną, užtikrindami, kad prireikus būtų įtraukta išsami informacija, ir naudokite skyrių Ištekliai, kad įkeltumėte įrašytą failą iš ankstesnio veiksmo.",
+ "Model Link": "Modelio nuoroda",
+ "Download Model": "Atsisiųsti modelį",
+ "Introduce the model link": "Pristatykite modelio nuorodą",
+ "Search": "Ieškoti",
+ "## Drop files": "## Numeskite failus",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Vilkite .pth ir .index failus į šią vietą. Vilkite vieną, o tada kitą.",
+ "## Search Model": "## Paieškos modelis",
+ "Introduce the model name to search.": "Įveskite modelio pavadinimą, kad galėtumėte ieškoti.",
+ "We couldn't find models by that name.": "Negalėjome rasti modelių tokiu pavadinimu.",
+ "## Download Pretrained Models": "## Atsisiųskite iš anksto apmokytus modelius",
+ "And select the sampling rate": "Ir pasirinkite mėginių ėmimo dažnį.",
+ "TTS Speed": "TTS greitis",
+ "TTS Voices": "TTS balsai",
+ "Text to Synthesize": "Tekstas, kurį reikia sintezuoti",
+ "Increase or decrease TTS speed.": "Padidinkite arba sumažinkite TTS greitį.",
+ "Enter the text to synthesize.": "Įveskite tekstą, kurį norite sintezuoti.",
+ "Select the TTS voice to use for the conversion.": "Pasirinkite TTS balsą, kurį norite naudoti konvertuodami.",
+ "Upload a .txt file": ".txt failo nusiuntimas",
+ "Select the pretrained model you want to download.": "Pasirinkite iš anksto parengtą modelį, kurį norite atsisiųsti.",
+ "Input path for text file": "Tekstinio failo įvesties kelias",
+ "The path to the text file that contains content for text to speech.": "Kelias į tekstinį failą, kuriame yra teksto į kalbą turinys.",
+ "Output Path for TTS Audio": "TTS garso išvesties kelias",
+ "Enter text to synthesize": "Įveskite tekstą, kurį norite sintezuoti",
+ "Output Path for RVC Audio": "RVC garso išvesties kelias",
+ "Enable Applio integration with Discord presence": "Įgalinkite \"Applio\" integraciją su \"Discord\" buvimu",
+ "Theme": "Tema",
+ "Language": "Kalba",
+ "Enable fake GPU": "Įgalinti netikrą GPU",
+ "Restart Applio": "Iš naujo paleiskite \"Applio\".",
+ "Select the theme you want to use. (Requires restarting Applio)": "Pasirinkite norimą naudoti temą. (Reikia iš naujo paleisti \"Applio\")",
+ "It will activate the possibility of downloading models with a click from the website.": "Tai suaktyvins galimybę atsisiųsti modelius vienu paspaudimu iš svetainės.",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "Tai suaktyvins galimybę rodyti dabartinę \"Applio\" veiklą \"Discord\".",
+ "Precision": "Tikslumo",
+ "Enable Applio integration with applio.org/models using flask": "Įgalinkite \"Applio\" integraciją su applio.org/models kolba",
+ "Update precision": "Atnaujinimo tikslumas",
+ "Select the language you want to use. (Requires restarting Applio)": "Pasirinkite norimą naudoti kalbą. (Reikia iš naujo paleisti \"Applio\")",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Suaktyvina traukinio skirtuką. Tačiau atminkite, kad šiam įrenginiui trūksta GPU galimybių, todėl mokymas nepalaikomas. Ši parinktis skirta tik bandymams. (Ši parinktis iš naujo paleis \"Applio\")",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "Mokymas šiuo metu nepalaikomas, nes nėra GPU. Norėdami suaktyvinti mokymo skirtuką, eikite į nustatymų skirtuką ir įgalinkite parinktį \"Fake GPU\".",
+ "Select the precision you want to use for training and inference.": "Pasirinkite tikslumą, kurį norite naudoti mokymui ir išvadoms.",
+ "Plugin Installer": "Įskiepių diegimo programa",
+ "Version Checker": "Versijų tikrintuvas",
+ "Drag your plugin.zip to install it": "Vilkite plugin.zip, kad jį įdiegtumėte",
+ "Check for updates": "Patikrinkite, ar yra naujinimų",
+ "Reverb": "Reverb",
+ "Post-Process": "Po proceso",
+ "Reverb Room Size": "Reverb kambario dydis",
+ "Set the room size of the reverb.": "Nustatykite reverbo kambario dydį.",
+ "Apply reverb to the audio.": "Taikykite reverbą garsui.",
+ "Set the damping of the reverb.": "Nustatykite reverbo slopinimą.",
+ "Reverb Damping": "Reverb slopinimas",
+ "Set the wet gain of the reverb.": "Nustatykite drėgną reverbo padidėjimą.",
+ "Post-process the audio to apply effects to the output.": "Apdorokite garsą, kad išvestims pritaikytumėte efektus.",
+ "Reverb Wet Gain": "Reverb šlapias prieaugis",
+ "Reverb Dry Gain": "Reverb sausas pelnas",
+ "Check which version of Applio is the latest to see if you need to update.": "Patikrinkite, kuri \"Applio\" versija yra naujausia, kad sužinotumėte, ar reikia atnaujinti.",
+ "Set the dry gain of the reverb.": "Nustatykite sausą reverbo padidėjimą.",
+ "Reverb Width": "Reverbų plotis",
+ "Set the width of the reverb.": "Nustatykite reverbo plotį.",
+ "Reverb Freeze Mode": "Reverb užšalimo režimas",
+ "Pitch Shift": "Žingsnio poslinkis",
+ "Set the freeze mode of the reverb.": "Nustatykite reverbo užšalimo režimą.",
+ "Limiter": "Ribotuvas",
+ "Apply pitch shift to the audio.": "Taikykite garsui aukščio poslinkį.",
+ "Pitch Shift Semitones": "Pikio poslinkio pustoniai",
+ "Set the pitch shift semitones.": "Nustatykite žingsnio poslinkio pustonius.",
+ "Limiter Threshold dB": "Ribotuvo slenkstis dB",
+ "Limiter Release Time": "Ribotuvo išleidimo laikas",
+ "Set the limiter threshold dB.": "Nustatykite ribotuvo slenkstį dB.",
+ "Gain": "Įgyti",
+ "Set the limiter release time.": "Nustatykite ribotuvo išleidimo laiką.",
+ "Gain dB": "Gauti dB",
+ "Distortion": "Iškraipymo",
+ "Apply limiter to the audio.": "Taikykite ribotuvą garsui.",
+ "Apply gain to the audio.": "Taikykite stiprinimą garsui.",
+ "Chorus": "Choras",
+ "Set the gain dB.": "Nustatykite stiprinimo dB.",
+ "Apply distortion to the audio.": "Taikykite iškraipymus garsui.",
+ "Set the distortion gain.": "Nustatykite iškraipymo padidėjimą.",
+ "Distortion Gain": "Iškraipymo padidėjimas",
+ "Apply chorus to the audio.": "Taikykite chorą garsui.",
+ "Chorus Rate Hz": "Choro dažnis Hz",
+ "Set the chorus rate Hz.": "Nustatykite choro dažnį Hz.",
+ "Set the chorus depth.": "Nustatykite choro gylį.",
+ "Chorus Mix": "Choro mišinys",
+ "Set the chorus mix.": "Nustatykite choro mišinį.",
+ "Set the chorus feedback.": "Nustatykite choro grįžtamąjį ryšį.",
+ "Set the chorus center delay ms.": "Nustatykite choro centro vėlavimą ms.",
+ "Chorus Feedback": "Choro grįžtamasis ryšys",
+ "Clipping": "Karpymas",
+ "Chorus Center Delay ms": "Choro centro vėlavimas ms",
+ "Bitcrush": "Bitcrush",
+ "Apply bitcrush to the audio.": "Taikykite bitcrush garso įrašui.",
+ "Bitcrush Bit Depth": "Bitcrush bitų gylis",
+ "Set the bitcrush bit depth.": "Nustatykite bitcrush bitų gylį.",
+ "Clipping Threshold": "Iškirpimo slenkstis",
+ "Compressor": "Kompresorius",
+ "Apply clipping to the audio.": "Taikykite iškarpą garso įrašui.",
+ "Set the clipping threshold.": "Nustatykite iškirpimo slenkstį.",
+ "Apply compressor to the audio.": "Taikykite kompresorių garsui.",
+ "Compressor Threshold dB": "Kompresoriaus slenkstis dB",
+ "Compressor Ratio": "Kompresoriaus santykis",
+ "Delay": "Sutrukdyti",
+ "Set the compressor ratio.": "Nustatykite kompresoriaus santykį.",
+ "Set the compressor threshold dB.": "Nustatykite kompresoriaus slenkstį dB.",
+ "Compressor Release ms": "Kompresoriaus atleidimas ms",
+ "Compressor Attack ms": "Kompresoriaus ataka ms",
+ "Set the compressor attack ms.": "Nustatykite kompresoriaus ataką ms.",
+ "Set the compressor release ms.": "Nustatykite kompresoriaus atleidimą ms.",
+ "Apply delay to the audio.": "Taikykite delsą garsui.",
+ "Delay Seconds": "Vėlavimo sekundės",
+ "Set the delay seconds.": "Nustatykite delsos sekundes.",
+ "Set the delay feedback.": "Nustatykite delsos grįžtamąjį ryšį.",
+ "Delay Mix": "Vėlavimo mišinys",
+ "Delay Feedback": "Vėlavimo grįžtamasis ryšys",
+ "Custom Embedder": "Pasirinktinis įdėklas",
+ "Folder Name": "Aplanko pavadinimas",
+ "model information": "Modelio informacija",
+ "Select Custom Embedder": "Pasirinkite Pasirinktinis įdėklas",
+ "Refresh embedders": "Atnaujinti įdėklius",
+ "Upload .bin": "Įkelti .bin",
+ "Upload .json": "Įkelti .json",
+ "Model Creator": "Modelio kūrėjas",
+ "Name of the model creator. (Default: Unknown)": "Modelio kūrėjo vardas. (Numatytoji reikšmė: nežinoma)",
+ "Move files to custom embedder folder": "Perkelkite failus į pasirinktinį įdėjimo aplanką",
+ "Speaker ID": "Garsiakalbio ID",
+ "Select the speaker ID to use for the conversion.": "Pasirinkite garsiakalbio ID, kurį norite naudoti konvertuodami.",
+ "Set the delay mix.": "Nustatykite delsos mišinį.",
+ "Model Author Name": "Modelio autoriaus vardas",
+ "Set name": "Nustatyti pavadinimą",
+ "The name that will appear in the model information.": "Pavadinimas, kuris bus rodomas modelio informacijoje.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "Nustatykite automatinio derinimo stiprumą - kuo daugiau jį padidinsite, tuo labiau jis užsifiksuos prie chromatinio tinklelio.",
+ "Chorus Depth": "Choro gylis"
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/lv_LV.json b/assets/i18n/languages/lv_LV.json
new file mode 100644
index 0000000000000000000000000000000000000000..2c238bb600c9b004e0e0ad769e97f499742f5f1f
--- /dev/null
+++ b/assets/i18n/languages/lv_LV.json
@@ -0,0 +1,325 @@
+{
+ "Extra": "Papildu",
+ "Processing": "Apstrādes",
+ "Training": "Apmācību",
+ "Inference": "Secinājumu",
+ "Merge Audios": "Audio sapludināšana",
+ "Output Information": "Informācija par izvadi",
+ "The output information will be displayed here.": "Izejas informācija tiks parādīta šeit.",
+ "Audio Analyzer": "Audio analizators",
+ "This section contains some extra utilities that often may be in experimental phases.": "Šajā sadaļā ir daži papildu komunālie pakalpojumi, kas bieži var būt eksperimentālos posmos.",
+ "Settings": "Iestatījumus",
+ "Download": "Lejupielādēt",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "Vienkāršs, augstas kvalitātes balss konvertēšanas rīks, kas vērsts uz lietošanas ērtumu un veiktspēju.",
+ "Preprocess": "Priekšprocess",
+ "Model Information": "Informācija par modeli",
+ "Report a Bug": "Ziņot par kļūdu",
+ "Plugins": "Spraudņi",
+ "Process effects": "Procesa ietekme",
+ "Audio cutting": "Audio griešana",
+ "Model Name": "Modeļa nosaukums",
+ "Enter model name": "Ievadiet modeļa nosaukumu",
+ "Name of the new model.": "Jaunā modeļa nosaukums.",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "Ieteicams deaktivizēt šo opciju, ja datu kopa jau ir apstrādāta.",
+ "Dataset Creator": "Datu kopas veidotājs",
+ "Dataset Path": "Datu kopas ceļš",
+ "Path to the dataset folder.": "Ceļš uz datu kopas mapi.",
+ "Name of the new dataset.": "Jaunās datu kopas nosaukums.",
+ "Refresh Datasets": "Datu kopu atsvaidzināšana",
+ "Enter dataset name": "Ievadiet datu kopas nosaukumu",
+ "Dataset Name": "Datu kopas nosaukums",
+ "Upload Audio Dataset": "Audio datu kopas augšupielāde",
+ "Enter dataset path": "Datu kopas ceļa ievadīšana",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Audio fails ir veiksmīgi pievienots datu kopai. Lūdzu, noklikšķiniet uz pogas Pirmapstrāde.",
+ "The sampling rate of the audio files.": "Audio failu iztveršanas frekvence.",
+ "Sampling Rate": "Paraugu ņemšanas frekvence",
+ "Model Architecture": "Modeļa arhitektūra",
+ "Version of the model architecture.": "Modeļa arhitektūras versija.",
+ "Preprocess Dataset": "Pirmapstrādes datu kopa",
+ "Embedder Model": "Iegulšanas modelis",
+ "Extract": "Ekstrakts",
+ "Hop Length": "Apiņu garums",
+ "Batch Size": "Partijas lielums",
+ "Model used for learning speaker embedding.": "Modelis, ko izmanto skaļruņu iegulšanas apguvei.",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Apzīmē ilgumu, kas nepieciešams, lai sistēma pārietu uz būtiskām piķa izmaiņām. Mazāki apiņu garumi prasa vairāk laika secinājumu izdarīšanai, taču tiem ir tendence dot lielāku piķa precizitāti.",
+ "Total Epoch": "Kopējais laikmets",
+ "Save Every Epoch": "Saglabājiet katru laikmetu",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Ieteicams to saskaņot ar jūsu GPU pieejamo VRAM. Iestatījums 4 piedāvā uzlabotu precizitāti, bet lēnāku apstrādi, savukārt 8 nodrošina ātrākus un standarta rezultātus.",
+ "Save Only Latest": "Saglabāt tikai jaunāko",
+ "Determine at how many epochs the model will saved at.": "Nosakiet, cik laikmetos modelis tiks saglabāts.",
+ "Pretrained": "Iepriekš apmācīts",
+ "Save Every Weights": "Ietaupiet visus svarus",
+ "Upload Pretrained Model": "Iepriekš apmācīta modeļa augšupielāde",
+ "Pretrained Custom Settings": "Iepriekš apmācīti pielāgotie iestatījumi",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Šis iestatījums ļauj saglabāt modeļa svarus katra laikmeta beigās.",
+ "Refresh Custom Pretraineds": "Pielāgotu iepriekš apmācītu personu atsvaidzināšana",
+ "Specifies the overall quantity of epochs for the model training process.": "Norāda modeļa apmācības procesa kopējo laikmetu daudzumu.",
+ "Custom Pretrained": "Pielāgots iepriekš apmācīts",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Iespējojot šo iestatījumu, G un D faili saglabās tikai to jaunākās versijas, efektīvi ietaupot krātuves vietu.",
+ "The file you dropped is not a valid pretrained file. Please try again.": "Nomestais fails nav derīgs iepriekš apmācīts fails. Lūdzu, mēģiniet vēlreiz.",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Izmantojot pielāgotus iepriekš apmācītus modeļus, var iegūt izcilus rezultātus, jo, izvēloties vispiemērotākos iepriekš apmācītos modeļus, kas pielāgoti konkrētajam lietošanas gadījumam, var ievērojami uzlabot veiktspēju.",
+ "Pretrained G Path": "Pielāgots iepriekš apmācīts G",
+ "GPU Settings": "GPU iestatījumi",
+ "Pretrained D Path": "Pielāgots iepriekš apmācīts D",
+ "GPU Custom Settings": "GPU pielāgotie iestatījumi",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Noklikšķiniet uz atsvaidzināšanas pogas, lai nolaižamajā izvēlnē skatītu iepriekš apmācīto failu.",
+ "GPU Number": "GPU numurs",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Iestata papildu GPU iestatījumus, ieteicams lietotājiem ar labāku GPU arhitektūru.",
+ "The GPU information will be displayed here.": "GPU informācija tiks parādīta šeit.",
+ "0 to ∞ separated by -": "0 līdz ∞ atdalīti ar -",
+ "Pitch Guidance": "Piķa vadība",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "CPU kodolu skaits, kas jāizmanto priekšprocesā. Noklusējuma iestatījums ir jūsu procesora kodoli, kas ir ieteicams vairumā gadījumu.",
+ "GPU Information": "GPU informācija",
+ "Use CPU": "Izmantojiet CPU",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Norādiet GPU skaitu, ko vēlaties izmantot izgūšanai, ievadot tos atdalītus ar defisēm (-).",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Norādiet GPU skaitu, ko vēlaties izmantot priekšprocesam, ievadot tos atdalītus ar defisēm (-). Šobrīd vairāku gpu izmantošanai nebūs būtiskas ietekmes.",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "Ekstrakcijas procesā izmantojamo CPU kodolu skaits. Noklusējuma iestatījums ir jūsu procesora kodoli, kas ir ieteicams vairumā gadījumu.",
+ "Extract Features": "Ekstrakta funkcijas",
+ "Force the use of CPU for training.": "Piespiediet CPU izmantošanu apmācībai.",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Izmantojot piķa vadību, kļūst iespējams atspoguļot sākotnējās balss intonāciju, ieskaitot tās piķi. Šī funkcija ir īpaši vērtīga dziedāšanai un citiem scenārijiem, kur ir būtiski saglabāt oriģinālo melodiju vai piķa rakstu.",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Izmantojiet iepriekš apmācītus modeļus, apmācot savu. Šī pieeja samazina apmācības ilgumu un uzlabo vispārējo kvalitāti.",
+ "Cache Dataset in GPU": "Kešatmiņas datu kopa GPU",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Mēs par prioritāti izvirzām modeļa priekšapstrādes palaišanu GPU, lai nodrošinātu ātrāku veiktspēju. Ja vēlaties izmantot CPU, vienkārši atstājiet GPU lauku tukšu.",
+ "Index Algorithm": "Indeksa algoritms",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Mēs par prioritāti izvirzām modeļa ekstrakcijas veikšanu GPU, lai nodrošinātu ātrāku veiktspēju. Ja vēlaties izmantot CPU, vienkārši atstājiet GPU lauku tukšu.",
+ "Cache the dataset in GPU memory to speed up the training process.": "Kešatmiņā saglabājiet datu kopu GPU atmiņā, lai paātrinātu apmācības procesu.",
+ "Overtraining Detector Settings": "Pārtrenēšanās detektora iestatījumi",
+ "Overtraining Threshold": "Pārtrenēšanās slieksnis",
+ "Overtraining Detector": "Pārtrenēšanās detektors",
+ "Start Training": "Sāciet apmācību",
+ "Fresh Training": "Svaiga apmācība",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans ir klasterizācijas algoritms, kas datu kopu sadala K klasteros. Šis iestatījums ir īpaši noderīgs lielām datu kopām.",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Iestatiet maksimālo laikmetu skaitu, kuru vēlaties, lai jūsu modelis pārtrauktu apmācību, ja netiek konstatēti uzlabojumi.",
+ "Stop Training": "Pārtrauciet apmācību",
+ "Generate Index": "Indeksa ģenerēšana",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Atklājiet pārslodzi, lai neļautu modelim pārāk labi apgūt apmācības datus un zaudēt spēju vispārināt uz jauniem datiem.",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "Iespējojiet šo iestatījumu tikai tad, ja apmācāt jaunu modeli no nulles vai atsākat apmācību. Dzēš visus iepriekš ģenerētos svarus un tenzorda žurnālus.",
+ "Export Model": "Eksporta modelis",
+ "Exported Pth file": "Eksportētais Pth fails",
+ "Upload": "Augšupielādēt",
+ "Select the pth file to be exported": "Atlasiet eksportējamo pth failu",
+ "Exported Index file": "Eksportētā indeksa fails",
+ "Select the index file to be exported": "Atlasiet eksportējamo indeksa failu",
+ "Refresh": "Atsvaidzināt",
+ "Index File": "Indeksa fails",
+ "Select the voice model to use for the conversion.": "Atlasiet pārvēršanai izmantojamo balss modeli.",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "Poga \"Augšupielādēt\" ir paredzēta tikai Google colab: augšupielādē eksportētos failus mapē ApplioExported jūsu Google diskā.",
+ "Single": "Vienu",
+ "Voice Model": "Balss modelis",
+ "Unload Voice": "Izlādējiet balsi",
+ "Upload Audio": "Augšupielādēt audio",
+ "Select Audio": "Atlasiet Audio",
+ "Select the audio to convert.": "Atlasiet konvertējamo audio.",
+ "Advanced Settings": "Papildu iestatījumi",
+ "Select the index file to use for the conversion.": "Atlasiet indeksa failu, ko izmantot pārvēršanai.",
+ "Custom Output Path": "Pielāgots izvades ceļš",
+ "Export Format": "Eksporta formāts",
+ "Output Path": "Izvades ceļš",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Notīrīt izejas (dzēš visus audioierakstus aktīvos/audio)",
+ "Split Audio": "Sadalīt audio",
+ "Select the format to export the audio.": "Atlasiet formātu, lai eksportētu audio.",
+ "Autotune": "Autotune",
+ "Clean Audio": "Audio tīrīšana",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "Ceļš, pa kuru pēc noklusējuma tiks saglabāts izejas audio aktīvos/audios/output.wav",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Sadaliet audio gabalos, lai izdarītu secinājumus, lai dažos gadījumos iegūtu labākus rezultātus.",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Saviem secinājumiem lietojiet mīkstu autotune, kas ieteicams dziedāšanas reklāmguvumiem.",
+ "Upscale Audio": "Augsta līmeņa audio",
+ "Clean Strength": "Tīrs spēks",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Notīriet audio izeju, izmantojot trokšņa noteikšanas algoritmus, kas ieteicami audio runāšanai.",
+ "Formant Shifting": "Formantu maiņa",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Iespējojiet formantu maiņu. Izmanto vīriešu un sieviešu konvertēšanai un otrādi.",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Uzlabojiet audio kvalitāti līdz augstākai kvalitātei, ieteicams zemas kvalitātes audio. (Audio apstrāde var aizņemt ilgāku laiku)",
+ "Default value is 1.0": "Noklusējuma vērtība ir 1,0",
+ "Browse presets for formanting": "Pārlūkot sākotnējos formēšanas iestatījumus",
+ "Quefrency for formant shifting": "Quefrency formantu maiņai",
+ "Pitch": "Piķis",
+ "Timbre for formant shifting": "Tembrs formantu maiņai",
+ "Presets are located in /assets/formant_shift folder": "Sākotnējie iestatījumi atrodas mapē /aktīvi/formant_shift",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Iestatiet tīrīšanas līmeni vēlamajam audio, jo vairāk to palielināsit, jo vairāk tas tiks iztīrīts, taču ir iespējams, ka audio tiks saspiests.",
+ "Filter Radius": "Filtra rādiuss",
+ "Search Feature Ratio": "Meklēšanas funkciju attiecība",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Iestatiet audio piķi, jo augstāka vērtība, jo lielāks ir piķis.",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Indeksa faila ietekme; augstāka vērtība atbilst lielākai ietekmei. Tomēr, izvēloties zemākas vērtības, var palīdzēt mazināt audio esošos artefaktus.",
+ "Convert": "Pārvērst",
+ "Protect Voiceless Consonants": "Bezbalss līdzskaņu aizsardzība",
+ "Batch": "Partijas",
+ "Pitch extraction algorithm": "Piķa ekstrakcijas algoritms",
+ "Export Audio": "Audio eksportēšana",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Ja skaitlis ir lielāks vai vienāds ar trīs, izmantojot savākto toņu rezultātu vidējo filtrēšanu, var samazināties elpošana.",
+ "Volume Envelope": "Apjoma aploksne",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Aizstāj vai sajauc ar izvades tilpuma aploksni. Jo tuvāk attiecība ir 1, jo vairāk tiek izmantota izejas aploksne.",
+ "Input Folder": "Ievades mape",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Aizsargājiet atšķirīgus līdzskaņus un elpošanas skaņas, lai novērstu elektroakustisko asarošanu un citus artefaktus. Parametra vilkšana līdz maksimālajai vērtībai 0,5 nodrošina visaptverošu aizsardzību. Tomēr šīs vērtības samazināšana varētu samazināt aizsardzības apjomu, vienlaikus potenciāli mazinot indeksācijas efektu.",
+ "Select the folder containing the audios to convert.": "Atlasiet mapi, kurā ir konvertējamie audio.",
+ "Enter input path": "Ievadiet ievades ceļu",
+ "Output Folder": "Izvades mape",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Piķa ekstrakcijas algoritms, ko izmantot audio konvertēšanai. Noklusējuma algoritms ir rmvpe, kas ir ieteicams vairumā gadījumu.",
+ "Enter output path": "Ievadiet izvades ceļu",
+ "Select the folder where the output audios will be saved.": "Atlasiet mapi, kurā tiks saglabāti izejas audio.",
+ "Fusion": "Kodolsintēzes",
+ "Voice Blender": "Balss blenderis",
+ "Get information about the audio": "Informācijas iegūšana par audio",
+ "## Voice Blender": "## Balss blenderis",
+ "Blend Ratio": "Maisījuma attiecība",
+ "You can also use a custom path.": "Varat arī izmantot pielāgotu ceļu.",
+ "Drag and drop your model here": "Velciet un nometiet savu modeli šeit",
+ "Path to Model": "Ceļš uz modeli",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Pozīcijas pielāgošana vairāk uz vienu vai otru pusi padarīs modeli līdzīgāku pirmajam vai otrajam.",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Atlasiet divus balss modeļus, iestatiet vēlamo sapludināšanas procentuālo daudzumu un sapludiniet tos pilnīgi jaunā balsī.",
+ "Enter path to model": "Ievadiet ceļu uz modeli",
+ "Model information to be placed": "Izvietojamā informācija par modeli",
+ "View": "Skats",
+ "Inroduce the model information": "Ievietojiet informāciju par modeli",
+ "View model information": "Modeļa informācijas skatīšana",
+ "Introduce the model pth path": "Iepazīstiniet ar pth ceļa modeli",
+ "Model extraction": "Modeļa ekstrakcija",
+ "Model conversion": "Modeļa konvertēšana",
+ "Output of the pth file": "Pth faila izvade",
+ "Pth file": "Pth fails",
+ "The information to be placed in the model (You can leave it blank or put anything).": "Informācija, kas jāievieto modelī (Jūs varat atstāt to tukšu vai ievietot kaut ko).",
+ "Extract F0 Curve": "Ekstrakta F0 līkne",
+ "# How to Report an Issue on GitHub": "# Kā ziņot par problēmu vietnē GitHub",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "F0 līkne attēlo balss bāzes frekvences izmaiņas laika gaitā, parādot, kā piķis paceļas un krīt.",
+ "Record": "Rekords",
+ "Record Screen": "Ierakstīšanas ekrāns",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Dodieties uz [GitHub problēmas](https://github.com/IAHispano/Applio/issues) un noklikšķiniet uz pogas \"Jauna problēma\".",
+ "Stop Recording": "Pārtraukt ierakstīšanu",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Noklikšķiniet uz pogas \"Ierakstīt ekrānu\", lai sāktu ierakstīt radušos problēmu.",
+ "Model Link": "Modeļa saite",
+ "See Model Information": "Skatīt informāciju par modeli",
+ "Introduce the model .pth path": "Iepazīstiniet ar modeļa .pth ceļu",
+ "Introduce the model link": "Iepazīstiniet ar modeļa saiti",
+ "Download Model": "Lejupielādēt modeli",
+ "## Download Model": "## Lejupielādēt modeli",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Kad esat pabeidzis ierakstīt problēmu, noklikšķiniet uz pogas \"Pārtraukt ierakstīšanu\" (tā pati poga, bet etiķete mainās atkarībā no tā, vai jūs aktīvi ierakstāt vai nē).",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Aizpildiet sniegto problēmas veidni, pēc vajadzības iekļaujot detalizētu informāciju, un izmantojiet aktīvu sadaļu, lai augšupielādētu ierakstīto failu no iepriekšējā soļa.",
+ "Search": "Meklēt",
+ "## Search Model": "## Meklēšanas modelis",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Velciet .pth failu un .index failu šajā vietā. Velciet vienu un pēc tam otru.",
+ "## Drop files": "## Nometiet failus",
+ "Introduce the model name to search.": "Iepazīstiniet ar modeļa nosaukumu, lai meklētu.",
+ "We couldn't find models by that name.": "Mēs nevarējām atrast modeļus ar šādu nosaukumu.",
+ "## Download Pretrained Models": "## Lejupielādējiet iepriekš apmācītus modeļus",
+ "Select the pretrained model you want to download.": "Atlasiet iepriekš apmācīto modeli, kuru vēlaties lejupielādēt.",
+ "TTS Speed": "TTS ātrums",
+ "TTS Voices": "TTS balsis",
+ "Text to Synthesize": "Teksts, ko sintezēt",
+ "Select the TTS voice to use for the conversion.": "Atlasiet TTS balsi, ko izmantot pārvēršanai.",
+ "Increase or decrease TTS speed.": "Palieliniet vai samaziniet TTS ātrumu.",
+ "Enter the text to synthesize.": "Ievadiet tekstu, lai sintezētu.",
+ "Upload a .txt file": ".txt faila augšupielāde",
+ "Input path for text file": "Teksta faila ievades ceļš",
+ "Output Path for TTS Audio": "TTS audio izvades ceļš",
+ "Enter text to synthesize": "Ievadiet tekstu, lai sintezētu",
+ "Output Path for RVC Audio": "RVC audio izejas ceļš",
+ "The path to the text file that contains content for text to speech.": "Ceļš uz teksta failu, kurā ir teksta pārveidotājs skaņā (TPS) saturs.",
+ "Enable Applio integration with Discord presence": "Applio integrācijas iespējošana ar Discord klātbūtni",
+ "Theme": "Dizains",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "Tas aktivizēs iespēju parādīt pašreizējo Applio darbību nesaskaņās.",
+ "Enable Applio integration with applio.org/models using flask": "Applio integrācijas iespējošana ar applio.org/models, izmantojot kolbu",
+ "Enable fake GPU": "Iespējojiet viltotu GPU",
+ "It will activate the possibility of downloading models with a click from the website.": "Tas aktivizēs iespēju lejupielādēt modeļus ar klikšķi no vietnes.",
+ "Restart Applio": "Restartējiet Applio",
+ "Language": "Valoda",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "Apmācība pašlaik netiek atbalstīta, jo nav GPU. Lai aktivizētu apmācības cilni, dodieties uz iestatījumu cilni un iespējojiet'Viltus GPU'opcija.",
+ "Select the theme you want to use. (Requires restarting Applio)": "Atlasiet dizainu, kuru vēlaties izmantot. (Nepieciešams restartēt Applio)",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Aktivizē vilciena cilni. Tomēr, lūdzu, ņemiet vērā, ka šai ierīcei trūkst GPU iespēju, tāpēc apmācība netiek atbalstīta. Šī opcija ir paredzēta tikai testēšanas nolūkos. (Šī opcija restartēs Applio)",
+ "Select the language you want to use. (Requires restarting Applio)": "Atlasiet valodu, kuru vēlaties izmantot. (Nepieciešams restartēt Applio)",
+ "Update precision": "Atjaunināšanas precizitāte",
+ "Precision": "Precision",
+ "Select the precision you want to use for training and inference.": "Atlasiet precizitāti, kuru vēlaties izmantot apmācībai un secinājumiem.",
+ "Plugin Installer": "Spraudņu instalētājs",
+ "Version Checker": "Versiju pārbaudītājs",
+ "Drag your plugin.zip to install it": "Velciet plugin.zip, lai to instalētu",
+ "Reverb": "Atbalsošana",
+ "Check for updates": "Pārbaudiet, vai nav atjauninājumu",
+ "Post-Process": "Pēc procesa",
+ "Apply reverb to the audio.": "Lietojiet reverb audio formātā.",
+ "Check which version of Applio is the latest to see if you need to update.": "Pārbaudiet, kura Applio versija ir jaunākā, lai redzētu, vai jums ir jāatjaunina.",
+ "Reverb Room Size": "Reverb istabas izmērs",
+ "Set the room size of the reverb.": "Iestatiet reverb telpas lielumu.",
+ "Post-process the audio to apply effects to the output.": "Pēc audio apstrādes, lai izvadei lietotu efektus.",
+ "Reverb Dry Gain": "Reverb sausais ieguvums",
+ "Reverb Damping": "Reverb slāpēšana",
+ "Set the damping of the reverb.": "Iestatiet reverb slāpēšanu.",
+ "Set the wet gain of the reverb.": "Iestatiet reverb mitro pastiprinājumu.",
+ "Reverb Width": "Reverb platums",
+ "Set the dry gain of the reverb.": "Iestatiet reverb sauso pastiprinājumu.",
+ "Reverb Wet Gain": "Reverb slapjš ieguvums",
+ "Set the width of the reverb.": "Iestatiet reverb platumu.",
+ "Set the freeze mode of the reverb.": "Iestatiet reverb iesaldēšanas režīmu.",
+ "Reverb Freeze Mode": "Reverb iesaldēšanas režīms",
+ "Pitch Shift": "Piķa maiņa",
+ "Limiter": "Ierobežotājs",
+ "Pitch Shift Semitones": "Piķa maiņas pustoņi",
+ "Apply pitch shift to the audio.": "Audio lietojiet soļa nobīdi.",
+ "Set the pitch shift semitones.": "Iestatiet soļa maiņas pustoņus.",
+ "Gain": "Iegūt",
+ "And select the sampling rate": "Un atlasiet paraugu ņemšanas frekvenci.",
+ "Apply limiter to the audio.": "Lietojiet audio ierobežotāju.",
+ "Limiter Threshold dB": "Ierobežotāja slieksnis dB",
+ "Set the limiter release time.": "Iestatiet ierobežotāja izlaišanas laiku.",
+ "Set the limiter threshold dB.": "Iestatiet ierobežotāja slieksni dB.",
+ "Apply gain to the audio.": "Lietojiet pastiprinājumu audio.",
+ "Limiter Release Time": "Ierobežotāja atbrīvošanas laiks",
+ "Set the gain dB.": "Iestatiet pastiprinājuma dB.",
+ "Distortion": "Traucējumus",
+ "Chorus": "Koris",
+ "Distortion Gain": "Kropļojumu pieaugums",
+ "Apply distortion to the audio.": "Lietojiet audio kropļojumus.",
+ "Set the distortion gain.": "Iestatiet kropļojuma pieaugumu.",
+ "Gain dB": "Iegūt dB",
+ "Apply chorus to the audio.": "Lietojiet kori audio.",
+ "Set the chorus depth.": "Iestatiet kora dziļumu.",
+ "Chorus Depth": "Kora dziļums",
+ "Chorus Center Delay ms": "Kora centra kavēšanās ms",
+ "Chorus Feedback": "Kora atsauksmes",
+ "Chorus Rate Hz": "Kora ātrums Hz",
+ "Chorus Mix": "Kora mikss",
+ "Set the chorus feedback.": "Iestatiet kora atgriezenisko saiti.",
+ "Set the chorus center delay ms.": "Iestatiet kora centra aizkaves ms.",
+ "Bitcrush": "Bitcrush",
+ "Set the chorus mix.": "Iestatiet kora kombināciju.",
+ "Apply bitcrush to the audio.": "Uzklājiet bitcrush uz audio.",
+ "Clipping": "Izgriezumu",
+ "Set the bitcrush bit depth.": "Iestatiet bitcrush bitu dziļumu.",
+ "Bitcrush Bit Depth": "Bitcrush bitu dziļums",
+ "Compressor": "Kompresors",
+ "Apply clipping to the audio.": "Lietojiet izgriezumu audio.",
+ "Clipping Threshold": "Apgriešanas slieksnis",
+ "Compressor Threshold dB": "Kompresora slieksnis dB",
+ "Apply compressor to the audio.": "Lietojiet kompresoru audio.",
+ "Set the compressor threshold dB.": "Iestatiet kompresora slieksni dB.",
+ "Set the compressor ratio.": "Iestatiet kompresora attiecību.",
+ "Compressor Ratio": "Kompresora attiecība",
+ "Set the clipping threshold.": "Iestatiet izgriešanas slieksni.",
+ "Set the compressor attack ms.": "Iestatiet kompresora uzbrukumu ms.",
+ "Compressor Release ms": "Kompresora atbrīvošana ms",
+ "Set the compressor release ms.": "Iestatiet kompresora atbrīvošanas ms.",
+ "Delay": "Kavēšanās",
+ "Apply delay to the audio.": "Lietojiet aizkavi audio.",
+ "Delay Seconds": "Aizkaves sekundes",
+ "Delay Mix": "Delay Mix",
+ "Delay Feedback": "Aizkaves atgriezeniskā saite",
+ "Set the delay seconds.": "Iestatiet aizkaves sekundes.",
+ "Set the delay feedback.": "Iestatiet aizkaves atgriezenisko saiti.",
+ "Custom Embedder": "Pielāgots iegulšanas līdzeklis",
+ "Set the delay mix.": "Iestatiet aizkaves kombināciju.",
+ "Select Custom Embedder": "Atlasiet Pielāgots iegulšanas līdzeklis",
+ "Set the chorus rate Hz.": "Iestatiet kora ātrumu Hz.",
+ "Folder Name": "Mapes nosaukums",
+ "Upload .bin": "Augšupielādēt .bin",
+ "Refresh embedders": "Atsvaidzināt iegulētājus",
+ "model information": "Informācija par modeli",
+ "Upload .json": "Augšupielādēt .json",
+ "Move files to custom embedder folder": "Failu pārvietošana uz pielāgotu iegulšanas mapi",
+ "Compressor Attack ms": "Kompresora uzbrukums ms",
+ "Model Creator": "Modeļa veidotājs",
+ "Speaker ID": "Runātāja ID",
+ "Name of the model creator. (Default: Unknown)": "Modeļa veidotāja vārds. (Noklusējums: nav zināms)",
+ "Select the speaker ID to use for the conversion.": "Atlasiet runātāja ID, ko izmantot pārvēršanai.",
+ "Set name": "Iestatīt nosaukumu",
+ "Model Author Name": "Modeļa autora vārds",
+ "The name that will appear in the model information.": "Nosaukums, kas parādīsies modeļa informācijā.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "Iestatiet automātiskās tunes stiprumu - jo vairāk jūs to palielināsit, jo vairāk tas pieķersies hromatiskajam režģim."
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/mg_MG.json b/assets/i18n/languages/mg_MG.json
new file mode 100644
index 0000000000000000000000000000000000000000..ff52c9fff3368d550b20e87be9028db6690300a4
--- /dev/null
+++ b/assets/i18n/languages/mg_MG.json
@@ -0,0 +1,325 @@
+{
+ "Output Information": "Fampahalalana momba ny vokatra",
+ "Inference": "Fanondroana",
+ "Training": "Fampiofanana",
+ "Processing": "Fikarakarana",
+ "Extra": "Extra",
+ "Audio Analyzer": "Audio Analyzer",
+ "Merge Audios": "Mampiray Audios",
+ "The output information will be displayed here.": "Ny fampahalalana momba ny vokatra dia haseho eto.",
+ "Plugins": "Plugins",
+ "Download": "Download",
+ "Preprocess": "Preprocess",
+ "Report a Bug": "Mitatitra bibikely iray",
+ "Settings": "Fandrindrana",
+ "Model Information": "Model Information",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "Fitaovana fiovam-po feo tsotra sy avo lenta mifantoka amin'ny fampiasana mora sy ny fampisehoana.",
+ "Audio cutting": "Audio fanapahana",
+ "Process effects": "Ny fiantraikan'ny dingana",
+ "Model Name": "Modely Name",
+ "Enter model name": "Ampidiro ny anaran'ny modely",
+ "Dataset Path": "Dataset Path",
+ "Name of the new model.": "Anaran'ny modely vaovao.",
+ "Dataset Creator": "Mpamorona Dataset",
+ "Dataset Name": "Anaran'ny Dataset",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "Soso-kevitra ny hanafoanana io safidy io raha efa vita ny dataset.",
+ "Enter dataset name": "Ampidiro ny anaran'ny dataset",
+ "Refresh Datasets": "Hamelombelona ny Datasets",
+ "Name of the new dataset.": "Anaran'ny daty vaovao.",
+ "Path to the dataset folder.": "Sori-dàlana mankany amin'ny laha-tahiry dataset.",
+ "Upload Audio Dataset": "Ampidiro ny Dataset audio",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Ny rakitra audio dia nampidirina tamim-pahombiazana tao amin'ny dataset. Azafady tsindrio ny bokotra preprocess.",
+ "This section contains some extra utilities that often may be in experimental phases.": "Ity fizarana ity dia misy fitaovana fanampiny izay matetika ao anatin'ny dingana fanandramana.",
+ "Enter dataset path": "Ampidiro ny sori-dàlan'ny dataset",
+ "Sampling Rate": "Tahan'ny santionany",
+ "Version of the model architecture.": "Dikan-teny amin'ny modely rafitra.",
+ "The sampling rate of the audio files.": "Ny santionany tahan'ny ny raki-peo raki-daza.",
+ "Embedder Model": "Modelin'ny Embedder",
+ "Model Architecture": "Model Architecture",
+ "Batch Size": "Batch Size",
+ "Hop Length": "Halavan'ny Hop",
+ "Model used for learning speaker embedding.": "Modely ampiasaina amin'ny fampidirana ny mpandahateny amin'ny fianarana.",
+ "Extract": "Hanesorana",
+ "Preprocess Dataset": "Dataset mialoha",
+ "Save Every Epoch": "Tehirizo ny fotoana rehetra",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Tsara ny mampifanaraka azy amin'ny VRAM misy anao GPU. Ny fametrahana ny 4 dia manome ny marina kokoa fa miadana kokoa fanodinana, raha 8 manome haingana sy fitsipika vokatra.",
+ "Determine at how many epochs the model will saved at.": "Fantaro hoe firy ny vanim-potoana ho voavonjy ny modely.",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Manondro ny faharetan'ny fotoana ilain'ny rafitra mba hidirana amin'ny fiovana goavana. Ny halavan'ny hop kely kokoa dia mitaky fotoana bebe kokoa ho an'ny inference saingy mirona amin'ny fanomezana mari-pahaizana ambony kokoa.",
+ "Total Epoch": "Total Epoch",
+ "Save Only Latest": "Vonjeo fotsiny ny farany",
+ "Specifies the overall quantity of epochs for the model training process.": "Mamaritra ny habetsaky ny vanim-potoana ankapobeny ho an'ny dingana fanofanana modely.",
+ "Pretrained": "Fiofanana mialoha",
+ "Custom Pretrained": "Fomba fanao efa voaofana mialoha",
+ "Upload Pretrained Model": "Ampidiro ny modely efa voaofana",
+ "Save Every Weights": "Tehirizo ny lanja rehetra",
+ "Refresh Custom Pretraineds": "Hamelombelona ny fomba amam-panao efa voaofana",
+ "Pretrained Custom Settings": "Custom Settings efa nomanina mialoha",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Io toe-javatra io dia ahafahanao manavotra ny lanjan'ny modely amin'ny famaranana ny vanim-potoana tsirairay.",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Ny famelana izany toe-javatra izany dia hiafara amin'ny rakitra G sy D izay mitahiry ny dikan-teny farany indrindra, izay mitahiry tsara ny toerana fitehirizana.",
+ "Pretrained G Path": "Custom Pretrained G",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Ny fampiasana modely efa nomanina mialoha dia mety hitarika ho amin'ny vokatra tsara kokoa, satria ny fisafidianana ireo modely tsara indrindra mifanaraka amin'ny tranga fampiasana manokana dia afaka manatsara ny fampisehoana.",
+ "Pretrained D Path": "Custom Pretrained D",
+ "GPU Settings": "GPU Settings",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Tsindrio ny bokotra hamelombelona mba hahitana ny rakitra efa voaofana ao amin'ny menio dropdown.",
+ "GPU Custom Settings": "GPU Custom Settings",
+ "The file you dropped is not a valid pretrained file. Please try again.": "Ny rakitra nalatsaka dia tsy manan-kery pretrained rakitra. Miangavy anao hanandrana indray.",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Sets mandroso GPU toe-javatra, soso-kevitra ho an'ny mpampiasa amin'ny tsara kokoa GPU maritrano.",
+ "0 to ∞ separated by -": "0 ka hatramin'ny ∞ misaraka amin'ny -",
+ "The GPU information will be displayed here.": "Ny fampahalalana GPU dia haseho eto.",
+ "GPU Information": "Fampahalalana GPU",
+ "Pitch Guidance": "Fitarihan-dalana",
+ "Use CPU": "Ampiasao ny CPU",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Lazao ny isan'ny GPU tianao hampiasaina amin'ny preprocess amin'ny fampidirana azy ireo misaraka amin'ny hyphens (-). Amin'izao fotoana izao, ny fampiasana multi-gpu dia tsy hisy fiantraikany lehibe.",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "Ny isan'ny CPU cores ampiasaina ao amin'ny preprocess. Ny toerana misy anao dia ny cpu cores, izay atolotra ho an'ny ankamaroan'ny tranga.",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "Ny isan'ny CPU cores ampiasaina amin'ny dingana fitrandrahana. Ny toerana misy anao dia ny cpu cores, izay atolotra ho an'ny ankamaroan'ny tranga.",
+ "Force the use of CPU for training.": "Manery ny fampiasana CPU ho an'ny fampiofanana.",
+ "Extract Features": "Endri-javatra hanesorana",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Ampiasao ireo modely efa voaomana mialoha rehefa mampiofana ny tenanao manokana. Ity fomba fiasa ity dia mampihena ny faharetan'ny fampiofanana ary manatsara ny kalitaon'ny ankapobeny.",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Lazao ny isan'ny GPU tianao hampiasaina amin'ny fitrandrahana amin'ny alàlan'ny fampidirana azy ireo misaraka amin'ny hyphens (-).",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Amin'ny alalan'ny fampiasana ny fitarihana, dia lasa azo atao ny maka tahaka ny feon'ny feo tany am-boalohany, anisan'izany ny toerany. Ity endri-javatra ity dia tena manan-danja tokoa amin'ny fihirana sy ireo tranga hafa izay tena ilaina ny fitehirizana ny feonkira na ny dity tany am-boalohany.",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Izahay dia manome laharam-pahamehana ny famolavolana modely amin'ny GPU ho an'ny fampisehoana haingana kokoa. Raha tianao ny mampiasa ny CPU, avelao fotsiny ny GPU saha banga.",
+ "Cache Dataset in GPU": "Cache Dataset in GPU",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Izahay dia manome laharam-pahamehana ny famokarana modely amin'ny GPU ho an'ny fampisehoana haingana kokoa. Raha tianao ny mampiasa ny CPU, avelao fotsiny ny GPU saha banga.",
+ "Index Algorithm": "Index Algorithm",
+ "GPU Number": "GPU Number",
+ "Cache the dataset in GPU memory to speed up the training process.": "Cache ny dataset ao amin'ny GPU fahatsiarovana mba hanafainganana ny dingan'ny fampiofanana.",
+ "Overtraining Detector": "Overtraining Detector",
+ "Overtraining Detector Settings": "Fikirakirana ny Detector Overtraining",
+ "Overtraining Threshold": "Tokonam-baravarana tafahoatra",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans dia algorithm clustering izay manasaraka ny dataset ho vondrona K. Ity sehatra ity dia tena ilaina ho an'ny angon-drakitra lehibe.",
+ "Fresh Training": "Fampiofanana vaovao",
+ "Stop Training": "Atsaharo ny fampiofanana",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Fantaro ny fihoaram-pefy mba hisorohana ny modely tsy hianatra tsara loatra ny angon-drakitra momba ny fampiofanana ary very ny fahafahana generalize amin'ny angon-drakitra vaovao.",
+ "Generate Index": "Mamorona Index",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Mamaritra ny isan'ny ambony indrindra epochs tianao ny modely mba hampitsahatra ny fampiofanana raha tsy misy fanatsarana no hita.",
+ "Export Model": "Export Model",
+ "Exported Pth file": "Exported Pth rakitra",
+ "Start Training": "Atombohy ny fampiofanana",
+ "Exported Index file": "Exported Index rakitra",
+ "Select the pth file to be exported": "Safidio ny rakitra pth haondrana",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "Alefaso io toe-javatra io raha toa ianao ka mampiofana modely vaovao avy amin'ny rangotra, ratra kely, na restarting ny fampiofanana. Fafao ireo vato rehetra efa voaforona teo aloha sy ny vatan-kazo tensorboard.",
+ "Upload": "Mampakatra",
+ "Voice Model": "Modely feo",
+ "Select the index file to be exported": "Safidio ny arsiva haondrana",
+ "Select the voice model to use for the conversion.": "Safidio ny modely feo ampiasaina amin'ny fiovam-po.",
+ "Index File": "Rakitra Index",
+ "Refresh": "Mamelombelona",
+ "Unload Voice": "Feo tsy misy dikany",
+ "Single": "Mpitovo",
+ "Upload Audio": "Ampidiro ny Audio",
+ "Select the audio to convert.": "Safidio ny feo mba hiova fo.",
+ "Select Audio": "Safidio ny Audio",
+ "Select the index file to use for the conversion.": "Safidio ny rakitra index ampiasaina amin'ny fiovam-po.",
+ "Advanced Settings": "Advanced Settings",
+ "Custom Output Path": "Custom Output lalana",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "Ny bokotra 'Upload' dia ho an'ny google colab ihany: Ampidiro ao amin'ny fampirimana ApplioExported ao amin'ny Google Drive ireo rakitra naondrana ireo.",
+ "Export Format": "Export Format",
+ "Output Path": "Làlam-pamokarana",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Clear Outputs (Fafao ny horonam-peo rehetra amin'ny fananana / feo)",
+ "Select the format to export the audio.": "Safidio ny endrika hanondranana ny raki-peo.",
+ "Split Audio": "Split Audio",
+ "Autotune": "Autotune",
+ "Clean Audio": "Audio madio",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "Ny lalana izay ny Output raki-peo dia ho voavonjy, amin'ny alalan'ny toerana misy anao amin'ny fananana / peo / output.wav",
+ "Clean Strength": "Tanjaka madio",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Zarao ho tapa-kazo ny feo mba hahazoana vokatra tsara kokoa amin'ny tranga sasany.",
+ "Upscale Audio": "Upscale Audio",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Ampiharo ny autotune malefaka amin'ny hevitrao, izay aroso amin'ny fihirana fiovam-po.",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Diovy ny feo Output mampiasa feo mamantatra algorithms, soso-kevitra noho ny miteny Audios.",
+ "Formant Shifting": "Fiovana tsy misy dikany",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Amboary ny feo ho amin'ny kalitao avo kokoa, atolotra ho an'ny horonam-peo ambany kalitao. (Mety haharitra ela kokoa ny fandraisana ny feo)",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Alefaso ny fiovan'ny formant. Ampiasaina ho an'ny lahy sy vavy ary ny mifamadika amin'izany.",
+ "Browse presets for formanting": "Browse presets ho an'ny formanting",
+ "Quefrency for formant shifting": "Quefrency ho an'ny fiovan'ny taloha",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Ataovy ny haavon'ny fanadiovana amin'ny feo tianao, arakaraka ny hampitomboanao azy no hanadiovany bebe kokoa, saingy azo atao ny hampitambatra kokoa ny feo.",
+ "Default value is 1.0": "Ny sanda default dia 1.0",
+ "Pitch": "Pitch",
+ "Presets are located in /assets/formant_shift folder": "Presets dia hita ao amin'ny /assets/formant_shift lahatahiry",
+ "Filter Radius": "Filter Radius",
+ "Timbre for formant shifting": "Timbre ho an'ny fiovan'ny taloha",
+ "Search Feature Ratio": "Search endri-javatra tahan'ny",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Apetraho ny dity ny feo, ny avo kokoa ny lanjany, ny avo kokoa ny dity.",
+ "Volume Envelope": "Boky valopy",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Fitarihana ampiasain'ny rakitra fanondro; Ny lanjany ambony kokoa dia mifanaraka amin'ny fitaomana lehibe kokoa. Na izany aza, ny fisafidianana ny soatoavina ambany dia afaka manampy amin'ny fanalefahana ireo zava-kanto hita ao amin'ny feo.",
+ "Protect Voiceless Consonants": "Arovy ireo consonants tsy misy feo",
+ "Pitch extraction algorithm": "Fitrandrahana ny algôrithma",
+ "Batch": "Batch",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Manolo na mifangaro amin'ny valopy misy ny vokatra. Ny akaiky kokoa ny tahan'ny dia ny 1, ny bebe kokoa ny output valopy no miasa.",
+ "Export Audio": "Export Audio",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Raha lehibe kokoa na mitovy amin'ny telo ny isa, dia mety hampihena ny fihetseham-po ny fampiasana fanivanana haino aman-jery amin'ny valin'ny feo voaangona.",
+ "Convert": "Niova fo",
+ "Input Folder": "Laha-tahiry fahan'ny",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Ny algorithm fitrandrahana dity ampiasaina amin'ny fiovam-peo. Ny algorithm default dia rmvpe, izay atolotra ho an'ny ankamaroan'ny tranga.",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Arovy ny renisoratra miavaka sy ny feon'ny fofonaina mba hisorohana ny fandrobana elektro-acoustic sy ny zava-misy hafa. Ny fanesorana ny fikirana amin'ny lanjany ambony indrindra amin'ny 0.5 dia manome fiarovana feno. Na izany aza, ny fampihenana io sanda io dia mety hampihena ny haben'ny fiarovana raha mety hampihena ny fiantraikan'ny indexing.",
+ "Output Folder": "Output laha-tahiry",
+ "Enter input path": "Ampidiro ny sori-dàlan'ny fidirana",
+ "Select the folder containing the audios to convert.": "Safidio ny laha-tahiry ahitana ireo horonam-peo hiova.",
+ "Select the folder where the output audios will be saved.": "Safidio ny lahatahiry izay hamonjena ireo horonam-peo.",
+ "Get information about the audio": "Mahazoa fampahalalana momba ny feo",
+ "Enter output path": "Ampidiro ny làlan'ny output",
+ "## Voice Blender": "# # Feon'ny blender",
+ "Voice Blender": "Feo blender",
+ "Blend Ratio": "Mifangaro Ratio",
+ "You can also use a custom path.": "Azonao atao ihany koa ny mampiasa ny fomba amam-panao lalana.",
+ "Fusion": "Fusion",
+ "Drag and drop your model here": "Tariho ary atsipazo eto ny modelinao",
+ "Path to Model": "Lalana mankany amin'ny modely",
+ "Enter path to model": "Ampidiro ny lalana mankany amin'ny modely",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Mifidiana modely feo roa, apetraho ny isan-jaton'ny fangaronao tianao, ary afangaroy ho feo vaovao tanteraka.",
+ "Inroduce the model information": "Ampidino ny fampahalalana modely",
+ "Model information to be placed": "Modely vaovao hapetraka",
+ "View model information": "Jereo ny fampahalalana modely",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Ny fanitsiana ny toerana bebe kokoa mankany amin'ny lafiny iray na ny iray hafa dia hahatonga ny modely hitovy kokoa amin'ny voalohany na faharoa.",
+ "View": "Hijery",
+ "Model extraction": "Fitrandrahana modely",
+ "Introduce the model pth path": "Ampahafantaro ny modely pth lalana",
+ "Pth file": "Pth rakitra",
+ "The information to be placed in the model (You can leave it blank or put anything).": "Ny vaovao mba hapetraka ao amin'ny modely (Azonao atao ny mamela izany banga na mametraka na inona na inona).",
+ "Output of the pth file": "Output ny pth rakitra",
+ "Extract F0 Curve": "Hanesorana F0 Curve",
+ "Model conversion": "Modely fiovam-po",
+ "# How to Report an Issue on GitHub": "# Ahoana ny fomba hitantarana olana amin'ny GitHub",
+ "Record Screen": "Firaketana an-tsoratra Efijery",
+ "Record": "Record",
+ "Stop Recording": "Ajanony ny firaketana",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "Ny f0 curve dia maneho ny fiovaovan'ny faharetan'ny feo iray rehefa mandeha ny fotoana, mampiseho ny fomba fiakaran'ny pitch sy ny fianjerana.",
+ "Introduce the model .pth path": "Ampahafantaro ny modely .pth lalana",
+ "Model Link": "Model Link",
+ "## Download Model": "## Download Model",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Fenoy ny template olana nomena, miantoka ny hampiditra ny antsipiriany raha ilaina, ary ampiasao ny fizarana fananana mba hampidirana ny rakitra voarakitra avy amin'ny dingana teo aloha.",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Mandehana any amin'ny [GitHub Issues](https://github.com/IAHispano/Applio/issues) ary tsindrio ny bokotra 'Olana Vaovao'.",
+ "See Model Information": "Jereo ny Model Information",
+ "Download Model": "Download Model",
+ "Introduce the model link": "Ampidiro ny rohy modely",
+ "## Drop files": "## Mitete raki-daza",
+ "Search": "Search",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Rehefa vita ny fandraketana ny olana, tsindrio ny bokotra 'Stop Recording' (bokotra mitovy, fa miova ny marika arakaraka ny firaketana na tsia).",
+ "## Search Model": "## Search Model",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Alefaso ny rakitra .pth sy .index ao amin'ity toerana ity. Tariho ny iray ary avy eo ny iray hafa.",
+ "Introduce the model name to search.": "Ampidiro ny anaran'ny modely mba hikaroka.",
+ "TTS Voices": "TTS Voices",
+ "## Download Pretrained Models": "## Download Pretrained Models",
+ "And select the sampling rate": "Ary mifidy ny santionany tahan'ny.",
+ "We couldn't find models by that name.": "Tsy afaka mahita maodely amin'izany anarana izany izahay.",
+ "Select the pretrained model you want to download.": "Safidio ny modely efa nomaninao izay tianao alaina.",
+ "Increase or decrease TTS speed.": "Ampitomboy na hampihenana ny hafainganam-pandehan'ny TTS.",
+ "Text to Synthesize": "Lahabolana amin'ny Synthesize",
+ "Select the TTS voice to use for the conversion.": "Safidio ny feon'ny TTS ampiasaina amin'ny fiovam-po.",
+ "Enter the text to synthesize.": "Ampidiro ny lahatsoratra mba hampifangaroana.",
+ "TTS Speed": "Hafainganan'ny TTS",
+ "Upload a .txt file": "Mampakatra rakitra .txt",
+ "Enter text to synthesize": "Ampidiro anatin'ny lahabolana ny synthesize",
+ "The path to the text file that contains content for text to speech.": "Ny lalana mankany amin'ny rakitra an-tsoratra izay misy atiny ho an'ny lahatsoratra ho an'ny lahateny.",
+ "Input path for text file": "Sori-dàlana ho an'ny rakitra an-tsoratra",
+ "Output Path for TTS Audio": "Output lalana ho an'ny TTS Audio",
+ "Output Path for RVC Audio": "Output lalana ho an'ny RVC Audio",
+ "Enable fake GPU": "Alefaso ny GPU sandoka",
+ "Enable Applio integration with Discord presence": "Ampidiro ny fampidirana Applio amin'ny fisian'ny discord",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "Hampihetsika ny fahafahana maneho ny hetsika Applio amin'izao fotoana izao ao amin'ny Discord.",
+ "Restart Applio": "Restart Applio",
+ "It will activate the possibility of downloading models with a click from the website.": "Izany dia mampihetsika ny mety hisian'ny downloading modely amin'ny tsindrio avy amin'ny tranonkala.",
+ "Language": "Fiteny",
+ "Enable Applio integration with applio.org/models using flask": "Ampidiro ny fampidirana Applio amin'ny applio.org/models mampiasa tavoara",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Activating ny fiaran-dalamby vakizoro. Na izany aza, mariho fa tsy ampy fahaiza-manao GPU ity fitaovana ity, noho izany dia tsy tohanana ny fampiofanana. Ity safidy ity dia natao fotsiny ho an'ny tanjona fitsapana. (Ity safidy ity dia hamerina ny Applio)",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "Amin'izao fotoana izao dia tsy misy ny fiofanana noho ny tsy fisian'ny GPU. Mba hampavitrika ny tabilaon'ny fampiofanana, mandehana any amin'ny tabilao fikirakirana ary mamela ny safidy 'GPU sandoka'.",
+ "Select the theme you want to use. (Requires restarting Applio)": "Safidio ny lohahevitra tianao hampiasaina. (Avereno ny applio)",
+ "Precision": "Fametrahana mazava tsara",
+ "Select the language you want to use. (Requires restarting Applio)": "Fidio izay fiteny tianao hampiasaina. (Avereno ny applio)",
+ "Update precision": "Update fametrahana mazava tsara",
+ "Select the precision you want to use for training and inference.": "Safidio ny fametrahana mazava tsara tianao hampiasaina amin'ny fampiofanana sy ny fampidirana.",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Tsindrio eo amin'ny 'Record Screen' bokotra eto ambany mba hanomboka ny firaketana an-tsoratra ny olana ianao miaina.",
+ "Drag your plugin.zip to install it": "Adikao ny plugin.zip hametraka azy",
+ "Version Checker": "Version Checker",
+ "Plugin Installer": "Plugin Installer",
+ "Check for updates": "Jereo ny fanavaozana",
+ "Post-Process": "Taorian'ny dingana",
+ "Check which version of Applio is the latest to see if you need to update.": "Jereo hoe iza amin'ireo kinova Applio no farany hahitana raha mila manavao ianao.",
+ "Reverb": "Reverb",
+ "Apply reverb to the audio.": "Ampiharo ny famerenana amin'ny feo.",
+ "Post-process the audio to apply effects to the output.": "Fandefasana ny feo mba hampihatra ny vokatra amin'ny output.",
+ "Reverb Room Size": "Haben'ny efitrano Reverb",
+ "Set the room size of the reverb.": "Mamaritra ny haben'ny efitrano ny famerenana.",
+ "Reverb Damping": "Reverb Damping",
+ "Set the damping of the reverb.": "Apetraho ny fihenan'ny famerenana.",
+ "Theme": "Theme",
+ "Reverb Wet Gain": "Reverb lena Gain",
+ "Reverb Dry Gain": "Reverb maina tombony",
+ "Reverb Width": "Sakany Reverb",
+ "Reverb Freeze Mode": "Reverb Freeze Mode",
+ "Set the dry gain of the reverb.": "Apetraho ny tombony maina amin'ny famerenana.",
+ "Pitch Shift": "Fiovana eo amin'ny kianja",
+ "Set the freeze mode of the reverb.": "Mamaritra ny fomba fampangatsiahana ny famerenana.",
+ "Pitch Shift Semitones": "Pitch Shift Semitones",
+ "Apply pitch shift to the audio.": "Ampiharo ny fiovam-peo amin'ny feo.",
+ "Limiter": "Limiter",
+ "Set the pitch shift semitones.": "Amboary ny semitones amin'ny fihodinana.",
+ "Limiter Threshold dB": "Limiter Threshold dB",
+ "Apply limiter to the audio.": "Ampiharo ny fetra amin'ny feo.",
+ "Limiter Release Time": "Fotoana famoahana voafetra",
+ "Set the wet gain of the reverb.": "Apetraho ny tombony mando amin'ny famerenana.",
+ "Set the width of the reverb.": "Amboary ny haben'ny Reverb.",
+ "Gain": "Tombony",
+ "Set the limiter release time.": "Mamaritra ny fetran'ny fotoana fandefasana.",
+ "Gain dB": "Mahazo dB",
+ "Distortion": "Fanodinkodinana",
+ "Set the gain dB.": "Ampidiro ny dB tombony.",
+ "Apply gain to the audio.": "Ampiharo ny tombony amin'ny audio.",
+ "Apply distortion to the audio.": "Ampiharo ny fanovana ny raki-peo.",
+ "Chorus": "Chorus",
+ "Set the limiter threshold dB.": "Mamaritra ny fetran'ny fetra dB.",
+ "Set the distortion gain.": "Mamaritra ny tombony azo avy amin'ny famadihana.",
+ "Distortion Gain": "Tombom - barotra",
+ "Apply chorus to the audio.": "Ampiharo amin'ny feo ny fiverenan-kira.",
+ "Chorus Rate Hz": "Chorus tahan'ny Hz",
+ "Set the chorus depth.": "Ataovy lalina ny feon-kira.",
+ "Set the chorus rate Hz.": "Mamaritra ny tahan'ny fiverenan-kira Hz.",
+ "Chorus Center Delay ms": "Nahemotra ny ms ny Foiben'ny Chorus",
+ "Chorus Feedback": "Chorus Feedback",
+ "Chorus Depth": "Chorus halalin'ny",
+ "Bitcrush": "Bitcrush",
+ "Chorus Mix": "Chorus Mix",
+ "Bitcrush Bit Depth": "Bitcrush Bit Depth",
+ "Set the chorus mix.": "Apetraho ny feon-kira mifangaro.",
+ "Set the chorus center delay ms.": "Apetraho ny foiben'ny fiverenan-kira amin'ny fanemorana ny ms.",
+ "Clipping": "Clipping",
+ "Set the chorus feedback.": "Mametraha ny valin-kira amin'ny fiverenan-kira.",
+ "Apply bitcrush to the audio.": "Ampiharo ny bitcrush amin'ny feo.",
+ "Set the bitcrush bit depth.": "Ataovy lalina ny bitcrush kely.",
+ "Apply clipping to the audio.": "Ampiharo amin'ny horonam-peo ny clip.",
+ "Clipping Threshold": "Clipping Tokonam-baravarana",
+ "Compressor": "Compressor",
+ "Set the clipping threshold.": "Amboary ny fetran'ny clipping.",
+ "Apply compressor to the audio.": "Ampiharo ny compressor amin'ny feo.",
+ "Compressor Threshold dB": "Compressor Tokonam-baravarana dB",
+ "Compressor Ratio": "Compressor tahan'ny",
+ "Compressor Attack ms": "Compressor Attack MS",
+ "Set the compressor threshold dB.": "Mamaritra ny compressor tokonam-baravaran'ny dB.",
+ "Compressor Release ms": "Compressor Release ms",
+ "Delay": "Fahatarana",
+ "Set the compressor ratio.": "Mamaritra ny tahan'ny compressor.",
+ "Set the compressor release ms.": "Mamaritra ny compressor famoahana ms.",
+ "Set the compressor attack ms.": "Mamaritra ny fanafihana compressor MS.",
+ "Apply delay to the audio.": "Ampiharo ny fahataran'ny feo.",
+ "Delay Seconds": "Manemotra segondra",
+ "Set the delay seconds.": "Mamaritra ny fahatarana segondra.",
+ "Delay Mix": "Delay Mix",
+ "Delay Feedback": "Manemotra ny fanehoan-kevitra",
+ "Set the delay feedback.": "Mamaritra ny valin'ny fahatarana.",
+ "Set the delay mix.": "Apetraho ny fifangaroan'ny fahatarana.",
+ "Custom Embedder": "Custom Embedder",
+ "Select Custom Embedder": "Safidio ny Custom Embedder",
+ "model information": "Modely vaovao",
+ "Refresh embedders": "Mamelombelona embedders",
+ "Folder Name": "Anaran'ny laha-tahiry",
+ "Upload .bin": "Mampakatra .bin",
+ "Upload .json": "Mampakatra .json",
+ "Move files to custom embedder folder": "Afindrao any amin'ny lahatahiry fanatsofohana ny rakitra",
+ "Model Creator": "Modelin'ny Mpamorona",
+ "Name of the model creator. (Default: Unknown)": "Anaran'ny mpamorona modely. (Fitohizan'ny hafatra: tsy fantatra)",
+ "Speaker ID": "IDn'ny mpandaha-teny",
+ "Model Author Name": "Ny anaran'ny mpanoratra modely",
+ "Select the speaker ID to use for the conversion.": "Safidio ny ID mpandahateny ampiasaina amin'ny fiovam-po.",
+ "Set name": "Mamaritra ny anarana",
+ "The name that will appear in the model information.": "Ny anarana izay hiseho ao amin'ny modely vaovao.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "Apetraho ny herin'ny autotune - arakaraka ny ampitomboanao azy no hahabetsaka azy ho tonga any amin'ny tambajotra chromatika."
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/ml_IN.json b/assets/i18n/languages/ml_IN.json
new file mode 100644
index 0000000000000000000000000000000000000000..84bcc24f725b45784db1adcef5b0ae4a215108c7
--- /dev/null
+++ b/assets/i18n/languages/ml_IN.json
@@ -0,0 +1,325 @@
+{
+ "Cache Dataset in GPU":"GPU-യിൽ ഡാറ്റാസെറ്റ് കാഷെ ചെയ്യുക",
+ "Set the compressor threshold dB.":"കംപ്രസ്സർ പരിധി dB സജ്ജമാക്കുക.",
+ "Set the limiter release time.":"ലിമിറ്റർ റിലീസ് സമയം സജ്ജമാക്കുക.",
+ "The GPU information will be displayed here.":"GPU വിവരങ്ങൾ ഇവിടെ പ്രദർശിപ്പിക്കും.",
+ "Limiter Threshold dB":"ലിമിറ്റർ പരിധി dB",
+ "Save Only Latest":"ഏറ്റവും പുതിയത് മാത്രം സേവ് ചെയ്യുക",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.":"പ്രീപ്രോസസിനായി ഉപയോഗിക്കാൻ ആഗ്രഹിക്കുന്ന GPU-കളുടെ എണ്ണം ഹൈഫനുകൾ (-) ഉപയോഗിച്ച് വേർതിരിച്ചുകൊണ്ട് നടുക. നിലപ്പോൾ, മൾട്ടി-gpu ഉപയോഗിക്കുന്നത് കാര്യമായ സ്വാധീനം ചെലുത്തില്ല.",
+ "Apply compressor to the audio.":"ഓഡിയോയിൽ കംപ്രസ്സർ പ്രയോഗിക്കുക.",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.":"ഓരോ യുഗത്തിന്റെയും അവസാനം മോഡലിന്റെ വെയ്റ്റുകൾ സേവ് ചെയ്യാൻ ഈ ക്രമീകരണം നിങ്ങളെ പ്രാപ്തമാക്കുന്നു.",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.":"ഈ ക്രമീകരണം പ്രാപ്തമാക്കുന്നത് G, D ഫയലുകൾ അവയുടെ ഏറ്റവും പുതിയ പതിപ്പുകൾ മാത്രം സേവ് ചെയ്യുന്നതിന് കാരണമാകും, ഇത് സംഭരണ സ്ഥലം ഫലപ്രദമായി സംരക്ഷിക്കുന്നു.",
+ "Compressor Threshold dB":"കംപ്രസ്സർ പരിധി dB",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).":"എക്സ്ട്രാക്റ്റുചെയ്യുന്നതിനായി ഉപയോഗിക്കാൻ ആഗ്രഹിക്കുന്ന GPU-കളുടെ എണ്ണം ഹൈഫനുകൾ (-) ഉപയോഗിച്ച് വേർതിരിച്ചുകൊണ്ട് നൽകുക.",
+ "Compressor Ratio":"കംപ്രസ്സർ അനുപാതം",
+ "Apply pitch shift to the audio.":"ഓഡിയോയിൽ പിച്ച് ഷിഫ്റ്റ് പ്രയോഗിക്കുക.",
+ "Preprocess Dataset":"ഡാറ്റാസെറ്റ് പ്രീപ്രോസസ് ചെയ്യുക",
+ "Specifies the overall quantity of epochs for the model training process.":"മോഡൽ പരിശീലന പ്രക്രിയയ്ക്കുള്ള യുഗങ്ങളുടെ മൊത്തം അളവ് വ്യക്തമാക്കുന്നു.",
+ "Custom Pretrained":"കസ്റ്റം പ്രീട്രെയിൻഡ്",
+ "Pitch Shift Semitones":"പിച്ച് ഷിഫ്റ്റ് സെമിറ്റോണുകൾ",
+ "Cache the dataset in GPU memory to speed up the training process.":"പരിശീലന പ്രക്രിയ വേഗത്തിലാക്കാൻ GPU മെമ്മറിയിൽ ഡാറ്റാസെറ്റ് കാഷെ ചെയ്യുക.",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.":"നിർദ്ദിഷ്ട ഉപയോഗ കേസിനായി രൂപകൽപ്പന ചെയ്ത ഏറ്റവും അനുയോജ്യമായ പ്രീട്രെയിൻഡ് മോഡലുകൾ തിരഞ്ഞെടുക്കുന്നത് പ്രകടനം ഗണ്യമായി മെച്ചപ്പെടുത്തることができるതിനാൽ, കസ്റ്റം പ്രീട്രെയിൻഡ് മോഡലുകൾ ഉപയോഗിക്കുന്നത് മികച്ച ഫലങ്ങളിലേക്ക് നയിച്ചേക്കാം.",
+ "Determine at how many epochs the model will saved at.":"എത്ര യുഗങ്ങളിൽ മോഡൽ സേവ് ചെയ്യുമെന്ന് നിർണ്ണയിക്കുക.",
+ "Set the gain dB.":"ഗെയിൻ dB സജ്ജമാക്കുക.",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.":"പ്രീപ്രോസസിൽ ഉപയോഗിക്കേണ്ട CPU കോറുകളുടെ എണ്ണം. ഡിഫോൾട്ട് ക്രമീകരണം നിങ്ങളുടെ cpu കോറുകളാണ്, മിക്ക കേസുകളിലും ഇത് ശുപാർശ ചെയ്യുന്നു.",
+ "Extract Features":"സവിശേഷതകൾ എക്സ്ട്രാക്റ്റുചെയ്യുക",
+ "Embedder Model":"എംബെഡർ മോഡൽ",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.":"എക്സ്ട്രാക്ഷൻ പ്രക്രിയയിൽ ഉപയോഗിക്കേണ്ട CPU കോറുകളുടെ എണ്ണം. ഡിഫോൾട്ട് ക്രമീകരണം നിങ്ങളുടെ cpu കോറുകളാണ്, മിക്ക കേസുകളിലും ഇത് ശുപാർശ ചെയ്യുന്നു.",
+ "Bitcrush":"ബിറ്റ്ക്രഷ്",
+ "Model used for learning speaker embedding.":"സ്പീക്കർ എംബെഡിംഗ് പഠിക്കാൻ ഉപയോഗിക്കുന്ന മോഡൽ.",
+ "Apply gain to the audio.":"ഓഡിയോയിൽ ഗെയിൻ പ്രയോഗിക്കുക.",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.":"വേഗതയേറിയ പ്രകടനത്തിനായി GPU-യിൽ മോഡൽ പ്രീപ്രോസസ്സിംഗ് പ്രവർത്തിപ്പിക്കുന്നതിനാണ് ഞങ്ങൾ മുൻഗണന നൽകുന്നത്. നിങ്ങൾ CPU ഉപയോഗിക്കാൻ താൽപ്പര്യപ്പെടുന്നുവെങ്കിൽ, GPU ഫീൽഡ് ശൂന്യമായി വിടുക.",
+ "Upload Pretrained Model":"പ്രീട്രെയിൻഡ് മോഡൽ അപ്ലോഡുചെയ്യുക",
+ "Save Every Epoch":"ഓരോ യുഗത്തിലും സേവ് ചെയ്യുക",
+ "Apply bitcrush to the audio.":"ഓഡിയോയിൽ ബിറ്റ്ക്രഷ് പ്രയോഗിക്കുക.",
+ "Limiter Release Time":"ലിമിറ്റർ റിലീസ് സമയം",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.":"മികച്ച GPU ആർക്കിടെക്ചർ ഉള്ള ഉപയോക്താക്കൾക്ക് ശുപാർശ ചെയ്യുന്ന വിപുലമായ GPU ക്രമീകരണങ്ങൾ സജ്ജമാക്കുന്നു.",
+ "Set the bitcrush bit depth.":"ബിറ്റ്ക്രഷ് ബിറ്റ് ആഴം സജ്ജമാക്കുക.",
+ "GPU Information":"GPU വിവരങ്ങൾ",
+ "Bitcrush Bit Depth":"ബിറ്റ്ക്രഷ് ബിറ്റ് ആഴം",
+ "Extract":"എക്സ്ട്രാക്റ്റുചെയ്യുക",
+ "Set the clipping threshold.":"ക്ലിപ്പിംഗ് പരിധി സജ്ജമാക്കുക.",
+ "Limiter":"ലിമിറ്റർ",
+ "Refresh Custom Pretraineds":"കസ്റ്റം പ്രീട്രെയിൻഡുകൾ പുതുക്കുക",
+ "Pretrained Custom Settings":"പ്രീട്രെയിൻഡ് കസ്റ്റം ക്രമീകരണങ്ങൾ",
+ "Set the compressor attack ms.":"കംപ്രസ്സർ അറ്റാക്ക് ms സജ്ജമാക്കുക.",
+ "Pitch Guidance":"പിച്ച് ഗൈഡൻസ്",
+ "0 to ∞ separated by -":"0 മുതൽ ∞ വരെ - കൊണ്ട് വേർതിരിക്കുക",
+ "Hop Length":"ഹോപ്പ് ദൈർഘ്യം",
+ "Use CPU":"CPU ഉപയോഗിക്കുക",
+ "Distortion":"വികലം",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.":"സിസ്റ്റത്തിന് ഒരു പ്രധാന പിച്ച് മാറ്റത്തിലേക്ക് മാറാൻ എടുക്കുന്ന സമയം സൂചിപ്പിക്കുന്നു. ചെറിയ ഹോപ്പ് ദൈർഘ്യങ്ങൾക്ക് ഇൻഫറൻസിന് കൂടുതൽ സമയം ആവശ്യമാണ്, പക്ഷേ ഉയർന്ന പിച്ച് കൃത്യത നൽകാനുള്ള പ്രവണതയുണ്ട്.",
+ "GPU Settings":"GPU ക്രമീകരണങ്ങൾ",
+ "Set the compressor ratio.":"കംപ്രസ്സർ അനുപാതം സജ്ജമാക്കുക.",
+ "Compressor":"കംപ്രസ്സർ",
+ "Set the pitch shift semitones.":"പിച്ച് ഷിഫ്റ്റ് സെമിറ്റോണുകൾ സജ്ജമാക്കുക.",
+ "The file you dropped is not a valid pretrained file. Please try again.":"നിങ്ങൾ ഡ്രോപ്പ് ചെയ്ത ഫയൽ സാധുവായ ഒരു പ്രീട്രെയിൻഡ് ഫയലല്ല. വീണ്ടും ശ്രമിക്കുക.",
+ "Total Epoch":"മൊത്തം യുഗം",
+ "Compressor Attack ms":"കംപ്രസ്സർ അറ്റാക്ക് ms",
+ "Gain dB":"ഗെയിൻ dB",
+ "Index Algorithm":"ഇൻഡെക്സ് അൽഗോരിതം",
+ "Apply clipping to the audio.":"ഓഡിയോയിൽ ക്ലിപ്പിംഗ് പ്രയോഗിക്കുക.",
+ "Save Every Weights":"എല്ലാ വെയ്റ്റുകളും സേവ് ചെയ്യുക",
+ "Force the use of CPU for training.":"പരിശീലനത്തിനായി CPU ഉപയോഗിക്കാൻ നിർബന്ധിക്കുക.",
+ "Set the limiter threshold dB.":"ലിമിറ്റർ പരിധി dB സജ്ജമാക്കുക.",
+ "GPU Custom Settings":"GPU കസ്റ്റം ക്രമീകരണങ്ങൾ",
+ "Batch Size":"ബാച്ച് വലുപ്പം",
+ "Apply limiter to the audio.":"ഓഡിയോയിൽ ലിമിറ്റർ പ്രയോഗിക്കുക.",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.":"വേഗതയേറിയ പ്രകടനത്തിനായി GPU-യിൽ മോഡൽ എക്സ്ട്രാക്ഷൻ പ്രവർത്തിപ്പിക്കുന്നതിനാണ് ഞങ്ങൾ മുൻഗണന നൽകുന്നത്. നിങ്ങൾ CPU ഉപയോഗിക്കാൻ താൽപ്പര്യപ്പെടുന്നുവെങ്കിൽ, GPU ഫീൽഡ് ശൂന്യമായി വിടുക.",
+ "Pretrained":"പ്രീട്രെയിൻഡ്",
+ "Click the refresh button to see the pretrained file in the dropdown menu.":"ഡ്രോപ്പ്ഡൗൺ മെനുവിൽ പ്രീട്രെയിൻഡ് ഫയൽ കാണുന്നതിന് റീഫ്രഷ് ബട്ടണിൽ ക്ലിക്ക് ചെയ്യുക.",
+ "Pretrained D Path":"കസ്റ്റം പ്രീട്രെയിൻഡ് D",
+ "Clipping Threshold":"ക്ലിപ്പിംഗ് പരിധി",
+ "Pretrained G Path":"കസ്റ്റം പ്രീട്രെയിൻഡ് G",
+ "Gain":"ഗെയിൻ",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.":"പിച്ച് ഗൈഡൻസ് ഉപയോഗിക്കുന്നതിലൂടെ, അതിന്റെ പിച്ച് ഉൾപ്പെടെയുള്ള യഥാർത്ഥ ശബ്ദത്തിന്റെ സ്വരസൂചകം പ്രതിഫലിപ്പിക്കാൻ കഴിയും. യഥാർത്ഥ മെലഡി അല്ലെങ്കിൽ പിച്ച് പാറ്റേൺ സംരക്ഷിക്കേണ്ട പാട്ട് പോലുള്ള സാഹചര്യങ്ങളിൽ ഈ സവിശേഷത പ്രത്യേകിച്ചും വിലപ്പെട്ടതാണ്.",
+ "GPU Number":"GPU നമ്പർ",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.":"നിങ്ങളുടെ GPU-യുടെ ലഭ്യമായ VRAM-ഉമായി ഇത് വിന്യസിക്കുന്നത് നല്ലതാണ്. 4 എന്ന ക്രമീകരണം മെച്ചപ്പെട്ട കൃത്യത നൽകുന്നു, പക്ഷേ പ്രോസസ്സിംഗ് മന്ദഗതിയിലാക്കുന്നു, 8 വേഗത്തിലും സ്റ്റാൻഡേർഡ് ഫലങ്ങളും നൽകുന്നു.",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.":"സ്വന്തമായി പരിശീലിപ്പിക്കുമ്പോൾ പ്രീട്രെയിൻഡ് മോഡലുകൾ ഉപയോഗിക്കുക. ഈ സമീപനം പരിശീലന ദൈർഘ്യം കുറയ്ക്കുകയും മൊത്തത്തിലുള്ള ഗുണനിലവാരം വർദ്ധിപ്പിക്കുകയും ചെയ്യുന്നു.",
+ "Clipping":"ക്ലിപ്പിംഗ്",
+ "Delay Seconds":"ഡിലേ സെക്കൻഡുകൾ",
+ "Overtraining Detector Settings":"ഓവർട്രെയിനിംഗ് ഡിറ്റക്ടർ ക്രമീകരണങ്ങൾ",
+ "Overtraining Threshold":"ഓവർട്രെയിനിംഗ് പരിധി",
+ "Set the delay seconds.":"ഡിലേ സെക്കൻഡുകൾ സജ്ജമാക്കുക.",
+ "Apply delay to the audio.":"ഓഡിയോയിൽ ഡിലേ പ്രയോഗിക്കുക.",
+ "Extra":"അധിക",
+ "Enter dataset path":"ഡാറ്റാസെറ്റ് പാത്ത് നൽകുക",
+ "Compressor Release ms":"കംപ്രസ്സർ റിലീസ് ms",
+ "Settings":"ക്രമീകരണങ്ങൾ",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.":"ഒരു മെച്ചപ്പെടുത്തലും കണ്ടെത്തുന്നില്ലെങ്കിൽ നിങ്ങളുടെ മോഡലിന്റെ പരിശീലനം നിർത്താൻ ആഗ്രഹിക്കുന്ന യുഗങ്ങളുടെ പരമാവധി എണ്ണം സജ്ജമാക്കുക.",
+ "Set the compressor release ms.":"കംപ്രസ്സർ റിലീസ് ms സജ്ജമാക്കുക.",
+ "Delay":"ഡിലേ",
+ "Model Name":"മോഡൽ നാമം",
+ "Upload .bin":".bin അപ്ലോഡുചെയ്യുക",
+ "Download":"ഡൗൺലോഡ് ചെയ്യുക",
+ "Fresh Training":"പുതിയ പരിശീലനം",
+ "Processing":"പ്രോസസ്സ് ചെയ്യുന്നു",
+ "Start Training":"പരിശീലനം ആരംഭിക്കുക",
+ "Folder Name":"ഫോൾഡർ നാമം",
+ "It's recommended to deactivate this option if your dataset has already been processed.":"നിങ്ങളുടെ ഡാറ്റാസെറ്റ് ഇതിനകം പ്രോസസ്സ് ചെയ്തിട്ടുണ്ടെങ്കിൽ ഈ ഓപ്ഷൻ നിഷ്ക്രിയമാക്കാൻ ശുപാർശ ചെയ്യുന്നു.",
+ "Refresh embedders":"എംബെഡറുകൾ പുതുക്കുക",
+ "Delay Mix":"ഡിലേ മിക്സ്",
+ "Generate Index":"ഇൻഡെക്സ് സൃഷ്ടിക്കുക",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.":"'അപ്ലോഡ്' ബട്ടൺ ഗൂഗിൾ കൊളാബിന് മാത്രമുള്ളതാണ്: എക്സ്പോർട്ട് ചെയ്ത ഫയലുകൾ നിങ്ങളുടെ Google ഡ്രൈവിലെ ApplioExported ഫോൾഡറിലേക്ക് അപ്ലോഡ് ചെയ്യുന്നു.",
+ "Set the delay mix.":"ഡിലേ മിക്സ് സജ്ജമാക്കുക.",
+ "Report a Bug":"ബഗ് റിപ്പോർട്ടുചെയ്യുക",
+ "Export Model":"മോഡൽ എക്സ്പോർട്ട് ചെയ്യുക",
+ "Set the delay feedback.":"ഡിലേ ഫീഡ്ബാക്ക് സജ്ജമാക്കുക.",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.":"നിങ്ങൾ പുതിയൊരു മോഡൽ ആദ്യം മുതൽ പരിശീലിപ്പിക്കുകയോ പരിശീലനം പുനരാരംഭിക്കുകയോ ചെയ്യുകയാണെങ്കിൽ മാത്രം ഈ ക്രമീകരണം പ്രാപ്തമാക്കുക. മുമ്പ് സൃഷ്ടിച്ച എല്ലാ വെയ്റ്റുകളും ടെൻസർബോർഡ് ലോഗുകളും ഇല്ലാതാക്കുന്നു.",
+ "Model Information":"മോഡൽ വിവരങ്ങൾ",
+ "Delay Feedback":"ഡിലേ ഫീഡ്ബാക്ക്",
+ "Stop Training":"പരിശീലനം നിർത്തുക",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.":"പരിശീലന ഡാറ്റ വളരെ നന്നായി പഠിക്കുന്നതിൽ നിന്നും പുതിയ ഡാറ്റയിലേക്ക് സാമാന്യവൽക്കരിക്കാനുള്ള കഴിവ് നഷ്ടപ്പെടുന്നതിൽ നിന്നും മോഡലിനെ തടയാൻ ഓവർട്രെയിനിംഗ് കണ്ടെത്തുക.",
+ "Custom Embedder":"കസ്റ്റം എംബെഡർ",
+ "Select Custom Embedder":"കസ്റ്റം എംബെഡർ തിരഞ്ഞെടുക്കുക",
+ "Plugins":"പ്ലഗിനുകൾ",
+ "Unload Voice":"ശബ്ദം നീക്കം ചെയ്യുക",
+ "Select Audio":"ഓഡിയോ തിരഞ്ഞെടുക്കുക",
+ "Set the distortion gain.":"വികല ഗെയിൻ സജ്ജമാക്കുക.",
+ "Drag your plugin.zip to install it":"ഇൻസ്റ്റാൾ ചെയ്യാൻ നിങ്ങളുടെ plugin.zip ഡ്രാഗ് ചെയ്യുക",
+ "Refresh":"പുതുക്കുക",
+ "Chorus":"കോറസ്",
+ "Precision":"കൃത്യത",
+ "Set the chorus depth.":"കോറസ് ആഴം സജ്ജമാക്കുക.",
+ "Apply chorus to the audio.":"ഓഡിയോയിൽ കോറസ് പ്രയോഗിക്കുക.",
+ "Single":"സിംഗിൾ",
+ "Chorus Center Delay ms":"കോറസ് സെന്റർ ഡിലേ ms",
+ "Post-Process":"പോസ്റ്റ്-പ്രോസസ്സ്",
+ "Language":"ഭാഷ",
+ "Chorus Depth":"കോറസ് ആഴം",
+ "Select the precision you want to use for training and inference.":"പരിശീലനത്തിനും ഇൻഫറൻസിനും ഉപയോഗിക്കാൻ ആഗ്രഹിക്കുന്ന കൃത്യത തിരഞ്ഞെടുക്കുക.",
+ "Index File":"ഇൻഡെക്സ് ഫയൽ",
+ "Set the chorus rate Hz.":"കോറസ് റേറ്റ് Hz സജ്ജമാക്കുക.",
+ "Exported Index file":"എക്സ്പോർട്ട് ചെയ്ത ഇൻഡെക്സ് ഫയൽ",
+ "Chorus Feedback":"കോറസ് ഫീഡ്ബാക്ക്",
+ "Update precision":"കൃത്യത അപ്ഡേറ്റ് ചെയ്യുക",
+ "Chorus Mix":"കോറസ് മിക്സ്",
+ "Select the voice model to use for the conversion.":"പരിവർത്തനത്തിനായി ഉപയോഗിക്കേണ്ട വോയ്സ് മോഡൽ തിരഞ്ഞെടുക്കുക.",
+ "Exported Pth file":"എക്സ്പോർട്ട് ചെയ്ത Pth ഫയൽ",
+ "Select the theme you want to use. (Requires restarting Applio)":"നിങ്ങൾക്ക് ഉപയോഗിക്കാനുള്ള തീം തിരഞ്ഞെടുക്കുക. (Applio പുനരാരംഭിക്കേണ്ടതുണ്ട്)",
+ "Select the index file to use for the conversion.":"പരിവർത്തനത്തിനായി ഉപയോഗിക്കേണ്ട ഇൻഡെക്സ് ഫയൽ തിരഞ്ഞെടുക്കുക.",
+ "Theme":"തീം",
+ "Restart Applio":"Applio പുനരാരംഭിക്കുക",
+ "Set the chorus center delay ms.":"കോറസ് സെന്റർ ഡിലേ ms സജ്ജമാക്കുക.",
+ "Select the pth file to be exported":"എക്സ്പോർട്ട് ചെയ്യേണ്ട pth ഫയൽ തിരഞ്ഞെടുക്കുക",
+ "Set the chorus feedback.":"കോറസ് ഫീഡ്ബാക്ക് സജ്ജമാക്കുക.",
+ "Select the index file to be exported":"എക്സ്പോർട്ട് ചെയ്യേണ്ട ഇൻഡെക്സ് ഫയൽ തിരഞ്ഞെടുക്കുക",
+ "Version Checker":"വെർഷൻ പരിശോധകൻ",
+ "Plugin Installer":"പ്ലഗിൻ ഇൻസ്റ്റാളർ",
+ "Set the chorus mix.":"കോറസ് മിക്സ് സജ്ജമാക്കുക.",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.":"ഡാറ്റാസെറ്റിനെ K ക്ലസ്റ്ററുകളായി വിഭജിക്കുന്ന ഒരു ക്ലസ്റ്ററിംഗ് അൽഗോരിതമാണ് KMeans. വലിയ ഡാറ്റാസെറ്റുകൾക്ക് ഈ ക്രമീകരണം പ്രത്യേകിച്ചും ഉപയോഗപ്രദമാണ്.",
+ "Upload":"അപ്ലോഡുചെയ്യുക",
+ "Overtraining Detector":"ഓവർട്രെയിനിംഗ് ഡിറ്റക്ടർ",
+ "Chorus Rate Hz":"കോറസ് റേറ്റ് Hz",
+ "Check which version of Applio is the latest to see if you need to update.":"നിങ്ങൾ അപ്ഡേറ്റ് ചെയ്യേണ്ടതുണ്ടോ എന്ന് കാണാൻ Applio-യുടെ ഏത് പതിപ്പാണ് ഏറ്റവും പുതിയതെന്ന് പരിശോധിക്കുക.",
+ "Upload Audio":"ഓഡിയോ അപ്ലോഡുചെയ്യുക",
+ "Select the language you want to use. (Requires restarting Applio)":"നിങ്ങൾക്ക് ഉപയോഗിക്കാനുള്ള ഭാഷ തിരഞ്ഞെടുക്കുക. (Applio പുനരാരംഭിക്കേണ്ടതുണ്ട്)",
+ "Check for updates":"അപ്ഡേറ്റുകൾക്കായി പരിശോധിക്കുക",
+ "Apply distortion to the audio.":"ഓഡിയോയിൽ വികലം പ്രയോഗിക്കുക.",
+ "Distortion Gain":"വികല ഗെയിൻ",
+ "Post-process the audio to apply effects to the output.":"ഔട്ട്പുട്ടിൽ ഇഫക്റ്റുകൾ പ്രയോഗിക്കുന്നതിന് ഓഡിയോ പോസ്റ്റ്-പ്രോസസ്സ് ചെയ്യുക.",
+ "Voice Model":"വോയ്സ് മോഡൽ",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.":"നിങ്ങളുടെ ഇൻഫറൻസുകളിൽ ഒരു സോഫ്റ്റ് ഓട്ടോട്യൂൺ പ്രയോഗിക്കുക, പാട്ട് പരിവർത്തനങ്ങൾക്ക് ശുപാർശ ചെയ്യുന്നു.",
+ "Select the audio to convert.":"പരിവർത്തനം ചെയ്യേണ്ട ഓഡിയോ തിരഞ്ഞെടുക്കുക.",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.":"ഒരു GPU ഇല്ലാത്തതിനാൽ പരിശീലനം നിലവിൽ പിന്തുണയ്ക്കുന്നില്ല. പരിശീലന ടാബ് സജീവമാക്കുന്നതിന്, ക്രമീകരണ ടാബിലേക്ക് നാവിഗേറ്റ് ചെയ്ത് 'Fake GPU' ഓപ്ഷൻ പ്രാപ്തമാക്കുക.",
+ "Drag and drop your model here":"നിങ്ങളുടെ മോഡൽ ഇവിടെ ഡ്രാഗ് ആൻഡ് ഡ്രോപ്പ് ചെയ്യുക",
+ "Upload a .txt file":"ഒരു .txt ഫയൽ അപ്ലോഡുചെയ്യുക",
+ "The output information will be displayed here.":"ഔട്ട്പുട്ട് വിവരങ്ങൾ ഇവിടെ പ്രദർശിപ്പിക്കും.",
+ "Introduce the model pth path":"മോഡൽ pth പാത്ത് അവതരിപ്പിക്കുക",
+ "Advanced Settings":"വിപുലമായ ക്രമീകരണങ്ങൾ",
+ "You can also use a custom path.":"നിങ്ങൾക്ക് ഒരു കസ്റ്റം പാതയും ഉപയോഗിക്കാം.",
+ "Audio Analyzer":"ഓഡിയോ അനലൈസർ",
+ "Output Path for TTS Audio":"TTS ഓഡിയോയ്ക്കുള്ള ഔട്ട്പുട്ട് പാത്ത്",
+ "Inference":"ഇൻഫറൻസ്",
+ "Clear Outputs (Deletes all audios in assets/audios)":"ഔട്ട്പുട്ടുകൾ മ്യൂട്ടുചെയ്യുക (അസറ്റുകൾ/ഓഡിയോകളിലെ എല്ലാ ഓഡിയോകളും ഇല്ലാതാക്കുന്നു)",
+ "Blend Ratio":"ബ്ലെൻഡ് അനുപാതം",
+ "Custom Output Path":"കസ്റ്റം ഔട്ട്പുട്ട് പാത്ത്",
+ "Enter text to synthesize":"സിന്തസൈസ് ചെയ്യേണ്ട വാചകം നൽകുക",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.":"സ്ഥാനം ഒരു വശത്തേക്കോ മറ്റൊന്നിലേക്കോ കൂടുതൽ ക്ഷണിക്കുന്നത് മോഡലിനെ ആദ്യത്തേതോ രണ്ടാമത്തേതോ പോലെയാക്കും.",
+ "It will activate the possibility of displaying the current Applio activity in Discord.":"നിലവിലെ Applio പ്രവർത്തനം Discord-ൽ പ്രദർശിപ്പിക്കാനുള്ള സാധ്യത ഇത് സജീവമാക്കും.",
+ "Enable fake GPU":"Fake GPU പ്രാപ്തമാക്കുക",
+ "Upscale Audio":"ഓഡിയോ അപ്സ്കെയിൽ ചെയ്യുക",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.":"ഉപയോഗിക്കാനുള്ള എളുപ്പത്തിലും പ്രകടനത്തിലും ശ്രദ്ധ കേന്ദ്രീകരിക്കുന്ന ഒരു ലളിതമായ, ഉയർന്ന നിലവാരമുള്ള വോയ്സ് പരിവർത്തന ഉപകരണം.\n[മലയാളം വിവർത്തനം: എനസ്](https://discord.com/users/1140031358006202468)",
+ "Output Path":"ഔട്ട്പുട്ട് പാത്ത്",
+ "Fusion":"ഫ്യൂഷൻ",
+ "Inroduce the model information":"മോഡൽ വിവരങ്ങൾ അവതരിപ്പിക്കുക",
+ "It will activate the possibility of downloading models with a click from the website.":"വെബ്സൈറ്റിൽ നിന്ന് ഒരു ക്ലിക്കിലൂടെ മോഡലുകൾ ഡൗൺലോഡ് ചെയ്യാനുള്ള സാധ്യത ഇത് സജീവമാക്കും.",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)":"ട്രെയിൻ ടാബ് സജീവമാക്കുന്നു. എന്നിരുന്നാലും, ഈ ഉപകരണത്തിന് GPU കഴിവുകൾ ഇല്ലെന്നും അതിനാൽ പരിശീലനം പിന്തുണയ്ക്കുന്നില്ലെന്നും ദയവായി ശ്രദ്ധിക്കുക. ഈ ഓപ്ഷൻ ടെസ്റ്റിംഗ് ആവശ്യങ്ങൾക്ക് മാത്രമുള്ളതാണ്. (ഈ ഓപ്ഷൻ Applio പുനരാരംഭിക്കും)",
+ "Autotune":"ഓട്ടോട്യൂൺ",
+ "Training":"പരിശീലനം",
+ "Export Format":"എക്സ്പോർട്ട് ഫോർമാറ്റ്",
+ "Enter the text to synthesize.":"സിന്തസൈസ് ചെയ്യേണ്ട വാചകം നൽകുക.",
+ "Path to Model":"മോഡലിലേക്കുള്ള പാത്ത്",
+ "Text to Synthesize":"സിന്തസൈസ് ചെയ്യേണ്ട വാചകം",
+ "Select the format to export the audio.":"ഓഡിയോ എക്സ്പോർട്ട് ചെയ്യേണ്ട ഫോർമാറ്റ് തിരഞ്ഞെടുക്കുക.",
+ "View model information":"മോഡൽ വിവരങ്ങൾ കാണുക",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.":"നോയ്സ് ഡിറ്റക്ഷൻ അൽഗോരിതങ്ങൾ ഉപയോഗിച്ച് നിങ്ങളുടെ ഓഡിയോ ഔട്ട്പുട്ട് വൃത്തിയാക്കുക, സംസാരിക്കുന്ന ഓഡിയോകൾക്ക് ശുപാർശ ചെയ്യുന്നു.",
+ "Clean Audio":"ഓഡിയോ വൃത്തിയാക്കുക",
+ "Select the TTS voice to use for the conversion.":"പരിവർത്തനത്തിനായി ഉപയോഗിക്കേണ്ട TTS ശബ്ദം തിരഞ്ഞെടുക്കുക.",
+ "Output Path for RVC Audio":"RVC ഓഡിയോയ്ക്കുള്ള ഔട്ട്പുട്ട് പാത്ത്",
+ "Enter path to model":"മോഡലിലേക്കുള്ള പാത്ത് നൽകുക",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav":"ഔട്ട്പുട്ട് ഓഡിയോ സേവ് ചെയ്യുന്ന പാത്ത്, സ്ഥിരസ്ഥിതിയായി അസറ്റുകൾ/ഓഡിയോകൾ/output.wav-ൽ",
+ "Model conversion":"മോഡൽ പരിവർത്തനം",
+ "Clean Strength":"വൃത്തിയാക്കൽ ശക്തി",
+ "This section contains some extra utilities that often may be in experimental phases.":"പരീക്ഷണാത്മക ഘട്ടങ്ങളിലായിരിക്കാവുന്ന ചില അധിക യൂട്ടിലിറ്റികൾ ഈ വിഭാഗത്തിൽ അടങ്ങിയിരിക്കുന്നു.",
+ "Output Information":"ഔട്ട്പുട്ട് വിവരങ്ങൾ",
+ "Input path for text file":"വാചക ഫയലിനുള്ള ഇൻപുട്ട് പാത്ത്",
+ "Split Audio":"ഓഡിയോ വിഭജിക്കുക",
+ "Enable Applio integration with applio.org/models using flask":"flask ഉപയോഗിച്ച് applio.org/models-മായി Applio സംയോജനം പ്രാപ്തമാക്കുക",
+ "Pth file":"Pth ഫയൽ",
+ "The information to be placed in the model (You can leave it blank or put anything).":"മോഡലിൽ സ്ഥാപിക്കേണ്ട വിവരങ്ങൾ (നിങ്ങൾക്ക് ഇത് ശൂന്യമായി விடാം അല്ലെങ്കിൽ എന്തും നടുക).",
+ "The path to the text file that contains content for text to speech.":"ടെക്സ്റ്റ്-ടു-സ്പീച്ചിനുള്ള ഉള്ളടക്കം അടങ്ങിയ വാചക ഫയലിലേക്കുള്ള പാത.",
+ "View":"കാണുക",
+ "Split the audio into chunks for inference to obtain better results in some cases.":"ചില സന്ദർഭങ്ങളിൽ മികച്ച ഫലങ്ങൾ ലഭിക്കുന്നതിന് ഇൻഫറൻസിനായി ഓഡിയോ കഷണങ്ങളായി വിഭജിക്കുക.",
+ "Model information to be placed":"സ്ഥാപിക്കേണ്ട മോഡൽ വിവരങ്ങൾ",
+ "Merge Audios":"ഓഡിയോകൾ ലയിപ്പിക്കുക",
+ "Enable Applio integration with Discord presence":"Discord സാന്നിധ്യവുമായി Applio സംയോജനം പ്രാപ്തമാക്കുക",
+ "Model extraction":"മോഡൽ എക്സ്ട്രാക്ഷൻ",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.":"നിങ്ങളുടെ .pth ഫയലും .index ഫയലും ഈ സ്ഥലത്തേക്ക് വലിച്ചിടുക. ഒന്ന് വലിച്ചിട്ട് പിന്നെ മറ്റൊന്ന് വലിച്ചിടുക.",
+ "Download Model":"മോഡൽ ഡൗൺലോഡ് ചെയ്യുക",
+ "## Drop files":"## ഫയലുകൾ ഡ്രോപ്പ് ചെയ്യുക",
+ "Introduce the model name to search.":"തിരയാനുള്ള മോഡൽ നാമം നൽകുക.",
+ "Dataset Creator":"ഡാറ്റാസെറ്റ് ക്രിയേറ്റർ",
+ "Increase or decrease TTS speed.":"TTS വേഗത വർദ്ധിപ്പിക്കുകയോ കുറയ്ക്കുകയോ ചെയ്യുക.",
+ "## Search Model":"## മോഡൽ തിരയുക",
+ "TTS Speed":"TTS വേഗത",
+ "TTS Voices":"TTS ശബ്ദങ്ങൾ",
+ "And select the sampling rate":"സാമ്പിൾ റേറ്റ് തിരഞ്ഞെടുക്കുക",
+ "## Download Pretrained Models":"## പ്രീട്രെയിൻഡ് മോഡലുകൾ ഡൗൺലോഡ് ചെയ്യുക",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.":"ഓഡിയോ ഫയൽ ഡാറ്റാസെറ്റിലേക്ക് വിജയകരമായി ചേർത്തിട്ടുണ്ട്. ദയവായി പ്രീപ്രോസസ് ബട്ടണിൽ ക്ലിക്ക് ചെയ്യുക.",
+ "Search":"തിരയുക",
+ "Introduce the model link":"മോഡൽ ലിങ്ക് അവതരിപ്പിക്കുക",
+ "Model Architecture":"മോഡൽ ആർക്കിടെക്ചർ",
+ "Model Link":"മോഡൽ ലിങ്ക്",
+ "Select the pretrained model you want to download.":"നിങ്ങൾ ഡൗൺലോഡ് ചെയ്യാൻ ആഗ്രഹിക്കുന്ന പ്രീട്രെയിൻഡ് മോഡൽ തിരഞ്ഞെടുക്കുക.",
+ "We couldn't find models by that name.":"ആ പേരിൽ മോഡലുകൾ കണ്ടെത്താനായില്ല.",
+ "Set the width of the reverb.":"റിവർബിന്റെ വീതി സജ്ജമാക്കുക.",
+ "Protect Voiceless Consonants":"ശബ്ദമില്ലാത്ത വ്യഞ്ജനാക്ഷരങ്ങൾ സംരക്ഷിക്കുക",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.":"ഇലക്ട്രോ-അക്കോസ്റ്റിക് കീറലും മറ്റ് കൃത്രിമങ്ങളും തടയുന്നതിന് വ്യത്യസ്ത വ്യഞ്ജനാക്ഷരങ്ങളും ശ്വസന ശബ്ദങ്ങളും സംരക്ഷിക്കുക. പാരാമീറ്ററിനെ അതിന്റെ പരമാവധി മൂല്യം 0.5 ലേക്ക് വലിച്ചിടുന്നത് സമഗ്രമായ പരിരക്ഷ നൽകുന്നു. എന്നിരുന്നാലും, ഈ മൂല്യം കുറയ്ക്കുന്നത് സംരക്ഷണത്തിന്റെ വ്യാപ്തി കുറച്ചേക്കാം, അതേസമയം സൂചിക ефек്റ്റ് ലഘൂകരിക്കാൻ സാധ്യതയുണ്ട്.",
+ "Pitch extraction algorithm":"പിച്ച് എക്സ്ട്രാക്ഷൻ അൽഗോരിതം",
+ "Get information about the audio":"ഓഡിയോയെക്കുറിച്ചുള്ള വിവരങ്ങൾ നേടുക",
+ "Model Creator":"മോഡൽ സ്രഷ്ടാവ്",
+ "## Voice Blender":"## വോയ്സ് ബ്ലെൻഡർ",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.":"ഓഡിയോ പരിവർത്തനത്തിനായി ഉപയോഗിക്കേണ്ട പിച്ച് എക്സ്ട്രാക്ഷൻ അൽഗോരിതം. ഡിഫോൾട്ട് അൽഗോരിതം rmvpe ആണ്, മിക്ക കേസുകളിലും ഇത് ശുപാർശ ചെയ്യുന്നു.",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.":"രണ്ട് വോയ്സ് മോഡലുകൾ തിരഞ്ഞെടുക്കുക, നിങ്ങളുടെ ആവശ്യമുള്ള ബ്ലെൻഡ് ശതമാനം സജ്ജമാക്കുക, പൂർണ്ണമായും പുതിയൊരു ശബ്ദത്തിലേക്ക് അവയെ കൂട്ടിച്ചേർക്കുക.",
+ "Upload .json":".json അപ്ലോഡുചെയ്യുക",
+ "Voice Blender":"വോയ്സ് ബ്ലെൻഡർ",
+ "Move files to custom embedder folder":"കസ്റ്റം എംബെഡർ ഫോൾഡറിലേക്ക് ഫയലുകൾ നീക്കുക",
+ "Convert":"പരിവർത്തനം ചെയ്യുക",
+ "Enter output path":"ഔട്ട്പുട്ട് പാത്ത് നൽകുക",
+ "model information":"മോഡൽ വിവരങ്ങൾ",
+ "Reverb":"റിവർബ്",
+ "Export Audio":"ഓഡിയോ എക്സ്പോർട്ട് ചെയ്യുക",
+ "Apply reverb to the audio.":"ഓഡിയോയിൽ റിവർബ് പ്രയോഗിക്കുക.",
+ "Output Folder":"ഔട്ട്പുട്ട് ഫോൾഡർ",
+ "Speaker ID":"സ്പീക്കർ ഐഡി",
+ "Select the speaker ID to use for the conversion.":"പരിവർത്തനത്തിനായി ഉപയോഗിക്കേണ്ട സ്പീക്കർ ഐഡി തിരഞ്ഞെടുക്കുക.",
+ "Name of the model creator. (Default: Unknown)":"മോഡൽ സ്രഷ്ടാവിന്റെ പേര്. (സ്ഥിരസ്ഥിതി: അജ്ഞാതം)",
+ "Reverb Room Size":"റിവർബ് റൂം വലുപ്പം",
+ "Batch":"ബാച്ച്",
+ "Set the dry gain of the reverb.":"റിവർബിന്റെ ഡ്രൈ ഗെയിൻ സജ്ജമാക്കുക.",
+ "Pitch Shift":"പിച്ച് ഷിഫ്റ്റ്",
+ "Reverb Damping":"റിവർബ് ഡാമ്പിംഗ്",
+ "Set the wet gain of the reverb.":"റിവർബിന്റെ വെറ്റ് ഗെയിൻ സജ്ജമാക്കുക.",
+ "Reverb Wet Gain":"റിവർബ് വെറ്റ് ഗെയിൻ",
+ "Model Author Name":"മോഡൽ രചയിതാവിന്റെ പേര്",
+ "Set the freeze mode of the reverb.":"റിവർബിന്റെ ഫ്രീസ് മോഡ് സജ്ജമാക്കുക.",
+ "Input Folder":"ഇൻപുട്ട് ഫോൾഡർ",
+ "Select the folder containing the audios to convert.":"പരിവർത്തനം ചെയ്യേണ്ട ഓഡിയോകൾ അടങ്ങിയ ഫോൾഡർ തിരഞ്ഞെടുക്കുക.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.":"ഓട്ടോട്യൂൺ ശക്തി സജ്ജമാക്കുക - നിങ്ങൾ അത് കൂടുതൽ വർദ്ധിപ്പിക്കുന്തോറും അത് ക്രോമാറ്റിക് ഗ്രിഡിലേക്ക് സ്നാപ്പ് ചെയ്യും.",
+ "Reverb Freeze Mode":"റിവർബ് ഫ്രീസ് മോഡ്",
+ "Reverb Width":"റിവർബ് വീതി",
+ "Set the damping of the reverb.":"റിവർബിന്റെ ഡാമ്പിംഗ് സജ്ജമാക്കുക.",
+ "Set the room size of the reverb.":"റിവർബിന്റെ റൂം വലുപ്പം സജ്ജമാക്കുക.",
+ "Reverb Dry Gain":"റിവർബ് ഡ്രൈ ഗെയിൻ",
+ "The name that will appear in the model information.":"മോഡൽ വിവരങ്ങളിൽ ദൃശ്യമാകുന്ന പേര്.",
+ "Set name":"പേര് സജ്ജമാക്കുക",
+ "Enter input path":"ഇൻപുട്ട് പാത്ത് നൽകുക",
+ "Select the folder where the output audios will be saved.":"ഔട്ട്പുട്ട് ഓഡിയോകൾ സേവ് ചെയ്യുന്ന ഫോൾഡർ തിരഞ്ഞെടുക്കുക.",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)":"ഓഡിയോ ഉയർന്ന നിലവാരത്തിലേക്ക് അപ്സ്കെയിൽ ചെയ്യുക, കുറഞ്ഞ നിലവാരമുള്ള ഓഡിയോകൾക്ക് ശുപാർശ ചെയ്യുന്നു. (ഓഡിയോ പ്രോസസ്സ് ചെയ്യാൻ കൂടുതൽ സമയമെടുത്തേക്കാം)",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.":"ഇൻഡെക്സ് ഫയൽ ചെലുത്തുന്ന സ്വാധീനം; ഉയർന്ന മൂല്യം കൂടുതൽ സ്വാധീനത്തിന് തുല്യമാണ്. എന്നിരുന്നാലും, കുറഞ്ഞ മൂല്യങ്ങൾ തിരഞ്ഞെടുക്കുന്നത് ഓഡിയോയിൽ ഉweല്ല ആർട്ടിഫാക്റ്റുകളെ ലഘൂകരിക്കാൻ സഹായിച്ചേക്കാം.",
+ "Preprocess":"പ്രീപ്രോസസ്സ്",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.":"നിങ്ങൾക്ക് ആവശ്യമുള്ള ഓഡിയോയിലേക്ക് ക്ലീൻ-അപ്പ് ലെവൽ സജ്ജമാക്കുക, നിങ്ങൾ അത് കൂടുതൽ വർദ്ധിപ്പിക്കുന്തോറും അത് കൂടുതൽ വൃത്തിയാക്കും, പക്ഷേ ഓഡിയോ കൂടുതൽ കംപ്രസ് ചെയ്യപ്പെടാൻ സാധ്യതയുണ്ട്.",
+ "Enter dataset name":"ഡാറ്റാസെറ്റ് നാമം നൽകുക",
+ "Audio cutting":"ഓഡിയോ കട്ടിംഗ്",
+ "Formant Shifting":"ഫോർമാന്റ് ഷിഫ്റ്റിംഗ്",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.":"ഔട്ട്പുട്ടിന്റെ വോളിയം എൻവലപ്പുമായി മാറ്റിസ്ഥാപിക്കുകയോ ബ്ലെൻഡ് ചെയ്യുകയോ ചെയ്യുക. അനുപാതം 1 ന് അടുത്താണെങ്കിൽ, ഔട്ട്പുട്ട് എൻവലപ്പ് കൂടുതൽ ഉപയോഗിക്കുന്നു.",
+ "Refresh Datasets":"ഡാറ്റാസെറ്റുകൾ പുതുക്കുക",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.":"ഫോർമാന്റ് ഷിഫ്റ്റിംഗ് പ്രാപ്തമാക്കുക. പുരുഷനിൽ നിന്ന് സ്ത്രീയിലേക്കും തിരിച്ചും പരിവർത്തനങ്ങൾക്ക് ഉപയോഗിക്കുന്നു.",
+ "Search Feature Ratio":"സെർച്ച് ഫീച്ചർ അനുപാതം",
+ "Browse presets for formanting":"ഫോർമാന്റിംഗിനുള്ള പ്രീസെറ്റുകൾ ബ്രൗസ് ചെയ്യുക",
+ "Presets are located in /assets/formant_shift folder":"പ്രീസെറ്റുകൾ /അസറ്റുകൾ/ഫോർമാന്റ്_ഷിഫ്റ്റ് ഫോൾഡറിലാണ് സ്ഥിതിചെയ്യുന്നത്",
+ "Dataset Name":"ഡാറ്റാസെറ്റ് നാമം",
+ "Dataset Path":"ഡാറ്റാസെറ്റ് പാത്ത്",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.":"സംഖ്യ മൂന്നോ അതിൽ കൂടുതലോ ആണെങ്കിൽ, ശേഖരിച്ച ടോൺ ഫലങ്ങളിൽ മീഡിയൻ ഫിൽട്ടറിംഗ് പ്രയോഗിക്കുന്നത് ശ്വസനം കുറയ്ക്കാനുള്ള സാധ്യതയുണ്ട്.",
+ "Process effects":"ഇഫക്റ്റുകൾ പ്രോസസ്സ് ചെയ്യുക",
+ "Default value is 1.0":"സ്ഥിരസ്ഥിതി മൂല്യം 1.0 ആണ്",
+ "Quefrency for formant shifting":"ഫോർമാന്റ് ഷിഫ്റ്റിംഗിനുള്ള ക്യൂഫ്രെൻസി",
+ "Volume Envelope":"വോളിയം എൻവലപ്പ്",
+ "Timbre for formant shifting":"ഫോർമാന്റ് ഷിഫ്റ്റിംഗിനുള്ള ടിംബർ",
+ "Filter Radius":"ഫിൽട്ടർ ആരം",
+ "Pitch":"പിച്ച്",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.":"ഓഡിയോയുടെ പിച്ച് സജ്ജമാക്കുക, മൂല്യം കൂടുന്തോറും പിച്ച് കൂടും.",
+ "Name of the new model.":"പുതിയ മോഡലിന്റെ പേര്.",
+ "Stop Recording":"റെക്കോർഡിംഗ് നിർത്തുക",
+ "## Download Model":"## മോഡൽ ഡൗൺലോഡ് ചെയ്യുക",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.":"കാലക്രമേണ ഒരു ശബ്ദത്തിന്റെ അടിസ്ഥാന ആവൃത്തിയിലെ വ്യതിയാനങ്ങളെ f0 വക്രം പ്രതിനിധീകരിക്കുന്നു, പിച്ച് എങ്ങനെ ഉയരുന്നുവെന്നും വീഴുന്നുവെന്നും കാണിക്കുന്നു.",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.":"1. നിങ്ങൾ അനുഭവിക്കുന്ന പ്രശ്നം റെക്കോർഡുചെയ്യാൻ തുടങ്ങുന്നതിന് താഴെയുള്ള 'റെക്കോർഡ് സ്ക്രീൻ' ബട്ടണിൽ ക്ലിക്ക് ചെയ്യുക.",
+ "# How to Report an Issue on GitHub":"# GitHub-ൽ ഒരു പ്രശ്നം എങ്ങനെ റിപ്പോർട്ടുചെയ്യാം",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.":"3. [GitHub Issues](https://github.com/IAHispano/Applio/issues) എന്നതിലേക്ക് പോയി 'New Issue' ബട്ടണിൽ ക്ലിക്ക് ചെയ്യുക.",
+ "Record Screen":"സ്ക്രീൻ റെക്കോർഡുചെയ്യുക",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).":"2. പ്രശ്നം റെക്കോർഡുചെയ്തുകഴിഞ്ഞാൽ, 'റെക്കോർഡിംഗ് നിർത്തുക' ബട്ടണിൽ ക്ലിക്ക് ചെയ്യുക (ഒരേ ബട്ടൺ, പക്ഷേ നിങ്ങൾ സജീവമായി റെക്കോർഡുചെയ്യുന്നുണ്ടോ ഇല്ലയോ എന്നതിനെ ആശ്രയിച്ച് ലേബൽ മാറുന്നു).",
+ "See Model Information":"മോഡൽ വിവരങ്ങൾ കാണുക",
+ "Output of the pth file":"pth ഫയലിന്റെ ഔട്ട്പുട്ട്",
+ "Extract F0 Curve":"F0 കർവ് എക്സ്ട്രാക്റ്റുചെയ്യുക",
+ "Record":"റെക്കോർഡുചെയ്യുക",
+ "Introduce the model .pth path":"മോഡൽ .pth പാത്ത് അവതരിപ്പിക്കുക",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.":"4. നൽകിയിരിക്കുന്ന ഇഷ്യൂ ടെംപ്ലേറ്റ് പൂർത്തിയാക്കുക, ആവശ്യാനുസരണം വിശദാംശങ്ങൾ ഉൾപ്പെടുത്തുന്നുണ്ടെന്ന് ഉറപ്പാക്കുക, മുമ്പത്തെ ഘട്ടത്തിൽ നിന്ന് റെക്കോർഡുചെയ്ത ഫയൽ അപ്ലോഡുചെയ്യുന്നതിന് അസറ്റുകൾ വിഭാഗം ഉപയോഗിക്കുക.",
+ "Name of the new dataset.":"പുതിയ ഡാറ്റാസെറ്റിന്റെ പേര്.",
+ "Upload Audio Dataset":"ഓഡിയോ ഡാറ്റാസെറ്റ് അപ്ലോഡുചെയ്യുക",
+ "Sampling Rate":"സാമ്പിൾ റേറ്റ്",
+ "Version of the model architecture.":"മോഡൽ ആർക്കിടെക്ചറിന്റെ പതിപ്പ്.",
+ "Path to the dataset folder.":"ഡാറ്റാസെറ്റ് ഫോൾഡറിലേക്കുള്ള പാത്ത്.",
+ "Enter model name":"മോഡൽ നാമം നൽകുക",
+ "The sampling rate of the audio files.":"ഓഡിയോ ഫയലുകളുടെ സാമ്പിൾ റേറ്റ്."
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/mr_MR.json b/assets/i18n/languages/mr_MR.json
new file mode 100644
index 0000000000000000000000000000000000000000..e9cedec73703946ba40cd16fe4380c9269a30d80
--- /dev/null
+++ b/assets/i18n/languages/mr_MR.json
@@ -0,0 +1,175 @@
+{
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "अल्टिमेट व्हॉइस क्लोनिंग टूल, अप्रतिम शक्ती, मॉड्युलरिटी आणि वापरकर्ता-अनुकूल अनुभवासाठी काळजीपूर्वक ऑप्टिमाइझ केलेले.",
+ "This section contains some extra utilities that often may be in experimental phases.": "या विभागात काही अतिरिक्त उपयोगिता आहेत ज्या बर्याचदा प्रायोगिक टप्प्यात असू शकतात.",
+ "Output Information": "आउटपुट माहिती",
+ "The output information will be displayed here.": "आउटपुट माहिती येथे प्रदर्शित केली जाईल.",
+ "Inference": "निष्कर्ष",
+ "Train": "आगगाडी",
+ "Extra": "अतिरिक्त",
+ "Merge Audios": "Merges Tऑडिओ",
+ "Processing": "प्रोसेसिंग",
+ "Audio Analyzer": "ऑडिओ विश्लेषक",
+ "Model Information": "मॉडेल माहिती",
+ "Plugins": "प्लगइन्स",
+ "Download": "डाउनलोड करा",
+ "Report a Bug": "बग ची नोंद करा",
+ "Settings": "सेटिंग्स",
+ "Preprocess": "पूर्वप्रक्रिया",
+ "Model Name": "मॉडेलचे नाव",
+ "Name of the new model.": "नवीन मॉडेलचे नाव .",
+ "Enter model name": "मॉडेल नाव प्रविष्ट करा",
+ "Dataset Path": "डेटासेट पथ",
+ "Path to the dataset folder.": "डेटासेट फोल्डरचा मार्ग.",
+ "Refresh Datasets": "डेटासेट रिफ्रेश करा",
+ "Dataset Creator": "डेटासेट निर्माता",
+ "Dataset Name": "डेटासेट चे नाव",
+ "Name of the new dataset.": "नवीन डेटासेटचे नाव.",
+ "Enter dataset name": "डेटासेट नाव प्रविष्ट करा",
+ "Upload Audio Dataset": "ऑडिओ डेटासेट अपलोड करा",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "ऑडिओ फाइल डेटासेटमध्ये यशस्वीरित्या जोडली गेली आहे. कृपया प्रीप्रोसेस बटणावर क्लिक करा.",
+ "Enter dataset path": "डेटासेट मार्ग प्रविष्ट करा",
+ "Sampling Rate": "नमुना दर",
+ "The sampling rate of the audio files.": "ऑडिओ फायलींचे नमुने घेण्याचा दर.",
+ "Model Architecture": "आरव्हीसी आवृत्ती",
+ "Version of the model architecture.": "मॉडेलची आरव्हीसी आवृत्ती.",
+ "Preprocess Dataset": "Preprocess Dataset",
+ "Extract": "अर्क",
+ "Hop Length": "हॉप लांबी",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "प्रणालीला महत्त्वपूर्ण खेळपट्टी बदलाकडे संक्रमण होण्यासाठी लागणारा कालावधी दर्शवितो. लहान हॉप लांबीसाठी अनुमानासाठी अधिक वेळ लागतो परंतु खेळपट्टीची अचूकता जास्त असते.",
+ "Batch Size": "बॅच आकार",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "हे आपल्या जीपीयूच्या उपलब्ध व्हीआरएएमसह संरेखित करण्याचा सल्ला दिला जातो. 4 ची सेटिंग सुधारित अचूकता परंतु हळू प्रक्रिया प्रदान करते, तर 8 वेगवान आणि मानक परिणाम प्रदान करते.",
+ "Save Every Epoch": "प्रत्येक युग वाचवा",
+ "Determine at how many epochs the model will saved at.": "मॉडेल किती युगात जतन करेल हे ठरवा.",
+ "Total Epoch": "एकूण युग",
+ "Specifies the overall quantity of epochs for the model training process.": "मॉडेल प्रशिक्षण प्रक्रियेसाठी युगांची एकूण मात्रा निर्दिष्ट करते.",
+ "Pretrained": "पूर्वप्रशिक्षित",
+ "Save Only Latest": "फक्त लेटेस्ट सेव्ह करा",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "ही सेटिंग सक्षम केल्याने जी आणि डी फायली केवळ त्यांच्या अलीकडील आवृत्त्या वाचवतील आणि स्टोरेज स्पेस प्रभावीपणे जतन करतील.",
+ "Save Every Weights": "प्रत्येक वजन वाचवा",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "ही सेटिंग आपल्याला प्रत्येक युगाच्या शेवटी मॉडेलची वजने वाचविण्यास सक्षम करते.",
+ "Custom Pretrained": "सानुकूल पूर्वप्रशिक्षित",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "सानुकूल पूर्वप्रशिक्षित मॉडेल्स चा वापर केल्यास उत्कृष्ट परिणाम मिळू शकतात, कारण विशिष्ट वापर प्रकरणानुसार सर्वात योग्य पूर्वप्रशिक्षित मॉडेल्स ची निवड केल्यास कार्यक्षमता लक्षणीय वाढू शकते.",
+ "Upload Pretrained Model": "पूर्वप्रशिक्षित मॉडेल अपलोड करा",
+ "Refresh Custom Pretraineds": "रिफ्रेश सानुकूल पूर्वप्रशिक्षित",
+ "Pretrained Custom Settings": "पूर्वप्रशिक्षित सानुकूल सेटिंग्ज",
+ "The file you dropped is not a valid pretrained file. Please try again.": "आपण टाकलेली फाईल वैध पूर्वप्रशिक्षित फाइल नाही. कृपया पुन्हा प्रयत्न करा.",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "ड्रॉपडाउन मेनूमध्ये पूर्वप्रशिक्षित फाइल पाहण्यासाठी रिफ्रेश बटणावर क्लिक करा.",
+ "Pretrained G Path": "सानुकूल पूर्वप्रशिक्षित जी",
+ "Pretrained D Path": "सानुकूल पूर्वप्रशिक्षित डी",
+ "GPU Settings": "जीपीयू सेटिंग्स",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "प्रगत जीपीयू सेटिंग्ज सेट करा, चांगल्या जीपीयू आर्किटेक्चर असलेल्या वापरकर्त्यांसाठी शिफारस केली आहे.",
+ "GPU Custom Settings": "जीपीयू सानुकूल सेटिंग्स",
+ "GPU Number": "जीपीयू नंबर",
+ "0 to ∞ separated by -": "0 ते ∞ वेगळे केले जातात -",
+ "GPU Information": "जीपीयू माहिती",
+ "Pitch Guidance": "खेळपट्टी मार्गदर्शन",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "खेळपट्टीमार्गदर्शनाचा वापर करून मूळ आवाजाच्या खेळपट्टीसह त्याच्या अंतर्मुखतेचे प्रतिबिंब उमटविणे शक्य होते. हे वैशिष्ट्य गायन आणि इतर दृश्यांसाठी विशेषतः मौल्यवान आहे जिथे मूळ सूर किंवा पिच पॅटर्न जतन करणे आवश्यक आहे.",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "स्वत: चे प्रशिक्षण देताना पूर्वप्रशिक्षित मॉडेल्स वापरा. हा दृष्टिकोन प्रशिक्षण कालावधी कमी करतो आणि एकंदर गुणवत्ता वाढवतो.",
+ "Extract Features": "अर्क वैशिष्ट्ये",
+ "Start Training": "प्रशिक्षण सुरू करा",
+ "Generate Index": "इंडेक्स तयार करा",
+ "Voice Model": "व्हॉइस मॉडेल",
+ "Select the voice model to use for the conversion.": "रूपांतरणासाठी वापरण्यासाठी व्हॉइस मॉडेल निवडा.",
+ "Index File": "अनुक्रमणिका फाइल",
+ "Select the index file to use for the conversion.": "रूपांतरणासाठी वापरण्यासाठी अनुक्रमणिका फाइल निवडा.",
+ "Refresh": "टवटवी आणणे",
+ "Unload Voice": "आवाज अनलोड करा",
+ "Single": "अविवाहित",
+ "Upload Audio": "ऑडिओ अपलोड करा",
+ "Select Audio": "ऑडिओ निवडा",
+ "Select the audio to convert.": "रूपांतरित करण्यासाठी ऑडिओ निवडा.",
+ "Advanced Settings": "प्रगत सेटिंग्ज",
+ "Clear Outputs (Deletes all audios in assets/audios)": "स्पष्ट आउटपुट (मालमत्ता / ऑडिओमधील सर्व ऑडिओ हटवतात)",
+ "Custom Output Path": "सानुकूल आउटपुट पथ",
+ "Output Path": "आउटपुट पथ",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "तो मार्ग जिथे आउटपुट ऑडिओ जतन केला जाईल, मालमत्ता / ऑडिओ / output.wav मध्ये डिफॉल्टद्वारे",
+ "Split Audio": "स्प्लिट ऑडिओ",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "काही प्रकरणांमध्ये चांगले परिणाम मिळविण्यासाठी अनुमानासाठी ऑडिओचे तुकडे करा.",
+ "Autotune": "Autotune",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "गायन रूपांतरणासाठी शिफारस केलेल्या आपल्या निष्कर्षांवर सॉफ्ट ऑटोट्यून लागू करा.",
+ "Clean Audio": "स्वच्छ ऑडिओ",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "ध्वनी शोध अल्गोरिदम वापरुन आपले ऑडिओ आउटपुट स्वच्छ करा, ऑडिओ बोलण्यासाठी शिफारस केली आहे.",
+ "Clean Strength": "स्वच्छ शक्ती",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "आपल्याला हव्या असलेल्या ऑडिओमध्ये क्लीन-अप पातळी सेट करा, आपण ते जितके वाढवाल तितके ते साफ होईल, परंतु ऑडिओ अधिक संकुचित होण्याची शक्यता आहे.",
+ "Pitch": "खेळपट्टी",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "ऑडिओची खेळपट्टी सेट करा, किंमत जितकी जास्त तितकी खेळपट्टी जास्त.",
+ "Filter Radius": "फिल्टर त्रिज्या",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "जर संख्या तीनपेक्षा जास्त किंवा समान असेल तर संकलित टोन परिणामांवर मध्यम फिल्टरिंग वापरल्यास श्वसन कमी होण्याची क्षमता असते.",
+ "Search Feature Ratio": "शोध वैशिष्ट्य गुणोत्तर",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "अनुक्रमणिका संचिकेने टाकलेला प्रभाव; उच्च मूल्य अधिक प्रभावाशी संबंधित आहे. तथापि, कमी मूल्यांची निवड केल्याने ऑडिओमध्ये असलेल्या कलाकृती कमी होण्यास मदत होते.",
+ "Volume Envelope": "Volume लिफाफा",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "आउटपुटच्या व्हॉल्यूम लिफाफ्यासह पर्याय किंवा मिश्रण करा. गुणोत्तर 1 च्या जितके जवळ असेल तितके आउटपुट लिफाफा वापरला जातो.",
+ "Protect Voiceless Consonants": "आवाजहीन व्यंजनांचे रक्षण करा",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "इलेक्ट्रो-ध्वनिक फाटणे आणि इतर कलाकृती टाळण्यासाठी विशिष्ट व्यंजने आणि श्वासोच्छवासाच्या आवाजांचे रक्षण करा. पॅरामीटरला त्याच्या 0.5 च्या जास्तीत जास्त मूल्यावर खेचणे व्यापक संरक्षण प्रदान करते. तथापि, हे मूल्य कमी केल्याने अनुक्रमणिका प्रभाव संभाव्यत: कमी करताना संरक्षणाची व्याप्ती कमी होऊ शकते.",
+ "Pitch extraction algorithm": "पिच निष्कर्षण अल्गोरिदम",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "ऑडिओ रूपांतरणासाठी वापरण्यासाठी पिच एक्सट्रॅक्शन अल्गोरिदम. डिफॉल्ट अल्गोरिदम आरएमव्हीपीई आहे, ज्याची शिफारस बहुतेक प्रकरणांमध्ये केली जाते.",
+ "Convert": "धर्मांतर करा",
+ "Export Audio": "निर्यात ऑडिओ",
+ "Batch": "तुकडी",
+ "Input Folder": "इनपुट फोल्डर",
+ "Select the folder containing the audios to convert.": "रूपांतरित करण्यासाठी ऑडिओ असलेले फोल्डर निवडा.",
+ "Enter input path": "इनपुट पथ प्रविष्ट करा",
+ "Output Folder": "आउटपुट फोल्डर",
+ "Select the folder where the output audios will be saved.": "फोल्डर निवडा जेथे आउटपुट ऑडिओ सेव्ह केले जातील.",
+ "Enter output path": "आउटपुट पथ प्रविष्ट करा",
+ "Get information about the audio": "ऑडिओबद्दल माहिती मिळवा",
+ "Information about the audio file": "ऑडिओ फाईलची माहिती",
+ "Waiting for information...": "माहितीच्या प्रतीक्षेत...",
+ "## Voice Blender": "## व्हॉइस ब्लेंडर",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "दोन व्हॉईस मॉडेल निवडा, आपली इच्छित मिश्रण टक्केवारी सेट करा आणि त्यांना पूर्णपणे नवीन आवाजात मिसळा.",
+ "Voice Blender": "व्हॉइस ब्लेंडर",
+ "Drag and drop your model here": "आपले मॉडेल येथे खेचून टाका आणि सोडा",
+ "You can also use a custom path.": "आपण सानुकूल मार्ग देखील वापरू शकता.",
+ "Blend Ratio": "मिश्रण गुणोत्तर",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "एका किंवा दुसर्या बाजूला स्थिती अधिक समायोजित केल्याने मॉडेल पहिल्या किंवा दुसर्या बाजूला अधिक समान होईल.",
+ "Fusion": "फ्यूजन",
+ "Path to Model": "मॉडेल चा मार्ग",
+ "Enter path to model": "मॉडेलचा मार्ग प्रविष्ट करा",
+ "Model information to be placed": "मॉडेल माहिती ठेवली जाईल",
+ "Inroduce the model information": "मॉडेल ची माहिती सादर करा",
+ "The information to be placed in the model (You can leave it blank or put anything).": "मॉडेलमध्ये ठेवली जाणारी माहिती (आपण ती रिकामी ठेवू शकता किंवा काहीही टाकू शकता).",
+ "View model information": "मॉडेल माहिती पहा",
+ "Introduce the model pth path": "मॉडेल पीटीएच पथ सादर करा",
+ "View": "पहा",
+ "Model extraction": "मॉडेल निष्कर्षण",
+ "Model conversion": "मॉडेल रूपांतरण",
+ "Pth file": "पीटीएच फाईल",
+ "Output of the pth file": "पीटीएच फाईलचे आउटपुट",
+ "# How to Report an Issue on GitHub": "# गिटहबवर एखाद्या समस्येची नोंद कशी करावी",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. आपण अनुभवत असलेल्या समस्येचे रेकॉर्डिंग सुरू करण्यासाठी खालील 'रेकॉर्ड स्क्रीन' बटणावर क्लिक करा.",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "२. अंक रेकॉर्ड िंग पूर्ण झाल्यावर 'स्टॉप रेकॉर्डिंग' बटणावर क्लिक करा (तेच बटण, पण तुम्ही सक्रियपणे रेकॉर्डिंग करत आहात की नाही यावर अवलंबून लेबल बदलते).",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. [गिटहब इश्यूज] (https://github.com/IAHispano/Applio/issues) वर जा आणि 'न्यू इश्यू' बटणावर क्लिक करा.",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. प्रदान केलेले इश्यू टेम्पलेट पूर्ण करा, आवश्यकतेनुसार तपशील समाविष्ट करण्याची खात्री करा आणि मागील चरणातून रेकॉर्ड केलेली फाइल अपलोड करण्यासाठी मालमत्ता विभागाचा वापर करा.",
+ "Record Screen": "रेकॉर्ड स्क्रीन",
+ "Record": "नोंदणे",
+ "Stop Recording": "रेकॉर्डिंग थांबवा",
+ "Introduce the model .pth path": "मॉडेल .पीटीएच पथ सादर करा",
+ "See Model Information": "मॉडेल माहिती पहा",
+ "## Download Model": "## मॉडेल डाऊनलोड करा",
+ "Model Link": "मॉडेल लिंक",
+ "Introduce the model link": "मॉडेल लिंक ची ओळख करून द्या",
+ "Download Model": "मॉडेल डाउनलोड करा",
+ "## Drop files": "## फाइल्स ड्रॉप करा",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "आपली .pth फाइल आणि .अनुक्रमणिका फाईल या जागेत खेचून घ्या. एकाला ओढून घ्या आणि मग दुसरं.",
+ "TTS Voices": "टीटीएस आवाज",
+ "Select the TTS voice to use for the conversion.": "रूपांतरणासाठी वापरण्यासाठी टीटीएस आवाज निवडा.",
+ "Text to Synthesize": "संश्लेषित करण्यासाठी मजकूर",
+ "Enter the text to synthesize.": "संश्लेषित करण्यासाठी मजकूर प्रविष्ट करा.",
+ "Upload a .txt file": "किंवा तुम्ही .txt फाईल अपलोड करू शकता",
+ "Enter text to synthesize": "संश्लेषित करण्यासाठी मजकूर प्रविष्ट करा",
+ "Output Path for TTS Audio": "टीटीएस ऑडिओसाठी आउटपुट पथ",
+ "Output Path for RVC Audio": "आरव्हीसी ऑडिओसाठी आउटपुट पथ",
+ "Enable Applio integration with Discord presence": "डिस्कॉर्ड उपस्थितीसह अनुप्रयोग एकीकरण सक्षम करा",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "हे डिस्कॉर्डमध्ये सध्याची ऍप्लिओ क्रियाकलाप प्रदर्शित करण्याची शक्यता सक्रिय करेल.",
+ "Enable Applio integration with applio.org/models using flask": "फ्लास्क वापरुन applio.org/models अनुप्रयोगा एकीकरण सक्षम करा",
+ "It will activate the possibility of downloading models with a click from the website.": "हे वेबसाइटवरून एका क्लिकवर मॉडेल्स डाउनलोड करण्याची शक्यता सक्रिय करेल.",
+ "Theme": "थीम :",
+ "Select the theme you want to use. (Requires restarting Applio)": "आपण वापरू इच्छित थीम निवडा. (अनुप्रयोग पुन्हा सुरू करणे आवश्यक आहे)",
+ "Language": "भाषा",
+ "Select the language you want to use. (Requires restarting Applio)": "आपल्याला जी भाषा वापरायची आहे ती निवडा. (अनुप्रयोग पुन्हा सुरू करणे आवश्यक आहे)",
+ "Plugin Installer": "Plugin Installer",
+ "Drag your plugin.zip to install it": "ते स्थापित करण्यासाठी आपले plugin.zip खेचून घ्या",
+ "Version Checker": "Version Checker",
+ "Check which version of Applio is the latest to see if you need to update.": "आपल्याला अद्ययावत करण्याची आवश्यकता आहे की नाही हे पाहण्यासाठी अ ॅप्लिओची कोणती आवृत्ती नवीनतम आहे ते पहा.",
+ "Check for updates": "अपडेट्ससाठी पहा"
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/ms_MS.json b/assets/i18n/languages/ms_MS.json
new file mode 100644
index 0000000000000000000000000000000000000000..b61ebb1cef2a030c2b6b0512b7043bfa91e1bb8b
--- /dev/null
+++ b/assets/i18n/languages/ms_MS.json
@@ -0,0 +1,325 @@
+{
+ "Training": "Latihan",
+ "Inference": "Inferens",
+ "Output Information": "Maklumat Output",
+ "Extra": "Tambahan",
+ "Plugins": "Plugin",
+ "The output information will be displayed here.": "Maklumat output akan dipaparkan di sini.",
+ "Settings": "Seting",
+ "Download": "Muat turun",
+ "Processing": "Pemprosesan",
+ "Audio Analyzer": "Penganalisis Audio",
+ "Model Information": "Maklumat Model",
+ "Preprocess": "Praproses",
+ "This section contains some extra utilities that often may be in experimental phases.": "Bahagian ini mengandungi beberapa utiliti tambahan yang selalunya mungkin dalam fasa percubaan.",
+ "Report a Bug": "Laporkan Pepijat",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "Alat penukaran suara yang ringkas dan berkualiti tinggi yang memfokuskan pada kemudahan penggunaan dan prestasi.",
+ "Merge Audios": "Gabungkan Audio",
+ "Audio cutting": "Pemotongan audio",
+ "Process effects": "Kesan proses",
+ "Model Name": "Nama Model",
+ "Name of the new model.": "Nama model baharu.",
+ "Enter model name": "Masukkan nama model",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "Adalah disyorkan untuk menyahaktifkan pilihan ini jika set data anda telah diproses.",
+ "Dataset Path": "Laluan Set Data",
+ "Dataset Creator": "Pencipta Set Data",
+ "Path to the dataset folder.": "Laluan ke folder set data.",
+ "Dataset Name": "Nama Set Data",
+ "Refresh Datasets": "Muat semula Set Data",
+ "Name of the new dataset.": "Nama set data baharu.",
+ "Enter dataset name": "Masukkan nama set data",
+ "Upload Audio Dataset": "Muat Naik Set Data Audio",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Fail audio telah berjaya ditambahkan pada set data. Sila klik butang praproses.",
+ "Enter dataset path": "Masukkan laluan set data",
+ "Sampling Rate": "Kadar pensampelan",
+ "Extract": "Cabutan",
+ "Model Architecture": "Seni Bina Model",
+ "Embedder Model": "Embedder Model",
+ "Version of the model architecture.": "Versi seni bina model.",
+ "The sampling rate of the audio files.": "Kadar pensampelan fail audio.",
+ "Preprocess Dataset": "Set Data Praproses",
+ "Model used for learning speaker embedding.": "Model yang digunakan untuk mempelajari pembenaman pembesar suara.",
+ "Save Every Epoch": "Simpan Setiap Zaman",
+ "Total Epoch": "Jumlah Zaman",
+ "Batch Size": "Saiz Kumpulan",
+ "Determine at how many epochs the model will saved at.": "Tentukan berapa banyak zaman model akan disimpan.",
+ "Specifies the overall quantity of epochs for the model training process.": "Menentukan kuantiti keseluruhan zaman untuk proses latihan model.",
+ "Pretrained": "Pralatih",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Menandakan tempoh yang diperlukan untuk sistem beralih kepada perubahan padang yang ketara. Panjang lompatan yang lebih kecil memerlukan lebih banyak masa untuk inferens tetapi cenderung menghasilkan ketepatan nada yang lebih tinggi.",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Adalah dinasihatkan untuk menyelaraskannya dengan VRAM GPU anda yang tersedia. Tetapan 4 menawarkan ketepatan yang lebih baik tetapi pemprosesan yang lebih perlahan, manakala 8 memberikan hasil yang lebih pantas dan standard.",
+ "Save Only Latest": "Simpan Terkini Sahaja",
+ "Save Every Weights": "Simpan Setiap Berat",
+ "Hop Length": "Panjang Hop",
+ "Custom Pretrained": "Pralatih Tersuai",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Tetapan ini membolehkan anda menyimpan berat model pada akhir setiap zaman.",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Mendayakan tetapan ini akan menyebabkan fail G dan D menyimpan hanya versi terbaharunya, menjimatkan ruang storan dengan berkesan.",
+ "Upload Pretrained Model": "Muat naik Model Pralatih",
+ "Pretrained Custom Settings": "Tetapan Tersuai Pralatih",
+ "Refresh Custom Pretraineds": "Segarkan Semula Pralatih Tersuai",
+ "The file you dropped is not a valid pretrained file. Please try again.": "Fail yang anda gugurkan bukanlah fail praterlatih yang sah. Sila cuba lagi.",
+ "GPU Settings": "Tetapan GPU",
+ "Pretrained D Path": "Tersuai Pralatih D",
+ "GPU Custom Settings": "Tetapan Tersuai GPU",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Klik butang muat semula untuk melihat fail praterlatih dalam menu lungsur.",
+ "Pretrained G Path": "Tersuai Pralatih G",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Menetapkan tetapan GPU lanjutan, disyorkan untuk pengguna yang mempunyai seni bina GPU yang lebih baik.",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Menggunakan model praterlatih tersuai boleh membawa kepada hasil yang unggul, kerana memilih model praterlatih yang paling sesuai yang disesuaikan dengan kes penggunaan tertentu boleh meningkatkan prestasi dengan ketara.",
+ "0 to ∞ separated by -": "0 hingga ∞ dipisahkan oleh -",
+ "GPU Number": "Nombor GPU",
+ "The GPU information will be displayed here.": "Maklumat GPU akan dipaparkan di sini.",
+ "GPU Information": "Maklumat GPU",
+ "Pitch Guidance": "Panduan Padang",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "Bilangan teras CPU untuk digunakan dalam praproses. Tetapan lalai ialah teras cpu anda, yang disyorkan untuk kebanyakan kes.",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "Bilangan teras CPU untuk digunakan dalam proses pengekstrakan. Tetapan lalai ialah teras cpu anda, yang disyorkan untuk kebanyakan kes.",
+ "Use CPU": "Gunakan CPU",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Tentukan bilangan GPU yang ingin anda gunakan untuk mengekstrak dengan memasukkannya dipisahkan oleh tanda sempang (-).",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Tentukan bilangan GPU yang ingin anda gunakan untuk praproses dengan memasukkannya dipisahkan oleh tanda sempang (-). Pada masa ini, menggunakan berbilang gpu tidak akan memberi kesan yang ketara.",
+ "Force the use of CPU for training.": "Paksa penggunaan CPU untuk latihan.",
+ "Extract Features": "Ciri-ciri Ekstrak",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Gunakan model praterlatih semasa melatih model anda sendiri. Pendekatan ini mengurangkan tempoh latihan dan meningkatkan kualiti keseluruhan.",
+ "Cache Dataset in GPU": "Set Data Cache dalam GPU",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Kami mengutamakan menjalankan prapemprosesan model pada GPU untuk prestasi yang lebih pantas. Jika anda lebih suka menggunakan CPU, biarkan medan GPU kosong.",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Kami mengutamakan menjalankan pengekstrakan model pada GPU untuk prestasi yang lebih pantas. Jika anda lebih suka menggunakan CPU, biarkan medan GPU kosong.",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Dengan menggunakan bimbingan nada, ia menjadi boleh dilaksanakan untuk mencerminkan intonasi suara asal, termasuk nadanya. Ciri ini amat berharga untuk nyanyian dan senario lain di mana mengekalkan melodi asal atau corak nada adalah penting.",
+ "Index Algorithm": "Algoritma Indeks",
+ "Cache the dataset in GPU memory to speed up the training process.": "Cache set data dalam memori GPU untuk mempercepatkan proses latihan.",
+ "Overtraining Detector": "Pengesan Latihan Berlebihan",
+ "Overtraining Threshold": "Ambang Latihan Berlebihan",
+ "Fresh Training": "Latihan Segar",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans ialah algoritma pengelompokan yang membahagikan set data kepada kluster. Tetapan ini amat berguna untuk set data yang besar.",
+ "Overtraining Detector Settings": "Tetapan Pengesan Latihan Berlebihan",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Tetapkan bilangan zaman maksimum yang anda mahu model anda berhenti latihan jika tiada penambahbaikan dikesan.",
+ "Stop Training": "Hentikan Latihan",
+ "Start Training": "Mulakan Latihan",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "Dayakan tetapan ini hanya jika anda melatih model baharu dari awal atau memulakan semula latihan. Memadamkan semua pemberat dan log tensorboard yang dijana sebelum ini.",
+ "Export Model": "Model Eksport",
+ "Generate Index": "Menjana Indeks",
+ "Exported Index file": "Fail Indeks yang dieksport",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Kesan latihan berlebihan untuk menghalang model daripada mempelajari data latihan dengan terlalu baik dan kehilangan keupayaan untuk menyamaratakan kepada data baharu.",
+ "Exported Pth file": "Fail Pth yang dieksport",
+ "Upload": "Muat naik",
+ "Voice Model": "Model Suara",
+ "Select the index file to be exported": "Pilih fail indeks yang akan dieksport",
+ "Select the pth file to be exported": "Pilih fail pth yang akan dieksport",
+ "Refresh": "Refresh",
+ "Index File": "Fail Indeks",
+ "Select the voice model to use for the conversion.": "Pilih model suara untuk digunakan untuk penukaran.",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "Butang 'Muat naik' hanya untuk colab google: Memuat naik fail yang dieksport ke folder ApplioExported dalam Google Drive anda.",
+ "Single": "Tunggal",
+ "Select Audio": "Pilih Audio",
+ "Unload Voice": "Bongkar Suara",
+ "Select the index file to use for the conversion.": "Pilih fail indeks untuk digunakan untuk penukaran.",
+ "Upload Audio": "Muat naik Audio",
+ "Advanced Settings": "Tetapan Lanjutan",
+ "Select the audio to convert.": "Pilih audio untuk ditukar.",
+ "Custom Output Path": "Laluan Output Tersuai",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Kosongkan Output (Memadamkan semua audio dalam aset/audio)",
+ "Output Path": "Laluan Keluaran",
+ "Export Format": "Format Eksport",
+ "Split Audio": "Audio Berpisah",
+ "Select the format to export the audio.": "Pilih format untuk mengeksport audio.",
+ "Autotune": "Autotune",
+ "Clean Audio": "Audio Bersih",
+ "Clean Strength": "Kekuatan Bersih",
+ "Upscale Audio": "Audio Kelas Atas",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Bahagikan audio kepada ketulan untuk inferens bagi mendapatkan hasil yang lebih baik dalam beberapa kes.",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "Laluan di mana audio output akan disimpan, secara lalai dalam aset/audio/output.wav",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Tingkatkan audio kepada kualiti yang lebih tinggi, disyorkan untuk audio berkualiti rendah. (Ia mungkin mengambil masa yang lebih lama untuk memproses audio)",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Bersihkan output audio anda menggunakan algoritma pengesanan bunyi, disyorkan untuk audio pertuturan.",
+ "Browse presets for formanting": "Layari pratetap untuk forman",
+ "Formant Shifting": "Peralihan Forman",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Dayakan peralihan forman. Digunakan untuk penukaran lelaki kepada wanita dan sebaliknya.",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Gunakan autotune lembut pada kesimpulan anda, disyorkan untuk penukaran nyanyian.",
+ "Presets are located in /assets/formant_shift folder": "Pratetap terletak dalam folder /assets/formant_shift",
+ "Pitch": "Pitch",
+ "Quefrency for formant shifting": "Quefrency untuk peralihan forman",
+ "Default value is 1.0": "Nilai lalai ialah 1.0",
+ "Timbre for formant shifting": "Timbre untuk peralihan forman",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Tetapkan tahap pembersihan kepada audio yang anda mahukan, lebih banyak anda meningkatkannya lebih banyak ia akan dibersihkan, tetapi ada kemungkinan audio akan lebih dimampatkan.",
+ "Filter Radius": "Jejari Penapis",
+ "Search Feature Ratio": "Nisbah Ciri Carian",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Tetapkan nada audio, semakin tinggi nilainya, semakin tinggi nada.",
+ "Volume Envelope": "Sampul Isipadu",
+ "Convert": "Menukar",
+ "Pitch extraction algorithm": "Algoritma pengekstrakan padang",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Pengaruh yang dikenakan oleh fail indeks; nilai yang lebih tinggi sepadan dengan pengaruh yang lebih besar. Walau bagaimanapun, memilih nilai yang lebih rendah boleh membantu mengurangkan artifak yang terdapat dalam audio.",
+ "Batch": "Kelompok",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Jika bilangannya lebih besar daripada atau sama dengan tiga, menggunakan penapisan median pada hasil nada yang dikumpul berpotensi untuk mengurangkan pernafasan.",
+ "Protect Voiceless Consonants": "Lindungi Konsonan Tanpa Suara",
+ "Export Audio": "Eksport Audio",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Gantikan atau campurkan dengan sampul kelantangan output. Semakin dekat nisbah kepada 1, semakin banyak sampul keluaran digunakan.",
+ "Input Folder": "Input Folder",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Algoritma pengekstrakan padang untuk digunakan untuk penukaran audio. Algoritma lalai ialah rmvpe, yang disyorkan untuk kebanyakan kes.",
+ "Select the folder containing the audios to convert.": "Pilih folder yang mengandungi audio untuk ditukar.",
+ "Output Folder": "Folder Keluaran",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Lindungi konsonan dan bunyi pernafasan yang berbeza untuk mengelakkan koyakan elektro-akustik dan artifak lain. Menarik parameter ke nilai maksimum 0.5 menawarkan perlindungan menyeluruh. Walau bagaimanapun, mengurangkan nilai ini mungkin mengurangkan tahap perlindungan sambil berpotensi mengurangkan kesan pengindeksan.",
+ "Enter input path": "Masukkan laluan input",
+ "Enter output path": "Masukkan laluan output",
+ "Select the folder where the output audios will be saved.": "Pilih folder di mana audio output akan disimpan.",
+ "Get information about the audio": "Dapatkan maklumat tentang audio",
+ "Fusion": "Gabungan",
+ "Voice Blender": "Pengisar Suara",
+ "## Voice Blender": "## Pengisar Suara",
+ "Blend Ratio": "Nisbah Campuran",
+ "Drag and drop your model here": "Seret dan lepaskan model anda di sini",
+ "You can also use a custom path.": "Anda juga boleh menggunakan laluan tersuai.",
+ "Path to Model": "Laluan ke Model",
+ "Enter path to model": "Masukkan laluan kepada model",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Pilih dua model suara, tetapkan peratusan campuran yang anda inginkan dan gabungkan ke dalam suara yang sama sekali baharu.",
+ "Model information to be placed": "Maklumat model yang akan diletakkan",
+ "Inroduce the model information": "Memaklumkan maklumat model",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Melaraskan kedudukan lebih ke arah satu sisi atau yang lain akan menjadikan model lebih serupa dengan yang pertama atau kedua.",
+ "View model information": "Lihat maklumat model",
+ "View": "Lihat",
+ "Introduce the model pth path": "Perkenalkan laluan pth model",
+ "The information to be placed in the model (You can leave it blank or put anything).": "Maklumat yang akan diletakkan dalam model (Anda boleh membiarkannya kosong atau meletakkan apa-apa).",
+ "Model extraction": "Pengekstrakan model",
+ "Model conversion": "Penukaran model",
+ "Pth file": "Fail Pth",
+ "Output of the pth file": "Output fail pth",
+ "Extract F0 Curve": "Ekstrak Lengkung F0",
+ "# How to Report an Issue on GitHub": "# Cara Melaporkan Isu di GitHub",
+ "Record": "Rekod",
+ "Record Screen": "Skrin Rakam",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "Lengkung f0 mewakili variasi dalam frekuensi asas suara dari semasa ke semasa, menunjukkan bagaimana nada naik dan turun.",
+ "Stop Recording": "Hentikan Rakaman",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Klik pada butang 'Rakam Skrin' di bawah untuk mula merakam isu yang anda alami.",
+ "See Model Information": "Lihat Maklumat Model",
+ "Introduce the model .pth path": "Perkenalkan laluan model .pth",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Pergi ke [Isu GitHub](https://github.com/IAHispano/Applio/issues) dan klik pada butang 'Isu Baharu'.",
+ "Model Link": "Pautan Model",
+ "Introduce the model link": "Perkenalkan pautan model",
+ "## Download Model": "## Muat turun Model",
+ "Download Model": "Muat turun Model",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Lengkapkan templat isu yang disediakan, pastikan untuk memasukkan butiran mengikut keperluan, dan gunakan bahagian aset untuk memuat naik fail yang dirakam dari langkah sebelumnya.",
+ "## Drop files": "## Jatuhkan fail",
+ "Search": "Carian",
+ "## Search Model": "## Model Carian",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Sebaik sahaja anda selesai merakam isu tersebut, klik pada butang 'Hentikan Rakaman' (butang yang sama, tetapi label berubah bergantung pada sama ada anda merakam secara aktif atau tidak).",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Seret fail .pth dan fail .index anda ke dalam ruang ini. Seret satu dan kemudian yang lain.",
+ "## Download Pretrained Models": "## Muat turun Model Pralatih",
+ "We couldn't find models by that name.": "Kami tidak dapat mencari model dengan nama itu.",
+ "And select the sampling rate": "Dan pilih kadar pensampelan.",
+ "TTS Speed": "Kelajuan TTS",
+ "TTS Voices": "Suara TTS",
+ "Increase or decrease TTS speed.": "Tingkatkan atau kurangkan kelajuan TTS.",
+ "Select the pretrained model you want to download.": "Pilih model praterlatih yang ingin anda muat turun.",
+ "Text to Synthesize": "Teks untuk Disintesis",
+ "Enter the text to synthesize.": "Masukkan teks untuk disintesis.",
+ "Introduce the model name to search.": "Perkenalkan nama model untuk mencari.",
+ "Select the TTS voice to use for the conversion.": "Pilih suara TTS untuk digunakan untuk penukaran.",
+ "Upload a .txt file": "Muat naik fail .txt",
+ "Input path for text file": "Laluan input untuk fail teks",
+ "Enter text to synthesize": "Masukkan teks untuk disintesis",
+ "Output Path for TTS Audio": "Laluan Output untuk Audio TTS",
+ "Output Path for RVC Audio": "Laluan Output untuk Audio RVC",
+ "The path to the text file that contains content for text to speech.": "Laluan ke fail teks yang mengandungi kandungan untuk teks ke pertuturan.",
+ "Enable Applio integration with Discord presence": "Dayakan penyepaduan Applio dengan kehadiran Discord",
+ "Theme": "Tema",
+ "It will activate the possibility of downloading models with a click from the website.": "Ia akan mengaktifkan kemungkinan memuat turun model dengan satu klik dari laman web.",
+ "Restart Applio": "Mulakan semula Applio",
+ "Language": "Bahasa",
+ "Enable fake GPU": "Dayakan GPU palsu",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "Ia akan mengaktifkan kemungkinan memaparkan aktiviti Applio semasa dalam Discord.",
+ "Select the theme you want to use. (Requires restarting Applio)": "Pilih tema yang anda mahu gunakan. (Memerlukan memulakan semula Applio)",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "Latihan pada masa ini tidak disokong kerana ketiadaan GPU. Untuk mengaktifkan tab latihan, navigasi ke tab tetapan dan dayakan pilihan 'GPU Palsu'.",
+ "Enable Applio integration with applio.org/models using flask": "Dayakan penyepaduan Applio dengan applio.org/models menggunakan kelalang",
+ "Precision": "Ketepatan",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Mengaktifkan tab kereta api. Walau bagaimanapun, sila ambil perhatian bahawa peranti ini tidak mempunyai keupayaan GPU, oleh itu latihan tidak disokong. Pilihan ini hanya untuk tujuan ujian. (Pilihan ini akan memulakan semula Applio)",
+ "Select the language you want to use. (Requires restarting Applio)": "Pilih bahasa yang anda mahu gunakan. (Memerlukan memulakan semula Applio)",
+ "Plugin Installer": "Pemasang Pemalam",
+ "Update precision": "Kemas kini ketepatan",
+ "Select the precision you want to use for training and inference.": "Pilih ketepatan yang anda mahu gunakan untuk latihan dan inferens.",
+ "Version Checker": "Penyemak Versi",
+ "Post-Process": "Pasca Proses",
+ "Drag your plugin.zip to install it": "Seret plugin.zip anda untuk memasangnya",
+ "Reverb": "Reverb",
+ "Check for updates": "Semak kemas kini",
+ "Check which version of Applio is the latest to see if you need to update.": "Semak versi Applio yang terkini untuk melihat sama ada anda perlu mengemas kini.",
+ "Apply reverb to the audio.": "Gunakan gema pada audio.",
+ "Reverb Room Size": "Saiz Bilik Reverb",
+ "Post-process the audio to apply effects to the output.": "Pasca proses audio untuk menggunakan kesan pada output.",
+ "Reverb Damping": "Redaman Reverb",
+ "Set the room size of the reverb.": "Tetapkan saiz bilik gema.",
+ "Set the damping of the reverb.": "Tetapkan redaman reverb.",
+ "Reverb Dry Gain": "Reverb Keuntungan Kering",
+ "Reverb Width": "Lebar Reverb",
+ "Set the wet gain of the reverb.": "Tetapkan keuntungan basah gema.",
+ "Reverb Freeze Mode": "Mod Pembekuan Reverb",
+ "Set the width of the reverb.": "Tetapkan lebar gema.",
+ "Reverb Wet Gain": "Keuntungan Basah Reverb",
+ "Pitch Shift": "Anjakan Padang",
+ "Set the freeze mode of the reverb.": "Tetapkan mod beku gema.",
+ "Limiter": "Penghadang",
+ "Pitch Shift Semitones": "Semitone Anjakan Padang",
+ "Apply limiter to the audio.": "Gunakan limiter pada audio.",
+ "Apply pitch shift to the audio.": "Gunakan anjakan nada pada audio.",
+ "Limiter Threshold dB": "Sempadan Sempadan dB",
+ "Gain": "Mendapat",
+ "Set the pitch shift semitones.": "Tetapkan semiton anjakan nada.",
+ "Set the limiter threshold dB.": "Tetapkan ambang pengehad dB.",
+ "Limiter Release Time": "Masa Pelepasan Limiter",
+ "Set the dry gain of the reverb.": "Tetapkan keuntungan kering gema.",
+ "Distortion": "Herotan",
+ "Set the limiter release time.": "Tetapkan masa pelepasan pengehad.",
+ "Apply gain to the audio.": "Gunakan keuntungan pada audio.",
+ "Gain dB": "Dapatkan dB",
+ "Set the gain dB.": "Tetapkan keuntungan dB.",
+ "Apply distortion to the audio.": "Gunakan herotan pada audio.",
+ "Distortion Gain": "Keuntungan Herotan",
+ "Set the distortion gain.": "Tetapkan keuntungan herotan.",
+ "Chorus Rate Hz": "Kadar Korus Hz",
+ "Apply chorus to the audio.": "Gunakan korus pada audio.",
+ "Chorus": "Korus",
+ "Chorus Depth": "Kedalaman Korus",
+ "Set the chorus rate Hz.": "Tetapkan kadar korus Hz.",
+ "Chorus Center Delay ms": "Kelewatan Pusat Korus ms",
+ "Set the chorus depth.": "Tetapkan kedalaman korus.",
+ "Set the chorus feedback.": "Tetapkan maklum balas korus.",
+ "Chorus Feedback": "Maklum Balas Korus",
+ "Bitcrush": "Bitcrush",
+ "Clipping": "Keratan",
+ "Set the chorus mix.": "Tetapkan campuran korus.",
+ "Bitcrush Bit Depth": "Kedalaman Bit Bitcrush",
+ "Chorus Mix": "Campuran Korus",
+ "Set the bitcrush bit depth.": "Tetapkan kedalaman bit bitcrush.",
+ "Clipping Threshold": "Ambang Keratan",
+ "Apply clipping to the audio.": "Gunakan keratan pada audio.",
+ "Compressor": "Pemampat",
+ "Apply bitcrush to the audio.": "Gunakan bitcrush pada audio.",
+ "Set the clipping threshold.": "Tetapkan ambang keratan.",
+ "Compressor Threshold dB": "Ambang Pemampat dB",
+ "Apply compressor to the audio.": "Gunakan pemampat pada audio.",
+ "Compressor Ratio": "Nisbah Pemampat",
+ "Set the compressor ratio.": "Tetapkan nisbah pemampat.",
+ "Compressor Attack ms": "Serangan Pemampat ms",
+ "Delay": "Kelewatan",
+ "Set the compressor threshold dB.": "Tetapkan ambang pemampat dB.",
+ "Set the compressor attack ms.": "Tetapkan serangan pemampat ms.",
+ "Compressor Release ms": "Pelepasan pemampat ms",
+ "Set the compressor release ms.": "Tetapkan pelepasan pemampat ms.",
+ "Set the chorus center delay ms.": "Tetapkan kelewatan pusat korus ms.",
+ "Delay Feedback": "Maklum balas kelewatan",
+ "Set the delay seconds.": "Tetapkan detik kelewatan.",
+ "Delay Seconds": "Kelewatan Detik",
+ "Apply delay to the audio.": "Gunakan kelewatan pada audio.",
+ "Set the delay feedback.": "Tetapkan maklum balas kelewatan.",
+ "Set the delay mix.": "Tetapkan campuran kelewatan.",
+ "Delay Mix": "Campuran Kelewatan",
+ "Refresh embedders": "Muat semula pembenam",
+ "Custom Embedder": "Embedder Tersuai",
+ "Folder Name": "Nama Folder",
+ "Upload .bin": "Muat naik .bin",
+ "model information": "Maklumat model",
+ "Move files to custom embedder folder": "Alihkan fail ke folder embedder tersuai",
+ "Speaker ID": "ID Pembesar Suara",
+ "Name of the model creator. (Default: Unknown)": "Nama pencipta model. (Lalai: Tidak diketahui)",
+ "Upload .json": "Muat naik .json",
+ "Model Author Name": "Nama Pengarang Model",
+ "Select the speaker ID to use for the conversion.": "Pilih ID pembesar suara untuk digunakan untuk penukaran.",
+ "Set name": "Tetapkan nama",
+ "The name that will appear in the model information.": "Nama yang akan muncul dalam maklumat model.",
+ "Model Creator": "Pencipta Model",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "Tetapkan kekuatan autotune - semakin banyak anda meningkatkannya, semakin banyak ia akan terpasang ke grid kromatik.",
+ "Select Custom Embedder": "Pilih Custom Embedder"
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/mt_MT.json b/assets/i18n/languages/mt_MT.json
new file mode 100644
index 0000000000000000000000000000000000000000..ef98867dc01d8e67b32594d197d8387bbd5a8380
--- /dev/null
+++ b/assets/i18n/languages/mt_MT.json
@@ -0,0 +1,325 @@
+{
+ "Extra": "Extra",
+ "Processing": "Ipproċessar",
+ "Inference": "Inferenza",
+ "Audio Analyzer": "Analizzatur tal-Awdjo",
+ "Download": "Tniżżel",
+ "Merge Audios": "Għaqqad l-Awdjo",
+ "The output information will be displayed here.": "L-informazzjoni dwar l-output se tintwera hawn.",
+ "Model Information": "Informazzjoni mudell",
+ "Settings": "Issettjar",
+ "This section contains some extra utilities that often may be in experimental phases.": "Din it-taqsima fiha xi utilitajiet żejda li ħafna drabi jistgħu jkunu f'fażijiet sperimentali.",
+ "Plugins": "Plugins",
+ "Report a Bug": "Irrapporta Bug",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "Għodda sempliċi u ta 'kwalità għolja ta' konverżjoni tal-vuċi ffokata fuq il-faċilità tal-użu u l-prestazzjoni.",
+ "Preprocess": "Proċess minn qabel",
+ "Audio cutting": "Qtugħ ta 'l-awdjo",
+ "Model Name": "Isem il-Mudell",
+ "Process effects": "Effetti tal-proċess",
+ "Name of the new model.": "Isem il-mudell il-ġdid.",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "Huwa rrakkomandat li tiddiżattiva din l-għażla jekk is-sett tad-dejta tiegħek ikun diġà ġie pproċessat.",
+ "Dataset Path": "Mogħdija tas-Sett tad-Dejta",
+ "Dataset Creator": "Kreatur tas-sett tad-dejta",
+ "Path to the dataset folder.": "Mogħdija għall-fowlder tas-sett tad-dejta.",
+ "Dataset Name": "Isem is-sett tad-dejta",
+ "Refresh Datasets": "Aġġorna s-Settijiet tad-Dejta",
+ "Enter dataset name": "Daħħal l-isem tas-sett tad-dejta",
+ "Name of the new dataset.": "Isem is-sett tad-dejta l-ġdid.",
+ "Upload Audio Dataset": "Tella' Dataset ta' l-Awdjo",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Il-fajl ta' l-awdjo ġie miżjud b'suċċess mas-sett tad-data. Jekk jogħġbok ikklikkja l-buttuna preprocess.",
+ "Sampling Rate": "Rata ta' teħid ta' kampjuni",
+ "Extract": "Estratt",
+ "Model Architecture": "Mudell tal-Arkitettura",
+ "Enter dataset path": "Daħħal il-mogħdija tas-sett tad-dejta",
+ "The sampling rate of the audio files.": "Ir-rata ta' teħid ta' kampjuni tal-fajls awdjo.",
+ "Embedder Model": "Mudell Embedder",
+ "Preprocess Dataset": "Sett tad-Dejta ta' qabel il-proċess",
+ "Model used for learning speaker embedding.": "Mudell użat għall-inkorporazzjoni tal-kelliem tat-tagħlim.",
+ "Hop Length": "Tul tal-Ħops",
+ "Batch Size": "Daqs tal- Lott",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Jindika t-tul ta' żmien li hemm bżonn biex is-sistema tgħaddi għal bidla sinifikanti fil-pitch. Tulijiet iżgħar tal-ħops jeħtieġu aktar ħin għall-inferenza iżda għandhom it-tendenza li jagħtu preċiżjoni ogħla tal-pitch.",
+ "Save Every Epoch": "Issejvja Kull Epoka",
+ "Pretrained": "Imħarreġ minn qabel",
+ "Save Only Latest": "Issejvja Biss l-Aħħar",
+ "Total Epoch": "Epoka totali",
+ "Training": "Taħriġ",
+ "Output Information": "Informazzjoni dwar l-Output",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Huwa rakkomandabbli li tallinjaha mal-VRAM disponibbli tal-GPU tiegħek. Issettjar ta '4 joffri preċiżjoni mtejba iżda proċessar aktar bil-mod, filwaqt li 8 jipprovdi riżultati aktar mgħaġġla u standard.",
+ "Custom Pretrained": "Custom Imħarreġ minn qabel",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Dan l-issettjar jippermettilek tiffranka l-piżijiet tal-mudell fil-konklużjoni ta 'kull epoka.",
+ "Save Every Weights": "Issejvja kull piż",
+ "Specifies the overall quantity of epochs for the model training process.": "Jispeċifika l-kwantità globali ta' epoki għall-mudell tal-proċess ta' taħriġ.",
+ "Upload Pretrained Model": "Tella' Mudell Imħarreġ minn qabel",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "L-attivazzjoni ta 'dan l-issettjar tirriżulta fil-fajls G u D li jiffrankaw biss il-verżjonijiet l-aktar reċenti tagħhom, u effettivament jikkonservaw l-ispazju tal-ħażna.",
+ "Pretrained Custom Settings": "Issettjar Tad-Dwana Mħarreġ minn qabel",
+ "Refresh Custom Pretraineds": "Aġġorna l-Pretraineds Tad-Dwana",
+ "Pretrained D Path": "Custom Pretrained D",
+ "Pretrained G Path": "Custom Pretrained G",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Ikklikkja l-buttuna aġġorna biex tara l-fajl imħarreġ minn qabel fil-menù dropdown.",
+ "GPU Settings": "Issettjar tal-GPU",
+ "The file you dropped is not a valid pretrained file. Please try again.": "Il-fajl li waqqajt mhux fajl validu mħarreġ minn qabel. Erġa' pprova.",
+ "GPU Number": "Numru tal-GPU",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "L-użu ta 'mudelli mfassla minn qabel apposta jista' jwassal għal riżultati superjuri, peress li l-għażla tal-mudelli l-aktar adattati mfassla minn qabel imfassla għall-każ ta 'użu speċifiku tista' ttejjeb b'mod sinifikanti l-prestazzjoni.",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Jissettja settings avvanzati tal-GPU, rakkomandati għal utenti b'arkitettura GPU aħjar.",
+ "Enter model name": "Daħħal l-isem tal-mudell",
+ "GPU Custom Settings": "Issettjar Tad-Dwana tal-GPU",
+ "The GPU information will be displayed here.": "L-informazzjoni tal-GPU se tintwera hawn.",
+ "0 to ∞ separated by -": "0 sa ∞ separati minn -",
+ "Pitch Guidance": "Gwida tal-Pitch",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Speċifika n-numru ta 'GPUs li tixtieq tuża għal preprocess billi ddaħħalhom separati b'hyphens (-). Bħalissa, l-użu ta 'multi-gpu mhux se jkollu effett sinifikanti.",
+ "GPU Information": "Informazzjoni tal-GPU",
+ "Use CPU": "Uża CPU",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "In-numru ta' nuklei tas-CPU li għandhom jintużaw fil-preproċess. L-issettjar default huwa l-qlub tas-cpu tiegħek, li huwa rrakkomandat għall-biċċa l-kbira tal-każijiet.",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Speċifika n-numru ta 'GPUs li tixtieq tuża għall-estrazzjoni billi ddaħħalhom separati b'hyphens (-).",
+ "Force the use of CPU for training.": "Ġiegħel l-użu tas-CPU għat-taħriġ.",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "In-numru ta' nuklei tas-CPU li għandhom jintużaw fil-proċess tal-estrazzjoni. L-issettjar default huwa l-qlub tas-cpu tiegħek, li huwa rrakkomandat għall-biċċa l-kbira tal-każijiet.",
+ "Extract Features": "Karatteristiċi tal-Estratt",
+ "Version of the model architecture.": "Verżjoni tal-arkitettura tal-mudell.",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Uża mudelli mħarrġa minn qabel meta tħarreġ tiegħek. Dan l-approċċ inaqqas it-tul ta' żmien tat-taħriġ u jtejjeb il-kwalità ġenerali.",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Bl-użu ta 'gwida tal-pitch, isir fattibbli li tirrifletti l-intonazzjoni tal-vuċi oriġinali, inkluż il-pitch tagħha. Din il-karatteristika hija partikolarment siewja għall-kant u xenarji oħra fejn il-preservazzjoni tal-melodija oriġinali jew il-mudell tal-pitch hija essenzjali.",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Aħna nipprijoritizzaw it-tmexxija tal-estrazzjoni tal-mudell fuq il-GPU għal prestazzjoni aktar mgħaġġla. Jekk tippreferi tuża s-CPU, sempliċement ħalli l-qasam tal-GPU vojt.",
+ "Cache Dataset in GPU": "Sett tad-Dejta tal-Cache fil-GPU",
+ "Index Algorithm": "Algoritmu tal-Indiċi",
+ "Overtraining Detector": "Ditekter tat-Taħriġ Żejjed",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Aħna nipprijoritizzaw it-tmexxija tal-mudell ta 'preprocessing fuq il-GPU għal prestazzjoni aktar mgħaġġla. Jekk tippreferi tuża s-CPU, sempliċement ħalli l-qasam tal-GPU vojt.",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans huwa algoritmu ta 'raggruppament li jaqsam is-sett tad-dejta f'raggruppamenti K. Dan l-issettjar huwa partikolarment utli għal settijiet tad-dejta kbar.",
+ "Overtraining Threshold": "Limitu ta' overtraining",
+ "Cache the dataset in GPU memory to speed up the training process.": "Cache is-sett tad-dejta fil-memorja tal-GPU biex tħaffef il-proċess tat-taħriġ.",
+ "Overtraining Detector Settings": "Issettjar tad-Ditekter tat-Taħriġ Żejjed",
+ "Fresh Training": "Taħriġ Frisk",
+ "Start Training": "Ibda t-Taħriġ",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Issettja n-numru massimu ta' epoki li tixtieq li l-mudell tiegħek jieqaf mit-taħriġ jekk ma jinstab l-ebda titjib.",
+ "Stop Training": "Waqqaf it-Taħriġ",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Skopri taħriġ żejjed biex tevita li l-mudell jitgħallem id-dejta tat-taħriġ tajjeb wisq u titlef il-kapaċità li tiġġeneralizza għal dejta ġdida.",
+ "Export Model": "Mudell ta 'Esportazzjoni",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "Attiva dan l-issettjar biss jekk qed tħarreġ mudell ġdid mill-bidu jew irristartja t-taħriġ. Iħassar il-piżijiet kollha ġġenerati qabel u z-zkuk tat-tensorboard.",
+ "Generate Index": "Iġġenera l-Indiċi",
+ "Exported Pth file": "Fajl Pth esportat",
+ "Upload": "Tella'",
+ "Exported Index file": "Fajl tal-Indiċi Esportat",
+ "Select the pth file to be exported": "Agħżel il-fajl pth li għandu jiġi esportat",
+ "Select the voice model to use for the conversion.": "Agħżel il-mudell tal-vuċi li għandek tuża għall-konverżjoni.",
+ "Index File": "Fajl ta' l-Indiċi",
+ "Select the index file to be exported": "Agħżel il-fajl ta' l-indiċi li għandu jiġi esportat",
+ "Single": "Waħda",
+ "Voice Model": "Mudell tal-Vuċi",
+ "Unload Voice": "Ħatt il-Vuċi",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "Il-buttuna 'Upload' hija biss għall-google colab: Ittella 'l-fajls esportati fil-folder ApplioExported fil-Google Drive tiegħek.",
+ "Upload Audio": "Tella' l-Awdjo",
+ "Select Audio": "Agħżel l-Awdjo",
+ "Select the audio to convert.": "Agħżel l-awdjo biex tikkonverti.",
+ "Select the index file to use for the conversion.": "Agħżel il-fajl ta' l-indiċi li għandek tuża għall-konverżjoni.",
+ "Advanced Settings": "Issettjar Avvanzat",
+ "Output Path": "Mogħdija tal-Ħruġ",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Outputs Ċari (Iħassar l-awdjo kollha fl-assi / awdjo)",
+ "Split Audio": "Awdjo Maqsum",
+ "Custom Output Path": "Mogħdija tal-Ħruġ Personalizzata",
+ "Autotune": "Autotune",
+ "Clean Audio": "Awdjo Nadif",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "Il-mogħdija fejn l-awdjo tal-output se jiġi ssejvjat, awtomatikament f'assi/awdjo/output.wav",
+ "Export Format": "Format tal-Esportazzjoni",
+ "Clean Strength": "Saħħa Nadifa",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Aqsam l-awdjo f'biċċiet għal inferenza biex tikseb riżultati aħjar f'xi każijiet.",
+ "Upscale Audio": "Awdjo fuq skala kbira",
+ "Determine at how many epochs the model will saved at.": "Iddetermina f'kemm epoki l-mudell se jiffranka fih.",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Applika awtotune ratba għall-inferenzi tiegħek, rakkomandata għall-konverżjonijiet tal-kant.",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Naddaf l-output tal-awdjo tiegħek billi tuża algoritmi ta' skoperta tal-istorbju, rakkomandati biex titkellem awdjo.",
+ "Formant Shifting": "Ċaqliq tal-Formant",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Attiva ċ-ċaqliq preċedenti. Użati għal konverżjonijiet maskili għal nisa u viċi-versa.",
+ "Browse presets for formanting": "Ibbrawżja presets għall-formanting",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Skala l-awdjo għal kwalità ogħla, rakkomandat għal awdjo ta 'kwalità baxxa. (Jista' jieħu aktar żmien biex jipproċessa l-awdjo)",
+ "Default value is 1.0": "Il-valur default huwa 1.0",
+ "Pitch": "Żift",
+ "Quefrency for formant shifting": "Quefrency għal ċaqliq formant",
+ "Timbre for formant shifting": "Timbre għal ċaqliq formanti",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Issettja l-livell tat-tindif għall-awdjo li trid, aktar ma żżidu aktar se tnaddaf, iżda huwa possibbli li l-awdjo jkun aktar ikkompressat.",
+ "Presets are located in /assets/formant_shift folder": "Presets jinsabu fil-folder /assets/formant_shift",
+ "Search Feature Ratio": "Proporzjon tal-Karatteristika tat-Tiftix",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Issettja l-pitch tal-awdjo, iktar ma jkun għoli l-valur, iktar ikun għoli l-pitch.",
+ "Select the format to export the audio.": "Agħżel il-format biex tesporta l-awdjo.",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Jekk in-numru huwa akbar minn jew ugwali għal tlieta, l-użu ta' filtrazzjoni medjana fuq ir-riżultati tat-ton miġbur għandu l-potenzjal li jnaqqas ir-respirazzjoni.",
+ "Volume Envelope": "Envelop tal-Volum",
+ "Batch": "Lott",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Issostitwixxi jew ħallat mal-pakkett tal-volum tal-output. Iktar ma jkun qrib il-proporzjon għal 1, aktar jintuża l-envelop tal-output.",
+ "Refresh": "Aġġorna",
+ "Export Audio": "Esporta l-Awdjo",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Influwenza eżerċitata mill-fajl tal-indiċi; valur ogħla jikkorrispondi għal influwenza akbar. Madankollu, l-għażla ta' valuri aktar baxxi tista' tgħin biex jittaffew l-artifatti preżenti fl-awdjo.",
+ "Protect Voiceless Consonants": "Ipproteġi Konsonanti Bla Vuċi",
+ "Convert": "Aqleb",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Algoritmu ta 'estrazzjoni tal-pitch biex jintuża għall-konverżjoni awdjo. L-algoritmu default huwa rmvpe, li huwa rrakkomandat għall-biċċa l-kbira tal-każijiet.",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Issalvagwardja konsonanti distinti u ħsejjes tan-nifs biex tipprevjeni tiċrit elettro-akustiku u artifatti oħra. Il-ġbid tal-parametru għall-valur massimu tiegħu ta '0.5 joffri protezzjoni komprensiva. Madankollu, it-tnaqqis ta' dan il-valur jista' jnaqqas il-livell ta' protezzjoni filwaqt li potenzjalment itaffi l-effett tal-indiċjar.",
+ "Pitch extraction algorithm": "Algoritmu ta 'estrazzjoni tal-pitch",
+ "Input Folder": "Fowlder ta' l-Input",
+ "Output Folder": "Fowlder tal-Output",
+ "Select the folder containing the audios to convert.": "Agħżel il-fowlder li fih l-awdjo biex tikkonverti.",
+ "Enter input path": "Daħħal il-mogħdija ta' l-input",
+ "Enter output path": "Daħħal il-mogħdija tal-ħruġ",
+ "Get information about the audio": "Ikseb informazzjoni dwar l-awdjo",
+ "Filter Radius": "Raġġ tal-filtru",
+ "## Voice Blender": "## Blender tal-Vuċi",
+ "You can also use a custom path.": "Tista 'wkoll tuża mogħdija apposta.",
+ "Select the folder where the output audios will be saved.": "Agħżel il-fowlder fejn se jiġu ssejvjati l-awdjo tal-output.",
+ "Blend Ratio": "Proporzjon tat-Taħlita",
+ "Voice Blender": "Blender tal-Vuċi",
+ "Drag and drop your model here": "Iddreggja u waqqa' l-mudell tiegħek hawn",
+ "Fusion": "Fużjoni",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Agħżel żewġ mudelli tal-vuċi, issettja l-perċentwal tat-taħlita mixtieq tiegħek, u ħallathom f'vuċi kompletament ġdida.",
+ "Path to Model": "Mogħdija għall-Mudell",
+ "Model information to be placed": "Mudell ta' informazzjoni li għandha titqiegħed",
+ "Enter path to model": "Daħħal il-mogħdija għall-mudell",
+ "Inroduce the model information": "Inroduce l-informazzjoni mudell",
+ "View": "Tara",
+ "Model extraction": "Estrazzjoni tal-mudell",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "L-aġġustament tal-pożizzjoni aktar lejn naħa jew oħra jagħmel il-mudell aktar simili għall-ewwel jew it-tieni.",
+ "The information to be placed in the model (You can leave it blank or put anything).": "L-informazzjoni li għandha titqiegħed fil-mudell (Tista 'tħalliha vojta jew tpoġġi xi ħaġa).",
+ "Model conversion": "Konverżjoni tal-mudell",
+ "Pth file": "Fajl Pth",
+ "Output of the pth file": "Output tal-fajl pth",
+ "Extract F0 Curve": "Estratt F0 Kurva",
+ "Introduce the model pth path": "Introduċi l-mudell tal-mogħdija pth",
+ "View model information": "Ara l-informazzjoni tal-mudell",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "Il-kurva f0 tirrappreżenta l-varjazzjonijiet fil-frekwenza bażi ta' vuċi maż-żmien, li turi kif il-pitch jogħla u jaqa'.",
+ "# How to Report an Issue on GitHub": "# Kif Tirrapporta Kwistjoni fuq GitHub",
+ "Record Screen": "Irrekordja l-Iskrin",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Ikklikkja fuq il-buttuna 'Record Screen' hawn taħt biex tibda tirrekordja l-kwistjoni li qed tesperjenza.",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Mur fi [Kwistjonijiet GitHub](https://github.com/IAHispano/Applio/issues) u kklikkja fuq il-buttuna 'Ħarġa Ġdida'.",
+ "Record": "Rekord",
+ "See Model Information": "Ara l-Informazzjoni mudell",
+ "Stop Recording": "Waqqaf ir-Reġistrazzjoni",
+ "## Download Model": "## Mudell tat-Tniżżil",
+ "Introduce the model .pth path": "Introduċi l-mudell .pth path",
+ "Model Link": "Mudell tal-Link",
+ "Download Model": "Niżżel il-Mudell",
+ "Introduce the model link": "Introduċi l-link tal-mudell",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Imla l-mudell tal-ħruġ ipprovdut, filwaqt li tiżgura li tinkludi d-dettalji kif meħtieġ, u uża t-taqsima tal-assi biex ittella 'l-fajl irreġistrat mill-pass preċedenti.",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Ladarba tkun lestejt tirrekordja l-kwistjoni, ikklikkja fuq il-buttuna 'Stop Recording' (l-istess buttuna, iżda t-tikketta tinbidel skont jekk tkunx qed tirrekordja b'mod attiv jew le).",
+ "## Drop files": "## Waqqa 'l-fajls",
+ "Search": "Tiftix",
+ "## Search Model": "## Mudell tat-Tiftix",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Iddreggja l-fajl .pth tiegħek u l-fajl .index f'dan l-ispazju. Mexxi waħda u mbagħad l-oħra.",
+ "## Download Pretrained Models": "## Niżżel mudelli mħarrġa minn qabel",
+ "We couldn't find models by that name.": "Ma stajniex insibu mudelli b'dak l-isem.",
+ "TTS Speed": "Veloċità TTS",
+ "And select the sampling rate": "U agħżel ir-rata ta' teħid ta' kampjuni.",
+ "Introduce the model name to search.": "Introduċi l-isem tal-mudell biex tfittex.",
+ "Select the pretrained model you want to download.": "Agħżel il-mudell imħarreġ minn qabel li tixtieq tniżżel.",
+ "TTS Voices": "TTS Vuċijiet",
+ "Increase or decrease TTS speed.": "Żid jew naqqas il-veloċità TTS.",
+ "Text to Synthesize": "Test biex Tissintetizza",
+ "Select the TTS voice to use for the conversion.": "Agħżel il-vuċi TTS li għandek tuża għall-konverżjoni.",
+ "Input path for text file": "Mogħdija tad-dħul għall-fajl tat-test",
+ "Upload a .txt file": "Tella' fajl .txt",
+ "The path to the text file that contains content for text to speech.": "Il-mogħdija għall-fajl tat-test li fih kontenut għat-test għad-diskors.",
+ "Enter the text to synthesize.": "Daħħal it-test biex tissintetizza.",
+ "Enter text to synthesize": "Daħħal it-test biex tissintetizza",
+ "Output Path for TTS Audio": "Mogħdija tal-Ħruġ għall-Awdjo TTS",
+ "Enable fake GPU": "Ippermetti GPU falz",
+ "Theme": "Tema",
+ "Output Path for RVC Audio": "Mogħdija tal-Ħruġ għall-Awdjo RVC",
+ "Enable Applio integration with Discord presence": "Ippermetti l-integrazzjoni ta 'Applio mal-preżenza ta' Discord",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "Se tattiva l-possibbiltà li turi l-attività attwali ta 'Applio f'Discord.",
+ "It will activate the possibility of downloading models with a click from the website.": "Se tattiva l-possibbiltà li tniżżel mudelli bi klikk mill-websajt.",
+ "Enable Applio integration with applio.org/models using flask": "Ippermetti l-integrazzjoni ta' Applio ma' applio.org/models bl-użu ta' flask",
+ "Language": "Lingwa",
+ "Select the theme you want to use. (Requires restarting Applio)": "Agħżel it-tema li tixtieq tuża. (Jeħtieġ li terġa' tibda Applio)",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Jattiva t-tab tal-ferrovija. Madankollu, jekk jogħġbok innota li dan l-apparat m'għandux kapaċitajiet tal-GPU, għalhekk it-taħriġ mhuwiex appoġġjat. Din l-għażla hija biss għal skopijiet ta' ttestjar. (Din l-għażla terġa 'tibda Applio)",
+ "Restart Applio": "Irristartja Applio",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "It-taħriġ bħalissa mhux appoġġjat minħabba n-nuqqas ta' GPU. Biex tattiva t-tab tat-taħriġ, innaviga lejn it-tab tas-settings u ppermetta l-għażla 'Fake GPU'.",
+ "Precision": "Preċiżjoni",
+ "Select the language you want to use. (Requires restarting Applio)": "Agħżel il-lingwa li tixtieq tuża. (Jeħtieġ li terġa' tibda Applio)",
+ "Update precision": "Aġġorna l-preċiżjoni",
+ "Select the precision you want to use for training and inference.": "Agħżel il-preċiżjoni li tixtieq tuża għat-taħriġ u l-inferenza.",
+ "Plugin Installer": "Installatur tal-Plugin",
+ "Version Checker": "Verifikatur tal-Verżjoni",
+ "Reverb": "Reverb",
+ "Post-Process": "Wara l-Proċess",
+ "Drag your plugin.zip to install it": "Iddreggja l-plugin.zip tiegħek biex tinstallah",
+ "Check for updates": "Iċċekkja għal aġġornamenti",
+ "Check which version of Applio is the latest to see if you need to update.": "Iċċekkja liema verżjoni ta 'Applio hija l-aħħar li tara jekk għandekx bżonn taġġorna.",
+ "Reverb Room Size": "Daqs tal-Kamra reverb",
+ "Post-process the audio to apply effects to the output.": "Wara l-proċess l-awdjo biex jiġu applikati effetti għall-output.",
+ "Apply reverb to the audio.": "Applika reverb għall-awdjo.",
+ "Reverb Damping": "Reverb Damping",
+ "Set the damping of the reverb.": "Issettja d-damping tar-reverb.",
+ "Set the room size of the reverb.": "Issettja d-daqs tal-kamra tar-reverb.",
+ "Reverb Wet Gain": "Reverb Qligħ Imxarrab",
+ "Set the wet gain of the reverb.": "Issettja l-gwadann imxarrab tar-reverb.",
+ "Reverb Width": "Wisa' tar-Reverb",
+ "Reverb Freeze Mode": "Reverb Freeze Mode",
+ "Set the dry gain of the reverb.": "Issettja l-gwadann niexef tar-reverb.",
+ "Set the width of the reverb.": "Issettja l-wisa 'tar-reverb.",
+ "Pitch Shift": "Bidla fil-Pitch",
+ "Reverb Dry Gain": "Reverb Qligħ Niexef",
+ "Limiter": "Limitatur",
+ "Set the freeze mode of the reverb.": "Issettja l-mod tal-iffriżar tar-reverb.",
+ "Pitch Shift Semitones": "Semitoni tal-Pitch Shift",
+ "Apply limiter to the audio.": "Applika l-limitatur għall-awdjo.",
+ "Apply pitch shift to the audio.": "Applika l-bidla tal-pitch għall-awdjo.",
+ "Set the pitch shift semitones.": "Issettja s-semitoni tal-pitch shift.",
+ "Limiter Release Time": "Ħin tar-Rilaxx tal-Limitatur",
+ "Limiter Threshold dB": "Limitu tal-Limitatur dB",
+ "Gain": "Qligħ",
+ "Set the limiter threshold dB.": "Issettja l-limitu tal-limitatur dB.",
+ "Distortion": "Tagħwiġ",
+ "Gain dB": "Qligħ dB",
+ "Set the gain dB.": "Issettja l-qligħ dB.",
+ "Set the limiter release time.": "Issettja l-ħin tar-rilaxx tal-limitatur.",
+ "Apply distortion to the audio.": "Applika d-distorsjoni għall-awdjo.",
+ "Apply gain to the audio.": "Applika l-gwadann fuq l-awdjo.",
+ "Distortion Gain": "Qligħ mid-distorsjoni",
+ "Chorus": "Kor",
+ "Chorus Rate Hz": "Rata tal-Kor Hz",
+ "Apply chorus to the audio.": "Applika l-kor fuq l-awdjo.",
+ "Chorus Depth": "Fond tal-Kor",
+ "Set the chorus rate Hz.": "Issettja r-rata tal-kor Hz.",
+ "Set the distortion gain.": "Issettja l-gwadann tad-distorsjoni.",
+ "Set the chorus depth.": "Issettja l-fond tal-kor.",
+ "Chorus Feedback": "Feedback tal-Kor",
+ "Chorus Center Delay ms": "Dewmien taċ-Ċentru tal-Kor ms",
+ "Set the chorus center delay ms.": "Issettja d-dewmien taċ-ċentru tal-kor ms.",
+ "Chorus Mix": "Taħlita tal-Kor",
+ "Set the chorus feedback.": "Issettja l-feedback tal-kor.",
+ "Bitcrush": "Bitcrush",
+ "Set the chorus mix.": "Issettja t-taħlita tal-kor.",
+ "Apply bitcrush to the audio.": "Applika bitcrush fuq l-awdjo.",
+ "Bitcrush Bit Depth": "Bitcrush Fond bit",
+ "Set the bitcrush bit depth.": "Issettja l-fond tal-bit bitcrush.",
+ "Clipping": "Qtugħ",
+ "Compressor": "Kumpressur",
+ "Apply clipping to the audio.": "Applika l-qtugħ fuq l-awdjo.",
+ "Clipping Threshold": "Limitu tal-Qtugħ",
+ "Apply compressor to the audio.": "Applika l-kompressur għall-awdjo.",
+ "Compressor Ratio": "Proporzjon tal-Kompressur",
+ "Compressor Attack ms": "Attakk tal-Kompressur ms",
+ "Set the compressor ratio.": "Issettja l-proporzjon tal-kompressur.",
+ "Delay": "Dewmien",
+ "Compressor Threshold dB": "Limitu tal-Kompressur dB",
+ "Set the compressor attack ms.": "Issettja l-attakk tal-kompressur ms.",
+ "Set the compressor release ms.": "Issettja r-rilaxx tal-kompressur ms.",
+ "Compressor Release ms": "Rilaxx tal-Kompressur ms",
+ "Set the compressor threshold dB.": "Issettja l-limitu tal-kompressur dB.",
+ "Apply delay to the audio.": "Applika d-dewmien għall-awdjo.",
+ "Delay Feedback": "Feedback tad-dewmien",
+ "Set the delay seconds.": "Issettja s-sekondi tad-dewmien.",
+ "Delay Mix": "Taħlita tad-Dewmien",
+ "Set the delay feedback.": "Issettja l-feedback tad-dewmien.",
+ "Delay Seconds": "Sekondi ta' Dewmien",
+ "Set the delay mix.": "Issettja t-taħlita tad-dewmien.",
+ "Custom Embedder": "Embedder Tad-Dwana",
+ "Folder Name": "Isem il-Fowlder",
+ "Refresh embedders": "Aġġorna l-embedders",
+ "Upload .bin": "Tella' .bin",
+ "Upload .json": "Tella' .json",
+ "model information": "Informazzjoni mudell",
+ "Select Custom Embedder": "Agħżel Embedder Personalizzat",
+ "Move files to custom embedder folder": "Mexxi l-fajls fil-fowlder ta' l-embedder tad-dwana",
+ "Model Creator": "Mudell Ħallieq",
+ "Set the clipping threshold.": "Issettja l-limitu tal-qtugħ.",
+ "Name of the model creator. (Default: Unknown)": "Isem il-kreatur tal-mudell. (Default: Mhux magħruf)",
+ "Speaker ID": "ID tal-ispiker",
+ "The name that will appear in the model information.": "L-isem li se jidher fl-informazzjoni tal-mudell.",
+ "Model Author Name": "Isem l-Awtur Mudell",
+ "Set name": "Isem is-sett",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "Issettja s-saħħa tal-autotune - aktar ma żżidha aktar se taqbad mal-grilja kromatika.",
+ "Select the speaker ID to use for the conversion.": "Agħżel l-ID tal-ispiker biex tuża għall-konverżjoni."
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/nl_NL.json b/assets/i18n/languages/nl_NL.json
new file mode 100644
index 0000000000000000000000000000000000000000..920698d0b38098f57b504b7991af1a9ae9539688
--- /dev/null
+++ b/assets/i18n/languages/nl_NL.json
@@ -0,0 +1,325 @@
+{
+ "Processing": "Verwerking",
+ "Training": "Opleiding",
+ "Output Information": "Output informatie",
+ "Merge Audios": "Audio samenvoegen",
+ "Inference": "Conclusie",
+ "The output information will be displayed here.": "De uitvoerinformatie wordt hier weergegeven.",
+ "This section contains some extra utilities that often may be in experimental phases.": "Deze sectie bevat enkele extra hulpprogramma's die zich vaak in experimentele fasen bevinden.",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "Een eenvoudige, hoogwaardige tool voor spraakconversie gericht op gebruiksgemak en prestaties.",
+ "Download": "Downloaden",
+ "Settings": "Instellingen",
+ "Audio Analyzer": "Audio analysator",
+ "Preprocess": "Voorbewerking",
+ "Report a Bug": "Een bug melden",
+ "Plugins": "Insteekfilters",
+ "Model Information": "Informatie over het model",
+ "Audio cutting": "Audio knippen",
+ "Enter model name": "Voer de modelnaam in",
+ "Model Name": "Modelnaam",
+ "Name of the new model.": "Naam van het nieuwe model.",
+ "Process effects": "Effecten van het proces",
+ "Dataset Path": "Pad naar gegevensset",
+ "Refresh Datasets": "Gegevenssets vernieuwen",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "Het wordt aanbevolen om deze optie uit te schakelen als uw dataset al is verwerkt.",
+ "Path to the dataset folder.": "Pad naar de map met de gegevensset.",
+ "Dataset Creator": "Maker van gegevensset",
+ "Dataset Name": "Naam van gegevensset",
+ "Extra": "Extra",
+ "Name of the new dataset.": "Naam van de nieuwe dataset.",
+ "Upload Audio Dataset": "Audiogegevensset uploaden",
+ "Enter dataset name": "Voer de naam van de gegevensset in",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Het audiobestand is met succes toegevoegd aan de dataset. Klik op de knop voorbewerking.",
+ "Sampling Rate": "Bemonsteringsfrequentie",
+ "Enter dataset path": "Pad naar gegevensset invoeren",
+ "Extract": "Extract",
+ "Model Architecture": "Model Architectuur",
+ "Embedder Model": "Embedder-model",
+ "Version of the model architecture.": "Versie van de modelarchitectuur.",
+ "Preprocess Dataset": "Gegevensset voor proces",
+ "Hop Length": "Hop Lengte",
+ "The sampling rate of the audio files.": "De bemonsteringsfrequentie van de audiobestanden.",
+ "Model used for learning speaker embedding.": "Model dat wordt gebruikt voor het leren van het insluiten van luidsprekers.",
+ "Save Every Epoch": "Red elk tijdperk",
+ "Batch Size": "Batch Grootte",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Geeft de tijd aan die het systeem nodig heeft om over te gaan naar een significante toonhoogteverandering. Kleinere hoplengtes vereisen meer tijd voor gevolgtrekking, maar leveren meestal een hogere toonhoogtenauwkeurigheid op.",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Het is aan te raden om deze af te stemmen op het beschikbare VRAM van je GPU. Een instelling van 4 biedt verbeterde nauwkeurigheid maar langzamere verwerking, terwijl 8 snellere en standaardresultaten biedt.",
+ "Total Epoch": "Totale tijdvak",
+ "Determine at how many epochs the model will saved at.": "Bepaal op hoeveel epochs het model wordt opgeslagen.",
+ "Pretrained": "Vooraf getraind",
+ "Specifies the overall quantity of epochs for the model training process.": "Hiermee geeft u het totale aantal epochs op voor het modeltrainingsproces.",
+ "Save Only Latest": "Alleen de nieuwste opslaan",
+ "Custom Pretrained": "Aangepaste voorgetrainde",
+ "Save Every Weights": "Sla alle gewichten op",
+ "Refresh Custom Pretraineds": "Aangepaste vooraf getrainde bestanden vernieuwen",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Met deze instelling kunt u de gewichten van het model aan het einde van elk tijdperk opslaan.",
+ "Pretrained Custom Settings": "Vooraf getrainde aangepaste instellingen",
+ "The file you dropped is not a valid pretrained file. Please try again.": "Het bestand dat u hebt neergezet, is geen geldig vooraf getraind bestand. Probeer het opnieuw.",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Als u deze instelling inschakelt, worden de G- en D-bestanden alleen hun meest recente versies opgeslagen, waardoor opslagruimte effectief wordt bespaard.",
+ "Pretrained G Path": "Aangepaste voorgetrainde G",
+ "Pretrained D Path": "Aangepaste voorgetrainde D",
+ "GPU Settings": "GPU-instellingen",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Het gebruik van op maat gemaakte voorgetrainde modellen kan leiden tot superieure resultaten, aangezien het selecteren van de meest geschikte voorgetrainde modellen die zijn afgestemd op de specifieke gebruikssituatie de prestaties aanzienlijk kan verbeteren.",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Klik op de knop Vernieuwen om het vooraf getrainde bestand in het vervolgkeuzemenu weer te geven.",
+ "GPU Custom Settings": "Aangepaste GPU-instellingen",
+ "GPU Number": "GPU-nummer",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Stelt geavanceerde GPU-instellingen in, aanbevolen voor gebruikers met een betere GPU-architectuur.",
+ "0 to ∞ separated by -": "0 tot ∞ gescheiden door -",
+ "Upload Pretrained Model": "Vooraf getraind model uploaden",
+ "GPU Information": "GPU-informatie",
+ "Use CPU": "CPU gebruiken",
+ "Force the use of CPU for training.": "Forceer het gebruik van CPU voor training.",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "Het aantal CPU-kernen dat in het voorproces moet worden gebruikt. De standaardinstelling zijn uw cpu-kernen, wat in de meeste gevallen wordt aanbevolen.",
+ "Pitch Guidance": "Begeleiding bij het veld",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "Het aantal CPU-kernen dat moet worden gebruikt in het extractieproces. De standaardinstelling zijn uw cpu-kernen, wat in de meeste gevallen wordt aanbevolen.",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Geef het aantal GPU's op dat u wilt gebruiken voor het extraheren door ze in te voeren, gescheiden door koppeltekens (-).",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Geef het aantal GPU's op dat u wilt gebruiken voor de voorbewerking door ze in te voeren, gescheiden door koppeltekens (-). Op dit moment zal het gebruik van multi-gpu geen significant effect hebben.",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Gebruik vooraf getrainde modellen bij het trainen van uw eigen modellen. Deze aanpak verkort de trainingsduur en verbetert de algehele kwaliteit.",
+ "Extract Features": "Functies extraheren",
+ "The GPU information will be displayed here.": "De GPU-informatie wordt hier weergegeven.",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Door gebruik te maken van toonhoogtebegeleiding wordt het mogelijk om de intonatie van de originele stem te spiegelen, inclusief de toonhoogte. Deze functie is vooral waardevol voor zang en andere scenario's waarbij het behoud van de originele melodie of het toonhoogtepatroon essentieel is.",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "We geven prioriteit aan het uitvoeren van de modelextractie op de GPU voor snellere prestaties. Als u liever de CPU gebruikt, laat u het GPU-veld gewoon leeg.",
+ "Cache Dataset in GPU": "Cache-gegevensset in GPU",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "We geven prioriteit aan het uitvoeren van de voorbewerking van het model op de GPU voor snellere prestaties. Als u liever de CPU gebruikt, laat u het GPU-veld gewoon leeg.",
+ "Cache the dataset in GPU memory to speed up the training process.": "Cache de dataset in het GPU-geheugen om het trainingsproces te versnellen.",
+ "Index Algorithm": "Index algoritme",
+ "Overtraining Detector": "Overtraining Detector",
+ "Overtraining Detector Settings": "Instellingen van de overtrainingsdetector",
+ "Overtraining Threshold": "Drempel voor overtraining",
+ "Fresh Training": "Frisse training",
+ "Start Training": "Begin met trainen",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans is een clusteralgoritme dat de dataset verdeelt in K-clusters. Deze instelling is vooral handig voor grote datasets.",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Detecteer overtraining om te voorkomen dat het model de trainingsgegevens te goed leert en het vermogen verliest om te generaliseren naar nieuwe gegevens.",
+ "Generate Index": "Index genereren",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Stel het maximum aantal epochs in dat u wilt dat uw model stopt met trainen als er geen verbetering wordt gedetecteerd.",
+ "Stop Training": "Stop met trainen",
+ "Export Model": "Model exporteren",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "Schakel deze instelling alleen in als u een geheel nieuw model traint of de training opnieuw start. Verwijdert alle eerder gegenereerde gewichten en tensorboardlogboeken.",
+ "Exported Index file": "Geëxporteerd indexbestand",
+ "Exported Pth file": "Geëxporteerd Pth-bestand",
+ "Select the pth file to be exported": "Selecteer het pth-bestand dat u wilt exporteren",
+ "Upload": "Uploaden",
+ "Select the index file to be exported": "Selecteer het indexbestand dat u wilt exporteren",
+ "Voice Model": "Stem Model",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "De knop 'Uploaden' is alleen voor Google Colab: Uploadt de geëxporteerde bestanden naar de ApplioExported map in je Google Drive.",
+ "Refresh": "Opfrissen",
+ "Single": "Ongetrouwd",
+ "Index File": "Index-bestand",
+ "Unload Voice": "Stem ontladen",
+ "Select the index file to use for the conversion.": "Selecteer het indexbestand dat u voor de conversie wilt gebruiken.",
+ "Select the voice model to use for the conversion.": "Selecteer het spraakmodel dat u voor de conversie wilt gebruiken.",
+ "Upload Audio": "Audio uploaden",
+ "Select Audio": "Selecteer Audio",
+ "Advanced Settings": "Geavanceerde instellingen",
+ "Select the audio to convert.": "Selecteer de audio die u wilt converteren.",
+ "Custom Output Path": "Aangepast uitvoerpad",
+ "Output Path": "Uitgang Pad",
+ "Export Format": "Formaat exporteren",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Uitvoer wissen (verwijdert alle audio in assets/audio's)",
+ "Select the format to export the audio.": "Selecteer het formaat om de audio te exporteren.",
+ "Split Audio": "Audio splitsen",
+ "Autotune": "Automatisch afstemmen",
+ "Clean Audio": "Schone audio",
+ "Clean Strength": "Schone sterkte",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Splits de audio in stukken voor gevolgtrekking om in sommige gevallen betere resultaten te verkrijgen.",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Pas een zachte autotune toe op uw gevolgtrekkingen, aanbevolen voor zangconversies.",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "Het pad waar de uitvoeraudio wordt opgeslagen, standaard in assets/audios/output.wav",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Reinig uw audio-uitvoer met behulp van ruisdetectie-algoritmen, aanbevolen voor gesproken audio.",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Schaal de audio op naar een hogere kwaliteit, aanbevolen voor audio van lage kwaliteit. (Het kan langer duren om de audio te verwerken)",
+ "Formant Shifting": "Formant schakelen",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Schakel formant shifting in. Gebruikt voor conversies van man naar vrouw en vice versa.",
+ "Presets are located in /assets/formant_shift folder": "Voorinstellingen bevinden zich in de map /assets/formant_shift",
+ "Browse presets for formanting": "Blader door voorinstellingen voor formanten",
+ "Quefrency for formant shifting": "Quefrency voor formant shifting",
+ "Default value is 1.0": "De standaardwaarde is 1.0",
+ "Timbre for formant shifting": "Klankkleur voor formant shifting",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Stel het opschoningsniveau in op de audio die u wilt, hoe meer u het verhoogt, hoe meer het zal opruimen, maar het is mogelijk dat de audio meer gecomprimeerd zal zijn.",
+ "Upscale Audio": "Luxe audio",
+ "Pitch": "Toonhoogte",
+ "Filter Radius": "Filter Straal",
+ "Search Feature Ratio": "Verhouding zoekfunctie",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Stel de toonhoogte van de audio in, hoe hoger de waarde, hoe hoger de toonhoogte.",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Invloed uitgeoefend door het indexbestand; Een hogere waarde komt overeen met een grotere invloed. Door voor lagere waarden te kiezen, kunt u echter artefacten in de audio verminderen.",
+ "Volume Envelope": "Volume envelop",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Vervang of meng met de volume-envelop van de uitvoer. Hoe dichter de verhouding bij 1 ligt, hoe meer de uitvoerenveloppe wordt gebruikt.",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Als het getal groter is dan of gelijk is aan drie, heeft het gebruik van mediane filtering op de verzamelde toonresultaten het potentieel om de ademhaling te verminderen.",
+ "Protect Voiceless Consonants": "Bescherm stemloze medeklinkers",
+ "Batch": "Batch",
+ "Convert": "Omzetten",
+ "Pitch extraction algorithm": "Algoritme voor toonhoogte-extractie",
+ "Export Audio": "Audio exporteren",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Beveilig verschillende medeklinkers en ademhalingsgeluiden om elektro-akoestische scheuren en andere artefacten te voorkomen. Door de parameter naar de maximale waarde van 0,5 te trekken, wordt uitgebreide bescherming geboden. Het verlagen van deze waarde kan echter de mate van bescherming verminderen en tegelijkertijd het indexeringseffect mogelijk beperken.",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Algoritme voor toonhoogte-extractie om te gebruiken voor de audioconversie. Het standaardalgoritme is rmvpe, wat in de meeste gevallen wordt aanbevolen.",
+ "Select the folder containing the audios to convert.": "Selecteer de map met de audio die u wilt converteren.",
+ "Enter input path": "Voer het invoerpad in",
+ "Output Folder": "Uitvoer Map",
+ "Input Folder": "Invoer Map",
+ "Select the folder where the output audios will be saved.": "Selecteer de map waarin de uitvoeraudio wordt opgeslagen.",
+ "Enter output path": "Voer het uitvoerpad in",
+ "Get information about the audio": "Informatie over de audio opvragen",
+ "Voice Blender": "Spraak blender",
+ "## Voice Blender": "## Stem Blender",
+ "Drag and drop your model here": "Sleep uw model hierheen",
+ "Blend Ratio": "Mengverhouding",
+ "Fusion": "Samensmelting",
+ "You can also use a custom path.": "U kunt ook een aangepast pad gebruiken.",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Selecteer twee spraakmodellen, stel het gewenste mengpercentage in en meng ze tot een geheel nieuwe stem.",
+ "Path to Model": "Pad naar model",
+ "Model information to be placed": "Te plaatsen modelinformatie",
+ "Enter path to model": "Pad naar model invoeren",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Door de positie meer naar de ene of de andere kant aan te passen, lijkt het model meer op de eerste of tweede.",
+ "Inroduce the model information": "Importeer de modelinformatie",
+ "View": "Bekijken",
+ "View model information": "Modelinformatie weergeven",
+ "Introduce the model pth path": "Introduceer het model pth pad",
+ "The information to be placed in the model (You can leave it blank or put anything).": "De informatie die in het model moet worden geplaatst (u kunt het leeg laten of alles plaatsen).",
+ "Model extraction": "Extractie van modellen",
+ "Model conversion": "Model conversie",
+ "Pth file": "Pth-bestand",
+ "Output of the pth file": "Uitvoer van het pth-bestand",
+ "Extract F0 Curve": "F0-curve extraheren",
+ "# How to Report an Issue on GitHub": "# Hoe meld je een probleem op GitHub?",
+ "Record": "Record",
+ "Record Screen": "Scherm opnemen",
+ "Introduce the model .pth path": "Introduceer het model .pth-pad",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Ga naar [GitHub Issues](https://github.com/IAHispano/Applio/issues) en klik op de knop 'New Issue'.",
+ "See Model Information": "Zie modelinformatie",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "De f0-curve geeft de variaties weer in de basisfrequentie van een stem in de loop van de tijd en laat zien hoe de toonhoogte stijgt en daalt.",
+ "## Download Model": "## Model downloaden",
+ "Model Link": "Model Link",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Vul het meegeleverde probleemsjabloon in, zorg ervoor dat u indien nodig details opneemt en gebruik het gedeelte Activa om het opgenomen bestand van de vorige stap te uploaden.",
+ "Introduce the model link": "Introduceer de modellink",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Klik op de knop 'Opnamescherm' hieronder om het probleem dat u ondervindt op te nemen.",
+ "Download Model": "Model downloaden",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Zodra u klaar bent met het opnemen van het probleem, klikt u op de knop 'Opname stoppen' (dezelfde knop, maar het label verandert afhankelijk van of u actief opneemt of niet).",
+ "Stop Recording": "Opname stoppen",
+ "## Drop files": "## Bestanden neerzetten",
+ "## Search Model": "## Model zoeken",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Sleep uw .pth-bestand en .index-bestand naar deze ruimte. Sleep de ene en dan de andere.",
+ "Search": "Zoeken",
+ "Introduce the model name to search.": "Introduceer de modelnaam om te zoeken.",
+ "We couldn't find models by that name.": "We konden geen modellen met die naam vinden.",
+ "And select the sampling rate": "En selecteer de bemonsteringsfrequentie.",
+ "## Download Pretrained Models": "## Download vooraf getrainde modellen",
+ "TTS Voices": "TTS-stemmen",
+ "Select the pretrained model you want to download.": "Selecteer het vooraf getrainde model dat u wilt downloaden.",
+ "TTS Speed": "TTS-snelheid",
+ "Text to Synthesize": "Tekst om te synthetiseren",
+ "Upload a .txt file": "Upload een .txt bestand",
+ "Select the TTS voice to use for the conversion.": "Selecteer de TTS-stem die u voor de conversie wilt gebruiken.",
+ "Enter the text to synthesize.": "Voer de tekst in die u wilt synthetiseren.",
+ "Increase or decrease TTS speed.": "Verhoog of verlaag de TTS-snelheid.",
+ "Input path for text file": "Invoerpad voor tekstbestand",
+ "Enter text to synthesize": "Voer tekst in om te synthetiseren",
+ "Output Path for TTS Audio": "Uitvoerpad voor TTS-audio",
+ "The path to the text file that contains content for text to speech.": "Het pad naar het tekstbestand dat inhoud bevat voor tekst-naar-spraak.",
+ "Output Path for RVC Audio": "Uitvoerpad voor RVC-audio",
+ "Enable Applio integration with Discord presence": "Applio-integratie inschakelen met Discord-aanwezigheid",
+ "Theme": "Thema",
+ "Enable fake GPU": "Nep-GPU inschakelen",
+ "Enable Applio integration with applio.org/models using flask": "Applio-integratie met applio.org/models inschakelen met behulp van kolf",
+ "Restart Applio": "Start Applio opnieuw",
+ "Language": "Taal",
+ "It will activate the possibility of downloading models with a click from the website.": "Het activeert de mogelijkheid om modellen te downloaden met een klik van de website.",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "Het activeert de mogelijkheid om de huidige Applio-activiteit in Discord weer te geven.",
+ "Precision": "Precisie",
+ "Select the language you want to use. (Requires restarting Applio)": "Selecteer de taal die u wilt gebruiken. (Vereist het opnieuw opstarten van Applio)",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "Training wordt momenteel niet ondersteund vanwege het ontbreken van een GPU. Om het tabblad Training te activeren, navigeert u naar het tabblad Instellingen en schakelt u de optie 'Fake GPU' in.",
+ "Select the theme you want to use. (Requires restarting Applio)": "Selecteer het thema dat je wilt gebruiken. (Vereist het opnieuw opstarten van Applio)",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Activeert het tabblad Trein. Houd er echter rekening mee dat dit apparaat geen GPU-mogelijkheden heeft, daarom wordt training niet ondersteund. Deze optie is alleen voor testdoeleinden. (Met deze optie wordt Applio opnieuw opgestart)",
+ "Update precision": "Update precisie",
+ "Select the precision you want to use for training and inference.": "Selecteer de precisie die u wilt gebruiken voor training en deductie.",
+ "Plugin Installer": "Plug-in-installatieprogramma",
+ "Drag your plugin.zip to install it": "Sleep je plugin.zip om het te installeren",
+ "Post-Process": "Nabewerking",
+ "Version Checker": "Versie Checker",
+ "Check for updates": "Controleren op updates",
+ "Reverb": "Reverb",
+ "Post-process the audio to apply effects to the output.": "Nabewerking van de audio om effecten toe te passen op de uitvoer.",
+ "Apply reverb to the audio.": "Pas galm toe op de audio.",
+ "Check which version of Applio is the latest to see if you need to update.": "Controleer welke versie van Applio de nieuwste is om te zien of u moet updaten.",
+ "Reverb Damping": "Reverb Demping",
+ "Reverb Room Size": "Grootte van de galmkamer",
+ "Set the room size of the reverb.": "Stel de kamergrootte van de galm in.",
+ "Reverb Wet Gain": "Reverb Natte Versterking",
+ "Set the wet gain of the reverb.": "Stel de natte versterking van de galm in.",
+ "Reverb Dry Gain": "Reverb droge versterking",
+ "Set the dry gain of the reverb.": "Stel de droge versterking van de reverb in.",
+ "Reverb Width": "Reverb Breedte",
+ "Pitch Shift": "Toonhoogte verschuiving",
+ "Reverb Freeze Mode": "Reverb Freeze-modus",
+ "Set the damping of the reverb.": "Stel de demping van de galm in.",
+ "Set the width of the reverb.": "Stel de breedte van de galm in.",
+ "Set the freeze mode of the reverb.": "Stel de freeze-modus van de reverb in.",
+ "Apply pitch shift to the audio.": "Pas toonhoogteverschuiving toe op de audio.",
+ "Limiter": "Limiter",
+ "Set the pitch shift semitones.": "Stel de halve tonen van de toonhoogteverschuiving in.",
+ "Limiter Release Time": "Vrijgavetijd van de begrenzer",
+ "Limiter Threshold dB": "Begrenzer Drempel dB",
+ "Set the limiter threshold dB.": "Stel de begrenzerdrempel dB in.",
+ "Pitch Shift Semitones": "Pitch Shift Halve tonen",
+ "Apply limiter to the audio.": "Pas een begrenzer toe op de audio.",
+ "Set the limiter release time.": "Stel de ontgrendelingstijd van de begrenzer in.",
+ "Gain": "Behalen",
+ "Gain dB": "Winst dB",
+ "Apply gain to the audio.": "Pas versterking toe op de audio.",
+ "Set the gain dB.": "Stel de versterking dB in.",
+ "Chorus": "Koor",
+ "Distortion Gain": "Vervorming Versterking",
+ "Apply distortion to the audio.": "Pas vervorming toe op de audio.",
+ "Set the distortion gain.": "Stel de vervormingsversterking in.",
+ "Distortion": "Deformatie",
+ "Apply chorus to the audio.": "Pas chorus toe op de audio.",
+ "Chorus Rate Hz": "Chorus Rate Hz",
+ "Set the chorus rate Hz.": "Stel de chorussnelheid Hz in.",
+ "Chorus Depth": "Refrein Diepte",
+ "Set the chorus depth.": "Stel de diepte van het refrein in.",
+ "Chorus Center Delay ms": "Chorus Center Vertraging ms",
+ "Chorus Feedback": "Refrein Feedback",
+ "Set the chorus center delay ms.": "Stel de vertraging in het midden van het refrein ms in.",
+ "Set the chorus feedback.": "Stel de chorusfeedback in.",
+ "Bitcrush": "Bitcrush",
+ "Set the chorus mix.": "Stel de refreinmix in.",
+ "Clipping": "Knipsel",
+ "Chorus Mix": "Refrein Mix",
+ "Bitcrush Bit Depth": "Bitcrush Bit Diepte",
+ "Apply bitcrush to the audio.": "Pas bitcrush toe op de audio.",
+ "Apply clipping to the audio.": "Pas clipping toe op de audio.",
+ "Set the bitcrush bit depth.": "Stel de bitdiepte van de bitcrush in.",
+ "Compressor": "Compressor",
+ "Clipping Threshold": "Drempel voor knippen",
+ "Set the clipping threshold.": "Stel de knipdrempel in.",
+ "Compressor Threshold dB": "Compressor Drempel dB",
+ "Apply compressor to the audio.": "Pas compressor toe op de audio.",
+ "Compressor Ratio": "Compressor Verhouding",
+ "Set the compressor threshold dB.": "Stel de compressordrempel dB in.",
+ "Set the compressor ratio.": "Stel de compressorverhouding in.",
+ "Delay": "Uitstellen",
+ "Compressor Attack ms": "Compressor Aanval ms",
+ "Compressor Release ms": "Compressor vrijgave ms",
+ "Set the compressor release ms.": "Stel de compressorontgrendeling ms in.",
+ "Set the compressor attack ms.": "Stel de compressoraanval ms in.",
+ "Apply delay to the audio.": "Pas vertraging toe op de audio.",
+ "Set the delay seconds.": "Stel de vertragingsseconden in.",
+ "Delay Feedback": "Feedback vertragen",
+ "Set the delay feedback.": "Stel de vertragingsfeedback in.",
+ "Delay Mix": "Vertraging mix",
+ "Custom Embedder": "Aangepaste embedder",
+ "Refresh embedders": "Invoegingen vernieuwen",
+ "Folder Name": "Naam van de map",
+ "Upload .bin": "Upload .bin",
+ "Select Custom Embedder": "Selecteer Aangepaste inbedding",
+ "model information": "Informatie over het model",
+ "Move files to custom embedder folder": "Verplaats bestanden naar een aangepaste insluitmap",
+ "Model Creator": "Model Schepper",
+ "Upload .json": "Upload .json",
+ "Name of the model creator. (Default: Unknown)": "Naam van de maker van het model. (Standaard: Onbekend)",
+ "Speaker ID": "Luidspreker-ID",
+ "Select the speaker ID to use for the conversion.": "Selecteer de spreker-ID die u voor de conversie wilt gebruiken.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "Stel de autotune-sterkte in - hoe meer u deze verhoogt, hoe meer deze zal worden uitgelijnd naar het chromatische raster.",
+ "Set name": "Naam instellen",
+ "The name that will appear in the model information.": "De naam die in de modelinformatie wordt weergegeven.",
+ "Delay Seconds": "Vertraging seconden",
+ "Set the delay mix.": "Stel de vertragingsmix in.",
+ "Model Author Name": "Naam van de auteur van het model"
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/otq_OTQ.json b/assets/i18n/languages/otq_OTQ.json
new file mode 100644
index 0000000000000000000000000000000000000000..e163c506e90c580acfcfe20b33694fc36b6b7634
--- /dev/null
+++ b/assets/i18n/languages/otq_OTQ.json
@@ -0,0 +1,325 @@
+{
+ "Inference": "Inferencia",
+ "Output Information": "Nuna ar salida",
+ "Extra": "Extra",
+ "Processing": "Ár nt'ot'",
+ "Training": "Adiestramiento",
+ "The output information will be displayed here.": "Ar ungumfädi salida ar mostrará nuwa.",
+ "Audio Analyzer": "Analizador audio",
+ "This section contains some extra utilities that often may be in experimental phases.": "Nuna ar sección contiene ra utilidades Nthuts'i mbi menudo xi 'bu̲i jar fases experimentales.",
+ "Plugins": "Complementos",
+ "Settings": "Configuración",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "'Nar herramienta conversión ar hñä ar sencilla ne ar mextha hño centrada facilidad njapu'befi ne ar rendimiento.",
+ "Download": "Descargar",
+ "Report a Bug": "Informar 'nar error",
+ "Merge Audios": "Fusionar audios",
+ "Preprocess": "Preprocesar",
+ "Model Information": "Nuna ar modelo",
+ "Process effects": "Efectos ar proceso",
+ "Audio cutting": "Ts'ut'ubi audio",
+ "Name of the new model.": "Ar thuhuu ar 'ra'yo je̲ya modelo.",
+ "Dataset Path": "Ruta conjunto datos",
+ "Enter model name": "Introduzca thuuhu ar modelo",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "Ar recomienda desactivar xí opción nu'bu̲ conjunto datos ya ar xi procesado.",
+ "Dataset Creator": "Creador conjuntos datos",
+ "Dataset Name": "Thuuhu conjunto datos",
+ "Path to the dataset folder.": "Ruta nthogi ja ar carpeta ar conjunto datos.",
+ "Refresh Datasets": "Actualizar conjuntos datos",
+ "Upload Audio Dataset": "Cargar conjunto datos audio",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Archivo audio ar xi agregado correctamente ma conjunto datos. 'Yot'e clic jar botón preprocesamiento.",
+ "Enter dataset path": "Introduzca ar ruta ar conjunto datos",
+ "Name of the new dataset.": "Ar thuhuu ar 'ra'yo je̲ya conjunto datos.",
+ "Enter dataset name": "Introduzca thuuhu conjunto datos",
+ "Sampling Rate": "Frecuencia muestreo",
+ "The sampling rate of the audio files.": "Ar frecuencia muestreo ya archivos audio.",
+ "Model Architecture": "Arquitectura modelos",
+ "Embedder Model": "Modelo incrustación",
+ "Version of the model architecture.": "Versión ar arquitectura ar modelo.",
+ "Extract": "Extraer",
+ "Model used for learning speaker embedding.": "Modelo utilizado pa gi meya ar incrustación altavoces.",
+ "Preprocess Dataset": "Conjunto datos preprocesamiento",
+ "Hop Length": "Longitud ar lúpulo",
+ "Total Epoch": "Mpa̲di Nxoge",
+ "Save Every Epoch": "Salva ga̲tho ya xe̲ni",
+ "Batch Size": "Tamaño ar lote",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Denota pa da tarda ko ya jar ga OT'UJE ar transición 'nar cambio wa ar ñhöñhö significativo. Ya longitudes ar salto mäs t'olo requieren mäs pa ar inferencia, pe tienden producir 'nar dätä precisión wa ar ñhöñhö.",
+ "Pretrained": "Preentrenado",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Ar recomendable alinear nä'ä ko VRAM disponible ár GPU. 'Nar za 4 ofrece 'nar precisión mejorada pe 'nar procesamiento mäs lento, mente da 8 proporciona resultados mäs rápidos ne estándar.",
+ "Save Only Latest": "Guarde ho̲ntho nä'ä mäs reciente",
+ "Save Every Weights": "Ahorre ya pesos",
+ "Custom Pretrained": "Personalizado preentrenado",
+ "Specifies the overall quantity of epochs for the model training process.": "Especifica yá 'bede Nxoge ya xe̲ni pa ar proceso entrenamiento ar modelo.",
+ "Upload Pretrained Model": "Cargar modelo preentrenado",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Nuna ar za bí permite guardar ya pesos modelo ngäts'i nä'ä ar 'nar xe̲ni.",
+ "Pretrained Custom Settings": "Configuración personalizada mpakuthuu entrenada",
+ "Pretrained D Path": "D preentrenado personalizado",
+ "GPU Settings": "Configuración de GPU",
+ "The file you dropped is not a valid pretrained file. Please try again.": "Archivo xi quitado hingi ge 'nar archivo preentrenado válido. Jaki ar mäte, gi japi ar nuevo.",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "'Yot'e clic jar botón Actualizar pa ga archivo mpakuthuu entrenado jar menú ar desplegable.",
+ "GPU Custom Settings": "Configuración personalizada ar GPU",
+ "GPU Number": "'Bede ya GPU",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Njapu'befi ya modelos preentrenados personalizados to da t'ot'e resultados t'uti hñe̲he̲, ya da selección ya modelos preentrenados mäs adecuados adaptados Hogem'bu njapu'befi específico to mejorar significativamente ar rendimiento.",
+ "The GPU information will be displayed here.": "Ar ungumfädi ár GPU ar mostrará nuwa.",
+ "Model Name": "Thuhuu ar modelo",
+ "0 to ∞ separated by -": "0 da ∞ separados ya —",
+ "GPU Information": "Nuna ar GPU",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Especifique ar 'bede ya GPU ne gi utilizar pa ar preprocesamiento introduciendo da separadas ya guiones (-). 'Bu̲ ya t'olo ora, njapu'befi ya múltiples gpu hingi da mets'i 'nar ntsoni significativo.",
+ "Pitch Guidance": "Guía lanzamiento",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Establece configuración dätä jä'i ar GPU, nt'uni pa usuarios ko 'nar mäs xi hño arquitectura GPU.",
+ "Use CPU": "Ga CPU",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "Ár 'bede ya núcleos CPU nä'ä da da utilizar ar preproceso. Ar configuración predeterminada ya ya núcleos ar CPU, da recomienda pa mäs xingu ya casos.",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "Ár 'bede ya núcleos CPU nä'ä da da utilizar ar proceso extracción. Ar configuración predeterminada ya ya núcleos ar CPU, da recomienda pa mäs xingu ya casos.",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Especifique ar 'bede ya GPU ne gi utilizar pa ar extracción introduciendo da separadas ya guiones (-).",
+ "Force the use of CPU for training.": "Forzar njapu'befi ya CPU pa ar entrenamiento.",
+ "Extract Features": "Extraer características",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Utilice modelos preentrenados nu'bu̲ entrene ya suyos propios. Nuna ar enfoque reduce duración jar formación ne mejora ar hño Nxoge.",
+ "Cache Dataset in GPU": "Conjunto datos caché jar GPU",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Ma jar njapu'befi guía wa ar ñhöñhö, ar factible ga reflejar ar entonación ar hñä ar original, ar incluido jár wa ar ñhöñhö. Nuna ar característica ar particularmente valiosa pa ár HMAFI ne ma'ra escenarios ya da ar esencial jwati ar melodía original wa hmu wa ar ñhöñhö.",
+ "Index Algorithm": "Algoritmo índice",
+ "Overtraining Detector": "Detector sobreentrenamiento",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Priorizamos ár nt'ot'e ar extracción ar modelo ar GPU da uni 'nar rendimiento mäs rápido. Nu'bu̲ prefiere zu̲di ar CPU, simplemente deje hwähi GPU jar blanco.",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Priorizamos ár nt'ot'e ar preprocesamiento ar modelo ar GPU da uni 'nar rendimiento mäs rápido. Nu'bu̲ prefiere zu̲di ar CPU, simplemente deje hwähi GPU jar blanco.",
+ "Cache the dataset in GPU memory to speed up the training process.": "Almacene jar caché conjunto datos jar memoria ar GPU da acelerar ar proceso entrenamiento.",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans ge 'nar algoritmo agrupación da divide ar conjunto datos jar ë clústeres. Nuna ar configuración ar hontho útil pa conjuntos datos dätä.",
+ "Overtraining Detector Settings": "Configuración detector sobreentrenamiento",
+ "Determine at how many epochs the model will saved at.": "Njäts'i Tengu ya xe̲ni ar guardará ya ar modelo.",
+ "Overtraining Threshold": "Umbral sobreentrenamiento",
+ "Fresh Training": "Formación fresca",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Detecte ar sobreentrenamiento pa nu'bu da ar modelo aprenda 'me̲fa xi hño ya datos entrenamiento ne pierda mfeni ya generalizar 'ra'yo datos.",
+ "Start Training": "'Bu̲i entrenar",
+ "Generate Index": "Generar índice",
+ "Export Model": "Modelo exportación",
+ "Stop Training": "Dejar ar entrenar",
+ "Exported Pth file": "Archivo Pth exportado",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Ya ar habilitar xí configuración, ya archivos G ne D ar guardarán ho̲ntho yá versiones mäs recientes, conservará nä'ä bí espacio ar almacenamiento.",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "Habilite xí configuración ho̲ntho nu'bu̲ xí entrenando 'nar 'ra'yo modelo ndezu̲ xí mpa wa reiniciando ar entrenamiento. Elimina ya pesos ne registros ar tensorboard generados ma 'met'o mi.",
+ "Refresh Custom Pretraineds": "Actualización ar preentrenados personalizados",
+ "Exported Index file": "Archivo índice exportado",
+ "Pretrained G Path": "G preentrenado personalizado",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "'Bui hñuts'i máximo ya xe̲ni nä'ä gi ne ar modelo deje ar entrenar nu'bu̲ hingi ar detecta ni 'na jar mejora.",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "Botón 'Ndi' ar ho̲ntho pa google colab: Sube ya archivos exportados ar carpeta ApplioExported ja ir Google Drive.",
+ "Select the pth file to be exported": "Seleccione archivo ar pth nä'ä gi ma exportar",
+ "Upload": "Ndi",
+ "Select the index file to be exported": "Seleccione archivo índice nä'ä gi ma exportar",
+ "Voice Model": "Modelo ar hñä",
+ "Index File": "Archivo índice",
+ "Refresh": "Actualizar",
+ "Unload Voice": "Descargar ar hñä",
+ "Single": "Soltero",
+ "Select the index file to use for the conversion.": "Seleccione archivo índice da japu'befi pa ar conversión.",
+ "Upload Audio": "Ndi audio",
+ "Select the voice model to use for the conversion.": "Seleccione ar modelo ar hñä da japu'befi pa ar conversión.",
+ "Select Audio": "Seleccionar audio",
+ "Advanced Settings": "Ajustes avanzados",
+ "Output Path": "Ruta salida",
+ "Export Format": "Formato exportación",
+ "Select the audio to convert.": "Selecciona ar audio nä'ä gi convertir.",
+ "Custom Output Path": "Ruta salida personalizada",
+ "Select the format to export the audio.": "Selecciona ar formato da exportar ar audio.",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Borrar salidas (elimina ga̲tho ya audios ya recursos yá audios)",
+ "Split Audio": "Audio dividido",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "Ruta ho bí guardará ar audio salida, ar nt'ot'e predeterminada assets yá audios yá output.wav",
+ "Clean Audio": "Audio limpio",
+ "Clean Strength": "Fuerza 'Beni",
+ "Upscale Audio": "Audio lujo",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Aplique 'nar autotune za̲tho ja yá inferencias, recomendado pa conversiones HMAFI.",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Ntheke ar audio jar fragmentos pa jar inferencia ne da mpädi mäs xi resultados jar 'ra ya casos.",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Limpie ár salida audio utilizando algoritmos ar detección mafi, recomendados pa audios hablados.",
+ "Formant Shifting": "Cambio formantes",
+ "Browse presets for formanting": "Examinar ya ajustes preestablecidos pa ar formante",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Habilite cambio formantes. Ar gi japu̲'be̲fi pa conversiones macho hembra ne ar ñhöñhö.",
+ "Default value is 1.0": "Ár hmädi predeterminado ar 1.0",
+ "Quefrency for formant shifting": "Quefrency for formant shifting",
+ "Presets are located in /assets/formant_shift folder": "Ya ajustes preestablecidos 'bu̲i jar ar carpeta /assets/formant_shift",
+ "Pitch": "Alquitrán",
+ "Timbre for formant shifting": "Timbre pa ar cambio formantes",
+ "Filter Radius": "Thuhu ar filtro",
+ "Search Feature Ratio": "Nthe características nthoni",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "'Bui ar limpieza jar audio desee, cuanto nä'ä bí aumente, mäs ar limpiará, pe ar tsa̲ da audio ar ntsuni mäs comprimido.",
+ "Volume Envelope": "Envolvente volumen",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Aumente ar escala ar audio ja 'nar hño mäs mextha, recomendado pa ar audios xí hñets'i'i hño. (Ndi da mäs pa procesar ar audio)",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "'Bui ar wa ar ñhöñhö ja ar audio, cuanto mar dätä nä'ä ár hmädi dätä da ar wa ar ñhöñhö.",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Influencia ar tsa da 'yot'e ya ar fichero índice; 'Nar hmädi mäs bi nthe 'nar dätä influencia. Wat'i, optar ya valores mäs bajos to da 'BATS'I mitigar ya artefactos 'bui ja ar audio.",
+ "Convert": "Convertir",
+ "Pitch extraction algorithm": "Algoritmo extracción wa ar ñhöñhö",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Xähmö nu'bu̲ ar 'bede dätä wa ngu ma hñu ya, ar mfats'i ar filtrado ar mediana ya resultados tonales recopilados pe̲ts'i ár hne ar disminuir ar respiración.",
+ "Export Audio": "Exportar audio",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Sustituya wa mezcle ko ar envolvente volumen ar salida. Cuanto mäs getu'bu̲ Ntsuni ar nthe 1, mäs bí empleará ar envolvente salida.",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Algoritmo ar extracción wa ar ñhöñhö pa ga conversión ar audio. Ar algoritmo ar predeterminado ar rmvpe, da recomienda pa mäs xingu ya casos.",
+ "Batch": "Lote",
+ "Protect Voiceless Consonants": "Proteger ya consonantes sordas",
+ "Input Folder": "Carpeta entrada",
+ "Enter input path": "Introduzca ar ruta entrada",
+ "Output Folder": "Carpeta salida",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Proteja ya nzu̲nt'i nta̲ki distintivas ne ya nzu̲nt'i respiratorios pa nu'bu desgarros electroacústicos ne ma'ra ya artefactos. Da ar parámetro ár hmädi máximo 0,5 ofrece 'nar 'ba̲ts'i nxo̲ge. Wat'i, reducción nuna ar hmädi ndi disminuir ár ntsoni ngatho 'ba̲ts'i ne, ma xkagentho pa, mitigar ntsoni indexación.",
+ "Select the folder containing the audios to convert.": "Seleccione ar carpeta da contiene ya audios da convertir.",
+ "Select the folder where the output audios will be saved.": "Seleccione carpeta ho bí guardarán ya audios salida.",
+ "Enter output path": "Introduzca ar ruta salida",
+ "Get information about the audio": "Da ungumfädi dige ar audio",
+ "Voice Blender": "Licuadora ar hñä",
+ "## Voice Blender": "## Licuadora de voz",
+ "You can also use a custom path.": "'Nehe tsa̲ da utilizar 'nar ruta ya nthogi personalizada.",
+ "Blend Ratio": "Nä'ä da 'yadi wa ar mezcla",
+ "Drag and drop your model here": "Arrastra ne suelta ir modelo nuwa",
+ "Path to Model": "Ruta nthogi ja ar modelo",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Seleccione yoho modelos ar hñä, 'bui ar porcentaje ar mezcla deseado ne combinar ya ja 'nar hñä completamente 'ra'yo.",
+ "Enter path to model": "Introduzca ar ruta ar modelo",
+ "Model information to be placed": "Nuna ar modelo ar da hoki",
+ "Inroduce the model information": "Introducir ar ungumfädi ar modelo",
+ "Fusion": "Fusión",
+ "View model information": "Ga ungumfädi ar modelo",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Ajustar ar nt'o̲t'e mäs ntsuni 'Nangu̲di wa ma'na da nja ke ar modelo ar parezca nä'ä ar ndu̲i wa ar mfe̲tsi.",
+ "View": "Thandi",
+ "Model extraction": "Extracción modelos",
+ "Model conversion": "Conversión modelos",
+ "Introduce the model pth path": "Nthuts'i ñut'i ar ruta pth ar modelo",
+ "The information to be placed in the model (You can leave it blank or put anything).": "Ar ungumfädi gi da hoki ar modelo (tsa̲ dejar nä'ä jar blanco wa ga japi 'na xka).",
+ "Output of the pth file": "Salida fichero pth",
+ "Pth file": "Archivo Pth",
+ "Extract F0 Curve": "Extraer curva F0",
+ "# How to Report an Issue on GitHub": "# Cómo reportar un problema en GitHub",
+ "Autotune": "Ar za automático",
+ "Record": "Grabar",
+ "Stop Recording": "Detener grabación",
+ "See Model Information": "Ga ungumfädi ar modelo",
+ "Record Screen": "Pantalla grabación",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1 'yot'e clic jar botón 'Grabar pantalla' tso̲kwa continuación pa ndi ndu̲i ndi grabar ar hñäki nä'ä xi experimentando.",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "Curva f0 o̲t'e ya variaciones ja ar frecuencia base 'nar hñä a lo largo de ar pa, mostrando Temu̲ sube ne baja ar wa ar ñhöñhö.",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3 vaya [hñäki ya GitHub] (https://github.com/IAHispano/Applio/issues) ne 'yot'e clic jar botón ''ra'yo hñäki'.",
+ "## Download Model": "## Descargar modelo",
+ "Introduce the model .pth path": "Nthuts'i ñut'i ruta nthogi.pth ar modelo",
+ "Introduce the model link": "'Ñuse̲ ar enlace ar modelo",
+ "Model Link": "Enlace ar modelo",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4 complete ar plantilla ar hñäki proporcionada, asegurando ar ar incluir ya detalles nä'ä mahyoni, ne utilice ar sección activos pa cargar ar archivo grabado bi thogi 'be̲t'o.",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2 mbi hayas wadi bí grabar ar 'bede, gi clic jar botón 'Detener grabación' (ar xkagentho botón, pe ar etiqueta cambia dependiendo de nu'bu̲ gi grabando activamente wa hi'nä).",
+ "Download Model": "Descargar modelo",
+ "Search": "Honi",
+ "## Drop files": "## Soltar archivos",
+ "Introduce the model name to search.": "Introduzca thuuhu ar modelo pa honi.",
+ "## Search Model": "## Modelo de búsqueda",
+ "TTS Voices": "Voces TTS",
+ "And select the sampling rate": "Ne seleccione ar frecuencia muestreo.",
+ "Select the pretrained model you want to download.": "Seleccione ar modelo mpakuthuu entrenado nä'ä gi descargar.",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Arrastre archivo ar.pth ne ar archivo.index jar nuna ar espacio. Arrastre 'na ne xu̲ki ma'na.",
+ "## Download Pretrained Models": "## Descargar modelos preentrenados",
+ "TTS Speed": "Velocidad TTS",
+ "Increase or decrease TTS speed.": "Aumente wa disminuya ar velocidad TTS.",
+ "We couldn't find models by that name.": "Hingi pudimos tingigi mbo modelos ko Nunu̲ thuuhu.",
+ "Enter the text to synthesize.": "Introduzca ar texto nä'ä gi sintetizar.",
+ "Upload a .txt file": "Ndi 'nar archivo.txt",
+ "Select the TTS voice to use for the conversion.": "Seleccione ar hñä ar TTS da japu'befi pa ar conversión.",
+ "Text to Synthesize": "Texto ma sintetizar",
+ "Input path for text file": "Ruta entrada pa ar archivo texto",
+ "The path to the text file that contains content for text to speech.": "Ruta nthogi ja ar archivo texto da contiene contenido pa ar conversión texto da hñä.",
+ "Enter text to synthesize": "Introduzca ar texto nä'ä gi sintetizar",
+ "Output Path for TTS Audio": "Ruta salida pa audio TTS",
+ "Output Path for RVC Audio": "Ruta salida pa audio RVC",
+ "Enable fake GPU": "Habilitar GPU falsa",
+ "Enable Applio integration with applio.org/models using flask": "Habilite ar integración Applio ko applio.org/models ir nge ya matraz",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "Ar activará ar posibilidad ar mostrar ar nt'ot'e nu'bya Applio jar Discord.",
+ "Theme": "Tema",
+ "Restart Applio": "Reiniciar Applio",
+ "Language": "Ar hñä",
+ "Enable Applio integration with Discord presence": "Habilitar ar integración Applio ko 'bu̲i Discord",
+ "It will activate the possibility of downloading models with a click from the website.": "Ar activará ar posibilidad ar descargar modelos ko 'nar clic ndezu̲ ar página web.",
+ "Select the theme you want to use. (Requires restarting Applio)": "Seleccione ar tema nä'ä gi utilizar. (Requiere reiniciar Applio)",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "'Bu̲'bya, ar entrenamiento hingi ar compatible nu'bya ausencia 'nar GPU. Pa activar ar pestaña entrenamiento, jar pestaña configuración ne habilite ar opción 'GPU falsa'.",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Activa pestaña nju̲nu̲bo̲jä. Wat'i, pets'i ja da nuna ar dispositivo carece ar capacidades GPU, nä'ä hingi bí admite ar capacitación. Nuna ar opción ar ho̲ntho pa ngäts'i ntsa̲. (Nuna ar opción reiniciará Applio)",
+ "Precision": "Precisión",
+ "Select the language you want to use. (Requires restarting Applio)": "Seleccione ar hñä ne gi utilizar. (Requiere reiniciar Applio)",
+ "Plugin Installer": "Instalador plugins",
+ "Select the precision you want to use for training and inference.": "Seleccione ar precisión nä'ä gi zu̲di pa ar entrenamiento ne ar inferencia.",
+ "Drag your plugin.zip to install it": "Arrastra ir plugin.zip pa ndi instalar",
+ "Version Checker": "Comprobador versiones",
+ "Check for updates": "Honi actualizaciones",
+ "Post-Process": "Post-Proceso",
+ "Reverb Room Size": "Tamaño ar sala reverberación",
+ "Apply reverb to the audio.": "T'uni reverberación ja ar audio.",
+ "Update precision": "Precisión ar actualización",
+ "Check which version of Applio is the latest to see if you need to update.": "Compruebe xi versión Applio ar mäs ar reciente pa ga nu'bu da t'ot'e actualizar.",
+ "Post-process the audio to apply effects to the output.": "Procesa ar audio pa da t'uni efectos ar salida.",
+ "Reverb Wet Gain": "Reverberación Ganancia Húmeda",
+ "Set the room size of the reverb.": "'Bui ar tamaño ar sala ar reverberación.",
+ "Reverb Damping": "Amortiguación reverberación",
+ "Set the damping of the reverb.": "Ajusta ar amortiguación ar reverberación.",
+ "Reverb": "Reverberación",
+ "Reverb Dry Gain": "Reverberación Ganancia jar seco",
+ "Set the wet gain of the reverb.": "Ajusta ganancia húmeda ar reverberación.",
+ "Reverb Width": "Ancho reverberación",
+ "Set the dry gain of the reverb.": "Ajusta ganancia jar seco ar reverberación.",
+ "Reverb Freeze Mode": "Modo congelación reverberación",
+ "Set the width of the reverb.": "'Bui ar ancho ar reverberación.",
+ "Set the freeze mode of the reverb.": "'Bui modo congelación ar reverberación.",
+ "Pitch Shift": "Cambio wa ar ñhöñhö",
+ "Pitch Shift Semitones": "Semitonos cambio wa ar ñhöñhö",
+ "Limiter": "Limitador",
+ "Apply limiter to the audio.": "Aplique 'nar limitador ja ar audio.",
+ "Limiter Threshold dB": "Umbral limitador dB",
+ "Apply pitch shift to the audio.": "T'uni 'nar cambio wa ar ñhöñhö ja ar audio.",
+ "Set the pitch shift semitones.": "'Bui ya semitonos cambio wa ar ñhöñhö.",
+ "Set the limiter threshold dB.": "'Bui ar umbral ar limitador jar dB.",
+ "Gain": "Ga tähä",
+ "Set the limiter release time.": "'Bui ar pa liberación ar limitador.",
+ "Apply gain to the audio.": "T'uni ganancia ja ar audio.",
+ "Set the gain dB.": "Ar za ar ganancia dB.",
+ "Distortion": "Distorsión",
+ "Limiter Release Time": "Ar pa liberación ar limitador",
+ "Distortion Gain": "Ganancia distorsión",
+ "Gain dB": "Ganancia dB",
+ "Apply chorus to the audio.": "T'uni nsa̲di ja ar audio.",
+ "Chorus": "Nsa̲di",
+ "Set the distortion gain.": "Ajusta ar ganancia distorsión.",
+ "Chorus Depth": "Profundidad jar nsa̲di",
+ "Set the chorus rate Hz.": "Za ar velocidad jar nsa̲di Hz.",
+ "Chorus Rate Hz": "Frecuencia ya nsa̲di Hz",
+ "Set the chorus depth.": "Ajusta profundidad jar nsa̲di.",
+ "Apply distortion to the audio.": "T'uni distorsión ja ar audio.",
+ "Chorus Center Delay ms": "Retardo made nsa̲di ms",
+ "Set the chorus center delay ms.": "'Bui retardo made jar nsa̲di ms.",
+ "Chorus Feedback": "Comentarios jar nsa̲di",
+ "Chorus Mix": "Mezcla coros",
+ "Set the chorus mix.": "Ajusta mezcla nsa̲di.",
+ "Set the chorus feedback.": "'Bui ar retroalimentación jar nsa̲di.",
+ "Bitcrush": "Bitcrush (ko ar ingles)",
+ "Apply bitcrush to the audio.": "T'uni bitcrush ja ar audio.",
+ "Clipping": "Recorte",
+ "Clipping Threshold": "Umbral recorte",
+ "Set the clipping threshold.": "'Bui umbral recorte.",
+ "Apply clipping to the audio.": "T'uni recorte ja ar audio.",
+ "Bitcrush Bit Depth": "Profundidad de bits de Bitcrush",
+ "Set the bitcrush bit depth.": "'Bui ar profundidad ar bit trituración bits.",
+ "Apply compressor to the audio.": "Aplique ar compresor ar audio.",
+ "Compressor Threshold dB": "Umbral compresor dB",
+ "Set the compressor threshold dB.": "Ar za ar umbral ar compresor dB.",
+ "Compressor Ratio": "Nthe ar compresor",
+ "Set the compressor ratio.": "Za ar nthe ar compresor.",
+ "Compressor Release ms": "Liberación compresor ms",
+ "Compressor Attack ms": "'Na jar compresor ms",
+ "Set the compressor attack ms.": "Configure 'na jar ar compresor ar ms.",
+ "Set the compressor release ms.": "Za ar liberación ar compresor ms.",
+ "Compressor": "Compresor",
+ "Delay": "Zeti ár",
+ "Apply delay to the audio.": "T'uni retardo ja ar audio.",
+ "Set the delay seconds.": "'Bui ya mfe̲tsi retardo.",
+ "Delay Feedback": "Retroalimentación dá tso̲ho̲",
+ "Set the delay feedback.": "'Bui ar retroalimentación dá tso̲ho̲.",
+ "Delay Mix": "Mezcla retardo",
+ "Delay Seconds": "Ya 'na̲te ya mfe̲ts'i ya dá tso",
+ "Set the delay mix.": "Ajusta ar mezcla retardo.",
+ "Custom Embedder": "Incrustador personalizado",
+ "Refresh embedders": "Actualización incrustaciones",
+ "Select Custom Embedder": "Seleccione Incrustador personalizado",
+ "Upload .bin": "Ndi .bin",
+ "Upload .json": "Ndi .json",
+ "Model Creator": "Creador modelos",
+ "model information": "Nuna ar modelo",
+ "Folder Name": "Thuhuu ar carpeta",
+ "Move files to custom embedder folder": "Mover archivos ja 'nar carpeta incrustación personalizada",
+ "Name of the model creator. (Default: Unknown)": "Thuuhu creador ar modelo. (Predeterminado: Desconocido)",
+ "Speaker ID": "ID ar altavoz",
+ "Model Author Name": "Thuuhu autor ar modelo",
+ "Set name": "Thuhuu ar conjunto",
+ "Select the speaker ID to use for the conversion.": "Seleccione ar ID ar altavoz da japu'befi pa ar conversión.",
+ "The name that will appear in the model information.": "Thuuhu da aparecerá ar ungumfädi ar modelo.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "'Bui ar intensidad ar za automático: cuanto nä'ä bí aumente, mäs ar ajustará bí cuadrícula ar cromática."
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/pa_PA.json b/assets/i18n/languages/pa_PA.json
new file mode 100644
index 0000000000000000000000000000000000000000..3c93f1d0c74e19680187999a627696f6d5b1e4b0
--- /dev/null
+++ b/assets/i18n/languages/pa_PA.json
@@ -0,0 +1,325 @@
+{
+ "Extra": "ਵਾਧੂ",
+ "Inference": "ਅਨੁਮਾਨ",
+ "Processing": "ਪ੍ਰੋਸੈਸਿੰਗ",
+ "Audio Analyzer": "ਆਡੀਓ ਵਿਸ਼ਲੇਸ਼ਕ",
+ "Output Information": "ਆਊਟਪੁੱਟ ਜਾਣਕਾਰੀ",
+ "Merge Audios": "ਆਡੀਓ ਨੂੰ ਮਿਲਾਓ",
+ "Settings": "ਸੈਟਿੰਗਾਂ",
+ "Training": "ਸਿਖਲਾਈ",
+ "Plugins": "ਪਲੱਗਇਨ",
+ "Preprocess": "ਪ੍ਰੀਪ੍ਰੋਸੈਸ",
+ "Download": "ਡਾਊਨਲੋਡ ਕਰੋ",
+ "Report a Bug": "ਇੱਕ ਬਗ ਦੀ ਰਿਪੋਰਟ ਕਰੋ",
+ "Model Information": "ਮਾਡਲ ਜਾਣਕਾਰੀ",
+ "The output information will be displayed here.": "ਆਉਟਪੁੱਟ ਜਾਣਕਾਰੀ ਇੱਥੇ ਪ੍ਰਦਰਸ਼ਿਤ ਕੀਤੀ ਜਾਵੇਗੀ।",
+ "Audio cutting": "ਆਡੀਓ ਕੱਟਣਾ",
+ "Process effects": "ਪ੍ਰਕਿਰਿਆ ਪ੍ਰਭਾਵ",
+ "Model Name": "ਮਾਡਲ ਦਾ ਨਾਮ",
+ "Dataset Creator": "ਡਾਟਾਸੈਟ ਨਿਰਮਾਤਾ",
+ "Name of the new model.": "ਨਵੇਂ ਮਾਡਲ ਦਾ ਨਾਮ।",
+ "This section contains some extra utilities that often may be in experimental phases.": "ਇਸ ਭਾਗ ਵਿੱਚ ਕੁਝ ਵਾਧੂ ਉਪਯੋਗਤਾਵਾਂ ਹਨ ਜੋ ਅਕਸਰ ਪ੍ਰਯੋਗਾਤਮਕ ਪੜਾਵਾਂ ਵਿੱਚ ਹੋ ਸਕਦੀਆਂ ਹਨ।",
+ "Enter model name": "ਮਾਡਲ ਨਾਮ ਦਾਖਲ ਕਰੋ",
+ "Refresh Datasets": "ਡੇਟਾਸੈਟਾਂ ਨੂੰ ਤਾਜ਼ਾ ਕਰੋ",
+ "Path to the dataset folder.": "ਡੇਟਾਸੈਟ ਫੋਲਡਰ ਲਈ ਰਾਹ।",
+ "Dataset Name": "ਡੇਟਾਸੈਟ ਨਾਮ",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "ਵਰਤੋਂ ਅਤੇ ਪ੍ਰਦਰਸ਼ਨ ਦੀ ਅਸਾਨੀ 'ਤੇ ਕੇਂਦ੍ਰਤ ਇੱਕ ਸਧਾਰਣ, ਉੱਚ-ਗੁਣਵੱਤਾ ਵਾਲਾ ਆਵਾਜ਼ ਪਰਿਵਰਤਨ ਸਾਧਨ.",
+ "Dataset Path": "ਡਾਟਾਸੈਟ ਪਾਥ",
+ "Name of the new dataset.": "ਨਵੇਂ ਡੇਟਾਸੈਟ ਦਾ ਨਾਮ।",
+ "Upload Audio Dataset": "ਆਡੀਓ ਡੇਟਾਸੈਟ ਅੱਪਲੋਡ ਕਰੋ",
+ "Sampling Rate": "ਨਮੂਨੇ ਲੈਣ ਦੀ ਦਰ",
+ "Enter dataset path": "ਡਾਟਾਸੈਟ ਪਾਥ ਦਾਖਲ ਕਰੋ",
+ "Enter dataset name": "ਡੇਟਾਸੈਟ ਦਾ ਨਾਮ ਦਾਖਲ ਕਰੋ",
+ "Model Architecture": "ਮਾਡਲ ਆਰਕੀਟੈਕਚਰ",
+ "Embedder Model": "ਐਂਬੇਡਰ ਮਾਡਲ",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "ਆਡੀਓ ਫਾਇਲ ਨੂੰ ਡੇਟਾਸੈਟ ਵਿੱਚ ਸਫਲਤਾਪੂਰਵਕ ਜੋੜਿਆ ਗਿਆ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ ਪ੍ਰੀਪ੍ਰੋਸੈਸ ਬਟਨ 'ਤੇ ਕਲਿੱਕ ਕਰੋ।",
+ "Extract": "ਐਕਸਟਰੈਕਟ",
+ "Preprocess Dataset": "ਪ੍ਰੀਪ੍ਰੋਸੈਸ ਡੇਟਾਸੈਟ",
+ "Hop Length": "ਹੌਪ ਲੰਬਾਈ",
+ "The sampling rate of the audio files.": "ਆਡੀਓ ਫਾਇਲਾਂ ਦੀ ਨਮੂਨੇ ਲੈਣ ਦੀ ਦਰ।",
+ "Batch Size": "ਬੈਚ ਦਾ ਆਕਾਰ",
+ "Version of the model architecture.": "ਮਾਡਲ ਆਰਕੀਟੈਕਚਰ ਦਾ ਸੰਸਕਰਣ।",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "ਜੇ ਤੁਹਾਡੇ ਡੇਟਾਸੈਟ ਨੂੰ ਪਹਿਲਾਂ ਹੀ ਪ੍ਰੋਸੈਸ ਕੀਤਾ ਜਾ ਚੁੱਕਾ ਹੈ ਤਾਂ ਇਸ ਵਿਕਲਪ ਨੂੰ ਅਕਿਰਿਆਸ਼ੀਲ ਕਰਨ ਦੀ ਸਿਫਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।",
+ "Model used for learning speaker embedding.": "ਸਪੀਕਰ ਐਂਬੇਡਿੰਗ ਸਿੱਖਣ ਲਈ ਵਰਤਿਆ ਜਾਣ ਵਾਲਾ ਮਾਡਲ।",
+ "Total Epoch": "ਕੁੱਲ ਯੁੱਗ",
+ "Save Every Epoch": "ਹਰ ਯੁੱਗ ਨੂੰ ਸੁਰੱਖਿਅਤ ਕਰੋ",
+ "Save Every Weights": "ਹਰ ਭਾਰ ਨੂੰ ਬਚਾਓ",
+ "Pretrained": "ਪਹਿਲਾਂ ਤੋਂ ਸਿਖਲਾਈ ਪ੍ਰਾਪਤ",
+ "Custom Pretrained": "ਕਸਟਮ ਪ੍ਰੀਟ੍ਰੇਨਡ",
+ "Save Only Latest": "ਕੇਵਲ ਨਵੀਨਤਮ ਨੂੰ ਸੁਰੱਖਿਅਤ ਕਰੋ",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "ਸਿਸਟਮ ਨੂੰ ਮਹੱਤਵਪੂਰਣ ਪਿਚ ਤਬਦੀਲੀ ਵਿੱਚ ਤਬਦੀਲ ਹੋਣ ਵਿੱਚ ਲੱਗਣ ਵਾਲੇ ਸਮੇਂ ਨੂੰ ਦਰਸਾਉਂਦਾ ਹੈ। ਛੋਟੀਆਂ ਹੌਪ ਲੰਬਾਈਆਂ ਨੂੰ ਅਨੁਮਾਨ ਲਗਾਉਣ ਲਈ ਵਧੇਰੇ ਸਮੇਂ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ ਪਰ ਪਿੱਚ ਦੀ ਸਟੀਕਤਾ ਵਧੇਰੇ ਹੁੰਦੀ ਹੈ।",
+ "Refresh Custom Pretraineds": "ਕਸਟਮ ਪ੍ਰੀਟ੍ਰੇਨਡਾਂ ਨੂੰ ਤਾਜ਼ਾ ਕਰੋ",
+ "Determine at how many epochs the model will saved at.": "ਇਹ ਨਿਰਧਾਰਤ ਕਰੋ ਕਿ ਮਾਡਲ ਕਿੰਨੇ ਯੁੱਗਾਂ ਵਿੱਚ ਸੁਰੱਖਿਅਤ ਹੋਵੇਗਾ।",
+ "Upload Pretrained Model": "ਪਹਿਲਾਂ ਤੋਂ ਸਿਖਲਾਈ ਪ੍ਰਾਪਤ ਮਾਡਲ ਅਪਲੋਡ ਕਰੋ",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "ਇਸ ਨੂੰ ਆਪਣੇ GPU ਦੇ ਉਪਲਬਧ VRAM ਨਾਲ ਜੋੜਨ ਦੀ ਸਲਾਹ ਦਿੱਤੀ ਜਾਂਦੀ ਹੈ। 4 ਦੀ ਸੈਟਿੰਗ ਬਿਹਤਰ ਸ਼ੁੱਧਤਾ ਪਰ ਹੌਲੀ ਪ੍ਰੋਸੈਸਿੰਗ ਦੀ ਪੇਸ਼ਕਸ਼ ਕਰਦੀ ਹੈ, ਜਦੋਂ ਕਿ 8 ਤੇਜ਼ ਅਤੇ ਮਿਆਰੀ ਨਤੀਜੇ ਪ੍ਰਦਾਨ ਕਰਦੀ ਹੈ.",
+ "Pretrained Custom Settings": "ਪਹਿਲਾਂ ਤੋਂ ਸਿਖਲਾਈ ਪ੍ਰਾਪਤ ਕਸਟਮ ਸੈਟਿੰਗਾਂ",
+ "GPU Settings": "GPU ਸੈਟਿੰਗਾਂ",
+ "Pretrained G Path": "ਕਸਟਮ ਪ੍ਰੀਟ੍ਰੇਨਡ G",
+ "Pretrained D Path": "ਕਸਟਮ ਪ੍ਰੀਟ੍ਰੇਨਡ ਡੀ",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "ਇਹ ਸੈਟਿੰਗ ਤੁਹਾਨੂੰ ਹਰੇਕ ਯੁੱਗ ਦੇ ਅੰਤ 'ਤੇ ਮਾਡਲ ਦੇ ਭਾਰ ਨੂੰ ਬਚਾਉਣ ਦੇ ਯੋਗ ਬਣਾਉਂਦੀ ਹੈ।",
+ "Specifies the overall quantity of epochs for the model training process.": "ਮਾਡਲ ਸਿਖਲਾਈ ਪ੍ਰਕਿਰਿਆ ਲਈ ਯੁੱਗਾਂ ਦੀ ਸਮੁੱਚੀ ਮਾਤਰਾ ਨਿਰਧਾਰਤ ਕਰਦਾ ਹੈ.",
+ "GPU Custom Settings": "GPU ਕਸਟਮ ਸੈਟਿੰਗਾਂ",
+ "GPU Number": "GPU ਨੰਬਰ",
+ "The file you dropped is not a valid pretrained file. Please try again.": "ਤੁਹਾਡੇ ਵੱਲੋਂ ਛੱਡੀ ਗਈ ਫਾਇਲ ਇੱਕ ਵੈਧ ਪੂਰਵ-ਸਿਖਲਾਈ ਪ੍ਰਾਪਤ ਫਾਇਲ ਨਹੀਂ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।",
+ "0 to ∞ separated by -": "0 ਤੋਂ ∞ ਦੁਆਰਾ ਵੱਖ ਕੀਤਾ ਜਾਂਦਾ ਹੈ -",
+ "GPU Information": "GPU ਜਾਣਕਾਰੀ",
+ "Pitch Guidance": "ਪਿਚ ਗਾਈਡੈਂਸ",
+ "Use CPU": "CPU ਦੀ ਵਰਤੋਂ ਕਰੋ",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "ਡ੍ਰੌਪਡਾਊਨ ਮੀਨੂ ਵਿੱਚ ਪਹਿਲਾਂ ਤੋਂ ਸਿਖਲਾਈ ਪ੍ਰਾਪਤ ਫਾਇਲ ਨੂੰ ਦੇਖਣ ਲਈ ਰੀਫਰੈਸ਼ ਬਟਨ 'ਤੇ ਕਲਿੱਕ ਕਰੋ।",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "ਇਸ ਸੈਟਿੰਗ ਨੂੰ ਸਮਰੱਥ ਕਰਨ ਦੇ ਨਤੀਜੇ ਵਜੋਂ ਜੀ ਅਤੇ ਡੀ ਫਾਈਲਾਂ ਸਿਰਫ ਆਪਣੇ ਸਭ ਤੋਂ ਤਾਜ਼ਾ ਸੰਸਕਰਣਾਂ ਨੂੰ ਸੁਰੱਖਿਅਤ ਕਰਨਗੀਆਂ, ਸਟੋਰੇਜ ਸਪੇਸ ਨੂੰ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਢੰਗ ਨਾਲ ਸੁਰੱਖਿਅਤ ਕਰਨਗੀਆਂ.",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "ਉੱਨਤ GPU ਸੈਟਿੰਗਾਂ ਸੈੱਟ ਕਰਦਾ ਹੈ, ਜੋ ਬਿਹਤਰ GPU ਆਰਕੀਟੈਕਚਰ ਵਾਲੇ ਉਪਭੋਗਤਾਵਾਂ ਲਈ ਸਿਫਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।",
+ "The GPU information will be displayed here.": "GPU ਜਾਣਕਾਰੀ ਇੱਥੇ ਪ੍ਰਦਰਸ਼ਿਤ ਕੀਤੀ ਜਾਵੇਗੀ।",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "ਕੱਢਣ ਦੀ ਪ੍ਰਕਿਰਿਆ ਵਿੱਚ ਵਰਤਣ ਲਈ CPU ਕੋਰਾਂ ਦੀ ਗਿਣਤੀ। ਡਿਫੌਲਟ ਸੈਟਿੰਗ ਤੁਹਾਡੇ CPU ਕੋਰ ਹਨ, ਜੋ ਜ਼ਿਆਦਾਤਰ ਮਾਮਲਿਆਂ ਲਈ ਸਿਫਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।",
+ "Force the use of CPU for training.": "ਸਿਖਲਾਈ ਲਈ CPU ਦੀ ਵਰਤੋਂ ਕਰਨ ਲਈ ਮਜਬੂਰ ਕਰੋ।",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "ਪ੍ਰੀਪ੍ਰੋਸੈਸ ਵਿੱਚ ਵਰਤਣ ਲਈ CPU ਕੋਰਾਂ ਦੀ ਗਿਣਤੀ। ਡਿਫੌਲਟ ਸੈਟਿੰਗ ਤੁਹਾਡੇ CPU ਕੋਰ ਹਨ, ਜੋ ਜ਼ਿਆਦਾਤਰ ਮਾਮਲਿਆਂ ਲਈ ਸਿਫਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।",
+ "Extract Features": "ਐਕਸਟਰੈਕਟ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "ਕਸਟਮ ਪ੍ਰੀਟ੍ਰੇਨਡ ਮਾਡਲਾਂ ਦੀ ਵਰਤੋਂ ਕਰਨ ਨਾਲ ਵਧੀਆ ਨਤੀਜੇ ਨਿਕਲ ਸਕਦੇ ਹਨ, ਕਿਉਂਕਿ ਵਿਸ਼ੇਸ਼ ਵਰਤੋਂ ਦੇ ਕੇਸ ਦੇ ਅਨੁਸਾਰ ਸਭ ਤੋਂ ਢੁਕਵੇਂ ਪੂਰਵ-ਸਿਖਲਾਈ ਪ੍ਰਾਪਤ ਮਾਡਲਾਂ ਦੀ ਚੋਣ ਕਰਨ ਨਾਲ ਪ੍ਰਦਰਸ਼ਨ ਵਿੱਚ ਮਹੱਤਵਪੂਰਣ ਵਾਧਾ ਹੋ ਸਕਦਾ ਹੈ.",
+ "Cache Dataset in GPU": "GPU ਵਿੱਚ ਕੈਸ਼ ਡੇਟਾਸੈਟ",
+ "Overtraining Detector": "ਓਵਰਟ੍ਰੇਨਿੰਗ ਡਿਟੈਕਟਰ",
+ "Index Algorithm": "ਇੰਡੈਕਸ ਐਲਗੋਰਿਦਮ",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "ਉਹਨਾਂ GPU ਦੀ ਗਿਣਤੀ ਨਿਰਧਾਰਤ ਕਰੋ ਜਿੰਨ੍ਹਾਂ ਨੂੰ ਤੁਸੀਂ ਪ੍ਰੀਪ੍ਰੋਸੈਸ ਵਾਸਤੇ ਵਰਤਣਾ ਚਾਹੁੰਦੇ ਹੋ ਉਹਨਾਂ ਨੂੰ ਹਾਈਫੇਨ (-) ਦੁਆਰਾ ਵੱਖ ਕਰਕੇ ਦਾਖਲ ਕਰੋ। ਫਿਲਹਾਲ, ਮਲਟੀ-ਜੀਪੀਯੂ ਦੀ ਵਰਤੋਂ ਕਰਨ ਨਾਲ ਕੋਈ ਮਹੱਤਵਪੂਰਣ ਪ੍ਰਭਾਵ ਨਹੀਂ ਪਵੇਗਾ.",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "ਉਹਨਾਂ GPU ਦੀ ਗਿਣਤੀ ਨਿਰਧਾਰਤ ਕਰੋ ਜਿੰਨ੍ਹਾਂ ਨੂੰ ਤੁਸੀਂ ਹਾਈਫੇਨ (-) ਦੁਆਰਾ ਵੱਖ ਕਰਕੇ ਕੱਢਣ ਲਈ ਵਰਤਣਾ ਚਾਹੁੰਦੇ ਹੋ।",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "ਆਪਣੇ ਆਪ ਨੂੰ ਸਿਖਲਾਈ ਦਿੰਦੇ ਸਮੇਂ ਪਹਿਲਾਂ ਤੋਂ ਸਿਖਲਾਈ ਪ੍ਰਾਪਤ ਮਾਡਲਾਂ ਦੀ ਵਰਤੋਂ ਕਰੋ। ਇਹ ਪਹੁੰਚ ਸਿਖਲਾਈ ਦੀ ਮਿਆਦ ਨੂੰ ਘਟਾਉਂਦੀ ਹੈ ਅਤੇ ਸਮੁੱਚੀ ਗੁਣਵੱਤਾ ਨੂੰ ਵਧਾਉਂਦੀ ਹੈ।",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "ਅਸੀਂ ਤੇਜ਼ ਪ੍ਰਦਰਸ਼ਨ ਲਈ ਜੀਪੀਯੂ 'ਤੇ ਮਾਡਲ ਪ੍ਰੀਪ੍ਰੋਸੈਸਿੰਗ ਨੂੰ ਚਲਾਉਣ ਨੂੰ ਤਰਜੀਹ ਦਿੰਦੇ ਹਾਂ। ਜੇ ਤੁਸੀਂ CPU ਦੀ ਵਰਤੋਂ ਕਰਨਾ ਪਸੰਦ ਕਰਦੇ ਹੋ, ਤਾਂ GPU ਫੀਲਡ ਨੂੰ ਖਾਲੀ ਛੱਡ ਦਿਓ।",
+ "Fresh Training": "ਤਾਜ਼ਾ ਸਿਖਲਾਈ",
+ "Overtraining Threshold": "ਓਵਰਟ੍ਰੇਨਿੰਗ ਥ੍ਰੈਸ਼ਹੋਲਡ",
+ "Overtraining Detector Settings": "ਓਵਰਟ੍ਰੇਨਿੰਗ ਡਿਟੈਕਟਰ ਸੈਟਿੰਗਾਂ",
+ "Cache the dataset in GPU memory to speed up the training process.": "ਸਿਖਲਾਈ ਪ੍ਰਕਿਰਿਆ ਨੂੰ ਤੇਜ਼ ਕਰਨ ਲਈ ਡੇਟਾਸੈਟ ਨੂੰ GPU ਮੈਮੋਰੀ ਵਿੱਚ ਕੈਸ਼ ਕਰੋ।",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "ਅਸੀਂ ਤੇਜ਼ ਪ੍ਰਦਰਸ਼ਨ ਲਈ ਜੀਪੀਯੂ 'ਤੇ ਮਾਡਲ ਐਕਸਟਰੈਕਸ਼ਨ ਨੂੰ ਚਲਾਉਣ ਨੂੰ ਤਰਜੀਹ ਦਿੰਦੇ ਹਾਂ। ਜੇ ਤੁਸੀਂ CPU ਦੀ ਵਰਤੋਂ ਕਰਨਾ ਪਸੰਦ ਕਰਦੇ ਹੋ, ਤਾਂ GPU ਫੀਲਡ ਨੂੰ ਖਾਲੀ ਛੱਡ ਦਿਓ।",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMians ਇੱਕ ਕਲੱਸਟਰਿੰਗ ਐਲਗੋਰਿਦਮ ਹੈ ਜੋ ਡੇਟਾਸੈਟ ਨੂੰ K ਕਲੱਸਟਰਾਂ ਵਿੱਚ ਵੰਡਦਾ ਹੈ। ਇਹ ਸੈਟਿੰਗ ਵੱਡੇ ਡੇਟਾਸੈਟਾਂ ਲਈ ਵਿਸ਼ੇਸ਼ ਤੌਰ 'ਤੇ ਲਾਭਦਾਇਕ ਹੈ.",
+ "Start Training": "ਸਿਖਲਾਈ ਸ਼ੁਰੂ ਕਰੋ",
+ "Stop Training": "ਸਿਖਲਾਈ ਬੰਦ ਕਰੋ",
+ "Export Model": "ਨਿਰਯਾਤ ਮਾਡਲ",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "ਪਿਚ ਗਾਈਡੈਂਸ ਦੀ ਵਰਤੋਂ ਕਰਕੇ, ਅਸਲ ਆਵਾਜ਼ ਦੇ ਇੰਟਰਨੇਸ਼ਨ ਨੂੰ ਦਰਸਾਉਣਾ ਸੰਭਵ ਹੋ ਜਾਂਦਾ ਹੈ, ਜਿਸ ਵਿੱਚ ਇਸਦੀ ਪਿੱਚ ਵੀ ਸ਼ਾਮਲ ਹੈ. ਇਹ ਵਿਸ਼ੇਸ਼ਤਾ ਗਾਇਕੀ ਅਤੇ ਹੋਰ ਦ੍ਰਿਸ਼ਾਂ ਲਈ ਵਿਸ਼ੇਸ਼ ਤੌਰ 'ਤੇ ਕੀਮਤੀ ਹੈ ਜਿੱਥੇ ਮੂਲ ਸੁਰ ਜਾਂ ਪਿੱਚ ਪੈਟਰਨ ਨੂੰ ਸੁਰੱਖਿਅਤ ਰੱਖਣਾ ਜ਼ਰੂਰੀ ਹੈ।",
+ "Generate Index": "ਇੰਡੈਕਸ ਜਨਰੇਟ ਕਰੋ",
+ "Exported Pth file": "ਨਿਰਯਾਤ ਕੀਤੀ PTH ਫਾਇਲ",
+ "Upload": "ਅੱਪਲੋਡ ਕਰੋ",
+ "Exported Index file": "ਐਕਸਪੋਰਟ ਇੰਡੈਕਸ ਫਾਇਲ",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "ਜੇ ਕੋਈ ਸੁਧਾਰ ਨਹੀਂ ਪਾਇਆ ਜਾਂਦਾ ਤਾਂ ਤੁਸੀਂ ਚਾਹੁੰਦੇ ਹੋ ਕਿ ਤੁਹਾਡਾ ਮਾਡਲ ਸਿਖਲਾਈ ਬੰਦ ਕਰ ਦੇਵੇ।",
+ "Single": "ਸਿੰਗਲ",
+ "Index File": "ਇੰਡੈਕਸ ਫਾਇਲ",
+ "Refresh": "ਤਾਜ਼ਾ ਕਰੋ",
+ "Voice Model": "ਵੌਇਸ ਮਾਡਲ",
+ "Select the pth file to be exported": "ਨਿਰਯਾਤ ਕੀਤੀ ਜਾਣ ਵਾਲੀ pth ਫਾਇਲ ਦੀ ਚੋਣ ਕਰੋ",
+ "Unload Voice": "ਆਵਾਜ਼ ਨੂੰ ਅਨਲੋਡ ਕਰੋ",
+ "Select the index file to be exported": "ਨਿਰਯਾਤ ਕੀਤੀ ਜਾਣ ਵਾਲੀ ਇੰਡੈਕਸ ਫਾਇਲ ਦੀ ਚੋਣ ਕਰੋ",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "ਮਾਡਲ ਨੂੰ ਸਿਖਲਾਈ ਡੇਟਾ ਨੂੰ ਬਹੁਤ ਚੰਗੀ ਤਰ੍ਹਾਂ ਸਿੱਖਣ ਤੋਂ ਰੋਕਣ ਅਤੇ ਨਵੇਂ ਡੇਟਾ ਨੂੰ ਆਮ ਕਰਨ ਦੀ ਯੋਗਤਾ ਗੁਆਉਣ ਤੋਂ ਰੋਕਣ ਲਈ ਓਵਰਟ੍ਰੇਨਿੰਗ ਦਾ ਪਤਾ ਲਗਾਓ।",
+ "Select the voice model to use for the conversion.": "ਪਰਿਵਰਤਨ ਲਈ ਵਰਤਣ ਲਈ ਵੌਇਸ ਮਾਡਲ ਦੀ ਚੋਣ ਕਰੋ।",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "ਇਸ ਸੈਟਿੰਗ ਨੂੰ ਕੇਵਲ ਤਾਂ ਹੀ ਸਮਰੱਥ ਕਰੋ ਜੇ ਤੁਸੀਂ ਸ਼ੁਰੂਆਤ ਤੋਂ ਕਿਸੇ ਨਵੇਂ ਮਾਡਲ ਨੂੰ ਸਿਖਲਾਈ ਦੇ ਰਹੇ ਹੋ ਜਾਂ ਸਿਖਲਾਈ ਨੂੰ ਦੁਬਾਰਾ ਸ਼ੁਰੂ ਕਰ ਰਹੇ ਹੋ। ਸਾਰੇ ਪਹਿਲਾਂ ਤਿਆਰ ਕੀਤੇ ਭਾਰ ਅਤੇ ਟੈਂਸਰਬੋਰਡ ਲੌਗਾਂ ਨੂੰ ਮਿਟਾ ਦਿੰਦਾ ਹੈ।",
+ "Select Audio": "ਆਡੀਓ ਚੁਣੋ",
+ "Select the index file to use for the conversion.": "ਪਰਿਵਰਤਨ ਲਈ ਵਰਤਣ ਲਈ ਇੰਡੈਕਸ ਫਾਇਲ ਦੀ ਚੋਣ ਕਰੋ।",
+ "Upload Audio": "ਆਡੀਓ ਅੱਪਲੋਡ ਕਰੋ",
+ "Advanced Settings": "ਉੱਨਤ ਸੈਟਿੰਗਾਂ",
+ "Output Path": "ਆਊਟਪੁੱਟ ਪਾਥ",
+ "Custom Output Path": "ਕਸਟਮ ਆਉਟਪੁੱਟ ਪਾਥ",
+ "Select the audio to convert.": "ਕਨਵਰਟ ਕਰਨ ਲਈ ਆਡੀਓ ਦੀ ਚੋਣ ਕਰੋ।",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "ਬਟਨ 'ਅਪਲੋਡ' ਸਿਰਫ ਗੂਗਲ ਕੋਲੈਬ ਲਈ ਹੈ: ਨਿਰਯਾਤ ਕੀਤੀਆਂ ਫਾਈਲਾਂ ਨੂੰ ਤੁਹਾਡੀ ਗੂਗਲ ਡਰਾਈਵ ਵਿੱਚ ਐਪਲੀਓਐਕਸਪੋਰਟ ਫੋਲਡਰ ਵਿੱਚ ਅੱਪਲੋਡ ਕਰਦਾ ਹੈ।",
+ "Export Format": "ਨਿਰਯਾਤ ਫਾਰਮੈਟ",
+ "Split Audio": "ਸਪਲਿਟ ਆਡੀਓ",
+ "Autotune": "Autotune",
+ "Select the format to export the audio.": "ਆਡੀਓ ਨਿਰਯਾਤ ਕਰਨ ਲਈ ਫਾਰਮੈਟ ਦੀ ਚੋਣ ਕਰੋ।",
+ "Clean Audio": "ਕਲੀਨ ਆਡੀਓ",
+ "Clear Outputs (Deletes all audios in assets/audios)": "ਸਪਸ਼ਟ ਆਊਟਪੁੱਟ (ਜਾਇਦਾਦਾਂ/ਆਡੀਓ ਵਿੱਚ ਸਾਰੇ ਆਡੀਓ ਮਿਟਾ ਦਿੰਦਾ ਹੈ)",
+ "Clean Strength": "ਸਾਫ਼ ਤਾਕਤ",
+ "Upscale Audio": "Upscale ਆਡੀਓ",
+ "Formant Shifting": "ਫੋਰਮਾਂਟ ਸ਼ਿਫਟਿੰਗ",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "ਉਹ ਰਸਤਾ ਜਿੱਥੇ ਆਉਟਪੁੱਟ ਆਡੀਓ ਨੂੰ ਸੁਰੱਖਿਅਤ ਕੀਤਾ ਜਾਵੇਗਾ, ਸੰਪਤੀਆਂ/ਆਡੀਓਜ਼/output.wav",
+ "Default value is 1.0": "ਡਿਫਾਲਟ ਮੁੱਲ 1.0 ਹੈ",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "ਕੁਝ ਮਾਮਲਿਆਂ ਵਿੱਚ ਬਿਹਤਰ ਨਤੀਜੇ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ ਅਨੁਮਾਨ ਲਈ ਆਡੀਓ ਨੂੰ ਟੁਕੜਿਆਂ ਵਿੱਚ ਵੰਡੋ।",
+ "Browse presets for formanting": "ਫੋਰਮੈਨਟਿੰਗ ਲਈ ਪ੍ਰੀਸੈੱਟ ਬ੍ਰਾਊਜ਼ ਕਰੋ",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "ਆਪਣੇ ਅਨੁਮਾਨਾਂ ਲਈ ਇੱਕ ਨਰਮ ਆਟੋਟਿਊਨ ਲਾਗੂ ਕਰੋ, ਜਿਸ ਦੀ ਸਿਫਾਰਸ਼ ਗਾਇਨ ਪਰਿਵਰਤਨ ਲਈ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।",
+ "Quefrency for formant shifting": "ਫੋਰਮੈਂਟ ਸ਼ਿਫਟਿੰਗ ਲਈ ਉਤਸੁਕਤਾ",
+ "Presets are located in /assets/formant_shift folder": "ਪ੍ਰੀਸੈੱਟ /ਸੰਪਤੀਆਂ/formant_shift ਫੋਲਡਰ ਵਿੱਚ ਸਥਿਤ ਹਨ",
+ "Timbre for formant shifting": "ਫੋਰਮਾਂਟ ਸ਼ਿਫਟਿੰਗ ਲਈ ਟਿੰਬਰ",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "ਆਡੀਓ ਬੋਲਣ ਲਈ ਸਿਫਾਰਸ਼ ਕੀਤੇ ਗਏ ਸ਼ੋਰ ਦਾ ਪਤਾ ਲਗਾਉਣ ਵਾਲੇ ਐਲਗੋਰਿਦਮ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਆਪਣੇ ਆਡੀਓ ਆਉਟਪੁੱਟ ਨੂੰ ਸਾਫ਼ ਕਰੋ।",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "ਫੋਰਮਾਂਟ ਸ਼ਿਫਟਿੰਗ ਨੂੰ ਸਮਰੱਥ ਕਰੋ। ਮਰਦ ਤੋਂ ਔਰਤ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ ਅਤੇ ਇਸਦੇ ਉਲਟ ਪਰਿਵਰਤਨ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ.",
+ "Pitch": "ਪਿਚ",
+ "Filter Radius": "ਫਿਲਟਰ ਰੇਡੀਅਸ",
+ "Volume Envelope": "ਵਾਲਿਊਮ ਲਿਫਾਫਾ",
+ "Search Feature Ratio": "ਖੋਜ ਵਿਸ਼ੇਸ਼ਤਾ ਅਨੁਪਾਤ",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "ਆਡੀਓ ਦੀ ਪਿਚ ਸੈੱਟ ਕਰੋ, ਜਿੰਨਾ ਜ਼ਿਆਦਾ ਮੁੱਲ ਹੋਵੇਗਾ, ਪਿਚ ਓਨੀ ਹੀ ਉੱਚੀ ਹੋਵੇਗੀ।",
+ "Export Audio": "ਆਡੀਓ ਨਿਰਯਾਤ ਕਰੋ",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "ਘੱਟ ਗੁਣਵੱਤਾ ਵਾਲੇ ਆਡੀਓ ਲਈ ਸਿਫਾਰਸ਼ ਕੀਤੀ ਗਈ, ਆਡੀਓ ਨੂੰ ਉੱਚ ਗੁਣਵੱਤਾ ਤੱਕ ਵਧਾਓ। (ਆਡੀਓ ਨੂੰ ਪ੍ਰੋਸੈਸ ਕਰਨ ਵਿੱਚ ਵਧੇਰੇ ਸਮਾਂ ਲੱਗ ਸਕਦਾ ਹੈ)",
+ "Protect Voiceless Consonants": "ਅਵਾਜ਼ ਰਹਿਤ ਵਿੰਜਨਾਂ ਦੀ ਰੱਖਿਆ ਕਰੋ",
+ "Batch": "ਬੈਚ",
+ "Pitch extraction algorithm": "ਪਿਚ ਐਕਸਟਰੈਕਸ਼ਨ ਐਲਗੋਰਿਦਮ",
+ "Input Folder": "ਇਨਪੁੱਟ ਫੋਲਡਰ",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "ਆਉਟਪੁੱਟ ਦੇ ਵਾਲੀਅਮ ਲਿਫਾਫੇ ਨੂੰ ਬਦਲੋ ਜਾਂ ਮਿਸ਼ਰਣ ਕਰੋ। ਅਨੁਪਾਤ ਜਿੰਨਾ 1 ਦੇ ਨੇੜੇ ਹੁੰਦਾ ਹੈ, ਓਨਾ ਹੀ ਆਉਟਪੁੱਟ ਲਿਫਾਫਾ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ.",
+ "Convert": "ਕਨਵਰਟ ਕਰੋ",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "ਇੰਡੈਕਸ ਫਾਈਲ ਦੁਆਰਾ ਪਾਇਆ ਗਿਆ ਪ੍ਰਭਾਵ; ਇੱਕ ਉੱਚ ਮੁੱਲ ਵਧੇਰੇ ਪ੍ਰਭਾਵ ਨਾਲ ਮੇਲ ਖਾਂਦਾ ਹੈ. ਹਾਲਾਂਕਿ, ਘੱਟ ਮੁੱਲਾਂ ਦੀ ਚੋਣ ਕਰਨਾ ਆਡੀਓ ਵਿੱਚ ਮੌਜੂਦ ਕਲਾਕ੍ਰਿਤੀਆਂ ਨੂੰ ਘਟਾਉਣ ਵਿੱਚ ਮਦਦ ਕਰ ਸਕਦਾ ਹੈ।",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "ਜਿਸ ਆਡੀਓ ਨੂੰ ਤੁਸੀਂ ਚਾਹੁੰਦੇ ਹੋ ਉਸ 'ਤੇ ਕਲੀਨ-ਅੱਪ ਪੱਧਰ ਸੈੱਟ ਕਰੋ, ਜਿੰਨਾ ਜ਼ਿਆਦਾ ਤੁਸੀਂ ਇਸ ਨੂੰ ਵਧਾਓਗੇ, ਓਨਾ ਹੀ ਇਹ ਸਾਫ਼ ਹੋ ਜਾਵੇਗਾ, ਪਰ ਇਹ ਸੰਭਵ ਹੈ ਕਿ ਆਡੀਓ ਵਧੇਰੇ ਸੰਕੁਚਿਤ ਹੋ ਜਾਵੇਗਾ.",
+ "Enter input path": "ਇਨਪੁੱਟ ਪਾਥ ਦਾਖਲ ਕਰੋ",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "ਆਡੀਓ ਪਰਿਵਰਤਨ ਲਈ ਵਰਤਣ ਲਈ ਪਿਚ ਐਕਸਟਰੈਕਸ਼ਨ ਐਲਗੋਰਿਦਮ. ਡਿਫਾਲਟ ਐਲਗੋਰਿਦਮ rmvpe ਹੈ, ਜਿਸਦੀ ਸਿਫਾਰਸ਼ ਜ਼ਿਆਦਾਤਰ ਮਾਮਲਿਆਂ ਲਈ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।",
+ "Output Folder": "ਆਊਟਪੁੱਟ ਫੋਲਡਰ",
+ "Select the folder containing the audios to convert.": "ਬਦਲਣ ਲਈ ਆਡੀਓ ਵਾਲੇ ਫੋਲਡਰ ਦੀ ਚੋਣ ਕਰੋ।",
+ "Get information about the audio": "ਆਡੀਓ ਬਾਰੇ ਜਾਣਕਾਰੀ ਪ੍ਰਾਪਤ ਕਰੋ",
+ "Voice Blender": "ਵੌਇਸ ਬਲੇਂਡਰ",
+ "## Voice Blender": "## ਵੌਇਸ ਬਲੇਂਡਰ",
+ "Enter output path": "ਆਊਟਪੁੱਟ ਪਾਥ ਦਾਖਲ ਕਰੋ",
+ "Blend Ratio": "ਮਿਸ਼ਰਣ ਅਨੁਪਾਤ",
+ "Fusion": "ਫਿਊਜ਼ਨ",
+ "You can also use a custom path.": "ਤੁਸੀਂ ਇੱਕ ਕਸਟਮ ਪਾਥ ਦੀ ਵਰਤੋਂ ਵੀ ਕਰ ਸਕਦੇ ਹੋ।",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "ਜੇ ਗਿਣਤੀ ਤਿੰਨ ਤੋਂ ਵੱਧ ਜਾਂ ਬਰਾਬਰ ਹੈ, ਤਾਂ ਇਕੱਤਰ ਕੀਤੇ ਟੋਨ ਨਤੀਜਿਆਂ 'ਤੇ ਮੀਡੀਅਨ ਫਿਲਟਰਿੰਗ ਲਗਾਉਣ ਨਾਲ ਸਾਹ ਲੈਣ ਵਿੱਚ ਕਮੀ ਆਉਣ ਦੀ ਸੰਭਾਵਨਾ ਹੁੰਦੀ ਹੈ.",
+ "Drag and drop your model here": "ਆਪਣੇ ਮਾਡਲ ਨੂੰ ਇੱਥੇ ਖਿੱਚ ਕੇ ਛੱਡ ਦਿਓ",
+ "Select the folder where the output audios will be saved.": "ਉਹ ਫੋਲਡਰ ਚੁਣੋ ਜਿੱਥੇ ਆਉਟਪੁੱਟ ਆਡੀਓ ਸੁਰੱਖਿਅਤ ਕੀਤੇ ਜਾਣਗੇ।",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "ਇਲੈਕਟ੍ਰੋ-ਐਕੋਸਟਿਕ ਫਾੜਨ ਅਤੇ ਹੋਰ ਕਲਾਕ੍ਰਿਤੀਆਂ ਨੂੰ ਰੋਕਣ ਲਈ ਵੱਖਰੇ ਵਿਜਨਾਂ ਅਤੇ ਸਾਹ ਲੈਣ ਦੀਆਂ ਆਵਾਜ਼ਾਂ ਦੀ ਰੱਖਿਆ ਕਰੋ। ਪੈਰਾਮੀਟਰ ਨੂੰ ਇਸਦੇ ਵੱਧ ਤੋਂ ਵੱਧ ਮੁੱਲ 0.5 ਤੱਕ ਖਿੱਚਣਾ ਵਿਆਪਕ ਸੁਰੱਖਿਆ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ। ਹਾਲਾਂਕਿ, ਇਸ ਮੁੱਲ ਨੂੰ ਘਟਾਉਣ ਨਾਲ ਸੁਰੱਖਿਆ ਦੀ ਹੱਦ ਘੱਟ ਹੋ ਸਕਦੀ ਹੈ ਜਦੋਂ ਕਿ ਸੰਭਾਵਿਤ ਤੌਰ 'ਤੇ ਸੂਚਕਪ੍ਰਭਾਵ ਨੂੰ ਘਟਾਇਆ ਜਾ ਸਕਦਾ ਹੈ.",
+ "Enter path to model": "ਮਾਡਲ ਲਈ ਪਾਥ ਦਾਖਲ ਕਰੋ",
+ "Path to Model": "ਮਾਡਲ ਲਈ ਰਾਹ",
+ "Inroduce the model information": "ਮਾਡਲ ਜਾਣਕਾਰੀ ਨੂੰ ਪੇਸ਼ ਕਰੋ",
+ "Model information to be placed": "ਮਾਡਲ ਜਾਣਕਾਰੀ ਰੱਖੀ ਜਾਣੀ ਚਾਹੀਦੀ ਹੈ",
+ "View model information": "ਮਾਡਲ ਜਾਣਕਾਰੀ ਦੇਖੋ",
+ "View": "ਦ੍ਰਿਸ਼",
+ "Pth file": "Pth ਫਾਇਲ",
+ "Model extraction": "ਮਾਡਲ ਕੱਢਣਾ",
+ "Model conversion": "ਮਾਡਲ ਪਰਿਵਰਤਨ",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "ਦੋ ਵੌਇਸ ਮਾਡਲਾਂ ਦੀ ਚੋਣ ਕਰੋ, ਆਪਣੀ ਲੋੜੀਂਦੀ ਮਿਸ਼ਰਣ ਪ੍ਰਤੀਸ਼ਤਤਾ ਸੈੱਟ ਕਰੋ, ਅਤੇ ਉਨ੍ਹਾਂ ਨੂੰ ਪੂਰੀ ਤਰ੍ਹਾਂ ਨਵੀਂ ਆਵਾਜ਼ ਵਿੱਚ ਮਿਲਾਓ.",
+ "Introduce the model pth path": "ਮਾਡਲ pth ਪਾਥ ਨੂੰ ਪੇਸ਼ ਕਰੋ",
+ "Extract F0 Curve": "F0 ਕਰਵ ਕੱਢੋ",
+ "Output of the pth file": "pth ਫਾਇਲ ਦਾ ਆਊਟਪੁੱਟ",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "ਸਥਿਤੀ ਨੂੰ ਇੱਕ ਪਾਸੇ ਜਾਂ ਦੂਜੇ ਪਾਸੇ ਵਧੇਰੇ ਵਿਵਸਥਿਤ ਕਰਨਾ ਮਾਡਲ ਨੂੰ ਪਹਿਲੇ ਜਾਂ ਦੂਜੇ ਦੇ ਸਮਾਨ ਬਣਾ ਦੇਵੇਗਾ।",
+ "Record": "ਰਿਕਾਰਡ",
+ "# How to Report an Issue on GitHub": "# GitHub 'ਤੇ ਕਿਸੇ ਮੁੱਦੇ ਦੀ ਰਿਪੋਰਟ ਕਿਵੇਂ ਕਰਨੀ ਹੈ",
+ "The information to be placed in the model (You can leave it blank or put anything).": "ਮਾਡਲ ਵਿੱਚ ਰੱਖੀ ਜਾਣ ਵਾਲੀ ਜਾਣਕਾਰੀ (ਤੁਸੀਂ ਇਸ ਨੂੰ ਖਾਲੀ ਛੱਡ ਸਕਦੇ ਹੋ ਜਾਂ ਕੁਝ ਵੀ ਪਾ ਸਕਦੇ ਹੋ)।",
+ "See Model Information": "ਮਾਡਲ ਜਾਣਕਾਰੀ ਦੇਖੋ",
+ "Introduce the model .pth path": "ਮਾਡਲ .pth path ਨੂੰ ਪੇਸ਼ ਕਰੋ",
+ "Stop Recording": "ਰਿਕਾਰਡਿੰਗ ਬੰਦ ਕਰੋ",
+ "Record Screen": "ਰਿਕਾਰਡ ਸਕ੍ਰੀਨ",
+ "## Download Model": "## ਡਾਊਨਲੋਡ ਮਾਡਲ",
+ "Model Link": "ਮਾਡਲ ਲਿੰਕ",
+ "Download Model": "ਮਾਡਲ ਡਾਊਨਲੋਡ ਕਰੋ",
+ "Introduce the model link": "ਮਾਡਲ ਲਿੰਕ ਪੇਸ਼ ਕਰੋ",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. [GitHub ਮੁੱਦੇ] (https://github.com/IAHispano/Applio/issues) 'ਤੇ ਜਾਓ ਅਤੇ 'ਨਵਾਂ ਮੁੱਦਾ' ਬਟਨ 'ਤੇ ਕਲਿੱਕ ਕਰੋ।",
+ "## Drop files": "## ਫਾਇਲਾਂ ਛੱਡੋ",
+ "Search": "ਖੋਜ",
+ "## Search Model": "## ਖੋਜ ਮਾਡਲ",
+ "TTS Speed": "TTS ਸਪੀਡ",
+ "And select the sampling rate": "ਅਤੇ ਨਮੂਨੇ ਲੈਣ ਦੀ ਦਰ ਦੀ ਚੋਣ ਕਰੋ।",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "ਆਪਣੀ .pth ਫਾਇਲ ਅਤੇ .index ਫਾਇਲ ਨੂੰ ਇਸ ਸਪੇਸ ਵਿੱਚ ਖਿੱਚੋ। ਇੱਕ ਨੂੰ ਖਿੱਚੋ ਅਤੇ ਫਿਰ ਦੂਜੇ ਨੂੰ।",
+ "Introduce the model name to search.": "ਖੋਜ ਕਰਨ ਲਈ ਮਾਡਲ ਨਾਮ ਪੇਸ਼ ਕਰੋ।",
+ "TTS Voices": "TTS ਆਵਾਜ਼ਾਂ",
+ "## Download Pretrained Models": "## ਪਹਿਲਾਂ ਤੋਂ ਸਿਖਲਾਈ ਪ੍ਰਾਪਤ ਮਾਡਲ ਡਾਊਨਲੋਡ ਕਰੋ",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "f0 ਕਰਵ ਸਮੇਂ ਦੇ ਨਾਲ ਆਵਾਜ਼ ਦੀ ਬੇਸ ਫ੍ਰੀਕੁਐਂਸੀ ਵਿੱਚ ਭਿੰਨਤਾਵਾਂ ਨੂੰ ਦਰਸਾਉਂਦਾ ਹੈ, ਇਹ ਦਰਸਾਉਂਦਾ ਹੈ ਕਿ ਪਿੱਚ ਕਿਵੇਂ ਉੱਠਦੀ ਅਤੇ ਡਿੱਗਦੀ ਹੈ।",
+ "We couldn't find models by that name.": "ਅਸੀਂ ਉਸ ਨਾਮ ਦੇ ਮਾਡਲ ਨਹੀਂ ਲੱਭ ਸਕੇ.",
+ "Text to Synthesize": "ਸੰਸ਼ਲੇਸ਼ਣ ਕਰਨ ਲਈ ਟੈਕਸਟ",
+ "Increase or decrease TTS speed.": "TTS ਦੀ ਗਤੀ ਨੂੰ ਵਧਾਓ ਜਾਂ ਘਟਾਓ।",
+ "Select the pretrained model you want to download.": "ਉਹ ਪ੍ਰੀਟ੍ਰੇਨਡ ਮਾਡਲ ਚੁਣੋ ਜਿਸਨੂੰ ਤੁਸੀਂ ਡਾਊਨਲੋਡ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ।",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. ਤੁਹਾਡੇ ਵੱਲੋਂ ਅਨੁਭਵ ਕੀਤੀ ਜਾ ਰਹੀ ਸਮੱਸਿਆ ਨੂੰ ਰਿਕਾਰਡ ਕਰਨਾ ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਹੇਠਾਂ ਦਿੱਤੇ 'ਰਿਕਾਰਡ ਸਕ੍ਰੀਨ' ਬਟਨ 'ਤੇ ਕਲਿੱਕ ਕਰੋ।",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. ਪ੍ਰਦਾਨ ਕੀਤੇ ਮੁੱਦੇ ਦੇ ਟੈਂਪਲੇਟ ਨੂੰ ਪੂਰਾ ਕਰੋ, ਲੋੜ ਅਨੁਸਾਰ ਵੇਰਵੇ ਸ਼ਾਮਲ ਕਰਨਾ ਯਕੀਨੀ ਬਣਾਓ, ਅਤੇ ਪਿਛਲੇ ਕਦਮ ਤੋਂ ਰਿਕਾਰਡ ਕੀਤੀ ਫਾਈਲ ਨੂੰ ਅੱਪਲੋਡ ਕਰਨ ਲਈ ਸੰਪਤੀ ਸੈਕਸ਼ਨ ਦੀ ਵਰਤੋਂ ਕਰੋ.",
+ "Select the TTS voice to use for the conversion.": "ਪਰਿਵਰਤਨ ਲਈ ਵਰਤਣ ਲਈ TTS ਆਵਾਜ਼ ਦੀ ਚੋਣ ਕਰੋ।",
+ "Enter the text to synthesize.": "ਸੰਸ਼ਲੇਸ਼ਿਤ ਕਰਨ ਲਈ ਟੈਕਸਟ ਦਾਖਲ ਕਰੋ।",
+ "Input path for text file": "ਟੈਕਸਟ ਫਾਇਲ ਲਈ ਇਨਪੁੱਟ ਪਾਥ",
+ "Upload a .txt file": "ਇੱਕ .txt ਫਾਇਲ ਅੱਪਲੋਡ ਕਰੋ",
+ "Output Path for TTS Audio": "TTS ਆਡੀਓ ਲਈ ਆਉਟਪੁੱਟ ਪਾਥ",
+ "Enter text to synthesize": "ਸੰਸ਼ਲੇਸ਼ਿਤ ਕਰਨ ਲਈ ਟੈਕਸਟ ਦਾਖਲ ਕਰੋ",
+ "Output Path for RVC Audio": "RVC ਆਡੀਓ ਲਈ ਆਉਟਪੁੱਟ ਪਾਥ",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. ਇੱਕ ਵਾਰ ਜਦੋਂ ਤੁਸੀਂ ਸਮੱਸਿਆ ਨੂੰ ਰਿਕਾਰਡ ਕਰਨਾ ਪੂਰਾ ਕਰ ਲੈਂਦੇ ਹੋ, ਤਾਂ 'ਸਟਾਪ ਰਿਕਾਰਡਿੰਗ' ਬਟਨ 'ਤੇ ਕਲਿੱਕ ਕਰੋ (ਉਹੀ ਬਟਨ, ਪਰ ਲੇਬਲ ਇਸ ਗੱਲ 'ਤੇ ਨਿਰਭਰ ਕਰਦਾ ਹੈ ਕਿ ਤੁਸੀਂ ਸਰਗਰਮੀ ਨਾਲ ਰਿਕਾਰਡਿੰਗ ਕਰ ਰਹੇ ਹੋ ਜਾਂ ਨਹੀਂ)।",
+ "The path to the text file that contains content for text to speech.": "ਟੈਕਸਟ ਫਾਈਲ ਦਾ ਰਸਤਾ ਜਿਸ ਵਿੱਚ ਟੈਕਸਟ ਤੋਂ ਬੋਲਣ ਲਈ ਸਮੱਗਰੀ ਹੁੰਦੀ ਹੈ।",
+ "Theme": "ਥੀਮ",
+ "Restart Applio": "Applio ਨੂੰ ਮੁੜ ਚਾਲੂ ਕਰੋ",
+ "Language": "ਭਾਸ਼ਾ",
+ "Precision": "ਸ਼ੁੱਧਤਾ",
+ "Enable Applio integration with Discord presence": "ਡਿਸਕਾਰਡ ਦੀ ਮੌਜੂਦਗੀ ਨਾਲ ਐਪਲੀਓ ਏਕੀਕਰਣ ਨੂੰ ਸਮਰੱਥ ਕਰੋ",
+ "Enable Applio integration with applio.org/models using flask": "ਫਲਾਸਕ ਦੀ ਵਰਤੋਂ ਕਰਕੇ applio.org/models ਨਾਲ ਐਪਲਿਓ ਏਕੀਕਰਣ ਨੂੰ ਸਮਰੱਥ ਕਰੋ",
+ "Update precision": "ਸ਼ੁੱਧਤਾ ਨੂੰ ਅੱਪਡੇਟ ਕਰੋ",
+ "Plugin Installer": "ਪਲੱਗਇਨ ਇੰਸਟਾਲਰ",
+ "Select the language you want to use. (Requires restarting Applio)": "ਉਹ ਭਾਸ਼ਾ ਚੁਣੋ ਜਿਸਨੂੰ ਤੁਸੀਂ ਵਰਤਣਾ ਚਾਹੁੰਦੇ ਹੋ। (ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਦੁਬਾਰਾ ਸ਼ੁਰੂ ਕਰਨ ਦੀ ਲੋੜ ਹੈ)",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "ਇਹ ਡਿਸਕਾਰਡ ਵਿੱਚ ਮੌਜੂਦਾ ਐਪਲੀਓ ਗਤੀਵਿਧੀ ਨੂੰ ਪ੍ਰਦਰਸ਼ਿਤ ਕਰਨ ਦੀ ਸੰਭਾਵਨਾ ਨੂੰ ਕਿਰਿਆਸ਼ੀਲ ਕਰੇਗਾ।",
+ "Select the theme you want to use. (Requires restarting Applio)": "ਉਹ ਥੀਮ ਚੁਣੋ ਜਿਸਨੂੰ ਤੁਸੀਂ ਵਰਤਣਾ ਚਾਹੁੰਦੇ ਹੋ। (ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਦੁਬਾਰਾ ਸ਼ੁਰੂ ਕਰਨ ਦੀ ਲੋੜ ਹੈ)",
+ "Version Checker": "ਸੰਸਕਰਣ ਚੈਕਰ",
+ "It will activate the possibility of downloading models with a click from the website.": "ਇਹ ਵੈਬਸਾਈਟ ਤੋਂ ਇੱਕ ਕਲਿੱਕ ਨਾਲ ਮਾਡਲਾਂ ਨੂੰ ਡਾਊਨਲੋਡ ਕਰਨ ਦੀ ਸੰਭਾਵਨਾ ਨੂੰ ਕਿਰਿਆਸ਼ੀਲ ਕਰੇਗਾ।",
+ "Select the precision you want to use for training and inference.": "ਉਸ ਸ਼ੁੱਧਤਾ ਦੀ ਚੋਣ ਕਰੋ ਜਿਸਨੂੰ ਤੁਸੀਂ ਸਿਖਲਾਈ ਅਤੇ ਅਨੁਮਾਨ ਲਈ ਵਰਤਣਾ ਚਾਹੁੰਦੇ ਹੋ।",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "ਟ੍ਰੇਨ ਟੈਬ ਨੂੰ ਕਿਰਿਆਸ਼ੀਲ ਕਰਦਾ ਹੈ। ਹਾਲਾਂਕਿ, ਕਿਰਪਾ ਕਰਕੇ ਨੋਟ ਕਰੋ ਕਿ ਇਸ ਡਿਵਾਈਸ ਵਿੱਚ GPU ਸਮਰੱਥਾਵਾਂ ਦੀ ਘਾਟ ਹੈ, ਇਸ ਲਈ ਸਿਖਲਾਈ ਸਮਰਥਿਤ ਨਹੀਂ ਹੈ। ਇਹ ਵਿਕਲਪ ਕੇਵਲ ਟੈਸਟਿੰਗ ਦੇ ਉਦੇਸ਼ਾਂ ਲਈ ਹੈ। (ਇਹ ਵਿਕਲਪ ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਮੁੜ ਚਾਲੂ ਕਰ ਦੇਵੇਗਾ)",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "GPU ਦੀ ਅਣਹੋਂਦ ਕਾਰਨ ਸਿਖਲਾਈ ਵਰਤਮਾਨ ਵਿੱਚ ਅਸਮਰੱਥ ਹੈ। ਸਿਖਲਾਈ ਟੈਬ ਨੂੰ ਕਿਰਿਆਸ਼ੀਲ ਕਰਨ ਲਈ, ਸੈਟਿੰਗਾਂ ਟੈਬ 'ਤੇ ਜਾਓ ਅਤੇ 'ਨਕਲੀ GPU' ਵਿਕਲਪ ਨੂੰ ਸਮਰੱਥ ਕਰੋ।",
+ "Drag your plugin.zip to install it": "ਇਸ ਨੂੰ ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਆਪਣੇ plugin.zip ਨੂੰ ਖਿੱਚੋ",
+ "Post-Process": "ਪੋਸਟ-ਪ੍ਰੋਸੈਸ",
+ "Reverb": "ਰੀਵਰਬ",
+ "Check for updates": "ਅੱਪਡੇਟਾਂ ਵਾਸਤੇ ਜਾਂਚ ਕਰੋ",
+ "Enable fake GPU": "ਨਕਲੀ GPU ਨੂੰ ਸਮਰੱਥ ਕਰੋ",
+ "Apply reverb to the audio.": "ਆਡੀਓ 'ਤੇ ਰੀਵਰਬ ਲਾਗੂ ਕਰੋ।",
+ "Reverb Room Size": "ਰੀਵਰਬ ਕਮਰੇ ਦਾ ਆਕਾਰ",
+ "Post-process the audio to apply effects to the output.": "ਆਉਟਪੁੱਟ 'ਤੇ ਪ੍ਰਭਾਵ ਲਾਗੂ ਕਰਨ ਲਈ ਆਡੀਓ ਨੂੰ ਪੋਸਟ-ਪ੍ਰੋਸੈਸ ਕਰੋ।",
+ "Reverb Damping": "ਰੀਵਰਬ ਡੰਪਿੰਗ",
+ "Reverb Wet Gain": "ਰੀਵਰਬ ਗਿੱਲਾ ਲਾਭ",
+ "Set the room size of the reverb.": "ਰੀਵਰਬ ਦੇ ਕਮਰੇ ਦਾ ਆਕਾਰ ਸੈੱਟ ਕਰੋ।",
+ "Check which version of Applio is the latest to see if you need to update.": "ਇਹ ਦੇਖਣ ਲਈ ਜਾਂਚ ਕਰੋ ਕਿ ਕੀ ਤੁਹਾਨੂੰ ਅੱਪਡੇਟ ਕਰਨ ਦੀ ਲੋੜ ਹੈ, ਐਪਲੀਓ ਦਾ ਕਿਹੜਾ ਸੰਸਕਰਣ ਨਵੀਨਤਮ ਹੈ।",
+ "Reverb Dry Gain": "ਰੀਵਰਬ ਡਰਾਈ ਗੇਨ",
+ "Set the wet gain of the reverb.": "ਰੀਵਰਬ ਦੇ ਗਿੱਲੇ ਲਾਭ ਨੂੰ ਸੈੱਟ ਕਰੋ।",
+ "Set the damping of the reverb.": "ਰੀਵਰਬ ਦੀ ਡੰਪਿੰਗ ਸੈੱਟ ਕਰੋ।",
+ "Reverb Width": "ਰੀਵਰਬ ਚੌੜਾਈ",
+ "Set the width of the reverb.": "ਰੀਵਰਬ ਦੀ ਚੌੜਾਈ ਸੈੱਟ ਕਰੋ।",
+ "Reverb Freeze Mode": "ਰੀਵਰਬ ਫ੍ਰੀਜ਼ ਮੋਡ",
+ "Set the dry gain of the reverb.": "ਰੀਵਰਬ ਦੇ ਸੁੱਕੇ ਲਾਭ ਨੂੰ ਸੈੱਟ ਕਰੋ।",
+ "Set the freeze mode of the reverb.": "ਰੀਵਰਬ ਦਾ ਫ੍ਰੀਜ਼ ਮੋਡ ਸੈੱਟ ਕਰੋ।",
+ "Limiter": "ਲਿਮਿਟਰ",
+ "Set the pitch shift semitones.": "ਪਿਚ ਸ਼ਿਫਟ ਸੈਮੀਟੋਨ ਸੈੱਟ ਕਰੋ।",
+ "Apply pitch shift to the audio.": "ਆਡੀਓ 'ਤੇ ਪਿਚ ਸ਼ਿਫਟ ਲਾਗੂ ਕਰੋ।",
+ "Pitch Shift Semitones": "ਪਿਚ ਸ਼ਿਫਟ ਸੇਮਿਟੋਨ",
+ "Gain": "ਲਾਭ",
+ "Apply limiter to the audio.": "ਆਡੀਓ 'ਤੇ ਲਿਮਿਟਰ ਲਾਗੂ ਕਰੋ।",
+ "Gain dB": "dB ਪ੍ਰਾਪਤ ਕਰੋ",
+ "Distortion": "ਵਿਗਾੜ",
+ "Set the limiter threshold dB.": "ਲਿਮਟਰ ਥ੍ਰੈਸ਼ਹੋਲਡ dB ਸੈੱਟ ਕਰੋ।",
+ "Limiter Threshold dB": "ਲਿਮਿਟਰ ਥ੍ਰੈਸ਼ਹੋਲਡ dB",
+ "Limiter Release Time": "ਲਿਮਿਟਰ ਰਿਲੀਜ਼ ਸਮਾਂ",
+ "Apply gain to the audio.": "ਆਡੀਓ 'ਤੇ ਲਾਭ ਲਾਗੂ ਕਰੋ।",
+ "Set the gain dB.": "ਲਾਭ dB ਸੈੱਟ ਕਰੋ।",
+ "Set the limiter release time.": "ਲਿਮਟਰ ਰਿਲੀਜ਼ ਦਾ ਸਮਾਂ ਸੈੱਟ ਕਰੋ।",
+ "Chorus": "Courus",
+ "Apply distortion to the audio.": "ਆਡੀਓ 'ਤੇ ਵਿਗਾੜ ਲਾਗੂ ਕਰੋ।",
+ "Pitch Shift": "ਪਿਚ ਸ਼ਿਫਟ",
+ "Set the distortion gain.": "ਵਿਗਾੜ ਲਾਭ ਸੈੱਟ ਕਰੋ।",
+ "Apply chorus to the audio.": "ਆਡੀਓ 'ਤੇ ਕੋਰਸ ਲਾਗੂ ਕਰੋ।",
+ "Chorus Rate Hz": "ਕੋਰਸ ਰੇਟ Hz",
+ "Distortion Gain": "ਵਿਗਾੜ ਲਾਭ",
+ "Set the chorus rate Hz.": "ਕੋਰਸ ਰੇਟ Hz ਸੈੱਟ ਕਰੋ।",
+ "Chorus Depth": "ਕੋਰਸ ਦੀ ਡੂੰਘਾਈ",
+ "Chorus Feedback": "ਕੋਰਸ ਫੀਡਬੈਕ",
+ "Chorus Center Delay ms": "ਕੋਰਸ ਸੈਂਟਰ ਦੇਰੀ ਮਿਸ",
+ "Set the chorus depth.": "ਕੋਰਸ ਦੀ ਡੂੰਘਾਈ ਸੈੱਟ ਕਰੋ।",
+ "Bitcrush": "Bitcrush",
+ "Set the chorus feedback.": "ਕੋਰਸ ਫੀਡਬੈਕ ਸੈੱਟ ਕਰੋ।",
+ "Set the chorus center delay ms.": "ਕੋਰਸ ਸੈਂਟਰ ਦੇਰੀ ਸੈੱਟ ਕਰੋ ਮਿਸ।",
+ "Set the chorus mix.": "ਕੋਰਸ ਮਿਸ਼ਰਣ ਸੈੱਟ ਕਰੋ।",
+ "Bitcrush Bit Depth": "Bitcrush ਬਿਟ ਡੂੰਘਾਈ",
+ "Chorus Mix": "ਕੋਰਸ ਮਿਕਸ",
+ "Clipping": "ਕਲਿਪਿੰਗ",
+ "Apply bitcrush to the audio.": "ਆਡੀਓ 'ਤੇ ਬਿਟਕਰਸ਼ ਲਾਗੂ ਕਰੋ।",
+ "Set the bitcrush bit depth.": "ਬਿਟਕਰਸ਼ ਬਿਟ ਡੂੰਘਾਈ ਸੈੱਟ ਕਰੋ।",
+ "Apply clipping to the audio.": "ਆਡੀਓ 'ਤੇ ਕਲਿਪਿੰਗ ਲਾਗੂ ਕਰੋ।",
+ "Compressor": "ਕੰਪ੍ਰੈਸਰ",
+ "Clipping Threshold": "ਕਲਿਪਿੰਗ ਥ੍ਰੈਸ਼ਹੋਲਡ",
+ "Set the clipping threshold.": "ਕਲਿਪਿੰਗ ਥ੍ਰੈਸ਼ਹੋਲਡ ਸੈੱਟ ਕਰੋ।",
+ "Apply compressor to the audio.": "ਆਡੀਓ 'ਤੇ ਕੰਪ੍ਰੈਸਰ ਲਗਾਓ।",
+ "Compressor Threshold dB": "ਕੰਪ੍ਰੈਸਰ ਥ੍ਰੈਸ਼ਹੋਲਡ dB",
+ "Compressor Ratio": "ਕੰਪ੍ਰੈਸਰ ਅਨੁਪਾਤ",
+ "Set the compressor threshold dB.": "ਕੰਪ੍ਰੈਸਰ ਥ੍ਰੈਸ਼ਹੋਲਡ dB ਸੈੱਟ ਕਰੋ।",
+ "Compressor Attack ms": "ਕੰਪ੍ਰੈਸਰ ਅਟੈਕ ਮਿਸ",
+ "Set the compressor ratio.": "ਕੰਪ੍ਰੈਸਰ ਅਨੁਪਾਤ ਸੈੱਟ ਕਰੋ।",
+ "Delay": "ਦੇਰੀ",
+ "Set the compressor attack ms.": "ਕੰਪ੍ਰੈਸਰ ਹਮਲਾ ਮਿਸ ਸੈੱਟ ਕਰੋ।",
+ "Set the compressor release ms.": "ਕੰਪ੍ਰੈਸਰ ਰੀਲੀਜ਼ ਮਿਸ ਸੈੱਟ ਕਰੋ।",
+ "Compressor Release ms": "ਕੰਪ੍ਰੈਸਰ ਰੀਲੀਜ਼ MS",
+ "Delay Seconds": "ਦੇਰੀ ਸਕਿੰਟ",
+ "Apply delay to the audio.": "ਆਡੀਓ 'ਤੇ ਦੇਰੀ ਲਾਗੂ ਕਰੋ।",
+ "Delay Feedback": "ਦੇਰੀ ਫੀਡਬੈਕ",
+ "Set the delay seconds.": "ਦੇਰੀ ਸਕਿੰਟਾਂ ਨੂੰ ਸੈੱਟ ਕਰੋ।",
+ "Delay Mix": "ਦੇਰੀ ਮਿਸ਼ਰਣ",
+ "Set the delay mix.": "ਦੇਰੀ ਮਿਸ਼ਰਣ ਸੈੱਟ ਕਰੋ।",
+ "Custom Embedder": "ਕਸਟਮ ਐਂਬੇਡਰ",
+ "Folder Name": "ਫੋਲਡਰ ਦਾ ਨਾਮ",
+ "Select Custom Embedder": "ਕਸਟਮ ਐਮਬੇਡਰ ਚੁਣੋ",
+ "model information": "ਮਾਡਲ ਜਾਣਕਾਰੀ",
+ "Refresh embedders": "ਤਾਜ਼ਾ ਐਂਬੇਡਰ",
+ "Upload .bin": "ਅੱਪਲੋਡ .bin",
+ "Upload .json": "ਅੱਪਲੋਡ .json",
+ "Model Creator": "ਮਾਡਲ ਨਿਰਮਾਤਾ",
+ "Set the delay feedback.": "ਦੇਰੀ ਫੀਡਬੈਕ ਸੈੱਟ ਕਰੋ।",
+ "Name of the model creator. (Default: Unknown)": "ਮਾਡਲ ਸਿਰਜਣਹਾਰ ਦਾ ਨਾਮ। (ਡਿਫਾਲਟ: ਅਣਜਾਣ)",
+ "Set name": "ਨਾਮ ਸੈੱਟ ਕਰੋ",
+ "Speaker ID": "ਸਪੀਕਰ ID",
+ "Move files to custom embedder folder": "ਫਾਇਲਾਂ ਨੂੰ ਕਸਟਮ ਐਂਬੇਡਰ ਫੋਲਡਰ ਵਿੱਚ ਲਿਜਾਓ",
+ "Select the speaker ID to use for the conversion.": "ਪਰਿਵਰਤਨ ਲਈ ਵਰਤਣ ਲਈ ਸਪੀਕਰ ID ਦੀ ਚੋਣ ਕਰੋ।",
+ "Model Author Name": "ਮਾਡਲ ਲੇਖਕ ਦਾ ਨਾਮ",
+ "The name that will appear in the model information.": "ਉਹ ਨਾਮ ਜੋ ਮਾਡਲ ਜਾਣਕਾਰੀ ਵਿੱਚ ਦਿਖਾਈ ਦੇਵੇਗਾ।",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "ਆਟੋਟਿਊਨ ਤਾਕਤ ਸੈੱਟ ਕਰੋ - ਜਿੰਨਾ ਜ਼ਿਆਦਾ ਤੁਸੀਂ ਇਸ ਨੂੰ ਵਧਾਉਂਦੇ ਹੋ ਓਨਾ ਹੀ ਇਹ ਕ੍ਰੋਮੈਟਿਕ ਗਰਿੱਡ ਨਾਲ ਜੁੜ ਜਾਵੇਗਾ."
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/pl_PL.json b/assets/i18n/languages/pl_PL.json
new file mode 100644
index 0000000000000000000000000000000000000000..3511622b5c17574b039e7a261194a34d51aed77a
--- /dev/null
+++ b/assets/i18n/languages/pl_PL.json
@@ -0,0 +1,325 @@
+{
+ "Training": "Szkolenie",
+ "Processing": "Przetwarzanie",
+ "Extra": "Dodatkowych",
+ "Inference": "Wnioskowanie",
+ "Merge Audios": "Scalanie nagrań audio",
+ "Audio Analyzer": "Analizator dźwięku",
+ "The output information will be displayed here.": "W tym miejscu zostaną wyświetlone informacje wyjściowe.",
+ "Download": "Pobierać",
+ "Output Information": "Informacje wyjściowe",
+ "This section contains some extra utilities that often may be in experimental phases.": "Ta sekcja zawiera kilka dodatkowych narzędzi, które często mogą być w fazie eksperymentalnej.",
+ "Model Information": "Informacje o modelu",
+ "Preprocess": "Proces wstępny",
+ "Plugins": "Wtyczki",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "Proste, wysokiej jakości narzędzie do konwersji głosu skoncentrowane na łatwości obsługi i wydajności.",
+ "Report a Bug": "Zgłoś błąd",
+ "Settings": "Ustawienia",
+ "Audio cutting": "Cięcie dźwięku",
+ "Model Name": "Nazwa modelu",
+ "Process effects": "Efekty procesu",
+ "Dataset Path": "Ścieżka zestawu danych",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "Zaleca się wyłączenie tej opcji, jeśli zestaw danych został już przetworzony.",
+ "Enter model name": "Wprowadź nazwę modelu",
+ "Refresh Datasets": "Odświeżanie zestawów danych",
+ "Dataset Name": "Nazwa zestawu danych",
+ "Name of the new dataset.": "Nazwa nowego zestawu danych.",
+ "Name of the new model.": "Nazwa nowego modelu.",
+ "Dataset Creator": "Twórca zestawu danych",
+ "Upload Audio Dataset": "Przekazywanie zestawu danych audio",
+ "Enter dataset path": "Wprowadź ścieżkę zestawu danych",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Plik audio został pomyślnie dodany do zestawu danych. Kliknij przycisk przetwarzania wstępnego.",
+ "Enter dataset name": "Wprowadź nazwę zestawu danych",
+ "Path to the dataset folder.": "Ścieżka do folderu zestawu danych.",
+ "Sampling Rate": "Częstotliwość próbkowania",
+ "The sampling rate of the audio files.": "Częstotliwość próbkowania plików audio.",
+ "Model Architecture": "Architektura modelu",
+ "Extract": "Ekstrakt",
+ "Preprocess Dataset": "Zestaw danych przetwarzania wstępnego",
+ "Embedder Model": "Model osadzania",
+ "Version of the model architecture.": "Wersja architektury modelu.",
+ "Model used for learning speaker embedding.": "Model używany do nauki osadzania głośników.",
+ "Hop Length": "Długość przeskoku",
+ "Batch Size": "Wielkość partii",
+ "Save Every Epoch": "Ocal każdą epokę",
+ "Pretrained": "Wstępnie przeszkolony",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Określa czas potrzebny systemowi na przejście do znaczącej zmiany wysokości dźwięku. Mniejsze długości przeskoków wymagają więcej czasu na wnioskowanie, ale zwykle zapewniają większą dokładność skoku.",
+ "Total Epoch": "Epoka ogółem",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Wskazane jest dostosowanie go do dostępnej pamięci VRAM karty graficznej. Ustawienie 4 zapewnia lepszą dokładność, ale wolniejsze przetwarzanie, podczas gdy 8 zapewnia szybsze i standardowe wyniki.",
+ "Determine at how many epochs the model will saved at.": "Określ, w ilu epokach model zostanie zapisany.",
+ "Specifies the overall quantity of epochs for the model training process.": "Określa łączną liczbę epok dla procesu trenowania modelu.",
+ "Save Only Latest": "Zapisz tylko najnowsze",
+ "Save Every Weights": "Zaoszczędź każdą wagę",
+ "Custom Pretrained": "Niestandardowy wstępnie trenowany",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "To ustawienie umożliwia zapisanie wag modelu na końcu każdej epoki.",
+ "Upload Pretrained Model": "Przekazywanie wstępnie wytrenowanego modelu",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Włączenie tego ustawienia spowoduje, że pliki G i D będą zapisywać tylko swoje najnowsze wersje, skutecznie oszczędzając miejsce na dysku.",
+ "Refresh Custom Pretraineds": "Odświeżanie niestandardowych wstępnie wytrenowanych",
+ "Pretrained Custom Settings": "Wstępnie zatrenowane ustawienia niestandardowe",
+ "GPU Settings": "Ustawienia GPU",
+ "Pretrained D Path": "Niestandardowy wstępnie wytrenowany D",
+ "The file you dropped is not a valid pretrained file. Please try again.": "Upuszczony plik nie jest prawidłowym wstępnie wytrenowanym plikiem. Spróbuj ponownie.",
+ "Pretrained G Path": "Niestandardowy wstępnie wytrenowany G",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Korzystanie z niestandardowych wstępnie wytrenowanych modeli może prowadzić do lepszych wyników, ponieważ wybór najbardziej odpowiednich wstępnie wytrenowanych modeli dostosowanych do konkretnego przypadku użycia może znacznie zwiększyć wydajność.",
+ "GPU Number": "Numer karty graficznej",
+ "GPU Custom Settings": "Niestandardowe ustawienia GPU",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Ustawia zaawansowane ustawienia GPU, zalecane dla użytkowników z lepszą architekturą GPU.",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Kliknij przycisk odświeżania, aby wyświetlić wstępnie wytrenowany plik w menu rozwijanym.",
+ "0 to ∞ separated by -": "Od 0 do ∞ oddzielone znakiem -",
+ "The GPU information will be displayed here.": "W tym miejscu zostaną wyświetlone informacje o GPU.",
+ "GPU Information": "Informacje o procesorze graficznym",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "Liczba rdzeni procesora CPU do użycia w procesie wstępnym. Ustawieniem domyślnym są rdzenie procesora, co jest zalecane w większości przypadków.",
+ "Use CPU": "Użyj procesora",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Określ liczbę procesorów graficznych, które chcesz wykorzystać do przetwarzania wstępnego, wprowadzając je oddzielając je łącznikami (-). W tej chwili korzystanie z multi-gpu nie będzie miało znaczącego wpływu.",
+ "Pitch Guidance": "Wskazówki dotyczące wysokości dźwięku",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Określ liczbę procesorów graficznych, które chcesz wykorzystać do wyodrębniania, wprowadzając je oddzielone myślnikami (-).",
+ "Force the use of CPU for training.": "Wymuś użycie procesora do trenowania.",
+ "Extract Features": "Wyodrębnij funkcje",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "Liczba rdzeni procesora CPU do użycia w procesie wyodrębniania. Ustawieniem domyślnym są rdzenie procesora, co jest zalecane w większości przypadków.",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Korzystaj ze wstępnie wytrenowanych modeli podczas trenowania własnych. Takie podejście skraca czas trwania szkolenia i poprawia ogólną jakość.",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Priorytetowo traktujemy uruchamianie ekstrakcji modelu na procesorze GPU w celu zwiększenia wydajności. Jeśli wolisz korzystać z procesora, po prostu pozostaw pole GPU puste.",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Stosując wskazówki dotyczące wysokości dźwięku, możliwe staje się odzwierciedlenie intonacji oryginalnego głosu, w tym jego wysokości. Ta funkcja jest szczególnie cenna w przypadku śpiewania i innych scenariuszy, w których niezbędne jest zachowanie oryginalnej melodii lub wzorca wysokości.",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Priorytetowo traktujemy uruchamianie wstępnego przetwarzania modelu na procesorze GPU w celu zwiększenia wydajności. Jeśli wolisz korzystać z procesora, po prostu pozostaw pole GPU puste.",
+ "Cache Dataset in GPU": "Zestaw danych pamięci podręcznej w procesorze GPU",
+ "Cache the dataset in GPU memory to speed up the training process.": "Buforuj zestaw danych w pamięci GPU, aby przyspieszyć proces trenowania.",
+ "Index Algorithm": "Algorytm indeksu",
+ "Overtraining Detector": "Detektor przetrenowania",
+ "Overtraining Detector Settings": "Ustawienia detektora przetrenowania",
+ "Overtraining Threshold": "Próg przetrenowania",
+ "Fresh Training": "Świeże szkolenie",
+ "Start Training": "Rozpocznij szkolenie",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans to algorytm klastrowania, który dzieli zestaw danych na K klastrów. To ustawienie jest szczególnie przydatne w przypadku dużych zestawów danych.",
+ "Stop Training": "Zatrzymaj trening",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Ustaw maksymalną liczbę epok, przez które model ma przestać trenować, jeśli nie zostanie wykryta poprawa.",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "Włącz to ustawienie tylko wtedy, gdy trenujesz nowy model od podstaw lub ponownie uruchamiasz trenowanie. Usuwa wszystkie wcześniej wygenerowane wagi i dzienniki tensorboard.",
+ "Generate Index": "Generowanie indeksu",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Wykrywaj nadmierne trenowanie, aby zapobiec zbyt dobremu uczeniu się danych treningowych przez model i utracie możliwości uogólniania na nowe dane.",
+ "Export Model": "Eksport modelu",
+ "Exported Pth file": "Wyeksportowany plik Pth",
+ "Exported Index file": "Wyeksportowany plik indeksu",
+ "Select the pth file to be exported": "Wybierz plik pth do wyeksportowania",
+ "Upload": "Przesyłać",
+ "Refresh": "Odświeżyć",
+ "Voice Model": "Model głosu",
+ "Select the index file to be exported": "Wybierz plik indeksu, który ma zostać wyeksportowany",
+ "Index File": "Plik indeksu",
+ "Single": "Pojedynczy",
+ "Unload Voice": "Rozładuj głos",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "Przycisk \"Prześlij\" jest przeznaczony tylko dla google colab: Przesyła wyeksportowane pliki do folderu ApplioExported na Dysku Google.",
+ "Select the voice model to use for the conversion.": "Wybierz model głosu, który ma zostać użyty do konwersji.",
+ "Select the index file to use for the conversion.": "Wybierz plik indeksu, który ma zostać użyty do konwersji.",
+ "Upload Audio": "Prześlij dźwięk",
+ "Advanced Settings": "Ustawienia zaawansowane",
+ "Select the audio to convert.": "Wybierz dźwięk do konwersji.",
+ "Select Audio": "Wybierz opcję Audio (Dźwięk)",
+ "Output Path": "Ścieżka wyjściowa",
+ "Custom Output Path": "Niestandardowa ścieżka wyjściowa",
+ "Export Format": "Format eksportu",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Wyczyść wyjścia (usuwa wszystkie pliki audio w zasobach/audio)",
+ "Split Audio": "Podziel dźwięk",
+ "Select the format to export the audio.": "Wybierz format, aby wyeksportować dźwięk.",
+ "Clean Audio": "Czysty dźwięk",
+ "Autotune": "Automatyczne dostrajanie",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "Ścieżka, w której zostanie zapisany dźwięk wyjściowy, domyślnie w assets/audios/output.wav",
+ "Clean Strength": "Czysta siła",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Podziel dźwięk na kawałki w celu wywnioskowania, aby w niektórych przypadkach uzyskać lepsze wyniki.",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Zastosuj miękkie autotune do swoich wniosków, zalecane do konwersji śpiewających.",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Wyczyść wyjście audio za pomocą algorytmów wykrywania szumów, zalecanych do mówienia audio.",
+ "Upscale Audio": "Ekskluzywny dźwięk",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Przeskaluj dźwięk do wyższej jakości, zalecane w przypadku dźwięku o niskiej jakości. (Przetwarzanie dźwięku może potrwać dłużej)",
+ "Formant Shifting": "Przesunięcie formantu",
+ "Pitch": "Rzucać",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Włącz przesuwanie formantu. Używany do konwersji męskiej na żeńską i odwrotnie.",
+ "Quefrency for formant shifting": "Quefrency dla przesunięcia formantu",
+ "Browse presets for formanting": "Przeglądaj ustawienia predefiniowane formowania",
+ "Presets are located in /assets/formant_shift folder": "Ustawienia predefiniowane znajdują się w folderze /assets/formant_shift",
+ "Default value is 1.0": "Wartość domyślna to 1.0",
+ "Timbre for formant shifting": "Barwa do przesuwania formantów",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Ustaw wysokość dźwięku, im wyższa wartość, tym wyższa wysokość.",
+ "Search Feature Ratio": "Współczynnik funkcji wyszukiwania",
+ "Volume Envelope": "Koperta woluminu",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Ustaw poziom czyszczenia na żądany dźwięk, im bardziej go zwiększysz, tym bardziej zostanie oczyszczony, ale możliwe, że dźwięk będzie bardziej skompresowany.",
+ "Filter Radius": "Promień filtra",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Jeśli liczba jest większa lub równa trzech, zastosowanie filtrowania mediany na zebranych wynikach tonów może potencjalnie zmniejszyć oddychanie.",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Wpływ wywierany przez plik indeksu; Wyższa wartość odpowiada większemu wpływowi. Jednak wybranie niższych wartości może pomóc w ograniczeniu artefaktów obecnych w dźwięku.",
+ "Protect Voiceless Consonants": "Chroń spółgłoski bezdźwięczne",
+ "Convert": "Nawrócić",
+ "Batch": "Partia",
+ "Export Audio": "Eksport dźwięku",
+ "Pitch extraction algorithm": "Algorytm ekstrakcji wysokości dźwięku",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Algorytm ekstrakcji wysokości dźwięku do użycia do konwersji dźwięku. Domyślnym algorytmem jest rmvpe, który jest zalecany w większości przypadków.",
+ "Enter input path": "Wprowadź ścieżkę wejściową",
+ "Select the folder containing the audios to convert.": "Wybierz folder zawierający pliki audio do konwersji.",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Chroń wyraźne spółgłoski i dźwięki oddychania, aby zapobiec rozdarciom elektroakustycznym i innym artefaktom. Pociągnięcie parametru do maksymalnej wartości 0,5 zapewnia kompleksową ochronę. Jednak zmniejszenie tej wartości może zmniejszyć zakres ochrony, jednocześnie potencjalnie łagodząc efekt indeksowania.",
+ "Output Folder": "Folder wyjściowy",
+ "Input Folder": "Folder wejściowy",
+ "Enter output path": "Wprowadź ścieżkę wyjściową",
+ "Get information about the audio": "Uzyskiwanie informacji o dźwięku",
+ "## Voice Blender": "## Blender głosowy",
+ "Voice Blender": "Blender głosowy",
+ "Select the folder where the output audios will be saved.": "Wybierz folder, w którym zostaną zapisane wyjściowe pliki audio.",
+ "Drag and drop your model here": "Przeciągnij i upuść swój model tutaj",
+ "You can also use a custom path.": "Możesz również użyć ścieżki niestandardowej.",
+ "Blend Ratio": "Proporcje mieszania",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Wybierz dwa modele brzmienia, ustaw żądany procent mieszania i zmiksuj je w zupełnie nowy głos.",
+ "Fusion": "Fuzja",
+ "Path to Model": "Ścieżka do modelu",
+ "Enter path to model": "Wprowadź ścieżkę do modelu",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Ustawienie pozycji bardziej w jedną lub drugą stronę sprawi, że model będzie bardziej podobny do pierwszego lub drugiego.",
+ "Model information to be placed": "Informacje o modelu, które mają zostać umieszczone",
+ "View model information": "Wyświetlanie informacji o modelu",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Zastąp lub zmieszaj z obwiednią głośności wyjścia. Im bardziej stosunek jest zbliżony do 1, tym bardziej wykorzystywana jest obwiednia wyjściowa.",
+ "Inroduce the model information": "Wprowadź informacje o modelu",
+ "View": "Widok",
+ "Introduce the model pth path": "Wprowadzenie do modelowej ścieżki pth",
+ "The information to be placed in the model (You can leave it blank or put anything).": "Informacje, które mają zostać umieszczone w modelu (możesz pozostawić je puste lub umieścić cokolwiek).",
+ "Model extraction": "Wyodrębnianie modelu",
+ "Model conversion": "Konwersja modelu",
+ "Pth file": "P-ty plik",
+ "Output of the pth file": "Wyjście pliku pth",
+ "Extract F0 Curve": "Wyodrębnij krzywą F0",
+ "Record": "Rekord",
+ "# How to Report an Issue on GitHub": "# Jak zgłosić problem na GitHub",
+ "Introduce the model .pth path": "Wprowadzenie ścieżki pth modelu",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Kliknij przycisk \"Ekran nagrywania\" poniżej, aby rozpocząć nagrywanie napotkanego problemu.",
+ "Stop Recording": "Zatrzymaj nagrywanie",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "Krzywa f0 reprezentuje zmiany częstotliwości bazowej głosu w czasie, pokazując, jak wysokość dźwięku wzrasta i spada.",
+ "Model Link": "Link do modelu",
+ "## Download Model": "## Pobierz model",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Przejdź do [GitHub Issues](https://github.com/IAHispano/Applio/issues) i kliknij przycisk \"Nowe zgłoszenie\".",
+ "Introduce the model link": "Wprowadź link do modelu",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Po zakończeniu nagrywania problemu kliknij przycisk \"Zatrzymaj nagrywanie\" (ten sam przycisk, ale etykieta zmienia się w zależności od tego, czy aktywnie nagrywasz, czy nie).",
+ "See Model Information": "Zobacz informacje o modelu",
+ "Download Model": "Pobierz model",
+ "## Drop files": "## Upuść pliki",
+ "Search": "Szukać",
+ "## Search Model": "## Szukaj modelu",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Przeciągnij plik .pth i plik .index do tego miejsca. Przeciągnij jeden, a potem drugi.",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Wypełnij dostarczony szablon problemu, upewniając się, że w razie potrzeby dołączyłeś szczegóły, a następnie skorzystaj z sekcji zasobów, aby przesłać nagrany plik z poprzedniego kroku.",
+ "Introduce the model name to search.": "Wprowadź nazwę modelu do wyszukiwania.",
+ "We couldn't find models by that name.": "Nie udało nam się znaleźć modeli o tej nazwie.",
+ "## Download Pretrained Models": "## Pobierz wstępnie wytrenowane modele",
+ "And select the sampling rate": "I wybierz częstotliwość próbkowania.",
+ "TTS Voices": "Głosy TTS",
+ "TTS Speed": "Prędkość TTS",
+ "Increase or decrease TTS speed.": "Zwiększ lub zmniejsz prędkość TTS.",
+ "Text to Synthesize": "Tekst do syntezy",
+ "Select the TTS voice to use for the conversion.": "Wybierz głos TTS, który ma być używany do konwersji.",
+ "Enter the text to synthesize.": "Wprowadź tekst do syntezy.",
+ "Upload a .txt file": "Przesyłanie pliku .txt",
+ "Input path for text file": "Ścieżka wejściowa dla pliku tekstowego",
+ "Enter text to synthesize": "Wprowadzanie tekstu do syntezy",
+ "Output Path for TTS Audio": "Ścieżka wyjściowa dla dźwięku TTS",
+ "The path to the text file that contains content for text to speech.": "Ścieżka do pliku tekstowego, który zawiera zawartość funkcji zamiany tekstu na mowę.",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "Aktywuje to możliwość wyświetlania aktualnej aktywności Applio w Discordzie.",
+ "Enable Applio integration with Discord presence": "Włącz integrację Applio z obecnością Discord",
+ "Enable Applio integration with applio.org/models using flask": "Włącz integrację Applio z applio.org/models za pomocą kolby",
+ "Enable fake GPU": "Włącz fałszywy procesor graficzny",
+ "It will activate the possibility of downloading models with a click from the website.": "Aktywuje możliwość pobierania modeli za pomocą kliknięcia ze strony internetowej.",
+ "Select the pretrained model you want to download.": "Wybierz wstępnie wytrenowany model, który chcesz pobrać.",
+ "Output Path for RVC Audio": "Ścieżka wyjściowa dla RVC Audio",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "Trenowanie nie jest obecnie obsługiwane z powodu braku procesora GPU. Aby aktywować zakładkę treningu, przejdź do zakładki ustawień i włącz opcję \"Fałszywy procesor graficzny\".",
+ "Language": "Język",
+ "Record Screen": "Ekran nagrywania",
+ "Restart Applio": "Uruchom ponownie Applio",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Aktywuje zakładkę pociągu. Należy jednak pamiętać, że to urządzenie nie ma możliwości GPU, dlatego szkolenie nie jest obsługiwane. Ta opcja służy tylko do celów testowych. (Ta opcja spowoduje ponowne uruchomienie Applio)",
+ "Theme": "Kompozycja",
+ "Select the theme you want to use. (Requires restarting Applio)": "Wybierz motyw, którego chcesz użyć. (Wymaga ponownego uruchomienia Applio)",
+ "Precision": "Precyzja",
+ "Select the language you want to use. (Requires restarting Applio)": "Wybierz język, którego chcesz używać. (Wymaga ponownego uruchomienia Applio)",
+ "Plugin Installer": "Instalator wtyczek",
+ "Update precision": "Aktualizuj precyzję",
+ "Version Checker": "Sprawdzanie wersji",
+ "Select the precision you want to use for training and inference.": "Wybierz precyzję, której chcesz użyć do trenowania i wnioskowania.",
+ "Drag your plugin.zip to install it": "Przeciągnij plugin.zip, aby go zainstalować",
+ "Check for updates": "Sprawdź dostępność aktualizacji",
+ "Check which version of Applio is the latest to see if you need to update.": "Sprawdź, która wersja Applio jest najnowsza, aby sprawdzić, czy musisz ją zaktualizować.",
+ "Reverb": "Pogłosu",
+ "Post-Process": "Proces końcowy",
+ "Post-process the audio to apply effects to the output.": "Przetwarzaj dźwięk później, aby zastosować efekty do danych wyjściowych.",
+ "Apply reverb to the audio.": "Zastosuj pogłos do dźwięku.",
+ "Reverb Room Size": "Rozmiar pomieszczenia pogłosu",
+ "Set the room size of the reverb.": "Ustaw rozmiar pomieszczenia pogłosu.",
+ "Reverb Damping": "Tłumienie pogłosu",
+ "Set the damping of the reverb.": "Ustaw tłumienie pogłosu.",
+ "Reverb Wet Gain": "Pogłos Mokre wzmocnienie",
+ "Reverb Dry Gain": "Pogłos Suche wzmocnienie",
+ "Set the wet gain of the reverb.": "Ustaw mokre wzmocnienie pogłosu.",
+ "Reverb Width": "Szerokość pogłosu",
+ "Set the width of the reverb.": "Ustaw szerokość pogłosu.",
+ "Set the dry gain of the reverb.": "Ustaw suche wzmocnienie pogłosu.",
+ "Limiter": "Ogranicznik",
+ "Set the freeze mode of the reverb.": "Ustaw tryb zamrażania pogłosu.",
+ "Pitch Shift": "Przesunięcie wysokości dźwięku",
+ "Reverb Freeze Mode": "Tryb zamrożenia pogłosu",
+ "Pitch Shift Semitones": "Półtony przesunięcia wysokości dźwięku",
+ "Set the pitch shift semitones.": "Ustaw półtony przesunięcia wysokości dźwięku.",
+ "Apply pitch shift to the audio.": "Zastosuj przesunięcie wysokości dźwięku do dźwięku.",
+ "Apply limiter to the audio.": "Zastosuj ogranicznik do dźwięku.",
+ "Set the limiter threshold dB.": "Ustaw próg ogranicznika dB.",
+ "Limiter Release Time": "Czas zwolnienia ogranicznika",
+ "Gain": "Korzyść",
+ "Set the limiter release time.": "Ustaw czas zwolnienia ogranicznika.",
+ "Distortion": "Zniekształcenie",
+ "Gain dB": "Wzmocnienie dB",
+ "Apply gain to the audio.": "Zastosuj wzmocnienie do dźwięku.",
+ "Set the gain dB.": "Ustaw wzmocnienie dB.",
+ "Chorus": "Chór",
+ "Limiter Threshold dB": "Próg ogranicznika dB",
+ "Distortion Gain": "Wzmocnienie zniekształceń",
+ "Apply distortion to the audio.": "Zastosuj zniekształcenia do dźwięku.",
+ "Set the distortion gain.": "Ustaw wzmocnienie zniekształceń.",
+ "Apply chorus to the audio.": "Zastosuj chorus do dźwięku.",
+ "Chorus Rate Hz": "Częstotliwość refrenu Hz",
+ "Chorus Depth": "Głębia refrenu",
+ "Chorus Center Delay ms": "Opóźnienie centrum chóru ms",
+ "Set the chorus rate Hz.": "Ustaw częstotliwość refrenu Hz.",
+ "Set the chorus center delay ms.": "Ustawia opóźnienie środka chorusa ms.",
+ "Chorus Mix": "Refren Mix",
+ "Set the chorus depth.": "Ustawianie głębokości refrenu.",
+ "Chorus Feedback": "Sprzężenie zwrotne refrenu",
+ "Bitcrush": "Zmiażdżenie Bita",
+ "Set the chorus feedback.": "Ustaw sprzężenie zwrotne refrenu.",
+ "Set the chorus mix.": "Ustaw miks refrenu.",
+ "Clipping": "Skrawek",
+ "Apply bitcrush to the audio.": "Zastosuj bitcrush do dźwięku.",
+ "Bitcrush Bit Depth": "Głębokość bitu Bitcrush",
+ "Set the bitcrush bit depth.": "Ustaw głębokość bitcrush bit.",
+ "Apply clipping to the audio.": "Zastosuj przycinanie do dźwięku.",
+ "Set the clipping threshold.": "Ustaw próg przycinania.",
+ "Compressor": "Sprężarka",
+ "Clipping Threshold": "Próg przycinania",
+ "Apply compressor to the audio.": "Zastosuj kompresor do dźwięku.",
+ "Compressor Threshold dB": "Próg sprężarki dB",
+ "Compressor Ratio": "Przełożenie sprężarki",
+ "Set the compressor ratio.": "Ustaw przełożenie sprężarki.",
+ "Set the compressor threshold dB.": "Ustaw próg sprężarki dB.",
+ "Compressor Attack ms": "Atak kompresora ms",
+ "Delay": "Zwłoka",
+ "Compressor Release ms": "Zwolnienie sprężarki ms",
+ "Set the compressor attack ms.": "Ustaw atak kompresora ms.",
+ "Set the compressor release ms.": "Ustaw zwolnienie sprężarki ms.",
+ "Apply delay to the audio.": "Zastosuj opóźnienie do dźwięku.",
+ "Delay Seconds": "Sekundy opóźnienia",
+ "Set the delay seconds.": "Ustaw sekundy opóźnienia.",
+ "Delay Feedback": "Informacja zwrotna o opóźnieniu",
+ "Delay Mix": "Opóźniony miks",
+ "Set the delay feedback.": "Ustaw informację zwrotną o opóźnieniu.",
+ "Set the delay mix.": "Ustaw miks opóźnienia.",
+ "Custom Embedder": "Niestandardowy osadzacz",
+ "Folder Name": "Nazwa folderu",
+ "Select Custom Embedder": "Wybierz opcję Niestandardowe osadzanie",
+ "Refresh embedders": "Odświeżanie elementów osadzających",
+ "model information": "Informacje o modelu",
+ "Upload .bin": "Prześlij .bin",
+ "Name of the model creator. (Default: Unknown)": "Imię i nazwisko twórcy modelu. (Domyślnie: nieznany)",
+ "Move files to custom embedder folder": "Przenoszenie plików do niestandardowego folderu osadzania",
+ "Model Creator": "Kreator modeli",
+ "Speaker ID": "Identyfikator głośnika",
+ "Upload .json": "Prześlij .json",
+ "Model Author Name": "Imię i nazwisko autora modelu",
+ "Select the speaker ID to use for the conversion.": "Wybierz identyfikator głośnika, który ma zostać użyty do konwersji.",
+ "The name that will appear in the model information.": "Nazwa, która pojawi się w informacjach o modelu.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "Ustaw siłę autotune'a - im bardziej ją zwiększysz, tym bardziej będzie przyciągana do siatki chromatycznej.",
+ "Set name": "Nazwa zestawu"
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/pt_BR.json b/assets/i18n/languages/pt_BR.json
new file mode 100644
index 0000000000000000000000000000000000000000..cf4b4bf05e8f125c3d582acc58db1ec5a31dc0d7
--- /dev/null
+++ b/assets/i18n/languages/pt_BR.json
@@ -0,0 +1,308 @@
+{
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "Conversão de Voz baseada em VITS focada em simplicidade, qualidade e desempenho.",
+ "This section contains some extra utilities that often may be in experimental phases.": "Esta seção contém algumas utilidades extras que muitas vezes podem estar em fases experimentais.",
+ "Output Information": "Informações de Saída",
+ "The output information will be displayed here.": "As informações de saída serão exibidas aqui.",
+ "Inference": "Inferência",
+ "Train": "Treinar",
+ "Extra": "Extra",
+ "Merge Audios": "Mesclar Áudios",
+ "Processing": "Processando",
+ "Audio Analyzer": "Analisador de Áudio",
+ "Model Information": "Informações do Modelo",
+ "Plugins": "Plugins",
+ "Download": "Baixar",
+ "Report a Bug": "Reportar um Bug",
+ "Settings": "Configurações",
+ "Preprocess": "Pré-processar",
+ "Audio cutting": "Corte de Áudio",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "Recomenda-se desativar esta opção se seu dataset já foi processado.",
+ "Process effects": "Processar efeitos",
+ "Model Name": "Nome do Modelo",
+ "Name of the new model.": "Nome do novo modelo.",
+ "Enter model name": "Digite o nome do modelo",
+ "Dataset Path": "Caminho do dataset",
+ "Path to the dataset folder.": "Caminho para a pasta do dataset.",
+ "Refresh Datasets": "Atualizar datasets",
+ "Dataset Creator": "Criador de dataset",
+ "Dataset Name": "Nome do dataset",
+ "Name of the new dataset.": "Nome do novo dataset.",
+ "Enter dataset name": "Digite o nome do dataset",
+ "Upload Audio Dataset": "Carregar dataset de Áudio",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "O arquivo de áudio foi adicionado com sucesso ao dataset. Por favor, clique no botão de pré-processamento.",
+ "Enter dataset path": "Digite o caminho do dataset",
+ "Sampling Rate": "Sampling Rate",
+ "The sampling rate of the audio files.": "O sampling rate dos arquivos de áudio.",
+ "Model Architecture": "Versão do RVC",
+ "Version of the model architecture.": "A versão do RVC do modelo.",
+ "Preprocess Dataset": "Pré-processar dataset",
+ "Embedder Model": "Modelo de Embedding",
+ "Model used for learning speaker embedding.": "Modelo usado para aprender a incorporação do locutor.",
+ "Extract": "Extrair",
+ "Hop Length": "Hop Length",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Denota a duração que o sistema leva para transitar para uma mudança significativa de tom. Comprimentos de salto menores requerem mais tempo para inferência, mas tendem a proporcionar maior precisão de tom.",
+ "Batch Size": "Tamanho do Lote",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "É aconselhável alinhá-lo com a VRAM disponível da sua GPU. Uma configuração de 4 oferece maior precisão, mas processamento mais lento, enquanto 8 proporciona resultados mais rápidos e padrão.",
+ "Save Every Epoch": "Salvar a Cada Epochs",
+ "Determine at how many epochs the model will saved at.": "Determine em quantas epochs o modelo será salvo.",
+ "Total Epoch": "Total de Epochs",
+ "Specifies the overall quantity of epochs for the model training process.": "Especifica a quantidade total de epochs para o processo de treinamento do modelo.",
+ "Pretrained": "Pré-treino",
+ "Save Only Latest": "Salvar Apenas o Mais Recente",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Ativar esta configuração fará com que os arquivos G e D salvem apenas suas versões mais recentes, economizando espaço de armazenamento.",
+ "Save Every Weights": "Salvar Todos os Arquivos de modelo",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Esta configuração permite salvar os arquivos de modelos ao final de cada epoch.",
+ "Custom Pretrained": "Pré-treino Personalizado",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Utilizar modelos Pré-treino personalizados pode levar a resultados superiores, pois selecionar os modelos Pré-treino mais adequados para o caso específico pode melhorar significativamente o desempenho.",
+ "Upload Pretrained Model": "Carregar Modelo Pré-treino",
+ "Refresh Custom Pretraineds": "Atualizar Pré-treino Personalizados",
+ "Pretrained Custom Settings": "Configurações Personalizadas de Pré-treino",
+ "The file you dropped is not a valid pretrained file. Please try again.": "O arquivo que você soltou não é um arquivo Pré-treino válido. Por favor, tente novamente.",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Clique no botão de atualizar para ver o arquivo Pré-treino no menu suspenso.",
+ "Pretrained G Path": "Caminho do Pré-treino G",
+ "Pretrained D Path": "Caminho do Pré-treino D",
+ "GPU Settings": "Configurações de GPU",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Define configurações avançadas de GPU, recomendadas para usuários com melhor arquitetura de GPU.",
+ "GPU Custom Settings": "Configurações Personalizadas de GPU",
+ "GPU Number": "Número da GPU",
+ "0 to ∞ separated by -": "0 a ∞ separados por -",
+ "The GPU information will be displayed here.": "As informações da GPU serão exibidas aqui.",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Especifique o número de GPUs que você deseja utilizar para pré-processamento, inserindo-os separados por hífens (-). No momento, usar várias GPUs não terá um efeito significativo.",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Especifique o número de GPUs que você deseja utilizar para extração, inserindo-os separados por hífens (-).",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "O número de núcleos de CPU a serem usados no pré-processamento. A configuração padrão são seus núcleos de CPU, o que é recomendado para a maioria dos casos.",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "O número de núcleos de CPU a serem usados no processo de extração. A configuração padrão são seus núcleos de CPU, o que é recomendado para a maioria dos casos.",
+ "GPU Information": "Informações da GPU",
+ "Pitch Guidance": "Orientação de Tom",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Ao empregar a orientação de tom, torna-se viável espelhar a entonação da voz original, incluindo seu tom. Este recurso é particularmente valioso para canto e outros cenários onde preservar a melodia ou padrão de tom original é essencial.",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Utilize modelos Pré-treino ao treinar o seu próprio. Esta abordagem reduz a duração do treinamento e melhora a qualidade geral.",
+ "Extract Features": "Extrair Recursos",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Prioritizamos a execução da extração do modelo na GPU para um desempenho mais rápido. Se você preferir usar a CPU, simplesmente deixe o campo da GPU em branco.",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Prioritizamos a execução do pré-processamento do modelo na GPU para um desempenho mais rápido. Se você preferir usar a CPU, simplesmente deixe o campo da GPU em branco.",
+ "Overtraining Detector": "Detector de Overtrain",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Detecte o Overtrain para evitar que o modelo aprenda os dados de treinamento muito bem e perca a capacidade de generalizar para novos dados.",
+ "Overtraining Detector Settings": "Configurações do Detector de Overtrain",
+ "Overtraining Threshold": "Limite de Overtrain",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Defina o número máximo de épocas que você deseja que seu modelo pare de treinar se nenhuma melhoria for detectada.",
+ "Sync Graph": "Sincronizar Gráfico",
+ "Synchronize the graph of the tensorboard. Only enable this setting if you are training a new model.": "Sincronize o gráfico do tensorboard. Ative esta configuração apenas se você estiver treinando um novo modelo.",
+ "Start Training": "Iniciar Treinamento",
+ "Stop Training": "Parar Treinamento",
+ "Generate Index": "Gerar index",
+ "Export Model": "Exportar Modelo",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "O botão 'Carregar' é apenas para google colab: Carrega os arquivos exportados para a pasta ApplioExported no seu Google Drive.",
+ "Exported Pth file": "Arquivo Pth Exportado",
+ "Exported Index file": "Arquivo de index Exportado",
+ "Select the pth file to be exported": "Selecione o arquivo pth a ser exportado",
+ "Select the index file to be exported": "Selecione o arquivo de index a ser exportado",
+ "Upload": "Carregar",
+ "Voice Model": "Modelo de Voz",
+ "Select the voice model to use for the conversion.": "Selecione o modelo de voz a ser usado para a conversão.",
+ "Index File": "Arquivo de index",
+ "Select the index file to use for the conversion.": "Selecione o arquivo de índice a ser usado para a conversão.",
+ "Refresh": "Atualizar",
+ "Unload Voice": "Descarregar Voz",
+ "Single": "Um arquivo",
+ "Upload Audio": "Carregar Áudio",
+ "Select Audio": "Selecionar Áudio",
+ "Select the audio to convert.": "Selecione o áudio a ser convertido.",
+ "Advanced Settings": "Configurações Avançadas",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Limpar Saídas (Exclui todos os áudios em assets/audios)",
+ "Custom Output Path": "Caminho de Saída Personalizado",
+ "Output Path": "Caminho de Saída",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "O caminho onde o áudio de saída será salvo, por padrão em assets/audios/output.wav",
+ "Split Audio": "Dividir Áudio",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Divida o áudio em partes para inferência para obter melhores resultados em alguns casos.",
+ "Autotune": "Autotune",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Aplique um autotune suave às suas inferências, recomendado para conversões de canto.",
+ "Clean Audio": "Limpar Áudio",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Limpe sua saída de áudio usando algoritmos de detecção de ruído, recomendado para áudios de fala.",
+ "Clean Strength": "Força de Limpeza",
+ "Upscale Audio": "Upscale Áudio",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Aprimore o áudio para uma qualidade superior, recomendado para áudios de baixa qualidade. (Pode demorar mais para processar o áudio)",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Defina o nível de limpeza para o áudio desejado, quanto mais você aumentar, mais ele será limpo, mas é possível que o áudio fique mais comprimido.",
+ "Formant Shifting": "Mudança de Formante",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Ative a mudança de formante. Usado para conversões de masculino para feminino e vice-versa.",
+ "Browse presets for formanting": "Procurar predefinições para formanting",
+ "Presets are located in /assets/formant_shift folder": "As predefinições estão localizadas na pasta /assets/formant_shift",
+ "Default value is 1.0": "O valor padrão é 1.0",
+ "Quefrency for formant shifting": "Quefrência para mudança de formante",
+ "Timbre for formant shifting": "Timbre para mudança de formante",
+ "Pitch": "Pitch",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Defina o Pitch do áudio, quanto maior o valor, mais alto será o Pitch.",
+ "Filter Radius": "Filter Radius",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Se o número for maior ou igual a três, empregar filtragem mediana nos resultados do tom coletado tem o potencial de diminuir a respiração.",
+ "Search Feature Ratio": "Proporção de Recurso de Pesquisa",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Influência exercida pelo arquivo de índice; um valor mais alto corresponde a uma maior influência. No entanto, optar por valores mais baixos pode ajudar a mitigar artefatos presentes no áudio.",
+ "Volume Envelope": "Envelope de Volume",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Substitua ou misture com o envelope de volume da saída. Quanto mais próximo o valor estiver de 1, mais o envelope de saída será empregado.",
+ "Protect Voiceless Consonants": "Proteger Consoantes Surdas",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Proteja consoantes distintas e sons de respiração para evitar rasgos eletroacústicos e outros artefatos. Puxar o parâmetro para seu valor máximo de 0,5 oferece proteção abrangente. No entanto, reduzir esse valor pode diminuir a extensão da proteção, enquanto potencialmente mitiga o efeito de indexação.",
+ "Pitch extraction algorithm": "Algoritmo de extração de Pitch",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Algoritmo de extração de Pitch a ser usado para a conversão de áudio. O algoritmo padrão é rmvpe, que é recomendado para a maioria dos casos.",
+ "Convert": "Converter",
+ "Export Audio": "Exportar Áudio",
+ "Batch": "Varios arquivos",
+ "Input Folder": "Pasta de Entrada",
+ "Select the folder containing the audios to convert.": "Selecione a pasta contendo os áudios a serem convertidos.",
+ "Enter input path": "Digite o caminho de entrada",
+ "Output Folder": "Pasta de Saída",
+ "Select the folder where the output audios will be saved.": "Selecione a pasta onde os áudios de saída serão salvos.",
+ "Enter output path": "Digite o caminho de saída",
+ "Get information about the audio": "Obter informações sobre o áudio",
+ "## Voice Blender": "## Fusão de voz",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Selecione dois modelos de voz, defina a porcentagem de Mix desejada e misture-os em uma nova voz.",
+ "Voice Blender": "Fusão de voz",
+ "Drag and drop your model here": "Arraste e solte seu modelo aqui",
+ "You can also use a custom path.": "Você também pode usar um caminho personalizado.",
+ "Blend Ratio": "Taxa de Fusão",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Ajustar a posição mais para um lado ou para o outro tornará o modelo mais semelhante ao primeiro ou ao segundo.",
+ "Fusion": "Fusão",
+ "Path to Model": "Caminho para o Modelo",
+ "Enter path to model": "Digite o caminho para o modelo",
+ "Model information to be placed": "Informações do modelo a serem colocadas",
+ "Inroduce the model information": "Introduza as informações do modelo",
+ "The information to be placed in the model (You can leave it blank or put anything).": "As informações a serem colocadas no modelo (Você pode deixar em branco ou colocar qualquer coisa).",
+ "View model information": "Ver informações do modelo",
+ "Introduce the model pth path": "Introduza o caminho do modelo pth",
+ "View": "Ver",
+ "Model extraction": "Extração de modelo",
+ "Model conversion": "Conversão de modelo",
+ "Pth file": "Arquivo Pth",
+ "Output of the pth file": "Saída do arquivo pth",
+ "Extract F0 Curve": "Extrair Curva F0",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "A curva f0 representa as variações na frequência base de uma voz ao longo do tempo, mostrando como o tom sobe e desce.",
+ "# How to Report an Issue on GitHub": "# Como Reportar um Problema no GitHub",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Clique no botão 'Gravar Tela' abaixo para começar a gravar o problema que você está enfrentando.",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Uma vez que você tenha terminado de gravar o problema, clique no botão 'Parar Gravação' (o mesmo botão, mas o rótulo muda dependendo se você está gravando ativamente ou não).",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Vá para [GitHub Issues](https://github.com/IAHispano/Applio/issues) e clique no botão 'New Issue'.",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Complete o modelo de problema fornecido, garantindo incluir detalhes conforme necessário, e utilize a seção de ativos para carregar o arquivo gravado na etapa anterior.",
+ "Record Screen": "Gravar Tela",
+ "Record": "Gravar",
+ "Stop Recording": "Parar Gravação",
+ "Introduce the model .pth path": "Introduza o caminho do modelo .pth",
+ "See Model Information": "Ver Informações do Modelo",
+ "## Download Model": "## Baixar Modelo",
+ "Model Link": "Link do Modelo",
+ "Introduce the model link": "Introduza o link do modelo",
+ "Download Model": "Baixar Modelo",
+ "## Drop files": "## Soltar arquivos",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Arraste seu arquivo .pth e arquivo .index para este espaço. Arraste um e depois o outro.",
+ "## Search Model": "## Buscar Modelo",
+ "Search": "Buscar",
+ "Introduce the model name to search.": "Introduza o nome do modelo para buscar.",
+ "We couldn't find models by that name.": "Não conseguimos encontrar modelos com esse nome.",
+ "## Download Pretrained Models": "## Baixar Modelos Pré-treinados",
+ "Select the pretrained model you want to download.": "Selecione o modelo pré-treino que você deseja baixar.",
+ "And select the sampling rate": "E selecione a taxa de amostragem.",
+ "TTS Voices": "Vozes TTS",
+ "TTS Speed": "Velocidade TTS",
+ "Increase or decrease TTS speed.": "Aumentar ou diminuir a velocidade do TTS.",
+ "Select the TTS voice to use for the conversion.": "Selecione a voz TTS a ser usada para a conversão.",
+ "Text to Synthesize": "Texto para Sintetizar",
+ "Enter the text to synthesize.": "Digite o texto para sintetizar.",
+ "Upload a .txt file": "Ou você pode carregar um arquivo .txt",
+ "Enter text to synthesize": "Digite o texto para sintetizar",
+ "Output Path for TTS Audio": "Caminho de Saída para Áudio do TTS",
+ "Output Path for RVC Audio": "Caminho de Saída para Áudio do RVC",
+ "Enable Applio integration with Discord presence": "Ativar integração do Applio com presença no Discord",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "Isso ativará a possibilidade de exibir a atividade atual do Applio no Discord.",
+ "Enable Applio integration with applio.org/models using flask": "Ativar integração do Applio com applio.org/models usando flask",
+ "It will activate the possibility of downloading models with a click from the website.": "Isso ativará a possibilidade de baixar modelos com um clique no site.",
+ "Enable fake GPU": "Ativar GPU falsa",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "O treinamento atualmente não é suportado devido à ausência de uma GPU. Para ativar a aba de treinamento, navegue até a aba de configurações e ative a opção 'GPU Falsa'.",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Ativa a aba de treinamento. No entanto, observe que este dispositivo não possui capacidades de GPU, portanto, o treinamento não é suportado. Esta opção é apenas para fins de teste. (Esta opção reiniciará o Applio)",
+ "Theme": "Tema",
+ "Select the theme you want to use. (Requires restarting Applio)": "Selecione o tema que você deseja usar. (Requer reiniciar o Applio)",
+ "Language": "Idioma",
+ "Select the language you want to use. (Requires restarting Applio)": "Selecione o idioma que você deseja usar. (Requer reiniciar o Applio)",
+ "Precision": "Precisão",
+ "Select the precision you want to use for training and inference.": "Selecione a precisão que você deseja usar para treinamento e inferência.",
+ "Update precision": "Atualizar precisão",
+ "Plugin Installer": "Instalador de Plugin",
+ "Drag your plugin.zip to install it": "Arraste seu plugin.zip para instalá-lo",
+ "Version Checker": "Verificador de Versão",
+ "Check which version of Applio is the latest to see if you need to update.": "Verifique qual versão do Applio é a mais recente para ver se você precisa atualizar.",
+ "Check for updates": "Verificar atualizações",
+ "Post-Process": "Pós-processamento",
+ "Post-process the audio to apply effects to the output.": "Pós-processar o áudio para aplicar efeitos na saída.",
+ "Reverb": "Reverberação",
+ "Apply reverb to the audio.": "Aplicar reverberação ao áudio.",
+ "Reverb Room Size": "Tamanho da Sala de Reverberação",
+ "Set the room size of the reverb.": "Defina o tamanho da sala da reverberação.",
+ "Reverb Damping": "Amortecimento da Reverberação",
+ "Set the damping of the reverb.": "Defina o amortecimento da reverberação.",
+ "Reverb Wet Gain": "Ganho Molhado da Reverberação",
+ "Set the wet gain of the reverb.": "Defina o ganho molhado da reverberação.",
+ "Reverb Dry Gain": "Ganho Seco da Reverberação",
+ "Set the dry gain of the reverb.": "Defina o ganho seco da reverberação.",
+ "Reverb Width": "Largura da Reverberação",
+ "Set the width of the reverb.": "Defina a largura da reverberação.",
+ "Reverb Freeze Mode": "Modo de Congelamento da Reverberação",
+ "Set the freeze mode of the reverb.": "Defina o modo de congelamento da reverberação.",
+ "Pitch Shift": "Mudança de Pitch",
+ "Apply pitch shift to the audio.": "Aplicar mudança de Pitch ao áudio.",
+ "Pitch Shift Semitones": "Semitons de Mudança de Pitch",
+ "Set the pitch shift semitones.": "Defina os semitons de mudança de Pitch.",
+ "Limiter": "Limitador",
+ "Apply limiter to the audio.": "Aplicar limitador ao áudio.",
+ "Limiter Threshold dB": "Limite do Limitador em dB",
+ "Set the limiter threshold dB.": "Defina o limite do limitador em dB.",
+ "Limiter Release Time": "Tempo de Liberação do Limitador",
+ "Set the limiter release time.": "Defina o tempo de liberação do limitador.",
+ "Gain": "Ganho",
+ "Apply gain to the audio.": "Aplicar ganho ao áudio.",
+ "Gain dB": "Ganho dB",
+ "Set the gain dB.": "Defina o ganho em dB.",
+ "Distortion": "Distorção",
+ "Apply distortion to the audio.": "Aplicar distorção ao áudio.",
+ "Distortion Gain": "Ganho de Distorção",
+ "Set the distortion gain.": "Defina o ganho de distorção.",
+ "Chorus": "Chorus",
+ "Apply chorus to the audio.": "Aplicar Chorus ao áudio.",
+ "Chorus Rate Hz": "Taxa de Chorus Hz",
+ "Set the chorus rate Hz.": "Defina a taxa de Chorus em Hz.",
+ "Chorus Depth": "Profundidade do Chorus",
+ "Set the chorus depth.": "Defina a profundidade do Chorus.",
+ "Chorus Center Delay ms": "Delay Central do Chorus ms",
+ "Set the chorus center delay ms.": "Defina o Delay central do Chorus em ms.",
+ "Chorus Feedback": "Feedback do Chorus",
+ "Set the chorus feedback.": "Defina o feedback do Chorus.",
+ "Chorus Mix": "Mix do Chorus",
+ "Set the chorus mix.": "Defina a Mix do Chorus.",
+ "Bitcrush": "Bitcrush",
+ "Apply bitcrush to the audio.": "Aplicar bitcrush ao áudio.",
+ "Bitcrush Bit Depth": "Profundidade de Bits do Bitcrush",
+ "Set the bitcrush bit depth.": "Defina a profundidade de bits do bitcrush.",
+ "Clipping": "Clipping",
+ "Apply clipping to the audio.": "Aplicar clipping ao áudio.",
+ "Clipping Threshold": "Limite de Clipping",
+ "Set the clipping threshold.": "Defina o limite de clipping.",
+ "Compressor": "Compressor",
+ "Apply compressor to the audio.": "Aplicar compressor ao áudio.",
+ "Compressor Threshold dB": "Limite do Compressor em dB",
+ "Set the compressor threshold dB.": "Defina o limite do compressor em dB.",
+ "Compressor Ratio": "Taxa do Compressor",
+ "Set the compressor ratio.": "Defina a taxa do compressor.",
+ "Compressor Attack ms": "Ataque do Compressor ms",
+ "Set the compressor attack ms.": "Defina o ataque do compressor em ms.",
+ "Compressor Release ms": "Liberação do Compressor ms",
+ "Set the compressor release ms.": "Defina a liberação do compressor em ms.",
+ "Delay": "Delay",
+ "Apply delay to the audio.": "Aplicar Delay ao áudio.",
+ "Delay Seconds": "Segundos de Delay",
+ "Set the delay seconds.": "Defina os segundos de Delay.",
+ "Delay Feedback": "Feedback do Delay",
+ "Set the delay feedback.": "Defina o feedback do Delay.",
+ "Delay Mix": "Mix do Delay",
+ "Set the delay mix.": "Defina a Mix do Delay.",
+ "Custom Embedder": "Embedder Personalizado",
+ "Select Custom Embedder": "Selecionar Embedder Personalizado",
+ "Refresh embedders": "Atualizar Embedderes",
+ "Folder Name": "Nome da Pasta",
+ "Upload .bin": "Carregar .bin",
+ "Upload .json": "Carregar .json",
+ "Move files to custom embedder folder": "Mover arquivos para a pasta de Embedder personalizado",
+ "model information": "informações do modelo",
+ "Model Creator": "Criador do Modelo",
+ "Name of the model creator. (Default: Unknown)": "Nome do criador do modelo. (Padrão: Unknown)"
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/pt_PT.json b/assets/i18n/languages/pt_PT.json
new file mode 100644
index 0000000000000000000000000000000000000000..e86257b741593c32745a37dd6a81f091cfa25412
--- /dev/null
+++ b/assets/i18n/languages/pt_PT.json
@@ -0,0 +1,325 @@
+{
+ "Training": "Formação",
+ "Inference": "Inferência",
+ "Processing": "Processamento",
+ "Output Information": "Informações de saída",
+ "Merge Audios": "Mesclar áudios",
+ "The output information will be displayed here.": "As informações de saída serão exibidas aqui.",
+ "Audio Analyzer": "Analisador de áudio",
+ "Download": "Baixar",
+ "Settings": "Configurações",
+ "This section contains some extra utilities that often may be in experimental phases.": "Esta seção contém alguns utilitários extras que geralmente podem estar em fases experimentais.",
+ "Preprocess": "Pré-processar",
+ "Model Information": "Informações do modelo",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "Uma ferramenta de conversão de voz simples e de alta qualidade focada na facilidade de uso e desempenho.",
+ "Report a Bug": "Reportar um bug",
+ "Audio cutting": "Corte de áudio",
+ "Extra": "Extra",
+ "Process effects": "Efeitos do processo",
+ "Model Name": "Nome do modelo",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "É recomendável desativar essa opção se o conjunto de dados já tiver sido processado.",
+ "Enter model name": "Insira o nome do modelo",
+ "Dataset Path": "Caminho do conjunto de dados",
+ "Name of the new model.": "Nome do novo modelo.",
+ "Refresh Datasets": "Atualizar conjuntos de dados",
+ "Path to the dataset folder.": "Caminho para a pasta do conjunto de dados.",
+ "Dataset Name": "Nome do conjunto de dados",
+ "Plugins": "Plugins",
+ "Upload Audio Dataset": "Carregar conjunto de dados de áudio",
+ "Name of the new dataset.": "Nome do novo conjunto de dados.",
+ "Enter dataset name": "Insira o nome do conjunto de dados",
+ "Sampling Rate": "Taxa de amostragem",
+ "Enter dataset path": "Insira o caminho do conjunto de dados",
+ "The sampling rate of the audio files.": "A taxa de amostragem dos arquivos de áudio.",
+ "Model Architecture": "Arquitetura do modelo",
+ "Version of the model architecture.": "Versão da arquitetura do modelo.",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "O arquivo de áudio foi adicionado com êxito ao conjunto de dados. Clique no botão de pré-processamento.",
+ "Extract": "Extrair",
+ "Embedder Model": "Modelo de incorporação",
+ "Dataset Creator": "Criador de conjunto de dados",
+ "Preprocess Dataset": "Conjunto de dados de pré-processamento",
+ "Model used for learning speaker embedding.": "Modelo usado para aprender a incorporação de alto-falantes.",
+ "Hop Length": "Comprimento do salto",
+ "Batch Size": "Tamanho do lote",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Indica a duração que leva para o sistema fazer a transição para uma mudança significativa de tom. Comprimentos de salto menores requerem mais tempo para inferência, mas tendem a produzir maior precisão de afinação.",
+ "Save Every Epoch": "Salve todas as épocas",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "É aconselhável alinhá-lo com a VRAM disponível da sua GPU. Uma configuração de 4 oferece maior precisão, mas processamento mais lento, enquanto 8 fornece resultados mais rápidos e padrão.",
+ "Total Epoch": "Época Total",
+ "Determine at how many epochs the model will saved at.": "Determine em quantas épocas o modelo será salvo.",
+ "Pretrained": "Pré-treinado",
+ "Save Only Latest": "Salvar apenas mais recente",
+ "Specifies the overall quantity of epochs for the model training process.": "Especifica a quantidade geral de épocas para o processo de treinamento do modelo.",
+ "Save Every Weights": "Economize todos os pesos",
+ "Upload Pretrained Model": "Carregar modelo pré-treinado",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Essa configuração permite que você salve os pesos do modelo na conclusão de cada época.",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Habilitar essa configuração fará com que os arquivos G e D salvem apenas suas versões mais recentes, economizando efetivamente o espaço de armazenamento.",
+ "Refresh Custom Pretraineds": "Atualizar pré-treinados personalizados",
+ "Pretrained Custom Settings": "Configurações personalizadas pré-treinadas",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "A utilização de modelos pré-treinados personalizados pode levar a resultados superiores, pois a seleção dos modelos pré-treinados mais adequados e adaptados ao caso de uso específico pode melhorar significativamente o desempenho.",
+ "GPU Settings": "Configurações de GPU",
+ "Pretrained D Path": "D pré-treinado personalizado",
+ "The file you dropped is not a valid pretrained file. Please try again.": "O arquivo que você soltou não é um arquivo pré-treinado válido. Por favor, tente novamente.",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Clique no botão de atualização para ver o arquivo pré-treinado no menu suspenso.",
+ "GPU Custom Settings": "Configurações personalizadas da GPU",
+ "GPU Number": "Número da GPU",
+ "Custom Pretrained": "Pré-treinado personalizado",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Define configurações avançadas de GPU, recomendadas para usuários com melhor arquitetura de GPU.",
+ "0 to ∞ separated by -": "0 a ∞ separados por -",
+ "The GPU information will be displayed here.": "As informações da GPU serão exibidas aqui.",
+ "Pretrained G Path": "G pré-treinado personalizado",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Especifique o número de GPUs que deseja utilizar para o pré-processamento, inserindo-as separadas por hífens (-). No momento, o uso de multi-gpu não terá um efeito significativo.",
+ "GPU Information": "Informações da GPU",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "O número de núcleos de CPU a serem usados no processo de extração. A configuração padrão são os núcleos da CPU, o que é recomendado para a maioria dos casos.",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "O número de núcleos de CPU a serem usados no pré-processamento. A configuração padrão são os núcleos da CPU, o que é recomendado para a maioria dos casos.",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Especifique o número de GPUs que deseja utilizar para extração, inserindo-as separadas por hífens (-).",
+ "Use CPU": "Usar CPU",
+ "Pitch Guidance": "Orientação de Pitch",
+ "Force the use of CPU for training.": "Forçar o uso da CPU para treinamento.",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Ao empregar a orientação de tom, torna-se viável espelhar a entonação da voz original, incluindo seu tom. Esse recurso é particularmente valioso para cantar e outros cenários em que preservar a melodia original ou o padrão de afinação é essencial.",
+ "Extract Features": "Extrair recursos",
+ "Cache Dataset in GPU": "Conjunto de dados de cache na GPU",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Priorizamos a execução do pré-processamento do modelo na GPU para um desempenho mais rápido. Se preferir usar a CPU, basta deixar o campo GPU em branco.",
+ "Index Algorithm": "Algoritmo de índice",
+ "Cache the dataset in GPU memory to speed up the training process.": "Armazene em cache o conjunto de dados na memória da GPU para acelerar o processo de treinamento.",
+ "Overtraining Detector": "Overtraining Detector",
+ "Overtraining Detector Settings": "Configurações do detector de overtraining",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Priorizamos a execução da extração do modelo na GPU para um desempenho mais rápido. Se preferir usar a CPU, basta deixar o campo GPU em branco.",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans é um algoritmo de clustering que divide o conjunto de dados em K clusters. Essa configuração é particularmente útil para grandes conjuntos de dados.",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Detecte o overtraining para evitar que o modelo aprenda os dados de treinamento muito bem e perca a capacidade de generalizar para novos dados.",
+ "Stop Training": "Parar o treinamento",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Defina o número máximo de épocas em que você deseja que seu modelo pare de treinar se nenhuma melhoria for detectada.",
+ "Overtraining Threshold": "Limite de overtraining",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "Ative essa configuração somente se você estiver treinando um novo modelo do zero ou reiniciando o treinamento. Exclui todos os pesos e logs do tensorboard gerados anteriormente.",
+ "Export Model": "Modelo de exportação",
+ "Start Training": "Comece a treinar",
+ "Generate Index": "Gerar índice",
+ "Exported Index file": "Arquivo de índice exportado",
+ "Exported Pth file": "Arquivo Pth exportado",
+ "Fresh Training": "Treinamento novo",
+ "Select the pth file to be exported": "Selecione o arquivo pth a ser exportado",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "O botão 'Upload' é apenas para o google colab: Carrega os arquivos exportados para a pasta ApplioExported em seu Google Drive.",
+ "Upload": "Carregar",
+ "Voice Model": "Modelo de voz",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Utilize modelos pré-treinados ao treinar seus próprios. Essa abordagem reduz a duração do treinamento e melhora a qualidade geral.",
+ "Select the index file to be exported": "Selecione o arquivo de índice a ser exportado",
+ "Select the voice model to use for the conversion.": "Selecione o modelo de voz a ser usado para a conversão.",
+ "Refresh": "Atualizar",
+ "Index File": "Arquivo de índice",
+ "Single": "Único",
+ "Select the index file to use for the conversion.": "Selecione o arquivo de índice a ser usado para a conversão.",
+ "Upload Audio": "Carregar áudio",
+ "Unload Voice": "Descarregar voz",
+ "Select Audio": "Selecione Áudio",
+ "Advanced Settings": "Configurações avançadas",
+ "Select the audio to convert.": "Selecione o áudio a ser convertido.",
+ "Output Path": "Caminho de saída",
+ "Custom Output Path": "Caminho de saída personalizado",
+ "Split Audio": "Dividir áudio",
+ "Export Format": "Formato de exportação",
+ "Autotune": "Autotune",
+ "Select the format to export the audio.": "Selecione o formato para exportar o áudio.",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Limpar saídas (exclui todos os áudios em ativos/áudios)",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Divida o áudio em partes para inferência para obter melhores resultados em alguns casos.",
+ "Clean Audio": "Áudio limpo",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "O caminho onde o áudio de saída será salvo, por padrão em assets/audios/output.wav",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Limpe sua saída de áudio usando algoritmos de detecção de ruído, recomendados para falar áudios.",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Aplique um autotune suave às suas inferências, recomendado para conversões de canto.",
+ "Upscale Audio": "Áudio de alto nível",
+ "Clean Strength": "Força limpa",
+ "Formant Shifting": "Mudança de formantes",
+ "Default value is 1.0": "O valor padrão é 1,0",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Aumente o áudio para uma qualidade superior, recomendado para áudios de baixa qualidade. (Pode levar mais tempo para processar o áudio)",
+ "Quefrency for formant shifting": "Quefrency para mudança de formante",
+ "Presets are located in /assets/formant_shift folder": "As predefinições estão localizadas na pasta /assets/formant_shift",
+ "Pitch": "Campo",
+ "Browse presets for formanting": "Procurar predefinições para formatação",
+ "Timbre for formant shifting": "Timbre para mudança de formante",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Ative a mudança de formante. Usado para conversões de macho para fêmea e vice-versa.",
+ "Filter Radius": "Raio do filtro",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Defina o tom do áudio, quanto maior o valor, maior o tom.",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Defina o nível de limpeza para o áudio desejado, quanto mais você aumentar, mais ele limpará, mas é possível que o áudio fique mais compactado.",
+ "Search Feature Ratio": "Taxa de recursos de pesquisa",
+ "Volume Envelope": "Volume Envelope",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Influência exercida pelo ficheiro de índice; Um valor mais alto corresponde a uma maior influência. No entanto, optar por valores mais baixos pode ajudar a mitigar artefatos presentes no áudio.",
+ "Convert": "Converter",
+ "Protect Voiceless Consonants": "Proteger consoantes surdas",
+ "Pitch extraction algorithm": "Algoritmo de extração de passo",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Substitua ou misture com o envelope de volume da saída. Quanto mais próxima a proporção estiver de 1, mais o envelope de saída será empregado.",
+ "Export Audio": "Exportar áudio",
+ "Batch": "Lote",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Proteja consoantes e sons respiratórios distintos para evitar rasgos eletroacústicos e outros artefatos. Puxar o parâmetro para seu valor máximo de 0,5 oferece proteção abrangente. No entanto, reduzir esse valor pode diminuir a extensão da proteção e, ao mesmo tempo, mitigar potencialmente o efeito de indexação.",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Se o número for maior ou igual a três, empregar a filtragem mediana nos resultados de tom coletados tem o potencial de diminuir a respiração.",
+ "Input Folder": "Pasta de entrada",
+ "Select the folder containing the audios to convert.": "Selecione a pasta que contém os áudios a serem convertidos.",
+ "Enter input path": "Insira o caminho de entrada",
+ "Output Folder": "Pasta de saída",
+ "Select the folder where the output audios will be saved.": "Selecione a pasta onde os áudios de saída serão salvos.",
+ "Enter output path": "Insira o caminho de saída",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Algoritmo de extração de tom a ser usado para a conversão de áudio. O algoritmo padrão é rmvpe, que é recomendado para a maioria dos casos.",
+ "Get information about the audio": "Obter informações sobre o áudio",
+ "## Voice Blender": "## Liquidificador de voz",
+ "Blend Ratio": "Proporção de mistura",
+ "Voice Blender": "Liquidificador de voz",
+ "You can also use a custom path.": "Você também pode usar um caminho personalizado.",
+ "Drag and drop your model here": "Arraste e solte seu modelo aqui",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Selecione dois modelos de voz, defina a porcentagem de mesclagem desejada e misture-os em uma voz totalmente nova.",
+ "Fusion": "Fusão",
+ "Path to Model": "Caminho para o modelo",
+ "Enter path to model": "Insira o caminho para o modelo",
+ "Model information to be placed": "Informações do modelo a serem colocadas",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Ajustar a posição mais para um lado ou para o outro tornará o modelo mais semelhante ao primeiro ou segundo.",
+ "View": "Vista",
+ "Inroduce the model information": "Introduza as informações do modelo",
+ "The information to be placed in the model (You can leave it blank or put anything).": "As informações a serem colocadas no modelo (Você pode deixá-lo em branco ou colocar qualquer coisa).",
+ "Model extraction": "Extração de modelo",
+ "Introduce the model pth path": "Introduzir o caminho pth do modelo",
+ "Pth file": "Arquivo Pth",
+ "Output of the pth file": "Saída do arquivo pth",
+ "View model information": "Exibir informações do modelo",
+ "Model conversion": "Conversão de modelo",
+ "Extract F0 Curve": "Extrair curva F0",
+ "# How to Report an Issue on GitHub": "# Como relatar um problema no GitHub",
+ "Record": "Registro",
+ "Record Screen": "Tela de gravação",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "A curva f0 representa as variações na frequência base de uma voz ao longo do tempo, mostrando como o tom sobe e desce.",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Clique no botão 'Gravar tela' abaixo para começar a registrar o problema que você está enfrentando.",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Vá para [GitHub Issues](https://github.com/IAHispano/Applio/issues) e clique no botão 'Novo problema'.",
+ "Stop Recording": "Parar gravação",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Depois de terminar de gravar o problema, clique no botão 'Parar gravação' (o mesmo botão, mas o rótulo muda dependendo se você está gravando ativamente ou não).",
+ "Model Link": "Link do modelo",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Preencha o modelo de problema fornecido, certificando-se de incluir detalhes conforme necessário, e utilize a seção de ativos para carregar o arquivo gravado da etapa anterior.",
+ "## Download Model": "## Baixar modelo",
+ "Introduce the model link": "Introduzir o link do modelo",
+ "Introduce the model .pth path": "Introduzir o caminho .pth do modelo",
+ "See Model Information": "Veja as informações do modelo",
+ "## Drop files": "## Soltar arquivos",
+ "Download Model": "Baixar modelo",
+ "Search": "Procurar",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Arraste o arquivo .pth e o arquivo .index para este espaço. Arraste um e depois o outro.",
+ "## Search Model": "## Modelo de pesquisa",
+ "Introduce the model name to search.": "Introduza o nome do modelo na pesquisa.",
+ "We couldn't find models by that name.": "Não conseguimos encontrar modelos com esse nome.",
+ "## Download Pretrained Models": "## Baixe modelos pré-treinados",
+ "TTS Voices": "Vozes TTS",
+ "Select the pretrained model you want to download.": "Selecione o modelo pré-treinado que você deseja baixar.",
+ "TTS Speed": "Velocidade TTS",
+ "Text to Synthesize": "Texto para sintetizar",
+ "Select the TTS voice to use for the conversion.": "Selecione a voz TTS a ser usada para a conversão.",
+ "Enter the text to synthesize.": "Insira o texto a ser sintetizado.",
+ "And select the sampling rate": "E selecione a taxa de amostragem.",
+ "Input path for text file": "Caminho de entrada para arquivo de texto",
+ "Upload a .txt file": "Carregar um arquivo .txt",
+ "Increase or decrease TTS speed.": "Aumente ou diminua a velocidade TTS.",
+ "Output Path for TTS Audio": "Caminho de saída para áudio TTS",
+ "Output Path for RVC Audio": "Caminho de saída para áudio RVC",
+ "Enter text to synthesize": "Insira o texto a ser sintetizado",
+ "The path to the text file that contains content for text to speech.": "O caminho para o arquivo de texto que contém conteúdo para conversão de texto em fala.",
+ "Enable fake GPU": "Ativar GPU falsa",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "Ele ativará a possibilidade de exibir a atividade atual do Applio no Discord.",
+ "Enable Applio integration with Discord presence": "Habilite a integração do Applio com a presença do Discord",
+ "Restart Applio": "Reinicie o Applio",
+ "It will activate the possibility of downloading models with a click from the website.": "Ele ativará a possibilidade de baixar modelos com um clique no site.",
+ "Language": "Idioma",
+ "Enable Applio integration with applio.org/models using flask": "Habilitar a integração do Applio com applio.org/models usando o flask",
+ "Precision": "Precisão",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Ativa a guia trem. No entanto, observe que este dispositivo não possui recursos de GPU, portanto, o treinamento não é suportado. Esta opção é apenas para fins de teste. (Esta opção reiniciará o Applio)",
+ "Select the theme you want to use. (Requires restarting Applio)": "Selecione o tema que deseja usar. (Requer reinicialização do Applio)",
+ "Theme": "Tema",
+ "Select the language you want to use. (Requires restarting Applio)": "Selecione o idioma que deseja usar. (Requer reinicialização do Applio)",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "No momento, o treinamento não tem suporte devido à ausência de uma GPU. Para ativar a guia de treinamento, navegue até a guia de configurações e ative a opção 'Fake GPU'.",
+ "Update precision": "Precisão de atualização",
+ "Select the precision you want to use for training and inference.": "Selecione a precisão que você deseja usar para treinamento e inferência.",
+ "Plugin Installer": "Instalador de plug-ins",
+ "Reverb": "Reverb",
+ "Version Checker": "Verificador de versão",
+ "Check for updates": "Verifique se há atualizações",
+ "Post-Process": "Pós-Processamento",
+ "Drag your plugin.zip to install it": "Arraste seu plugin.zip para instalá-lo",
+ "Post-process the audio to apply effects to the output.": "Pós-processe o áudio para aplicar efeitos à saída.",
+ "Check which version of Applio is the latest to see if you need to update.": "Verifique qual versão do Applio é a mais recente para ver se você precisa atualizar.",
+ "Reverb Room Size": "Tamanho da sala de reverberação",
+ "Apply reverb to the audio.": "Aplique reverberação ao áudio.",
+ "Set the room size of the reverb.": "Defina o tamanho da sala do reverb.",
+ "Reverb Damping": "Amortecimento de reverberação",
+ "Set the damping of the reverb.": "Defina o amortecimento do reverb.",
+ "Reverb Wet Gain": "Ganho úmido de reverberação",
+ "Reverb Dry Gain": "Ganho seco de reverberação",
+ "Set the wet gain of the reverb.": "Defina o ganho úmido da reverberação.",
+ "Set the dry gain of the reverb.": "Defina o ganho seco do reverb.",
+ "Reverb Width": "Largura de reverberação",
+ "Reverb Freeze Mode": "Modo de congelamento de reverberação",
+ "Set the width of the reverb.": "Defina a largura do reverb.",
+ "Set the freeze mode of the reverb.": "Defina o modo de congelamento do reverb.",
+ "Limiter": "Limitador",
+ "Pitch Shift": "Mudança de tom",
+ "Pitch Shift Semitones": "Semitons de mudança de tom",
+ "Apply pitch shift to the audio.": "Aplique mudança de tom ao áudio.",
+ "Apply limiter to the audio.": "Aplique limitador ao áudio.",
+ "Set the pitch shift semitones.": "Defina os semitons de mudança de tom.",
+ "Limiter Release Time": "Tempo de liberação do limitador",
+ "Set the limiter threshold dB.": "Defina o limite do limitador dB.",
+ "Gain": "Ganhar",
+ "Set the limiter release time.": "Defina o tempo de liberação do limitador.",
+ "Distortion": "Distorção",
+ "Limiter Threshold dB": "Limite do limitador dB",
+ "Apply gain to the audio.": "Aplique ganho ao áudio.",
+ "Set the gain dB.": "Defina o ganho dB.",
+ "Chorus": "Coro",
+ "Gain dB": "Ganho dB",
+ "Apply distortion to the audio.": "Aplique distorção ao áudio.",
+ "Set the distortion gain.": "Defina o ganho de distorção.",
+ "Distortion Gain": "Ganho de distorção",
+ "Apply chorus to the audio.": "Aplique coro ao áudio.",
+ "Chorus Rate Hz": "Taxa de coro Hz",
+ "Chorus Depth": "Profundidade do refrão",
+ "Set the chorus rate Hz.": "Defina a taxa de coro Hz.",
+ "Set the chorus depth.": "Defina a profundidade do refrão.",
+ "Chorus Center Delay ms": "Chorus Center Delay ms",
+ "Set the chorus center delay ms.": "Defina o atraso do centro do coro ms.",
+ "Chorus Feedback": "Feedback do coro",
+ "Chorus Mix": "Mix de refrão",
+ "Bitcrush": "Esmagamento de bits",
+ "Set the chorus feedback.": "Defina o feedback do refrão.",
+ "Clipping": "Recorte",
+ "Apply bitcrush to the audio.": "Aplique bitcrush ao áudio.",
+ "Set the chorus mix.": "Defina a mixagem do refrão.",
+ "Bitcrush Bit Depth": "Profundidade de bits Bitcrush",
+ "Set the bitcrush bit depth.": "Defina a profundidade de bits de bitcrush.",
+ "Compressor": "Compressor",
+ "Apply clipping to the audio.": "Aplique recorte ao áudio.",
+ "Set the clipping threshold.": "Defina o limite de recorte.",
+ "Clipping Threshold": "Limite de recorte",
+ "Apply compressor to the audio.": "Aplique compressor ao áudio.",
+ "Compressor Threshold dB": "Limiar do compressor dB",
+ "Set the compressor threshold dB.": "Defina o limite do compressor dB.",
+ "Compressor Ratio": "Relação do compressor",
+ "Set the compressor ratio.": "Defina a relação do compressor.",
+ "Compressor Release ms": "Liberação do compressor ms",
+ "Set the compressor release ms.": "Defina a liberação do compressor ms.",
+ "Apply delay to the audio.": "Aplique atraso ao áudio.",
+ "Compressor Attack ms": "Ataque do compressor ms",
+ "Set the compressor attack ms.": "Defina o ataque do compressor ms.",
+ "Delay Seconds": "Segundos de atraso",
+ "Set the delay seconds.": "Defina os segundos de atraso.",
+ "Delay Feedback": "Feedback de atraso",
+ "Delay Mix": "Mistura de atraso",
+ "Custom Embedder": "Incorporador personalizado",
+ "Set the delay mix.": "Defina a mixagem de atraso.",
+ "Set the delay feedback.": "Defina o feedback de atraso.",
+ "Refresh embedders": "Atualizar incorporadores",
+ "Select Custom Embedder": "Selecione Incorporador personalizado",
+ "Folder Name": "Nome da pasta",
+ "Upload .bin": "Carregar .bin",
+ "Model Creator": "Criador de modelos",
+ "model information": "Informações do modelo",
+ "Move files to custom embedder folder": "Mover arquivos para a pasta de incorporação personalizada",
+ "Upload .json": "Carregar .json",
+ "Speaker ID": "ID do alto-falante",
+ "Name of the model creator. (Default: Unknown)": "Nome do criador do modelo. (Padrão: Desconhecido)",
+ "Select the speaker ID to use for the conversion.": "Selecione o ID do alto-falante a ser usado para a conversão.",
+ "Set name": "Nome do conjunto",
+ "Model Author Name": "Nome do autor do modelo",
+ "The name that will appear in the model information.": "O nome que aparecerá nas informações do modelo.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "Defina a força do autotune - quanto mais você aumentar, mais ele se encaixará na grade cromática.",
+ "Delay": "Atraso"
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/ro_RO.json b/assets/i18n/languages/ro_RO.json
new file mode 100644
index 0000000000000000000000000000000000000000..6cb19b7ec0ebeae8b224085192038dc320658390
--- /dev/null
+++ b/assets/i18n/languages/ro_RO.json
@@ -0,0 +1,175 @@
+{
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "Cel mai bun instrument de clonare a vocii, optimizat meticulos pentru putere, modularitate și experiență ușor de utilizat.",
+ "This section contains some extra utilities that often may be in experimental phases.": "Această secțiune conține câteva utilități suplimentare care pot fi adesea în faze experimentale.",
+ "Output Information": "Informații despre ieșire",
+ "The output information will be displayed here.": "Informațiile de ieșire vor fi afișate aici.",
+ "Inference": "Deducţie",
+ "Train": "Tren",
+ "Extra": "Superfluu",
+ "Merge Audios": "Îmbinare audio",
+ "Processing": "Prelucrare",
+ "Audio Analyzer": "Analizor audio",
+ "Model Information": "Informații despre model",
+ "Plugins": "Plugin-uri",
+ "Download": "Descărca",
+ "Report a Bug": "Raportați o eroare",
+ "Settings": "Setări",
+ "Preprocess": "Preproces",
+ "Model Name": "Numele modelului",
+ "Name of the new model.": "Numele noului model.",
+ "Enter model name": "Introduceți numele modelului",
+ "Dataset Path": "Calea setului de date",
+ "Path to the dataset folder.": "Calea către folderul setului de date.",
+ "Refresh Datasets": "Reîmprospătarea seturilor de date",
+ "Dataset Creator": "Creator de seturi de date",
+ "Dataset Name": "Numele setului de date",
+ "Name of the new dataset.": "Numele noului set de date.",
+ "Enter dataset name": "Introduceți numele setului de date",
+ "Upload Audio Dataset": "Încărcați setul de date audio",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Fișierul audio a fost adăugat cu succes la setul de date. Vă rugăm să faceți clic pe butonul de preprocesare.",
+ "Enter dataset path": "Introduceți calea setului de date",
+ "Sampling Rate": "Rata de eșantionare",
+ "The sampling rate of the audio files.": "Rata de eșantionare a fișierelor audio.",
+ "Model Architecture": "Versiunea RVC",
+ "Version of the model architecture.": "Versiunea RVC a modelului.",
+ "Preprocess Dataset": "Set de date preproces",
+ "Extract": "Extract",
+ "Hop Length": "Lungimea hameiului",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Denotă durata necesară pentru ca sistemul să treacă la o schimbare semnificativă a înălțimii. Lungimile mai mici ale hameiului necesită mai mult timp pentru inferență, dar tind să producă o precizie mai mare a pasului.",
+ "Batch Size": "Mărimea lotului",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Este recomandabil să îl aliniați cu VRAM disponibil al GPU-ului. O setare de 4 oferă o precizie îmbunătățită, dar o procesare mai lentă, în timp ce 8 oferă rezultate mai rapide și standard.",
+ "Save Every Epoch": "Salvați fiecare epocă",
+ "Determine at how many epochs the model will saved at.": "Determinați la câte epoci va fi salvat modelul.",
+ "Total Epoch": "Epoca totală",
+ "Specifies the overall quantity of epochs for the model training process.": "Specifică numărul total de epoci pentru procesul de instruire a modelului.",
+ "Pretrained": "Preinstruit",
+ "Save Only Latest": "Salvați numai cele mai recente",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Activarea acestei setări va avea ca rezultat salvarea fișierelor G și D numai a celor mai recente versiuni, economisind în mod eficient spațiul de stocare.",
+ "Save Every Weights": "Economisiți fiecare greutate",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Această setare vă permite să economisiți greutățile modelului la sfârșitul fiecărei epoci.",
+ "Custom Pretrained": "Personalizat Pretrained",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Utilizarea modelelor personalizate pre-antrenate poate duce la rezultate superioare, deoarece selectarea celor mai potrivite modele pre-antrenate adaptate cazului de utilizare specific poate îmbunătăți semnificativ performanța.",
+ "Upload Pretrained Model": "Încărcați modelul preinstruit",
+ "Refresh Custom Pretraineds": "Reîmprospătați preinstruiții personalizați",
+ "Pretrained Custom Settings": "Setări personalizate pre-instruite",
+ "The file you dropped is not a valid pretrained file. Please try again.": "Fișierul pe care l-ați scăpat nu este un fișier preinstruit valid. Vă rugăm să încercați din nou.",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Faceți clic pe butonul de reîmprospătare pentru a vedea fișierul preantrenat în meniul derulant.",
+ "Pretrained G Path": "G personalizat preantrenat",
+ "Pretrained D Path": "Personalizat Pretrained D",
+ "GPU Settings": "Setări GPU",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Setează setări GPU avansate, recomandate utilizatorilor cu o arhitectură GPU mai bună.",
+ "GPU Custom Settings": "Setări personalizate GPU",
+ "GPU Number": "Număr GPU",
+ "0 to ∞ separated by -": "0 până la ∞ separate de -",
+ "GPU Information": "Informații GPU",
+ "Pitch Guidance": "Pitch Guidance",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Prin utilizarea ghidării tonului, devine fezabilă oglindirea intonației vocii originale, inclusiv a înălțimii acesteia. Această caracteristică este deosebit de valoroasă pentru cântat și alte scenarii în care păstrarea melodiei originale sau a modelului de înălțime este esențială.",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Utilizați modele pre-antrenate atunci când vă antrenați propriul. Această abordare reduce durata antrenamentului și îmbunătățește calitatea generală.",
+ "Extract Features": "Extrageți caracteristicile",
+ "Start Training": "Începeți instruirea",
+ "Generate Index": "Generare index",
+ "Voice Model": "Model vocal",
+ "Select the voice model to use for the conversion.": "Selectați modelul vocal de utilizat pentru conversie.",
+ "Index File": "Fișier index",
+ "Select the index file to use for the conversion.": "Selectați fișierul index de utilizat pentru conversie.",
+ "Refresh": "Împrospăta",
+ "Unload Voice": "Descărcare voce",
+ "Single": "Singur",
+ "Upload Audio": "Încărcare audio",
+ "Select Audio": "Selectați Audio",
+ "Select the audio to convert.": "Selectați sunetul de convertit.",
+ "Advanced Settings": "Setări avansate",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Ștergeți ieșirile (Șterge toate audio-urile din active / audio)",
+ "Custom Output Path": "Cale de ieșire personalizată",
+ "Output Path": "Cale de ieșire",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "Calea în care va fi salvat sunetul de ieșire, în mod implicit în active / audio / output.wav",
+ "Split Audio": "Împărțire audio",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Împărțiți sunetul în bucăți pentru inferență pentru a obține rezultate mai bune în unele cazuri.",
+ "Autotune": "Reglare automată",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Aplicați o reglare automată ușoară la inferențele dvs., recomandată pentru conversiile de cântat.",
+ "Clean Audio": "Sunet curat",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Curățați ieșirea audio utilizând algoritmi de detectare a zgomotului, recomandați pentru enunțarea sunetului.",
+ "Clean Strength": "Rezistență curată",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Setați nivelul de curățare la sunetul dorit, cu cât îl măriți mai mult, cu atât se va curăța mai mult, dar este posibil ca sunetul să fie mai comprimat.",
+ "Pitch": "Smoală",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Setați înălțimea sunetului, cu cât este mai mare valoarea, cu atât este mai mare înălțimea.",
+ "Filter Radius": "Raza filtrului",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Dacă numărul este mai mare sau egal cu trei, utilizarea filtrării mediane pe rezultatele tonului colectat are potențialul de a scădea respirația.",
+ "Search Feature Ratio": "Raportul caracteristicilor de căutare",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Influența exercitată de fișierul index; O valoare mai mare corespunde unei influențe mai mari. Cu toate acestea, optarea pentru valori mai mici poate ajuta la atenuarea artefactelor prezente în audio.",
+ "Volume Envelope": "Plic de volum",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Înlocuiți sau amestecați cu plicul de volum al ieșirii. Cu cât raportul este mai apropiat de 1, cu atât este folosit mai mult plicul de ieșire.",
+ "Protect Voiceless Consonants": "Protejați consoanele fără voce",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Protejați consoanele distincte și sunetele de respirație pentru a preveni ruperea electro-acustică și alte artefacte. Tragerea parametrului la valoarea maximă de 0,5 oferă o protecție completă. Cu toate acestea, reducerea acestei valori ar putea reduce gradul de protecție, atenuând în același timp efectul de indexare.",
+ "Pitch extraction algorithm": "Algoritm de extracție a pitch-ului",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Algoritm de extragere a pitch-ului de utilizat pentru conversia audio. Algoritmul implicit este rmvpe, care este recomandat în majoritatea cazurilor.",
+ "Convert": "Converti",
+ "Export Audio": "Exportați audio",
+ "Batch": "Lot",
+ "Input Folder": "Folder de intrare",
+ "Select the folder containing the audios to convert.": "Selectați folderul care conține audio-urile de convertit.",
+ "Enter input path": "Introduceți calea de intrare",
+ "Output Folder": "Dosar de ieșire",
+ "Select the folder where the output audios will be saved.": "Selectați folderul în care vor fi salvate audio-urile de ieșire.",
+ "Enter output path": "Introduceți calea de ieșire",
+ "Get information about the audio": "Obțineți informații despre audio",
+ "Information about the audio file": "Informații despre fișierul audio",
+ "Waiting for information...": "În așteptarea informațiilor...",
+ "## Voice Blender": "## Blender de voce",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Selectați două modele de voce, setați procentajul de amestec dorit și amestecați-le într-o voce complet nouă.",
+ "Voice Blender": "Blender de voce",
+ "Drag and drop your model here": "Glisați și fixați modelul aici",
+ "You can also use a custom path.": "De asemenea, puteți utiliza un traseu personalizat.",
+ "Blend Ratio": "Raport de amestecare",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Ajustarea poziției mai mult spre o parte sau alta va face modelul mai asemănător cu primul sau al doilea.",
+ "Fusion": "Fuziune",
+ "Path to Model": "Calea către model",
+ "Enter path to model": "Introduceți calea către model",
+ "Model information to be placed": "Informații despre model care trebuie plasate",
+ "Inroduce the model information": "Inroduceți informațiile despre model",
+ "The information to be placed in the model (You can leave it blank or put anything).": "Informațiile care trebuie plasate în model (Puteți să-l lăsați necompletat sau să puneți orice).",
+ "View model information": "Vizualizarea informațiilor despre model",
+ "Introduce the model pth path": "Introduceți calea pth a modelului",
+ "View": "Vedere",
+ "Model extraction": "Extragerea modelului",
+ "Model conversion": "Conversia modelului",
+ "Pth file": "Fișier Pth",
+ "Output of the pth file": "Ieșirea fișierului pth",
+ "# How to Report an Issue on GitHub": "# Cum să raportați o problemă pe GitHub",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Faceți clic pe butonul \"Ecran de înregistrare\" de mai jos pentru a începe înregistrarea problemei pe care o întâmpinați.",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. După ce ați terminat de înregistrat problema, faceți clic pe butonul \"Opriți înregistrarea\" (același buton, dar eticheta se schimbă în funcție de înregistrarea activă sau nu).",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Accesați [Probleme GitHub] (https://github.com/IAHispano/Applio/issues) și faceți clic pe butonul \"Problemă nouă\".",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Completați șablonul de problemă furnizat, asigurându-vă că includeți detalii după cum este necesar și utilizați secțiunea active pentru a încărca fișierul înregistrat din pasul anterior.",
+ "Record Screen": "Ecran de înregistrare",
+ "Record": "Disc",
+ "Stop Recording": "Opriți înregistrarea",
+ "Introduce the model .pth path": "Introducerea căii .pth a modelului",
+ "See Model Information": "Consultați informațiile despre model",
+ "## Download Model": "## Descărcați modelul",
+ "Model Link": "Model Link",
+ "Introduce the model link": "Introduceți linkul modelului",
+ "Download Model": "Descărcați modelul",
+ "## Drop files": "## Aruncați fișiere",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Glisați fișierul .pth și fișierul .index în acest spațiu. Trageți unul și apoi celălalt.",
+ "TTS Voices": "Voci TTS",
+ "Select the TTS voice to use for the conversion.": "Selectați vocea TTS de utilizat pentru conversie.",
+ "Text to Synthesize": "Text pentru sintetizare",
+ "Enter the text to synthesize.": "Introduceți textul pentru a sintetiza.",
+ "Upload a .txt file": "Sau puteți încărca un fișier .txt",
+ "Enter text to synthesize": "Introduceți text pentru sintetizare",
+ "Output Path for TTS Audio": "Cale de ieșire pentru TTS Audio",
+ "Output Path for RVC Audio": "Cale de ieșire pentru RVC Audio",
+ "Enable Applio integration with Discord presence": "Activați integrarea Applio cu prezența Discord",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "Acesta va activa posibilitatea afișării activității curente Applio în Discord.",
+ "Enable Applio integration with applio.org/models using flask": "Activați integrarea Applio cu applio.org/models folosind balonul",
+ "It will activate the possibility of downloading models with a click from the website.": "Acesta va activa posibilitatea de a descărca modele cu un clic de pe site.",
+ "Theme": "Temă",
+ "Select the theme you want to use. (Requires restarting Applio)": "Selectați tema pe care doriți să o utilizați. (Necesită repornirea Applio)",
+ "Language": "Limbă",
+ "Select the language you want to use. (Requires restarting Applio)": "Selectați limba pe care doriți să o utilizați. (Necesită repornirea Applio)",
+ "Plugin Installer": "Instalator de plugin-uri",
+ "Drag your plugin.zip to install it": "Trageți plugin.zip pentru a-l instala",
+ "Version Checker": "Verificator de versiuni",
+ "Check which version of Applio is the latest to see if you need to update.": "Verificați ce versiune de Applio este cea mai recentă pentru a vedea dacă trebuie să actualizați.",
+ "Check for updates": "Căutați actualizări"
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/ru_RU.json b/assets/i18n/languages/ru_RU.json
new file mode 100644
index 0000000000000000000000000000000000000000..f9b31bf35f49a7934aaea9385a381b154ab43271
--- /dev/null
+++ b/assets/i18n/languages/ru_RU.json
@@ -0,0 +1,325 @@
+{
+ "Training": "Обучение",
+ "Processing": "Обработка",
+ "Inference": "Вывод",
+ "Extra": "Дополнительно",
+ "Model Information": "Информация о модели",
+ "Download": "Скачать",
+ "Plugins": "Плагины",
+ "Settings": "Настройки",
+ "Output Information": "Выходная информация",
+ "Audio Analyzer": "Анализатор аудио",
+ "Merge Audios": "Объединить аудио",
+ "Preprocess": "Предварительная обработка",
+ "Report a Bug": "Сообщить об ошибке",
+ "The output information will be displayed here.": "Здесь будет отображаться выходная информация.",
+ "Audio cutting": "Нарезка аудио",
+ "Process effects": "Эффекты обработки",
+ "Model Name": "Название модели",
+ "Name of the new model.": "Название новой модели.",
+ "Dataset Path": "Путь к датасету",
+ "Dataset Name": "Название датасета",
+ "Refresh Datasets": "Обновить датасеты",
+ "Dataset Creator": "Создатель датасета",
+ "Enter model name": "Введите название модели",
+ "This section contains some extra utilities that often may be in experimental phases.": "В этом разделе содержатся некоторые дополнительные утилиты, которые часто могут находиться на экспериментальной стадии.",
+ "Path to the dataset folder.": "Путь к папке с датасетом.",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "Рекомендуется отключить эту опцию, если ваш датасет уже был обработан.",
+ "Name of the new dataset.": "Название нового датасета.",
+ "Upload Audio Dataset": "Загрузить аудио датасет",
+ "Enter dataset path": "Введите путь к датасету",
+ "Enter dataset name": "Введите название датасета",
+ "Extract": "Извлечь",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "Простой, высококачественный инструмент для преобразования голоса, ориентированный на простоту использования и производительность.",
+ "Sampling Rate": "Частота дискретизации",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Аудиофайл успешно добавлен в датасет. Пожалуйста, нажмите кнопку предварительной обработки.",
+ "Version of the model architecture.": "Версия архитектуры модели.",
+ "Hop Length": "Длина шага",
+ "Model Architecture": "Архитектура модели",
+ "The sampling rate of the audio files.": "Частота дискретизации аудиофайлов.",
+ "Batch Size": "Размер пакета",
+ "Embedder Model": "Модель встраивания",
+ "Preprocess Dataset": "Предварительная обработка датасета",
+ "Total Epoch": "Общее количество эпох",
+ "Save Every Epoch": "Сохранять каждую эпоху",
+ "Model used for learning speaker embedding.": "Модель, используемая для обучения встраиванию говорящего.",
+ "Save Only Latest": "Сохранять только последнюю",
+ "Determine at how many epochs the model will saved at.": "Определите, через сколько эпох будет сохраняться модель.",
+ "Pretrained": "Предварительно обученный",
+ "Save Every Weights": "Сохранять каждый вес",
+ "Upload Pretrained Model": "Загрузить предварительно обученную модель",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Обозначает время, необходимое для перехода системы к значительному изменению высоты тона. Меньшая длина шага требует больше времени для вывода, но, как правило, обеспечивает более высокую точность высоты тона.",
+ "Specifies the overall quantity of epochs for the model training process.": "Указывает общее количество эпох для процесса обучения модели.",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Этот параметр позволяет сохранять веса модели в конце каждой эпохи.",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Рекомендуется выровнять его с доступной видеопамятью вашего графического процессора. Значение 4 обеспечивает повышенную точность, но более медленную обработку, в то время как значение 8 обеспечивает более быстрые и стандартные результаты.",
+ "Refresh Custom Pretraineds": "Обновить пользовательские предварительно обученные модели",
+ "GPU Settings": "Настройки GPU",
+ "Pretrained Custom Settings": "Пользовательские настройки предварительного обучения",
+ "Pretrained G Path": "Путь к предварительно обученной модели G",
+ "Pretrained D Path": "Путь к предварительно обученной модели D",
+ "0 to ∞ separated by -": "от 0 до ∞ через -",
+ "The file you dropped is not a valid pretrained file. Please try again.": "Удаленный файл не является допустимым предварительно обученным файлом. Пожалуйста, повторите попытку.",
+ "GPU Number": "Номер GPU",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Включение этого параметра приведет к тому, что файлы G и D будут сохранять только самые последние версии, что эффективно экономит место на диске.",
+ "The GPU information will be displayed here.": "Здесь будет отображаться информация о GPU.",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Нажмите кнопку обновления, чтобы увидеть предварительно обученный файл в раскрывающемся меню.",
+ "Pitch Guidance": "Управление высотой тона",
+ "Use CPU": "Использовать CPU",
+ "GPU Custom Settings": "Пользовательские настройки GPU",
+ "GPU Information": "Информация о GPU",
+ "Custom Pretrained": "Пользовательский предварительно обученный",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "Количество ядер CPU, используемых в препроцессинге. По умолчанию выбраны ядра CPU, что рекомендуется в большинстве случаев.",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Устанавливает расширенные настройки GPU, рекомендуется для пользователей с лучшей архитектурой GPU.",
+ "Force the use of CPU for training.": "Принудительно использовать CPU для обучения.",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "Количество ядер CPU, используемых в процессе извлечения. По умолчанию выбраны ядра CPU, что рекомендуется в большинстве случаев.",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Укажите количество GPU, которое вы хотите использовать для извлечения, введя их через дефисы (-).",
+ "Extract Features": "Извлечь признаки",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Использование пользовательских предварительно обученных моделей может привести к превосходным результатам, так как выбор наиболее подходящих предварительно обученных моделей, адаптированных к конкретному сценарию использования, может значительно повысить производительность.",
+ "Index Algorithm": "Алгоритм индексации",
+ "Overtraining Detector": "Детектор переобучения",
+ "Cache Dataset in GPU": "Кэшировать датасет в GPU",
+ "Fresh Training": "Свежее обучение",
+ "Cache the dataset in GPU memory to speed up the training process.": "Кэшируйте датасет в памяти GPU, чтобы ускорить процесс обучения.",
+ "Overtraining Threshold": "Порог переобучения",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Используйте предварительно обученные модели при обучении собственных. Такой подход сокращает продолжительность обучения и повышает общее качество.",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans — это алгоритм кластеризации, который делит датасет на K кластеров. Этот параметр особенно полезен для больших датасетов.",
+ "Overtraining Detector Settings": "Настройки детектора переобучения",
+ "Start Training": "Начать обучение",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Мы отдаем приоритет выполнению извлечения модели на GPU для повышения производительности. Если вы предпочитаете использовать CPU, просто оставьте поле GPU пустым.",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Используя управление высотой тона, становится возможным зеркально отразить интонацию исходного голоса, включая его высоту. Эта функция особенно ценна для пения и других сценариев, где важно сохранить исходную мелодию или рисунок высоты тона.",
+ "Generate Index": "Сгенерировать индекс",
+ "Upload": "Загрузить",
+ "Stop Training": "Остановить обучение",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Обнаружение переобучения, чтобы модель не слишком хорошо усвоила обучающие данные и не потеряла возможность обобщения на новые данные.",
+ "Export Model": "Экспортировать модель",
+ "Exported Pth file": "Экспортированный файл Pth",
+ "Select the pth file to be exported": "Выберите pth файл для экспорта",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Мы отдаем приоритет выполнению предварительной обработки модели на GPU для повышения производительности. Если вы предпочитаете использовать CPU, просто оставьте поле GPU пустым.",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Задайте максимальное количество эпох, на которое модель должна прекратить обучение, если не будет обнаружено улучшений.",
+ "Exported Index file": "Экспортированный файл индекса",
+ "Select the index file to be exported": "Выберите индексный файл для экспорта",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Укажите количество GPU, которое вы хотите использовать для предварительной обработки, введя их через дефисы (-). На данный момент использование мульти-GPU не окажет существенного эффекта.",
+ "Refresh": "Обновить",
+ "Single": "Одиночный",
+ "Voice Model": "Голосовая модель",
+ "Index File": "Файл индекса",
+ "Select Audio": "Выбрать аудио",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "Включайте этот параметр только в том случае, если вы обучаете новую модель с нуля или перезапускаете обучение. Удаляет все ранее сгенерированные веса и журналы TensorBoard.",
+ "Upload Audio": "Загрузить аудио",
+ "Advanced Settings": "Расширенные настройки",
+ "Unload Voice": "Выгрузить голос",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "Кнопка «Загрузить» предназначена только для Google Colab: Загружает экспортированные файлы в папку ApplioExported на вашем Google Диске.",
+ "Select the audio to convert.": "Выберите аудио для преобразования.",
+ "Select the index file to use for the conversion.": "Выберите файл индекса, который будет использоваться для преобразования.",
+ "Select the voice model to use for the conversion.": "Выберите голосовую модель, которая будет использоваться для преобразования.",
+ "Output Path": "Путь вывода",
+ "Export Format": "Формат экспорта",
+ "Custom Output Path": "Пользовательский путь вывода",
+ "Select the format to export the audio.": "Выберите формат для экспорта аудио.",
+ "Split Audio": "Разделить аудио",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Очистить выходы (Удаляет все аудио в assets/audios)",
+ "Clean Audio": "Очистить аудио",
+ "Autotune": "Автотюн",
+ "Clean Strength": "Сила очистки",
+ "Upscale Audio": "Улучшить качество аудио",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "Путь, по которому будет сохранен выходной звук, по умолчанию в assets/audios/output.wav",
+ "Formant Shifting": "Сдвиг формант",
+ "Pitch": "Высота тона",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Разбейте аудио на части для вывода, чтобы получить лучшие результаты в некоторых случаях.",
+ "Default value is 1.0": "Значение по умолчанию — 1.0",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Включите сдвиг формант. Используется для преобразования мужского голоса в женский и наоборот.",
+ "Presets are located in /assets/formant_shift folder": "Пресеты находятся в папке /assets/formant_shift",
+ "Browse presets for formanting": "Просмотр пресетов для сдвига формант",
+ "Filter Radius": "Радиус фильтра",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Улучшите качество аудио до более высокого, рекомендуется для аудио низкого качества. (Обработка аудио может занять больше времени)",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Примените мягкую автонастройку к своим выводам, рекомендуется для преобразования пения.",
+ "Quefrency for formant shifting": "Квефренция для сдвига формант",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Установите уровень очистки для нужного вам аудио, чем больше вы его увеличите, тем больше оно будет очищено, но возможно, что аудио будет более сжато.",
+ "Volume Envelope": "Огибающая громкости",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Установите высоту тона аудио, чем выше значение, тем выше высота тона.",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Очистите выходной аудиосигнал с помощью алгоритмов обнаружения шума, рекомендуется для речевых аудио.",
+ "Search Feature Ratio": "Коэффициент поиска признаков",
+ "Protect Voiceless Consonants": "Защита глухих согласных",
+ "Batch": "Пакет",
+ "Pitch extraction algorithm": "Алгоритм извлечения высоты тона",
+ "Convert": "Преобразовать",
+ "Export Audio": "Экспортировать аудио",
+ "Input Folder": "Входная папка",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Влияние, оказываемое файлом индекса; более высокое значение соответствует большему влиянию. Тем не менее, выбор более низких значений может помочь уменьшить артефакты, присутствующие в аудио.",
+ "Enter input path": "Введите входной путь",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Алгоритм извлечения высоты тона для преобразования аудио. По умолчанию используется алгоритм rmvpe, который рекомендуется в большинстве случаев.",
+ "Output Folder": "Выходная папка",
+ "Timbre for formant shifting": "Тембр для сдвига формант",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Замените или смешайте с огибающей громкости вывода. Чем ближе отношение к 1, тем больше используется огибающая вывода.",
+ "Enter output path": "Введите выходной путь",
+ "Select the folder containing the audios to convert.": "Выберите папку, содержащую аудио для преобразования.",
+ "Select the folder where the output audios will be saved.": "Выберите папку, в которую будут сохраняться выходные аудио.",
+ "## Voice Blender": "## Смешиватель голосов",
+ "Get information about the audio": "Получить информацию об аудио",
+ "Voice Blender": "Смешиватель голосов",
+ "Drag and drop your model here": "Перетащите свою модель сюда",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Если число больше или равно трем, использование медианной фильтрации по собранным результатам тона может привести к снижению дыхания.",
+ "Path to Model": "Путь к модели",
+ "Enter path to model": "Введите путь к модели",
+ "Blend Ratio": "Коэффициент смешивания",
+ "You can also use a custom path.": "Вы также можете использовать пользовательский путь.",
+ "Fusion": "Слияние",
+ "View": "Просмотр",
+ "Inroduce the model information": "Введите информацию о модели",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Защитите отчетливые согласные и звуки дыхания, чтобы предотвратить электроакустические разрывы и другие артефакты. Извлечение параметра на максимальное значение 0,5 обеспечивает комплексную защиту. Однако уменьшение этого значения может уменьшить степень защиты и потенциально смягчить эффект индексации.",
+ "View model information": "Просмотреть информацию о модели",
+ "Pth file": "Файл Pth",
+ "Introduce the model pth path": "Введите путь к файлу pth модели",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Выберите две голосовые модели, установите желаемый процент смешивания и смешайте их в совершенно новый голос.",
+ "Model extraction": "Извлечение модели",
+ "Output of the pth file": "Вывод файла pth",
+ "Model information to be placed": "Информация о модели, которую нужно разместить",
+ "Model conversion": "Преобразование модели",
+ "Extract F0 Curve": "Извлечь кривую F0",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Корректировка положения в сторону одной или другой стороны сделает модель более похожей на первую или вторую.",
+ "Record": "Запись",
+ "# How to Report an Issue on GitHub": "# Как сообщить о проблеме на GitHub",
+ "Record Screen": "Запись экрана",
+ "Introduce the model .pth path": "Введите путь к файлу .pth модели",
+ "See Model Information": "Просмотреть информацию о модели",
+ "Stop Recording": "Остановить запись",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Нажмите на кнопку «Запись экрана» ниже, чтобы начать запись проблемы, с которой вы столкнулись.",
+ "Model Link": "Ссылка на модель",
+ "## Download Model": "## Скачать модель",
+ "Introduce the model link": "Введите ссылку на модель",
+ "Search": "Поиск",
+ "The information to be placed in the model (You can leave it blank or put anything).": "Информация, которая должна быть размещена в модели (Вы можете оставить ее пустой или поставить что угодно).",
+ "## Drop files": "## Перетащить файлы",
+ "Download Model": "Скачать модель",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Перейдите в раздел [GitHub Issues](https://github.com/IAHispano/Applio/issues) и нажмите на кнопку «Новая проблема».",
+ "## Search Model": "## Поиск модели",
+ "Introduce the model name to search.": "Введите название модели для поиска.",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Перетащите файлы .pth и .index в это пространство. Перетащите один, а затем другой.",
+ "TTS Voices": "Голоса TTS",
+ "We couldn't find models by that name.": "Мы не смогли найти модели с таким названием.",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "Кривая f0 представляет собой изменения базовой частоты голоса с течением времени, показывая, как высота тона повышается и падает.",
+ "And select the sampling rate": "И выберите частоту дискретизации",
+ "## Download Pretrained Models": "## Скачать предварительно обученные модели",
+ "TTS Speed": "Скорость TTS",
+ "Select the pretrained model you want to download.": "Выберите предварительно обученную модель, которую вы хотите скачать.",
+ "Text to Synthesize": "Текст для синтеза",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. После того, как вы закончите запись проблемы, нажмите на кнопку «Остановить запись» (та же кнопка, но метка меняется в зависимости от того, ведете ли вы активную запись или нет).",
+ "Select the TTS voice to use for the conversion.": "Выберите голос TTS, который будет использоваться для преобразования.",
+ "Upload a .txt file": "Загрузите файл .txt",
+ "Increase or decrease TTS speed.": "Увеличьте или уменьшите скорость TTS.",
+ "Enter the text to synthesize.": "Введите текст для синтеза.",
+ "Enter text to synthesize": "Введите текст для синтеза",
+ "Output Path for TTS Audio": "Путь вывода для аудио TTS",
+ "Input path for text file": "Входной путь для текстового файла",
+ "Output Path for RVC Audio": "Путь вывода для аудио RVC",
+ "Theme": "Тема",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Заполните предоставленный шаблон проблемы, добавив в него необходимые детали, и используйте раздел ресурсов для загрузки записанного файла с предыдущего шага.",
+ "Restart Applio": "Перезапустить Applio",
+ "Language": "Язык",
+ "Enable Applio integration with applio.org/models using flask": "Включить интеграцию Applio с applio.org/models с использованием Flask",
+ "Enable Applio integration with Discord presence": "Включить интеграцию Applio с присутствием в Discord",
+ "Enable fake GPU": "Включить поддельный GPU",
+ "Precision": "Точность",
+ "It will activate the possibility of downloading models with a click from the website.": "Он активирует возможность скачивания моделей по клику с сайта.",
+ "Select the language you want to use. (Requires restarting Applio)": "Выберите язык, который вы хотите использовать. (Требуется перезапуск Applio)",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "Он активирует возможность отображения текущей активности Applio в Discord.",
+ "The path to the text file that contains content for text to speech.": "Путь к текстовому файлу, содержащему содержимое для преобразования текста в речь.",
+ "Select the theme you want to use. (Requires restarting Applio)": "Выберите тему, которую хотите использовать. (Требуется перезапуск Applio)",
+ "Update precision": "Обновить точность",
+ "Version Checker": "Проверка версий",
+ "Select the precision you want to use for training and inference.": "Выберите точность, которую вы хотите использовать для обучения и вывода.",
+ "Plugin Installer": "Установщик плагинов",
+ "Drag your plugin.zip to install it": "Перетащите plugin.zip, чтобы установить его",
+ "Check for updates": "Проверить обновления",
+ "Reverb": "Реверберация",
+ "Post-Process": "Постобработка",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "Обучение в настоящее время не поддерживается из-за отсутствия GPU. Чтобы активировать вкладку обучения, перейдите на вкладку настроек и включите опцию «Поддельный GPU».",
+ "Check which version of Applio is the latest to see if you need to update.": "Проверьте, какая версия Applio является последней, чтобы узнать, нужно ли вам обновляться.",
+ "Reverb Room Size": "Размер комнаты реверберации",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Активирует вкладку обучения. Однако обратите внимание, что этому устройству не хватает возможностей GPU, поэтому обучение не поддерживается. Эта опция предназначена только для тестирования. (Эта опция перезапустит Applio)",
+ "Apply reverb to the audio.": "Примените реверберацию к аудио.",
+ "Reverb Damping": "Демпфирование реверберации",
+ "Set the room size of the reverb.": "Установите размер комнаты реверберации.",
+ "Reverb Dry Gain": "Сухой сигнал реверберации",
+ "Set the damping of the reverb.": "Установите демпфирование реверберации.",
+ "Reverb Width": "Ширина реверберации",
+ "Reverb Wet Gain": "Влажный сигнал реверберации",
+ "Set the width of the reverb.": "Установите ширину реверберации.",
+ "Post-process the audio to apply effects to the output.": "Выполните постобработку аудио, чтобы применить эффекты к выводу.",
+ "Set the wet gain of the reverb.": "Установите влажный сигнал реверберации.",
+ "Limiter": "Ограничитель",
+ "Reverb Freeze Mode": "Режим заморозки реверберации",
+ "Pitch Shift": "Сдвиг высоты тона",
+ "Set the freeze mode of the reverb.": "Установите режим заморозки реверберации.",
+ "Set the dry gain of the reverb.": "Установите сухой сигнал реверберации.",
+ "Gain": "Усиление",
+ "Pitch Shift Semitones": "Сдвиг высоты тона на полутонах",
+ "Apply pitch shift to the audio.": "Примените сдвиг высоты тона к аудио.",
+ "Apply limiter to the audio.": "Примените ограничитель к аудио.",
+ "Limiter Threshold dB": "Порог ограничителя в дБ",
+ "Set the pitch shift semitones.": "Установите сдвиг высоты тона на полутонах.",
+ "Limiter Release Time": "Время отпускания ограничителя",
+ "Gain dB": "Усиление в дБ",
+ "Distortion": "Искажение",
+ "Apply gain to the audio.": "Примените усиление к аудио.",
+ "Chorus": "Хор",
+ "Set the limiter threshold dB.": "Установите порог ограничителя в дБ.",
+ "Set the limiter release time.": "Установите время отпускания ограничителя.",
+ "Distortion Gain": "Усиление искажения",
+ "Apply distortion to the audio.": "Примените искажение к аудио.",
+ "Set the distortion gain.": "Установите усиление искажения.",
+ "Chorus Rate Hz": "Частота хора в Гц",
+ "Chorus Depth": "Глубина хора",
+ "Apply chorus to the audio.": "Примените хор к аудио.",
+ "Set the gain dB.": "Установите усиление в дБ.",
+ "Chorus Mix": "Микс хора",
+ "Set the chorus depth.": "Установите глубину хора.",
+ "Bitcrush": "Биткраш",
+ "Set the chorus rate Hz.": "Установите частоту хора в Гц.",
+ "Apply bitcrush to the audio.": "Примените биткраш к аудио.",
+ "Set the chorus mix.": "Установите микс хора.",
+ "Chorus Feedback": "Обратная связь хора",
+ "Chorus Center Delay ms": "Задержка центра хора в мс",
+ "Set the chorus feedback.": "Установите обратную связь хора.",
+ "Set the chorus center delay ms.": "Установите задержку центра хора в мс.",
+ "Bitcrush Bit Depth": "Глубина биткраша",
+ "Clipping": "Обрезание",
+ "Compressor": "Компрессор",
+ "Set the clipping threshold.": "Установите порог обрезания.",
+ "Set the bitcrush bit depth.": "Установите глубину биткраша.",
+ "Apply clipping to the audio.": "Примените обрезание к аудио.",
+ "Clipping Threshold": "Порог обрезания",
+ "Delay": "Задержка",
+ "Compressor Attack ms": "Атака компрессора в мс",
+ "Compressor Release ms": "Отпускание компрессора в мс",
+ "Compressor Threshold dB": "Порог компрессора в дБ",
+ "Apply compressor to the audio.": "Примените компрессор к аудио.",
+ "Set the compressor attack ms.": "Установите атаку компрессора в мс.",
+ "Set the compressor threshold dB.": "Установите порог компрессора в дБ.",
+ "Set the compressor ratio.": "Установите передаточное отношение компрессора.",
+ "Compressor Ratio": "Передаточное отношение компрессора",
+ "Delay Seconds": "Задержка в секундах",
+ "Set the delay seconds.": "Установите задержку в секундах.",
+ "Apply delay to the audio.": "Примените задержку к аудио.",
+ "Set the compressor release ms.": "Установите отпускание компрессора в мс.",
+ "Delay Feedback": "Обратная связь задержки",
+ "Set the delay mix.": "Установите микс задержки.",
+ "Delay Mix": "Микс задержки",
+ "Folder Name": "Имя папки",
+ "Set the delay feedback.": "Установите обратную связь задержки.",
+ "Upload .bin": "Загрузить .bin",
+ "Upload .json": "Загрузить .json",
+ "Refresh embedders": "Обновить встраиватели",
+ "model information": "информация о модели",
+ "Custom Embedder": "Пользовательский встраиватель",
+ "Select Custom Embedder": "Выберите пользовательский встраиватель",
+ "Model Creator": "Создатель модели",
+ "Set name": "Установить имя",
+ "Speaker ID": "Идентификатор говорящего",
+ "Name of the model creator. (Default: Unknown)": "Имя создателя модели. (По умолчанию: Неизвестно)",
+ "Model Author Name": "Имя автора модели",
+ "The name that will appear in the model information.": "Имя, которое будет отображаться в информации о модели.",
+ "Move files to custom embedder folder": "Переместить файлы в папку пользовательского встраивателя",
+ "Select the speaker ID to use for the conversion.": "Выберите идентификатор говорящего, который будет использоваться для преобразования.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "Установите силу автотюна - чем больше вы ее увеличите, тем сильнее она будет привязываться к хроматической сетке."
+}
diff --git a/assets/i18n/languages/sk_SK.json b/assets/i18n/languages/sk_SK.json
new file mode 100644
index 0000000000000000000000000000000000000000..a7a0b04c4879c888c26c74997270ac024d966187
--- /dev/null
+++ b/assets/i18n/languages/sk_SK.json
@@ -0,0 +1,325 @@
+{
+ "Inference": "Záver",
+ "Processing": "Spracovanie",
+ "Extra": "Extra",
+ "Training": "Školenie",
+ "Merge Audios": "Zlúčiť audio",
+ "Audio Analyzer": "Analyzátor zvuku",
+ "The output information will be displayed here.": "Tu sa zobrazia výstupné informácie.",
+ "Output Information": "Výstupné informácie",
+ "Settings": "Nastavenia",
+ "Plugins": "Doplnky",
+ "Model Information": "Informácie o modeli",
+ "This section contains some extra utilities that often may be in experimental phases.": "Táto časť obsahuje niektoré ďalšie nástroje, ktoré môžu byť často v experimentálnej fáze.",
+ "Download": "Stiahnuť",
+ "Report a Bug": "Nahlásiť chybu",
+ "Preprocess": "Predbežné spracovanie",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "Jednoduchý a kvalitný nástroj na konverziu hlasu zameraný na jednoduchosť používania a výkon.",
+ "Audio cutting": "Rezanie zvuku",
+ "Model Name": "Názov modelu",
+ "Enter model name": "Zadajte názov modelu",
+ "Process effects": "Účinky procesu",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "Túto možnosť sa odporúča deaktivovať, ak už bola množina údajov spracovaná.",
+ "Dataset Path": "Cesta k množine údajov",
+ "Name of the new model.": "Názov nového modelu.",
+ "Dataset Creator": "Tvorca množiny údajov",
+ "Refresh Datasets": "Obnovenie množín údajov",
+ "Path to the dataset folder.": "Cesta k priečinku množiny údajov.",
+ "Dataset Name": "Názov množiny údajov",
+ "Enter dataset path": "Zadajte cestu k množine údajov",
+ "Name of the new dataset.": "Názov novej množiny údajov.",
+ "Upload Audio Dataset": "Nahratie zvukovej množiny údajov",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Zvukový súbor bol úspešne pridaný do množiny údajov. Kliknite na tlačidlo predbežného spracovania.",
+ "Enter dataset name": "Zadajte názov množiny údajov",
+ "Sampling Rate": "Vzorkovacia frekvencia",
+ "The sampling rate of the audio files.": "Vzorkovacia frekvencia zvukových súborov.",
+ "Embedder Model": "Vložený model",
+ "Preprocess Dataset": "Množina údajov pred spracovaním",
+ "Extract": "Extrahovať",
+ "Model used for learning speaker embedding.": "Model používaný na učenie vkladania reproduktorov.",
+ "Hop Length": "Dĺžka chmeľu",
+ "Save Every Epoch": "Zachráňte každú epochu",
+ "Batch Size": "Veľkosť dávky",
+ "Total Epoch": "Celková epocha",
+ "Determine at how many epochs the model will saved at.": "Určte, v koľkých epochách sa model uloží.",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Je vhodné ho zosúladiť s dostupnou pamäťou VRAM vášho GPU. Nastavenie 4 ponúka lepšiu presnosť, ale pomalšie spracovanie, zatiaľ čo 8 poskytuje rýchlejšie a štandardné výsledky.",
+ "Version of the model architecture.": "Verzia architektúry modelu.",
+ "Specifies the overall quantity of epochs for the model training process.": "Určuje celkové množstvo epochy pre proces trénovania modelu.",
+ "Pretrained": "Predškolený",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Označuje trvanie, za ktoré systém prejde k výraznej zmene výšky tónu. Menšie dĺžky skoku vyžadujú viac času na odvodenie, ale majú tendenciu poskytovať vyššiu presnosť výšky tónu.",
+ "Save Every Weights": "Ušetrite každú váhu",
+ "Custom Pretrained": "Vlastné predtrénovanie",
+ "Save Only Latest": "Ukladať iba najnovšie",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Toto nastavenie umožňuje uložiť hmotnosť modelu na konci každej epochy.",
+ "Upload Pretrained Model": "Nahrať vopred natrénovaný model",
+ "Model Architecture": "Architektúra modelu",
+ "Refresh Custom Pretraineds": "Obnovenie vlastných predtrénovaných",
+ "Pretrained Custom Settings": "Predtrénované vlastné nastavenia",
+ "Pretrained G Path": "Vlastné predtrénované G",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Povolenie tohto nastavenia bude mať za následok, že súbory G a D uložia iba svoje najnovšie verzie, čím sa efektívne šetrí úložný priestor.",
+ "GPU Settings": "Nastavenia GPU",
+ "Pretrained D Path": "Vlastné predtrénované D",
+ "The file you dropped is not a valid pretrained file. Please try again.": "Súbor, ktorý ste vynechali, nie je platný vopred natrénovaný súbor. Skúste to znova.",
+ "GPU Custom Settings": "Vlastné nastavenia GPU",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Používanie vlastných predtrénovaných modelov môže viesť k vynikajúcim výsledkom, pretože výber najvhodnejších predtrénovaných modelov prispôsobených konkrétnemu prípadu použitia môže výrazne zvýšiť výkon.",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Nastavuje pokročilé nastavenia GPU, odporúčané pre používateľov s lepšou architektúrou GPU.",
+ "GPU Number": "Číslo GPU",
+ "0 to ∞ separated by -": "0 až ∞ oddelené -",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Kliknutím na tlačidlo obnovenia zobrazíte vopred natrénovaný súbor v rozbaľovacej ponuke.",
+ "The GPU information will be displayed here.": "Tu sa zobrazia informácie o GPU.",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Zadajte počet GPU, ktoré chcete použiť na predbežný proces, zadaním oddelených spojovníkmi (-). V súčasnosti nebude mať používanie viacerých gpu významný účinok.",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Zadajte počet GPU, ktoré chcete použiť na extrakciu, zadaním ich oddelených spojovníkmi (-).",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "Počet jadier procesora, ktoré sa majú použiť v predbežnom procese. Predvoleným nastavením sú jadrá procesora, čo sa odporúča vo väčšine prípadov.",
+ "GPU Information": "Informácie o GPU",
+ "Pitch Guidance": "Navádzanie ihriska",
+ "Use CPU": "Použite procesor",
+ "Extract Features": "Funkcie extrahovania",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "Počet jadier procesora, ktoré sa majú použiť v procese extrakcie. Predvoleným nastavením sú jadrá procesora, čo sa odporúča vo väčšine prípadov.",
+ "Force the use of CPU for training.": "Vynútiť použitie procesora na trénovanie.",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Pri tréningu vlastných využite predtrénované modely. Tento prístup skracuje trvanie tréningu a zvyšuje celkovú kvalitu.",
+ "Index Algorithm": "Indexový algoritmus",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Uprednostňujeme spustenie extrakcie modelu na GPU pre rýchlejší výkon. Ak dávate prednosť použitiu CPU, jednoducho nechajte pole GPU prázdne.",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Uprednostňujeme spustenie predbežného spracovania modelu na GPU, aby sme dosiahli vyšší výkon. Ak dávate prednosť použitiu CPU, jednoducho nechajte pole GPU prázdne.",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Použitím navádzania výšky je možné zrkadliť intonáciu pôvodného hlasu vrátane jeho výšky. Táto funkcia je obzvlášť cenná pre spev a iné scenáre, kde je nevyhnutné zachovať pôvodnú melódiu alebo vzor výšky tónu.",
+ "Cache Dataset in GPU": "Množina údajov vyrovnávacej pamäte v GPU",
+ "Cache the dataset in GPU memory to speed up the training process.": "Uložte množinu údajov do vyrovnávacej pamäte GPU, aby ste urýchlili proces trénovania.",
+ "Overtraining Detector": "Detektor pretrénovania",
+ "Fresh Training": "Čerstvý tréning",
+ "Overtraining Threshold": "Prah pretrénovania",
+ "Start Training": "Začnite trénovať",
+ "Overtraining Detector Settings": "Nastavenia detektora pretrénovania",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans je klastrovací algoritmus, ktorý rozdeľuje množinu údajov na K klastrov. Toto nastavenie je užitočné najmä pre veľké množiny údajov.",
+ "Stop Training": "Zastaviť tréning",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "Toto nastavenie povoľte iba vtedy, ak trénujete nový model od začiatku alebo reštartujete trénovanie. Vymaže všetky predtým vygenerované váhy a protokoly tensorboardu.",
+ "Export Model": "Exportovať model",
+ "Generate Index": "Generovať index",
+ "Exported Pth file": "Exportovaný súbor Pth",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Zistite pretrénovanie, aby ste zabránili tomu, aby sa model príliš dobre naučil trénovacie údaje a stratil schopnosť zovšeobecniť na nové údaje.",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Nastavte maximálny počet období, počas ktorých má model prestať trénovať, ak sa nezistí žiadne zlepšenie.",
+ "Exported Index file": "Exportovaný indexový súbor",
+ "Upload": "Nahrať",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "Tlačidlo Nahrať je určené len pre Google Colab: Nahrá exportované súbory do priečinka ApplioExport na vašom Disku Google.",
+ "Select the pth file to be exported": "Vyberte súbor pth, ktorý chcete exportovať",
+ "Voice Model": "Hlasový model",
+ "Select the index file to be exported": "Vyberte súbor indexu, ktorý sa má exportovať",
+ "Single": "Slobodný",
+ "Select the index file to use for the conversion.": "Vyberte indexový súbor, ktorý chcete použiť na konverziu.",
+ "Refresh": "Občerstviť",
+ "Select the voice model to use for the conversion.": "Vyberte hlasový model, ktorý chcete použiť na konverziu.",
+ "Index File": "Indexový súbor",
+ "Unload Voice": "Vyložiť hlas",
+ "Upload Audio": "Nahrať zvuk",
+ "Select Audio": "Vyberte položku Audio",
+ "Advanced Settings": "Rozšírené nastavenia",
+ "Select the audio to convert.": "Vyberte zvuk, ktorý chcete previesť.",
+ "Custom Output Path": "Vlastná výstupná cesta",
+ "Output Path": "Výstupná cesta",
+ "Export Format": "Formát exportu",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Vymazať výstupy (vymaže všetky zvuky v aktívach/audiách)",
+ "Select the format to export the audio.": "Vyberte formát exportu zvuku.",
+ "Split Audio": "Rozdelenie zvuku",
+ "Autotune": "Automatické ladenie",
+ "Clean Audio": "Čistý zvuk",
+ "Clean Strength": "Čistá sila",
+ "Upscale Audio": "Upscale zvuk",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "Cesta, na ktorú sa uloží výstupný zvuk, predvolene v položke assets/audios/output.wav",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Rozdeľte zvuk na časti na odvodenie, aby ste v niektorých prípadoch dosiahli lepšie výsledky.",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Na svoje závery použite mäkké automatické ladenie, odporúčané pre spevácke konverzie.",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Vyčistite zvukový výstup pomocou algoritmov detekcie šumu, ktoré sa odporúčajú na hovorenie zvuku.",
+ "Formant Shifting": "Zmena formantov",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Upscalujte zvuk na vyššiu kvalitu, odporúča sa pre zvuk nízkej kvality. (Spracovanie zvuku môže trvať dlhšie)",
+ "Browse presets for formanting": "Prezrite si predvoľby pre formovanie",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Povoliť radenie formantov. Používa sa pre konverzie mužov na ženy a naopak.",
+ "Pitch": "Rozstup",
+ "Default value is 1.0": "Predvolená hodnota je 1,0",
+ "Presets are located in /assets/formant_shift folder": "Predvoľby sa nachádzajú v priečinku /assets/formant_shift",
+ "Quefrency for formant shifting": "Quefrency pre posun formantov",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Nastavte úroveň čistenia na požadovaný zvuk, čím viac ho zvýšite, tým viac sa vyčistí, ale je možné, že zvuk bude viac komprimovaný.",
+ "Filter Radius": "Polomer filtra",
+ "Timbre for formant shifting": "Zafarbenie pre radenie formantov",
+ "Search Feature Ratio": "Pomer funkcií vyhľadávania",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Nastavte výšku zvuku, čím vyššia hodnota, tým vyššia výška.",
+ "Volume Envelope": "Obálka objemu",
+ "Protect Voiceless Consonants": "Chráňte neznelé spoluhlásky",
+ "Convert": "Konvertovať",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Vplyv indexového súboru; vyššia hodnota zodpovedá väčšiemu vplyvu. Voľba nižších hodnôt však môže pomôcť zmierniť artefakty prítomné vo zvuku.",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Nahraďte alebo zmiešajte s objemovou obálkou výstupu. Čím bližšie je pomer k 1, tým viac sa využíva výstupná obálka.",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Ak je číslo väčšie alebo rovné tri, použitie mediánového filtrovania na zozbieraných tónových výsledkoch má potenciál znížiť dýchanie.",
+ "Batch": "Dávka",
+ "Pitch extraction algorithm": "Algoritmus extrakcie výšky tónu",
+ "Export Audio": "Exportovať zvuk",
+ "Enter input path": "Zadajte vstupnú cestu",
+ "Input Folder": "Vstupný priečinok",
+ "Select the folder containing the audios to convert.": "Vyberte priečinok obsahujúci audiozáznamy, ktoré chcete skonvertovať.",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Chráňte zreteľné spoluhlásky a zvuky dýchania, aby ste zabránili elektroakustickému roztrhnutiu a iným artefaktom. Vytiahnutie parametra na maximálnu hodnotu 0,5 ponúka komplexnú ochranu. Zníženie tejto hodnoty však môže znížiť rozsah ochrany a zároveň potenciálne zmierniť efekt indexovania.",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Algoritmus extrakcie výšky tónu, ktorý sa má použiť na konverziu zvuku. Predvolený algoritmus je rmvpe, ktorý sa odporúča vo väčšine prípadov.",
+ "Output Folder": "Výstupný priečinok",
+ "Enter output path": "Zadajte výstupnú cestu",
+ "Get information about the audio": "Získanie informácií o zvuku",
+ "Voice Blender": "Hlasový mixér",
+ "Drag and drop your model here": "Presuňte svoj model sem",
+ "## Voice Blender": "## Hlasový mixér",
+ "Blend Ratio": "Pomer miešania",
+ "You can also use a custom path.": "Môžete použiť aj vlastnú cestu.",
+ "Fusion": "Fúzia",
+ "Select the folder where the output audios will be saved.": "Vyberte priečinok, do ktorého sa uložia výstupné audio.",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Vyberte dva hlasové modely, nastavte požadované percento prelínania a zmiešajte ich do úplne nového hlasu.",
+ "Path to Model": "Cesta k modelu",
+ "Enter path to model": "Zadajte cestu k modelu",
+ "Inroduce the model information": "Vložte informácie o modeli",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Úpravou polohy viac na jednu alebo druhú stranu sa model viac podobá prvému alebo druhému.",
+ "Model information to be placed": "Informácie o modeli, ktoré sa majú umiestniť",
+ "View": "Pohľad",
+ "View model information": "Zobrazenie informácií o modeli",
+ "Introduce the model pth path": "Predstavte cestu modelu pth",
+ "Model extraction": "Extrakcia modelu",
+ "The information to be placed in the model (You can leave it blank or put anything).": "Informácie, ktoré sa majú umiestniť do modelu (môžete ho nechať prázdne alebo vložiť čokoľvek).",
+ "Pth file": "Pth súbor",
+ "Output of the pth file": "Výstup súboru pth",
+ "Extract F0 Curve": "Extrahovať krivku F0",
+ "Model conversion": "Konverzia modelu",
+ "# How to Report an Issue on GitHub": "# Ako nahlásiť problém na GitHub",
+ "Record": "Rekord",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "Krivka f0 predstavuje zmeny základnej frekvencie hlasu v priebehu času a ukazuje, ako výška stúpa a klesá.",
+ "Record Screen": "Obrazovka záznamu",
+ "Stop Recording": "Zastaviť nahrávanie",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Kliknutím na tlačidlo \"Nahrať obrazovku\" nižšie spustíte zaznamenávanie problému, ktorý sa vyskytuje.",
+ "Introduce the model .pth path": "Predstavte cestu .pth modelu",
+ "Model Link": "Odkaz na model",
+ "## Download Model": "## Stiahnuť model",
+ "See Model Information": "Pozrite si informácie o modeli",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Prejdite na [Problémy s GitHubom](https://github.com/IAHispano/Applio/issues) a kliknite na tlačidlo \"Nový problém\".",
+ "Introduce the model link": "Predstavte odkaz na model",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Vyplňte poskytnutú šablónu problému, podľa potreby nezabudnite uviesť podrobnosti, a použite sekciu aktív na nahranie zaznamenaného súboru z predchádzajúceho kroku.",
+ "## Search Model": "## Model vyhľadávania",
+ "Search": "Hľadať",
+ "## Drop files": "## Presunúť súbory",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Presuňte súbor .pth a súbor .index do tohto priestoru. Presuňte jednu a potom druhú.",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Po dokončení nahrávania problému kliknite na tlačidlo \"Zastaviť nahrávanie\" (rovnaké tlačidlo, ale štítok sa mení v závislosti od toho, či aktívne nahrávate alebo nie).",
+ "Download Model": "Stiahnuť model",
+ "Introduce the model name to search.": "Zadajte názov modelu na vyhľadávanie.",
+ "We couldn't find models by that name.": "Modelky s týmto menom sme nemohli nájsť.",
+ "## Download Pretrained Models": "## Stiahnite si predtrénované modely",
+ "And select the sampling rate": "A vyberte vzorkovaciu frekvenciu.",
+ "Select the pretrained model you want to download.": "Vyberte predtrénovaný model, ktorý chcete stiahnuť.",
+ "TTS Speed": "Rýchlosť TTS",
+ "TTS Voices": "Hlasy TTS",
+ "Increase or decrease TTS speed.": "Zvýšte alebo znížte rýchlosť TTS.",
+ "Text to Synthesize": "Text na syntézu",
+ "Select the TTS voice to use for the conversion.": "Vyberte hlas TTS, ktorý chcete použiť na konverziu.",
+ "Enter text to synthesize": "Zadajte text na syntézu",
+ "Enter the text to synthesize.": "Zadajte text, ktorý chcete syntetizovať.",
+ "Upload a .txt file": "Nahratie .txt súboru",
+ "Output Path for RVC Audio": "Výstupná cesta pre zvuk RVC",
+ "Input path for text file": "Vstupná cesta pre textový súbor",
+ "Enable Applio integration with Discord presence": "Povoľte integráciu Applio s prítomnosťou Discord",
+ "Output Path for TTS Audio": "Výstupná cesta pre zvuk TTS",
+ "The path to the text file that contains content for text to speech.": "Cesta k textovému súboru, ktorý obsahuje obsah prevodu textu na reč.",
+ "Theme": "Téma",
+ "It will activate the possibility of downloading models with a click from the website.": "Aktivuje možnosť sťahovania modelov kliknutím z webovej stránky.",
+ "Enable Applio integration with applio.org/models using flask": "Povoľte integráciu Applio s applio.org/models pomocou banky",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "Aktivuje možnosť zobrazenia aktuálnej aktivity Applio v Discorde.",
+ "Enable fake GPU": "Povoľte falošný GPU",
+ "Restart Applio": "Reštartujte aplikáciu Applio",
+ "Language": "Jazyk",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "Školenie je v súčasnosti nepodporované z dôvodu absencie GPU. Ak chcete aktivovať kartu tréningu, prejdite na kartu nastavení a povoľte možnosť \"Falošný GPU\".",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Aktivuje kartu vlaku. Upozorňujeme však, že tomuto zariadeniu chýbajú možnosti GPU, a preto školenie nie je podporované. Táto možnosť slúži len na testovacie účely. (Táto možnosť reštartuje Applio)",
+ "Precision": "Presnosť",
+ "Select the language you want to use. (Requires restarting Applio)": "Vyberte jazyk, ktorý chcete použiť. (Vyžaduje reštartovanie aplikácie Applio)",
+ "Update precision": "Presnosť aktualizácie",
+ "Version Checker": "Kontrola verzií",
+ "Reverb": "Reverb",
+ "Plugin Installer": "Inštalátor zásuvného modulu",
+ "Post-Process": "Následný proces",
+ "Drag your plugin.zip to install it": "Potiahnutím plugin.zip ho nainštalujte",
+ "Select the precision you want to use for training and inference.": "Vyberte presnosť, ktorú chcete použiť na trénovanie a odvodzovanie.",
+ "Check for updates": "Skontrolujte aktualizácie",
+ "Post-process the audio to apply effects to the output.": "Dodatočne spracujte zvuk, aby ste na výstup použili efekty.",
+ "Reverb Room Size": "Veľkosť miestnosti Reverb",
+ "Check which version of Applio is the latest to see if you need to update.": "Skontrolujte, ktorá verzia aplikácie Applio je najnovšia, aby ste zistili, či je potrebné aktualizovať.",
+ "Set the room size of the reverb.": "Nastavte veľkosť miestnosti reverbu.",
+ "Reverb Damping": "Tlmenie reverbu",
+ "Reverb Wet Gain": "Reverb Wet Gain",
+ "Set the damping of the reverb.": "Nastavte tlmenie reverbu.",
+ "Reverb Dry Gain": "Reverb Dry Gain",
+ "Reverb Width": "Šírka dozvuku",
+ "Set the dry gain of the reverb.": "Nastavte suchý zisk reverbu.",
+ "Pitch Shift": "Posun výšky tónu",
+ "Set the freeze mode of the reverb.": "Nastavte režim zmrazenia reverbu.",
+ "Limiter": "Obmedzovač",
+ "Reverb Freeze Mode": "Režim zmrazenia reverbu",
+ "Set the wet gain of the reverb.": "Nastavte mokrý zisk reverbu.",
+ "Set the width of the reverb.": "Nastavte šírku reverbu.",
+ "Apply pitch shift to the audio.": "Použite posun výšky tónu na zvuk.",
+ "Pitch Shift Semitones": "Poltóny posunu výšky tónu",
+ "Set the pitch shift semitones.": "Nastavte poltóny posunu výšky tónu.",
+ "Apply limiter to the audio.": "Použite obmedzovač na zvuk.",
+ "Limiter Threshold dB": "Prah obmedzovača dB",
+ "Set the limiter threshold dB.": "Nastavte prahovú hodnotu obmedzovača dB.",
+ "Limiter Release Time": "Čas uvoľnenia obmedzovača",
+ "Set the limiter release time.": "Nastavte čas uvoľnenia obmedzovača.",
+ "Distortion": "Skreslenie",
+ "Apply gain to the audio.": "Použite zosilnenie zvuku.",
+ "Gain dB": "Zisk dB",
+ "Chorus": "Refrén",
+ "Apply distortion to the audio.": "Použite skreslenie zvuku.",
+ "Set the gain dB.": "Nastavte zosilnenie dB.",
+ "Distortion Gain": "Zosilnenie skreslenia",
+ "Set the distortion gain.": "Nastavte zosilnenie skreslenia.",
+ "Apply chorus to the audio.": "Použite refrén na zvuk.",
+ "Chorus Rate Hz": "Frekvencia refrénu Hz",
+ "Gain": "Získať",
+ "Set the chorus rate Hz.": "Nastavte frekvenciu zboru Hz.",
+ "Chorus Depth": "Hĺbka zboru",
+ "Chorus Center Delay ms": "Refrén Stredové oneskorenie ms",
+ "Select the theme you want to use. (Requires restarting Applio)": "Vyberte motív, ktorý chcete použiť. (Vyžaduje reštartovanie aplikácie Applio)",
+ "Apply reverb to the audio.": "Použite reverb na zvuk.",
+ "Chorus Mix": "Refrénový mix",
+ "Set the chorus center delay ms.": "Nastavte stredové oneskorenie refrénu ms.",
+ "Set the chorus mix.": "Nastavte refrénový mix.",
+ "Bitcrush": "Bitcrush",
+ "Chorus Feedback": "Spätná väzba zboru",
+ "Set the chorus feedback.": "Nastavte spätnú väzbu refrénu.",
+ "Apply bitcrush to the audio.": "Aplikujte bitcrush na zvuk.",
+ "Clipping": "Odrezok",
+ "Set the bitcrush bit depth.": "Nastavte bitovú hĺbku bitu.",
+ "Bitcrush Bit Depth": "Bitová hĺbka Bitcrush",
+ "Set the chorus depth.": "Nastavte hĺbku refrénu.",
+ "Apply clipping to the audio.": "Použite orezanie na zvuk.",
+ "Set the clipping threshold.": "Nastavte prah orezania.",
+ "Clipping Threshold": "Prah orezania",
+ "Apply compressor to the audio.": "Na zvuk použite kompresor.",
+ "Compressor Ratio": "Pomer kompresora",
+ "Set the compressor threshold dB.": "Nastavte prahovú hodnotu kompresora dB.",
+ "Set the compressor ratio.": "Nastavte pomer kompresora.",
+ "Compressor Threshold dB": "Prah kompresora dB",
+ "Compressor Attack ms": "Útok kompresora ms",
+ "Compressor": "Kompresor",
+ "Set the compressor attack ms.": "Nastavte útok kompresora ms.",
+ "Compressor Release ms": "Uvoľnenie kompresora ms",
+ "Set the compressor release ms.": "Nastavte uvoľnenie kompresora ms.",
+ "Delay": "Zdržanie",
+ "Apply delay to the audio.": "Použite oneskorenie zvuku.",
+ "Delay Feedback": "Spätná väzba oneskorenia",
+ "Set the delay seconds.": "Nastavte sekundy oneskorenia.",
+ "Delay Mix": "Oneskorený mix",
+ "Set the delay feedback.": "Nastavte spätnú väzbu oneskorenia.",
+ "Custom Embedder": "Vlastný vkladač",
+ "Folder Name": "Názov priečinka",
+ "Select Custom Embedder": "Vyberte vlastný vkladač",
+ "Set the delay mix.": "Nastavte oneskorený mix.",
+ "Refresh embedders": "Osviežte vkladače",
+ "Upload .json": "Nahrať .json",
+ "Delay Seconds": "Sekundy oneskorenia",
+ "Upload .bin": "Nahrať .bin",
+ "Move files to custom embedder folder": "Premiestnenie súborov do vlastného priečinka vkladacieho súboru",
+ "model information": "Informácie o modeli",
+ "Model Creator": "Tvorca modelov",
+ "Name of the model creator. (Default: Unknown)": "Meno tvorcu modelu. (Predvolené: Neznáme)",
+ "Speaker ID": "ID rečníka",
+ "Select the speaker ID to use for the conversion.": "Vyberte identifikátor reproduktora, ktorý chcete použiť na konverziu.",
+ "Set name": "Nastaviť názov",
+ "The name that will appear in the model information.": "Názov, ktorý sa zobrazí v informáciách o modeli.",
+ "Model Author Name": "Meno autora modelu",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "Nastavte silu automatického ladenia - čím viac ju zvýšite, tým viac sa prichytí k chromatickej mriežke."
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/sm_SM.json b/assets/i18n/languages/sm_SM.json
new file mode 100644
index 0000000000000000000000000000000000000000..c594d394577471041946d5f44525555bb97c0bdb
--- /dev/null
+++ b/assets/i18n/languages/sm_SM.json
@@ -0,0 +1,325 @@
+{
+ "Merge Audios": "Tuufaatasia Otio",
+ "Extra": "Faaopoopo",
+ "Training": "Aoaoga",
+ "Inference": "Faaiuga",
+ "Processing": "Faagaoioia",
+ "Output Information": "Faamatalaga o le La",
+ "Audio Analyzer": "Tagata e Iloiloina le Otio",
+ "The output information will be displayed here.": "O le a faaali mai iinei ia faamatalaga o le lafo mai.",
+ "Plugins": "Faaopoopoga",
+ "Download": "Sii mai",
+ "Model Information": "Faamatalaga Faataitai",
+ "Settings": "Faatulagaga",
+ "Report a Bug": "Lipoti se Faafitauli",
+ "Preprocess": "Muai faagaoioiga",
+ "This section contains some extra utilities that often may be in experimental phases.": "O le vaega lenei o loo i ai nisi o mea faaopoopo e faaaoga e masani ona i ai i vaega faataitai.",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "O se meafaigaluega faigofie, ma le lelei o le liuaina o leo e taulai atu i le faigofie ona faaaoga ma le faatinoga.",
+ "Audio cutting": "Otiina o le leo",
+ "Name of the new model.": "Igoa o le faataitaiga fou.",
+ "Process effects": "Aafiaga o le faagasologa",
+ "Model Name": "Igoa o le Faataitaiga",
+ "Dataset Path": "Ala o le Seti o Faamatalaga",
+ "Path to the dataset folder.": "Ala i le faila o le seti o faamatalaga.",
+ "Dataset Name": "Igoa o le Seti o Faamatalaga",
+ "Dataset Creator": "Tagata na Foafoaina le Seti o Faamatalaga",
+ "Refresh Datasets": "Toe Faafou Seti o Faamatalaga",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "E fautuaina le faaleagaina o lenei filifiliga pe afai ua uma ona faagaoioia lau seti o faamatalaga.",
+ "Enter model name": "Ta i totonu le igoa o le faataitaiga",
+ "Name of the new dataset.": "Igoa o le seti fou o faamatalaga.",
+ "Enter dataset name": "Ta i totonu le igoa o le seti o faamatalaga",
+ "Upload Audio Dataset": "Sii Mai le Seti o Faamatalaga o le Otio",
+ "Enter dataset path": "Ta i totonu le ala seti o faamatalaga",
+ "Sampling Rate": "Saoasaoa o le Faataitaiga",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Ua manuia le faaopoopoina o le faila otio i le seti o faamatalaga. Faamolemole kiliki le faamau muai faagaoioiga.",
+ "Model Architecture": "Faataitaiga o le Fausaga",
+ "Extract": "Sii mai",
+ "Preprocess Dataset": "Seti o Faamatalaga o le Muai Faagaoioiga",
+ "Version of the model architecture.": "Lomiga o le faataitaiga o le fausaga.",
+ "Hop Length": "Umi o le Tulioso",
+ "Embedder Model": "Faataitaiga o le Faamau",
+ "The sampling rate of the audio files.": "O le saoasaoa o le faataitaiga o faila otio.",
+ "Batch Size": "Telē o le Faaputuga",
+ "Model used for learning speaker embedding.": "Faataitaiga e faaaoga mo le aoaoina o le faamauina o failauga.",
+ "Save Every Epoch": "Sefe Vaitaimi Uma",
+ "Determine at how many epochs the model will saved at.": "Fuafua pe fia vaitau o le a sefe ai le faataitaiga.",
+ "Total Epoch": "Aofaiga o Le Vaitaimi",
+ "Pretrained": "Muai Aoaoina",
+ "Save Every Weights": "Sefe Mamafa Uma",
+ "Save Only Latest": "Sefe Na o Mea e Sili Ona Lata Mai",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Faailoa mai ai le umi e alu ai le polokalama e fesuiaiga ai i se suiga taua o le maualuga. O le umi o le hop laiti e manaomia ai le tele o le taimi mo le faaiuga ae e foliga mai e maualuga atu le sao o le maualuga.",
+ "Specifies the overall quantity of epochs for the model training process.": "Faailoa mai ai le aofaiga atoa o vaitau mo le faagasologa o aoaoga faataitai.",
+ "Refresh Custom Pretraineds": "Toe Faafou Le Muai Aoaoina",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "E fautuaina le faaogatusa ma le VRAM o loo maua i lau GPU. O se faatulagaga o le 4 e maua ai le faaleleia o le sao ae telegese le faagaoioia, ae o le 8 e maua ai ni taunuuga vave ma masani.",
+ "Pretrained G Path": "Muai Aoaoina G",
+ "Upload Pretrained Model": "Sii Mai le Faataitaiga ua Muai Aoaoina",
+ "Pretrained Custom Settings": "Faatulagaga Masani ua Muai Aoaoina",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "O le faatagaina o lenei faatulagaga o le a taunuu ai i le sefeina o faila G ma D na o a latou lomiga aupito lata mai, ma faasaoina ai le avanoa e teu ai meaai.",
+ "The file you dropped is not a valid pretrained file. Please try again.": "O le faila na e faapalasiina e le o se faila na muai aoaoina. Faamolemole toe taumafai.",
+ "Pretrained D Path": "Tu ma A'oga Masani D",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "O lenei faatulagaga e mafai ai ona e sefeina le mamafa o le faataitaiga i le faaiuga o vaitau taitasi.",
+ "GPU Settings": "Faatulagaga o le GPU",
+ "GPU Custom Settings": "Faatulagaga Masani o le GPU",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Kiliki le faamau toe faafou e vaai ai i le faila na muai aoaoina i le lisi autu e faasolo mai i lalo.",
+ "Custom Pretrained": "Muai Aoaoina",
+ "GPU Number": "Numera GPU",
+ "0 to ∞ separated by -": "0 i le ∞ tuueseeseina i le -",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Setiina o faatulagaga maualuluga GPU, fautuaina mo tagata faaaoga e sili atu ona lelei GPU fausaga.",
+ "The GPU information will be displayed here.": "O le a faaali mai iinei ia faamatalaga o le GPU.",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "O le faaaogaina o faataitaiga masani ua uma ona aoaoina e mafai ona oo atu ai i ni taunuuga sili ona lelei, aua o le filifilia o faataitaiga e sili ona talafeagai ua uma ona aoaoina e fetuunai i le tulaga patino o le faaaogaina e mafai ona matuai faaleleia ai le faatinoga.",
+ "Use CPU": "Faaaoga le CPU",
+ "Pitch Guidance": "Taitaiga o le Maualuga",
+ "GPU Information": "Faamatalaga GPU",
+ "Force the use of CPU for training.": "Faamalosia le faaaogaina o le CPU mo aoaoga.",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Faailoa atu le numera o GPUs e te manao e faaaoga mo le muai faagaoioia e ala i le ta i totonu e tuueseese i ni faailoga (-). I le taimi nei, o le faaaogaina o le tele-gpu o le a le i ai se aafiaga taua.",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "O le aofaiga o autu o le CPU e faaaoga i le muai faagaoioiga. O le faatulagaga Tiumasani o au autu cpu, lea e fautuaina mo le tele o tulaga.",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Faaaoga faataitaiga ua uma ona aoaoina pe a e aoaoina oe lava. O lenei auala e faaitiitia ai le umi o aoaoga ma faaleleia ai le tulaga lelei atoa.",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Faailoa atu le aofaiga o GPUs e te manao e faaaoga mo le aumaia e ala i le ta i totonu e tuueseese i ni faailoga (-).",
+ "Cache Dataset in GPU": "Seti o Faamatalaga o le Faamaumauga i le GPU",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Matou te faamuamua le faafoeina o le faataitaiga o le aumaia i luga o le GPU mo le vave o le faatinoga. Afai e te manao e faaaoga le CPU, na o le tuu lava o le avanoa o le GPU.",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "O le aofaiga o autu o le CPU e faaaoga i le faagasologa o le aumaia. O le faatulagaga Tiumasani o au autu cpu, lea e fautuaina mo le tele o tulaga.",
+ "Index Algorithm": "Algorithm o le Faasino Upu",
+ "Overtraining Detector": "Tagata e Faateleina le Aoaoina",
+ "Cache the dataset in GPU memory to speed up the training process.": "Faaputuputu le seti o faamatalaga i le GPU e faavave ai le faagasologa o aoaoga.",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "O le faaaogaina o le taitaiga o le maualuga, e mafai ai ona faaatagia le leo o le uluai leo, e aofia ai lona maualuga. E faapitoa lava le taua o lenei vaega mo pesega ma isi tulaga e taua ai le faasaoina o le uluai fati po o le mamanu o le maualuga.",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Matou te faamuamua le faafoeina o le faataitaiga o le muai faagaoioiga i luga o le GPU mo le vave o le faatinoga. Afai e te manao e faaaoga le CPU, na o le tuu lava o le avanoa o le GPU.",
+ "Overtraining Detector Settings": "Faatulagaga o le Faailoiloina o le Soona Aoaoina",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "O le KMeans o se auala e faaputu ai faamatalaga e vaevae ai le seti o faamatalaga i ni faaputuga K. E aoga faapitoa lava lenei faatulagaga mo seti o faamatalaga tetele.",
+ "Overtraining Threshold": "Amataga o le Soona Aoaoina",
+ "Extract Features": "Vaega o le Sii Mai",
+ "Fresh Training": "Aoaoga Fou",
+ "Start Training": "Amata Aoaoga",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Ia iloa le soona aoaoina e taofia ai le faataitaiga mai le aoaoina lelei o faamatalaga o aoaoga ma le leai ai o se tomai e faalautele ai faamatalaga fou.",
+ "Generate Index": "Faatupuina o le Faasino Upu",
+ "Export Model": "Faataitaiga o le Auina Atu",
+ "Stop Training": "Taofi Aoaoga",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Seti le aofaiga maualuga o vaitau e te manao e taofi ai le aoaoina o lau faataitaiga pe afai e leai se faaleleiga e iloa.",
+ "Exported Pth file": "Faila Pth ua auina atu",
+ "Voice Model": "Faataitaiga o le Leo",
+ "Upload": "Sii mai",
+ "Select the pth file to be exported": "Filifili le faila pth e auina atu",
+ "Index File": "Faila o le Faasino Upu",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "Faatoa mafai ona faatagaina lenei faatulagaga pe afai o loo e aoaoina se faataitaiga fou mai le amataga pe toe amata le aoaoga. Tapeese uma mamafa na maua muamua ma ogalaau o le tensorboard.",
+ "Select the index file to be exported": "Filifili le faila o le faasinoupu e auina atu",
+ "Single": "Nofofua",
+ "Refresh": "Toe faafou",
+ "Unload Voice": "Leo e Le'i Tuuina",
+ "Upload Audio": "Sii Mai le Otio",
+ "Select the index file to use for the conversion.": "Filifili le faila o le faasinoupu e faaaoga mo le liua.",
+ "Select Audio": "Filifili le Otio",
+ "Select the voice model to use for the conversion.": "Filifili le faataitaiga o le leo e faaaoga mo le liua.",
+ "Advanced Settings": "Faatulagaga Maualuga",
+ "Select the audio to convert.": "Filifili le leo e liliu mai ai.",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "O le faamau 'Upload' e mo na o le google colab: E sii mai ai faila ua auina atu i le faila ApplioExported i lau Google Drive.",
+ "Exported Index file": "Faila o le Faasino Upu ua Auina Atu",
+ "Output Path": "Ala o le La",
+ "Custom Output Path": "Ala Masani o le La",
+ "Export Format": "Faatulagaga o le Auina Atu",
+ "Split Audio": "Vaeluaina le Otio",
+ "Select the format to export the audio.": "Filifili le faatulagaga e auina atu ai le leo.",
+ "Autotune": "Faatulaga Otometi",
+ "Clean Audio": "Otio Mama",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Faamama Mea e Faaaoga (Tapeese uma otio i aseta/otio)",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Vaevae le leo i ni vaega mo le faaiuga ina ia maua ai ni taunuuga sili atu i nisi o tulaga.",
+ "Upscale Audio": "Otio Faaopoopo",
+ "Clean Strength": "Malosi Mama",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Faaaoga se faatulagaga vaivai i au faaiuga, fautuaina mo le faaliliuina o pesepesega.",
+ "Formant Shifting": "Formant Shifting",
+ "Browse presets for formanting": "Saili muai seti mo le muai faaaogaina",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "O le ala o le a sefe ai le leo e faasalalau mai ai, e ala i le Tiumasani i aseta/otio/output.wav",
+ "Default value is 1.0": "O le tulaga Tiumasani o le 1.0",
+ "Pitch": "Maualuga",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Faamama lau leo e faaaoga ai le auala e iloa ai le pisapisao, fautuaina mo le tautala i leo.",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Faataga le fesuisuiai o fomu. Faaaoga mo alii i tamaitai ma isi itu.",
+ "Quefrency for formant shifting": "Faateleina mo le fesuisuiai o le formant",
+ "Filter Radius": "Faamama Atufalega",
+ "Search Feature Ratio": "Fec maualuga o vaega o sailiga",
+ "Presets are located in /assets/formant_shift folder": "O loo i ai muai seti i le /assets/formant_shift folder",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Seti le tulaga o le faamamaina i le leo e te manao i ai, o le tele foi lena o lou faateleina o le faamamaina, ae e mafai ona faateleina le faaitiitia o le leo.",
+ "Timbre for formant shifting": "Timbre mo le fesuisuiai o le formant",
+ "Volume Envelope": "Teutusi o le Voluma",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Seti le maualuga o le leo, o le maualuga foi lea o le tulaga faatauaina, o le maualuga foi lea o le maualuga o le maualuga.",
+ "Convert": "Liua",
+ "Protect Voiceless Consonants": "Puipuia Consonants e Leai ni Leo",
+ "Pitch extraction algorithm": "Algorithm o le sailia o le maualuga",
+ "Export Audio": "Auina Atu le Otio",
+ "Batch": "Faatasiga",
+ "Input Folder": "Faila e Ta i Totonu",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Faateleina le leo i se tulaga lelei maualuga atu, fautuaina mo otio e le lelei tele. (E ono umi se taimi e faagaoioia ai le leo)",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Afai e sili atu pe tutusa le numera ma le tolu, o le faaaogaina o le faamamaina ogatotonu i taunuuga o le leo ua aoina mai e i ai le gafatia e faaitiitia ai le manava.",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Algorithm o le sailia o le maualuga e faaaoga mo le liuaina o le leo. O le algorithm Tiumasani o le rmvpe, lea e fautuaina mo le tele o tulaga.",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Sui pe tuufaatasia ma le teutusi o le voluma o le mea e maua mai ai. O le latalata atu o le fuafaatatau i le 1, o le tele foi lena o le faaaogaina o le teutusi e maua mai ai.",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Uunaiga e faatinoina e le faila o le faasinoupu; o se tulaga faatauaina maualuga atu e fetaui ma le faatosinaga sili atu. Ae peitai, o le filifili mo ni tulaga maualalo e mafai ona fesoasoani e faaitiitia ai mea e faaaoga i le leo.",
+ "Enter input path": "Ta i totonu le ala e ta ai i totonu",
+ "Output Folder": "Faila o Mea e Faaaoga",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Ia malupuipuia ia consonants ma leo manava e taofia ai le saeia o leo faaeletonika ma isi mea e faaaoga i le eletise. O le tosoina o le paramita i lona tau maualuga o le 0.5 e maua ai le puipuiga atoatoa. Ae peitai, o le faaitiitia o lenei tulaga faatauaina e ono faaitiitia ai le tele o le puipuiga ae faaitiitia ai le aafiaga o le faasinoupuina o faasinoupu.",
+ "Enter output path": "Ta i totonu le ala e maua ai",
+ "Select the folder containing the audios to convert.": "Filifili le faila o loo i ai otio e faaliliu ai.",
+ "Get information about the audio": "Aumai faamatalaga e uiga i le leo",
+ "## Voice Blender": "## Voice Blender",
+ "Voice Blender": "Leo Blender",
+ "Fusion": "Fusion",
+ "Drag and drop your model here": "Toso ma faapalasi lau faataitaiga iinei",
+ "Blend Ratio": "Fec maualuga o le Tuufaatasiga",
+ "Path to Model": "Ala i le Faataitaiga",
+ "Model information to be placed": "Faataitaiga o faamatalaga e tatau ona tuu",
+ "Inroduce the model information": "Faataitai le faamatalaga o le faataitaiga",
+ "Enter path to model": "Ta i totonu le ala i le faataitaiga",
+ "Model extraction": "Faataitaiga o le aumaia",
+ "View": "Maimoa",
+ "View model information": "Maimoa i faamatalaga faataitai",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Filifili ni faataitaiga leo se lua, seti le pasene o le tuufaatasiga e te manao i ai, ma tuufaatasia i se leo fou atoa.",
+ "Introduce the model pth path": "Faailoa atu le ala faataitai pth",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "O le fetuunaia o le tulaga agai i le tasi itu po o le isi o le a atili ai ona tutusa le faataitaiga ma le itu muamua po o le lua.",
+ "You can also use a custom path.": "E mafai foi ona e faaaogaina se ala masani.",
+ "Pth file": "Faila PTH",
+ "Model conversion": "Faataitaiga o le liua",
+ "Output of the pth file": "La o le faila pth",
+ "The information to be placed in the model (You can leave it blank or put anything).": "O faamatalaga e tuu i le faataitaiga (E mafai ona e tuu avanoa pe tuu soo se mea).",
+ "Extract F0 Curve": "Sii mai le F0 Pioga",
+ "Record": "Faamaumau",
+ "Stop Recording": "Taofi le Faamaumauina",
+ "See Model Information": "Tagai i le Faataitaiga o Faamatalaga",
+ "## Download Model": "## Sii mai le Faataitaiga",
+ "# How to Report an Issue on GitHub": "# Auala e Lipoti atu ai se Faafitauli i le GitHub",
+ "Introduce the model .pth path": "Faailoa atu le ala .pth faataitai",
+ "Model Link": "Sootaga Faataitai",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Alu i le [GitHub Issues](https://github.com/IAHispano/Applio/issues) ma kiliki i le faamau 'Lomiga Fou'.",
+ "Record Screen": "Lau o Faamaumauga",
+ "Download Model": "Sii mai le Faataitaiga",
+ "Introduce the model link": "Faailoa atu le sootaga faataitai",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "O le pioga f0 e faatusa i le eseesega i le tafailagi faavae o se leo i le aluga o taimi, e faaalia ai le auala e oso ae ai ma pau ai le maualuga.",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Kiliki i le faamau 'Lau o Faamaumauga' o loo i lalo e amata ai ona pueina le faafitauli o loo e oo i ai.",
+ "## Drop files": "## Faapalasi faila",
+ "## Search Model": "## Faataitaiga o Sailiga",
+ "Search": "Saili",
+ "Select the folder where the output audios will be saved.": "Filifili le faila o le a sefe ai leo e faasalalau mai ai.",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Faatumu le mamanu o le lomiga ua saunia, ia mautinoa ua aofia ai faamatalaga auiliili pe a manaomia, ma faaaoga le vaega o aseta e sii mai ai le faila ua faamaumauina mai le laasaga na muamua atu.",
+ "Introduce the model name to search.": "Faailoa atu le igoa o le faataitaiga e saili ai.",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Toso lau faila .pth ma le faila .index i le avanoa lenei. Toso le tasi ona sosoo ai lea ma le isi.",
+ "## Download Pretrained Models": "## Sii mai Faataitaiga Muai Aoaoina",
+ "TTS Voices": "Leo o le TTS",
+ "And select the sampling rate": "Ma filifili le saoasaoa o le faataitaiga.",
+ "Select the pretrained model you want to download.": "Filifili le faataitaiga ua uma ona aoaoina e te manao e sii mai.",
+ "We couldn't find models by that name.": "Sa le mafai ona matou maua ni faataitaiga i lena igoa.",
+ "TTS Speed": "Saoasaoa o le TTS",
+ "Increase or decrease TTS speed.": "Faateleina pe faaitiitia le saoasaoa o le TTS.",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. O le taimi lava e uma ai ona e pueina le faafitauli, kiliki i le faamau 'Taofi le Faamaumauina' (o le faamau lava lea e tasi, ae e suia le faailoga e faalagolago lea pe o e pueina ma le mataalia pe leai).",
+ "Select the TTS voice to use for the conversion.": "Filifili le leo o le TTS e faaaoga mo le liua.",
+ "Text to Synthesize": "Anotusi i le Fatufaatasia",
+ "Upload a .txt file": "Sii mai se faila .txt",
+ "Input path for text file": "Ala e ta ai i totonu mo faila tusitusia",
+ "Enter text to synthesize": "Ta i totonu anotusi e synthesize ai",
+ "Output Path for TTS Audio": "Ala o le La mo le Otio TTS",
+ "Enter the text to synthesize.": "Ta i totonu le anotusi e fatu ai.",
+ "Enable fake GPU": "Faatagaina faafoliga GPU",
+ "Output Path for RVC Audio": "Ala e Faasalalau Ai mo le Otio RVC",
+ "The path to the text file that contains content for text to speech.": "O le ala i le faila tusitusia o loo i ai anotusi mo le tusiga i le tautala.",
+ "Enable Applio integration with Discord presence": "Faataga le faaaogaaga o le Applio ma le i ai o le Feeseeseaiga",
+ "Enable Applio integration with applio.org/models using flask": "Faataga le faaaogaaga o le Applio ma applio.org/models e faaaoga ai le fagu",
+ "Restart Applio": "Toe Amata le Applio",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "O le a faaaoga ai le avanoa e faaali atu ai le gaoioiga o loo i ai nei o le Applio i le Feeseeseaiga.",
+ "Language": "Gagana",
+ "Theme": "Autu",
+ "It will activate the possibility of downloading models with a click from the website.": "O le a faaaoga ai le avanoa e sii mai ai faataitaiga i se kiliki mai le uepisaite.",
+ "Select the theme you want to use. (Requires restarting Applio)": "Filifili le autu e te manao e faaaoga. (E manaomia ai le toe amataina o le Applio)",
+ "Precision": "Sa'o",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "O aoaoga faamasani ua le lagolagoina i le taimi nei ona o le leai o se GPU. Ina ia faagaoioia le faailoga o aoaoga, alu i le faailoga o le faatulagaga ma faataga le filifiliga 'Faafoliga GPU'.",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Faagaoioia le faailoga o le nofoaafi. Ae peitai, faamolemole ia matau e le o i ai i lenei masini ni gafatia GPU, o lea e le lagolagoina ai aoaoga. O lenei filifiliga e mo na o faamoemoega o suega. (O le filifiliga lenei o le a toe amata ai le Applio)",
+ "Update precision": "Faafou le maelega ae",
+ "Plugin Installer": "Faapipiiina o le Faapipii",
+ "Select the language you want to use. (Requires restarting Applio)": "Filifili le gagana e te manao e faaaoga. (E manaomia ai le toe amataina o le Applio)",
+ "Select the precision you want to use for training and inference.": "Filifili le mea e te manao e faaaoga mo aoaoga ma faaiuga.",
+ "Version Checker": "Tagata e Siakiina le Lomiga",
+ "Post-Process": "Faagaoioiga",
+ "Drag your plugin.zip to install it": "Toso lau plugin.zip e faapipii ai",
+ "Check for updates": "Siaki mo ni faafouga",
+ "Reverb": "Reverb",
+ "Apply reverb to the audio.": "Faaaoga le faaleotele leo i le leo.",
+ "Reverb Room Size": "Telē o le Potu Faaaloalo",
+ "Set the room size of the reverb.": "Seti le tele o le potu o le faama'i.",
+ "Reverb Wet Gain": "Tupe Susu o le Reverb",
+ "Check which version of Applio is the latest to see if you need to update.": "Siaki po o le fea lomiga o le Applio o le lomiga aupito lata mai lea e vaai ai pe manaomia ona e faafouina.",
+ "Post-process the audio to apply effects to the output.": "Faagaoioia le leo ina ia faaaoga ai aafiaga i le mea e maua mai ai.",
+ "Set the wet gain of the reverb.": "Seti le susu o le faama'i.",
+ "Reverb Dry Gain": "Tupe Mamago o le Reverb",
+ "Set the damping of the reverb.": "Seti le faavaivai o le faama'i.",
+ "Reverb Width": "Lautele o le Reverb",
+ "Set the dry gain of the reverb.": "Seti le tupe mamago o le faamago.",
+ "Reverb Damping": "Faamamāina o le Reverb",
+ "Reverb Freeze Mode": "Faiga o le Freeze Reverb",
+ "Pitch Shift": "Sifi o le Maualuga",
+ "Set the width of the reverb.": "Seti le lautele o le faaleotele leo.",
+ "Set the freeze mode of the reverb.": "Seti le faiga o le aisa o le faamalama.",
+ "Pitch Shift Semitones": "Pitch Shift Semitones",
+ "Limiter": "Faatapulaa",
+ "Apply pitch shift to the audio.": "Faaaoga le sifi o le maualuga i le leo.",
+ "Apply limiter to the audio.": "Faaaoga le faatapulaa i le leo.",
+ "Gain": "Maua",
+ "Limiter Threshold dB": "Faatapulaaina o le Amataga dB",
+ "Set the pitch shift semitones.": "Seti ni semitones o le sifi o le maualuga.",
+ "Limiter Release Time": "Taimi e Faamalolo ai le Faatapulaa",
+ "Set the limiter threshold dB.": "Seti le amataga o le faatapulaa dB.",
+ "Distortion": "Faaseseina",
+ "Apply gain to the audio.": "Faaaoga le tupe maua i le leo.",
+ "Set the limiter release time.": "Seti le taimi e faamatuu atu ai le faatapulaa.",
+ "Gain dB": "Maua dB",
+ "Distortion Gain": "Mauaina o le Faaseseina",
+ "Set the gain dB.": "Seti le dB o le tupe maua.",
+ "Apply distortion to the audio.": "Faaaoga le faaseseina i le leo.",
+ "Chorus": "Aufaipese",
+ "Set the distortion gain.": "Seti le tupe maua o le faaseseina.",
+ "Apply chorus to the audio.": "Faaaoga le tali i le leo.",
+ "Chorus Rate Hz": "Saoasaoa o le Aufaipese Hz",
+ "Chorus Depth": "Loloto o le Aufaipese",
+ "Set the chorus depth.": "Seti le loloto o le tali.",
+ "Chorus Feedback": "Manatu Faaalia o le Aufaipese",
+ "Set the chorus rate Hz.": "Seti le saoasaoa o le tali Hz.",
+ "Set the chorus center delay ms.": "Seti le ogatotonu o le tali e faatuai ai ms.",
+ "Chorus Mix": "Faafefiloi o le Aufaipese",
+ "Set the chorus feedback.": "Seti manatu faaalia o le tali.",
+ "Bitcrush": "Bitcrush",
+ "Bitcrush Bit Depth": "Loloto o le Bitcrush Bit",
+ "Chorus Center Delay ms": "Faatuai le Nofoaga Autu o le Aufaipese ms",
+ "Clipping": "Otiina",
+ "Set the chorus mix.": "Seti le faafefiloi o le tali.",
+ "Apply bitcrush to the audio.": "Faaaoga le bitcrush i le leo.",
+ "Set the bitcrush bit depth.": "Seti le loloto o le bitcrush.",
+ "Apply clipping to the audio.": "Faaaoga le tipiina i le leo.",
+ "Clipping Threshold": "Tulaga o le Otiina",
+ "Compressor": "Compressor",
+ "Set the clipping threshold.": "Seti le amataga o le tipi.",
+ "Apply compressor to the audio.": "Faaaoga le masini e faaaoga ai le leo.",
+ "Compressor Threshold dB": "Compressor Threshold dB",
+ "Compressor Ratio": "Fec maualuga o le Compressor",
+ "Compressor Attack ms": "Osofaiga Compressor MS",
+ "Set the compressor threshold dB.": "Seti le amataga o le compressor dB.",
+ "Set the compressor ratio.": "Seti le fuafaatatau o le compressor.",
+ "Compressor Release ms": "Faamalologa o le Compressor ms",
+ "Delay": "Faatuai",
+ "Apply delay to the audio.": "Faatuai le leo.",
+ "Set the compressor release ms.": "Seti le masini e tatala ai le masini ms.",
+ "Delay Seconds": "Faatuai Sekone",
+ "Set the compressor attack ms.": "Seti le osofaiga a le compressor ms.",
+ "Set the delay seconds.": "Seti sekone e faatuai ai.",
+ "Delay Feedback": "Faatuai Manatu Faaalia",
+ "Custom Embedder": "Tagata e Faapipiiina i Totonu",
+ "Set the delay feedback.": "Seti manatu faaalia o le faatuai.",
+ "Delay Mix": "Faatuai le Faafefiloi",
+ "Folder Name": "Igoa o le Faila",
+ "Select Custom Embedder": "Filifili le Faapipii Masani",
+ "Refresh embedders": "Toe faafou ia mea e faapipii ai",
+ "Set the delay mix.": "Seti le faafefiloi o le faatuai.",
+ "Upload .json": "Sii mai .json",
+ "model information": "faamatalaga faataitai",
+ "Upload .bin": "Sii mai .bin",
+ "Move files to custom embedder folder": "Sii faila i le faila e faapipii ai mea e masani ai",
+ "Speaker ID": "ID o le failauga",
+ "Model Creator": "Foafoa Faataitai",
+ "Name of the model creator. (Default: Unknown)": "Igoa o le tagata na foafoaina le faataitaiga. (Tiumasani: E le mailoa)",
+ "Select the speaker ID to use for the conversion.": "Filifili le ID o le failauga e faaaoga mo le liua.",
+ "Model Author Name": "Igoa o le Tusitala Faataitai",
+ "The name that will appear in the model information.": "O le igoa o le a faaali mai i le faamatalaga o le faataitaiga.",
+ "Set name": "Seti le igoa",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "Seti le malosi o le faatulagaina otometi - o le tele lava o lou faateleina o le tele foi lena o le a faapipii i le auivi o le chromatic."
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/sr_RS.json b/assets/i18n/languages/sr_RS.json
new file mode 100644
index 0000000000000000000000000000000000000000..28d5bbe85ddb77f4cd0e478e5dec88a67243ff35
--- /dev/null
+++ b/assets/i18n/languages/sr_RS.json
@@ -0,0 +1,328 @@
+{
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "Jednostavan alat visokog kvaliteta za glasovnu konverziju fokusiran na lakom korišćenju i izvođenju.",
+ "This section contains some extra utilities that often may be in experimental phases.": "Ovaj odeljak sadrži dodatne alate koji su često u eksperimentalnim fazama.",
+ "Output Information": "Informacije o izlazu",
+ "The output information will be displayed here.": "Informacije o izlazu će biti prikazane ovde.",
+ "Inference": "Zaključivanje",
+ "Train": "Treniranje",
+ "Extra": "Dodatno",
+ "Merge Audios": "Spoji zvukove",
+ "Processing": "Obrada",
+ "Audio Analyzer": "Analizator zvuka",
+ "Model Information": "Informacije o modelu",
+ "Plugins": "Dodaci",
+ "Download": "Preuzmi",
+ "Report a Bug": "Prijavi grešku",
+ "Settings": "Podešavanja",
+ "Preprocess": "Preprocesiranje",
+ "Audio cutting": "Sečenje zvuka",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "Preporučuje se da deaktivirate ovu opciju ako je vaš skup podataka već obrađen.",
+ "Process effects": "Obradi efekte",
+ "Model Name": "Ime modela",
+ "Name of the new model.": "Ime novog modela.",
+ "Enter model name": "Unesite ime modela",
+ "Dataset Path": "Putanja skupa podataka",
+ "Path to the dataset folder.": "Putanja do fascikle skupa podataka.",
+ "Refresh Datasets": "Osveži skupove podataka",
+ "Dataset Creator": "Kreator skupa podataka",
+ "Dataset Name": "Ime skupa podataka",
+ "Name of the new dataset.": "Ime novog skupa podataka.",
+ "Enter dataset name": "Unesite ime skupa podataka",
+ "Upload Audio Dataset": "Otpremi audio skup podataka",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Audio fajl je uspešno dodat u skup podataka. Molimo kliknite na dugme za preprocesiranje.",
+ "Enter dataset path": "Unesite putanju skupa podataka",
+ "Sampling Rate": "Stopa uzorkovanja",
+ "The sampling rate of the audio files.": "Stopa uzorkovanja audio fajlova.",
+ "Model Architecture": "Arhitektura modela",
+ "Version of the model architecture.": "Verzija arhitekture modela.",
+ "Preprocess Dataset": "Preprocesiraj skup podataka",
+ "Embedder Model": "Ugradni model",
+ "Model used for learning speaker embedding.": "Model koji se koristi za učenje ugradnje govornika.",
+ "Extract": "Ekstrakuj",
+ "Hop Length": "Dužina skoka",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Označava trajanje koje je potrebno sistemu da pređe na značajnu promenu tona. Kraće dužine skoka zahtevaju više vremena za zaključivanje, ali obično daju veću tačnost tona.",
+ "Batch Size": "Veličina serije",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Preporučuje se da se uskladi sa dostupnim VRAM-om vaše GPU kartice. Podesavanje od 4 nudi veću tačnost, ali sporiju obradu, dok 8 pruža brže i standardne rezultate.",
+ "Save Every Epoch": "Sačuvaj svaku epohu",
+ "Determine at how many epochs the model will saved at.": "Odredite na koliko epoha će model biti sačuvan.",
+ "Total Epoch": "Ukupno epoha",
+ "Specifies the overall quantity of epochs for the model training process.": "Određuje ukupnu količinu epoha za proces treniranja modela.",
+ "Pretrained": "Unapred treniran",
+ "Save Only Latest": "Sačuvaj samo najnovije",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Omogućavanje ove opcije će rezultirati time da G i D fajlovi čuvaju samo svoje najnovije verzije, što efikasno štedi prostor za skladištenje.",
+ "Save Every Weights": "Sačuvaj svaki put",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Ova opcija omogućava da sačuvate težine modela na kraju svake epohe.",
+ "Custom Pretrained": "Prilagođeni unapred treniran",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Korišćenje prilagođenih unapred treniranih modela može dovesti do boljih rezultata, jer izbor najprikladnijih unapred treniranih modela prilagođenih specifičnom slučaju može značajno poboljšati performanse.",
+ "Upload Pretrained Model": "Otpremi unapred treniran model",
+ "Refresh Custom Pretraineds": "Osveži prilagođene unapred trenirane modele",
+ "Pretrained Custom Settings": "Prilagođena podešavanja unapred treniranog modela",
+ "The file you dropped is not a valid pretrained file. Please try again.": "Fajl koji ste ubacili nije validan unapred treniran fajl. Molimo pokušajte ponovo.",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Kliknite na dugme za osvežavanje da biste videli unapred treniran fajl u padajućem meniju.",
+ "Pretrained G Path": "Putanja unapred treniranog G",
+ "Pretrained D Path": "Putanja unapred treniranog D",
+ "GPU Settings": "Podešavanja GPU-a",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Postavlja napredna podešavanja GPU-a, preporučeno za korisnike sa boljom arhitekturom GPU-a.",
+ "GPU Custom Settings": "Prilagođena podešavanja GPU-a",
+ "GPU Number": "Broj GPU-a",
+ "0 to ∞ separated by -": "0 do ∞ odvojeni sa -",
+ "The GPU information will be displayed here.": "Informacije o GPU-u će biti prikazane ovde.",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Navedite broj GPU-ova koje želite da koristite za preprocesiranje unosom brojeva odvojenih crticama (-). Trenutno, korišćenje više GPU-ova neće imati značajan efekat.",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Navedite broj GPU-ova koje želite da koristite za ekstrakciju unosom brojeva odvojenih crticama (-).",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "Broj CPU jezgara koji se koriste za preprocesiranje. Podrazumevana vrednost su vaša CPU jezgra, što se preporučuje za većinu slučajeva.",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "Broj CPU jezgara koji se koriste u procesu ekstrakcije. Podrazumevana vrednost su vaša CPU jezgra, što se preporučuje za većinu slučajeva.",
+ "GPU Information": "Informacije o GPU-u",
+ "Pitch Guidance": "Vodič za ton",
+ "Use CPU": "Koristi CPU",
+ "Force the use of CPU for training.": "Forsiraj korišćenje CPU-a za treniranje.",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Korišćenjem vodiča za ton, moguće je oponašati intonaciju originalnog glasa, uključujući ton. Ova opcija je posebno korisna za pevanje i druge situacije gde je očuvanje originalne melodije ili tonaliteta važno.",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Koristite unapred trenirane modele tokom treniranja sopstvenih modela. Ovaj pristup smanjuje vreme treniranja i poboljšava ukupni kvalitet.",
+ "Extract Features": "Eksrakuj karakteristike",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Preporučujemo da koristite GPU za brži performans ekstrakcije modela. Ukoliko želite da koristite CPU, ostavite polje za GPU prazno.",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Preporučujemo da koristite GPU za brži performans treniranja modela. Ukoliko želite da koristite CPU, ostavite GPU polje prazno.",
+ "Cache Dataset in GPU": "Keširaj skup podataka u GPU",
+ "Cache the dataset in GPU memory to speed up the training process.": "Kešira skup podataka u GPU memoriji kako bi se ubrzao postupak treniranja.",
+ "Index Algorithm": "Algoritam Indeksa",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans je algoritam koji razdvaja skupove podataka na K klastere. Ovo delimično pomaže kod većih skupova podataka.",
+ "Overtraining Detector": "Detektor Pretreniranja",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Otkrivanje pretreniranja pomaže da se model ne nauči previše dobro na treniranim podacima i ne izgubi sposobnost generalizacije na nove podatke.",
+ "Overtraining Detector Settings": "Podešavanja Detektora Pretreniranja",
+ "Overtraining Threshold": "Prag pretreniranja",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Postavite maksimalan broj epoha nakon kojih želite da vaš model prekine treniranje ako se ne otkrije napredak.",
+ "Sync Graph": "Sinhronizuj Graf",
+ "Synchronize the graph of the tensorbaord. Only enable this setting if you are training a new model.": "Sinhronizuj grafofe na tensorboard-u. Koristite ovu opciju isključivo ukoliko trenirate novi model.",
+ "Training": "Treniranje",
+ "Fresh Training": "Sveže Treniranje",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "Omogućite ovo podešavanje samo ukoliko trenirate novi model iz početka, ili želite da ponovo pokrenete treniranje. Ovo će obrisati sve generisane težine i tensorboard zapise.",
+ "Export Format": "Format Izvoza",
+ "Select the format to export the audio.": "Odaberite format za izvoz audio datoteke.",
+ "Restart Applio": "Ponovo Pokrenite Applio",
+ "Model Author Name": "Ime Autora Modela",
+ "The name that will appear in the model information.": "Ime koje će se pojaviti u informacijama o modelu.",
+ "Set name": "Podesite ime",
+ "Start Training": "Započni Treniranje",
+ "Stop Training": "Zaustavi Treniranje",
+ "Generate Index": "Generiši Indeks",
+ "Export Model": "Izvezi Model",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "Dugme 'Otpremi'je isključivo za google colab: Otprema izvezene datoteke u fasciklu ApplioExports na vašem Google disku.",
+ "Exported Pth file": "Izvezena Pth datoteka",
+ "Exported Index file": "Izvezena datoteka Indeksa",
+ "Select the pth file to be exported": "Izaberite pth datoteku koja će biti izvezena",
+ "Select the index file to be exported": "Izaberite datoteku indeksa koja će biti izvezena",
+ "Upload": "Otpremi",
+ "Voice Model": "Glasovni Model",
+ "Select the voice model to use for the conversion.": "Izaberite glasovni model koji koristite za konverziju.",
+ "Index File": "Datoteka Indeksa",
+ "Select the index file to use for the conversion.": "Izaberite datoteku indeksa koju koristite za konverziju.",
+ "Refresh": "Osveži",
+ "Unload Voice": "Otpusti glas",
+ "Single": "Pojedinačno",
+ "Upload Audio": "Otpremi Audio",
+ "Select Audio": "Izaberi Audio",
+ "Select the audio to convert.": "Izaberi audio za konvertovanje.",
+ "Advanced Settings": "Napredna Podešavanja",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Očisti Izlaze (Briše sve zvukove iz assets/audios)",
+ "Custom Output Path": "Korisnički Definisana Izlazna Putanja",
+ "Output Path": "Izlazna Putanja",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "Putanja gde će izlazni audio biti sačuvan, podrazumevano u assets/audios/output.wav",
+ "Split Audio": "Razdvoji Audio",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Razdvoji audio na manje delove prilikom inferencije kako bi se postigli bolji rezultati u nekim slučajevima.",
+ "Autotune": "Autotjun",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Primeni lagani autotjun a inferencijama, preporučuje se prilikom pevanja.",
+ "Clean Audio": "Očisti Zvuk",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Očisti zvuk koristeći algoritme za prepoznavanje šumova, preporučuje se kod govora.",
+ "Clean Strength": "Jačina Čišćenja",
+ "Upscale Audio": "Uvećaj Kvalitet Zvuka",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Uvećaj kvalitet zvuka na viši nivo, preporučuje se za zvukove niskog kvaliteta. (Obrada zvuka može potrajati duže)",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Podesite nivo čišćenja zvuka prema želji; što ga više povećavate, to će zvuk biti očišćeniji, ali je moguće da će zvuk postati kompresovaniji.",
+ "Formant Shifting": "Pomeranje Formanata",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Omogući pomeranje formanata. Koristi se za konverzije iz muškog u ženski glas i obrnuto.",
+ "Browse presets for formanting": "Pregledaj unapred podešene postavke za formantiranje",
+ "Presets are located in /assets/formant_shift folder": "Unapred podešene postavke su smeštene u /assets/formant_shift fascikli",
+ "Default value is 1.0": "Podrazumevana vrednost je 1.0",
+ "Quefrency for formant shifting": "Frekvencija za pomeranje formanata",
+ "Timbre for formant shifting": "Timbre za pomeranje formanata",
+ "Pitch": "Tonalitet",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Podesite tonalitet zvuka, viši nivo predstavlja viši tonalitet.",
+ "Filter Radius": "Poluprečnik Filtera",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Ako je broj veći ili jednak tri, primena medijan filtriranja na prikupljenim tonovima može smanjiti disanje.",
+ "Search Feature Ratio": "Odnos Funkcije Pretrage",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Uticaj koji vrši datoteka indeksa; viša vrednost odgovara većem uticaju. Međutim, izbor nižih vrednosti može pomoći u smanjenju artefakata prisutnih u zvuku.",
+ "Volume Envelope": "Oblikovanje Jačine Zvuka",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Zameni ili pomešaj sa oblikovanjem jačine zvuka izlaza. Što je odnos bliži 1, to se više koristi oblikovanje izlaza.",
+ "Protect Voiceless Consonants": "Zaštiti Bezvučne Suglasnike",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Zaštitite jasne suglasnike i zvukove disanja kako biste sprečili elektroakustično kidanje i druge artefakte. Pomeranje parametra na maksimalnu vrednost od 0,5 pruža sveobuhvatnu zaštitu. Međutim, smanjenje ove vrednosti može smanjiti stepen zaštite, dok istovremeno može umanjiti efekat indeksiranja.",
+ "Pitch extraction algorithm": "Algoritam za ekstrakciju tonaliteta",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "\"Algoritam za ekstrakciju tonova koji će se koristiti za konverziju zvuka. Podrazumevani algoritam je rmvpe, koji se preporučuje za većinu slučajeva.\"",
+ "Convert": "Konvertuj",
+ "Export Audio": "Izvezi Audio",
+ "Batch": "U Serijama",
+ "Input Folder": "Ulazna Fascikla",
+ "Select the folder containing the audios to convert.": "Izaberi fasciklu koja sadrži zvukove koje želiš da konvertuješ.",
+ "Enter input path": "Unesi ulaznu putanju",
+ "Output Folder": "Izlazna Fascikla",
+ "Select the folder where the output audios will be saved.": "Izaberi fasciklu gde će izlazni zvukovi biti sačuvani.",
+ "Enter output path": "Unesite izlaznu putanjuEnter output path",
+ "Get information about the audio": "Prikupi informacije o zvuku",
+ "## Voice Blender": "Mešač Glasa",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "\"\nOdaberite dva modela glasa, postavite željeni procenat mešanja i pomešajte ih u potpuno novi glas.",
+ "Voice Blender": "Mešač Glasa",
+ "Drag and drop your model here": "Prevucite i otpustite vaš model ovde",
+ "You can also use a custom path.": "Takođe možete koristiti korisnički definisanu putanju.",
+ "Blend Ratio": "Proporcija Mešanja",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Podešavanje pozicije više ka jednoj ili drugoj strani učiniće model sličnijim prvom ili drugom.",
+ "Fusion": "Fuzija",
+ "Path to Model": "Putanja do Modela",
+ "Enter path to model": "Unesite putanju do modela",
+ "Model information to be placed": "Informacije o modelu koje trebaju biti unesene",
+ "Inroduce the model information": "Predstavlja informacije o modelu",
+ "The information to be placed in the model (You can leave it blank or put anything).": "Informacije koje trebaju biti unesene u model (Možete ostaviti prazno, ili upisati bilo šta).",
+ "View model information": "Prikaži informacije o modelu",
+ "Introduce the model pth path": "Predstavi pth putanju modela",
+ "View": "Prikaži",
+ "Model extraction": "Ekstrakcija modela",
+ "Model conversion": "Konverzija modela",
+ "Pth file": "Pth datoteka",
+ "Output of the pth file": "Izlaz pth datoteke",
+ "Extract F0 Curve": "Ekstrakuj F0 Krivu",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "f0 kriva predstavlja varijacije u osnovnoj frekvenciji glasa tokom vremena, prikazujući kako ton raste i opada.",
+ "# How to Report an Issue on GitHub": "# Kako prijaviti problem na GitHub-u",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Kliknite na dugme 'Zabeleži ekran' ispod da biste započeli snimanje problema sa kojim se suočavate.",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Kada završite sa snimanjem problema, kliknite na dugme 'Završi snimanje' (isto dugme, ali oznaka se menja u zavisnosti od toga da li aktivno snimate ili ne).",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Idite na [GitHub Issues](https://github.com/IAHispano/Applio/issues) i kliknite na 'New Issue' dugme.",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Ispunite pruženi obrazac za problem, pazeći da uključite potrebne detalje, i iskoristite odeljak za resurse da otpremite snimljeni fajl iz prethodnog koraka.",
+ "Record Screen": "Zabeleži Ekran",
+ "Record": "Snimaj",
+ "Stop Recording": "Zaustavi Snimanje",
+ "Introduce the model .pth path": "Predstavi .pth putanju modela",
+ "See Model Information": "Pogledaj Informacije Modela",
+ "## Download Model": "## Preuzmi Model",
+ "Model Link": "Veza Do Modelas",
+ "Introduce the model link": "Predstavi vezu do modela",
+ "Download Model": "Preuzmi Model",
+ "## Drop files": "## Otpusti datoteke",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Prevucite, a zatim otpustite vašu .pth datoteku i .index datoteku do ovog prostora. Prevucite jednu, a zatim drugu datoteku.",
+ "## Search Model": "## Traži Model",
+ "Search": "Traži",
+ "Introduce the model name to search.": "Predstavite naziv modela za pretragu.",
+ "We couldn't find models by that name.": "Ne možemo pronaći modele po ovom nazivu.",
+ "## Download Pretrained Models": "## Preuzmi Unapred Trenirane Modele",
+ "Select the pretrained model you want to download.": "Izaberi unapred trenirani model koji želiš da preuzmeš.",
+ "And select the sampling rate": "I izaberi Gustinu Uzorka",
+ "TTS Voices": "TTS Glasovi",
+ "TTS Speed": "TTS Brzina",
+ "Increase or decrease TTS speed.": "Povećaj, ili smanji brzinu TTS-a.",
+ "Select the TTS voice to use for the conversion.": "Izaberi TTS glas koji želiš da koristiš za konverziju.",
+ "Text to Synthesize": "Tekst za Sintetizovanje",
+ "Enter the text to synthesize.": "Unesi tekst koji želiš da sintetizuješ.",
+ "Upload a .txt file": "Otpremi .txt datoteku",
+ "Input path for text file": "Ulazna putanja tekstualne datoteke",
+ "The path to the text file that contains content for text to speech.": "Putanja do tekstualne datoteke koja sadrži tekst koji treba pretvoriti u govor.",
+ "Enter text to synthesize": "Unesi tekst koji želiš da sintetizuješ",
+ "Output Path for TTS Audio": "Izlazna Putanja Za TTS Audio",
+ "Output Path for RVC Audio": "Izlazna Putanja Za RVC Audio",
+ "Enable Applio integration with Discord presence": "Omogući Applio integraciju sa prisustvom na Discordu.",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "To će aktivirati mogućnost prikazivanja trenutne Applio aktivnosti na Discordu.",
+ "Enable Applio integration with applio.org/models using flask": "Omogući Applio integraciju sa applio.org/models koristeći Flask.",
+ "It will activate the possibility of downloading models with a click from the website.": "To će aktivirati mogućnost preuzimanja modela jednim klikom sa veb sajta.",
+ "Enable fake GPU": "Omogući lažni GPU",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "Treniranje trenutno nije podržano zbog nedostatka GPU-a. Da biste aktivirali karticu za treniranje, idite na karticu sa podešavanjima i omogućite opciju 'Lažni GPU'.",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Activira karticu za treniranje. Međutim, molimo vas da imate na umu da ovaj uređaj nema GPU mogućnosti, stoga treniranje nije podržano. Ova opcija je samo za testne svrhe. (Ova opcija će restartovati Applio).",
+ "Theme": "Tema",
+ "Select the theme you want to use. (Requires restarting Applio)": "Izaberite temu koju želite da koristite. (Zahteva ponovo pokretanje Applio)",
+ "Language": "Jezik",
+ "Select the language you want to use. (Requires restarting Applio)": "Izaberite jezik koji želite da koristite. (Zahteva ponovo pokretanje Applio)",
+ "Precision": "Precizbnost",
+ "Select the precision you want to use for training and inference.": "Izaberite preciznost koju želite koristiti za treniranje i predviđanje.",
+ "Update precision": "Ažuriraj preciznost",
+ "Plugin Installer": "Instaler Dodataka",
+ "Drag your plugin.zip to install it": "Prevucite vaš dodatak.zip kako biste ga instalirali",
+ "Version Checker": "Proveravač Verzije",
+ "Check which version of Applio is the latest to see if you need to update.": "Proverite koja je Applio verzija poslednja, kako biste videli trebate li je nadograditi.",
+ "Check for updates": "Proveri nadogradnje",
+ "Post-Process": "Post-Procesuiranje",
+ "Post-process the audio to apply effects to the output.": "Post-Procesuirajte zvuk kako biste primenili efekte na izlazu.",
+ "Reverb": "Odjek",
+ "Apply reverb to the audio.": "Primeni odjek na zvuk.",
+ "Reverb Room Size": "Veličina Sobe Za Odjek",
+ "Set the room size of the reverb.": "Podesite veličinu sobe za odjek.",
+ "Reverb Damping": "Prigušivanje Odjeka",
+ "Set the damping of the reverb.": "Podesite prigušivanje odjeka.",
+ "Reverb Wet Gain": "Vlažni Dobitak Odjeka",
+ "Set the wet gain of the reverb.": "Podesite vlažnbi dobitak odjeka.",
+ "Reverb Dry Gain": "Suvi Dobitak Odjeka",
+ "Set the dry gain of the reverb.": "Podesite suvi dobitak odjeka.",
+ "Reverb Width": "Širina Odjeka",
+ "Set the width of the reverb.": "Podesite širinu odjeka.",
+ "Reverb Freeze Mode": "Režim Zamrzavanja Odjeka",
+ "Set the freeze mode of the reverb.": "Podesite režim zamrzavanja odjeka.",
+ "Pitch Shift": "Pomeranje Tonova",
+ "Apply pitch shift to the audio.": "Primenjuje pomeranje tonova na zvuk.",
+ "Pitch Shift Semitones": "Pomeranje Tonova U Polutonovima",
+ "Set the pitch shift semitones.": "Podešava pomeranje tonova u polutonovima.",
+ "Limiter": "Ograničavač",
+ "Apply limiter to the audio.": "Primenjuje ograničavač na zvuk.",
+ "Limiter Threshold dB": "Prag Ograničavača B",
+ "Set the limiter threshold dB.": "Podešava prag ograničavač u dB.",
+ "Limiter Release Time": "Vreme Isteka Ograničavača",
+ "Set the limiter release time.": "Podešava vreme isteka ograničavača.",
+ "Gain": "Povećanje",
+ "Apply gain to the audio.": "Primenjuje povećanje na zvuk.",
+ "Gain dB": "Povećanje dB",
+ "Set the gain dB.": "Podešava dB povećanja.",
+ "Distortion": "Distorzija",
+ "Apply distortion to the audio.": "Primenjuje distorziju na zvuk.",
+ "Distortion Gain": "Povećanje Distorzije",
+ "Set the distortion gain.": "Podešava povećanje distorzije.",
+ "Chorus": "Hor",
+ "Apply chorus to the audio.": "Primenjuje hor na zvuk.",
+ "Chorus Rate Hz": "Brzina Hora Hz",
+ "Set the chorus rate Hz.": "Podešava brzinu hora u Hz.",
+ "Chorus Depth": "Dubina Hora",
+ "Set the chorus depth.": "Podešava dubinu hora.",
+ "Chorus Center Delay ms": "Centralno Kašnjenje Hora ms",
+ "Set the chorus center delay ms.": "Podešava centralno kašnjenje hora u ms.",
+ "Chorus Feedback": "Fidbek Hora",
+ "Set the chorus feedback.": "Podešava fidbek hora.",
+ "Chorus Mix": "Miksovanje Hora",
+ "Set the chorus mix.": "Podešava miksovanje hora.",
+ "Bitcrush": "Bitno Smanjenje",
+ "Apply bitcrush to the audio.": "Primenjuje bitno smanjenje na zvuk.",
+ "Bitcrush Bit Depth": "Bitno Smanjenje Dubina Bitova",
+ "Set the bitcrush bit depth.": "Podešava dubinu bitova za bitno smanjenje.",
+ "Clipping": "Clipping",
+ "Apply clipping to the audio.": "Primenjuje clipping na zvuk.",
+ "Clipping Threshold": "Prag Clippinga",
+ "Set the clipping threshold.": "Podešava prag clippinga.",
+ "Compressor": "Kompresor",
+ "Apply compressor to the audio.": "Primenjuje kompresor na zvuk.",
+ "Compressor Threshold dB": "Prag Kompresije dB",
+ "Set the compressor threshold dB.": "Podešava prag kompresije u dB.",
+ "Compressor Ratio": "Proporcija Kompresora",
+ "Set the compressor ratio.": "Podešava proporciju kompresora.",
+ "Compressor Attack ms": "Napad Kompresora ms",
+ "Set the compressor attack ms.": "Podešava napad kompresora u ms.",
+ "Compressor Release ms": "Istek Kompresora ms",
+ "Set the compressor release ms.": "Podešava istek kompresora u ms.",
+ "Delay": "Kašnjenje",
+ "Apply delay to the audio.": "Primenjuje kašnjenje na zvuk.",
+ "Delay Seconds": "Sekunde Kašnjenja",
+ "Set the delay seconds.": "Podešava broj sekundi kašnjenja.Set the delay seconds.",
+ "Delay Feedback": "Fidbek Kašnjenja",
+ "Set the delay feedback.": "Podešava fidbek kašnjenja.",
+ "Delay Mix": "Miks Kašnjenja",
+ "Set the delay mix.": "Podešava miks kašnjenja.",
+ "Custom Embedder": "Korisnički Ugrađivač",
+ "Select Custom Embedder": "Izaberi Korisnički Ugrađivač",
+ "Refresh embedders": "Osveži Ugrađivače",
+ "Folder Name": "Naziv Fascikle",
+ "Upload .bin": "Otpremi .bin",
+ "Upload .json": "Otpremi .json",
+ "Move files to custom embedder folder": "Premesti datoteke u fasciklu za korisnički ugrađivač",
+ "model information": "informacije modela",
+ "Model Creator": "Kreator Modela",
+ "Name of the model creator. (Default: Unknown)": "Ime kreatora modela. (Podrazumevano: Nepoznat)",
+ "Speaker ID": "ID Spikera",
+ "Select the speaker ID to use for the conversion.": "Izaberite ID spikera koji želite da koristite za konverziju.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "Podesite jačinu autotjuna – što je više povećate, to će više zvuk biti prilagođen hromatskoj mreži."
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/sw_SW.json b/assets/i18n/languages/sw_SW.json
new file mode 100644
index 0000000000000000000000000000000000000000..fb1c9bbc9a2008ce5e4fcac94811da2ac720d9ef
--- /dev/null
+++ b/assets/i18n/languages/sw_SW.json
@@ -0,0 +1,325 @@
+{
+ "Extra": "Ziada",
+ "Processing": "Usindikaji",
+ "Inference": "Inference",
+ "Output Information": "Taarifa ya Pato",
+ "The output information will be displayed here.": "Taarifa ya matokeo itaonyeshwa hapa.",
+ "Training": "Mafunzo",
+ "Merge Audios": "Changanisha Sauti",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "Zana rahisi, ya hali ya juu ya uongofu wa sauti ililenga urahisi wa matumizi na utendaji.",
+ "This section contains some extra utilities that often may be in experimental phases.": "Sehemu hii ina huduma za ziada ambazo mara nyingi zinaweza kuwa katika awamu za majaribio.",
+ "Audio Analyzer": "Mchambuzi wa Sauti",
+ "Settings": "Vipimo",
+ "Model Information": "Maelezo ya Mfano",
+ "Plugins": "Plugins",
+ "Preprocess": "Mchakato wa awali",
+ "Audio cutting": "Kukata sauti",
+ "Report a Bug": "Ripoti ya Bug",
+ "Model Name": "Jina la Mfano",
+ "Name of the new model.": "Jina la model mpya.",
+ "Enter model name": "Ingiza jina la mfano",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "Inashauriwa kuzima chaguo hili ikiwa dataset yako tayari imechakatwa.",
+ "Process effects": "Madhara ya mchakato",
+ "Dataset Path": "Njia ya Dataset",
+ "Path to the dataset folder.": "Njia ya folda ya dataset.",
+ "Download": "Kupakua",
+ "Refresh Datasets": "Onyesha upya Datasets",
+ "Dataset Creator": "Muumba wa Dataset",
+ "Name of the new dataset.": "Jina la data mpya.",
+ "Enter dataset name": "Ingiza jina la dataset",
+ "Dataset Name": "Jina la Dataset",
+ "Enter dataset path": "Ingiza njia ya dataset",
+ "Upload Audio Dataset": "Pakia Dataset ya Sauti",
+ "Sampling Rate": "Kiwango cha Kusugua",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Faili ya sauti imeongezwa kwa ufanisi kwenye dataset. Tafadhali bofya kitufe cha kabla ya mchakato.",
+ "Model Architecture": "Usanifu wa Mfano",
+ "The sampling rate of the audio files.": "Kiwango cha sampuli ya faili za sauti.",
+ "Embedder Model": "Embedder Model",
+ "Preprocess Dataset": "Dataset ya Mchakato wa Kabla",
+ "Hop Length": "Urefu wa Hop",
+ "Version of the model architecture.": "Toleo la usanifu wa mfano.",
+ "Model used for learning speaker embedding.": "Mfano unaotumiwa kwa ajili ya kujifunza kupachika spika.",
+ "Batch Size": "Ukubwa wa Batch",
+ "Save Every Epoch": "Hifadhi Kila Epoch",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Inaashiria muda inachukua kwa mfumo wa mpito kwa mabadiliko makubwa ya lami. Urefu mdogo wa hop unahitaji muda zaidi kwa inference lakini huwa na kutoa usahihi wa juu wa lami.",
+ "Total Epoch": "Jumla ya Epoch",
+ "Determine at how many epochs the model will saved at.": "Tambua ni epochs ngapi mfano utahifadhiwa.",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Inashauriwa kuilinganisha na VRAM inayopatikana ya GPU yako. Mpangilio wa 4 hutoa usahihi ulioboreshwa lakini usindikaji polepole, wakati 8 hutoa matokeo ya haraka na ya kawaida.",
+ "Pretrained": "Imetayarishwa",
+ "Save Only Latest": "Hifadhi Tu Karibuni",
+ "Save Every Weights": "Kuokoa kila uzito",
+ "Custom Pretrained": "Imezuiliwa Maalum",
+ "Upload Pretrained Model": "Pakia Mfano Uliofunzwa",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Mpangilio huu unakuwezesha kuokoa uzito wa mfano katika hitimisho la kila epoch.",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Kuwezesha mpangilio huu kutasababisha faili za G na D kuokoa matoleo yao ya hivi karibuni tu, kuhifadhi nafasi ya kuhifadhi kwa ufanisi.",
+ "Refresh Custom Pretraineds": "Onyesha upya Vizuizi Maalum",
+ "Pretrained Custom Settings": "Mipangilio Maalum Iliyozuiliwa",
+ "Extract": "Chopoa",
+ "Specifies the overall quantity of epochs for the model training process.": "Inabainisha idadi ya jumla ya epochs kwa mchakato wa mafunzo ya mfano.",
+ "The file you dropped is not a valid pretrained file. Please try again.": "Faili uliyoacha sio faili halali iliyozuiliwa. Tafadhali jaribu tena.",
+ "Pretrained G Path": "G ya kawaida iliyozuiliwa",
+ "GPU Settings": "Mipangilio ya GPU",
+ "Pretrained D Path": "D iliyozuiliwa maalum",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Kutumia mifano maalum iliyozuiliwa inaweza kusababisha matokeo bora, kwani kuchagua mifano inayofaa zaidi iliyozuiliwa iliyolengwa kwa kesi maalum ya matumizi inaweza kuongeza utendaji.",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Bofya kitufe cha kuonyesha upya ili kuona faili iliyozuiliwa kwenye menyu kunjuzi ya kushuka.",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Inaweka mipangilio ya hali ya juu ya GPU, iliyopendekezwa kwa watumiaji walio na usanifu bora wa GPU.",
+ "GPU Custom Settings": "Mipangilio Maalum ya GPU",
+ "GPU Number": "Nambari ya GPU",
+ "The GPU information will be displayed here.": "Taarifa ya GPU itaonyeshwa hapa.",
+ "0 to ∞ separated by -": "0 kwa ∞ kutengwa na -",
+ "Pitch Guidance": "Mwongozo wa Pitch",
+ "GPU Information": "Taarifa ya GPU",
+ "Use CPU": "Tumia CPU",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Bainisha idadi ya GPUs unayotaka kutumia kwa mchakato wa awali kwa kuziingiza zilizotenganishwa na vistariungio (-). Kwa sasa, kutumia multi-gpu haitakuwa na athari kubwa.",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "Idadi ya cores CPU kutumia katika mchakato wa uchimbaji. Mpangilio chaguo-msingi ni cores zako za cpu, ambazo zinapendekezwa kwa hali nyingi.",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "Idadi ya cores za CPU za kutumia katika mchakato wa awali. Mpangilio chaguo-msingi ni cores zako za cpu, ambazo zinapendekezwa kwa hali nyingi.",
+ "Force the use of CPU for training.": "Kulazimisha matumizi ya CPU kwa mafunzo.",
+ "Extract Features": "Toa Vipengele",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Bainisha idadi ya GPUs unayotaka kutumia kwa kuchimba kwa kuziingiza zilizotenganishwa na vistariungio (-).",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Tumia mifano iliyofunzwa wakati wa kufundisha yako mwenyewe. Njia hii inapunguza muda wa mafunzo na huongeza ubora wa jumla.",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Kwa kutumia mwongozo wa lami, inakuwa inawezekana kuakisi kuingia kwa sauti ya asili, pamoja na lami yake. Kipengele hiki ni muhimu sana kwa kuimba na matukio mengine ambapo kuhifadhi melody ya asili au muundo wa lami ni muhimu.",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Tunaweka kipaumbele kuendesha uchimbaji wa mfano kwenye GPU kwa utendaji wa haraka. Ikiwa unapendelea kutumia CPU, acha tu uwanja wa GPU tupu.",
+ "Cache Dataset in GPU": "Cache Dataset katika GPU",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Tunaweka kipaumbele kuendesha usindikaji wa mfano kwenye GPU kwa utendaji wa haraka. Ikiwa unapendelea kutumia CPU, acha tu uwanja wa GPU tupu.",
+ "Index Algorithm": "Algorithm ya Kielezo",
+ "Overtraining Detector": "Kigunduzi cha Kuzidisha",
+ "Overtraining Threshold": "Kizuizi cha Kuzidi",
+ "Fresh Training": "Mafunzo ya Fresh",
+ "Overtraining Detector Settings": "Mipangilio ya Kigunduzi cha Kuzidisha",
+ "Start Training": "Anza Mafunzo",
+ "Cache the dataset in GPU memory to speed up the training process.": "Hifadhi dataset katika kumbukumbu ya GPU ili kuharakisha mchakato wa mafunzo.",
+ "Stop Training": "Kuacha Mafunzo",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Weka idadi ya juu ya epochs unayotaka mfano wako kuacha mafunzo ikiwa hakuna uboreshaji umegunduliwa.",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "Wezesha mpangilio huu tu ikiwa unafundisha mfano mpya kutoka mwanzo au kuanzisha upya mafunzo. Inafuta uzito wote uliozalishwa hapo awali na kumbukumbu za tensorboard.",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Kugundua overtraining kuzuia mfano kutoka kujifunza data mafunzo vizuri sana na kupoteza uwezo wa generalize kwa data mpya.",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans ni algorithm ya kuunganisha ambayo hugawanya dataset katika makundi ya K. Mpangilio huu ni muhimu sana kwa data kubwa.",
+ "Export Model": "Mfano wa kuuza nje",
+ "Exported Pth file": "Faili ya Pth iliyosafirishwa",
+ "Exported Index file": "Faili ya Kielezo Iliyosafirishwa",
+ "Generate Index": "Tengeneza Kielezo",
+ "Select the pth file to be exported": "Chagua faili ya pth ili kusafirishwa",
+ "Upload": "Kupakia",
+ "Voice Model": "Mfano wa Sauti",
+ "Select the index file to be exported": "Chagua faili ya index ili kusafirishwa",
+ "Index File": "Faili ya Kielezo",
+ "Refresh": "Onesha upya",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "Kitufe 'Upload' ni kwa ajili ya google colab tu: Inapakia faili zilizosafirishwa kwenye folda iliyosafirishwa kwenye Hifadhi yako ya Google.",
+ "Single": "Moja",
+ "Unload Voice": "Pakua Sauti",
+ "Select the voice model to use for the conversion.": "Chagua mtindo wa sauti wa kutumia kwa uongofu.",
+ "Select the index file to use for the conversion.": "Chagua faili ya kielezo ya kutumia kwa ubadilishaji.",
+ "Upload Audio": "Pakia Sauti",
+ "Select Audio": "Chagua Sauti",
+ "Select the audio to convert.": "Chagua sauti ya kubadilisha.",
+ "Advanced Settings": "Mipangilio ya hali ya juu",
+ "Custom Output Path": "Njia ya Pato Maalum",
+ "Output Path": "Njia ya Pato",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Futa Pato (Futa sauti zote katika mali/sauti)",
+ "Export Format": "Umbizo la Hamisha",
+ "Autotune": "Otomatiki",
+ "Split Audio": "Sauti ya Baidisha",
+ "Select the format to export the audio.": "Chagua umbizo la kuhamisha sauti.",
+ "Clean Audio": "Sauti safi",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "Njia ambapo sauti ya pato itahifadhiwa, kwa chaguo-msingi katika mali / sauti / output.wav",
+ "Clean Strength": "Nguvu safi",
+ "Upscale Audio": "Sauti ya Upscale",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Baidisha sauti katika vipande vya inference ili kupata matokeo bora katika baadhi ya matukio.",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Tumia autotune laini kwa inferences yako, ilipendekeza kwa ajili ya kuimba uongofu.",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Safisha pato lako la sauti kwa kutumia algorithms za kugundua kelele, zilizopendekezwa kwa sauti za kuzungumza.",
+ "Browse presets for formanting": "Vinjari seti za awali za kuunda",
+ "Formant Shifting": "Kuhama kwa Formant",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Wezesha mabadiliko ya formant. Inatumika kwa waongofu wa kiume na wa.",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Upscale sauti kwa ubora wa juu, ilipendekeza kwa sauti za ubora wa chini. (Inaweza kuchukua muda mrefu zaidi kwa mchakato wa sauti)",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Weka kiwango cha kusafisha kwa sauti unayotaka, ndivyo unavyoongeza zaidi itasafisha, lakini inawezekana kwamba sauti itabanwa zaidi.",
+ "Pitch": "Lami",
+ "Quefrency for formant shifting": "Quefrency kwa ajili ya mabadiliko ya formant",
+ "Presets are located in /assets/formant_shift folder": "Seti za awali ziko katika folda ya /assets/formant_shift",
+ "Timbre for formant shifting": "Timbre kwa ajili ya mabadiliko ya formant",
+ "Default value is 1.0": "Thamani ya chaguo-msingi ni 1.0",
+ "Filter Radius": "Radius ya Kichujio",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Weka lami ya sauti, thamani ya juu, juu ya lami.",
+ "Search Feature Ratio": "Uwiano wa Kipengele cha Utafutaji",
+ "Volume Envelope": "Bahasha ya Kiasi",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Ushawishi unaofanywa na faili ya index; Thamani ya juu inalingana na ushawishi mkubwa. Walakini, kuchagua maadili ya chini kunaweza kusaidia kupunguza mabaki yaliyopo kwenye sauti.",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Ikiwa nambari ni kubwa kuliko au sawa na tatu, kutumia uchujaji wa wastani kwenye matokeo ya sauti iliyokusanywa ina uwezo wa kupunguza upumuaji.",
+ "Convert": "Geuza",
+ "Protect Voiceless Consonants": "Kulinda konsonanti isiyo na sauti",
+ "Batch": "Bechi",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Badilisha au changanya na bahasha ya sauti ya pato. Karibu na uwiano ni 1, bahasha ya pato inaajiriwa zaidi.",
+ "Pitch extraction algorithm": "Algorithm ya uchimbaji wa Pitch",
+ "Export Audio": "Hamisha Sauti",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Pitch uchimbaji algorithm ya kutumia kwa uongofu wa sauti. Algorithm chaguo-msingi ni rmvpe, ambayo inapendekezwa kwa kesi nyingi.",
+ "Input Folder": "Folda ya Ingizo",
+ "Select the folder containing the audios to convert.": "Chagua folda iliyo na sauti za kubadilisha.",
+ "Output Folder": "Folda ya Pato",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Kulinda konsonanti tofauti na sauti za kupumua ili kuzuia machozi ya umeme-acoustic na artifacts nyingine. Kuvuta parameta kwa thamani yake ya juu ya 0.5 inatoa ulinzi kamili. Hata hivyo, kupunguza thamani hii kunaweza kupunguza kiwango cha ulinzi wakati uwezekano wa kupunguza athari ya kuorodhesha.",
+ "Get information about the audio": "Pata habari kuhusu audio",
+ "Enter input path": "Ingiza njia ya ingizo",
+ "Select the folder where the output audios will be saved.": "Chagua folda ambapo sauti za pato zitahifadhiwa.",
+ "Voice Blender": "Blender ya Sauti",
+ "## Voice Blender": "## Sauti ya Blender",
+ "Fusion": "Fusion",
+ "You can also use a custom path.": "Unaweza pia kutumia njia ya kawaida.",
+ "Drag and drop your model here": "Buruta na uache mtindo wako hapa",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Chagua mifano miwili ya sauti, weka asilimia yako ya mchanganyiko unayotaka, na uchanganye kuwa sauti mpya kabisa.",
+ "Enter path to model": "Ingiza njia ya mfano",
+ "Inroduce the model information": "Inroduce habari ya mfano",
+ "Model information to be placed": "Maelezo ya mfano ya kuwekwa",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Kurekebisha nafasi zaidi kuelekea upande mmoja au mwingine itafanya mfano sawa na wa kwanza au wa pili.",
+ "View model information": "Tazama maelezo ya mfano",
+ "Enter output path": "Ingiza njia ya pato",
+ "Path to Model": "Njia ya Mfano",
+ "Introduce the model pth path": "Anzisha njia ya mfano ya pth",
+ "View": "Mwoneko",
+ "The information to be placed in the model (You can leave it blank or put anything).": "Maelezo ya kuwekwa katika mfano (Unaweza kuiacha tupu au kuweka chochote).",
+ "Model extraction": "Uchimbaji wa mfano",
+ "Pth file": "Faili ya Pth",
+ "Model conversion": "Uongofu wa mfano",
+ "Output of the pth file": "Pato la faili ya pth",
+ "Blend Ratio": "Uwiano wa Blend",
+ "# How to Report an Issue on GitHub": "# Jinsi ya kuripoti suala kwenye GitHub",
+ "Record Screen": "Skrini ya Rekodi",
+ "Extract F0 Curve": "Toa Mtao wa F0",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "Curve ya f0 inawakilisha tofauti katika mzunguko wa msingi wa sauti kwa muda, kuonyesha jinsi lami inavyoinuka na kuanguka.",
+ "Stop Recording": "Acha Kurekodi",
+ "Record": "Rekodi",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Bonyeza kitufe cha 'Record Screen' hapa chini ili kuanza kurekodi suala unalopitia.",
+ "Introduce the model .pth path": "Anzisha njia ya mfano .pth",
+ "See Model Information": "Tazama Maelezo ya Mfano",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Mara baada ya kumaliza kurekodi suala hilo, bonyeza kitufe cha 'Komesha Kurekodi' (kitufe sawa, lakini lebo hubadilika kulingana na ikiwa unarekodi kikamilifu au la).",
+ "Model Link": "Kiungo cha Mfano",
+ "## Download Model": "## Pakua Mfano",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Kamilisha template ya suala iliyotolewa, kuhakikisha kujumuisha maelezo kama inahitajika, na utumie sehemu ya mali kupakia faili iliyorekodiwa kutoka hatua ya awali.",
+ "Introduce the model link": "Anzisha kiungo cha mfano",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Nenda kwenye [Masuala ya GitHub](https://github.com/IAHispano/Applio/issues) na ubofye kitufe cha 'Suala Jipya'.",
+ "## Drop files": "## Drop files",
+ "Search": "Tafutiza",
+ "## Search Model": "## Mfano wa Utafutaji",
+ "Introduce the model name to search.": "Anzisha jina la mfano wa kutafuta.",
+ "## Download Pretrained Models": "## Pakua Mifano Iliyofunzwa",
+ "We couldn't find models by that name.": "Hatukuweza kupata mifano kwa jina hilo.",
+ "TTS Voices": "Sauti ya TTS",
+ "TTS Speed": "Kasi ya TTS",
+ "Download Model": "Pakua Mfano",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Buruta faili yako ya .pth na faili ya .index kwenye nafasi hii. Buruta moja na kisha nyingine.",
+ "Select the pretrained model you want to download.": "Chagua mfano uliozuiliwa ambao unataka kupakua.",
+ "Increase or decrease TTS speed.": "Kuongeza au kupunguza kasi ya TTS.",
+ "And select the sampling rate": "Na chagua kiwango cha sampuli.",
+ "Text to Synthesize": "Matini ya Synthesize",
+ "Select the TTS voice to use for the conversion.": "Chagua sauti ya TTS kutumia kwa uongofu.",
+ "Input path for text file": "Njia ingizo ya faili ya matini",
+ "Enter the text to synthesize.": "Ingiza matini ili kuwiana.",
+ "Upload a .txt file": "Pakia faili ya .txt",
+ "The path to the text file that contains content for text to speech.": "Njia ya faili ya maandishi ambayo ina maudhui ya maandishi kwa hotuba.",
+ "Enter text to synthesize": "Ingiza matini ili kuunganisha",
+ "Output Path for RVC Audio": "Njia ya Pato kwa Sauti ya RVC",
+ "Enable Applio integration with Discord presence": "Wezesha ujumuishaji wa Applio na uwepo wa Discord",
+ "Enable fake GPU": "Wezesha GPU bandia",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "Itaamsha uwezekano wa kuonyesha shughuli ya sasa ya Applio katika Discord.",
+ "Output Path for TTS Audio": "Njia ya Pato kwa Sauti ya TTS",
+ "It will activate the possibility of downloading models with a click from the website.": "Itaamsha uwezekano wa kupakua mifano kwa kubofya kutoka kwa wavuti.",
+ "Theme": "Mandhari",
+ "Restart Applio": "Anzisha upya Applio",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Inawasha kichupo cha treni. Walakini, tafadhali kumbuka kuwa kifaa hiki hakina uwezo wa GPU, kwa hivyo mafunzo hayatumiki. Chaguo hili ni kwa madhumuni ya majaribio tu. (Chaguo hili litaanzisha upya Applio)",
+ "Language": "Lugha",
+ "Enable Applio integration with applio.org/models using flask": "Wezesha ujumuishaji wa Applio na applio.org/models kwa kutumia flask",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "Mafunzo kwa sasa hayatumiki kwa sababu ya kutokuwepo kwa GPU. Ili kuamsha kichupo cha mafunzo, nenda kwenye kichupo cha mipangilio na uwashe chaguo la 'Fake GPU'.",
+ "Select the theme you want to use. (Requires restarting Applio)": "Chagua mandhari unayotaka kutumia. (Inahitaji kuanzisha upya Applio)",
+ "Select the language you want to use. (Requires restarting Applio)": "Chagua lugha unayotaka kutumia. (Inahitaji kuanzisha upya Applio)",
+ "Precision": "Usahihi",
+ "Select the precision you want to use for training and inference.": "Chagua usahihi unaotaka kutumia kwa mafunzo na inference.",
+ "Plugin Installer": "Kisakinishi cha Plugin",
+ "Version Checker": "Kikagua Toleo",
+ "Check for updates": "Angalia kwa sasisho",
+ "Update precision": "Sasisha usahihi",
+ "Post-Process": "Mchakato wa baada ya",
+ "Drag your plugin.zip to install it": "Buruta plugin.zip yako ili kuisakinisha",
+ "Reverb": "Reverb",
+ "Check which version of Applio is the latest to see if you need to update.": "Angalia ni toleo gani la Applio ni la hivi karibuni kuona ikiwa unahitaji kusasisha.",
+ "Post-process the audio to apply effects to the output.": "Baada ya mchakato wa sauti ili kutumia athari kwa pato.",
+ "Apply reverb to the audio.": "Tumia reverb kwa sauti.",
+ "Reverb Damping": "Kupungua kwa Reverb",
+ "Set the room size of the reverb.": "Weka ukubwa wa chumba cha reverb.",
+ "Set the damping of the reverb.": "Weka damping ya reverb.",
+ "Reverb Wet Gain": "Reverb Wet Gain",
+ "Reverb Room Size": "Ukubwa wa Chumba cha Reverb",
+ "Reverb Dry Gain": "Reverb Dry Gain",
+ "Set the width of the reverb.": "Weka upana wa reverb.",
+ "Reverb Freeze Mode": "Hali ya Kufungia ya Reverb",
+ "Reverb Width": "Upana wa Reverb",
+ "Set the wet gain of the reverb.": "Weka faida ya mvua ya reverb.",
+ "Pitch Shift": "Pitch Shift",
+ "Set the freeze mode of the reverb.": "Weka hali ya kufungia ya reverb.",
+ "Pitch Shift Semitones": "Pitch Shift Semitones",
+ "Limiter": "Kidhibiti",
+ "Set the pitch shift semitones.": "Weka semitones ya mabadiliko ya lami.",
+ "Apply pitch shift to the audio.": "Tumia mabadiliko ya lami kwa sauti.",
+ "Apply limiter to the audio.": "Tumia kikomo kwa sauti.",
+ "Limiter Threshold dB": "Limiter Threshold dB",
+ "Set the dry gain of the reverb.": "Weka faida kavu ya reverb.",
+ "Set the limiter threshold dB.": "Weka kizingiti cha kikomo dB.",
+ "Limiter Release Time": "Muda wa Kutolewa kwa Kikomo",
+ "Gain": "Kupata",
+ "Set the limiter release time.": "Weka muda wa kutolewa kwa kikomo.",
+ "Apply gain to the audio.": "Tumia faida kwa sauti.",
+ "Gain dB": "Pata dB",
+ "Set the gain dB.": "Weka faida ya dB.",
+ "Distortion": "Unyang'anyi",
+ "Apply distortion to the audio.": "Tumia upotoshaji kwa sauti.",
+ "Chorus": "Chorus",
+ "Distortion Gain": "Faida ya Unyang'anyi",
+ "Set the distortion gain.": "Weka faida ya kupotosha.",
+ "Apply chorus to the audio.": "Tumia chorus kwa sauti.",
+ "Chorus Rate Hz": "Kiwango cha Chorus Hz",
+ "Chorus Depth": "Kina cha Chorus",
+ "Set the chorus rate Hz.": "Weka kiwango cha chorus Hz.",
+ "Set the chorus depth.": "Weka kina cha chorus.",
+ "Chorus Mix": "Mchanganyiko wa Chorus",
+ "Chorus Feedback": "Maoni ya Chorus",
+ "Set the chorus center delay ms.": "Weka ucheleweshaji wa kituo cha chorus ms.",
+ "Chorus Center Delay ms": "Kituo cha Chorus cha Kuchelewesha ms",
+ "Set the chorus feedback.": "Weka maoni ya chorus.",
+ "Bitcrush": "Bitcrush",
+ "Set the chorus mix.": "Weka mchanganyiko wa chorus.",
+ "Bitcrush Bit Depth": "Kina cha bitcrush kidogo",
+ "Apply bitcrush to the audio.": "Tumia bitcrush kwenye sauti.",
+ "Apply clipping to the audio.": "Tumia kunakili kwenye sauti.",
+ "Set the bitcrush bit depth.": "Weka kina kidogo cha bitcrush.",
+ "Clipping Threshold": "Threshold ya Kunakili",
+ "Set the clipping threshold.": "Weka kizingiti cha kunakili.",
+ "Compressor": "Mfinyazo",
+ "Apply compressor to the audio.": "Tumia compressor kwa sauti.",
+ "Compressor Ratio": "Uwiano wa Mfinyazo",
+ "Compressor Threshold dB": "Mfinyazo wa Threshold dB",
+ "Set the compressor threshold dB.": "Weka kizingiti cha compressor dB.",
+ "Set the compressor attack ms.": "Weka mashambulizi ya compressor ms.",
+ "Set the compressor ratio.": "Weka uwiano wa compressor.",
+ "Compressor Attack ms": "Mashambulizi ya Mfinyazo ms",
+ "Delay": "Kuchelewa",
+ "Compressor Release ms": "Kutolewa kwa Finyazo ms",
+ "Set the compressor release ms.": "Weka toleo la compressor ms.",
+ "Delay Feedback": "Maoni ya Kuchelewesha",
+ "Delay Seconds": "Sekunde za Kuchelewesha",
+ "Set the delay seconds.": "Weka sekunde za kuchelewesha.",
+ "Apply delay to the audio.": "Tumia kuchelewa kwa sauti.",
+ "Set the delay feedback.": "Weka maoni ya kuchelewa.",
+ "Delay Mix": "Mchanganyiko wa Kuchelewa",
+ "Set the delay mix.": "Weka mchanganyiko wa kuchelewesha.",
+ "Select Custom Embedder": "Chagua Embedder Maalum",
+ "Custom Embedder": "Custom Embedder",
+ "Move files to custom embedder folder": "Hamisha faili kwenye folda ya kupachika maalum",
+ "model information": "Maelezo ya mfano",
+ "Upload .json": "Pakia .json",
+ "Upload .bin": "Pakia .bin",
+ "Folder Name": "Jina la folda",
+ "Model Creator": "Muumba wa Mfano",
+ "Speaker ID": "Kitambulisho cha Spika",
+ "Name of the model creator. (Default: Unknown)": "Jina la muumbaji wa mfano. (Chaguo-msingi: haijulikani)",
+ "Select the speaker ID to use for the conversion.": "Chagua kitambulisho cha spika ili kutumia kwa uongofu.",
+ "Model Author Name": "Jina la Mwandishi wa Mfano",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "Weka nguvu ya autotune - ndivyo unavyoongeza zaidi itapiga kwenye gridi ya chromatic.",
+ "Set name": "Weka jina",
+ "Clipping": "Kunakili",
+ "Refresh embedders": "Onyesha upya vipachikaji",
+ "The name that will appear in the model information.": "Jina ambalo litaonekana katika taarifa ya mfano."
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/ta-IN.json b/assets/i18n/languages/ta-IN.json
new file mode 100644
index 0000000000000000000000000000000000000000..6ed053f1d08a745e2ff4fa0b2d009a046b1a8954
--- /dev/null
+++ b/assets/i18n/languages/ta-IN.json
@@ -0,0 +1,195 @@
+{
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "முழுமையான குரல் குளோனிங் கருவி, அநாகரமாக ஒருமிக்க, பகுக்காதது, பயனர் உருவாக்கத்திற்கு உயரியது.\n[தமிழ் மொழிபெயர்ப்பு: Enes](https://discord.com/users/1140031358006202468)",
+ "This section contains some extra utilities that often may be in experimental phases.": "இந்த பிரிவில் சேர்ந்துள்ள கொடுமை கருவிகளில் சார்ந்த பல கூட்டுத்தரங்களைக் கொண்டுள்ளது.",
+ "Output Information": "வெளியீடு தகவல்",
+ "The output information will be displayed here.": "வெளியீடு தகவல் இங்கே காட்டப்படும்.",
+ "Inference": "கருத்து",
+ "Train": "பயிற்சி",
+ "Extra": "கூடுதல்",
+ "Merge Audios": "ஒரேபோனில் ஒன்றாக்குக",
+ "Processing": "செயலாக்கம்",
+ "Audio Analyzer": "ஆடியோ பகுப்பாய்வாளர்",
+ "Model Information": "மாதிரி தகவல்",
+ "Plugins": "பிளகின்கள்",
+ "Download": "பதிவிறக்கம்",
+ "Report a Bug": "பிழை அறிக்கை",
+ "Settings": "அமைப்புகள்",
+ "Preprocess": "முன்பாகவும்",
+ "Model Name": "மாதிரி பெயர்",
+ "Name of the new model.": "புதிய மாதிரி பெயர்.",
+ "Enter model name": "மாதிரி பெயரை உள்ளிடவும்",
+ "Dataset Path": "தரவுத்தொகுதி பாதை",
+ "Path to the dataset folder.": "தரவுத்தொகுதி கோப்புக்கு பாதை.",
+ "Refresh Datasets": "தரவுத்தொகுதிகளை புதுப்பிக்கவும்",
+ "Dataset Creator": "தரவுத்தொகுதி உருவாக்கி",
+ "Dataset Name": "தரவுத்தொகுதி பெயர்",
+ "Name of the new dataset.": "புதிய தரவுத்தொகுதி பெயர்.",
+ "Enter dataset name": "தரவுத்தொகுதி பெயரை உள்ளிடவும்",
+ "Upload Audio Dataset": "ஆடியோ தரவுத்தொகுதியை பதிவேற்றவும்",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "ஆடியோ கோப்பு தரவுத்தொகுதிக்கு வெற்றிகரமாக சேர்க்கப்பட்டுள்ளது. தயவுசெய்து முன்னிருப்பை அழுத்தவும்.",
+ "Enter dataset path": "தரவுத்தொகுதி பாதையை உள்ளிடவும்",
+ "Sampling Rate": "மாதிரி விகிதம்",
+ "The sampling rate of the audio files.": "ஆடியோ கோப்புகளின் மாதிரி விகிதம்.",
+ "Model Architecture": "RVC பதிப்பு",
+ "Version of the model architecture.": "மாதிரி RVC பதிப்பு.",
+ "Preprocess Dataset": "முன்பாகவும் தரவுத்தொகுதி",
+ "Embedder Model": "உள்ளீடு மாதிரி",
+ "Model used for learning speaker embedding.": "பேச்சாளர் உள்ளீட்டை கற்க பயன்படுத்தப்படும் மாதிரி.",
+ "Extract": "எக்ஸ்ட்ராக்ட்",
+ "Hop Length": "ஹாப் நீளம்",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "கருத்துக்கு எவ்வளவு நேரம் எடுத்துக் கொள்கிறது என்றால், அது ஒரு முக்கிய பிச் மாற்றத்திற்கு அமைந்துகொள்கின்றது. சிறிய ஹாப் நீளங்களுக்கு அதிக நேரம் தேவைப்படுகின்றது ஆனால் அவை உயரமான பிச் சரிசெய்தியை உருவாக்க உதவுகின்றன.",
+ "Batch Size": "பேட்ச் அளவு",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "உங்கள் GPU கிடைக்கும் கிடைச்சதை அவசியமாக உள்ளிட பரிந்திருக்கின்றது. 4 என்ற அமைப்பு உயர்த்தப்பட்ட உறுதியுள்ள சொல்லத்தைக் கொண்டுள்ளது ஆனால் அதிக நேரம் பயன்படுகின்றது, 8 அமைப்பு விரைவாக மற்றும் நிலைக்குப் பொருத்தப்படுகிறது.",
+ "Save Every Epoch": "ஒவ்வொரு காலமும் சேமிக்கவும்",
+ "Determine at how many epochs the model will saved at.": "மாதிரி எதிர்காலங்களில் எத்தனை படிப்புகளில் மாதிரியைச் சேமிக்க விரும்புகிறீர்கள்.",
+ "Total Epoch": "மொத்த எபக்",
+ "Specifies the overall quantity of epochs for the model training process.": "மாதிரி பயிற்சி செய்திகளின் மொத்த அளவை குறிப்பிடுகிறது.",
+ "Pretrained": "பூர்வதயாரிக",
+ "Save Only Latest": "கடைசியே சேமிக்கவும்",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "இந்த அமைப்பை இயக்கும் போது G மற்றும் D கோப்புகள் உங்கள் கடைசி பதிப்புகளைச் சேமிக்கும், வாயிலாக சேமிக்கப்படுகின்றன.",
+ "Save Every Weights": "ஒவ்வொரு எடைக்கும் சேமிக்கவும்",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "இந்த அமைப்பு உங்கள் மாதிரி பயிற்சி செய்தியின் முடிவில் மாதிரிகளை சேமிக்க அனுமதிக்கின்றது.",
+ "Custom Pretrained": "கஸ்டம் பூர்வதயாரிக",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "கஸ்டம் பூர்வதயாரிக மாதிரிகளை பயன்படுத்துவது சிறந்த விளக்கங்களை தரலாம், குறிப்பிடுகின்ற குழப்பத்திற்கு ஏற்றதும் பூர்வதயாரிக மாதிரிகளைத் தேர்ந்தெடுக்க உடனே அந்தக் குழப்பத்தை அபூர்வமாக செயல்படுத்தலாம்.",
+ "Upload Pretrained Model": "பூர்வதயாரிக மாதிரி மோடெலை பதிவேற்றவும்",
+ "Refresh Custom Pretraineds": "கஸ்டம் பூர்வதயாரிகளை புதுப்பிக்கவும்",
+ "Pretrained Custom Settings": "கஸ்டம் பூர்வதயாரிக அமைப்புகள்",
+ "The file you dropped is not a valid pretrained file. Please try again.": "நீங்கள் பொருத்தவில்லை என்றால் பூர்வதயாரிக கோப்பு அல்ல. மீண்டும் முயற்சிக்கவும்.",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "கீழேயுள்ள பட்டி பட்டியில் பூர்வதயாரிக கோப்புக்கு உருவாக்க முயலுங்கள்.",
+ "Pretrained G Path": "கஸ்டம் பூர்வதயாரிக G பாதை",
+ "Pretrained D Path": "கஸ்டம் பூர்வதயாரிக D பாதை",
+ "GPU Settings": "GPU அமைப்புகள்",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "மேலும் முதிர்ச்சியான GPU அமைப்புகளை அமைக்கின்றது, உடனடியான GPU கருவிக்கு பரிந்திரமான பயனாளர்களுக்கு பரிந்துரிக்கப்படுகிறது.",
+ "GPU Custom Settings": "GPU கஸ்டம் அமைப்புகள்",
+ "GPU Number": "GPU எண்",
+ "0 to ∞ separated by -": "0 இரு ∞ பிரிவாக - வாக்கப்பட்டு",
+ "GPU Information": "GPU தகவல்",
+ "Pitch Guidance": "பிச் வழிநிரப்பல்",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "பிச் வழிநிரப்பல் மூலம், மூல குரலின் ஒலிக்கோட்டைக் கண்டுகொள்வது சாத்தியமாகின்றது, அதன் பிச்சை கூட. இந்த அம்சம் குரல் பாடலுக்கும் மற்றும் உலாவிகளுக்கும் மூல இசை அல்லது பிச் முதிரையைக் காப்பாற்ற எளியதாக இருக்கும்.",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "உங்கள் பயிற்சியில் உங்கள் தனிப்பட்ட மாதிரிகளை பயன்படுத்துவது பூர்வதயாரிக மாதிரிகளை பயன்படுத்துவது குரல் பயிற்சி காலத்தை குறைக்கின்றது மற்றும் மொத்த தரவின் உயர்த்துத்தை அதிகரிக்கின்றது.",
+ "Extract Features": "அம்சங்கள் எடு",
+ "Overtraining Detector": "அதிகமாக பயிற்சிப்படுத்தும் அறிவுப்பால்",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "பயிற்சிப்படுத்தும் தரவை மிகவும் நன்றாக அறியும் பாதுகாப்பு மூலம் மாதிரி பயிற்சிப்படுத்துதலை தடுக்க, புதிய தரவுக்கு பொதுவாக பொருத்தமாக மாற்ற அனுமதியை இழக்குகிறது.",
+ "Overtraining Detector Settings": "அதிக பயிற்சிப்படுத்தும் அறிவுப்பால் அமைப்புகள்",
+ "Overtraining Threshold": "அதிக பயிற்சிப்படுத்தும் அறிவுப்பால் அதிகம்",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "அதிகமாக பயிற்சிப்படுத்தும் தரவு அறியப்படாதால் உங்கள் மாதிரியின் பயிற்சிப்படுத்தும் மொத்த எண்ணிக்கையை அமைக்கவும்.",
+ "Start Training": "பயிற்சி ஆரம்பிக்கவும்",
+ "Stop Training & Restart Applio": "பயிற்சி நிறுத்து & புதுப்பிக்க Applio",
+ "Generate Index": "சுருக்கம் உருவாக்கு",
+ "Export Model": "ஏற்றுமதி மாதிரி",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "'பதிவேற்று' பொத்தான்கள் உள்ளீட்டிற்கு மட்டுமே கூகுள் கோலாப் சேமிப்பகத்திற்கு கடைசியாக கூகுள் டிரைவில் உங்கள் ApplioExported கோப்புக்கு ஏற்றுமதிக்கும்.",
+ "Exported Pth file": "ஏற்றுமதிக்கப்பட்ட Pth கோப்பு",
+ "Exported Index file": "ஏற்றுமதிக்கப்பட்ட சுட்டி கோப்பு",
+ "Select the pth file to be exported": "ஏற்றுமதிக்க வேண்டிய pth கோப்பைத் தேர்ந்தெடுக்கவும்",
+ "Select the index file to be exported": "ஏற்றுமதிக்க வேண்டிய சுட்டி கோப்பைத் தேர்ந்தெடுக்கவும்",
+ "Upload": "பதிவேற்று",
+ "Voice Model": "குரல் மாதிரி",
+ "Select the voice model to use for the conversion.": "மாற்றத்திற்கு பயன்படுத்த விரும்பும் குரல் மாதிரியை தேர்ந்தெடுக்கவும்.",
+ "Index File": "சுருக்க கோப்பு",
+ "Select the index file to use for the conversion.": "மாற்றத்திற்கு பயன்படுத்த உள்ள சுருக்க கோப்பை தேர்ந்தெடுக்கவும்.",
+ "Refresh": "புதுப்பிக்கவும்",
+ "Unload Voice": "குரல் அமைதி",
+ "Single": "ஒற்றை",
+ "Upload Audio": "ஒலியை பதிவேற்று",
+ "Select Audio": "ஒலியைத் தேர்ந்தெடு",
+ "Select the audio to convert.": "மாற்றுவதற்கு ஒலியைத் தேர்ந்தெடு.",
+ "Advanced Settings": "மேம்பாடு அமைப்புகள்",
+ "Clear Outputs (Deletes all audios in assets/audios)": "வெற்றிகளை அழித்தல் (assets/audios உள்ள அனைத்து ஒலிகளையும் நீக்கும்)",
+ "Custom Output Path": "கஸ்டம் வெற்றிப் பாதை",
+ "Output Path": "வெற்றி பாதை",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "வெற்றிகள் உள்ளிடப்பட்ட ஒலியைச் சேமிக்கப்படும் பாதை, பொதுவாக assets/audios/output.wav இல்.",
+ "Split Audio": "ஒலியை பிரித்தல்",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "கொலுசுகளாக ஒலியை பிரிக்க, சில நிலைகளில் சிறப்பு விளக்கங்களைப் பெற விரும்புகின்றது.",
+ "Autotune": "ஆட்டோடியூன்",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "உங்கள் முன்னோடிகளுக்கு ஒரு மென்னுரை ஆட்டோடியூனை பயன்படுத்தவும், பாடல் மாற்றங்களுக்கு பரிந்துரிக்கப்படுகின்றது.",
+ "Clean Audio": "சுத்தமான ஒலி",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "உங்கள் ஒலி வெற்றியை சுத்தமாக்க, பேசும் ஒலிகளுக்கு பரிந்துரிக்கப்படுகின்றது.",
+ "Clean Strength": "சுத்த வலிமை",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "நீங்கள் விரும்பும் ஒலிக்கு சுத்தமாக்க விளக்கு, அதை அதிகரிக்கும்போது அது அதிகரிக்கும், ஆனால் ஒலி குறுகியாக இருக்கலாம்.",
+ "Pitch": "பிச்",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "ஒலியின் பிச் அமைக்கவும், மதிப்பு உயரானதும் அதிகமாகும்.",
+ "Filter Radius": "குழப்பத்தின் அருகு",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "எண் மூலம் மூன்று அல்லது அதனை விட அதிகமாக இருந்தால், சேகரித்த இசை முடிவுகளில் இயலுமை குறைவாகும் என்று சொல்லப்படுகின்றது.",
+ "Search Feature Ratio": "தேடல் அம்ச விகிதம்",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "இடைவரிசு கோப்பின் மூலம் உள்ள பாதியான ஒருவரிடத்திற்கு உருவாகும் அந்தக் கோப்பு; அதிக மதிப்பு அதிக உருவாகும் என்று அர்த்தம். எனவே, குறோக்கின் குறைந்த மதிப்புகளைத் தேர்வுசெய்வதால் ஒலியில் உள்ள கலப்புகளைத் தவிர்க்க உதவலாம்.",
+ "Volume Envelope": "அளவு என்வெலோப்",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "வெற்றியின் அளவு என்வெலோப் இல் மாறியது அல்லது இணைந்தது. விளக்கு அந்த விகிதம் 1 க்கு அழைத்திருந்தால், வெற்றியின் அளவு என்வெலோப் பயன்படும்.",
+ "Protect Voiceless Consonants": "குரலின் இல்லாத ஸ்வரக்களைக் காப்பாற்றவும்",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "எலக்ட்ரோ-ஒலி கொழுகு மற்றும் பிற கலப்புகளை தடுக்குவதற்கு விரிவான ஸ்வரக்களுக்கு மற்றும் சுவாசத் தானங்களுக்கு பாதுகாக்க. இந்த அளவுக்கு அதிகமாக 0.5 க்கு அழைத்துக் கொள்வது பொருத்தமான பாதுகாப்பை வழங்குகின்றது. ஆனால், இந்த மதிப்பை குறைந்ததாக்கின்றார் என்றால், பாதுகாப்புக்குரிய நிலை குறைந்துவிடப்படலாம் மற்றும் அதுவே இந்தக் குறோக்குனை பரிந்துரிக்கும் என்று எச்சரிக்கை தரகின்றது.",
+ "Pitch extraction algorithm": "பிச் எக்ஸ்டிரக்ஷன் அளவுத் தொகுப்பு",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "ஒலி மாற்றத்திற்கு பயன்படுத்த வேண்டிய பிச் எக்ஸ்டிரக்ஷன் அளவுத் தொகுப்பு. இயல்பான அளவுத் தொகுப்பு rmvpe ஆகும், இது அதிகமாக பரிந்துரிக்கப்படுகின்றது.",
+ "Convert": "மாற்று",
+ "Export Audio": "ஒலியை ஏற்றுமதி செய்",
+ "Batch": "பேட்ச்",
+ "Input Folder": "உள்ளிடும் கோப்பு",
+ "Select the folder containing the audios to convert.": "மாற்ற ஒலிகளைக் கொண்ட கோப்புகளைக் கொண்ட கோப்புக்கு தேர்ந்தெடு.",
+ "Enter input path": "உள்ளிடும் பாதையை உள்ளிடுக",
+ "Output Folder": "வெற்றி கோப்பு",
+ "Select the folder where the output audios will be saved.": "வெற்றிகளைச் சேமிக்கப்படும் கோப்புக்கு தேர்ந்தெடு.",
+ "Enter output path": "வெற்றியின் பாதையை உள்ளிடுக",
+ "Get information about the audio": "ஒலியை பற்றிய தகவல் பெறுக",
+ "## Voice Blender": "## குரல் பிளெண்டர்",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "இரண்டு குரல் மாதிரிகளைத் தேர்வு செய்து, விரும்பிய குரல் சதவீதம் அமைக்கவும், அவைகளை முழுமையாக ஒரு புதிய குரலாக பிளெண்டுகின்றன.",
+ "Voice Blender": "குரல் பிளெண்டர்",
+ "Drag and drop your model here": "உங்கள் மாதிரி இங்கே எழுதவும்",
+ "You can also use a custom path.": "நீங்கள் கஸ்டம் பாதையையும் பயன்படுத்தலாம்.",
+ "Blend Ratio": "குரல் சதவீதம்",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "ஒரு பக்கத்திற்கு அல்லது மற்றும் மற்றும் அதிகமாக செய்யும் உள்ளீடு இரட்டிப் பார்த்துக் கொள்ளுதல் மாதிரியாகின்றது.",
+ "Fusion": "ஐக்கியம்",
+ "Path to Model": "மாதிரிக்கு பாதை",
+ "Enter path to model": "மாதிரிக்கு பாதையை உள்ளிடுக",
+ "Model information to be placed": "இருந்து விடப்பட வேண்டிய மாதிரி தகவல்",
+ "Introduce the model information": "மாதிரி தகவல் அறிமுகம்",
+ "The information to be placed in the model (You can leave it blank or put anything).": "மாதிரிக்கு வைக்கப்பட வேண்டிய தகவல் (நீங்கள் அந்தச் செயலை விட அந்தச் செய்யாமல் அனைத்ததையும் வைக்கலாம்).",
+ "View model information": "மாதிரி தகவலைக் காண்க",
+ "Introduce the model pth path": "மாதிரி pth பாதையை உள்ளிடுக",
+ "View": "காண்க",
+ "Model extraction": "மாதிரி எடுத்தல்",
+ "Model conversion": "மாதிரி மாற்றம்",
+ "Pth file": "Pth கோப்பு",
+ "Output of the pth file": "Pth கோப்பின் வெளியேற்றம்",
+ "# How to Report an Issue on GitHub": "# GitHub-ல் ஒரு பிரச்சினையை புகாரளிக்குவது எப்படி",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. நீங்கள் அந்தப் பிரச்சினையை பரிசோதிக்கும் கீழே 'திரையை பதிகம் செய்யும்' பொத்தானை கிளிக் செய்யவும்.",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. நீங்கள் அந்தப் பிரச்சினையை பரிசோதித்துக் கொண்டிருக்கின்றீர்கள், அந்தச் செய்யப்படும் பொத்தானை கிளிக் செய்யவும் (இது நீங்கள் சொல்லப்படும் பொத்தான், ஆனால் நீங்கள் எந்தவேணையும் செய்யக்கூடிய நிலையின் போது பொத்தானின் பெயர் மாறுகின்றது).",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. [GitHub Issues](https://github.com/IAHispano/Applio/issues) க்கு செல்லவும் மற்றும் 'புதிய பிரச்சினை' பொத்தானை கிளிக் செய்யவும்.",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. வழுதுணர்ந்து, தேவையான விவரங்களைக் கொண்டு விரிவாக பிரச்சினை பதிவேடு செய்து, முந்தைய படித்த கோப்பை பதிவேடுக்கு பயன்படுத்தலாம்.",
+ "Record Screen": "திரையை பதிகம் செய்க",
+ "Record": "பதிகம் செய்க",
+ "Stop Recording": "பதிகம் நிறுத்துக",
+ "Introduce the model .pth path": "மாதிரி .pth பாதையை உள்ளிடுக",
+ "See Model Information": "மாதிரி தகவலைக் காண்க",
+ "## Download Model": "## மாதிரி பதிவிறக்கம்",
+ "Model Link": "மாதிரி இணைப்பு",
+ "Introduce the model link": "மாதிரி இணைப்பை உள்ளிடுக",
+ "Download Model": "மாதிரி பதிவிறக்கம்",
+ "## Drop files": "## கோப்புகளை விழுக",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "உங்கள் .pth கோப்பு மற்றும் .index கோப்பை இந்த இடத்திற்கு எழுதுங்கள். ஒருவருக்கு பிறகு ஒருவருக்கு எழுதுங்கள்.",
+ "## Search Model": "## மாதிரி தேடு",
+ "Search": "தேடு",
+ "Introduce the model name to search.": "தேடுவதற்கு மாதிரிப் பெயரை அறிமுகப்படுத்து.",
+ "We couldn't find models by that name.": "அந்த பெயரில் மாதிரிகளைக் கண்டுபிடிக்க முடியவில்லை.",
+ "TTS Voices": "TTS குரல்கள்",
+ "Select the TTS voice to use for the conversion.": "மாற்றத்திற்கு பயன்படுத்த உள்ள TTS குரலை தேர்ந்தெடுக்கவும்.",
+ "Text to Synthesize": "சிந்தனை செய்ய உள்ள உரை",
+ "Enter the text to synthesize.": "சிந்தனை செய்ய உள்ள உரையை உள்ளிடுக.",
+ "Upload a .txt file": "அல்லது .txt கோப்பை பதிவேற்றலாம்",
+ "Enter text to synthesize": "சிந்தனை செய்ய உள்ள உரையை உள்ளிடுக",
+ "Output Path for TTS Audio": "TTS குரலுக்கான வெளியேற்ற பாதை",
+ "Output Path for RVC Audio": "RVC குரலுக்கான வெளியேற்ற பாதை",
+ "Enable Applio integration with Discord presence": "Discord உள்ளிட்டது உள்ளிடத்துடன் Applio ஒருவருக்கு இயங்குதல் இயல்புநிலை செய்தியை இயக்குங்கள்",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "இது Applio செயல்திறனை Discord-ல் காண்பிக்க முடியும்.",
+ "Enable Applio integration with applio.org/models using flask": "flask ஐப் பயன்படுத்தி applio.org/models உடன் Applio ஒருவருக்கு இயங்குதல் இயல்புநிலை செய்தியை இயக்குங்கள்",
+ "It will activate the possibility of downloading models with a click from the website.": "இது இணையத்திலிருந்து ஒரு கிளிக்குட்டுடன் மாதிரிகளை பதிவிறக்க முடியும்.",
+ "Enable fake GPU": "கப்பூ ஜி.பி.யூ ஐ இயக்கு",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "ஒரு ஜி.பி.யூ இல்லாமல் தற்போது பயிற்சிப்படுத்தல் ஆதரிக்கப்படவில்லை. பயிற்சிக்கு பட்டி செயல்முறையை செயலாக்க, அமைப்புகள் பட்டியலில் செல்ல, 'பெயர் ஜி.பி.யூ' விருப்பத்தை இயக்கவும்.",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "பயிற்சிக்கு பட்டி செயலாக்கிறது. எனவே, இந்த சாதனம் ஜி.பி.யூ திறன் இல்லையாம், அதனால் பயிற்சி ஆதரிக்கப்படவில்லை. இந்த விருப்பம் மட்டுமே சோதனை காரணங்களுக்காக உள்ளது. (இந்த விருப்பம் Applio ஐ மீண்டும் திரும்பியிருப்பதற்காக)",
+ "Theme": "தீமா",
+ "Select the theme you want to use. (Requires restarting Applio)": "நீங்கள் பயன்படுத்த விரும்பும் தீமையை தேர்ந்தெடுக்கவும். (Applio-ஐ மீளவே போகும்)",
+ "Language": "மொழி",
+ "Select the language you want to use. (Requires restarting Applio)": "நீங்கள் பயன்படுத்த விரும்பும் மொழியை தேர்ந்தெடுக்கவும். (Applio-ஐ மீளவே போகும்)",
+ "Plugin Installer": "பிளகின் நிறுவி",
+ "Drag your plugin.zip to install it": "உங்கள் plugin.zip கோப்பை இதுக்கு இழுக்கவும் அதை நிறுவுக",
+ "Version Checker": "பதிப்பு சரிபார்க்கல்",
+ "Check which version of Applio is the latest to see if you need to update.": "நீங்கள் புதியதாகப் புதுப்பிக்க வேண்டும் என்பதை பார்க்க, Applio இன் எந்த பதிப்பு சரிபார்க்கவும்.",
+ "Check for updates": "புதுப்பிக்கவும்"
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/te_TE.json b/assets/i18n/languages/te_TE.json
new file mode 100644
index 0000000000000000000000000000000000000000..abf93fc5a8b940e98d29ab7d24b66726e848a758
--- /dev/null
+++ b/assets/i18n/languages/te_TE.json
@@ -0,0 +1,325 @@
+{
+ "Inference": "అనిమితి",
+ "Training": "శిక్షణ",
+ "Extra": "అదనం",
+ "Processing": "ప్రాసెసింగ్",
+ "Plugins": "Plugins",
+ "Audio Analyzer": "Audio Analyzer",
+ "Output Information": "అవుట్ పుట్ సమాచారం",
+ "Model Information": "నమూనా సమాచారం",
+ "Download": "డౌన్ లోడ్ చేసుకోండి",
+ "Merge Audios": "ఆడియోలను విలీనం చేయండి",
+ "Report a Bug": "బగ్ ని రిపోర్ట్ చేయండి",
+ "Preprocess": "ప్రీప్రాసెస్",
+ "Settings": "సెట్టింగ్ లు",
+ "The output information will be displayed here.": "అవుట్ పుట్ సమాచారం ఇక్కడ ప్రదర్శించబడుతుంది.",
+ "Audio cutting": "ఆడియో కటింగ్",
+ "Model Name": "మోడల్ పేరు",
+ "Process effects": "ప్రాసెస్ ప్రభావాలు",
+ "Name of the new model.": "కొత్త మోడల్ పేరు..",
+ "Dataset Path": "Dataset Path",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "సరళమైన, అధిక-నాణ్యత వాయిస్ మార్పిడి సాధనం ఉపయోగం మరియు పనితీరుపై దృష్టి సారించింది.",
+ "Refresh Datasets": "రిఫ్రెష్ డేటాసెట్ లు",
+ "Dataset Creator": "డేటాసెట్ సృష్టికర్త",
+ "Enter model name": "మోడల్ పేరు నమోదు చేయండి",
+ "Dataset Name": "డేటాసెట్ పేరు",
+ "Name of the new dataset.": "కొత్త డేటాసెట్ పేరు.",
+ "Path to the dataset folder.": "డేటాసెట్ ఫోల్డర్ కు మార్గం.",
+ "This section contains some extra utilities that often may be in experimental phases.": "ఈ విభాగంలో కొన్ని అదనపు ఉపయోగాలు ఉన్నాయి, అవి తరచుగా ప్రయోగాత్మక దశలలో ఉండవచ్చు.",
+ "Sampling Rate": "నమూనా రేటు",
+ "Enter dataset name": "డేటాసెట్ పేరును నమోదు చేయండి",
+ "Upload Audio Dataset": "ఆడియో డేటాసెట్ అప్ లోడ్ చేయండి",
+ "Model Architecture": "మోడల్ ఆర్కిటెక్చర్",
+ "Enter dataset path": "డేటాసెట్ మార్గాన్ని నమోదు చేయండి",
+ "Extract": "ఉద్ధరించు",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "మీ డేటాసెట్ ఇప్పటికే ప్రాసెస్ చేయబడి ఉంటే ఈ ఎంపికను డీయాక్టివేట్ చేయాలని సిఫార్సు చేయబడింది.",
+ "The sampling rate of the audio files.": "ఆడియో ఫైల్స్ యొక్క నమూనా రేటు.",
+ "Preprocess Dataset": "ప్రీప్రాసెస్ Dataset",
+ "Embedder Model": "ఎంబెడర్ మోడల్",
+ "Hop Length": "హాప్ పొడవు",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "ఆడియో ఫైల్ డేటాసెట్ కు విజయవంతంగా జోడించబడింది. దయచేసి ప్రీప్రాసెస్ బటన్ మీద క్లిక్ చేయండి.",
+ "Version of the model architecture.": "మోడల్ ఆర్కిటెక్చర్ యొక్క వెర్షన్.",
+ "Batch Size": "బ్యాచ్ పరిమాణం",
+ "Total Epoch": "మొత్తం యుగం",
+ "Save Every Epoch": "ప్రతి యుగాన్ని కాపాడండి",
+ "Model used for learning speaker embedding.": "స్పీకర్ ఎంబెడింగ్ నేర్చుకోవడానికి ఉపయోగించే మోడల్.",
+ "Custom Pretrained": "Custom Pretrained",
+ "Save Only Latest": "సేవ్ ఓన్లీ లేటెస్ట్",
+ "Pretrained": "ప్రీ ట్రైనింగ్ చేయబడింది",
+ "Determine at how many epochs the model will saved at.": "మోడల్ ఎన్ని యుగాలలో సేవ్ చేయబడుతుందో నిర్ణయించండి.",
+ "Save Every Weights": "ప్రతి బరువులను ఆదా చేయండి",
+ "Upload Pretrained Model": "ప్రీ ట్రైన్డ్ మోడల్ అప్ లోడ్ చేయండి",
+ "Specifies the overall quantity of epochs for the model training process.": "మోడల్ ట్రైనింగ్ ప్రాసెస్ కొరకు యుగాల యొక్క మొత్తం పరిమాణాన్ని నిర్దేశిస్తుంది.",
+ "Pretrained D Path": "Custom Pretrained D",
+ "Pretrained G Path": "Custom Pretrained G",
+ "Refresh Custom Pretraineds": "రిఫ్రెష్ కస్టమ్ ప్రీ ట్రైన్డ్ లు",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "గణనీయమైన పిచ్ మార్పుకు సిస్టమ్ పరివర్తన చెందడానికి పట్టే వ్యవధిని సూచిస్తుంది. చిన్న హాప్ పొడవులు అంచనా వేయడానికి ఎక్కువ సమయం అవసరం, కానీ అధిక పిచ్ ఖచ్చితత్వాన్ని ఇస్తాయి.",
+ "Pretrained Custom Settings": "ముందస్తుగా శిక్షణ పొందిన కస్టమ్ సెట్టింగ్ లు",
+ "GPU Settings": "GPU సెట్టింగ్ లు",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "ఈ అమరిక ప్రతి యుగం ముగింపులో మోడల్ యొక్క బరువులను సేవ్ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది.",
+ "GPU Custom Settings": "GPU కస్టమ్ సెట్టింగ్ లు",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "దీన్ని మీ జీపీయూలో అందుబాటులో ఉన్న వీఆర్ఏఎంతో అనుసంధానం చేసుకోవడం మంచిది. 4 యొక్క అమరిక మెరుగైన ఖచ్చితత్వాన్ని అందిస్తుంది కాని నెమ్మదిగా ప్రాసెసింగ్ చేస్తుంది, అయితే 8 వేగవంతమైన మరియు ప్రామాణిక ఫలితాలను అందిస్తుంది.",
+ "The file you dropped is not a valid pretrained file. Please try again.": "మీరు డ్రాప్ చేసిన ఫైల్ చెల్లుబాటు అయ్యే ముందస్తు శిక్షణ పొందిన ఫైల్ కాదు. దయచేసి మళ్లీ ప్రయత్నించండి.",
+ "GPU Number": "జిపియు నెంబరు",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "డ్రాప్ డౌన్ మెనూలో ముందుగా శిక్షణ పొందిన ఫైల్ ను చూడటం కొరకు రిఫ్రెష్ బటన్ మీద క్లిక్ చేయండి.",
+ "GPU Information": "GPU సమాచారం",
+ "0 to ∞ separated by -": "0 నుండి ∞ వరకు దీని ద్వారా వేరు చేయబడతాయి -",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "ఈ సెట్టింగ్ ని ఎనేబుల్ చేయడం వల్ల G మరియు D ఫైల్స్ వాటి ఇటీవలి వెర్షన్ లను మాత్రమే సేవ్ చేస్తాయి, స్టోరేజీ స్పేస్ ని సమర్థవంతంగా సంరక్షిస్తాయి.",
+ "The GPU information will be displayed here.": "జిపియు సమాచారం ఇక్కడ ప్రదర్శించబడుతుంది.",
+ "Pitch Guidance": "పిచ్ మార్గదర్శకత్వం",
+ "Use CPU": "సిపియు ఉపయోగించండి",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "మెరుగైన GPU ఆర్కిటెక్చర్ ఉన్న వినియోగదారుల కొరకు సిఫారసు చేయబడ్డ అధునాతన GPU సెట్టింగ్ లను సెట్ చేస్తుంది.",
+ "Extract Features": "ఎక్స్ ట్రాక్ట్ ఫీచర్లు",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "ప్రీప్రాసెస్ లో ఉపయోగించాల్సిన CPU కోర్ ల సంఖ్య. డిఫాల్ట్ సెట్టింగ్ మీ సిపియు కోర్స్, ఇది చాలా సందర్భాల్లో సిఫార్సు చేయబడింది.",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "వెలికితీత ప్రక్రియలో ఉపయోగించాల్సిన CPU కోర్ ల సంఖ్య. డిఫాల్ట్ సెట్టింగ్ మీ సిపియు కోర్స్, ఇది చాలా సందర్భాల్లో సిఫార్సు చేయబడింది.",
+ "Force the use of CPU for training.": "శిక్షణ కొరకు CPU ఉపయోగించమని బలవంతం చేయండి.",
+ "Cache Dataset in GPU": "GPUలో Cache Dataset",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "కస్టమ్ ప్రీ-ట్రైన్డ్ మోడళ్లను ఉపయోగించడం మెరుగైన ఫలితాలకు దారితీస్తుంది, ఎందుకంటే నిర్దిష్ట ఉపయోగం కేసుకు అనుగుణంగా అత్యంత తగిన ప్రీట్రైనింగ్ మోడళ్లను ఎంచుకోవడం పనితీరును గణనీయంగా మెరుగుపరుస్తుంది.",
+ "Index Algorithm": "ఇండెక్స్ అల్గారిథమ్",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "మీ స్వంత శిక్షణ చేసేటప్పుడు ముందస్తు శిక్షణ పొందిన నమూనాలను ఉపయోగించండి. ఈ విధానం శిక్షణ వ్యవధిని తగ్గిస్తుంది మరియు మొత్తం నాణ్యతను పెంచుతుంది.",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "హైఫెన్స్ (-) ద్వారా వేరు చేయబడిన వాటిని నమోదు చేయడం ద్వారా మీరు వెలికి తీయడానికి ఉపయోగించాలనుకుంటున్న జిపియుల సంఖ్యను పేర్కొనండి.",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "హైఫెన్స్ (-) ద్వారా వేరు చేయబడిన వాటిని నమోదు చేయడం ద్వారా ప్రీప్రాసెస్ కోసం మీరు ఉపయోగించాలనుకుంటున్న జిపియుల సంఖ్యను పేర్కొనండి. ప్రస్తుతానికి, మల్టీ-జిపియును ఉపయోగించడం గణనీయమైన ప్రభావాన్ని చూపదు.",
+ "Overtraining Detector": "ఓవర్ ట్రైనింగ్ డిటెక్టర్",
+ "Fresh Training": "తాజా శిక్షణ",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "వేగవంతమైన పనితీరు కోసం GPUలో మోడల్ వెలికితీతను అమలు చేయడానికి మేము ప్రాధాన్యత ఇస్తాము. మీరు సిపియును ఉపయోగించాలనుకుంటే, జిపియు ఫీల్డ్ ను ఖాళీగా వదిలేయండి.",
+ "Overtraining Detector Settings": "ఓవర్ ట్రైనింగ్ డిటెక్టర్ సెట్టింగ్ లు",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "వేగవంతమైన పనితీరు కోసం జిపియులో మోడల్ ప్రీప్రాసెసింగ్ ను అమలు చేయడానికి మేము ప్రాధాన్యత ఇస్తాము. మీరు సిపియును ఉపయోగించాలనుకుంటే, జిపియు ఫీల్డ్ ను ఖాళీగా వదిలేయండి.",
+ "Overtraining Threshold": "ఓవర్ ట్రైనింగ్ త్రెషోల్డ్",
+ "Start Training": "శిక్షణ ప్రారంభించండి",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans అనేది ఒక క్లస్టరింగ్ అల్గోరిథం, ఇది డేటాసెట్ ను K క్లస్టర్ లుగా విభజిస్తుంది. ఈ అమరిక ముఖ్యంగా పెద్ద డేటాసెట్లకు ఉపయోగపడుతుంది.",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "పిచ్ మార్గదర్శకత్వాన్ని ఉపయోగించడం ద్వారా, దాని పిచ్తో సహా అసలు స్వరం యొక్క స్వరాన్ని ప్రతిబింబించడం సాధ్యమవుతుంది. అసలు మెలోడీ లేదా పిచ్ నమూనాను సంరక్షించడం అవసరమైన గానం మరియు ఇతర సందర్భాలకు ఈ లక్షణం ముఖ్యంగా విలువైనది.",
+ "Stop Training": "ట్రైనింగ్ ఆపండి",
+ "Export Model": "ఎగుమతి నమూనా",
+ "Cache the dataset in GPU memory to speed up the training process.": "ట్రైనింగ్ ప్రక్రియను వేగవంతం చేయడం కొరకు GPU మెమరీలో డేటాసెట్ ని క్యాచీ చేయండి.",
+ "Generate Index": "ఇండెక్స్ జనరేట్ చేయండి",
+ "Upload": "అప్ లోడ్",
+ "Exported Pth file": "ఎగుమతి చేయబడ్డ PTH ఫైల్",
+ "Exported Index file": "ఎగుమతి చేయబడ్డ ఇండెక్స్ ఫైల్",
+ "Single": "ఏక",
+ "Voice Model": "వాయిస్ మోడల్",
+ "Refresh": "రిఫ్రెష్",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "ట్రైనింగ్ డేటాను మోడల్ బాగా నేర్చుకోకుండా నిరోధించడానికి మరియు కొత్త డేటాను సాధారణీకరించే సామర్థ్యాన్ని కోల్పోకుండా నిరోధించడానికి ఓవర్ ట్రైనింగ్ ను గుర్తించండి.",
+ "Index File": "ఇండెక్స్ ఫైల్",
+ "Select the index file to be exported": "ఎగుమతి చేయాల్సిన ఇండెక్స్ ఫైల్ ఎంచుకోండి",
+ "Unload Voice": "వాయిస్ ను అన్ లోడ్ చేయండి",
+ "Select the pth file to be exported": "ఎగుమతి చేయాల్సిన పిటిహెచ్ ఫైల్ ఎంచుకోండి",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "మెరుగుదల కనుగొనబడకపోతే మీ మోడల్ శిక్షణను ఆపివేయాలని మీరు కోరుకునే గరిష్ట సంఖ్యలను సెట్ చేయండి.",
+ "Select the index file to use for the conversion.": "మార్పిడి కొరకు ఉపయోగించాల్సిన ఇండెక్స్ ఫైల్ ని ఎంచుకోండి.",
+ "Select the voice model to use for the conversion.": "కన్వర్షన్ కొరకు ఉపయోగించాల్సిన వాయిస్ మోడల్ ని ఎంచుకోండి.",
+ "Upload Audio": "ఆడియో అప్ లోడ్ చేయండి",
+ "Export Format": "Export Format",
+ "Select Audio": "ఆడియోను ఎంచుకోండి",
+ "Custom Output Path": "కస్టమ్ అవుట్ పుట్ మార్గం",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "మీరు మొదటి నుండి కొత్త మోడల్ కు శిక్షణ ఇస్తున్నట్లయితే లేదా శిక్షణను పునఃప్రారంభిస్తున్నట్లయితే మాత్రమే ఈ సెట్టింగ్ ను ప్రారంభించండి. ఇంతకు ముందు జనరేట్ చేయబడ్డ అన్ని బరువులు మరియు టెన్సర్ బోర్డ్ లాగ్ లను డిలీట్ చేస్తుంది.",
+ "Output Path": "అవుట్ పుట్ మార్గం",
+ "Advanced Settings": "అధునాతన సెట్టింగ్ లు",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "'అప్ లోడ్' బటన్ గూగుల్ కోలాబ్ కోసం మాత్రమే: ఎగుమతి చేసిన ఫైళ్లను మీ గూగుల్ డ్రైవ్ లోని అప్లైడ్ ఎక్స్ పోర్ట్ ఫోల్డర్ కు అప్ లోడ్ చేస్తుంది.",
+ "Split Audio": "స్ప్లిట్ ఆడియో",
+ "Select the audio to convert.": "కన్వర్ట్ చేయడానికి ఆడియోను ఎంచుకోండి.",
+ "Autotune": "Autotune",
+ "Select the format to export the audio.": "ఆడియోను ఎగుమతి చేయడానికి ఫార్మాట్ ఎంచుకోండి.",
+ "Clear Outputs (Deletes all audios in assets/audios)": "క్లియర్ అవుట్ పుట్స్ (అసెట్స్/ఆడియోల్లోని అన్ని ఆడియోలను తొలగిస్తుంది)",
+ "Clean Strength": "క్లీన్ స్ట్రెంత్",
+ "Clean Audio": "క్లీన్ ఆడియో",
+ "Formant Shifting": "Formant Shifting",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "అవుట్ పుట్ ఆడియో సేవ్ చేయబడే మార్గం, ఆస్తులు/ఆడియోలు/output.wav",
+ "Upscale Audio": "అద్భుతమైన ఆడియో",
+ "Default value is 1.0": "డిఫాల్ట్ విలువ 1.0",
+ "Pitch": "గొంతు",
+ "Browse presets for formanting": "formanting కొరకు ప్రీసెట్ లను బ్రౌజ్ చేయండి",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "కొన్ని సందర్భాల్లో మెరుగైన ఫలితాలను పొందడానికి ఆడియోను భాగాలుగా విభజించండి.",
+ "Timbre for formant shifting": "Timbre for ఫార్మెంట్ shift",
+ "Filter Radius": "Filter వ్యాసార్థం",
+ "Presets are located in /assets/formant_shift folder": "ప్రీసెట్ లు /ఆస్తులు/formant_shift ఫోల్డర్ లో ఉన్నాయి",
+ "Quefrency for formant shifting": "ఫార్మెంట్ షిఫ్టింగ్ కొరకు అర్హత",
+ "Search Feature Ratio": "శోధన ఫీచర్ నిష్పత్తి",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "ఫార్మెంట్ షిఫ్టింగ్ ఎనేబుల్ చేయండి. మగ నుండి స్త్రీకి మరియు దీనికి విరుద్ధంగా మతమార్పిడి కోసం ఉపయోగిస్తారు.",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "తక్కువ-నాణ్యత ఆడియోల కోసం సిఫార్సు చేయబడిన ఆడియోను అధిక నాణ్యతకు పెంచండి. (ఆడియోను ప్రాసెస్ చేయడానికి ఎక్కువ సమయం పట్టవచ్చు)",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "పాటల మార్పిడి కోసం సిఫార్సు చేయబడిన మీ అంచనాలకు మృదువైన ఆటోట్యూన్ను వర్తించండి.",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "ఆడియో యొక్క పిచ్ సెట్ చేయండి, విలువ ఎక్కువ, పిచ్ ఎక్కువ.",
+ "Volume Envelope": "వాల్యూమ్ కవరు",
+ "Convert": "మార్చండి",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "ఆడియోలు మాట్లాడటానికి సిఫారసు చేయబడిన నాయిస్ డిటెక్షన్ అల్గారిథమ్ లను ఉపయోగించి మీ ఆడియో అవుట్ పుట్ ను శుభ్రం చేయండి.",
+ "Export Audio": "Export Audio",
+ "Batch": "దొంతర",
+ "Pitch extraction algorithm": "పిచ్ వెలికితీత అల్గోరిథం",
+ "Protect Voiceless Consonants": "వాయిస్ లెస్ కన్సొనెంట్ లను సంరక్షించండి",
+ "Input Folder": "ఇన్ పుట్ ఫోల్డర్",
+ "Output Folder": "అవుట్ పుట్ ఫోల్డర్",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "మీకు కావలసిన ఆడియోకు క్లీన్-అప్ స్థాయిని సెట్ చేయండి, మీరు దానిని ఎంత పెంచితే అది మరింత క్లీన్ అవుతుంది, కానీ ఆడియో మరింత కంప్రెస్ అయ్యే అవకాశం ఉంది.",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "ఆడియో మార్పిడి కోసం ఉపయోగించే పిచ్ వెలికితీత అల్గోరిథం. డిఫాల్ట్ అల్గోరిథం ఆర్ఎమ్విపిఇ, ఇది చాలా సందర్భాలలో సిఫార్సు చేయబడింది.",
+ "Enter input path": "ఇన్ పుట్ మార్గాన్ని నమోదు చేయండి",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "ఇండెక్స్ ఫైలు ప్రభావం; అధిక విలువ ఎక్కువ ప్రభావానికి అనుగుణంగా ఉంటుంది. అయినప్పటికీ, తక్కువ విలువలను ఎంచుకోవడం ఆడియోలో ఉన్న కళాఖండాలను తగ్గించడానికి సహాయపడుతుంది.",
+ "## Voice Blender": "## వాయిస్ బ్లెండర్",
+ "Voice Blender": "వాయిస్ బ్లెండర్",
+ "Get information about the audio": "ఆడియో గురించి సమాచారం పొందండి",
+ "Select the folder containing the audios to convert.": "కన్వర్ట్ చేయడానికి ఆడియోలను కలిగి ఉన్న సంచికను ఎంచుకోండి.",
+ "Enter output path": "అవుట్ పుట్ మార్గాన్ని నమోదు చేయండి",
+ "Select the folder where the output audios will be saved.": "అవుట్ పుట్ ఆడియోలు సేవ్ చేయబడే ఫోల్డర్ ను ఎంచుకోండి.",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "అవుట్ పుట్ యొక్క వాల్యూమ్ కవర్ తో ప్రత్యామ్నాయం చేయండి లేదా కలపండి. నిష్పత్తి 1 కి దగ్గరగా ఉంటే, అవుట్ పుట్ కవరు ఎక్కువగా ఉపయోగించబడుతుంది.",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "ఎలక్ట్రో-అకౌస్టిక్ చిరిగిపోవడం మరియు ఇతర కళాఖండాలను నిరోధించడానికి విభిన్న ధ్వనులు మరియు శ్వాస శబ్దాలను సంరక్షించండి. పరామీటర్ ను దాని గరిష్ట విలువ 0.5కు లాగడం సమగ్ర రక్షణను అందిస్తుంది. ఏదేమైనా, ఈ విలువను తగ్గించడం వల్ల ఇండెక్సింగ్ ప్రభావాన్ని తగ్గించేటప్పుడు రక్షణ పరిధి తగ్గుతుంది.",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "సంఖ్య మూడు కంటే ఎక్కువగా లేదా సమానంగా ఉంటే, సేకరించిన టోన్ ఫలితాలపై మధ్యస్థ వడపోతను ఉపయోగించడం శ్వాసక్రియను తగ్గించే సామర్థ్యాన్ని కలిగి ఉంటుంది.",
+ "Fusion": "ఫ్యూజన్",
+ "Blend Ratio": "మిశ్రమ నిష్పత్తి",
+ "Drag and drop your model here": "మీ మోడల్ ని ఇక్కడ డ్రాగ్ చేయండి మరియు డ్రాప్ చేయండి",
+ "You can also use a custom path.": "మీరు కస్టమ్ మార్గాన్ని కూడా ఉపయోగించవచ్చు.",
+ "Enter path to model": "మోడల్ కు మార్గాన్ని నమోదు చేయండి",
+ "Model information to be placed": "మోడల్ సమాచారం ఉంచాలి",
+ "Path to Model": "మోడల్ కు మార్గం[మార్చు]",
+ "View": "దృశ్యం",
+ "Pth file": "PTH ఫైల్",
+ "Inroduce the model information": "మోడల్ సమాచారాన్ని ఇన్ డ్యూక్ చేయండి",
+ "Model conversion": "నమూనా మార్పిడి",
+ "View model information": "నమూనా సమాచారాన్ని వీక్షించండి",
+ "Model extraction": "నమూనా వెలికితీత",
+ "Introduce the model pth path": "మోడల్ పిటిహెచ్ మార్గాన్ని పరిచయం చేయండి",
+ "Output of the pth file": "పిటిహెచ్ ఫైల్ యొక్క అవుట్ పుట్",
+ "Extract F0 Curve": "F0 కర్వ్ ని వెలికి తీయండి",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "రెండు వాయిస్ మోడళ్లను ఎంచుకోండి, మీకు కావలసిన మిశ్రమ శాతాన్ని సెట్ చేయండి మరియు వాటిని పూర్తిగా కొత్త గొంతులో కలపండి.",
+ "The information to be placed in the model (You can leave it blank or put anything).": "మోడల్ లో ఉంచాల్సిన సమాచారం (మీరు దానిని ఖాళీగా ఉంచవచ్చు లేదా ఏదైనా ఉంచవచ్చు).",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "పొజిషన్ ను ఒక వైపు లేదా మరొక వైపుకు మరింత సర్దుబాటు చేయడం వల్ల మోడల్ మొదటి లేదా రెండవ వైపు మరింత పోలి ఉంటుంది.",
+ "Record": "నమోదు",
+ "Stop Recording": "రికార్డింగ్ ఆపండి",
+ "## Download Model": "## డౌన్ లోడ్ మోడల్",
+ "# How to Report an Issue on GitHub": "# గిట్హబ్లో సమస్యను ఎలా రిపోర్ట్ చేయాలి",
+ "See Model Information": "మోడల్ సమాచారం చూడండి",
+ "Record Screen": "స్క్రీన్ రికార్డ్ చేయండి",
+ "Introduce the model .pth path": "మోడల్ .pth మార్గాన్ని పరిచయం చేయండి",
+ "Model Link": "మోడల్ లింక్",
+ "Introduce the model link": "మోడల్ లింక్ ను పరిచయం చేయండి",
+ "## Drop files": "## డ్రాప్ ఫైళ్లు",
+ "Search": "వెతుకు",
+ "Download Model": "మోడల్ డౌన్ లోడ్ చేయండి",
+ "## Search Model": "## శోధన నమూనా",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. 'గిట్హబ్ ఇష్యూస్'(https://github.com/IAHispano/Applio/issues)లోకి వెళ్లి 'న్యూ ఇష్యూ' బటన్పై క్లిక్ చేయాలి.",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "ఎఫ్ 0 కర్వ్ కాలక్రమేణా వాయిస్ యొక్క బేస్ ఫ్రీక్వెన్సీలో తేడాలను సూచిస్తుంది, పిచ్ ఎలా పెరుగుతుంది మరియు పడిపోతుందో చూపిస్తుంది.",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. మీరు ఎదుర్కొంటున్న సమస్యను రికార్డ్ చేయడం ప్రారంభించడానికి దిగువ 'రికార్డ్ స్క్రీన్' బటన్పై క్లిక్ చేయండి.",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "మీ .pth ఫైల్ మరియు .index ఫైల్ ని ఈ స్పేస్ లోకి లాగండి. ఒకదాన్ని లాగి, తర్వాత మరొకటి లాగండి.",
+ "## Download Pretrained Models": "## ప్రీ ట్రైన్డ్ మోడల్స్ డౌన్ లోడ్ చేసుకోండి",
+ "We couldn't find models by that name.": "ఆ పేరుతో మోడల్స్ దొరకలేదు.",
+ "Introduce the model name to search.": "శోధించడానికి మోడల్ పేరును పరిచయం చేయండి.",
+ "TTS Voices": "టిటిఎస్ వాయిస్",
+ "And select the sampling rate": "మరియు నమూనా రేటును ఎంచుకోండి.",
+ "TTS Speed": "టిటిఎస్ స్పీడ్",
+ "Select the pretrained model you want to download.": "మీరు డౌన్ లోడ్ చేయాలనుకుంటున్న ప్రీట్రైనింగ్ మోడల్ ఎంచుకోండి.",
+ "Increase or decrease TTS speed.": "టిటిఎస్ వేగాన్ని పెంచండి లేదా తగ్గించండి.",
+ "Text to Synthesize": "సంశ్లేషణ చేయడానికి టెక్స్ట్",
+ "Input path for text file": "టెక్స్ట్ ఫైల్ కొరకు ఇన్ పుట్ పాత్",
+ "Select the TTS voice to use for the conversion.": "కన్వర్షన్ కొరకు ఉపయోగించడానికి TTS వాయిస్ ని ఎంచుకోండి.",
+ "Upload a .txt file": ".txt ఫైలును అప్ లోడ్ చేయండి",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. మీరు సమస్యను రికార్డ్ చేయడం పూర్తి చేసిన తర్వాత, 'స్టాప్ రికార్డింగ్' బటన్పై క్లిక్ చేయండి (అదే బటన్, కానీ మీరు చురుకుగా రికార్డ్ చేస్తున్నారా లేదా అనే దానిపై ఆధారపడి లేబుల్ మారుతుంది).",
+ "Enter the text to synthesize.": "సంశ్లేషణ చేయడానికి టెక్స్ట్ ను నమోదు చేయండి.",
+ "Output Path for TTS Audio": "TTS ఆడియో కొరకు అవుట్ పుట్ మార్గం",
+ "Output Path for RVC Audio": "RVC ఆడియో కొరకు అవుట్ పుట్ మార్గం",
+ "Enter text to synthesize": "సంశ్లేషణ చేయడానికి టెక్స్ట్ ను నమోదు చేయండి",
+ "Enable Applio integration with Discord presence": "Discord సమక్షంలో Applio ఇంటిగ్రేషన్ ప్రారంభించు",
+ "The path to the text file that contains content for text to speech.": "టెక్స్ట్ టు స్పీచ్ కోసం కంటెంట్ కలిగి ఉన్న టెక్స్ట్ ఫైల్ కు మార్గం.",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. ఇచ్చిన ఇష్యూ టెంప్లేట్ ను పూర్తి చేసి, అవసరమైన విధంగా వివరాలను పొందుపర్చేలా చూసుకోవాలి మరియు మునుపటి దశ నుండి రికార్డ్ చేయబడిన ఫైల్ ను అప్ లోడ్ చేయడానికి ఆస్తుల విభాగాన్ని ఉపయోగించండి.",
+ "Theme": "థీమ్",
+ "Restart Applio": "Restart Applio",
+ "Enable Applio integration with applio.org/models using flask": "ఫ్లాస్క్ ను ఉపయోగించి applio.org/models అప్లికేషన్ ఇంటిగ్రేషన్ ప్రారంభించండి",
+ "Language": "భాష",
+ "Enable fake GPU": "నకిలీ జిపియును ప్రారంభించండి",
+ "Precision": "ఖచ్చితత్వం",
+ "Plugin Installer": "Plugin Installer",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "ఇది డిస్కార్డ్ లో ప్రస్తుత అప్లైయో యాక్టివిటీని ప్రదర్శించే అవకాశాన్ని యాక్టివేట్ చేస్తుంది.",
+ "Version Checker": "Version Checker",
+ "It will activate the possibility of downloading models with a click from the website.": "వెబ్ సైట్ నుంచి క్లిక్ తో మోడళ్లను డౌన్ లోడ్ చేసుకునే సదుపాయాన్ని యాక్టివేట్ చేస్తుంది.",
+ "Select the theme you want to use. (Requires restarting Applio)": "మీరు ఉపయోగించాలనుకుంటున్న థీమ్ ఎంచుకోండి. (అప్లికేషన్ ను పునఃప్రారంభించడం అవసరం)",
+ "Select the language you want to use. (Requires restarting Applio)": "మీరు ఉపయోగించాలనుకుంటున్న భాషను ఎంచుకోండి. (అప్లికేషన్ ను పునఃప్రారంభించడం అవసరం)",
+ "Update precision": "ఖచ్చితత్వాన్ని అప్ డేట్ చేయండి",
+ "Drag your plugin.zip to install it": "దీన్ని ఇన్ స్టాల్ చేయడానికి మీ plugin.zip లాగండి",
+ "Post-Process": "పోస్ట్-ప్రాసెస్",
+ "Reverb": "Reverb",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "ప్రస్తుతం జీపీయూ లేకపోవడంతో శిక్షణకు మద్దతు లేకుండా పోయింది. ట్రైనింగ్ ట్యాబ్ ను యాక్టివేట్ చేయడానికి సెట్టింగ్స్ ట్యాబ్ లోకి వెళ్లి 'ఫేక్ జీపీయూ' ఆప్షన్ ను ఎనేబుల్ చేయాలి.",
+ "Check for updates": "అప్ డేట్ ల కొరకు చెక్ చేయండి",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "ట్రైన్ ట్యాబ్ ను యాక్టివేట్ చేస్తుంది. అయితే, ఈ పరికరానికి GPU సామర్థ్యాలు లేవని దయచేసి గమనించండి, అందువల్ల శిక్షణకు మద్దతు లేదు. ఈ ఎంపిక టెస్టింగ్ ప్రయోజనాల కోసం మాత్రమే. (ఈ ఆప్షన్ అప్లికేషన్ ను పునఃప్రారంభిస్తుంది)",
+ "Reverb Damping": "Reverb డంపింగ్",
+ "Apply reverb to the audio.": "ఆడియోకు రివర్బ్ అప్లై చేయండి.",
+ "Reverb Room Size": "రివర్బ్ గది పరిమాణం",
+ "Reverb Wet Gain": "Reverb తడి Gain",
+ "Select the precision you want to use for training and inference.": "శిక్షణ మరియు అంచనా కోసం మీరు ఉపయోగించాలనుకుంటున్న ఖచ్చితత్వాన్ని ఎంచుకోండి.",
+ "Set the damping of the reverb.": "రివర్బ్ యొక్క తేమను సెట్ చేయండి.",
+ "Reverb Dry Gain": "Reverb పొడి Gain",
+ "Reverb Width": "Reverb వెడల్పు",
+ "Reverb Freeze Mode": "Reverb ఫ్రీజ్ మోడ్",
+ "Check which version of Applio is the latest to see if you need to update.": "అప్లియో యొక్క ఏ వెర్షన్ లేటెస్ట్ అని చెక్ చేయండి, మీరు అప్ డేట్ చేయాల్సిన అవసరం ఉందా అని చూడండి.",
+ "Set the room size of the reverb.": "రివర్బ్ యొక్క గది పరిమాణాన్ని సెట్ చేయండి.",
+ "Set the wet gain of the reverb.": "రివర్బ్ యొక్క తడి లాభాన్ని సెట్ చేయండి.",
+ "Set the dry gain of the reverb.": "రివర్బ్ యొక్క పొడి లాభాన్ని సెట్ చేయండి.",
+ "Pitch Shift": "పిచ్ షిఫ్ట్",
+ "Post-process the audio to apply effects to the output.": "అవుట్ పుట్ కు ప్రభావాలను వర్తింపజేయడం కొరకు ఆడియోను పోస్ట్ ప్రాసెస్ చేయండి.",
+ "Limiter": "Limiter",
+ "Pitch Shift Semitones": "పిచ్ షిఫ్ట్ సెమిటోన్స్",
+ "Limiter Threshold dB": "Limiter Threshold dB",
+ "Set the freeze mode of the reverb.": "రివర్బ్ యొక్క ఫ్రీజ్ మోడ్ ని సెట్ చేయండి.",
+ "Gain": "పొందు",
+ "Apply pitch shift to the audio.": "ఆడియోకు పిచ్ షిఫ్ట్ వర్తింపజేయండి.",
+ "Limiter Release Time": "Limiter విడుదల సమయం",
+ "Set the pitch shift semitones.": "పిచ్ షిఫ్ట్ సెమిటోన్లను సెట్ చేయండి.",
+ "Apply limiter to the audio.": "ఆడియోకు లిమిటర్ వర్తించండి.",
+ "Gain dB": "Gain dB",
+ "Set the limiter threshold dB.": "లిమిటర్ త్రెషోల్డ్ dB సెట్ చేయండి.",
+ "Distortion": "వక్రీకరించడం",
+ "Set the gain dB.": "గెయిన్ dB సెట్ చేయండి.",
+ "Set the limiter release time.": "లిమిటర్ విడుదల సమయాన్ని సెట్ చేయండి.",
+ "Chorus": "వంతపాట",
+ "Apply gain to the audio.": "ఆడియోకు గెయిన్ వర్తించండి.",
+ "Set the distortion gain.": "వక్రీకరణ లాభాన్ని సెట్ చేయండి.",
+ "Apply distortion to the audio.": "ఆడియోకు వక్రీకరణను వర్తింపజేయండి.",
+ "Apply chorus to the audio.": "ఆడియోకు కోరస్ అప్లై చేయండి.",
+ "Chorus Depth": "కోరస్ లోతు",
+ "Set the chorus rate Hz.": "కోరస్ రేటు Hz సెట్ చేయండి.",
+ "Chorus Rate Hz": "కోరస్ రేటు Hz",
+ "Set the chorus depth.": "కోరస్ లోతును సెట్ చేయండి.",
+ "Distortion Gain": "వక్రీకరణ లాభం",
+ "Chorus Center Delay ms": "కోరస్ సెంటర్ ఆలస్యం ms",
+ "Chorus Mix": "కోరస్ మిక్స్",
+ "Bitcrush": "Bitcrus",
+ "Chorus Feedback": "కోరస్ ఫీడ్ బ్యాక్",
+ "Set the chorus mix.": "కోరస్ మిక్స్ సెట్ చేయండి.",
+ "Set the chorus feedback.": "కోరస్ ఫీడ్ బ్యాక్ సెట్ చేయండి.",
+ "Set the chorus center delay ms.": "కోరస్ సెంటర్ ఆలస్యాన్ని సెట్ చేయండి.",
+ "Apply bitcrush to the audio.": "ఆడియోకు బిట్ క్రష్ అప్లై చేయండి.",
+ "Clipping": "క్లిప్పింగ్",
+ "Bitcrush Bit Depth": "బిట్ క్రష్ బిట్ లోతు",
+ "Set the width of the reverb.": "రివర్బ్ యొక్క వెడల్పును సెట్ చేయండి.",
+ "Compressor": "Compressor",
+ "Compressor Threshold dB": "Compressor Threshold dB",
+ "Clipping Threshold": "క్లిప్పింగ్ పరిమితి",
+ "Set the bitcrush bit depth.": "బిట్ క్రష్ బిట్ లోతును సెట్ చేయండి.",
+ "Apply clipping to the audio.": "ఆడియోకు క్లిప్పింగ్ వర్తించండి.",
+ "Compressor Attack ms": "Compressor Attack ms",
+ "Compressor Ratio": "కంప్రెసర్ నిష్పత్తి",
+ "Set the clipping threshold.": "క్లిప్పింగ్ పరిమితిని సెట్ చేయండి.",
+ "Apply compressor to the audio.": "ఆడియోకు కంప్రెసర్ అప్లై చేయండి.",
+ "Compressor Release ms": "Compressor Release ms",
+ "Delay": "ఆలస్యం",
+ "Set the compressor threshold dB.": "కంప్రెషర్ త్రెషోల్డ్ dB సెట్ చేయండి.",
+ "Set the compressor ratio.": "కంప్రెసర్ నిష్పత్తిని సెట్ చేయండి.",
+ "Set the compressor attack ms.": "కంప్రెషర్ అటాక్ ని సెట్ చేయండి.",
+ "Delay Seconds": "ఆలస్యం సెకన్లు",
+ "Delay Mix": "ఆలస్యం మిక్స్",
+ "Delay Feedback": "ఫీడ్ బ్యాక్ ఆలస్యం",
+ "Set the compressor release ms.": "కంప్రెసర్ విడుదలను సెట్ చేయండి.",
+ "Set the delay seconds.": "ఆలస్య సెకన్లను సెట్ చేయండి.",
+ "Apply delay to the audio.": "ఆడియోకు ఆలస్యాన్ని వర్తింపజేయండి.",
+ "Set the delay feedback.": "ఆలస్యం ఫీడ్ బ్యాక్ సెట్ చేయండి.",
+ "Custom Embedder": "కస్టమ్ ఎంబెడర్",
+ "Upload .bin": ".bin అప్ లోడ్ చేయండి",
+ "Folder Name": "ఫోల్డర్ పేరు",
+ "Refresh embedders": "రిఫ్రెష్ ఎంబెడర్ లు",
+ "Set the delay mix.": "ఆలస్య మిశ్రమాన్ని సెట్ చేయండి.",
+ "Select Custom Embedder": "కస్టమ్ ఎంబెడర్ ఎంచుకోండి",
+ "Upload .json": ".json అప్ లోడ్ చేయండి",
+ "model information": "మోడల్ సమాచారం",
+ "Model Creator": "మోడల్ సృష్టికర్త",
+ "Speaker ID": "స్పీకర్ ఐడి",
+ "Name of the model creator. (Default: Unknown)": "మోడల్ క్రియేటర్ పేరు. (డిఫాల్ట్: తెలియదు)",
+ "Model Author Name": "మోడల్ రచయిత పేరు",
+ "Move files to custom embedder folder": "ఫైళ్లను కస్టమ్ ఎంబెడర్ ఫోల్డర్ కు తరలించండి",
+ "Set name": "పేరు సెట్ చేయండి",
+ "The name that will appear in the model information.": "మోడల్ సమాచారంలో కనిపించే పేరు.",
+ "Select the speaker ID to use for the conversion.": "కన్వర్షన్ కొరకు ఉపయోగించడానికి స్పీకర్ IDని ఎంచుకోండి.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "ఆటోట్యూన్ బలాన్ని సెట్ చేయండి - మీరు దానిని ఎంత ఎక్కువగా పెంచితే అది క్రోమాటిక్ గ్రిడ్కు మారుతుంది."
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/th_TH.json b/assets/i18n/languages/th_TH.json
new file mode 100644
index 0000000000000000000000000000000000000000..7e0da56e7fc30b3c506c58e5155d41f955aae4fb
--- /dev/null
+++ b/assets/i18n/languages/th_TH.json
@@ -0,0 +1,325 @@
+{
+ "Extra": "พิเศษ",
+ "Inference": "การอนุมาน",
+ "Processing": "ประมวล ผล",
+ "Output Information": "ข้อมูลเอาต์พุต",
+ "The output information will be displayed here.": "ข้อมูลเอาต์พุตจะแสดงที่นี่",
+ "Settings": "การตั้งค่า",
+ "Audio Analyzer": "เครื่องวิเคราะห์เสียง",
+ "Download": "ดาวน์โหลด",
+ "Training": "การอบรม",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "เครื่องมือแปลงเสียงที่เรียบง่ายและมีคุณภาพสูงที่เน้นความสะดวกในการใช้งานและประสิทธิภาพ",
+ "Report a Bug": "รายงานข้อบกพร่อง",
+ "Plugins": "ปลั๊กอิน",
+ "Preprocess": "กระบวนการล่วงหน้า",
+ "Model Information": "ข้อมูลรุ่น",
+ "Merge Audios": "รวมไฟล์เสียง",
+ "This section contains some extra utilities that often may be in experimental phases.": "ส่วนนี้มียูทิลิตี้พิเศษบางอย่างที่มักจะอยู่ในขั้นตอนการทดลอง",
+ "Audio cutting": "การตัดเสียง",
+ "Process effects": "ผลกระทบของกระบวนการ",
+ "Model Name": "ชื่อรุ่น",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "ขอแนะนําให้ปิดใช้งานตัวเลือกนี้หากชุดข้อมูลของคุณได้รับการประมวลผลแล้ว",
+ "Name of the new model.": "ชื่อของรุ่นใหม่",
+ "Enter model name": "ป้อนชื่อรุ่น",
+ "Dataset Path": "เส้นทางชุดข้อมูล",
+ "Path to the dataset folder.": "เส้นทางไปยังโฟลเดอร์ชุดข้อมูล",
+ "Dataset Creator": "ผู้สร้างชุดข้อมูล",
+ "Refresh Datasets": "รีเฟรชชุดข้อมูล",
+ "Name of the new dataset.": "ชื่อของชุดข้อมูลใหม่",
+ "Dataset Name": "ชื่อชุดข้อมูล",
+ "Upload Audio Dataset": "อัปโหลดชุดข้อมูลเสียง",
+ "Enter dataset name": "ป้อนชื่อชุดข้อมูล",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "เพิ่มไฟล์เสียงลงในชุดข้อมูลเรียบร้อยแล้ว กรุณาคลิกปุ่มเตรียมกระบวนการล่วงหน้า",
+ "Enter dataset path": "ป้อนเส้นทางชุดข้อมูล",
+ "Sampling Rate": "อัตราการสุ่มตัวอย่าง",
+ "Model Architecture": "สถาปัตยกรรมแบบจําลอง",
+ "Preprocess Dataset": "ชุดข้อมูลก่อนประมวลผล",
+ "Extract": "สกัด",
+ "Embedder Model": "รุ่นฝัง",
+ "Version of the model architecture.": "เวอร์ชันของสถาปัตยกรรมแบบจําลอง",
+ "The sampling rate of the audio files.": "อัตราการสุ่มตัวอย่างของไฟล์เสียง",
+ "Model used for learning speaker embedding.": "รุ่นที่ใช้สําหรับการเรียนรู้การฝังลําโพง",
+ "Hop Length": "ความยาวกระโดด",
+ "Batch Size": "ขนาดแบทช์",
+ "Save Every Epoch": "บันทึกทุกยุค",
+ "Total Epoch": "ยุคทั้งหมด",
+ "Determine at how many epochs the model will saved at.": "กําหนดจํานวนยุคที่โมเดลจะบันทึกไว้",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "ขอแนะนําให้จัดตําแหน่งให้ตรงกับ VRAM ที่มีอยู่ของ GPU ของคุณ การตั้งค่า 4 ให้ความแม่นยําที่ดีขึ้นแต่การประมวลผลช้าลง ในขณะที่ 8 ให้ผลลัพธ์ที่เร็วขึ้นและเป็นมาตรฐาน",
+ "Specifies the overall quantity of epochs for the model training process.": "ระบุปริมาณโดยรวมของยุคสําหรับกระบวนการฝึกโมเดล",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "แสดงถึงระยะเวลาที่ใช้ในระบบในการเปลี่ยนไปใช้การเปลี่ยนแปลงระดับเสียงที่สําคัญ ความยาวกระโดดที่เล็กกว่าต้องใช้เวลาในการอนุมานมากกว่า แต่มีแนวโน้มที่จะให้ความแม่นยําในระดับเสียงที่สูงขึ้น",
+ "Pretrained": "การฝึกอบรมล่วงหน้า",
+ "Save Only Latest": "บันทึกเฉพาะล่าสุด",
+ "Save Every Weights": "บันทึกทุกน้ําหนัก",
+ "Custom Pretrained": "การฝึกอบรมล่วงหน้าแบบกําหนดเอง",
+ "Upload Pretrained Model": "อัปโหลดโมเดลที่ผ่านการฝึกอบรมล่วงหน้า",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "การเปิดใช้งานการตั้งค่านี้จะส่งผลให้ไฟล์ G และ D บันทึกเฉพาะเวอร์ชันล่าสุด ซึ่งช่วยประหยัดพื้นที่เก็บข้อมูลได้อย่างมีประสิทธิภาพ",
+ "Pretrained Custom Settings": "การตั้งค่าแบบกําหนดเองที่ผ่านการฝึกอบรมล่วงหน้า",
+ "Refresh Custom Pretraineds": "รีเฟรช Custom Pretraineds",
+ "The file you dropped is not a valid pretrained file. Please try again.": "ไฟล์ที่คุณทิ้งไม่ใช่ไฟล์ที่ผ่านการฝึกอบรมล่วงหน้าที่ถูกต้อง โปรดลองอีกครั้ง",
+ "Pretrained G Path": "กําหนดเอง G ที่ผ่านการฝึกอบรมล่วงหน้า",
+ "GPU Settings": "การตั้งค่า GPU",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "คลิกปุ่มรีเฟรชเพื่อดูไฟล์ที่ผ่านการฝึกอบรมล่วงหน้าในเมนูแบบเลื่อนลง",
+ "GPU Custom Settings": "การตั้งค่าแบบกําหนดเองของ GPU",
+ "Pretrained D Path": "Custom Pretrained D",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "ตั้งค่า GPU ขั้นสูง ที่แนะนําสําหรับผู้ใช้ที่มีสถาปัตยกรรม GPU ที่ดีกว่า",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "การตั้งค่านี้ช่วยให้คุณสามารถบันทึกน้ําหนักของแบบจําลองเมื่อสิ้นสุดแต่ละยุค",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "การใช้โมเดลที่ผ่านการฝึกอบรมล่วงหน้าแบบกําหนดเองสามารถนําไปสู่ผลลัพธ์ที่เหนือกว่า เนื่องจากการเลือกโมเดลที่ผ่านการฝึกอบรมล่วงหน้าที่เหมาะสมที่สุดซึ่งปรับให้เหมาะกับกรณีการใช้งานเฉพาะสามารถเพิ่มประสิทธิภาพได้อย่างมาก",
+ "GPU Number": "หมายเลข GPU",
+ "0 to ∞ separated by -": "0 ถึง ∞ คั่นด้วย -",
+ "The GPU information will be displayed here.": "ข้อมูล GPU จะแสดงที่นี่",
+ "GPU Information": "ข้อมูล GPU",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "จํานวนคอร์ CPU ที่จะใช้ในกระบวนการแยก การตั้งค่าเริ่มต้นคือคอร์ CPU ของคุณ ซึ่งแนะนําในกรณีส่วนใหญ่",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "จํานวนคอร์ CPU ที่จะใช้ในกระบวนการล่วงหน้า การตั้งค่าเริ่มต้นคือคอร์ CPU ของคุณ ซึ่งแนะนําในกรณีส่วนใหญ่",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "ระบุจํานวน GPU ที่คุณต้องการใช้สําหรับการประมวลผลล่วงหน้าโดยป้อนโดยคั่นด้วยยัติภังค์ (-) ในขณะนี้ การใช้ multi-gpu จะไม่ส่งผลอย่างมีนัยสําคัญ",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "ระบุจํานวน GPU ที่คุณต้องการใช้สําหรับการแยกโดยป้อนโดยคั่นด้วยยัติภังค์ (-)",
+ "Use CPU": "ใช้ CPU",
+ "Pitch Guidance": "คําแนะนําสนาม",
+ "Force the use of CPU for training.": "บังคับให้ใช้ CPU สําหรับการฝึกอบรม",
+ "Cache Dataset in GPU": "ชุดข้อมูลแคชใน GPU",
+ "Extract Features": "คุณสมบัติการแยก",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "ใช้โมเดลที่ผ่านการฝึกอบรมล่วงหน้าเมื่อฝึกโมเดลของคุณเอง วิธีนี้ช่วยลดระยะเวลาการฝึกอบรมและเพิ่มคุณภาพโดยรวม",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "เราให้ความสําคัญกับการเรียกใช้การแยกโมเดลบน GPU เพื่อประสิทธิภาพที่เร็วขึ้น หากคุณต้องการใช้ CPU เพียงเว้นช่อง GPU ว่างไว้",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "เราให้ความสําคัญกับการเรียกใช้การประมวลผลแบบจําลองล่วงหน้าบน GPU เพื่อประสิทธิภาพที่เร็วขึ้น หากคุณต้องการใช้ CPU เพียงเว้นช่อง GPU ว่างไว้",
+ "Index Algorithm": "อัลกอริทึมดัชนี",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "ด้วยการใช้คําแนะนําระดับเสียง จึงเป็นไปได้ที่จะสะท้อนน้ําเสียงของเสียงต้นฉบับ รวมถึงระดับเสียงด้วย คุณสมบัตินี้มีประโยชน์อย่างยิ่งสําหรับการร้องเพลงและสถานการณ์อื่นๆ ที่การรักษาท่วงทํานองดั้งเดิมหรือรูปแบบระดับเสียงเป็นสิ่งสําคัญ",
+ "Cache the dataset in GPU memory to speed up the training process.": "แคชชุดข้อมูลในหน่วยความจํา GPU เพื่อเพิ่มความเร็วในกระบวนการฝึก",
+ "Overtraining Detector Settings": "การตั้งค่าเครื่องตรวจจับการฝึกอบรมมากเกินไป",
+ "Fresh Training": "การฝึกอบรมใหม่",
+ "Overtraining Detector": "เครื่องตรวจจับการฝึกอบรมมากเกินไป",
+ "Overtraining Threshold": "เกณฑ์การฝึกอบรมมากเกินไป",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans เป็นอัลกอริทึมการจัดกลุ่มที่แบ่งชุดข้อมูลออกเป็นคลัสเตอร์ K การตั้งค่านี้มีประโยชน์อย่างยิ่งสําหรับชุดข้อมูลขนาดใหญ่",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "กําหนดจํานวน epoch สูงสุดที่คุณต้องการให้โมเดลของคุณหยุดการฝึกอบรมหากตรวจไม่พบการปรับปรุง",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "ตรวจจับการฝึกอบรมมากเกินไปเพื่อป้องกันไม่ให้โมเดลเรียนรู้ข้อมูลการฝึกอบรมได้ดีเกินไปและสูญเสียความสามารถในการสรุปเป็นข้อมูลใหม่",
+ "Start Training": "เริ่มการฝึกอบรม",
+ "Stop Training": "หยุดการฝึกอบรม",
+ "Export Model": "โมเดลการส่งออก",
+ "Generate Index": "สร้างดัชนี",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "เปิดใช้งานการตั้งค่านี้เฉพาะเมื่อคุณกําลังฝึกโมเดลใหม่ตั้งแต่เริ่มต้นหรือเริ่มการฝึกอบรมใหม่ ลบน้ําหนักและบันทึกเทนเซอร์บอร์ดที่สร้างขึ้นก่อนหน้านี้ทั้งหมด",
+ "Exported Pth file": "ไฟล์ Pth ที่ส่งออก",
+ "Exported Index file": "ไฟล์ดัชนีที่ส่งออก",
+ "Upload": "อัปโหลด",
+ "Select the pth file to be exported": "เลือกไฟล์ pth ที่จะส่งออก",
+ "Select the index file to be exported": "เลือกไฟล์ดัชนีที่จะส่งออก",
+ "Voice Model": "โมเดลเสียง",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "ปุ่ม 'อัปโหลด' มีไว้สําหรับ Google colab เท่านั้น: อัปโหลดไฟล์ที่ส่งออกไปยังโฟลเดอร์ ApplioExported ใน Google ไดรฟ์ของคุณ",
+ "Select the voice model to use for the conversion.": "เลือกรูปแบบเสียงที่จะใช้สําหรับการแปลง",
+ "Refresh": "ฟื้นฟู",
+ "Single": "โสด",
+ "Index File": "ไฟล์ดัชนี",
+ "Unload Voice": "ยกเลิกการโหลดเสียง",
+ "Upload Audio": "อัปโหลดเสียง",
+ "Select the index file to use for the conversion.": "เลือกไฟล์ดัชนีที่จะใช้สําหรับการแปลง",
+ "Select the audio to convert.": "เลือกเสียงที่จะแปลง",
+ "Advanced Settings": "การตั้งค่าขั้นสูง",
+ "Clear Outputs (Deletes all audios in assets/audios)": "ล้างเอาต์พุต (ลบไฟล์เสียงทั้งหมดในแอสเซท/ไฟล์เสียง)",
+ "Output Path": "เส้นทางเอาต์พุต",
+ "Custom Output Path": "เส้นทางเอาต์พุตที่กําหนดเอง",
+ "Export Format": "รูปแบบการส่งออก",
+ "Select the format to export the audio.": "เลือกรูปแบบเพื่อส่งออกเสียง",
+ "Split Audio": "แยกเสียง",
+ "Autotune": "ออโต้จูน",
+ "Clean Audio": "เสียงสะอาด",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "เส้นทางที่จะบันทึกเสียงที่ส่งออก โดยค่าเริ่มต้นใน assets/audios/output.wav",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "แบ่งเสียงออกเป็นส่วนๆ เพื่อการอนุมานเพื่อให้ได้ผลลัพธ์ที่ดีขึ้นในบางกรณี",
+ "Clean Strength": "ความแข็งแรงที่สะอาด",
+ "Upscale Audio": "เสียงระดับหรู",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "ทําความสะอาดเอาต์พุตเสียงของคุณโดยใช้อัลกอริธึมการตรวจจับเสียงรบกวน ซึ่งแนะนําสําหรับการพูดเสียง",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "ใช้ซอฟต์ออโต้จูนกับการอนุมานของคุณ ซึ่งแนะนําสําหรับการแปลงการร้องเพลง",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "เพิ่มสเกลเสียงให้มีคุณภาพสูงขึ้น ซึ่งแนะนําสําหรับไฟล์เสียงคุณภาพต่ํา (อาจใช้เวลานานกว่าในการประมวลผลเสียง)",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "เปิดใช้งานการเปลี่ยนฟอร์มันต์ ใช้สําหรับการแปลงเพศชายเป็นหญิงและในทางกลับกัน",
+ "Formant Shifting": "การเปลี่ยนฟอร์แมนต์",
+ "Browse presets for formanting": "เรียกดูค่าที่ตั้งไว้ล่วงหน้าสําหรับฟอร์มันท์",
+ "Default value is 1.0": "ค่าเริ่มต้นคือ 1.0",
+ "Quefrency for formant shifting": "Quefrency สําหรับการเปลี่ยนฟอร์มันท์",
+ "Presets are located in /assets/formant_shift folder": "ค่าที่ตั้งไว้ล่วงหน้าอยู่ในโฟลเดอร์ /assets/formant_shift",
+ "Pitch": "ขว้าง",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "ตั้งค่าระดับการล้างข้อมูลเป็นเสียงที่คุณต้องการยิ่งคุณเพิ่มมากเท่าไหร่ก็จะยิ่งล้างมากขึ้นเท่านั้น แต่เป็นไปได้ว่าเสียงจะถูกบีบอัดมากขึ้น",
+ "Filter Radius": "รัศมีตัวกรอง",
+ "Search Feature Ratio": "อัตราส่วนคุณสมบัติการค้นหา",
+ "Timbre for formant shifting": "เสียงต่ําสําหรับการขยับฟอร์มันท์",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "ตั้งค่าระดับเสียงของเสียง ยิ่งค่าสูงเท่าใด ระดับเสียงก็จะยิ่งสูงขึ้นเท่านั้น",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "อิทธิพลที่กระทําโดยไฟล์ดัชนี ค่าที่สูงขึ้นสอดคล้องกับอิทธิพลที่มากขึ้น อย่างไรก็ตาม การเลือกใช้ค่าที่ต่ํากว่าสามารถช่วยบรรเทาสิ่งประดิษฐ์ที่มีอยู่ในเสียงได้",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "หากตัวเลขมากกว่าหรือเท่ากับสามการใช้การกรองค่ามัธยฐานในผลลัพธ์โทนเสียงที่รวบรวมมีศักยภาพในการลดการหายใจ",
+ "Convert": "แปลง",
+ "Pitch extraction algorithm": "อัลกอริธึมการสกัดระดับเสียง",
+ "Export Audio": "ส่งออกเสียง",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "แทนที่หรือผสมผสานกับซองระดับเสียงของเอาต์พุต ยิ่งอัตราส่วนใกล้เคียงกับ 1 เท่าใด ซองจดหมายเอาต์พุตก็จะยิ่งมากขึ้นเท่านั้น",
+ "Batch": "ชุด",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "ปกป้องพยัญชนะและเสียงหายใจที่แตกต่างกันเพื่อป้องกันการฉีกขาดด้วยไฟฟ้าอะคูสติกและสิ่งประดิษฐ์อื่นๆ การดึงพารามิเตอร์ไปที่ค่าสูงสุดที่ 0.5 ให้การป้องกันที่ครอบคลุม อย่างไรก็ตาม การลดค่านี้อาจลดขอบเขตของการป้องกันในขณะที่อาจลดผลกระทบของการทําดัชนี",
+ "Input Folder": "โฟลเดอร์อินพุต",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "อัลกอริธึมการแยกระดับเสียงเพื่อใช้สําหรับการแปลงเสียง อัลกอริทึมเริ่มต้นคือ rmvpe ซึ่งแนะนําสําหรับกรณีส่วนใหญ่",
+ "Enter input path": "ป้อนเส้นทางอินพุต",
+ "Output Folder": "โฟลเดอร์เอาต์พุต",
+ "Select the folder containing the audios to convert.": "เลือกโฟลเดอร์ที่มีไฟล์เสียงที่จะแปลง",
+ "Select Audio": "เลือกเสียง",
+ "Get information about the audio": "รับข้อมูลเกี่ยวกับเสียง",
+ "Select the folder where the output audios will be saved.": "เลือกโฟลเดอร์ที่จะบันทึกไฟล์เสียงที่ส่งออก",
+ "Voice Blender": "เครื่องปั่นเสียง",
+ "Enter output path": "ป้อนเส้นทางเอาต์พุต",
+ "## Voice Blender": "## เครื่องปั่นเสียง",
+ "Drag and drop your model here": "ลากและวางโมเดลของคุณที่นี่",
+ "Fusion": "ฟิวชั่น",
+ "You can also use a custom path.": "คุณยังสามารถใช้เส้นทางที่กําหนดเองได้อีกด้วย",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "เลือกรูปแบบเสียงสองรุ่น ตั้งค่าเปอร์เซ็นต์การผสมผสานที่คุณต้องการ และผสมผสานเป็นเสียงใหม่ทั้งหมด",
+ "Blend Ratio": "อัตราส่วนการผสมผสาน",
+ "Path to Model": "เส้นทางสู่โมเดล",
+ "Enter path to model": "ป้อนเส้นทางไปยังแบบจําลอง",
+ "Protect Voiceless Consonants": "ปกป้องพยัญชนะที่ไม่มีเสียง",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "การปรับตําแหน่งไปทางด้านใดด้านหนึ่งมากขึ้นจะทําให้โมเดลคล้ายกับด้านแรกหรือด้านที่สองมากขึ้น",
+ "Inroduce the model information": "สํารวจข้อมูลรุ่น",
+ "Model information to be placed": "ข้อมูลโมเดลที่จะวาง",
+ "View": "ทิวทัศน์",
+ "View model information": "ดูข้อมูลรุ่น",
+ "Introduce the model pth path": "แนะนําเส้นทาง pth แบบจําลอง",
+ "Model extraction": "การสกัดแบบจําลอง",
+ "Model conversion": "การแปลงแบบจําลอง",
+ "Output of the pth file": "เอาต์พุตของไฟล์ pth",
+ "Pth file": "ไฟล์ Pth",
+ "Extract F0 Curve": "แยกเส้นโค้ง F0",
+ "# How to Report an Issue on GitHub": "# วิธีรายงานปัญหาบน GitHub",
+ "Record": "บันทึก",
+ "Record Screen": "บันทึกหน้าจอ",
+ "Volume Envelope": "ซองจดหมายเล่ม",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. คลิกที่ปุ่ม 'บันทึกหน้าจอ' ด้านล่างเพื่อเริ่มบันทึกปัญหาที่คุณกําลังประสบ",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "เส้นโค้ง f0 แสดงถึงความผันแปรของความถี่พื้นฐานของเสียงเมื่อเวลาผ่านไป ซึ่งแสดงให้เห็นว่าระดับเสียงขึ้นและลงอย่างไร",
+ "Stop Recording": "หยุดการบันทึก",
+ "See Model Information": "ดูข้อมูลรุ่น",
+ "## Download Model": "## ดาวน์โหลดโมเดล",
+ "Model Link": "ลิงค์รุ่น",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. ไปที่ [GitHub Issues](https://github.com/IAHispano/Applio/issues) และคลิกที่ปุ่ม 'New Issue'",
+ "Introduce the model .pth path": "แนะนําเส้นทาง .pth แบบจําลอง",
+ "Introduce the model link": "แนะนําลิงค์โมเดล",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. เมื่อคุณบันทึกปัญหาเสร็จแล้ว ให้คลิกที่ปุ่ม 'หยุดการบันทึก' (ปุ่มเดียวกัน แต่ป้ายกํากับจะเปลี่ยนไปขึ้นอยู่กับว่าคุณกําลังบันทึกอยู่หรือไม่)",
+ "Download Model": "ดาวน์โหลดรุ่น",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. กรอกเทมเพลตปัญหาที่ให้มา โดยตรวจสอบให้แน่ใจว่าได้ใส่รายละเอียดตามความจําเป็น และใช้ส่วนเนื้อหาเพื่ออัปโหลดไฟล์ที่บันทึกไว้จากขั้นตอนก่อนหน้า",
+ "The information to be placed in the model (You can leave it blank or put anything).": "ข้อมูลที่จะวางไว้ในแบบจําลอง (คุณสามารถเว้นว่างไว้หรือใส่อะไรก็ได้)",
+ "## Drop files": "## วางไฟล์",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "ลากไฟล์ .pth และไฟล์ .index ของคุณลงในพื้นที่นี้ ลากอันหนึ่งแล้วลากอีกอันหนึ่ง",
+ "We couldn't find models by that name.": "เราไม่พบนางแบบที่มีชื่อนั้น",
+ "## Download Pretrained Models": "## ดาวน์โหลดโมเดลที่ผ่านการฝึกอบรมล่วงหน้า",
+ "Search": "ค้น",
+ "## Search Model": "## ค้นหาโมเดล",
+ "TTS Voices": "เสียง TTS",
+ "Introduce the model name to search.": "แนะนําชื่อรุ่นเพื่อค้นหา",
+ "Select the pretrained model you want to download.": "เลือกโมเดลที่ผ่านการฝึกอบรมล่วงหน้าที่คุณต้องการดาวน์โหลด",
+ "TTS Speed": "ความเร็ว TTS",
+ "And select the sampling rate": "และเลือกอัตราการสุ่มตัวอย่าง",
+ "Increase or decrease TTS speed.": "เพิ่มหรือลดความเร็ว TTS",
+ "Select the TTS voice to use for the conversion.": "เลือกเสียง TTS ที่จะใช้สําหรับการแปลง",
+ "Text to Synthesize": "ข้อความที่จะสังเคราะห์",
+ "Enter the text to synthesize.": "ป้อนข้อความที่จะสังเคราะห์",
+ "Upload a .txt file": "อัปโหลดไฟล์ .txt",
+ "Input path for text file": "เส้นทางการป้อนข้อมูลสําหรับไฟล์ข้อความ",
+ "Enter text to synthesize": "ป้อนข้อความที่จะสังเคราะห์",
+ "The path to the text file that contains content for text to speech.": "เส้นทางไปยังแฟ้มข้อความที่มีเนื้อหาสําหรับการแปลงข้อความเป็นคําพูด",
+ "Output Path for TTS Audio": "เส้นทางเอาต์พุตสําหรับเสียง TTS",
+ "Output Path for RVC Audio": "เส้นทางเอาต์พุตสําหรับเสียง RVC",
+ "Enable Applio integration with Discord presence": "เปิดใช้งานการรวม Applio กับการแสดงตน Discord",
+ "Theme": "หัวข้อ",
+ "Enable fake GPU": "เปิดใช้งาน GPU ปลอม",
+ "Enable Applio integration with applio.org/models using flask": "เปิดใช้งานการรวม Applio กับ applio.org/models โดยใช้ขวด",
+ "Language": "ภาษา",
+ "It will activate the possibility of downloading models with a click from the website.": "มันจะเปิดใช้งานความเป็นไปได้ในการดาวน์โหลดโมเดลด้วยการคลิกจากเว็บไซต์",
+ "Restart Applio": "รีสตาร์ท Applio",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "การฝึกอบรมไม่รองรับในขณะนี้เนื่องจากไม่มี GPU หากต้องการเปิดใช้งานแท็บการฝึกอบรม ให้ไปที่แท็บการตั้งค่าและเปิดใช้งานตัวเลือก 'GPU ปลอม'",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "มันจะเปิดใช้งานความเป็นไปได้ในการแสดงกิจกรรม Applio ปัจจุบันใน Discord",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "เปิดใช้งานแท็บรถไฟ อย่างไรก็ตาม โปรดทราบว่าอุปกรณ์นี้ไม่มีความสามารถของ GPU ดังนั้นจึงไม่รองรับการฝึกอบรม ตัวเลือกนี้ใช้เพื่อวัตถุประสงค์ในการทดสอบเท่านั้น (ตัวเลือกนี้จะรีสตาร์ท Applio)",
+ "Select the language you want to use. (Requires restarting Applio)": "เลือกภาษาที่คุณต้องการใช้ (ต้องรีสตาร์ท Applio)",
+ "Precision": "ความถูกต้อง",
+ "Select the theme you want to use. (Requires restarting Applio)": "เลือกธีมที่คุณต้องการใช้ (ต้องรีสตาร์ท Applio)",
+ "Update precision": "อัปเดตความแม่นยํา",
+ "Select the precision you want to use for training and inference.": "เลือกความแม่นยําที่คุณต้องการใช้สําหรับการฝึกอบรมและการอนุมาน",
+ "Plugin Installer": "ตัวติดตั้งปลั๊กอิน",
+ "Check for updates": "ตรวจสอบการอัปเดต",
+ "Drag your plugin.zip to install it": "ลาก plugin.zip ของคุณเพื่อติดตั้ง",
+ "Version Checker": "ตัวตรวจสอบเวอร์ชัน",
+ "Post-Process": "หลังกระบวนการ",
+ "Reverb": "เสียงก้อง",
+ "Post-process the audio to apply effects to the output.": "ประมวลผลเสียงในภายหลังเพื่อใช้เอฟเฟกต์กับเอาต์พุต",
+ "Reverb Room Size": "ขนาดห้อง Reverb",
+ "Apply reverb to the audio.": "ใช้เสียงสะท้อนกับเสียง",
+ "Check which version of Applio is the latest to see if you need to update.": "ตรวจสอบว่า Applio เวอร์ชันใดเป็นเวอร์ชันล่าสุดเพื่อดูว่าจําเป็นต้องอัปเดตหรือไม่",
+ "Reverb Wet Gain": "เสียงก้อง Wet Gain",
+ "Set the room size of the reverb.": "กําหนดขนาดห้องของเสียงสะท้อน",
+ "Reverb Damping": "เสียงสะท้อน Damp ไอเอ็นจี",
+ "Set the damping of the reverb.": "ตั้งค่า damp เสียงสะท้อน",
+ "Set the wet gain of the reverb.": "ตั้งค่าอัตราขยายแบบเปียกของเสียงสะท้อน",
+ "Reverb Dry Gain": "เสียงสะท้อน Dry Gain",
+ "Set the dry gain of the reverb.": "ตั้งค่าอัตราขยายแบบแห้งของเสียงสะท้อน",
+ "Reverb Width": "ความกว้างของเสียงก้อง",
+ "Set the freeze mode of the reverb.": "ตั้งค่าโหมดแช่แข็งของเสียงสะท้อน",
+ "Set the width of the reverb.": "กําหนดความกว้างของเสียงสะท้อน",
+ "Reverb Freeze Mode": "โหมด Reverb Freeze",
+ "Apply pitch shift to the audio.": "ใช้การเปลี่ยนระดับเสียงกับเสียง",
+ "Pitch Shift": "การเปลี่ยนระดับเสียง",
+ "Pitch Shift Semitones": "เซมิโทนชิฟต์ชิฟต์",
+ "Limiter": "ลิมิตเตอร์",
+ "Set the pitch shift semitones.": "ตั้งค่าครึ่งเสียงการเปลี่ยนระดับเสียง",
+ "Limiter Release Time": "เวลาปล่อยลิมิตเตอร์",
+ "Limiter Threshold dB": "เกณฑ์ลิมิตเตอร์ dB",
+ "Set the limiter threshold dB.": "ตั้งค่าเกณฑ์ลิมิตเตอร์ dB",
+ "Apply limiter to the audio.": "ใช้ลิมิตเตอร์กับเสียง",
+ "Gain": "กำไร",
+ "Set the limiter release time.": "ตั้งเวลาปล่อยลิมิตเตอร์",
+ "Distortion": "การบิดเบือน",
+ "Apply gain to the audio.": "ใช้เกนกับเสียง",
+ "Chorus": "คณะนักร้องประสานเสียง",
+ "Apply distortion to the audio.": "ใช้การบิดเบือนกับเสียง",
+ "Set the gain dB.": "ตั้งค่า dB เกน",
+ "Gain dB": "ได้รับ dB",
+ "Set the distortion gain.": "ตั้งค่าอัตราขยายการบิดเบือน",
+ "Distortion Gain": "การบิดเบือนกําไร",
+ "Apply chorus to the audio.": "ใช้คอรัสกับเสียง",
+ "Chorus Depth": "ความลึกของคอรัส",
+ "Set the chorus rate Hz.": "ตั้งค่าอัตราคอรัส Hz",
+ "Chorus Center Delay ms": "Chorus Center Delay ms",
+ "Chorus Rate Hz": "อัตราคอรัส Hz",
+ "Set the chorus depth.": "ตั้งค่าความลึกของคอรัส",
+ "Set the chorus center delay ms.": "ตั้งค่าการหน่วงเวลาศูนย์คอรัส ms",
+ "Chorus Feedback": "ข้อเสนอแนะของคอรัส",
+ "Chorus Mix": "คอรัสมิกซ์",
+ "Set the chorus feedback.": "ตั้งค่าคําติชมคอรัส",
+ "Bitcrush": "บิตครัช",
+ "Set the chorus mix.": "ตั้งค่าคอรัสมิกซ์",
+ "Apply bitcrush to the audio.": "ใช้ bitcrush กับเสียง",
+ "Clipping": "การตัด",
+ "Compressor": "คอมเพรสเซอร์",
+ "Set the bitcrush bit depth.": "ตั้งค่าความลึกของบิต bitcrush",
+ "Apply clipping to the audio.": "ใช้การตัดกับเสียง",
+ "Bitcrush Bit Depth": "Bitcrush ความลึกของบิต",
+ "Set the clipping threshold.": "ตั้งค่าเกณฑ์การตัด",
+ "Clipping Threshold": "เกณฑ์การตัด",
+ "Compressor Threshold dB": "เกณฑ์คอมเพรสเซอร์ dB",
+ "Set the compressor threshold dB.": "ตั้งค่าเกณฑ์คอมเพรสเซอร์ dB",
+ "Apply compressor to the audio.": "ใช้คอมเพรสเซอร์กับเสียง",
+ "Compressor Ratio": "อัตราส่วนคอมเพรสเซอร์",
+ "Set the compressor ratio.": "ตั้งอัตราส่วนคอมเพรสเซอร์",
+ "Delay": "ชักช้า",
+ "Compressor Attack ms": "คอมเพรสเซอร์โจมตี ms",
+ "Compressor Release ms": "ปล่อยคอมเพรสเซอร์ ms",
+ "Set the compressor attack ms.": "ตั้งค่าการโจมตีของคอมเพรสเซอร์ ms",
+ "Apply delay to the audio.": "ใช้การหน่วงเวลากับเสียง",
+ "Delay Feedback": "ข้อเสนอแนะล่าช้า",
+ "Set the delay seconds.": "ตั้งค่าวินาทีการหน่วงเวลา",
+ "Set the compressor release ms.": "ตั้งค่าการปล่อยคอมเพรสเซอร์ ms",
+ "Set the delay feedback.": "ตั้งค่าการตอบสนองการหน่วงเวลา",
+ "Custom Embedder": "ตัวฝังแบบกําหนดเอง",
+ "Delay Seconds": "วินาทีล่าช้า",
+ "Set the delay mix.": "ตั้งค่าการผสมการหน่วงเวลา",
+ "Refresh embedders": "รีเฟรชตัวฝัง",
+ "Select Custom Embedder": "เลือก Custom Embedder",
+ "Folder Name": "ชื่อโฟลเดอร์",
+ "Delay Mix": "ดีเลย์มิกซ์",
+ "Upload .bin": "อัปโหลด.bin",
+ "Upload .json": "อัปโหลด.json",
+ "Move files to custom embedder folder": "ย้ายไฟล์ไปยังโฟลเดอร์ฝังแบบกําหนดเอง",
+ "model information": "ข้อมูลรุ่น",
+ "Speaker ID": "รหัสลําโพง",
+ "Name of the model creator. (Default: Unknown)": "ชื่อผู้สร้างโมเดล (ค่าเริ่มต้น: ไม่ทราบ)",
+ "Model Creator": "ผู้สร้างโมเดล",
+ "Select the speaker ID to use for the conversion.": "เลือก ID ลําโพงที่จะใช้สําหรับการแปลง",
+ "Model Author Name": "ชื่อผู้เขียนโมเดล",
+ "The name that will appear in the model information.": "ชื่อที่จะปรากฏในข้อมูลรุ่น",
+ "Set name": "ชื่อชุด",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "ตั้งค่าความแรงของการปรับอัตโนมัติ - ยิ่งคุณเพิ่มมากเท่าไหร่ก็ยิ่งจะแน็บกับตารางสีมากขึ้นเท่านั้น"
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/to_TO.json b/assets/i18n/languages/to_TO.json
new file mode 100644
index 0000000000000000000000000000000000000000..f6799254ea9f89079aba064e94487283379b44ce
--- /dev/null
+++ b/assets/i18n/languages/to_TO.json
@@ -0,0 +1,325 @@
+{
+ "Training": "Ako",
+ "Extra": "Toe Lahi Ange",
+ "Processing": "Ngaue",
+ "Merge Audios": "Fakatahaʻi e Ongó",
+ "Audio Analyzer": "Ongo Analyzer",
+ "The output information will be displayed here.": "ʻE ʻasi heni ʻa e fakamatala ki he Output.",
+ "Inference": "Fakatonuʻi",
+ "Download": "Download",
+ "Plugins": "Plugins",
+ "Report a Bug": "Lipooti ha Bug",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "Naʻe fakatefito ha kiʻi meʻangaue faingofua mo lelei ʻi he ului ʻi he faingofua hono fakaʻaongaʻi mo hono fakahoko.",
+ "Model Information": "Fakamatala ki he motolo",
+ "Preprocess": "Ngaue kimuʻa",
+ "Settings": "Ngaahi Feituʻú",
+ "Output Information": "Fakamatala ki he Output",
+ "Audio cutting": "Kosi ʻo e ongo",
+ "Process effects": "Ngaahi ola ʻo e founga ngaue",
+ "This section contains some extra utilities that often may be in experimental phases.": "ʻOku ʻi he konga ko ʻeni ha ngaahi meʻa ʻaonga kehe ʻoku faʻa ʻi Experimental ngaahi konga.",
+ "Model Name": "Hingoa ʻo e Mōtoló",
+ "Enter model name": "Fakahu e hingoa ʻo e motolo",
+ "Dataset Path": "Hala Dataset",
+ "Name of the new model.": "Hingoa ʻo e sipinga foʻou.",
+ "Refresh Datasets": "Fakafoʻou Datasets",
+ "Dataset Name": "Hingoa Dataset",
+ "Dataset Creator": "Dataset tupuʻanga",
+ "Path to the dataset folder.": "Hala ki he fouluta dataset.",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "ʻOku fokotuʻu atu ke fakamalolooʻi fakataimi ʻa e fili ko ʻeni kapau kuo ʻosi fai hoʻo dataset.",
+ "Name of the new dataset.": "Hingoa ʻo e dataset foʻou.",
+ "Sampling Rate": "Vave ʻo e sipinga",
+ "Upload Audio Dataset": "Upload e Fakamatala ʻi he Ongó",
+ "Enter dataset name": "Fakahu dataset hingoa",
+ "Enter dataset path": "Fakahu dataset hala",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Kuo lava lelei hono tanaki atu ʻo e faile ʻo e ongo ki he dataset. Kātaki ʻo lomiʻi ʻi he button ki he ngāue ki muʻá.",
+ "Model Architecture": "Sipinga ʻo e fale",
+ "Preprocess Dataset": "Tomuʻa ngaue Dataset",
+ "Version of the model architecture.": "Tatau ʻo e ngaahi fale ʻo e motolo.",
+ "Hop Length": "Loloa ʻo e kaka",
+ "The sampling rate of the audio files.": "Ko e sipinga ʻo e ngaahi faile ʻo e ongo.",
+ "Embedder Model": "Sipinga Embedder",
+ "Extract": "Toʻo",
+ "Batch Size": "Lahi ʻo e Kulupu (Batch) Foakí",
+ "Model used for learning speaker embedding.": "Sipinga ʻoku fakaʻaongaʻi ki hono ako ʻo e tokotaha lea e.",
+ "Total Epoch": "Fakakatoa ʻo e ʻEpoki foʻou",
+ "Save Every Epoch": "Fakahaofi ʻa e ʻEpoki foʻou kotoa pe",
+ "Pretrained": "ʻOsi Akoʻi",
+ "Save Only Latest": "Seivi pe ʻa e fakamuimui taha",
+ "Save Every Weights": "Seivi ʻa e Mamafa Kotoa Pē",
+ "Custom Pretrained": "ʻOsi Akoʻi Kimuʻa",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "ʻOku ne fakahaaʻi ʻa e loloa ʻo e taimi ʻoku fie maʻu ki he polokalama ke hiki ki ha liliu mahuʻinga. ʻOku fie maʻu ha taimi lahi ange ki he fakatonuʻi ʻi he fanga kiʻi kaka iiki ange ka ʻoku nau fakahehema ke ʻomi ha tuʻuaki ʻoku maʻolunga ange.",
+ "Upload Pretrained Model": "Upload e Sīpinga Kuo ʻOsi Akoʻí",
+ "Refresh Custom Pretraineds": "Fakafoʻou a e Ngaahi Akoʻi Kuo Osi Akoʻí",
+ "Determine at how many epochs the model will saved at.": "Fakapapauʻi pe ko e ʻepoki foʻou ʻe fiha ʻe fakahaofi ai ʻa e sipinga.",
+ "Specifies the overall quantity of epochs for the model training process.": "Fakamahinoʻi ʻa e lahi fakakatoa ʻo e ʻepoki foʻou ki he founga ako ʻo e motolo.",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "ʻOku fie maʻu ke fenapasi ia mo e VRAM ʻoku lava ke maʻu ʻi hoʻo GPU. ʻOku ʻomi ʻe he fokotuʻutuʻu ʻo e 4 ha ngaahi meʻa ʻoku tonu kae mamalie ange ʻa e ngaue, ka ʻoku ʻomi ʻe he 8 ha ngaahi ola vave mo angamaheni.",
+ "Pretrained Custom Settings": "Ngaahi Fokotuʻutuʻu Tuʻumaʻu Kuo ʻOsi Akoʻí",
+ "Pretrained D Path": "Tuʻumaʻu kuo ʻosi akoʻi D",
+ "Pretrained G Path": "Tuʻumaʻu kuo ʻosi akoʻi G",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Lomiʻi ʻi he refresh ke sio ki he faile kuo ʻosi akoʻi ʻi he dropdown menu.",
+ "GPU Settings": "GPU Settings",
+ "The file you dropped is not a valid pretrained file. Please try again.": "ʻOku ʻikai ko ha faile ʻoku kei ʻaonga ʻa e faile naʻa ke fakatooki. Kātaki ʻo toe feinga pē.",
+ "GPU Custom Settings": "GPU fokotuʻutuʻu angamaheni",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "ʻE iku ʻa e fokotuʻutuʻu ko ʻeni ki he ngaahi faile ʻa e G mo e d ʻo fakahaofi pe ʻenau ngaahi polokalama fakamuimuitaha, ʻa ia ʻoku ola lelei conserving feituʻu tauhiʻanga ʻo e meʻakai.",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "ʻOku hanga ʻe he tukunga ko ʻeni ʻo ʻai ke ke lava ʻo fakahaofi ʻa e mamafa ʻo e sipinga ʻi he fakaʻosinga ʻo e ʻepoki foʻou takitaha.",
+ "0 to ∞ separated by -": "0 ki he ∞ fakamavaheʻi ʻe he-",
+ "The GPU information will be displayed here.": "ʻE fakaʻaliʻali heni ʻa e fakamatala GPU.",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "ʻE lava ke iku hono fakaʻaongaʻi ʻo e ngaahi sipinga angamaheni kuo ʻosi akoʻi ki ha ngaahi ola maʻolunga ange, ʻo hange ko hono fili ʻo e kau ta sipinga feʻunga taha kuo ʻosi akoʻi ki he meʻa pau ʻe lava ke ne fakaleleiʻi ʻa e ngaue.",
+ "GPU Number": "Fika GPU",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Fokotuʻu ha ngaahi feituʻu GPU fakalakalaka, ʻoku fokotuʻu atu ki he kau fakaʻaongaʻi ʻoku lelei ange GPU fale.",
+ "GPU Information": "FAKAMATALA GPU",
+ "Pitch Guidance": "Fakahinohino ki he tuʻuaki",
+ "Extract Features": "Toʻo e ngaahi fotunga",
+ "Use CPU": "Fakaʻaongaʻi ʻa e CPU",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Fakamahinoʻi ʻa e lahi ʻo e GPUs ʻoku ke fie fakaʻaongaʻi ki hono toʻo ʻaki haʻo fakahu kinautolu ʻe he haifine (-).",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "Ko e lahi ʻo e CPU cores ke fakaʻaongaʻi ʻi he ngaue kimuʻa. Ko e feituʻu ne ʻuluaki seti ko hoʻo cores, ʻa ia ʻoku fokotuʻu atu ki he ngaahi meʻa lahi.",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Fakamahinoʻi ʻa e lahi ʻo e GPUs ʻoku ke fie fakaʻaongaʻi ki he ngaue kimuʻa ʻaki haʻo fakahu kinautolu ʻaki haifine (-). ʻI he taimi ko ia, he ʻikai ʻi ai ha ola mahuʻinga ʻo hono fakaʻaongaʻi ʻo e gpu fakavahaʻa-taʻu.",
+ "Force the use of CPU for training.": "Fakamalohiʻi hono fakaʻaongaʻi ʻo e CPU ki he ako.",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "Lahi ʻo e CPU cores ke fakaʻaongaʻi ʻi he founga toʻo ʻulí. Ko e feituʻu ne ʻuluaki seti ko hoʻo cores, ʻa ia ʻoku fokotuʻu atu ki he ngaahi meʻa lahi.",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Fakaʻaongaʻi e kau tā sīpinga kuo ʻosi akoʻí ʻi he taimi ʻoku akoʻi ai koé. ʻOku hanga ʻe he founga ko ʻení ʻo fakasiʻisiʻi ʻa e lōloa ʻo e taimi akó mo fakalahi ʻa e tuʻunga",
+ "Cache Dataset in GPU": "Cache Dataset ʻi GPU",
+ "Index Algorithm": "Fakahokohoko fakamotuʻalea Algorithm",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "ʻOku tau fakamuʻomuʻa hono fakalele ʻo e sipinga toʻo ʻuli ʻi he GPU ke vave ange ʻa e ngaue. Kapau ʻoku ke fie fakaʻaongaʻi ʻa e CPU, mavahe pe mei he feituʻu GPU.",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "ʻOku tau fakamuʻomuʻa ʻa e sipinga ʻo e ngaue ʻi he GPU ke vave ange ʻa e ngaue. Kapau ʻoku ke fie fakaʻaongaʻi ʻa e CPU, mavahe pe mei he feituʻu GPU.",
+ "Overtraining Detector": "Akoʻi ʻo e MONOKISAITI",
+ "Fresh Training": "Ako foʻou",
+ "Overtraining Threshold": "Akoʻi ʻo e huʻanga",
+ "Overtraining Detector Settings": "Akoʻi MONOKISAITI settings",
+ "Start Training": "Kamata ʻa e ako",
+ "Cache the dataset in GPU memory to speed up the training process.": "Cache ʻa e dataset ʻi GPU manatu ke vave ʻa e founga ako.",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "Ko e KMeans ko ha clustering algorithm ʻoku ne vahevahe ʻa e dataset ki he K. ʻOku matuʻaki ʻaonga ʻa e ʻatakai ko ʻeni ki he datasets lalahi.",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "ʻI hono fakaʻaongaʻi ʻo e fakahinohino, ʻe lava ke ne faʻifaʻitaki ʻa e intonation ʻo e leʻo totonu, kau ai hono tuʻuaki. ʻOku matuʻaki mahuʻinga ʻa e konga ko ʻeni ki he hiva mo e ngaahi tukunga kehe ʻoku mahuʻinga ai hono fakatolonga ʻo e fasi totonu pe sipinga ʻo e tuʻuaki.",
+ "Stop Training": "Taʻofi e Ako",
+ "Generate Index": "Faʻufaʻu ha Fakahokohoko Fakamotuʻ",
+ "Export Model": "Hiki Atu ʻa e Mōtoló",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "ʻIloʻi ʻa e ako ke taʻofi ʻa e sipinga mei hono ako lelei ʻo e fakamatala ako pea mole ʻa e malava ke generalize ki he fakamatala foʻou.",
+ "Exported Index file": "Faile Fakahokohoko Fakamotuʻalea naʻe Hiki Atú",
+ "Exported Pth file": "Faile ʻo e Pth naʻe hiki atú",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "ʻAi ke toki lava pe ʻa e tukunga ko ʻeni kapau ʻoku ke akoʻi ha sipinga foʻou mei ha ngaahi meʻa kehe pe to ʻa e ako. Deletes kotoa e ngaahi meʻa mamafa mo e sinoʻi ʻakau tensorboard.",
+ "Upload": "Upload",
+ "Select the pth file to be exported": "Fili a e faile o e pth ke hiki atu",
+ "Voice Model": "Sipinga ʻo e leʻo",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Fokotuʻu ʻa e lahi taha ʻo e ngaahi ʻepoki foʻou ʻoku ke fie maʻu ke taʻofi hoʻo sipinga ke taʻofi ʻa e ako kapau ʻoku ʻikai ke ʻi ai ha fakalakalaka.",
+ "Refresh": "Fakafoʻou",
+ "Select the index file to be exported": "Fili a e faile fakahokohoko fakamotuʻalea ke hiki atu",
+ "Index File": "Faile Fakahokohoko Fakamotuʻaleá",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "Ko e button ʻ upload ʻ ʻoku maʻa e Google colab: fakahu ʻa e ngaahi faile ʻoku hiki atu ki he fouluta ApplioExported ʻi hoʻo Google drive.",
+ "Single": "Tautaha",
+ "Unload Voice": "Leʻo ʻoku ʻikai load",
+ "Select the voice model to use for the conversion.": "Fili ʻa e sipinga ʻo e leʻo ke fakaʻaongaʻi ki he ului.",
+ "Upload Audio": "Upload e Ongó",
+ "Select Audio": "Fili ʻa e Ongó",
+ "Select the index file to use for the conversion.": "Fili ʻa e faile fakahokohoko fakamotuʻalea ke fakaʻaongaʻi ki he ului.",
+ "Custom Output Path": "Hala ki he Output",
+ "Advanced Settings": "Fokotuʻutuʻu fakalakalaka",
+ "Output Path": "Hala Output",
+ "Export Format": "Hiki Atu a e Fōmetí",
+ "Select the audio to convert.": "Fili ʻa e ongó ke papi ului.",
+ "Split Audio": "Vahevahe ʻa e ongo",
+ "Autotune": "Autotune",
+ "Select the format to export the audio.": "Fili ʻa e founga ke export ʻaki ʻa e ongó.",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Fakaʻataʻata ʻa e (Deletes kotoa audios ʻi he ngaahi koloa/audios)",
+ "Clean Audio": "Ongo maʻa",
+ "Clean Strength": "Mālohi ke Maʻa",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "Ko e hala ʻe seivi ai ʻa e ongo Output, ʻi he peesi tuʻumaʻu ʻi he ngaahi koloa/audios/output.wav",
+ "Formant Shifting": "Feliliuaki ʻa e faʻu",
+ "Upscale Audio": "Meʻafua ʻo e ongo",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Fakaʻaongaʻi ha autotune molu ki hoʻo inferences, ʻa ia ʻoku fokotuʻu atu ki hono hivaʻi ʻo e ului.",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Vahevahe ʻa e ongo ki ha ngaahi fakatonuʻi ke maʻu ha ngaahi ola lelei ange ʻi ha ngaahi meʻa ʻe niʻihi.",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Fakamaʻa hoʻo ongo Output ʻo fakaʻaongaʻi ʻa e fakatokanga ki he longoaʻa algorithms, ʻa ia ʻoku fokotuʻu atu ki he lea audios.",
+ "Quefrency for formant shifting": "Quefrency ki he formant feliliuaki",
+ "Timbre for formant shifting": "Timbre ki he formant feliliuaki",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "ʻAi ke lava ʻo feliliuaki. Fakaʻaongaʻi ki he tangata ki he fefine mo hono fulihi convertions.",
+ "Browse presets for formanting": "Vakai takai holo ʻi he ngaahi seti ki he formanting",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Ko hono fakafuofuaʻi ʻo e ongo ki ha tuʻunga maʻolunga ange, ʻoku fokotuʻu atu ki he audios lelei. (ʻE fie maʻu ha taimi loloa ange ke ngaue ki he ongo)",
+ "Pitch": "Tuʻuaki",
+ "Default value is 1.0": "Peesi tuʻumaʻu ko e 1.0",
+ "Presets are located in /assets/formant_shift folder": "ʻOku tuʻu ʻa e ngaahi seti ʻi he/assets/formant_shift folder",
+ "Filter Radius": "Filter ofi",
+ "Search Feature Ratio": "Fika ʻo e kumi",
+ "Volume Envelope": "Voliume ʻo e sila",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Fokotuʻu ʻa e tuʻunga maʻa ki he ongo ʻoku ke fie maʻu, ko e lahi ange ia hoʻo fakalahi ia ko e lahi ange ia ʻene fakamaʻa, ka ʻoku malava pe ke toe fakasiʻisiʻi ange ʻa e ongo.",
+ "Protect Voiceless Consonants": "Maluʻi Voiceless Consonants",
+ "Convert": "Papi Uluí",
+ "Pitch extraction algorithm": "Tuʻuaki ʻo e algorithm toʻo ʻuli",
+ "Input Folder": "Fakahu ʻa e foulutaa",
+ "Batch": "Kulupu (Batch) Foaki",
+ "Export Audio": "Hiki Atu ʻa e Ongó",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Fetongi pe tuifio mo e voliume ʻo e sila ʻo e Output. Ko e ofi ange ʻa e fika (ratio) ki he 1, ko e lahi ange ia hono fakaʻaongaʻi ʻo e sila Output.",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Fokotuʻu ʻa e tuʻuaki ʻo e ongo, ko e maʻolunga ange ia ʻa e mahuʻinga, ko e maʻolunga ange ia ʻa e tuʻuaki.",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Fokotuʻu ʻa e algorithm toʻo ʻuli ke fakaʻaongaʻi ki he ului ʻo e ongo. Ko e algorithm default ko e rmvpe, ʻa ia ʻoku fokotuʻu atu ki ha ngaahi meʻa lahi.",
+ "Select the folder containing the audios to convert.": "Fili ʻa e fouluta ʻoku ʻi ai ʻa e audios ke ului.",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Ivi takiekina ʻoku fakaʻaongaʻi ʻe he faile fakahokohoko fakamotuʻalea; ʻoku fekauʻaki ha tuʻunga ʻulungāanga mahuʻinga māʻolunga ange mo ha ivi tākiekina lahi ange Neongo ia, ʻe lava ke tokoni ʻa e opting ki he ngaahi tuʻunga ʻulungaanga mahuʻinga maʻulalo ange ke fakasiʻisiʻi ʻa e ngaahi koloa ʻoku ʻi he ongo.",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Kapau ʻoku lahi ange ʻa e fika ʻi he toko tolu, ʻoku lava ke fakasiʻisiʻi ʻa e fakamanava ʻi hono siviʻi ʻo e kaa loto hala ʻi he ngaahi ola ʻo e tanaki.",
+ "Output Folder": "Foulutā Output",
+ "Enter output path": "Fakahu ʻa e hala Output",
+ "Enter input path": "Fakahu ʻa e hala ki he input",
+ "## Voice Blender": "# # Leʻo blender",
+ "Voice Blender": "Leʻo blender",
+ "Get information about the audio": "Maʻu e fakamatala fekauʻaki mo e ongo",
+ "Select the folder where the output audios will be saved.": "Fili ʻa e fouluta ʻe seivi ai ʻa e Output audios.",
+ "Drag and drop your model here": "Tohoʻi pea fakatooki hoʻo sipinga ʻi heni",
+ "Fusion": "Fusion",
+ "You can also use a custom path.": "Te ke lava foki ʻo fakaʻaongaʻi ha hala angamaheni.",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Maluʻi ʻa e consonants mo e manava ke taʻofi ʻa e electro mo e ngaahi koloa kehe. ʻOku ʻomi ʻe hono fusi ʻo e Parameter ki hono mahuʻinga lahi taha ʻo e 0.5 ha maluʻi fakaʻauliliki. Neongo ia, ʻe hanga ʻe hono fakasiʻisiʻi ʻo e tuʻunga ʻulungaanga mahuʻinga ko ʻeni ʻo fakasiʻisiʻi ʻa e lahi ʻo e maluʻi lolotonga ʻene mitigating ʻa e ola ʻo e fakahokohoko fakamotuʻalea.",
+ "Blend Ratio": "Tuifio ʻa e fika fehangahangai",
+ "Enter path to model": "Fakahu ʻa e hala ki he sipinga",
+ "Model information to be placed": "Fakamatala ʻo e motolo ke fokotuʻu",
+ "Path to Model": "Hala ki he Faʻifaʻitakiʻangá",
+ "Inroduce the model information": "Inroduce e fakamatala ki he motolo",
+ "View model information": "Vakai ki he fakamatala ki he motolo",
+ "Introduce the model pth path": "Fakafeʻiloaki ʻa e sipinga ʻo e hala konifelenisi",
+ "Model extraction": "Mōtolo hono toʻo e ʻul",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Fili ha ongo faʻifaʻitakiʻanga leʻo ʻe ua, fokotuʻu ʻa e peseti ʻoku ke fie maʻu, pea fakatahaʻi kinautolu ki ha leʻo foʻou ʻaupito.",
+ "View": "Mamataʻi",
+ "Model conversion": "Sipinga ʻo e ului",
+ "Pth file": "Faile ʻo e Pth",
+ "The information to be placed in the model (You can leave it blank or put anything).": "Ko e fakamatala ke fokotuʻu ʻi he sipinga (te ke lava ʻo tuku taʻe fakafonu pe faʻo ha meʻa).",
+ "Output of the pth file": "Output ʻo e faile ʻo e PTH",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "ʻE hanga ʻe hono liliu ʻo e tuʻunga ki he tafaʻaki ʻe taha pe ko e tafaʻaki ʻe taha ʻo ʻai ke faitatau ange ʻa e sipinga mo e ʻuluaki pe ua.",
+ "Extract F0 Curve": "Toʻo ʻa e F0 Pikoʻanga",
+ "# How to Report an Issue on GitHub": "# Founga hono lipooti ha palopalema ʻi he GitHub",
+ "Record": "Lekooti",
+ "Stop Recording": "Taʻofi e hiki",
+ "Introduce the model .pth path": "Fakafeʻiloaki ʻa e sipinga ʻo e hala Pth",
+ "Record Screen": "Lekooti e Screen",
+ "## Download Model": "# # Download e sipinga",
+ "See Model Information": "Vakai ki he sipinga ʻo e fakamatala",
+ "Model Link": "Fehokotakiʻanga ʻo e motolo",
+ "Download Model": "Download e Mōtoló",
+ "Introduce the model link": "Fakafeʻiloaki ʻa e fehokotakiʻanga ʻo e motolo",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Lomiʻi ʻi he ʻRecord Screenʻ ʻi laló ke kamata lekooti e meʻa ʻokú ke aʻusiá.",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. ʻalu ki he [GitHub ngaahi palopalema] (https://github.com/IAHispano/Applio/issues) pea lomiʻi ʻi he ʻ pulusinga foʻou ʻ.",
+ "## Drop files": "# # Ngaahi faile ʻo e tuluta",
+ "## Search Model": "# # Sipinga ʻo e fekumi",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "ʻOku fakafofongaʻi ʻe he F0 Pikoʻanga ʻa e kehekehe ʻi he tuʻo lahi ʻo e leʻo ʻi ha vahaʻataimi, ʻo fakahaaʻi ai ʻa e tuʻuaki ʻo e tuʻuaki mo e to.",
+ "Search": "Kumi",
+ "Introduce the model name to search.": "Fakafeʻiloaki e hingoa ʻo e motolo ke kumi.",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "ʻAve hoʻo faile Pth mo e faile fakahokohoko fakamotuʻalea ki he feituʻu ko ʻeni. Tohoʻi ʻa e taha pea mo e taha.",
+ "TTS Voices": "Ngaahi leʻo TTS",
+ "## Download Pretrained Models": "# # Download e kau ta sipinga kuo ʻosi akoʻi",
+ "And select the sampling rate": "Pea fili ʻa e vave ʻo e sipinga.",
+ "TTS Speed": "TTS vave",
+ "We couldn't find models by that name.": "Naʻe ʻikai ke mau lava ʻo maʻu ha sipinga ʻi he hingoa ko ia.",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Ko ʻene ʻosi pe hoʻo lekooti e palopalema, lomiʻi ʻi he ʻStop Recordingʻ (ko e button tatau pe, ka ko e ngaahi liliu ʻi he fakaʻilonga ʻo makatuʻunga pe ʻoku ke lekooti malohi pe ʻikai).",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. fakakakato ʻa e sipinga ʻo e palopalema ʻoku ʻoatu, fakapapauʻi ʻoku fakakau ai ʻa e ngaahi fakaikiiki ʻo ka fie maʻu, pea fakaʻaongaʻi ʻa e konga ki he ngaahi koloa ke upload ʻa e faile kuo hiki mei he sitepu kimuʻa.",
+ "Increase or decrease TTS speed.": "Fakalahi pe fakasiʻisiʻi TTS vave.",
+ "Text to Synthesize": "Fakamatala ki he fakatahatahaʻi",
+ "Select the pretrained model you want to download.": "Fili ʻa e sipinga kuo ʻosi akoʻi ʻoku ke fie download.",
+ "Select the TTS voice to use for the conversion.": "Fili ʻa e leʻo TTS ke fakaʻaongaʻi ki he ului.",
+ "Upload a .txt file": "Upload ha faile .txt",
+ "Input path for text file": "Fakahu e hala ki he faile text",
+ "Enter the text to synthesize.": "Fakahu ʻa e fakamatala ke fakatahatahaʻi.",
+ "Output Path for RVC Audio": "Hala Output ki he RVC ongo",
+ "Output Path for TTS Audio": "Hala Output ki he TTS ongo",
+ "Enter text to synthesize": "Fakahu ʻa e fakamatala ki he fakatahatahaʻi",
+ "The path to the text file that contains content for text to speech.": "Ko e hala ki he faile text ʻoku ʻi ai e meʻa ʻi he fakamatala ki he lea.",
+ "Enable fake GPU": "ʻAi ke loi GPU",
+ "Theme": "Kaveinga",
+ "Enable Applio integration with Discord presence": "ʻAi ke lava ʻo fakatahaʻi Applio mo e fekeʻikeʻi",
+ "Enable Applio integration with applio.org/models using flask": "ʻAi ke lava ʻo fakatahaʻi Applio mo e applio.org/models ʻo fakaʻaongaʻi ʻa e flask",
+ "Language": "Lea Fakafonuá",
+ "Restart Applio": "Toe tamateʻi Applio",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "Te ne fakaʻata ʻa e malava ko ia ke fakaʻaliʻali ʻa e ʻekitiviti Applio lolotonga ʻi he fekeʻikeʻi.",
+ "Precision": "Totonu",
+ "Select the theme you want to use. (Requires restarting Applio)": "Fili ʻa e kaveinga ʻoku ke fie fakaʻaongaʻi. (Fie maʻu to Applio)",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "ʻOku lolotonga ʻikai poupouʻi ʻa e ako koeʻuhi ko e ʻikai ke ʻi ai ha GPU. Ke fakaʻata ʻa e konga ki he ako, ʻalu ki he settings pea fakaʻata ʻa e ʻ loi GPU ʻ.",
+ "Update precision": "Fakatonutonu ʻa e totonu",
+ "It will activate the possibility of downloading models with a click from the website.": "Te ne fakaʻata ʻa e malava ko ia ke download ʻa e kau ta sipinga ʻaki ha lomiʻi mei he uepisaiti.",
+ "Plugin Installer": "Plugin tokotaha fola kapeti",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Kamataʻi ʻa e konga ki he lelue. Neongo ia, kataki ʻo fakatokangaʻi ange ʻoku ʻikai poupouʻi ʻa e meʻangaue ko ʻeni GPU, ko ia ʻoku ʻikai poupouʻi ai ʻa e ako. Ko e fili ko ʻeni ʻoku fai pe ia ki he ngaahi taumuʻa siviʻi. (ʻE toe kamata ʻa e fili ko ʻeni Applio)",
+ "Version Checker": "Version Checker",
+ "Drag your plugin.zip to install it": "ʻAve hoʻo plugin.zip ke fokotuʻu ia",
+ "Select the language you want to use. (Requires restarting Applio)": "Fili ʻa e lea fakafonua ʻoku ke fie fakaʻaongaʻi. (Fie maʻu to Applio)",
+ "Post-Process": "Founga ngaue",
+ "Select the precision you want to use for training and inference.": "Fili ʻa e totonu ʻoku ke fie fakaʻaongaʻi ki he ako mo e fakatonuʻi.",
+ "Check for updates": "Vakaiʻi e ngaahi fakamatala fakamuimuitahá",
+ "Reverb": "Reverb",
+ "Post-process the audio to apply effects to the output.": "Ngaue ki he ongo ke fakaʻaongaʻi e ngaahi ola ki he Output.",
+ "Reverb Room Size": "Lahi ʻo e loki Reverb",
+ "Apply reverb to the audio.": "Fakaʻaongaʻi ʻa e reverb ki he ongo.",
+ "Reverb Damping": "Reverb Damping",
+ "Check which version of Applio is the latest to see if you need to update.": "Vakaiʻi pe ko e fe ʻa e Version ʻo Applio ko e fakamuimuitaha ia ke vakai pe ʻoku fie maʻu ke ke fakatonutonu.",
+ "Reverb Wet Gain": "Reverb viviku",
+ "Set the damping of the reverb.": "Fokotuʻu ʻa e damping ʻo e reverb.",
+ "Reverb Dry Gain": "Reverb momoa",
+ "Reverb Width": "Reverb maokupu",
+ "Set the room size of the reverb.": "Fokotuʻu e lahi ʻo e loki ʻo e reverb.",
+ "Set the wet gain of the reverb.": "Fokotuʻu ʻa e maʻu viviku ʻo e reverb.",
+ "Reverb Freeze Mode": "Reverb e founga ʻo e momoko",
+ "Set the dry gain of the reverb.": "Fokotuʻu ʻa e paʻanga momoa ʻo e reverb.",
+ "Pitch Shift": "Sifi ʻo e tuʻuaki",
+ "Set the width of the reverb.": "Fokotuʻu ʻa e laulahi ʻo e reverb.",
+ "Limiter": "Limiter",
+ "Set the freeze mode of the reverb.": "Fokotuʻu ʻa e founga momoko ʻo e reverb.",
+ "Pitch Shift Semitones": "Tuʻuaki ʻo e Shift Semitones",
+ "Apply pitch shift to the audio.": "Fakaʻaongaʻi ʻa e sifi ki he ongo.",
+ "Limiter Release Time": "Limiter taimi tukuange",
+ "Limiter Threshold dB": "Limiter huʻanga dB",
+ "Set the pitch shift semitones.": "Fokotuʻu ʻa e semitones ʻo e sifi.",
+ "Gain": "Maʻu",
+ "Apply limiter to the audio.": "Fakaʻaongaʻi ʻa e limiter ki he ongo.",
+ "Set the limiter threshold dB.": "Fokotuʻu ʻa e limiter huʻanga dB.",
+ "Gain dB": "Maʻu ʻa e dB",
+ "Set the gain dB.": "Fokotuʻu ʻa e dB.",
+ "Chorus": "Chorus",
+ "Apply gain to the audio.": "Fakaʻaongaʻi ʻa e maʻu ki he ongo.",
+ "Distortion": "Fakakeheʻi",
+ "Distortion Gain": "Maʻu ʻa e fakakeheʻi",
+ "Set the limiter release time.": "Fokotuʻu ʻa e taimi tukuange limiter.",
+ "Apply chorus to the audio.": "Fakaʻaongaʻi ʻa e tau ki he ongo.",
+ "Set the distortion gain.": "Fokotuʻu ʻa e mioʻi maʻu.",
+ "Chorus Depth": "Ko e loloto ʻo e tau",
+ "Chorus Rate Hz": "Vave ʻo e tau Hz",
+ "Set the chorus depth.": "Fokotuʻutuʻu loloto ʻa e tau.",
+ "Chorus Center Delay ms": "Senita ʻo e tau fakatoloi ʻa e MS",
+ "Set the chorus rate Hz.": "Fokotuʻu ʻa e vave ʻo e tau Hz.",
+ "Chorus Feedback": "Fakamatala ki he tau",
+ "Set the chorus center delay ms.": "Fokotuʻu ʻa e Senita tau ke fakatoloi ʻa e MS.",
+ "Set the chorus feedback.": "Fokotuʻu ʻa e fakamatala ki he tau.",
+ "Chorus Mix": "Tuifio ʻa e tau",
+ "Bitcrush": "Bitcrush",
+ "Clipping": "Kosiʻi",
+ "Bitcrush Bit Depth": "Bitcrush kiʻi loloto",
+ "Set the chorus mix.": "Fokotuʻu ʻa e tau.",
+ "Apply clipping to the audio.": "Fakaʻaongaʻi ʻa e tatau ki he ongo.",
+ "Apply distortion to the audio.": "Fakaʻaongaʻi ʻa e mioʻi ki he ongo.",
+ "Clipping Threshold": "Tatau ʻo e huʻanga",
+ "Set the bitcrush bit depth.": "Fokotuʻu ke loloto ʻa e bitcrush.",
+ "Set the clipping threshold.": "Fokotuʻu ʻa e huʻanga ki he tatau.",
+ "Compressor": "ʻOku ʻikai ke ʻi ai ha meʻ",
+ "Apply bitcrush to the audio.": "Fakaʻaongaʻi ʻa e meʻa fuʻu leʻo īkí ki he ongó.",
+ "Apply compressor to the audio.": "Fakaʻaongaʻi ʻa e compressor ki he ongo.",
+ "Set the compressor threshold dB.": "Fokotuʻu ʻa e compressor huʻanga dB.",
+ "Compressor Ratio": "Fika ʻo e Compressor",
+ "Compressor Threshold dB": "ʻOku ʻikai ke ʻi ai ha meʻa ʻi he feituʻu ʻoku",
+ "Set the compressor ratio.": "Fokotuʻu ʻa e fika compressor.",
+ "Compressor Attack ms": "ʻOhofi ʻe Oroville ʻa e MS",
+ "Compressor Release ms": "Deutsche Release MS",
+ "Delay": "Fakatoloi",
+ "Set the compressor release ms.": "Fokotuʻu ʻa e compressor Release MS.",
+ "Set the compressor attack ms.": "Fokotuʻu ʻa e compressor ʻohofi ʻo e MS.",
+ "Delay Seconds": "Fakatoloi e Sekoni",
+ "Delay Mix": "Fakatoloi e tuifio",
+ "Set the delay seconds.": "Fokotuʻu ʻa e ngaahi sekoni ʻo e fakatoloi.",
+ "Delay Feedback": "Fakatoloi e Fakamatala",
+ "Set the delay feedback.": "Fokotuʻu ʻa e fakamatala ki he fakatoloi.",
+ "Set the delay mix.": "Fokotuʻu ʻa e fakatoloi.",
+ "Custom Embedder": "Custom Embedder",
+ "Apply delay to the audio.": "Fakaʻaongaʻi ʻa e fakatoloi ki he ongo.",
+ "Upload .json": "Upload .json",
+ "Refresh embedders": "Fakafoʻou embedders",
+ "model information": "fakamatala ki he motolo",
+ "Upload .bin": "Upload .bin",
+ "Folder Name": "Hingoa ʻo e Foulutā",
+ "Select Custom Embedder": "Fili ʻa e Embedder tuʻumaʻu",
+ "Move files to custom embedder folder": "Hiki ʻa e ngaahi faile ki he fouluta embedder angamaheni",
+ "Model Creator": "Sipinga ʻo e tupuʻanga",
+ "Speaker ID": "ID Lea",
+ "Name of the model creator. (Default: Unknown)": "Hingoa ʻo e tokotaha fakatupu sipinga. (Peesi tuʻumaʻu: ʻikai ʻiloʻi)",
+ "Model Author Name": "Hingoa ʻo e tokotaha faʻu tohi",
+ "The name that will appear in the model information.": "Ko e hingoa ʻe ʻasi ʻi he fakamatala ʻo e motolo.",
+ "Set name": "Fokotuʻu e hingoá",
+ "Select the speaker ID to use for the conversion.": "Fili ʻa e ID lea ke fakaʻaongaʻi ki he fakaului.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "Fokotuʻu ʻa e malohi autotune-ko e lahi ange ia hoʻo fakalahi ia ko e lahi ange ia ʻene ʻalu ki he grid chromatic."
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/tr_TR.json b/assets/i18n/languages/tr_TR.json
new file mode 100644
index 0000000000000000000000000000000000000000..9351b6023d59447a46c0bb415e1d633e0b1a911d
--- /dev/null
+++ b/assets/i18n/languages/tr_TR.json
@@ -0,0 +1,325 @@
+{
+ "Cache Dataset in GPU":"Veri Kümesini GPU'da Önbelleğe Al",
+ "Set the compressor threshold dB.":"Kompresör eşik dB'sini ayarlayın.",
+ "Set the limiter release time.":"Sınırlayıcı bırakma süresini ayarlayın.",
+ "The GPU information will be displayed here.":"GPU bilgileri burada görüntülenecektir.",
+ "Limiter Threshold dB":"Sınırlayıcı Eşik dB",
+ "Save Only Latest":"Yalnızca En Son Kaydet",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.":"Önişlem için kullanmak istediğiniz GPU sayısını, tire (-) ile ayırarak belirtin. Şu anda, çoklu GPU kullanmanın önemli bir etkisi olmayacaktır.",
+ "Apply compressor to the audio.":"Sesi kompresörden geçirin.",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.":"Bu ayar, her dönem sonunda model ağırlıklarını kaydetmenizi sağlar.",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.":"Bu ayar etkinleştirildiğinde, G ve D dosyaları yalnızca en son sürümlerini kaydederek depolama alanından tasarruf sağlar.",
+ "Compressor Threshold dB":"Kompresör Eşik dB",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).":"Çıkarma işlemi için kullanmak istediğiniz GPU sayısını, tire (-) ile ayırarak belirtin.",
+ "Compressor Ratio":"Kompresör Oranı",
+ "Apply pitch shift to the audio.":"Sese perde kayması uygulayın.",
+ "Preprocess Dataset":"Veri Kümesini Önişle",
+ "Specifies the overall quantity of epochs for the model training process.":"Model eğitim süreci için toplam dönem sayısını belirtir.",
+ "Custom Pretrained":"Özel Önceden Eğitilmiş",
+ "Pitch Shift Semitones":"Perde Kayması Yarım Ton",
+ "Cache the dataset in GPU memory to speed up the training process.":"Eğitim sürecini hızlandırmak için veri kümesini GPU belleğinde önbelleğe alın.",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.":"Belirli kullanım durumuna göre uyarlanmış en uygun önceden eğitilmiş modelleri seçmek performansı önemli ölçüde artırabileceğinden, özel önceden eğitilmiş modellerin kullanılması daha iyi sonuçlar doğurabilir.",
+ "Determine at how many epochs the model will saved at.":"Modelin kaç dönemde bir kaydedileceğini belirleyin.",
+ "Set the gain dB.":"Kazanç dB'sini ayarlayın.",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.":"Önişlemde kullanılacak CPU çekirdeği sayısı. Varsayılan ayar, çoğu durum için önerilen CPU çekirdeklerinizdir.",
+ "Extract Features":"Özellikleri Çıkar",
+ "Embedder Model":"Gömücü Model",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.":"Çıkarma işleminde kullanılacak CPU çekirdeği sayısı. Varsayılan ayar, çoğu durum için önerilen CPU çekirdeklerinizdir.",
+ "Bitcrush":"Bit Ezme",
+ "Model used for learning speaker embedding.":"Konuşmacı gömmeyi öğrenmek için kullanılan model.",
+ "Apply gain to the audio.":"Sese kazanç uygulayın.",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.":"Daha hızlı performans için model önişlemesini GPU'da çalıştırmayı önceliklendiriyoruz. CPU'yu kullanmayı tercih ederseniz, GPU alanını boş bırakmanız yeterlidir.",
+ "Upload Pretrained Model":"Önceden Eğitilmiş Modeli Yükle",
+ "Save Every Epoch":"Her Dönemde Kaydet",
+ "Apply bitcrush to the audio.":"Sese bit ezme uygulayın.",
+ "Limiter Release Time":"Sınırlayıcı Bırakma Süresi",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.":"Daha iyi GPU mimarisine sahip kullanıcılar için önerilen gelişmiş GPU ayarlarını belirler.",
+ "Set the bitcrush bit depth.":"Bit ezme bit derinliğini ayarlayın.",
+ "GPU Information":"GPU Bilgileri",
+ "Bitcrush Bit Depth":"Bit Ezme Bit Derinliği",
+ "Extract":"Çıkar",
+ "Set the clipping threshold.":"Kırpma eşiğini ayarlayın.",
+ "Limiter":"Sınırlayıcı",
+ "Refresh Custom Pretraineds":"Özel Önceden Eğitilmişleri Yenile",
+ "Pretrained Custom Settings":"Önceden Eğitilmiş Özel Ayarlar",
+ "Set the compressor attack ms.":"Kompresör saldırı ms'sini ayarlayın.",
+ "Pitch Guidance":"Perde Kılavuzu",
+ "0 to ∞ separated by -":"0'dan ∞'a - ile ayrılmış",
+ "Hop Length":"Atlama Uzunluğu",
+ "Use CPU":"CPU Kullan",
+ "Distortion":"Bozulma",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.":"Sistemin önemli bir perde değişikliğine geçiş yapmasının ne kadar sürdüğünü gösterir. Daha küçük atlama uzunlukları, çıkarım için daha fazla zaman gerektirir, ancak daha yüksek perde doğruluğu sağlar.",
+ "GPU Settings":"GPU Ayarları",
+ "Set the compressor ratio.":"Kompresör oranını ayarlayın.",
+ "Compressor":"Kompresör",
+ "Set the pitch shift semitones.":"Perde kayması yarım tonlarını ayarlayın.",
+ "The file you dropped is not a valid pretrained file. Please try again.":"Bıraktığınız dosya geçerli bir önceden eğitilmiş dosya değil. Lütfen tekrar deneyin.",
+ "Total Epoch":"Toplam Dönem",
+ "Compressor Attack ms":"Kompresör Saldırı ms",
+ "Gain dB":"Kazanç dB",
+ "Index Algorithm":"İndeks Algoritması",
+ "Apply clipping to the audio.":"Sese kırpma uygulayın.",
+ "Save Every Weights":"Her Ağırlığı Kaydet",
+ "Force the use of CPU for training.":"Eğitim için CPU kullanımını zorla.",
+ "Set the limiter threshold dB.":"Sınırlayıcı eşik dB'sini ayarlayın.",
+ "GPU Custom Settings":"GPU Özel Ayarlar",
+ "Batch Size":"Toplu Boyut",
+ "Apply limiter to the audio.":"Sese sınırlayıcı uygulayın.",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.":"Daha hızlı performans için model çıkarımını GPU'da çalıştırmayı önceliklendiriyoruz. CPU'yu kullanmayı tercih ederseniz, GPU alanını boş bırakmanız yeterlidir.",
+ "Pretrained":"Önceden Eğitilmiş",
+ "Click the refresh button to see the pretrained file in the dropdown menu.":"Önceden eğitilmiş dosyayı açılır menüde görmek için yenile düğmesine tıklayın.",
+ "Pretrained D Path":"Özel Önceden Eğitilmiş D",
+ "Clipping Threshold":"Kırpma Eşiği",
+ "Pretrained G Path":"Özel Önceden Eğitilmiş G",
+ "Gain":"Kazanç",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.":"Perde kılavuzu kullanarak, orijinal sesin perdesi de dahil olmak üzere tonlamasını yansıtmak mümkün hale gelir. Bu özellik, özellikle orijinal melodiyi veya perde kalıbını korumak için gerekli olan şarkı söyleme ve diğer senaryolar için değerlidir.",
+ "GPU Number":"GPU Numarası",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.":"GPU'nuzun mevcut VRAM'iyle uyumlu hale getirmeniz önerilir. 4 ayarı daha iyi doğruluk sağlar ancak işlem daha yavaştır, 8 ise daha hızlı ve standart sonuçlar sağlar.",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.":"Kendi modelinizi eğitirken önceden eğitilmiş modelleri kullanın. Bu yaklaşım eğitim süresini azaltır ve genel kaliteyi artırır.",
+ "Clipping":"Kırpma",
+ "Delay Seconds":"Gecikme Saniye",
+ "Overtraining Detector Settings":"Aşırı Eğitim Dedektörü Ayarları",
+ "Overtraining Threshold":"Aşırı Eğitim Eşiği",
+ "Set the delay seconds.":"Gecikme saniyelerini ayarlayın.",
+ "Apply delay to the audio.":"Sese gecikme uygulayın.",
+ "Extra":"Ekstra",
+ "Enter dataset path":"Veri kümesi yolunu girin",
+ "Compressor Release ms":"Kompresör Bırakma ms",
+ "Settings":"Ayarlar",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.":"Modelinizin iyileştirme algılanmadığında eğitimi durdurmasını istediğiniz maksimum dönem sayısını ayarlayın.",
+ "Set the compressor release ms.":"Kompresör bırakma ms'sini ayarlayın.",
+ "Delay":"Gecikme",
+ "Model Name":"Model Adı",
+ "Upload .bin":".bin Yükle",
+ "Download":"İndir",
+ "Fresh Training":"Yeni Eğitim",
+ "Processing":"İşleniyor",
+ "Start Training":"Eğitimi Başlat",
+ "Folder Name":"Klasör Adı",
+ "It's recommended to deactivate this option if your dataset has already been processed.":"Veri kümeniz zaten işlenmişse bu seçeneği devre dışı bırakmanız önerilir.",
+ "Refresh embedders":"Gömücüleri yenile",
+ "Delay Mix":"Gecikme Karışımı",
+ "Generate Index":"İndeks Oluştur",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.":"'Yükle' düğmesi yalnızca google colab içindir: Dışa aktarılan dosyaları Google Drive'ınızdaki ApplioExported klasörüne yükler.",
+ "Set the delay mix.":"Gecikme karışımını ayarlayın.",
+ "Report a Bug":"Hata Bildir",
+ "Export Model":"Modeli Dışa Aktar",
+ "Set the delay feedback.":"Gecikme geri bildirimini ayarlayın.",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.":"Bu ayarı yalnızca yeni bir modeli sıfırdan eğitiyorsanız veya eğitimi yeniden başlatıyorsanız etkinleştirin. Önceki oluşturulan tüm ağırlıkları ve tensorboard günlüklerini siler.",
+ "Model Information":"Model Bilgileri",
+ "Delay Feedback":"Gecikme Geri Bildirimi",
+ "Stop Training":"Eğitimi Durdur",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.":"Modelin eğitim verilerini çok iyi öğrenmesini ve yeni verilere genelleme yeteneğini kaybetmesini önlemek için aşırı eğitimi algılayın.",
+ "Custom Embedder":"Özel Gömücü",
+ "Select Custom Embedder":"Özel Gömücü Seçin",
+ "Plugins":"Eklentiler",
+ "Unload Voice":"Sesi Kaldır",
+ "Select Audio":"Ses Seç",
+ "Set the distortion gain.":"Bozulma kazanımını ayarlayın.",
+ "Drag your plugin.zip to install it":"Yüklemek için plugin.zip dosyanızı sürükleyin",
+ "Refresh":"Yenile",
+ "Chorus":"Koro",
+ "Precision":"Hassasiyet",
+ "Set the chorus depth.":"Koro derinliğini ayarlayın.",
+ "Apply chorus to the audio.":"Sese koro efekti uygulayın.",
+ "Single":"Tekli",
+ "Chorus Center Delay ms":"Koro Merkez Gecikmesi ms",
+ "Post-Process":"Son İşlem",
+ "Language":"Dil",
+ "Chorus Depth":"Koro Derinliği",
+ "Select the precision you want to use for training and inference.":"Eğitim ve çıkarım için kullanmak istediğiniz hassasiyeti seçin.",
+ "Index File":"İndeks Dosyası",
+ "Set the chorus rate Hz.":"Koro hızı Hz'sini ayarlayın.",
+ "Exported Index file":"Dışa Aktarılan İndeks dosyası",
+ "Chorus Feedback":"Koro Geri Bildirimi",
+ "Update precision":"Hassasiyeti Güncelle",
+ "Chorus Mix":"Koro Karışımı",
+ "Select the voice model to use for the conversion.":"Dönüştürme için kullanılacak ses modelini seçin.",
+ "Exported Pth file":"Dışa Aktarılan Pth dosyası",
+ "Select the theme you want to use. (Requires restarting Applio)":"Kullanmak istediğiniz temayı seçin. (Applio'nun yeniden başlatılmasını gerektirir)",
+ "Select the index file to use for the conversion.":"Dönüştürme için kullanılacak indeks dosyasını seçin.",
+ "Theme":"Tema",
+ "Restart Applio":"Applio'yu Yeniden Başlat",
+ "Set the chorus center delay ms.":"Koro merkez gecikmesi ms'sini ayarlayın.",
+ "Select the pth file to be exported":"Dışa aktarılacak pth dosyasını seçin",
+ "Set the chorus feedback.":"Koro geri bildirimini ayarlayın.",
+ "Select the index file to be exported":"Dışa aktarılacak indeks dosyasını seçin",
+ "Version Checker":"Sürüm Denetleyicisi",
+ "Plugin Installer":"Eklenti Yükleyici",
+ "Set the chorus mix.":"Koro karışımını ayarlayın.",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.":"KMeans, veri kümesini K kümeye bölen bir kümeleme algoritmasıdır. Bu ayar, özellikle büyük veri kümeleri için kullanışlıdır.",
+ "Upload":"Yükle",
+ "Overtraining Detector":"Aşırı Eğitim Dedektörü",
+ "Chorus Rate Hz":"Koro Hızı Hz",
+ "Check which version of Applio is the latest to see if you need to update.":"Güncelleme yapmanız gerekip gerekmediğini görmek için Applio'nun hangi sürümünün en son olduğunu kontrol edin.",
+ "Upload Audio":"Ses Yükle",
+ "Select the language you want to use. (Requires restarting Applio)":"Kullanmak istediğiniz dili seçin. (Applio'nun yeniden başlatılmasını gerektirir)",
+ "Check for updates":"Güncellemeleri kontrol et",
+ "Apply distortion to the audio.":"Sese bozulma uygulayın.",
+ "Distortion Gain":"Bozulma Kazancı",
+ "Post-process the audio to apply effects to the output.":"Çıktıya efekt uygulamak için sesi son işleyin.",
+ "Voice Model":"Ses Modeli",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.":"Çıkarımlarınıza yumuşak bir otomatik ayar uygulayın, şarkı dönüştürmeleri için önerilir.",
+ "Select the audio to convert.":"Dönüştürülecek sesi seçin.",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.":"GPU olmadığı için eğitim şu anda desteklenmiyor. Eğitim sekmesini etkinleştirmek için ayarlar sekmesine gidin ve 'Sahte GPU' seçeneğini etkinleştirin.",
+ "Drag and drop your model here":"Modelinizi buraya sürükleyip bırakın",
+ "Upload a .txt file":".txt dosyası yükle",
+ "The output information will be displayed here.":"Çıktı bilgileri burada görüntülenecektir.",
+ "Introduce the model pth path":"Model pth yolunu girin",
+ "Advanced Settings":"Gelişmiş Ayarlar",
+ "You can also use a custom path.":"Özel bir yol da kullanabilirsiniz.",
+ "Audio Analyzer":"Ses Analizörü",
+ "Output Path for TTS Audio":"TTS Sesi için Çıktı Yolu",
+ "Inference":"Çıkarım",
+ "Clear Outputs (Deletes all audios in assets/audios)":"Çıktıları Temizle (assets/audios içindeki tüm sesleri siler)",
+ "Blend Ratio":"Karışım Oranı",
+ "Custom Output Path":"Özel Çıktı Yolu",
+ "Enter text to synthesize":"Sentezlenecek metni girin",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.":"Konumu bir tarafa veya diğerine doğru ayarlamak, modeli birinci veya ikinciye daha benzer hale getirecektir.",
+ "It will activate the possibility of displaying the current Applio activity in Discord.":"Mevcut Applio etkinliğinin Discord'da görüntülenmesini mümkün kılacaktır.",
+ "Enable fake GPU":"Sahte GPU'yu etkinleştir",
+ "Upscale Audio":"Sesi Yükselt",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.":"Kullanım kolaylığına ve performansa odaklanan basit, yüksek kaliteli bir ses dönüştürme aracı.\n[Türkçe Çeviri: Enes](https://discord.com/users/1140031358006202468)",
+ "Output Path":"Çıktı Yolu",
+ "Fusion":"Füzyon",
+ "Inroduce the model information":"Model bilgilerini girin",
+ "It will activate the possibility of downloading models with a click from the website.":"Web sitesinden tek tıklamayla model indirme imkanını etkinleştirecektir.",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)":"Eğitim sekmesini etkinleştirir. Ancak, lütfen bu cihazın GPU yeteneklerinden yoksun olduğunu unutmayın, bu nedenle eğitim desteklenmez. Bu seçenek yalnızca test amaçlıdır. (Bu seçenek Applio'yu yeniden başlatacaktır)",
+ "Autotune":"Otomatik Ayar",
+ "Training":"Eğitim",
+ "Export Format":"Dışa Aktarma Biçimi",
+ "Enter the text to synthesize.":"Sentezlenecek metni girin.",
+ "Path to Model":"Model Yolu",
+ "Text to Synthesize":"Sentezlenecek Metin",
+ "Select the format to export the audio.":"Sesi dışa aktarmak için biçimi seçin.",
+ "View model information":"Model bilgilerini görüntüle",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.":"Konuşma sesleri için önerilen, gürültü algılama algoritmalarını kullanarak ses çıktınızı temizleyin.",
+ "Clean Audio":"Sesi Temizle",
+ "Select the TTS voice to use for the conversion.":"Dönüştürme için kullanılacak TTS sesini seçin.",
+ "Output Path for RVC Audio":"RVC Sesi için Çıktı Yolu",
+ "Enter path to model":"Model yolunu girin",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav":"Çıktı sesinin kaydedileceği yol, varsayılan olarak assets/audios/output.wav",
+ "Model conversion":"Model dönüştürme",
+ "Clean Strength":"Temizleme Gücü",
+ "This section contains some extra utilities that often may be in experimental phases.":"Bu bölüm, genellikle deneysel aşamalarda olabilecek bazı ekstra yardımcı programlar içerir.",
+ "Output Information":"Çıktı Bilgileri",
+ "Input path for text file":"Metin dosyası için giriş yolu",
+ "Split Audio":"Sesi Böl",
+ "Enable Applio integration with applio.org/models using flask":"Flask kullanarak Applio'nun applio.org/models ile entegrasyonunu etkinleştir",
+ "Pth file":"Pth dosyası",
+ "The information to be placed in the model (You can leave it blank or put anything).":"Modele yerleştirilecek bilgiler (Boş bırakabilir veya herhangi bir şey koyabilirsiniz).",
+ "The path to the text file that contains content for text to speech.":"Metinden konuşmaya içerik içeren metin dosyasının yolu.",
+ "View":"Görüntüle",
+ "Split the audio into chunks for inference to obtain better results in some cases.":"Bazı durumlarda daha iyi sonuçlar elde etmek için çıkarım için sesi parçalara ayırın.",
+ "Model information to be placed":"Yerleştirilecek model bilgileri",
+ "Merge Audios":"Sesleri Birleştir",
+ "Enable Applio integration with Discord presence":"Applio'nun Discord varlığıyla entegrasyonunu etkinleştir",
+ "Model extraction":"Model çıkarma",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.":".pth dosyanızı ve .index dosyanızı bu alana sürükleyin. Birini ve ardından diğerini sürükleyin.",
+ "Download Model":"Modeli İndir",
+ "## Drop files":"## Dosyaları Bırakın",
+ "Introduce the model name to search.":"Aranacak model adını girin.",
+ "Dataset Creator":"Veri Kümesi Oluşturucu",
+ "Increase or decrease TTS speed.":"TTS hızını artırın veya azaltın.",
+ "## Search Model":"## Modeli Ara",
+ "TTS Speed":"TTS Hızı",
+ "TTS Voices":"TTS Sesleri",
+ "And select the sampling rate":"Ve örnekleme oranını seçin",
+ "## Download Pretrained Models":"## Önceden Eğitilmiş Modelleri İndir",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.":"Ses dosyası veri kümesine başarıyla eklendi. Lütfen önişlem düğmesine tıklayın.",
+ "Search":"Ara",
+ "Introduce the model link":"Model bağlantısını girin",
+ "Model Architecture":"Model Mimarisi",
+ "Model Link":"Model Bağlantısı",
+ "Select the pretrained model you want to download.":"İndirmek istediğiniz önceden eğitilmiş modeli seçin.",
+ "We couldn't find models by that name.":"Bu adda model bulamadık.",
+ "Set the width of the reverb.":"Yankının genişliğini ayarlayın.",
+ "Protect Voiceless Consonants":"Sessiz Ünsüzleri Koru",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.":"Elektro-akustik yırtılmayı ve diğer artefaktları önlemek için farklı ünsüzleri ve nefes alma seslerini koruyun. Parametreyi maksimum 0.5 değerine çekmek kapsamlı koruma sağlar. Ancak, bu değeri azaltmak koruma kapsamını azaltabilirken, indeksleme etkisini azaltabilir.",
+ "Pitch extraction algorithm":"Perde çıkarma algoritması",
+ "Get information about the audio":"Ses hakkında bilgi edinin",
+ "Model Creator":"Model Oluşturucu",
+ "## Voice Blender":"## Ses Karıştırıcı",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.":"Ses dönüştürme için kullanılacak perde çıkarma algoritması. Varsayılan algoritma, çoğu durum için önerilen rmvpe'dir.",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.":"İki ses modeli seçin, istediğiniz karışım yüzdesini ayarlayın ve bunları tamamen yeni bir seste karıştırın.",
+ "Upload .json":".json Yükle",
+ "Voice Blender":"Ses Karıştırıcı",
+ "Move files to custom embedder folder":"Dosyaları özel gömүcü klasörüne taşı",
+ "Convert":"Dönüştür",
+ "Enter output path":"Çıktı yolunu girin",
+ "model information":"model bilgileri",
+ "Reverb":"Yankı",
+ "Export Audio":"Sesi Dışa Aktar",
+ "Apply reverb to the audio.":"Sese yankı uygulayın.",
+ "Output Folder":"Çıktı Klasörü",
+ "Speaker ID":"Konuşmacı Kimliği",
+ "Select the speaker ID to use for the conversion.":"Dönüştürme için kullanılacak konuşmacı kimliğini seçin.",
+ "Name of the model creator. (Default: Unknown)":"Model oluşturucunun adı. (Varsayılan: Bilinmiyor)",
+ "Reverb Room Size":"Yankı Oda Boyutu",
+ "Batch":"Toplu",
+ "Set the dry gain of the reverb.":"Yankının kuru kazanımını ayarlayın.",
+ "Pitch Shift":"Perde Kayması",
+ "Reverb Damping":"Yankı Sönümlemesi",
+ "Set the wet gain of the reverb.":"Yankının ıslak kazanımını ayarlayın.",
+ "Reverb Wet Gain":"Yankı Islak Kazancı",
+ "Model Author Name":"Model Yazar Adı",
+ "Set the freeze mode of the reverb.":"Yankının dondurma modunu ayarlayın.",
+ "Input Folder":"Giriş Klasörü",
+ "Select the folder containing the audios to convert.":"Dönüştürülecek sesleri içeren klasörü seçin.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.":"Otomatik ayar gücünü ayarlayın - ne kadar artırırsanız, kromatik ızgaraya o kadar çok yapışacaktır.",
+ "Reverb Freeze Mode":"Yankı Dondurma Modu",
+ "Reverb Width":"Yankı Genişliği",
+ "Set the damping of the reverb.":"Yankının sönümlemesini ayarlayın.",
+ "Set the room size of the reverb.":"Yankının oda boyutunu ayarlayın.",
+ "Reverb Dry Gain":"Yankı Kuru Kazancı",
+ "The name that will appear in the model information.":"Model bilgilerinde görünecek ad.",
+ "Set name":"Adı ayarla",
+ "Enter input path":"Giriş yolunu girin",
+ "Select the folder where the output audios will be saved.":"Çıktı seslerinin kaydedileceği klasörü seçin.",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)":"Düşük kaliteli sesler için önerilen, sesi daha yüksek bir kaliteye yükseltin. (Sesin işlenmesi daha uzun sürebilir)",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.":"İndeks dosyası tarafından uygulanan etki; daha yüksek bir değer, daha büyük etkiye karşılık gelir. Ancak, daha düşük değerler seçmek, seste bulunan artefaktları azaltmaya yardımcı olabilir.",
+ "Preprocess":"Önişle",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.":"İstediğiniz sese temizleme seviyesini ayarlayın, ne kadar artırırsanız o kadar çok temizler, ancak sesin daha fazla sıkıştırılması mümkündür.",
+ "Enter dataset name":"Veri kümesi adını girin",
+ "Audio cutting":"Ses kesme",
+ "Formant Shifting":"Formant Kaydırma",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.":"Çıktının ses zarfıyla değiştirin veya karıştırın. Oran 1'e ne kadar yakınsa, çıktı zarfı o kadar çok kullanılır.",
+ "Refresh Datasets":"Veri Kümelerini Yenile",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.":"Formant kaydırmayı etkinleştirin. Erkekten kadına ve tam tersine dönüştürmeler için kullanılır.",
+ "Search Feature Ratio":"Arama Özelliği Oranı",
+ "Browse presets for formanting":"Formantlama için ön ayarlara göz atın",
+ "Presets are located in /assets/formant_shift folder":"Ön ayarlar /assets/formant_shift klasöründe bulunur",
+ "Dataset Name":"Veri Kümesi Adı",
+ "Dataset Path":"Veri Kümesi Yolu",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.":"Sayı üç veya daha büyükse, toplanan ton sonuçlarında medyan filtreleme kullanmak solunumu azaltma potansiyeline sahiptir.",
+ "Process effects":"Efektleri işle",
+ "Default value is 1.0":"Varsayılan değer 1.0'dır",
+ "Quefrency for formant shifting":"Formant kaydırma için quefrency",
+ "Volume Envelope":"Ses Zarfı",
+ "Timbre for formant shifting":"Formant kaydırma için tını",
+ "Filter Radius":"Filtre Yarıçapı",
+ "Pitch":"Perde",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.":"Sesin perdesini ayarlayın, değer ne kadar yüksekse, perde o kadar yüksek olur.",
+ "Name of the new model.":"Yeni modelin adı.",
+ "Stop Recording":"Kaydı Durdur",
+ "## Download Model":"## Modeli İndir",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.":"f0 eğrisi, bir sesin temel frekansındaki zaman içindeki değişimleri temsil eder ve perdenin nasıl yükselip alçaldığını gösterir.",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.":"1. Yaşadığınız sorunu kaydetmeye başlamak için aşağıdaki 'Ekranı Kaydet' düğmesine tıklayın.",
+ "# How to Report an Issue on GitHub":"# GitHub'da Sorun Nasıl Bildirilir",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.":"3. [GitHub Issues](https://github.com/IAHispano/Applio/issues) adresine gidin ve 'Yeni Sorun' düğmesine tıklayın.",
+ "Record Screen":"Ekranı Kaydet",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).":"2. Sorunu kaydetmeyi bitirdiğinizde, 'Kaydı Durdur' düğmesine tıklayın (aynı düğme, ancak etiket aktif olarak kayıt yapıp yapmadığınıza bağlı olarak değişir).",
+ "See Model Information":"Model Bilgilerini Gör",
+ "Output of the pth file":"Pth dosyasının çıktısı",
+ "Extract F0 Curve":"F0 Eğrisini Çıkar",
+ "Record":"Kaydet",
+ "Introduce the model .pth path":"Model .pth yolunu girin",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.":"4. Sağlanan sorun şablonunu doldurun, gerektiğinde ayrıntıları eklediğinizden emin olun ve önceki adımdaki kaydedilmiş dosyayı yüklemek için varlıklar bölümünü kullanın.",
+ "Name of the new dataset.":"Yeni veri kümesinin adı.",
+ "Upload Audio Dataset":"Ses Veri Kümesini Yükle",
+ "Sampling Rate":"Örnekleme Oranı",
+ "Version of the model architecture.":"Model mimarisinin sürümü.",
+ "Path to the dataset folder.":"Veri kümesi klasörünün yolu.",
+ "Enter model name":"Model adını girin",
+ "The sampling rate of the audio files.":"Ses dosyalarının örnekleme oranı."
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/uk_UK.json b/assets/i18n/languages/uk_UK.json
new file mode 100644
index 0000000000000000000000000000000000000000..56405a5e5d70d9727a2dd72c470507d2a6a79f33
--- /dev/null
+++ b/assets/i18n/languages/uk_UK.json
@@ -0,0 +1,325 @@
+{
+ "Processing": "Обробки",
+ "Inference": "Висновок",
+ "Training": "Навчання",
+ "Settings": "Параметри",
+ "Download": "Завантажити",
+ "Audio Analyzer": "Аналізатор звуку",
+ "Output Information": "Вихідна інформація",
+ "Merge Audios": "Об'єднання аудіо",
+ "Extra": "Додаткові",
+ "Report a Bug": "Повідомити про помилку",
+ "Plugins": "Плагіни",
+ "Preprocess": "Попередня обробка",
+ "Model Information": "Інформація про модель",
+ "Audio cutting": "Нарізка звуку",
+ "Process effects": "Наслідки процесу",
+ "Name of the new model.": "Назва нової моделі.",
+ "Dataset Path": "Шлях до набору даних",
+ "Model Name": "Назва моделі",
+ "Refresh Datasets": "Оновити набори даних",
+ "Path to the dataset folder.": "Шлях до папки з набором даних.",
+ "Enter model name": "Введіть назву моделі",
+ "Dataset Name": "Назва набору даних",
+ "Dataset Creator": "Творець набору даних",
+ "Name of the new dataset.": "Назва нового набору даних.",
+ "The output information will be displayed here.": "Тут буде відображатися вихідна інформація.",
+ "This section contains some extra utilities that often may be in experimental phases.": "Цей розділ містить деякі додаткові утиліти, які часто можуть бути на експериментальних етапах.",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "Радимо деактивувати цю опцію, якщо ваш набір даних уже оброблено.",
+ "Enter dataset name": "Введіть назву набору даних",
+ "Upload Audio Dataset": "Завантажити аудіо набір даних",
+ "Enter dataset path": "Введіть шлях до набору даних",
+ "Extract": "Екстракт",
+ "Sampling Rate": "Частота дискретизації",
+ "Model Architecture": "Архітектура моделі",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "Простий, високоякісний інструмент перетворення голосу, орієнтований на зручність використання та продуктивність.",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Аудіофайл успішно додано до набору даних. Будь ласка, натисніть кнопку «Попередня обробка».",
+ "Hop Length": "Довжина хмелю",
+ "Embedder Model": "Модель вбудовування",
+ "Version of the model architecture.": "Версія архітектури моделі.",
+ "The sampling rate of the audio files.": "Частота дискретизації аудіофайлів.",
+ "Preprocess Dataset": "Набір даних перед обробкою",
+ "Batch Size": "Розмір партії",
+ "Total Epoch": "Ціла епоха",
+ "Save Every Epoch": "Врятуйте кожну епоху",
+ "Model used for learning speaker embedding.": "Модель, що використовується для навчання вбудовуванню динаміків.",
+ "Pretrained": "Попереднє навчання",
+ "Save Only Latest": "Зберігайте лише останні",
+ "Save Every Weights": "Збережіть кожну вагу",
+ "Determine at how many epochs the model will saved at.": "Визначте, на скількох епохах збережеться модель.",
+ "Custom Pretrained": "Індивідуальне попереднє навчання",
+ "Specifies the overall quantity of epochs for the model training process.": "Вказується загальна кількість епох для процесу навчання моделі.",
+ "Refresh Custom Pretraineds": "Оновіть користувацькі попередньо навчені",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Позначає час, необхідний системі для переходу до значної зміни висоти тону. Менша довжина стрибка вимагає більше часу для виведення, але, як правило, забезпечує вищу точність кроку.",
+ "Upload Pretrained Model": "Завантажити попередньо підготовлену модель",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Цей параметр дозволяє зберігати вагу моделі в кінці кожної епохи.",
+ "Pretrained Custom Settings": "Попередньо підготовлені користувацькі налаштування",
+ "GPU Settings": "Налаштування графічного процесора",
+ "Pretrained G Path": "Користувальницькі попередньо навчені G",
+ "Pretrained D Path": "Користувальницький попередньо навчений D",
+ "GPU Number": "Номер графічного процесора",
+ "The file you dropped is not a valid pretrained file. Please try again.": "Файл, який ви випустили, не є дійсним попередньо підготовленим файлом. Будь ласка, спробуйте ще раз.",
+ "0 to ∞ separated by -": "від 0 до ∞ відокремлених -",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Бажано вирівняти його з доступною відеопам'яттю вашого графічного процесора. Параметр 4 забезпечує підвищену точність, але повільнішу обробку, тоді як 8 забезпечує швидші та стандартніші результати.",
+ "The GPU information will be displayed here.": "Тут буде відображена інформація про графічний процесор.",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Натисніть кнопку оновлення, щоб побачити попередньо підготовлений файл у випадаючому меню.",
+ "GPU Custom Settings": "Користувацькі налаштування графічного процесора",
+ "Pitch Guidance": "Керівництво пітчем",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Увімкнення цього параметра призведе до того, що файли G і D зберігатимуть лише свої найновіші версії, ефективно заощаджуючи місце на диску.",
+ "Use CPU": "Використовуйте ЦП",
+ "GPU Information": "Інформація про графічний процесор",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Встановлює розширені налаштування графічного процесора, рекомендовані для користувачів з кращою архітектурою графічного процесора.",
+ "Extract Features": "особливості витягу",
+ "Force the use of CPU for training.": "Примусово використовувати процесор для тренувань.",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "Кількість ядер процесора, які слід використовувати під час попередньої обробки. За замовчуванням встановлено ядра процесора, що рекомендується для більшості випадків.",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "Вкажіть кількість графічних процесорів, які ви хочете використовувати для вилучення, ввівши їх через дефіси (-).",
+ "Index Algorithm": "Алгоритм індексування",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "Вкажіть кількість графічних процесорів, які ви хочете використовувати для попередньої обробки, ввівши їх через дефіси (-). На даний момент використання multi-gpu не матиме значного ефекту.",
+ "Cache Dataset in GPU": "Кеш-набір даних у графічному процесорі",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "Кількість ядер процесора, які будуть використовуватися в процесі вилучення. За замовчуванням встановлено ядра процесора, що рекомендується для більшості випадків.",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Використовуйте попередньо навчені моделі під час тренування власних. Такий підхід скорочує тривалість навчання і підвищує загальну якість.",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Використання користувальницьких попередньо навчених моделей може призвести до чудових результатів, оскільки вибір найбільш підходящих попередньо навчених моделей, адаптованих до конкретного випадку використання, може значно підвищити продуктивність.",
+ "Overtraining Detector": "Детектор перетренованості",
+ "Overtraining Threshold": "Поріг перетренованості",
+ "Start Training": "Почати навчання",
+ "Fresh Training": "Свіже тренування",
+ "Cache the dataset in GPU memory to speed up the training process.": "Кешуйте набір даних у пам'ять графічного процесора, щоб прискорити процес навчання.",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans — алгоритм кластеризації, який поділяє набір даних на K кластерів. Цей параметр особливо корисний для великих наборів даних.",
+ "Overtraining Detector Settings": "Налаштування датчика перетренованості",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Ми надаємо пріоритет запуску попередньої обробки моделі на графічному процесорі для швидшої продуктивності. Якщо ви віддаєте перевагу використанню центрального процесора, просто залиште поле графічного процесора порожнім.",
+ "Generate Index": "Створити індекс",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Використовуючи керівництво висотою тону, стає можливим відтворити інтонацію оригінального голосу, включаючи його висоту тону. Ця функція особливо цінна для співу та інших сценаріїв, де важливо зберегти оригінальну мелодію або висоту тону.",
+ "Stop Training": "Припиніть тренування",
+ "Export Model": "Експортна модель",
+ "Upload": "Завантажити",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "Ми надаємо пріоритет запуску вилучення моделі на графічному процесорі для швидшої продуктивності. Якщо ви віддаєте перевагу використанню центрального процесора, просто залиште поле графічного процесора порожнім.",
+ "Exported Pth file": "Експортований Pth-файл",
+ "Select the pth file to be exported": "Виберіть p-файл для експорту",
+ "Exported Index file": "Експортований індексний файл",
+ "Voice Model": "Голосова модель",
+ "Select the index file to be exported": "Виберіть індексний файл для експорту",
+ "Refresh": "Оновити",
+ "Single": "Одного",
+ "Index File": "Індексний файл",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Встановіть максимальну кількість епох, протягом яких ваша модель повинна припинити навчання, якщо не буде виявлено поліпшень.",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Виявляйте перетренованість, щоб модель не надто добре засвоїла тренувальні дані та втратила здатність до узагальнення на нові дані.",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "Вмикайте цей параметр лише в тому випадку, якщо ви тренуєте нову модель з нуля або перезапускаєте тренування. Видаляє всі раніше згенеровані гирі та журнали tensorboard.",
+ "Select Audio": "Виберіть Аудіо",
+ "Upload Audio": "Завантажити аудіо",
+ "Select the voice model to use for the conversion.": "Виберіть модель голосу, яку ви використовуватимете для перетворення.",
+ "Unload Voice": "Розвантажити голосовий зв'язок",
+ "Output Path": "Вихідний шлях",
+ "Advanced Settings": "Розширені налаштування",
+ "Export Format": "Формат експорту",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "Кнопка \"Завантажити\" призначена лише для Google Colab: завантажує експортовані файли в папку ApplioExported на вашому Google Диску.",
+ "Select the audio to convert.": "Виберіть аудіо, яке потрібно перетворити.",
+ "Split Audio": "Розділене аудіо",
+ "Custom Output Path": "Користувацький вихідний шлях",
+ "Select the index file to use for the conversion.": "Виберіть індексний файл, який буде використано для перетворення.",
+ "Autotune": "Автотюнінг",
+ "Select the format to export the audio.": "Виберіть формат для експорту аудіо.",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Clear Outputs (Видаляє всі аудіозаписи в активах/аудіозаписах)",
+ "Clean Audio": "Чистий звук",
+ "Clean Strength": "Чиста міцність",
+ "Upscale Audio": "Висококласний звук",
+ "Formant Shifting": "Зсув формант",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "Шлях, за яким буде збережено вихідне аудіо, за замовчуванням у assets/audios/output.wav",
+ "Browse presets for formanting": "Перегляд стилів для формування",
+ "Presets are located in /assets/formant_shift folder": "Пресети знаходяться в папці /assets/formant_shift",
+ "Default value is 1.0": "Значення за замовчуванням – 1.0",
+ "Timbre for formant shifting": "Тембр для зсуву формант",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Розбийте аудіо на фрагменти для висновків, щоб у деяких випадках отримати кращі результати.",
+ "Pitch": "Крок",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Застосовуйте до своїх висновків м'яку автонастройку, рекомендовану для перетворень співу.",
+ "Quefrency for formant shifting": "Квефрентність для зсуву формант",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Збільште якість звуку до вищої якості, рекомендовано для аудіо низької якості. (Обробка аудіо може зайняти більше часу)",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "Увімкніть зсув форманта. Використовується для перетворення з чоловіків на жінок і навпаки.",
+ "Filter Radius": "Радіус фільтра",
+ "Search Feature Ratio": "Співвідношення функцій пошуку",
+ "Volume Envelope": "Об'ємний конверт",
+ "Convert": "Перетворити",
+ "Export Audio": "Експорт аудіо",
+ "Batch": "Пакетний",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Встановіть висоту звуку, чим вище значення, тим вище тон.",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Очистіть аудіовихід за допомогою алгоритмів виявлення шуму, рекомендованих для розмовного аудіо.",
+ "Input Folder": "Папка для введення",
+ "Protect Voiceless Consonants": "Захист глухих приголосних",
+ "Output Folder": "Папка виводу",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Встановіть потрібний рівень очищення звуку, чим більше ви його збільшите, тим більше він буде очищатися, але можливо, що звук буде більш стисненим.",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Замініть або змішайте з об'ємною оболонкою виводу. Чим ближче відношення до 1, тим більше використовується вихідна огинаюча.",
+ "Enter input path": "Введіть шлях введення",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Вплив, який чинить індексний файл; Більш високе значення відповідає більшому впливу. Однак вибір нижчих значень може допомогти пом'якшити артефакти, присутні в аудіо.",
+ "Enter output path": "Введіть вихідний шлях",
+ "Select the folder containing the audios to convert.": "Виберіть папку з аудіозаписами для перетворення.",
+ "Get information about the audio": "Отримання інформації про аудіо",
+ "## Voice Blender": "## Голосовий блендер",
+ "Voice Blender": "Голосовий блендер",
+ "Pitch extraction algorithm": "Алгоритм вилучення кроку",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Алгоритм вилучення висоти тону, який слід використовувати для перетворення звуку. Алгоритмом за замовчуванням є rmvpe, який рекомендується для більшості випадків.",
+ "Fusion": "Злиття",
+ "Select the folder where the output audios will be saved.": "Виберіть папку, куди будуть зберігатися вихідні аудіозаписи.",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Якщо число більше або дорівнює трьом, використання медіанної фільтрації на результатах зібраного тону може призвести до зниження дихання.",
+ "Path to Model": "Шлях до моделі",
+ "Blend Ratio": "Пропорції змішування",
+ "Drag and drop your model here": "Перетягніть вашу модель сюди",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Захистіть чіткі приголосні та дихальні звуки, щоб запобігти електроакустичним розривам та іншим артефактам. Підтягування параметра до максимального значення 0,5 забезпечує комплексний захист. Однак зменшення цього значення може зменшити ступінь захисту, водночас потенційно пом'якшуючи ефект індексації.",
+ "Enter path to model": "Введіть шлях до моделі",
+ "View": "Вид",
+ "You can also use a custom path.": "Ви також можете використовувати власний шлях.",
+ "Inroduce the model information": "Введіть інформацію про модель",
+ "Pth file": "П-файл",
+ "Model information to be placed": "Інформація про модель для розміщення",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Виберіть дві моделі голосу, встановіть бажаний відсоток накладання та об'єднайте їх у абсолютно новий голос.",
+ "Model extraction": "Витяг моделі",
+ "Model conversion": "Перетворення моделі",
+ "Introduce the model pth path": "Ознайомлення з моделлю pth шляху",
+ "Extract F0 Curve": "Витягнути криву F0",
+ "Output of the pth file": "Виведення p-го файлу",
+ "# How to Report an Issue on GitHub": "# Як повідомити про проблему на GitHub",
+ "Record": "Запис",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Регулювання положення більше в ту чи іншу сторону зробить модель більш схожою на першу або другу.",
+ "Stop Recording": "Зупинка запису",
+ "Record Screen": "Екран запису",
+ "Model Link": "Посилання на модель",
+ "## Download Model": "## Завантажити модель",
+ "The information to be placed in the model (You can leave it blank or put anything).": "Інформація повинна бути розміщена в моделі (Ви можете залишити її порожньою або помістити що завгодно).",
+ "Introduce the model .pth path": "Ознайомтеся з моделлю .pth шляху",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Перейдіть до [Проблеми GitHub](https://github.com/IAHispano/Applio/issues) і натисніть кнопку «Новий випуск».",
+ "View model information": "Перегляд інформації про модель",
+ "Download Model": "Завантажити модель",
+ "See Model Information": "Переглянути інформацію про модель",
+ "## Drop files": "## Скидання файлів",
+ "Search": "Шукати",
+ "## Search Model": "## Модель пошуку",
+ "Introduce the model link": "Ознайомтеся з посиланням на модель",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Натисніть кнопку «Екран запису» нижче, щоб почати записувати проблему, з якою ви зіткнулися.",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "Крива f0 представляє варіації базової частоти голосу з часом, показуючи, як висота звуку зростає і знижується.",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Перетягніть файл .pth і файл .index у це поле. Перетягніть одну, а потім іншу.",
+ "Introduce the model name to search.": "Введіть назву моделі для пошуку.",
+ "TTS Speed": "Швидкість TTS",
+ "TTS Voices": "Голоси TTS",
+ "## Download Pretrained Models": "## Завантажте попередньо підготовлені моделі",
+ "Text to Synthesize": "Текст для синтезу",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Після того, як ви закінчите запис випуску, натисніть кнопку «Зупинити запис» (та сама кнопка, але мітка змінюється залежно від того, активно ви записуєте чи ні).",
+ "We couldn't find models by that name.": "Ми не змогли знайти моделі з такою назвою.",
+ "And select the sampling rate": "І виберіть частоту дискретизації.",
+ "Upload a .txt file": "Завантажте файл .txt",
+ "Enter the text to synthesize.": "Введіть текст для синтезу.",
+ "Select the pretrained model you want to download.": "Виберіть попередньо підготовлену модель, яку хочете завантажити.",
+ "Increase or decrease TTS speed.": "Збільшуйте або зменшуйте швидкість TTS.",
+ "Input path for text file": "Вхідний шлях для текстового файлу",
+ "Enter text to synthesize": "Введення тексту для синтезу",
+ "Output Path for TTS Audio": "Вихідний тракт для аудіо TTS",
+ "Select the TTS voice to use for the conversion.": "Виберіть голос TTS, який буде використано для перетворення.",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Заповніть наданий шаблон проблеми, переконавшись, що він включив деталі за потреби, і скористайтеся розділом активів, щоб завантажити файл, записаний з попереднього кроку.",
+ "Output Path for RVC Audio": "Вихідний тракт для RVC-аудіо",
+ "Enable Applio integration with Discord presence": "Увімкніть інтеграцію Applio з присутністю в Discord",
+ "Theme": "Тема",
+ "Language": "Мова",
+ "Enable Applio integration with applio.org/models using flask": "Увімкніть інтеграцію Applio з applio.org/models за допомогою flask",
+ "Restart Applio": "Перезапустіть Applio",
+ "Precision": "Точність",
+ "The path to the text file that contains content for text to speech.": "Шлях до текстового файлу, який містить вміст для перетворення тексту в мовлення.",
+ "Enable fake GPU": "Увімкніть фальшивий графічний процесор",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "Він активує можливість відображення поточної активності Applio в Discord.",
+ "Select the theme you want to use. (Requires restarting Applio)": "Виберіть тему, яку ви хочете використовувати. (Потрібен перезапуск Applio)",
+ "It will activate the possibility of downloading models with a click from the website.": "Він активує можливість завантаження моделей одним кліком з сайту.",
+ "Update precision": "Точність оновлення",
+ "Plugin Installer": "Інсталятор плагінів",
+ "Version Checker": "Перевірка версій",
+ "Drag your plugin.zip to install it": "Перетягніть plugin.zip, щоб встановити його",
+ "Reverb": "Реверберації",
+ "Post-Process": "Після обробки",
+ "Check for updates": "Перевірте наявність оновлень",
+ "Select the language you want to use. (Requires restarting Applio)": "Виберіть мову, яку ви хочете використовувати. (Потрібен перезапуск Applio)",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "Навчання наразі не підтримується через відсутність графічного процесора. Щоб активувати вкладку навчання, перейдіть на вкладку налаштувань і ввімкніть опцію «Фальшивий графічний процесор».",
+ "Apply reverb to the audio.": "Застосуйте реверберацію до аудіо.",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Активує вкладку поїзда. Однак зверніть увагу, що цей пристрій не має можливостей графічного процесора, отже, навчання не підтримується. Цей параметр призначений лише для тестування. (Ця опція перезапустить Applio)",
+ "Reverb Room Size": "Розмір кімнати з реверберацією",
+ "Reverb Damping": "Демпфірування реверберації",
+ "Check which version of Applio is the latest to see if you need to update.": "Перевірте, яка версія Applio є останньою, щоб дізнатися, чи потрібно вам оновлюватися.",
+ "Set the room size of the reverb.": "Встановіть розмір кімнати ревербератора.",
+ "Reverb Width": "Ширина реверберації",
+ "Post-process the audio to apply effects to the output.": "Обробіть аудіо після обробки, щоб застосувати ефекти до виводу.",
+ "Reverb Wet Gain": "Мокрий коефіцієнт посилення реверберації",
+ "Set the damping of the reverb.": "Встановіть демпфірування реверберації.",
+ "Select the precision you want to use for training and inference.": "Виберіть точність, яку ви хочете використовувати для навчання та логічного висновку.",
+ "Set the width of the reverb.": "Встановіть ширину реверберації.",
+ "Reverb Dry Gain": "Сухий коефіцієнт посилення реверберації",
+ "Set the dry gain of the reverb.": "Встановіть сухий коефіцієнт посилення реверберації.",
+ "Set the wet gain of the reverb.": "Встановіть коефіцієнт посилення реверберації по мокрому тону.",
+ "Pitch Shift": "Зміна висоти тону",
+ "Reverb Freeze Mode": "Режим заморожування реверберації",
+ "Set the freeze mode of the reverb.": "Встановіть режим заморожування реверберації.",
+ "Set the pitch shift semitones.": "Встановіть півтони зсуву висоти тону.",
+ "Gain": "Прибуток",
+ "Limiter": "Обмежувач",
+ "Limiter Release Time": "Час спрацьовування обмежувача",
+ "Limiter Threshold dB": "Поріг обмежувача, дБ",
+ "Set the limiter threshold dB.": "Встановити поріг обмежувача дБ.",
+ "Apply limiter to the audio.": "Застосуйте обмежувач до аудіо.",
+ "Pitch Shift Semitones": "Півтони зі зміщенням висоти тону",
+ "Apply pitch shift to the audio.": "Застосуйте зсув висоти тону до звуку.",
+ "Set the limiter release time.": "Встановіть час спрацьовування обмежувача.",
+ "Distortion": "Спотворення",
+ "Apply gain to the audio.": "Застосуйте посилення до звуку.",
+ "Chorus": "Хор",
+ "Gain dB": "Коефіцієнт підсилення, дБ",
+ "Apply distortion to the audio.": "Застосуйте спотворення до звуку.",
+ "Distortion Gain": "Коефіцієнт посилення спотворень",
+ "Set the gain dB.": "Встановіть коефіцієнт підсилення, дБ.",
+ "Chorus Depth": "Глибина приспіву",
+ "Chorus Rate Hz": "Частота хору, Гц",
+ "Set the distortion gain.": "Встановіть коефіцієнт посилення спотворень.",
+ "Chorus Mix": "Мікс хору",
+ "Chorus Feedback": "Відгук хору",
+ "Set the chorus depth.": "Встановіть глибину хору.",
+ "Apply chorus to the audio.": "Застосуйте хор до звуку.",
+ "Set the chorus rate Hz.": "Встановіть частоту хору, Гц.",
+ "Chorus Center Delay ms": "Приспів Центральна затримка мс",
+ "Apply bitcrush to the audio.": "Застосуйте bitcrush до аудіо.",
+ "Bitcrush": "Бітрозчавлення",
+ "Set the chorus mix.": "Встановіть мікс приспіву.",
+ "Set the chorus center delay ms.": "Встановіть затримку по центру хору мс.",
+ "Set the chorus feedback.": "Встановіть зворотний зв'язок приспіву.",
+ "Bitcrush Bit Depth": "Бітова глибина Bitcrush",
+ "Clipping": "Відсікання",
+ "Compressor": "Компресор",
+ "Set the bitcrush bit depth.": "Встановіть глибину біт bitcrush.",
+ "Set the clipping threshold.": "Встановіть поріг обрізання.",
+ "Clipping Threshold": "Поріг відсікання",
+ "Apply compressor to the audio.": "Застосуйте компресор до аудіо.",
+ "Compressor Threshold dB": "Поріг компресора, дБ",
+ "Apply clipping to the audio.": "Застосуйте кліппінг до аудіо.",
+ "Compressor Attack ms": "Атака компресора мс",
+ "Set the compressor threshold dB.": "Встановіть поріг компресора в дБ.",
+ "Set the compressor ratio.": "Встановіть співвідношення компресора.",
+ "Set the compressor attack ms.": "Встановіть атаку компресора ms.",
+ "Compressor Ratio": "Передавальне число компресора",
+ "Compressor Release ms": "Розблокування компресора мс",
+ "Delay Seconds": "Секунди затримки",
+ "Set the delay seconds.": "Встановіть секунди затримки.",
+ "Apply delay to the audio.": "Застосуйте затримку до аудіо.",
+ "Set the compressor release ms.": "Встановіть розблокування компресора мс.",
+ "Set the delay mix.": "Встановіть мікс затримки.",
+ "Delay Feedback": "Затримка зворотного зв'язку",
+ "Delay Mix": "Затримка міксу",
+ "Upload .json": "Завантажити .json",
+ "Folder Name": "Ім'я папки",
+ "model information": "Інформація про модель",
+ "Refresh embedders": "Оновіть вбудовування",
+ "Model Creator": "Творець моделі",
+ "Upload .bin": "Завантажити .bin",
+ "Custom Embedder": "Користувацький вбудований пристрій",
+ "Set the delay feedback.": "Встановіть зворотний зв'язок із затримкою.",
+ "Select Custom Embedder": "Виберіть Custom Embedder (Користувацький вбудовування)",
+ "Speaker ID": "Ідентифікатор спікера",
+ "Model Author Name": "Ім'я автора моделі",
+ "Name of the model creator. (Default: Unknown)": "Ім'я творця моделі. (За замовчуванням: невідомо)",
+ "Move files to custom embedder folder": "Переміщення файлів до власної папки вбудовування",
+ "Set name": "Назва набору",
+ "Delay": "Затримки",
+ "The name that will appear in the model information.": "Назва, яка відображатиметься в інформації про модель.",
+ "Select the speaker ID to use for the conversion.": "Виберіть ідентифікатор динаміка, який буде використано для конвертації.",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "Встановіть силу автонастройки - чим більше ви її збільшите, тим більше вона буде прив'язуватися до хроматичної сітки."
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/ur_UR.json b/assets/i18n/languages/ur_UR.json
new file mode 100644
index 0000000000000000000000000000000000000000..0d23d96645d2c9b38b2efbdfdd9703ca953d3a2e
--- /dev/null
+++ b/assets/i18n/languages/ur_UR.json
@@ -0,0 +1,325 @@
+{
+ "Extra": "اضافی",
+ "Audio Analyzer": "Audio Analyzer",
+ "Training": "تربیت",
+ "Inference": "استدلال",
+ "Processing": "پروسیسنگ",
+ "Output Information": "آؤٹ پٹ معلومات",
+ "Download": "ڈاؤن لوڈ",
+ "Merge Audios": "آڈیو کو ضم کریں",
+ "Plugins": "پلگ ان",
+ "Settings": "سیٹنگیں",
+ "Preprocess": "پری پروسیس",
+ "Model Information": "ماڈل کی معلومات",
+ "Report a Bug": "ایک بگ کی رپورٹ کریں",
+ "The output information will be displayed here.": "آؤٹ پٹ کی معلومات یہاں ظاہر کی جائے گی۔",
+ "Model Name": "ماڈل کا نام",
+ "Process effects": "عمل کے اثرات",
+ "Audio cutting": "آڈیو کٹنگ",
+ "Name of the new model.": "نئے ماڈل کا نام",
+ "Enter model name": "ماڈل کا نام درج کریں",
+ "Dataset Path": "ڈیٹا سیٹ کا راستہ",
+ "Dataset Creator": "ڈیٹا سیٹ تخلیق کار",
+ "This section contains some extra utilities that often may be in experimental phases.": "اس سیکشن میں کچھ اضافی افادیت شامل ہیں جو اکثر تجرباتی مراحل میں ہوسکتی ہیں۔",
+ "Dataset Name": "ڈیٹا سیٹ کا نام",
+ "Refresh Datasets": "تازہ ترین ڈیٹا سیٹ",
+ "Path to the dataset folder.": "ڈیٹا سیٹ فولڈر کا راستہ۔",
+ "Name of the new dataset.": "نئے ڈیٹا سیٹ کا نام۔",
+ "Enter dataset name": "ڈیٹا سیٹ کا نام درج کریں",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "ایک سادہ ، اعلی معیار کی صوتی تبدیلی کا آلہ استعمال اور کارکردگی میں آسانی پر توجہ مرکوز کرتا ہے۔",
+ "Upload Audio Dataset": "آڈیو ڈیٹا سیٹ اپ لوڈ کریں",
+ "Embedder Model": "Embedder Model",
+ "Sampling Rate": "نمونے لینے کی شرح",
+ "Enter dataset path": "ڈیٹا سیٹ کا راستہ درج کریں",
+ "Model Architecture": "ماڈل آرکیٹیکچر",
+ "Extract": "نکالنا",
+ "The sampling rate of the audio files.": "آڈیو فائلوں کے نمونے لینے کی شرح۔",
+ "Hop Length": "ہاپ کی لمبائی",
+ "Preprocess Dataset": "پری پروسیس ڈیٹا سیٹ",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "آڈیو فائل کو کامیابی سے ڈیٹا سیٹ میں شامل کیا گیا ہے۔ براہ کرم پری پروسیس بٹن پر کلک کریں۔",
+ "Version of the model architecture.": "ماڈل آرکیٹیکچر کا ورژن۔",
+ "Batch Size": "Batch کا سائز",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "اگر آپ کے ڈیٹا سیٹ پر پہلے ہی کارروائی کی جاچکی ہے تو اس آپشن کو غیر فعال کرنے کی سفارش کی جاتی ہے۔",
+ "Total Epoch": "مجموعی دور کی نوعیت",
+ "Pretrained": "پہلے سے تربیت یافتہ",
+ "Save Every Epoch": "ہر دور کو محفوظ کریں",
+ "Model used for learning speaker embedding.": "اسپیکر ایمبیڈنگ سیکھنے کے لئے استعمال ہونے والا ماڈل۔",
+ "Save Every Weights": "ہر وزن کو بچائیں",
+ "Save Only Latest": "صرف تازہ ترین محفوظ کریں",
+ "Custom Pretrained": "اپنی مرضی کے مطابق پہلے سے تربیت یافتہ",
+ "Determine at how many epochs the model will saved at.": "اس بات کا تعین کریں کہ ماڈل کتنے ادوار میں محفوظ رہے گا۔",
+ "Upload Pretrained Model": "پہلے سے تربیت یافتہ ماڈل اپ لوڈ کریں",
+ "Specifies the overall quantity of epochs for the model training process.": "ماڈل ٹریننگ کے عمل کے لئے ادوار کی مجموعی مقدار کی وضاحت کرتا ہے۔",
+ "GPU Settings": "GPU Settings",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "نظام کو ایک اہم پچ تبدیلی میں منتقل ہونے میں لگنے والے عرصے کی نشاندہی کرتا ہے۔ چھوٹی ہاپ لمبائی کو اندازہ لگانے کے لئے زیادہ وقت کی ضرورت ہوتی ہے لیکن پچ کی درستگی زیادہ ہوتی ہے۔",
+ "Refresh Custom Pretraineds": "اپنی مرضی کے مطابق پیشگی تربیت یافتہ تازہ کاری کریں",
+ "Pretrained G Path": "اپنی مرضی کے مطابق پہلے سے تربیت یافتہ G",
+ "Pretrained Custom Settings": "پہلے سے تربیت یافتہ کسٹم ترتیبات",
+ "GPU Number": "GPU نمبر",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "اسے اپنے جی پی یو کے دستیاب وی آر اے ایم کے ساتھ ہم آہنگ کرنے کا مشورہ دیا جاتا ہے۔ 4 کی ترتیب بہتر درستگی لیکن سست پروسیسنگ پیش کرتی ہے ، جبکہ 8 تیز اور معیاری نتائج فراہم کرتی ہے۔",
+ "0 to ∞ separated by -": "0 سے الگ ∞ -",
+ "The file you dropped is not a valid pretrained file. Please try again.": "آپ نے جو فائل چھوڑی ہے وہ درست پہلے سے تربیت یافتہ فائل نہیں ہے۔ براہ مہربانی دوبارہ کوشش کریں۔",
+ "Pretrained D Path": "اپنی مرضی کے مطابق پہلے سے تربیت یافتہ D",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "یہ ترتیب آپ کو ہر دور کے اختتام پر ماڈل کے وزن کو بچانے کے قابل بناتی ہے۔",
+ "GPU Information": "GPU Information",
+ "GPU Custom Settings": "GPU اپنی مرضی کے مطابق ترتیبات",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "اس ترتیب کو فعال کرنے کے نتیجے میں جی اور ڈی فائلیں صرف اپنے تازہ ترین ورژن کو محفوظ کریں گی ، مؤثر طریقے سے اسٹوریج کی جگہ کو محفوظ کریں گی۔",
+ "Use CPU": "CPU استعمال کریں",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "ڈراپ ڈاؤن مینو میں پہلے سے تربیت یافتہ فائل دیکھنے کے لئے ریفریش بٹن پر کلک کریں۔",
+ "Pitch Guidance": "پچ گائیڈنس",
+ "The GPU information will be displayed here.": "جی پی یو کی معلومات یہاں دکھائی جائے گی۔",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "بہتر جی پی یو آرکیٹیکچر والے صارفین کے لئے تجویز کردہ جدید جی پی یو سیٹنگز سیٹ کرتا ہے۔",
+ "Extract Features": "نکالنے کی خصوصیات",
+ "Cache Dataset in GPU": "کیشے ڈیٹا سیٹ میں GPU",
+ "Force the use of CPU for training.": "تربیت کے لئے سی پی یو کے استعمال کو مجبور کریں۔",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "نکالنے کے عمل میں استعمال کرنے کے لئے سی پی یو کور کی تعداد. پہلے سے طے شدہ ترتیب آپ کے سی پی یو کور ہیں ، جو زیادہ تر معاملات کے لئے سفارش کی جاتی ہے۔",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "اپنی مرضی کے مطابق پہلے سے تربیت یافتہ ماڈلز کا استعمال بہتر نتائج کا باعث بن سکتا ہے ، کیونکہ مخصوص استعمال کے معاملے کے مطابق سب سے مناسب پری ٹریننگ ماڈلز کا انتخاب کارکردگی کو نمایاں طور پر بڑھا سکتا ہے۔",
+ "Index Algorithm": "انڈیکس الگورتھم",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "اپنی تربیت کرتے وقت پہلے سے تربیت یافتہ ماڈلز کا استعمال کریں۔ یہ نقطہ نظر تربیت کے دورانیے کو کم کرتا ہے اور مجموعی معیار کو بڑھاتا ہے.",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "پری پروسیس میں استعمال کرنے کے لئے سی پی یو کور کی تعداد۔ پہلے سے طے شدہ ترتیب آپ کے سی پی یو کور ہیں ، جو زیادہ تر معاملات کے لئے سفارش کی جاتی ہے۔",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "ان جی پی یوز کی تعداد کی وضاحت کریں جو آپ نکالنے کے لئے استعمال کرنا چاہتے ہیں اور انہیں ہائفنز (-) کے ذریعہ الگ کرکے داخل کریں۔",
+ "Overtraining Detector": "اوور ٹریننگ ڈیٹیکٹر",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "کے مینز ایک کلسٹرنگ الگورتھم ہے جو ڈیٹا سیٹ کو کے کلسٹرز میں تقسیم کرتا ہے۔ یہ ترتیب خاص طور پر بڑے ڈیٹا سیٹس کے لئے مفید ہے.",
+ "Fresh Training": "تازہ تربیت",
+ "Overtraining Threshold": "حد سے زیادہ تربیت کی حد",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "ہم تیز تر کارکردگی کے لئے جی پی یو پر ماڈل نکالنے کو چلانے کو ترجیح دیتے ہیں۔ اگر آپ سی پی یو استعمال کرنا پسند کرتے ہیں تو ، صرف جی پی یو فیلڈ کو خالی چھوڑ دیں۔",
+ "Overtraining Detector Settings": "اوور ٹریننگ ڈیٹیکٹر کی ترتیبات",
+ "Start Training": "تربیت شروع کریں",
+ "Cache the dataset in GPU memory to speed up the training process.": "تربیتی عمل کو تیز کرنے کے لئے جی پی یو میموری میں ڈیٹا سیٹ کو کیش کریں۔",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "پچ گائیڈنس کا استعمال کرتے ہوئے ، اس کی پچ سمیت اصل آواز کے آئینے کو آئینہ دار بنانا ممکن ہوجاتا ہے۔ یہ خصوصیت خاص طور پر گانے اور دیگر منظرناموں کے لئے قابل قدر ہے جہاں اصل دھن یا پچ پیٹرن کو محفوظ کرنا ضروری ہے۔",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "ہم تیز تر کارکردگی کے لئے جی پی یو پر ماڈل پری پروسیسنگ چلانے کو ترجیح دیتے ہیں۔ اگر آپ سی پی یو استعمال کرنا پسند کرتے ہیں تو ، صرف جی پی یو فیلڈ کو خالی چھوڑ دیں۔",
+ "Stop Training": "تربیت بند کرو",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "ان جی پی یوز کی تعداد کی وضاحت کریں جو آپ پری پروسیس کے لئے استعمال کرنا چاہتے ہیں اور انہیں ہائیفینز (-) کے ذریعہ علیحدہ کرکے داخل کریں۔ فی الحال ، ملٹی جی پی یو کا استعمال کرنے سے کوئی خاص اثر نہیں پڑے گا۔",
+ "Generate Index": "انڈیکس پیدا کریں",
+ "Export Model": "ایکسپورٹ ماڈل",
+ "Upload": "اپ لوڈ",
+ "Refresh": "تازہ",
+ "Index File": "انڈیکس فائل",
+ "Voice Model": "صوتی ماڈل",
+ "Exported Index file": "برآمد شدہ انڈیکس فائل",
+ "Exported Pth file": "برآمد شدہ پی ٹی ایچ فائل",
+ "Single": "تنہا",
+ "Unload Voice": "آواز کو ان لوڈ کریں",
+ "Upload Audio": "آڈیو اپ لوڈ کریں",
+ "Select the index file to be exported": "برآمد کی جانے والی انڈیکس فائل منتخب کریں",
+ "Select the pth file to be exported": "برآمد کی جانے والی پی ٹی ایچ فائل منتخب کریں",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "اگر کوئی بہتری کا پتہ نہیں چلتا ہے تو آپ اپنے ماڈل کو تربیت روکنے کے لئے زیادہ سے زیادہ ادوار مقرر کریں۔",
+ "Select the voice model to use for the conversion.": "تبادلے کے لئے استعمال کرنے کے لئے صوتی ماڈل منتخب کریں۔",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "اس ترتیب کو صرف اس صورت میں فعال کریں جب آپ شروع سے کسی نئے ماڈل کی تربیت کر رہے ہیں یا تربیت کو دوبارہ شروع کر رہے ہیں۔ پہلے سے تیار کردہ تمام وزن اور ٹینسر بورڈ لاگ کو حذف کرتا ہے۔",
+ "Select the index file to use for the conversion.": "تبادلے کے لئے استعمال کرنے کے لئے انڈیکس فائل منتخب کریں۔",
+ "Export Format": "Export Format",
+ "Select the audio to convert.": "تبدیل کرنے کے لئے آڈیو منتخب کریں۔",
+ "Select Audio": "آڈیو منتخب کریں",
+ "Advanced Settings": "اعلی درجے کی ترتیبات",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "ماڈل کو تربیتی اعداد و شمار کو بہت اچھی طرح سے سیکھنے اور نئے اعداد و شمار کو عام کرنے کی صلاحیت کھونے سے روکنے کے لئے ضرورت سے زیادہ تربیت کا پتہ لگائیں۔",
+ "Output Path": "آؤٹ پٹ پتھ",
+ "Custom Output Path": "اپنی مرضی کے مطابق آؤٹ پٹ پتھ",
+ "Autotune": "Autotune",
+ "Split Audio": "آڈیو کو تقسیم کریں",
+ "Clean Audio": "صاف آڈیو",
+ "Clean Strength": "صاف طاقت",
+ "Formant Shifting": "Formant Shift",
+ "Upscale Audio": "اپ اسکیل آڈیو",
+ "Clear Outputs (Deletes all audios in assets/audios)": "آؤٹ پٹ صاف کریں (اثاثوں / آڈیو میں تمام آڈیو حذف کرتا ہے)",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "بٹن 'اپ لوڈ' صرف گوگل کولاب کے لئے ہے: برآمد شدہ فائلوں کو اپنے گوگل ڈرائیو میں ایپلو ایکسپورٹ فولڈر میں اپ لوڈ کرتا ہے۔",
+ "Select the format to export the audio.": "آڈیو برآمد کرنے کے لئے فارمیٹ منتخب کریں۔",
+ "Browse presets for formanting": "Browse presets for formanting",
+ "Pitch": "پچ",
+ "Timbre for formant shifting": "Formant منتقلی کے لئے Timbre",
+ "Quefrency for formant shifting": "فارمنٹ منتقلی کے لئے کیوفرینسی",
+ "Default value is 1.0": "طے شدہ قیمت 1.0 ہے",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "آڈیو کو اعلی معیار پر اپ اسکیل کریں ، کم معیار کے آڈیو کے لئے سفارش کی جاتی ہے۔ (آڈیو پر عمل کرنے میں زیادہ وقت لگ سکتا ہے)",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "فارمنٹ منتقلی کو فعال کریں۔ مرد سے عورت اور اس کے برعکس تبدیلی کے لئے استعمال کیا جاتا ہے.",
+ "Filter Radius": "فلٹر کے دائرے",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "وہ راستہ جہاں آؤٹ پٹ آڈیو محفوظ کیا جائے گا ، اثاثوں / آڈیو / output.wav میں ڈیفالٹ طور پر",
+ "Presets are located in /assets/formant_shift folder": "پریسیٹ / اثاثہ جات / formant_shift فولڈر میں واقع ہیں۔",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "گانے کی تبدیلیوں کے لئے تجویز کردہ اپنے تخمینوں پر نرم آٹو ٹیون لگائیں۔",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "کچھ معاملات میں بہتر نتائج حاصل کرنے کے لئے آڈیو کو ٹکڑوں میں تقسیم کریں۔",
+ "Search Feature Ratio": "تلاش کی خصوصیت کا تناسب",
+ "Volume Envelope": "حجم کا لفافہ",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "آڈیو کی پچ سیٹ کریں ، قیمت جتنی زیادہ ہوگی ، پچ اتنی ہی زیادہ ہوگی۔",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "آواز کا پتہ لگانے والے الگورتھم کا استعمال کرتے ہوئے اپنے آڈیو آؤٹ پٹ کو صاف کریں ، جو آڈیو بولنے کے لئے سفارش کی جاتی ہے۔",
+ "Convert": "بدلیں",
+ "Batch": "بیچ",
+ "Pitch extraction algorithm": "پچ نکالنے کا الگورتھم",
+ "Protect Voiceless Consonants": "آواز کے بغیر عبارتوں کی حفاظت کریں",
+ "Export Audio": "آڈیو برآمد کریں",
+ "Input Folder": "ان پٹ فولڈر",
+ "Enter input path": "ان پٹ راستہ درج کریں",
+ "Output Folder": "آؤٹ پٹ فولڈر",
+ "Voice Blender": "Voice Blender",
+ "## Voice Blender": "## وائس بلینڈر",
+ "Enter output path": "آؤٹ پٹ کا راستہ درج کریں",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "انڈیکس فائل کے ذریعہ اثر و رسوخ؛ ایک اعلی قیمت زیادہ اثر و رسوخ سے مطابقت رکھتی ہے. تاہم ، کم اقدار کا انتخاب آڈیو میں موجود نوادرات کو کم کرنے میں مدد کرسکتا ہے۔",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "آپ جس آڈیو کو چاہتے ہیں اس پر کلین اپ لیول سیٹ کریں ، جتنا زیادہ آپ اسے بڑھائیں گے اتنا ہی یہ صاف ہوجائے گا ، لیکن یہ ممکن ہے کہ آڈیو زیادہ کمپریسڈ ہوجائے۔",
+ "Get information about the audio": "آڈیو کے بارے میں معلومات حاصل کریں",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "آؤٹ پٹ کے حجم لفافے کے ساتھ متبادل یا مرکب کریں۔ تناسب 1 کے جتنا قریب ہوتا ہے ، اتنا ہی زیادہ آؤٹ پٹ لفافہ استعمال ہوتا ہے۔",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "اگر تعداد تین سے زیادہ یا اس کے برابر ہے تو ، جمع کردہ ٹون کے نتائج پر اوسط فلٹرنگ کا استعمال سانس کو کم کرنے کی صلاحیت رکھتا ہے۔",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "آڈیو تبدیلی کے لئے استعمال کرنے کے لئے پچ نکالنے کا الگورتھم۔ ڈیفالٹ الگورتھم آر ایم وی پی ای ہے ، جو زیادہ تر معاملات کے لئے سفارش کی جاتی ہے۔",
+ "Select the folder containing the audios to convert.": "تبدیل کرنے کے لئے آڈیو پر مشتمل فولڈر منتخب کریں۔",
+ "Blend Ratio": "مرکب تناسب",
+ "Drag and drop your model here": "اپنے ماڈل کو یہاں گھسیٹیں اور چھوڑیں",
+ "Fusion": "فیوژن",
+ "Path to Model": "ماڈل کا راستہ",
+ "Select the folder where the output audios will be saved.": "وہ فولڈر منتخب کریں جہاں آؤٹ پٹ آڈیو محفوظ کیے جائیں گے۔",
+ "Enter path to model": "ماڈل کا راستہ درج کریں",
+ "View": "منظر",
+ "View model information": "ماڈل کی معلومات دیکھیں",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "الیکٹرو-صوتی پھٹنے اور دیگر نوادرات کو روکنے کے لئے مختلف عبارتوں اور سانس لینے کی آوازوں کی حفاظت کریں۔ پیرامیٹر کو اس کی زیادہ سے زیادہ قیمت 0.5 تک کھینچنا جامع تحفظ فراہم کرتا ہے۔ تاہم ، اس قدر کو کم کرنے سے تحفظ کی حد کم ہوسکتی ہے جبکہ ممکنہ طور پر انڈیکسنگ اثر کو کم کیا جاسکتا ہے۔",
+ "Model conversion": "ماڈل کی تبدیلی",
+ "Inroduce the model information": "ماڈل کی معلومات فراہم کریں",
+ "Model extraction": "ماڈل نکالنے",
+ "Model information to be placed": "ماڈل کی معلومات رکھی جائے گی",
+ "Introduce the model pth path": "ماڈل پی ٹی ایچ راستہ متعارف کروائیں",
+ "Pth file": "پی ٹی ایچ فائل",
+ "You can also use a custom path.": "آپ اپنی مرضی کے مطابق راستہ بھی استعمال کرسکتے ہیں۔",
+ "Extract F0 Curve": "F0 کروٹ نکالیں",
+ "Output of the pth file": "پی ٹی ایچ فائل کی آؤٹ پٹ",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "پوزیشن کو ایک طرف یا دوسری طرف زیادہ ایڈجسٹ کرنے سے ماڈل پہلے یا دوسرے سے زیادہ مماثلت رکھتا ہے۔",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "دو صوتی ماڈل منتخب کریں ، اپنا مطلوبہ مرکب فیصد مقرر کریں ، اور انہیں مکمل طور پر نئی آواز میں بلینڈ کریں۔",
+ "Record": "ریکارڈ",
+ "Record Screen": "ریکارڈ اسکرین",
+ "See Model Information": "ماڈل کی معلومات دیکھیں",
+ "Stop Recording": "ریکارڈنگ بند کریں",
+ "The information to be placed in the model (You can leave it blank or put anything).": "ماڈل میں رکھی جانے والی معلومات (آپ اسے خالی چھوڑ سکتے ہیں یا کچھ بھی ڈال سکتے ہیں).",
+ "# How to Report an Issue on GitHub": "# گیٹ ہب پر کسی مسئلے کی اطلاع کیسے دیں",
+ "Model Link": "ماڈل لنک",
+ "## Download Model": "## ڈاؤن لوڈ ماڈل",
+ "Introduce the model .pth path": "ماڈل .pth پتھ متعارف کروائیں",
+ "Download Model": "ڈاؤن لوڈ ماڈل",
+ "## Search Model": "## سرچ ماڈل",
+ "Introduce the model link": "ماڈل کا لنک متعارف کروائیں",
+ "## Drop files": "## فائلیں چھوڑ دیں",
+ "Search": "تلاش",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. [گیٹ ہب ایشوز] (https://github.com/IAHispano/Applio/issues) پر جائیں اور 'نیا مسئلہ' بٹن پر کلک کریں۔",
+ "We couldn't find models by that name.": "ہمیں اس نام کے ماڈل نہیں ملے۔",
+ "TTS Voices": "ٹی ٹی ایس وائسز",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "اپنی .pth فائل اور .انڈیکس فائل کو اس جگہ میں گھسیٹیں۔ ایک کو گھسیٹیں اور پھر دوسرے کو۔",
+ "Introduce the model name to search.": "تلاش کرنے کے لئے ماڈل کا نام متعارف کروائیں۔",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. آپ جس مسئلے کا سامنا کر رہے ہیں اسے ریکارڈ کرنا شروع کرنے کے لئے نیچے 'ریکارڈ اسکرین' بٹن پر کلک کریں۔",
+ "## Download Pretrained Models": "## پہلے سے تربیت یافتہ ماڈلز ڈاؤن لوڈ کریں",
+ "And select the sampling rate": "اور نمونے لینے کی شرح منتخب کریں۔",
+ "TTS Speed": "ٹی ٹی ایس کی رفتار",
+ "Text to Synthesize": "ترکیب کرنے کے لئے متن",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "ایف 0 وکر وقت کے ساتھ آواز کی بنیادی فریکوئنسی میں تغیرات کی نمائندگی کرتا ہے ، جس سے پتہ چلتا ہے کہ پچ کس طرح اوپر اور گرتی ہے۔",
+ "Increase or decrease TTS speed.": "ٹی ٹی ایس کی رفتار میں اضافہ یا کمی.",
+ "Enter the text to synthesize.": "ترکیب کرنے کے لئے متن درج کریں۔",
+ "Upload a .txt file": ".txt فائل اپ لوڈ کریں",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. ایک بار جب آپ مسئلے کی ریکارڈنگ مکمل کرلیں تو ، 'اسٹاپ ریکارڈنگ' بٹن پر کلک کریں (وہی بٹن ، لیکن لیبل اس بات پر منحصر ہے کہ آپ فعال طور پر ریکارڈنگ کر رہے ہیں یا نہیں)۔",
+ "Select the pretrained model you want to download.": "وہ پہلے سے تربیت یافتہ ماڈل منتخب کریں جسے آپ ڈاؤن لوڈ کرنا چاہتے ہیں۔",
+ "Select the TTS voice to use for the conversion.": "تبدیلی کے لئے استعمال کرنے کے لئے TTS آواز منتخب کریں۔",
+ "Input path for text file": "ٹیکسٹ فائل کے لئے ان پٹ کا راستہ",
+ "Output Path for RVC Audio": "آر وی سی آڈیو کے لئے آؤٹ پٹ پتھ",
+ "Output Path for TTS Audio": "ٹی ٹی ایس آڈیو کے لئے آؤٹ پٹ پتھ",
+ "Enter text to synthesize": "ترتیب دینے کے لئے متن درج کریں",
+ "Enable Applio integration with Discord presence": "ڈسکارڈ کی موجودگی کے ساتھ ایپلیو انضمام کو فعال کریں",
+ "Restart Applio": "Restart Applio",
+ "The path to the text file that contains content for text to speech.": "ٹیکسٹ فائل کا راستہ جس میں متن سے تقریر تک کا مواد شامل ہے۔",
+ "Enable fake GPU": "جعلی جی پی یو کو فعال کریں",
+ "Language": "زبان",
+ "Theme": "موضوع",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. فراہم کردہ ایشو ٹیمپلیٹ کو مکمل کریں ، ضرورت کے مطابق تفصیلات شامل کرنے کو یقینی بنائیں ، اور پچھلے مرحلے سے ریکارڈ شدہ فائل کو اپ لوڈ کرنے کے لئے اثاثوں کے سیکشن کا استعمال کریں۔",
+ "Precision": "Precision",
+ "Enable Applio integration with applio.org/models using flask": "فلاسک کا استعمال کرتے ہوئے applio.org/models کے ساتھ ایپلیو انضمام کو فعال کریں",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "یہ ڈسکارڈ میں موجودہ ایپلیو سرگرمی کو ظاہر کرنے کے امکان کو فعال کرے گا۔",
+ "Plugin Installer": "Plugin Installer",
+ "Version Checker": "Version Checker",
+ "Select the theme you want to use. (Requires restarting Applio)": "وہ تھیم منتخب کریں جسے آپ استعمال کرنا چاہتے ہیں۔ (ایپلیو کو دوبارہ شروع کرنے کی ضرورت ہے)",
+ "Update precision": "تازہ کاری درستگی",
+ "It will activate the possibility of downloading models with a click from the website.": "یہ ویب سائٹ سے ایک کلک کے ساتھ ماڈل ڈاؤن لوڈ کرنے کے امکان کو فعال کرے گا۔",
+ "Post-Process": "Post-Process",
+ "Reverb": "Reverb",
+ "Select the language you want to use. (Requires restarting Applio)": "وہ زبان منتخب کریں جسے آپ استعمال کرنا چاہتے ہیں۔ (ایپلیو کو دوبارہ شروع کرنے کی ضرورت ہے)",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "جی پی یو کی عدم موجودگی کی وجہ سے فی الحال تربیت غیر معاون ہے۔ تربیتی ٹیب کو چالو کرنے کے لئے ، ترتیبات کے ٹیب پر جائیں اور 'جعلی جی پی یو' آپشن کو فعال کریں۔",
+ "Drag your plugin.zip to install it": "اسے انسٹال کرنے کے لئے اپنے plugin.zip کو گھسیٹیں",
+ "Check for updates": "اپ ڈیٹس کے لئے چیک کریں",
+ "Select the precision you want to use for training and inference.": "وہ درستگی منتخب کریں جو آپ تربیت اور تخمینے کے لئے استعمال کرنا چاہتے ہیں۔",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "ٹرین ٹیب کو چالو کرتا ہے۔ تاہم ، براہ کرم نوٹ کریں کہ اس آلے میں جی پی یو صلاحیتوں کی کمی ہے ، لہذا تربیت کی حمایت نہیں کی جاتی ہے۔ یہ آپشن صرف آزمائشی مقاصد کے لئے ہے۔ (یہ آپشن ایپلیو کو دوبارہ شروع کرے گا)",
+ "Apply reverb to the audio.": "آڈیو پر ریورب لاگو کریں۔",
+ "Reverb Damping": "ریورب ڈمپنگ",
+ "Reverb Width": "Reverb Width",
+ "Reverb Room Size": "قابل احترام کمرے کا سائز",
+ "Set the damping of the reverb.": "ریورب کی ڈمپنگ سیٹ کریں۔",
+ "Reverb Wet Gain": "ریورب گیلے فوائد",
+ "Reverb Dry Gain": "Reverb خشک فائدہ",
+ "Set the room size of the reverb.": "ریورب کے کمرے کا سائز مقرر کریں۔",
+ "Post-process the audio to apply effects to the output.": "آؤٹ پٹ پر اثرات لاگو کرنے کے لئے آڈیو پر عمل کریں۔",
+ "Reverb Freeze Mode": "Reverb Freeze Mode",
+ "Set the width of the reverb.": "ریورب کی چوڑائی سیٹ کریں۔",
+ "Set the dry gain of the reverb.": "ریورب کا خشک فائدہ سیٹ کریں۔",
+ "Limiter": "Limiter",
+ "Set the wet gain of the reverb.": "ریورب کا گیلا فائدہ مقرر کریں۔",
+ "Pitch Shift": "پچ کی تبدیلی",
+ "Pitch Shift Semitones": "Pitch Shift سیمیtones",
+ "Limiter Threshold dB": "Limiter Threshold dB",
+ "Apply pitch shift to the audio.": "آڈیو پر پچ شفٹ لاگو کریں۔",
+ "Apply limiter to the audio.": "آڈیو پر لمیٹر لاگو کریں۔",
+ "Gain": "فائدہ",
+ "Check which version of Applio is the latest to see if you need to update.": "چیک کریں کہ ایپلیو کا کون سا ورژن تازہ ترین ہے یہ دیکھنے کے لئے کہ آیا آپ کو اپ ڈیٹ کرنے کی ضرورت ہے۔",
+ "Set the freeze mode of the reverb.": "ریورب کا منجمد موڈ سیٹ کریں۔",
+ "Limiter Release Time": "Limiter ریلیز کا وقت",
+ "Gain dB": "Gain dB",
+ "Set the limiter threshold dB.": "لمیٹر کی حد ڈی بی مقرر کریں۔",
+ "Distortion": "تحریف",
+ "Set the pitch shift semitones.": "پچ شفٹ کو سیمی ٹونز سیٹ کریں۔",
+ "Apply gain to the audio.": "آڈیو پر فائدہ لاگو کریں۔",
+ "Set the limiter release time.": "لمیٹر ریلیز کا وقت مقرر کریں۔",
+ "Chorus": "استھالی",
+ "Set the gain dB.": "فائدہ ڈی بی سیٹ کریں.",
+ "Apply distortion to the audio.": "آڈیو پر تحریف کا اطلاق کریں۔",
+ "Distortion Gain": "تحریف کا فائدہ",
+ "Set the distortion gain.": "تحریف کا فائدہ مقرر کریں۔",
+ "Chorus Depth": "کورس کی گہرائی",
+ "Chorus Rate Hz": "کورس ریٹ ہرٹز",
+ "Apply chorus to the audio.": "آڈیو پر کورس لاگو کریں۔",
+ "Chorus Center Delay ms": "Chorus سنٹر تاخیر ms",
+ "Set the chorus rate Hz.": "کورس ریٹ ہرٹز سیٹ کریں۔",
+ "Chorus Mix": "کورس مکس",
+ "Set the chorus depth.": "کورس کی گہرائی مقرر کریں۔",
+ "Chorus Feedback": "کورس فیڈ بیک",
+ "Bitcrush": "Bitcrush",
+ "Bitcrush Bit Depth": "BitcruSh Bit گہرائی",
+ "Set the chorus feedback.": "کورس فیڈ بیک سیٹ کریں۔",
+ "Clipping": "کلپنگ",
+ "Set the chorus mix.": "کورس مکس سیٹ کریں۔",
+ "Compressor": "Compressor",
+ "Clipping Threshold": "کلپنگ کی حد",
+ "Set the chorus center delay ms.": "کورس سینٹر کو تاخیر ی ایم ایس سیٹ کریں۔",
+ "Set the bitcrush bit depth.": "بٹ کرش بٹ کی گہرائی سیٹ کریں۔",
+ "Apply bitcrush to the audio.": "آڈیو پر بٹ کرش لگائیں۔",
+ "Set the clipping threshold.": "کلپنگ کی حد مقرر کریں۔",
+ "Apply clipping to the audio.": "آڈیو پر کلپنگ لاگو کریں۔",
+ "Compressor Threshold dB": "کمپریسر کی حد dB",
+ "Compressor Attack ms": "Compressor Attack ms",
+ "Compressor Ratio": "کمپریسر کا تناسب",
+ "Delay": "تاخیر",
+ "Set the compressor threshold dB.": "کمپریسر کی حد ڈی بی مقرر کریں۔",
+ "Set the compressor ratio.": "کمپریسر کا تناسب سیٹ کریں۔",
+ "Apply compressor to the audio.": "آڈیو پر کمپریسر لگائیں۔",
+ "Delay Seconds": "سیکنڈ کی تاخیر",
+ "Compressor Release ms": "کمپریسر ریلیز ایم ایس",
+ "Custom Embedder": "Custom Embedder",
+ "Delay Mix": "تاخیر مکس",
+ "Set the delay seconds.": "تاخیر سیکنڈ سیٹ کریں۔",
+ "Apply delay to the audio.": "آڈیو پر تاخیر کا اطلاق کریں۔",
+ "Delay Feedback": "فیڈ بیک میں تاخیر",
+ "Set the compressor release ms.": "کمپریسر ریلیز ایم ایس سیٹ کریں۔",
+ "Set the compressor attack ms.": "کمپریسر حملہ ایم ایس سیٹ کریں۔",
+ "Set the delay feedback.": "تاخیر کی رائے سیٹ کریں۔",
+ "Refresh embedders": "refresh embedders",
+ "Set the delay mix.": "تاخیر کا مرکب سیٹ کریں۔",
+ "Select Custom Embedder": "Custom Embedder منتخب کریں",
+ "Folder Name": "فولڈر کا نام",
+ "model information": "ماڈل کی معلومات",
+ "Upload .json": ".json اپ لوڈ کریں",
+ "Upload .bin": ".bin اپ لوڈ کریں",
+ "Speaker ID": "سپیکر آئی ڈی",
+ "Model Creator": "ماڈل تخلیق کار",
+ "Name of the model creator. (Default: Unknown)": "ماڈل تخلیق کار کا نام۔ (پہلے سے طے شدہ: نامعلوم)",
+ "Model Author Name": "ماڈل مصنف کا نام",
+ "Select the speaker ID to use for the conversion.": "تبدیلی کے لئے استعمال کرنے کے لئے اسپیکر ID منتخب کریں۔",
+ "Set name": "نام مقرر کریں",
+ "The name that will appear in the model information.": "وہ نام جو ماڈل کی معلومات میں ظاہر ہوگا۔",
+ "Move files to custom embedder folder": "فائلوں کو اپنی مرضی کے مطابق ایمبیڈر فولڈر میں منتقل کریں",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "آٹو ٹیون کی طاقت کو سیٹ کریں - جتنا زیادہ آپ اس میں اضافہ کریں گے اتنا ہی یہ کرومیٹک گرڈ میں پھسل جائے گا۔"
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/vi_VI.json b/assets/i18n/languages/vi_VI.json
new file mode 100644
index 0000000000000000000000000000000000000000..394044ee502f4e4290a5120783ef4e7fe7330dfd
--- /dev/null
+++ b/assets/i18n/languages/vi_VI.json
@@ -0,0 +1,175 @@
+{
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "Công cụ nhân bản giọng nói tối ưu, được tối ưu hóa tỉ mỉ cho sức mạnh vô song, tính mô-đun và trải nghiệm thân thiện với người dùng.",
+ "This section contains some extra utilities that often may be in experimental phases.": "Phần này chứa một số tiện ích bổ sung thường có thể đang trong giai đoạn thử nghiệm.",
+ "Output Information": "Thông tin đầu ra",
+ "The output information will be displayed here.": "Thông tin đầu ra sẽ được hiển thị ở đây.",
+ "Inference": "Suy luận",
+ "Train": "Xe lửa",
+ "Extra": "Phụ",
+ "Merge Audios": "Hợp nhất âm thanh",
+ "Processing": "Xử lý",
+ "Audio Analyzer": "Máy phân tích âm thanh",
+ "Model Information": "Thông tin mô hình",
+ "Plugins": "Plugin",
+ "Download": "Tải xuống",
+ "Report a Bug": "Báo cáo lỗi",
+ "Settings": "Cài đặt",
+ "Preprocess": "Tiền xử lý",
+ "Model Name": "Tên Model",
+ "Name of the new model.": "Tên của mô hình mới.",
+ "Enter model name": "Nhập tên model",
+ "Dataset Path": "Đường dẫn tập dữ liệu",
+ "Path to the dataset folder.": "Đường dẫn đến thư mục tập dữ liệu.",
+ "Refresh Datasets": "Làm mới tập dữ liệu",
+ "Dataset Creator": "Trình tạo tập dữ liệu",
+ "Dataset Name": "Tên tập dữ liệu",
+ "Name of the new dataset.": "Tên của tập dữ liệu mới.",
+ "Enter dataset name": "Nhập tên tập dữ liệu",
+ "Upload Audio Dataset": "Tải lên tập dữ liệu âm thanh",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Tệp âm thanh đã được thêm thành công vào tập dữ liệu. Vui lòng nhấp vào nút xử lý trước.",
+ "Enter dataset path": "Nhập đường dẫn tập dữ liệu",
+ "Sampling Rate": "Tỷ lệ lấy mẫu",
+ "The sampling rate of the audio files.": "Tốc độ lấy mẫu của các tệp âm thanh.",
+ "Model Architecture": "Phiên bản RVC",
+ "Version of the model architecture.": "Phiên bản RVC của mô hình.",
+ "Preprocess Dataset": "Tập dữ liệu tiền xử lý",
+ "Extract": "Trích",
+ "Hop Length": "Chiều dài hop",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Biểu thị khoảng thời gian cần thiết để hệ thống chuyển sang thay đổi cao độ đáng kể. Độ dài bước nhảy nhỏ hơn đòi hỏi nhiều thời gian hơn để suy luận nhưng có xu hướng mang lại độ chính xác cao độ cao hơn.",
+ "Batch Size": "Kích thước lô",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Bạn nên căn chỉnh nó với VRAM có sẵn của GPU của bạn. Cài đặt 4 cung cấp độ chính xác được cải thiện nhưng xử lý chậm hơn, trong khi 8 cung cấp kết quả tiêu chuẩn và nhanh hơn.",
+ "Save Every Epoch": "Lưu mọi kỷ nguyên",
+ "Determine at how many epochs the model will saved at.": "Xác định mô hình sẽ lưu tại bao nhiêu kỷ nguyên.",
+ "Total Epoch": "Tổng kỷ nguyên",
+ "Specifies the overall quantity of epochs for the model training process.": "Chỉ định số lượng tổng thể của các kỷ nguyên cho quá trình đào tạo mô hình.",
+ "Pretrained": "Đào tạo trước",
+ "Save Only Latest": "Chỉ lưu mới nhất",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Bật cài đặt này sẽ dẫn đến các tệp G và D chỉ lưu các phiên bản mới nhất của chúng, tiết kiệm hiệu quả dung lượng lưu trữ.",
+ "Save Every Weights": "Tiết kiệm mọi trọng lượng",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Cài đặt này cho phép bạn lưu trọng số của mô hình khi kết thúc mỗi kỷ nguyên.",
+ "Custom Pretrained": "Đào tạo trước tùy chỉnh",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Sử dụng các mô hình được đào tạo trước tùy chỉnh có thể dẫn đến kết quả vượt trội, vì việc lựa chọn các mô hình được đào tạo trước phù hợp nhất phù hợp với trường hợp sử dụng cụ thể có thể nâng cao đáng kể hiệu suất.",
+ "Upload Pretrained Model": "Tải lên mô hình được đào tạo trước",
+ "Refresh Custom Pretraineds": "Làm mới Custom Pretraineds",
+ "Pretrained Custom Settings": "Cài đặt tùy chỉnh được đào tạo sẵn",
+ "The file you dropped is not a valid pretrained file. Please try again.": "Tệp bạn đã bỏ không phải là tệp được đào tạo trước hợp lệ. Vui lòng thử lại.",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "Nhấp vào nút làm mới để xem tệp được đào tạo trước trong menu thả xuống.",
+ "Pretrained G Path": "Tùy chỉnh được đào tạo trước G",
+ "Pretrained D Path": "Tùy chỉnh được đào tạo trước D",
+ "GPU Settings": "Cài đặt GPU",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Đặt cài đặt GPU nâng cao, được khuyến nghị cho người dùng có kiến trúc GPU tốt hơn.",
+ "GPU Custom Settings": "Cài đặt tùy chỉnh GPU",
+ "GPU Number": "Số GPU",
+ "0 to ∞ separated by -": "0 đến ∞ cách nhau bởi -",
+ "GPU Information": "Thông tin GPU",
+ "Pitch Guidance": "Hướng dẫn quảng cáo chiêu hàng",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Bằng cách sử dụng hướng dẫn cao độ, nó trở nên khả thi để phản ánh ngữ điệu của giọng nói gốc, bao gồm cả cao độ của nó. Tính năng này đặc biệt có giá trị đối với ca hát và các tình huống khác trong đó việc giữ nguyên giai điệu hoặc cao độ ban đầu là điều cần thiết.",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Sử dụng các mô hình được đào tạo trước khi đào tạo của riêng bạn. Cách tiếp cận này làm giảm thời gian đào tạo và nâng cao chất lượng tổng thể.",
+ "Extract Features": "Tính năng trích xuất",
+ "Start Training": "Bắt đầu đào tạo",
+ "Generate Index": "Tạo chỉ mục",
+ "Voice Model": "Mô hình giọng nói",
+ "Select the voice model to use for the conversion.": "Chọn kiểu giọng nói để sử dụng cho quá trình chuyển đổi.",
+ "Index File": "Tệp chỉ mục",
+ "Select the index file to use for the conversion.": "Chọn tệp chỉ mục để sử dụng cho quá trình chuyển đổi.",
+ "Refresh": "Làm tươi",
+ "Unload Voice": "Dỡ giọng nói",
+ "Single": "Đơn",
+ "Upload Audio": "Tải lên âm thanh",
+ "Select Audio": "Chọn Âm thanh",
+ "Select the audio to convert.": "Chọn âm thanh để chuyển đổi.",
+ "Advanced Settings": "Cài đặt nâng cao",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Xóa đầu ra (Xóa tất cả âm thanh trong nội dung / âm thanh)",
+ "Custom Output Path": "Đường dẫn đầu ra tùy chỉnh",
+ "Output Path": "Đường dẫn đầu ra",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "Đường dẫn nơi âm thanh đầu ra sẽ được lưu, theo mặc định trong tài sản / âm thanh / output.wav",
+ "Split Audio": "Tách âm thanh",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "Chia âm thanh thành các phần để suy luận nhằm thu được kết quả tốt hơn trong một số trường hợp.",
+ "Autotune": "Tự động điều chỉnh",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "Áp dụng autotune mềm cho suy luận của bạn, được đề xuất để chuyển đổi ca hát.",
+ "Clean Audio": "Âm thanh sạch",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Làm sạch đầu ra âm thanh của bạn bằng các thuật toán phát hiện tiếng ồn, được khuyến nghị để nói âm thanh.",
+ "Clean Strength": "Sức mạnh sạch",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Đặt mức dọn dẹp thành âm thanh bạn muốn, bạn càng tăng thì càng dọn dẹp, nhưng có thể âm thanh sẽ bị nén nhiều hơn.",
+ "Pitch": "Sân",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "Đặt cao độ của âm thanh, giá trị càng cao, cao độ càng cao.",
+ "Filter Radius": "Bán kính lọc",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Nếu số lượng lớn hơn hoặc bằng ba, việc sử dụng bộ lọc trung bình trên kết quả âm thu thập được có khả năng làm giảm hô hấp.",
+ "Search Feature Ratio": "Tỷ lệ tính năng tìm kiếm",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Ảnh hưởng tác động của tệp chỉ mục; Giá trị cao hơn tương ứng với ảnh hưởng lớn hơn. Tuy nhiên, việc chọn các giá trị thấp hơn có thể giúp giảm thiểu các hiện vật có trong âm thanh.",
+ "Volume Envelope": "Phong bì khối lượng",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Thay thế hoặc trộn với phong bì âm lượng của đầu ra. Tỷ lệ càng gần 1, phong bì đầu ra càng được sử dụng.",
+ "Protect Voiceless Consonants": "Bảo vệ phụ âm vô thanh",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Bảo vệ các phụ âm riêng biệt và âm thanh thở để ngăn ngừa rách âm thanh điện và các hiện vật khác. Kéo tham số đến giá trị tối đa 0, 5 cung cấp sự bảo vệ toàn diện. Tuy nhiên, việc giảm giá trị này có thể làm giảm mức độ bảo vệ trong khi có khả năng giảm thiểu hiệu ứng lập chỉ mục.",
+ "Pitch extraction algorithm": "Thuật toán trích xuất cao độ",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Thuật toán trích xuất cao độ để sử dụng cho việc chuyển đổi âm thanh. Thuật toán mặc định là rmvpe, được khuyến nghị cho hầu hết các trường hợp.",
+ "Convert": "Convert",
+ "Export Audio": "Xuất âm thanh",
+ "Batch": "Mẻ",
+ "Input Folder": "Thư mục đầu vào",
+ "Select the folder containing the audios to convert.": "Chọn thư mục chứa âm thanh để chuyển đổi.",
+ "Enter input path": "Nhập đường dẫn nhập liệu",
+ "Output Folder": "Thư mục đầu ra",
+ "Select the folder where the output audios will be saved.": "Chọn thư mục lưu âm thanh đầu ra.",
+ "Enter output path": "Nhập đường dẫn đầu ra",
+ "Get information about the audio": "Nhận thông tin về âm thanh",
+ "Information about the audio file": "Thông tin về tệp âm thanh",
+ "Waiting for information...": "Đang chờ thông tin...",
+ "## Voice Blender": "## Máy xay sinh tố giọng nói",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Chọn hai mẫu giọng nói, đặt tỷ lệ phần trăm pha trộn mong muốn của bạn và trộn chúng thành một giọng nói hoàn toàn mới.",
+ "Voice Blender": "Máy xay sinh tố giọng nói",
+ "Drag and drop your model here": "Kéo và thả mô hình của bạn vào đây",
+ "You can also use a custom path.": "Bạn cũng có thể sử dụng đường dẫn tùy chỉnh.",
+ "Blend Ratio": "Tỷ lệ pha trộn",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Điều chỉnh vị trí nhiều hơn về phía bên này hay bên kia sẽ làm cho mô hình giống với thứ nhất hoặc thứ hai hơn.",
+ "Fusion": "Fusion",
+ "Path to Model": "Đường dẫn đến mô hình",
+ "Enter path to model": "Nhập đường dẫn đến mô hình",
+ "Model information to be placed": "Thông tin mô hình sẽ được đặt",
+ "Inroduce the model information": "Giới thiệu thông tin mô hình",
+ "The information to be placed in the model (You can leave it blank or put anything).": "Thông tin được đặt trong mô hình (Bạn có thể để trống hoặc đặt bất cứ thứ gì).",
+ "View model information": "Xem thông tin mô hình",
+ "Introduce the model pth path": "Giới thiệu mô hình pth path",
+ "View": "Cảnh",
+ "Model extraction": "Trích xuất mô hình",
+ "Model conversion": "Chuyển đổi mô hình",
+ "Pth file": "Tệp Pth",
+ "Output of the pth file": "Đầu ra của tệp pth",
+ "# How to Report an Issue on GitHub": "# Cách báo cáo sự cố trên GitHub",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Nhấp vào nút 'Ghi lại màn hình' bên dưới để bắt đầu ghi lại sự cố bạn đang gặp phải.",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Khi bạn đã ghi xong sự cố, hãy nhấp vào nút 'Dừng ghi' (cùng một nút, nhưng nhãn thay đổi tùy thuộc vào việc bạn có chủ động ghi hay không).",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Đi tới [Vấn đề GitHub] (https://github.com/IAHispano/Applio/issues) và nhấp vào nút 'Vấn đề mới'.",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Hoàn thành mẫu vấn đề được cung cấp, đảm bảo bao gồm các chi tiết khi cần thiết và sử dụng phần tài sản để tải lên tệp đã ghi từ bước trước.",
+ "Record Screen": "Ghi lại màn hình",
+ "Record": "Ghi",
+ "Stop Recording": "Dừng ghi",
+ "Introduce the model .pth path": "Giới thiệu mô hình đường dẫn .pth",
+ "See Model Information": "Xem thông tin mô hình",
+ "## Download Model": "## Tải xuống mô hình",
+ "Model Link": "Liên kết mô hình",
+ "Introduce the model link": "Giới thiệu link mô hình",
+ "Download Model": "Tải xuống mô hình",
+ "## Drop files": "## Thả tệp",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "Kéo tệp .pth và tệp .index của bạn vào không gian này. Kéo cái này rồi cái kia.",
+ "TTS Voices": "Tiếng nói TTS",
+ "Select the TTS voice to use for the conversion.": "Chọn giọng nói TTS để sử dụng cho quá trình chuyển đổi.",
+ "Text to Synthesize": "Văn bản để tổng hợp",
+ "Enter the text to synthesize.": "Nhập văn bản để tổng hợp.",
+ "Upload a .txt file": "Hoặc bạn có thể tải lên tệp .txt",
+ "Enter text to synthesize": "Nhập văn bản để tổng hợp",
+ "Output Path for TTS Audio": "Đường dẫn đầu ra cho âm thanh TTS",
+ "Output Path for RVC Audio": "Đường dẫn đầu ra cho âm thanh RVC",
+ "Enable Applio integration with Discord presence": "Bật tích hợp Applio với sự hiện diện của Discord",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "Nó sẽ kích hoạt khả năng hiển thị hoạt động Applio hiện tại trong Discord.",
+ "Enable Applio integration with applio.org/models using flask": "Bật tích hợp Applio với applio.org/models bằng bình",
+ "It will activate the possibility of downloading models with a click from the website.": "Nó sẽ kích hoạt khả năng tải xuống các mô hình bằng một cú nhấp chuột từ trang web.",
+ "Theme": "Đề tài",
+ "Select the theme you want to use. (Requires restarting Applio)": "Chọn chủ đề bạn muốn sử dụng. (Yêu cầu khởi động lại Applio)",
+ "Language": "Ngôn ngữ",
+ "Select the language you want to use. (Requires restarting Applio)": "Chọn ngôn ngữ bạn muốn sử dụng. (Yêu cầu khởi động lại Applio)",
+ "Plugin Installer": "Trình cài đặt plugin",
+ "Drag your plugin.zip to install it": "Kéo plugin.zip của bạn để cài đặt nó",
+ "Version Checker": "Trình kiểm tra phiên bản",
+ "Check which version of Applio is the latest to see if you need to update.": "Kiểm tra xem phiên bản Applio nào là phiên bản mới nhất để xem bạn có cần cập nhật hay không.",
+ "Check for updates": "Kiểm tra bản cập nhật"
+}
\ No newline at end of file
diff --git a/assets/i18n/languages/wu_WU.json b/assets/i18n/languages/wu_WU.json
new file mode 100644
index 0000000000000000000000000000000000000000..9e26dfeeb6e641a33dae4961196235bdb965b21b
--- /dev/null
+++ b/assets/i18n/languages/wu_WU.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/assets/i18n/languages/zh_CN.json b/assets/i18n/languages/zh_CN.json
new file mode 100644
index 0000000000000000000000000000000000000000..3fdf6c93a52ba3ada1f25b707a94c9599dc52deb
--- /dev/null
+++ b/assets/i18n/languages/zh_CN.json
@@ -0,0 +1,325 @@
+{
+ "Training": "训练",
+ "Settings": "设置",
+ "Extra": "额外",
+ "Inference": "推理",
+ "Processing": "加工",
+ "Preprocess": "预处理",
+ "A simple, high-quality voice conversion tool focused on ease of use and performance.": "一个简单、高质量的语音转换工具,专注于易用性和性能。",
+ "Plugins": "插件",
+ "Output Information": "输出信息",
+ "Download": "下载",
+ "The output information will be displayed here.": "输出信息将显示在此处。",
+ "Model Information": "型号信息",
+ "Audio Analyzer": "音频分析器",
+ "Report a Bug": "报告 Bug",
+ "This section contains some extra utilities that often may be in experimental phases.": "本节包含一些通常可能处于实验阶段的额外实用程序。",
+ "Merge Audios": "合并音频",
+ "Audio cutting": "音频剪辑",
+ "Model Name": "型号名称",
+ "It's recommended to deactivate this option if your dataset has already been processed.": "如果您的数据集已处理,建议停用此选项。",
+ "Enter model name": "输入模型名称",
+ "Refresh Datasets": "刷新数据集",
+ "Dataset Path": "数据集路径",
+ "Path to the dataset folder.": "数据集文件夹的路径。",
+ "Dataset Creator": "数据集创建者",
+ "Process effects": "过程效应",
+ "Name of the new dataset.": "新数据集的名称。",
+ "Dataset Name": "数据集名称",
+ "Upload Audio Dataset": "上传音频数据集",
+ "Enter dataset path": "输入数据集路径",
+ "The audio file has been successfully added to the dataset. Please click the preprocess button.": "音频文件已成功添加到数据集中。请单击预处理按钮。",
+ "Sampling Rate": "采样率",
+ "Name of the new model.": "新模型的名称。",
+ "The sampling rate of the audio files.": "音频文件的采样率。",
+ "Enter dataset name": "输入数据集名称",
+ "Model Architecture": "模型架构",
+ "Preprocess Dataset": "预处理数据集",
+ "Extract": "提取",
+ "Embedder Model": "嵌入器模型",
+ "Version of the model architecture.": "模型体系结构的版本。",
+ "Hop Length": "跃点长度",
+ "Model used for learning speaker embedding.": "用于学习说话人嵌入的模型。",
+ "Batch Size": "批量大小",
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "表示系统过渡到显著的音高变化所花费的持续时间。较小的跃点长度需要更多的推理时间,但往往会产生更高的音高精度。",
+ "Save Every Epoch": "保存每个 Epoch",
+ "Total Epoch": "总 Epoch",
+ "Determine at how many epochs the model will saved at.": "确定模型将保存多少个 epoch。",
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "建议将其与 GPU 的可用 VRAM 保持一致。设置为 4 时,精度更高,但处理速度较慢,而设置为 8 时,结果更快,更标准。",
+ "Pretrained": "预训练",
+ "Specifies the overall quantity of epochs for the model training process.": "指定模型训练过程的 epoch 总数。",
+ "Save Only Latest": "仅保存最新",
+ "Save Every Weights": "保存所有权重",
+ "Refresh Custom Pretraineds": "刷新自定义预训练",
+ "Custom Pretrained": "自定义预训练",
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "启用此设置将导致 G 和 D 文件仅保存其最新版本,从而有效地节省存储空间。",
+ "This setting enables you to save the weights of the model at the conclusion of each epoch.": "此设置使您能够在每个 epoch 结束时保存模型的权重。",
+ "Upload Pretrained Model": "上传预训练模型",
+ "Pretrained Custom Settings": "预训练的自定义设置",
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "利用自定义预训练模型可以带来卓越的结果,因为选择针对特定用例量身定制的最合适的预训练模型可以显著提高性能。",
+ "Pretrained G Path": "自定义预训练 G",
+ "GPU Settings": "GPU 设置",
+ "Pretrained D Path": "自定义预训练 D",
+ "Click the refresh button to see the pretrained file in the dropdown menu.": "单击 refresh 按钮,在下拉菜单中查看预训练文件。",
+ "GPU Custom Settings": "GPU 自定义设置",
+ "GPU Number": "GPU 编号",
+ "Sets advanced GPU settings, recommended for users with better GPU architecture.": "设置高级 GPU 设置,建议具有更好 GPU 体系结构的用户使用。",
+ "The file you dropped is not a valid pretrained file. Please try again.": "您删除的文件不是有效的预训练文件。请重试。",
+ "0 to ∞ separated by -": "0 到 ∞ 之间用 - 分隔",
+ "The GPU information will be displayed here.": "GPU 信息将显示在此处。",
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases.": "提取过程中要使用的 CPU 内核数。默认设置是您的 CPU 核心数,在大多数情况下建议使用。",
+ "Pitch Guidance": "推销指导",
+ "Use CPU": "使用 CPU",
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases.": "要在预处理中使用的 CPU 内核数。默认设置是您的 CPU 核心数,在大多数情况下建议使用。",
+ "Specify the number of GPUs you wish to utilize for preprocess by entering them separated by hyphens (-). At the moment, using multi-gpu will not have a significant effect.": "指定要用于预处理的 GPU 数量,方法是输入以连字符 (-) 分隔的 GPU 数量。目前,使用多 GPU 不会产生显着影响。",
+ "Force the use of CPU for training.": "强制使用 CPU 进行训练。",
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "在训练自己的模型时使用预训练模型。这种方法减少了训练时间并提高了整体质量。",
+ "GPU Information": "GPU 信息",
+ "Extract Features": "提取特征",
+ "Cache Dataset in GPU": "在 GPU 中缓存数据集",
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "我们优先在 GPU 上运行模型提取以获得更快的性能。如果您更喜欢使用 CPU,只需将 GPU 字段留空即可。",
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-).": "指定要用于提取的 GPU 数量,方法是输入以连字符 (-) 分隔的 GPU 数量。",
+ "We prioritize running the model preprocessing on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank.": "我们优先在 GPU 上运行模型预处理,以获得更快的性能。如果您更喜欢使用 CPU,只需将 GPU 字段留空即可。",
+ "Overtraining Detector": "过度训练检测器",
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets.": "KMeans 是一种聚类算法,可将数据集划分为 K 个聚类。此设置对于大型数据集特别有用。",
+ "Index Algorithm": "索引算法",
+ "Overtraining Detector Settings": "过度训练检测器设置",
+ "Cache the dataset in GPU memory to speed up the training process.": "将数据集缓存在 GPU 内存中以加快训练过程。",
+ "Overtraining Threshold": "过度训练阈值",
+ "Fresh Training": "新鲜培训",
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "检测过度训练,以防止模型过于好地学习训练数据并失去泛化到新数据的能力。",
+ "Start Training": "开始培训",
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "设置您希望模型在未检测到改进时停止训练的最大纪元数。",
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs.": "仅当您从头开始训练新模型或重新启动训练时,才启用此设置。删除之前生成的所有权重和 tensorboard 日志。",
+ "Stop Training": "停止训练",
+ "Generate Index": "生成索引",
+ "Export Model": "导出模型",
+ "Upload": "上传",
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "“上传”按钮仅适用于 google colab:将导出的文件上传到 Google Drive 中的 ApplioExported 文件夹。",
+ "Exported Pth file": "导出的 Pth 文件",
+ "Exported Index file": "导出的索引文件",
+ "Select the pth file to be exported": "选择要导出的第 pth 文件",
+ "Voice Model": "语音模型",
+ "Refresh": "刷新",
+ "Select the index file to use for the conversion.": "选择要用于转换的索引文件。",
+ "Unload Voice": "卸载语音",
+ "Single": "单",
+ "Upload Audio": "上传音频",
+ "Select Audio": "选择 Audio",
+ "Custom Output Path": "自定义输出路径",
+ "Output Path": "输出路径",
+ "Clear Outputs (Deletes all audios in assets/audios)": "Clear Outputs(清除输出)(删除 assets/audios 中的所有音频)",
+ "Export Format": "导出格式",
+ "Select the format to export the audio.": "选择导出音频的格式。",
+ "Split Audio": "拆分音频",
+ "Advanced Settings": "高级设置",
+ "Autotune": "自动调谐",
+ "The path where the output audio will be saved, by default in assets/audios/output.wav": "输出音频的保存路径,默认位于 assets/audios/output.wav",
+ "Split the audio into chunks for inference to obtain better results in some cases.": "在某些情况下,将音频拆分为多个块进行推理,以获得更好的结果。",
+ "Apply a soft autotune to your inferences, recommended for singing conversions.": "将软自动调谐应用于您的推理,建议用于歌唱转换。",
+ "Clean Audio": "干净的音频",
+ "Clean Strength": "清洁强度",
+ "Upscale Audio": "高档音频",
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "通过使用音高指导,可以镜像原始语音的语调,包括其音调。此功能对于唱歌和其他必须保留原始旋律或音高模式的场景特别有价值。",
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "将音频升级到更高的质量,建议用于低质量音频。(处理音频可能需要更长的时间)",
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "使用噪声检测算法清理音频输出,建议用于语音音频。",
+ "Formant Shifting": "共振峰移位",
+ "Enable formant shifting. Used for male to female and vice-versa convertions.": "启用共振峰移动。用于男性到女性的转换,反之亦然。",
+ "Browse presets for formanting": "浏览共振峰预设",
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "将清理级别设置为您想要的音频,增加的越多,清理的就越多,但音频可能会被压缩得更多。",
+ "Presets are located in /assets/formant_shift folder": "预设位于 /assets/formant_shift 文件夹中",
+ "Default value is 1.0": "默认值为 1.0",
+ "Pitch": "投",
+ "Timbre for formant shifting": "共振峰移位的音色",
+ "Quefrency for formant shifting": "Quefrency for formant 移位",
+ "Search Feature Ratio": "搜索特征比率",
+ "Filter Radius": "Filter Radius",
+ "Set the pitch of the audio, the higher the value, the higher the pitch.": "设置音频的音高,值越高,音高越高。",
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "索引文件施加的影响;值越高,影响越大。但是,选择较低的值有助于减少音频中存在的伪影。",
+ "Volume Envelope": "Volume Envelope",
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "如果数字大于或等于 3,则对收集的音调结果采用中位数筛选可能会减少呼吸。",
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "替换或混合输出的音量包络。比率越接近 1,则使用的输出包络越多。",
+ "Protect Voiceless Consonants": "保护清辅音",
+ "Convert": "转换",
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "保护不同的辅音和呼吸音,以防止电声撕裂和其他伪影。将参数拉到其最大值 0.5 可提供全面的保护。但是,减小此值可能会降低保护范围,同时可能会减轻索引效应。",
+ "Index File": "索引文件",
+ "Batch": "批",
+ "Select the voice model to use for the conversion.": "选择要用于转换的语音模型。",
+ "Pitch extraction algorithm": "音高提取算法",
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "用于音频转换的音高提取算法。默认算法是 rmvpe,在大多数情况下建议使用。",
+ "Input Folder": "输入文件夹",
+ "Export Audio": "导出音频",
+ "Select the audio to convert.": "选择要转换的音频。",
+ "Output Folder": "输出文件夹",
+ "Enter input path": "输入输入路径",
+ "Select the folder containing the audios to convert.": "选择包含要转换的音频的文件夹。",
+ "Enter output path": "输入输出路径",
+ "Select the folder where the output audios will be saved.": "选择将保存输出音频的文件夹。",
+ "Get information about the audio": "获取有关音频的信息",
+ "## Voice Blender": "## 语音混合器",
+ "Drag and drop your model here": "将模型拖放到此处",
+ "You can also use a custom path.": "您还可以使用自定义路径。",
+ "Blend Ratio": "混合比",
+ "Voice Blender": "语音混合器",
+ "Select the index file to be exported": "选择要导出的索引文件",
+ "Fusion": "融合",
+ "Path to Model": "建模路径",
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "选择两个语音模型,设置所需的混合百分比,然后将它们混合成一个全新的语音。",
+ "Model information to be placed": "要配置的模型信息",
+ "Enter path to model": "输入模型的路径",
+ "Inroduce the model information": "导入模型信息",
+ "View": "视图",
+ "View model information": "查看模型信息",
+ "The information to be placed in the model (You can leave it blank or put anything).": "要放置在模型中的信息(您可以将其留空或放置任何内容)。",
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "将位置更偏向一侧或另一侧将使模型更类似于第一侧或第二侧。",
+ "Model extraction": "模型提取",
+ "Model conversion": "模型转换",
+ "Output of the pth file": "pth 文件的输出",
+ "Pth file": "Pth 文件",
+ "Introduce the model pth path": "引入模型第 p 个路径",
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls.": "f0 曲线表示声部基频随时间的变化,显示音高如何上升和下降。",
+ "# How to Report an Issue on GitHub": "# 如何在 GitHub 上报告 Issue",
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. 单击下面的“录制屏幕”按钮,开始录制您遇到的问题。",
+ "Record": "记录",
+ "Record Screen": "录制屏幕",
+ "Stop Recording": "停止录制",
+ "## Download Model": "## 下载模型",
+ "Model Link": "模型链接",
+ "See Model Information": "查看型号信息",
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. 转到 [GitHub Issues](https://github.com/IAHispano/Applio/issues) 并单击“New Issue”按钮。",
+ "Download Model": "下载模型",
+ "Introduce the model link": "介绍模型链接",
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. 完成提供的问题模板,确保根据需要包含详细信息,并利用 assets 部分上传上一步中录制的文件。",
+ "Search": "搜索",
+ "## Drop files": "## 删除文件",
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. 完成录制问题后,单击“停止录制”按钮(相同的按钮,但标签会根据您是否正在主动录制而更改)。",
+ "Introduce the model .pth path": "引入模型 .pth 路径",
+ "Drag your .pth file and .index file into this space. Drag one and then the other.": "将 .pth 文件和 .index 文件拖动到此空间中。拖动一个,然后拖动另一个。",
+ "## Search Model": "## 搜索模型",
+ "Introduce the model name to search.": "引入模型名称进行搜索。",
+ "We couldn't find models by that name.": "我们找不到这个名字的模型。",
+ "And select the sampling rate": "并选择采样率。",
+ "TTS Voices": "TTS 语音",
+ "Select the pretrained model you want to download.": "选择要下载的预训练模型。",
+ "Increase or decrease TTS speed.": "提高或减少 TTS 速度。",
+ "Select the TTS voice to use for the conversion.": "选择要用于转换的 TTS 语音。",
+ "## Download Pretrained Models": "## 下载预训练模型",
+ "Text to Synthesize": "要合成的文本",
+ "Enter the text to synthesize.": "输入要合成的文本。",
+ "Upload a .txt file": "上传 .txt 文件",
+ "Input path for text file": "文本文件的输入路径",
+ "The path to the text file that contains content for text to speech.": "包含文本到语音转换内容的文本文件的路径。",
+ "Extract F0 Curve": "提取 F0 曲线",
+ "Enter text to synthesize": "输入要合成的文本",
+ "Output Path for TTS Audio": "TTS 音频的输出路径",
+ "Output Path for RVC Audio": "RVC 音频的输出路径",
+ "TTS Speed": "TTS 速度",
+ "Enable Applio integration with Discord presence": "启用 Applio 与 Discord 状态的集成",
+ "It will activate the possibility of downloading models with a click from the website.": "它将激活通过单击从网站下载模型的可能性。",
+ "Enable fake GPU": "启用假 GPU",
+ "It will activate the possibility of displaying the current Applio activity in Discord.": "它将激活在 Discord 中显示当前 Applio 活动的可能性。",
+ "Enable Applio integration with applio.org/models using flask": "使用 flask 启用 Applio 与 applio.org/models 的集成",
+ "Theme": "主题",
+ "Language": "语言",
+ "Precision": "精度",
+ "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "由于缺少 GPU,目前不支持训练。要激活训练选项卡,请导航到设置选项卡并启用“Fake GPU”选项。",
+ "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "激活 train 选项卡。但是,请注意,此设备缺乏 GPU 功能,因此不支持训练。此选项仅用于测试目的。(此选项将重新启动 Applio)",
+ "Restart Applio": "重新启动 Applio",
+ "Select the precision you want to use for training and inference.": "选择要用于训练和推理的精度。",
+ "Update precision": "更新精度",
+ "Plugin Installer": "插件安装程序",
+ "Select the theme you want to use. (Requires restarting Applio)": "选择要使用的主题。(需要重新启动 Applio)",
+ "Version Checker": "版本检查器",
+ "Drag your plugin.zip to install it": "拖动 plugin.zip 进行安装",
+ "Check for updates": "检查更新",
+ "Reverb": "混响",
+ "Post-Process": "后处理",
+ "Check which version of Applio is the latest to see if you need to update.": "检查哪个版本的 Applio 是最新的,以查看是否需要更新。",
+ "Apply reverb to the audio.": "将混响应用于音频。",
+ "Reverb Room Size": "混响房间大小",
+ "Set the room size of the reverb.": "设置 Reverb 的 Room 大小。",
+ "Reverb Damping": "混响阻尼",
+ "Post-process the audio to apply effects to the output.": "对音频进行后处理以将效果应用于输出。",
+ "Set the wet gain of the reverb.": "设置混响的湿增益。",
+ "Reverb Wet Gain": "Reverb Wet Gain",
+ "Reverb Dry Gain": "Reverb Dry Gain",
+ "Set the damping of the reverb.": "设置混响的阻尼。",
+ "Set the width of the reverb.": "设置 reverb 的宽度。",
+ "Set the dry gain of the reverb.": "设置 reverb 的干增益。",
+ "Reverb Width": "Reverb Width",
+ "Pitch Shift": "音高偏移",
+ "Set the freeze mode of the reverb.": "设置混响的冻结模式。",
+ "Apply pitch shift to the audio.": "对音频应用音高偏移。",
+ "Pitch Shift Semitones": "Pitch Shift 半音",
+ "Set the pitch shift semitones.": "设置音高移动半音。",
+ "Limiter": "限幅器",
+ "Select the language you want to use. (Requires restarting Applio)": "选择您要使用的语言。(需要重新启动 Applio)",
+ "Reverb Freeze Mode": "Reverb Freeze 模式(Reverb Freeze Mode)",
+ "Gain": "获得",
+ "Apply limiter to the audio.": "将限制器应用于音频。",
+ "Limiter Release Time": "Limiter 释放时间",
+ "Set the limiter threshold dB.": "设置 Limiter 阈值 dB。",
+ "Set the limiter release time.": "设置 Limiter 释放时间。",
+ "Apply gain to the audio.": "对音频应用增益。",
+ "Gain dB": "增益 dB",
+ "Set the gain dB.": "设置增益 dB。",
+ "Limiter Threshold dB": "Limiter Threshold (限幅器阈值) dB",
+ "Apply distortion to the audio.": "对音频应用失真。",
+ "Distortion": "失真",
+ "Distortion Gain": "失真增益",
+ "Chorus": "合唱",
+ "Set the distortion gain.": "设置失真增益。",
+ "Chorus Rate Hz": "合唱速率 Hz",
+ "Chorus Depth": "Chorus Depth",
+ "Set the chorus depth.": "设置合唱深度。",
+ "Set the chorus center delay ms.": "设置合唱中心延迟毫秒。",
+ "Chorus Feedback": "合唱反馈",
+ "Set the chorus feedback.": "设置 chorus feedback。",
+ "Chorus Center Delay ms": "合唱中心延迟毫秒",
+ "Clipping": "裁剪",
+ "Bitcrush": "比特粉碎",
+ "Apply bitcrush to the audio.": "将 bitcrush 应用于音频。",
+ "Apply chorus to the audio.": "对音频应用合唱。",
+ "Bitcrush Bit Depth": "Bitcrush 位深度",
+ "Set the bitcrush bit depth.": "设置 bitcrush 位深度。",
+ "Chorus Mix": "合唱混音",
+ "Compressor": "压缩机",
+ "Apply clipping to the audio.": "对音频应用剪辑。",
+ "Clipping Threshold": "Clipping Threshold",
+ "Set the clipping threshold.": "设置剪切阈值。",
+ "Apply compressor to the audio.": "将 Compressor 应用于音频。",
+ "Compressor Threshold dB": "Compressor Threshold (压缩器阈值) dB",
+ "Set the compressor threshold dB.": "设置压缩器阈值 dB。",
+ "Compressor Ratio": "压缩机比率",
+ "Set the chorus mix.": "设置 chorus mix。",
+ "Compressor Attack ms": "Compressor 攻击毫秒",
+ "Set the compressor ratio.": "设置压缩器比率。",
+ "Delay": "延迟",
+ "Set the compressor attack ms.": "设置 compressor 起音 ms。",
+ "Set the chorus rate Hz.": "设置合唱速率 Hz。",
+ "Compressor Release ms": "压缩机释放 ms",
+ "Set the compressor release ms.": "设置 compressor 释放 ms。",
+ "Set the delay seconds.": "设置延迟秒数。",
+ "Apply delay to the audio.": "对音频应用 delay。",
+ "Delay Feedback": "延迟反馈",
+ "Delay Mix": "Delay Mix",
+ "Set the delay feedback.": "设置 delay feedback。",
+ "Custom Embedder": "自定义嵌入器",
+ "Delay Seconds": "延迟秒",
+ "Refresh embedders": "刷新嵌入器",
+ "Folder Name": "文件夹名称",
+ "model information": "型号信息",
+ "Upload .bin": "上传.bin",
+ "Set the delay mix.": "设置 delay mix。",
+ "Model Creator": "模型创建器",
+ "Upload .json": "上传.json",
+ "Move files to custom embedder folder": "将文件移动到自定义嵌入器文件夹",
+ "Select Custom Embedder": "选择 Custom Embedder",
+ "Name of the model creator. (Default: Unknown)": "模型创建者的名称。(默认值:Unknown)",
+ "Speaker ID": "说话人 ID",
+ "Model Author Name": "模型作者姓名",
+ "Select the speaker ID to use for the conversion.": "选择要用于转换的说话人 ID。",
+ "The name that will appear in the model information.": "将显示在模型信息中的名称。",
+ "Set name": "集名称",
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid.": "设置自动调谐强度 - 增加的次数越多,它就越能吸附到半音网格。"
+}
\ No newline at end of file
diff --git a/assets/i18n/scan.py b/assets/i18n/scan.py
new file mode 100644
index 0000000000000000000000000000000000000000..c1de0f74e55962e914420d395776733ba1e6fe61
--- /dev/null
+++ b/assets/i18n/scan.py
@@ -0,0 +1,71 @@
+import ast
+import json
+from pathlib import Path
+from collections import OrderedDict
+
+
+def extract_i18n_strings(node):
+ i18n_strings = []
+
+ if (
+ isinstance(node, ast.Call)
+ and isinstance(node.func, ast.Name)
+ and node.func.id == "i18n"
+ ):
+ for arg in node.args:
+ if isinstance(arg, ast.Str):
+ i18n_strings.append(arg.s)
+
+ for child_node in ast.iter_child_nodes(node):
+ i18n_strings.extend(extract_i18n_strings(child_node))
+
+ return i18n_strings
+
+
+def process_file(file_path):
+ with open(file_path, "r", encoding="utf8") as file:
+ code = file.read()
+ if "I18nAuto" in code:
+ tree = ast.parse(code)
+ i18n_strings = extract_i18n_strings(tree)
+ print(file_path, len(i18n_strings))
+ return i18n_strings
+ return []
+
+
+# Use pathlib for file handling
+py_files = Path(".").rglob("*.py")
+
+# Use a set to store unique strings
+code_keys = set()
+
+for py_file in py_files:
+ strings = process_file(py_file)
+ code_keys.update(strings)
+
+print()
+print("Total unique:", len(code_keys))
+
+standard_file = "languages/en_US.json"
+with open(standard_file, "r", encoding="utf-8") as file:
+ standard_data = json.load(file, object_pairs_hook=OrderedDict)
+standard_keys = set(standard_data.keys())
+
+# Combine unused and missing keys sections
+unused_keys = standard_keys - code_keys
+missing_keys = code_keys - standard_keys
+
+print("Unused keys:", len(unused_keys))
+for unused_key in unused_keys:
+ print("\t", unused_key)
+
+print("Missing keys:", len(missing_keys))
+for missing_key in missing_keys:
+ print("\t", missing_key)
+
+code_keys_dict = OrderedDict((s, s) for s in code_keys)
+
+# Use context manager for writing back to the file
+with open(standard_file, "w", encoding="utf-8") as file:
+ json.dump(code_keys_dict, file, ensure_ascii=False, indent=4, sort_keys=True)
+ file.write("\n")
diff --git a/assets/installation_checker.py b/assets/installation_checker.py
new file mode 100644
index 0000000000000000000000000000000000000000..2d665a509ca7a43e43b98b6e0ff785628eeb313a
--- /dev/null
+++ b/assets/installation_checker.py
@@ -0,0 +1,38 @@
+import sys
+import os
+
+now_dir = os.getcwd()
+sys.path.append(now_dir)
+
+
+class InstallationError(Exception):
+ def __init__(self, message="InstallationError"):
+ self.message = message
+ super().__init__(self.message)
+
+
+def check_installation():
+ try:
+ system_drive = os.getenv("SystemDrive")
+ current_drive = os.path.splitdrive(now_dir)[0]
+ if current_drive.upper() != system_drive.upper():
+ raise InstallationError(
+ f"Installation Error: The current working directory is on drive {current_drive}, but the default system drive is {system_drive}. Please move Applio to the {system_drive} drive."
+ )
+ except:
+ pass
+ else:
+ if "OneDrive" in now_dir:
+ raise InstallationError(
+ "Installation Error: The current working directory is located in OneDrive. Please move Applio to a different folder."
+ )
+ elif " " in now_dir:
+ raise InstallationError(
+ "Installation Error: The current working directory contains spaces. Please move Applio to a folder without spaces in its path."
+ )
+ try:
+ now_dir.encode("ascii")
+ except UnicodeEncodeError:
+ raise InstallationError(
+ "Installation Error: The current working directory contains non-ASCII characters. Please move Applio to a folder with only ASCII characters in its path."
+ )
diff --git a/assets/presets/Default.json b/assets/presets/Default.json
new file mode 100644
index 0000000000000000000000000000000000000000..9f94448ca5fefd38a6b9761c6ca1e031c242259a
--- /dev/null
+++ b/assets/presets/Default.json
@@ -0,0 +1,7 @@
+{
+ "pitch": 0,
+ "filter_radius": 3,
+ "index_rate": 0.75,
+ "rms_mix_rate": 1,
+ "protect": 0.5
+}
\ No newline at end of file
diff --git a/assets/presets/Good for Anything.json b/assets/presets/Good for Anything.json
new file mode 100644
index 0000000000000000000000000000000000000000..8c6d878a0b8de2a5d808c84e0183cc5812b4c751
--- /dev/null
+++ b/assets/presets/Good for Anything.json
@@ -0,0 +1,7 @@
+{
+ "pitch": 0,
+ "filter_radius": 3,
+ "index_rate": 0.75,
+ "rms_mix_rate": 0.3,
+ "protect": 0.33
+}
\ No newline at end of file
diff --git a/assets/presets/Music.json b/assets/presets/Music.json
new file mode 100644
index 0000000000000000000000000000000000000000..6ac821bb48d00013df68be3df18a84145de644db
--- /dev/null
+++ b/assets/presets/Music.json
@@ -0,0 +1,7 @@
+{
+ "pitch": 0,
+ "filter_radius": 3,
+ "index_rate": 0.75,
+ "rms_mix_rate": 0.25,
+ "protect": 0.33
+}
\ No newline at end of file
diff --git a/assets/themes/Applio.py b/assets/themes/Applio.py
new file mode 100644
index 0000000000000000000000000000000000000000..e605ee11ce0a9a03e1bf6ed2e8e7e09dd8bb2c06
--- /dev/null
+++ b/assets/themes/Applio.py
@@ -0,0 +1,284 @@
+from __future__ import annotations
+
+from typing import Iterable
+import gradio as gr
+
+# gr.themes.builder()
+from gradio.themes.base import Base
+from gradio.themes.utils import colors, fonts, sizes
+import time
+
+
+class Applio(Base):
+ def __init__(
+ self,
+ *,
+ primary_hue: colors.Color | str = colors.neutral,
+ secondary_hue: colors.Color | str = colors.neutral,
+ neutral_hue: colors.Color | str = colors.neutral,
+ spacing_size: sizes.Size | str = sizes.spacing_md,
+ radius_size: sizes.Size | str = sizes.radius_md,
+ text_size: sizes.Size | str = sizes.text_lg,
+ font: fonts.Font | str | Iterable[fonts.Font | str] = (
+ "Syne V",
+ fonts.GoogleFont("Syne"),
+ "ui-sans-serif",
+ "system-ui",
+ ),
+ font_mono: fonts.Font | str | Iterable[fonts.Font | str] = (
+ "ui-monospace",
+ fonts.GoogleFont("Nunito Sans"),
+ ),
+ ):
+ super().__init__(
+ primary_hue=primary_hue,
+ secondary_hue=secondary_hue,
+ neutral_hue=neutral_hue,
+ spacing_size=spacing_size,
+ radius_size=radius_size,
+ text_size=text_size,
+ font=font,
+ font_mono=font_mono,
+ )
+ self.name = ("Applio",)
+ self.secondary_100 = ("#dbeafe",)
+ self.secondary_200 = ("#bfdbfe",)
+ self.secondary_300 = ("#93c5fd",)
+ self.secondary_400 = ("#60a5fa",)
+ self.secondary_50 = ("#eff6ff",)
+ self.secondary_500 = ("#3b82f6",)
+ self.secondary_600 = ("#2563eb",)
+ self.secondary_700 = ("#1d4ed8",)
+ self.secondary_800 = ("#1e40af",)
+ self.secondary_900 = ("#1e3a8a",)
+ self.secondary_950 = ("#1d3660",)
+
+ super().set(
+ # Blaise
+ background_fill_primary="#110F0F",
+ background_fill_primary_dark="#110F0F",
+ background_fill_secondary="#110F0F",
+ background_fill_secondary_dark="#110F0F",
+ block_background_fill="*neutral_800",
+ block_background_fill_dark="*neutral_800",
+ block_border_color="*border_color_primary",
+ block_border_color_dark="*border_color_primary",
+ block_border_width="1px",
+ block_border_width_dark="1px",
+ block_info_text_color="*body_text_color_subdued",
+ block_info_text_color_dark="*body_text_color_subdued",
+ block_info_text_size="*text_sm",
+ block_info_text_weight="400",
+ block_label_background_fill="*background_fill_primary",
+ block_label_background_fill_dark="*background_fill_secondary",
+ block_label_border_color="*border_color_primary",
+ block_label_border_color_dark="*border_color_primary",
+ block_label_border_width="1px",
+ block_label_border_width_dark="1px",
+ block_label_margin="0",
+ block_label_padding="*spacing_sm *spacing_lg",
+ block_label_radius="calc(*radius_lg - 1px) 0 calc(*radius_lg - 1px) 0",
+ block_label_right_radius="0 calc(*radius_lg - 1px) 0 calc(*radius_lg - 1px)",
+ block_label_shadow="*block_shadow",
+ block_label_text_color="*#110F0F",
+ block_label_text_color_dark="*#110F0F",
+ block_label_text_weight="400",
+ block_padding="*spacing_xl",
+ block_radius="*radius_md",
+ block_shadow="none",
+ block_shadow_dark="none",
+ block_title_background_fill="rgb(255,255,255)",
+ block_title_background_fill_dark="rgb(255,255,255)",
+ block_title_border_color="none",
+ block_title_border_color_dark="none",
+ block_title_border_width="0px",
+ block_title_padding="*block_label_padding",
+ block_title_radius="*block_label_radius",
+ block_title_text_color="#110F0F",
+ block_title_text_color_dark="#110F0F",
+ block_title_text_size="*text_md",
+ block_title_text_weight="600",
+ body_background_fill="#110F0F",
+ body_background_fill_dark="#110F0F",
+ body_text_color="white",
+ body_text_color_dark="white",
+ body_text_color_subdued="*neutral_400",
+ body_text_color_subdued_dark="*neutral_400",
+ body_text_size="*text_md",
+ body_text_weight="400",
+ border_color_accent="*neutral_600",
+ border_color_accent_dark="*neutral_600",
+ border_color_primary="*neutral_800",
+ border_color_primary_dark="*neutral_800",
+ button_border_width="*input_border_width",
+ button_border_width_dark="*input_border_width",
+ button_cancel_background_fill="*button_secondary_background_fill",
+ button_cancel_background_fill_dark="*button_secondary_background_fill",
+ button_cancel_background_fill_hover="*button_cancel_background_fill",
+ button_cancel_background_fill_hover_dark="*button_cancel_background_fill",
+ button_cancel_border_color="*button_secondary_border_color",
+ button_cancel_border_color_dark="*button_secondary_border_color",
+ button_cancel_border_color_hover="*button_cancel_border_color",
+ button_cancel_border_color_hover_dark="*button_cancel_border_color",
+ button_cancel_text_color="#110F0F",
+ button_cancel_text_color_dark="#110F0F",
+ button_cancel_text_color_hover="#110F0F",
+ button_cancel_text_color_hover_dark="#110F0F",
+ button_large_padding="*spacing_lg calc(2 * *spacing_lg)",
+ button_large_radius="*radius_lg",
+ button_large_text_size="*text_lg",
+ button_large_text_weight="600",
+ button_primary_background_fill="*primary_600",
+ button_primary_background_fill_dark="*primary_600",
+ button_primary_background_fill_hover="*primary_500",
+ button_primary_background_fill_hover_dark="*primary_500",
+ button_primary_border_color="*primary_500",
+ button_primary_border_color_dark="*primary_500",
+ button_primary_border_color_hover="*primary_400",
+ button_primary_border_color_hover_dark="*primary_400",
+ button_primary_text_color="white",
+ button_primary_text_color_dark="white",
+ button_primary_text_color_hover="#110F0F",
+ button_primary_text_color_hover_dark="#110F0F",
+ button_secondary_background_fill="transparent",
+ button_secondary_background_fill_dark="transparent",
+ button_secondary_background_fill_hover="*neutral_800",
+ button_secondary_background_fill_hover_dark="*neutral_800",
+ button_secondary_border_color="*neutral_700",
+ button_secondary_border_color_dark="*neutral_700",
+ button_secondary_border_color_hover="*neutral_600",
+ button_secondary_border_color_hover_dark="*neutral_600",
+ button_secondary_text_color="white",
+ button_secondary_text_color_dark="white",
+ button_secondary_text_color_hover="*button_secondary_text_color",
+ button_secondary_text_color_hover_dark="*button_secondary_text_color",
+ button_shadow="none",
+ button_shadow_active="*shadow_inset",
+ button_shadow_hover="none",
+ button_small_padding="*spacing_sm calc(2 * *spacing_sm)",
+ button_small_radius="*radius_lg",
+ button_small_text_size="*text_md",
+ button_small_text_weight="400",
+ button_transition="0.3s ease all",
+ checkbox_background_color="*neutral_700",
+ checkbox_background_color_dark="*neutral_700",
+ checkbox_background_color_focus="*checkbox_background_color",
+ checkbox_background_color_focus_dark="*checkbox_background_color",
+ checkbox_background_color_hover="*checkbox_background_color",
+ checkbox_background_color_hover_dark="*checkbox_background_color",
+ checkbox_background_color_selected="*secondary_600",
+ checkbox_background_color_selected_dark="*secondary_600",
+ checkbox_border_color="*neutral_700",
+ checkbox_border_color_dark="*neutral_700",
+ checkbox_border_color_focus="*secondary_500",
+ checkbox_border_color_focus_dark="*secondary_500",
+ checkbox_border_color_hover="*neutral_600",
+ checkbox_border_color_hover_dark="*neutral_600",
+ checkbox_border_color_selected="*secondary_600",
+ checkbox_border_color_selected_dark="*secondary_600",
+ checkbox_border_radius="*radius_sm",
+ checkbox_border_width="*input_border_width",
+ checkbox_border_width_dark="*input_border_width",
+ checkbox_check="url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e\")",
+ checkbox_label_background_fill="transparent",
+ checkbox_label_background_fill_dark="transparent",
+ checkbox_label_background_fill_hover="transparent",
+ checkbox_label_background_fill_hover_dark="transparent",
+ checkbox_label_background_fill_selected="transparent",
+ checkbox_label_background_fill_selected_dark="transparent",
+ checkbox_label_border_color="transparent",
+ checkbox_label_border_color_dark="transparent",
+ checkbox_label_border_color_hover="transparent",
+ checkbox_label_border_color_hover_dark="transparent",
+ checkbox_label_border_width="transparent",
+ checkbox_label_border_width_dark="transparent",
+ checkbox_label_gap="*spacing_lg",
+ checkbox_label_padding="*spacing_md calc(2 * *spacing_md)",
+ checkbox_label_shadow="none",
+ checkbox_label_text_color="*body_text_color",
+ checkbox_label_text_color_dark="*body_text_color",
+ checkbox_label_text_color_selected="*checkbox_label_text_color",
+ checkbox_label_text_color_selected_dark="*checkbox_label_text_color",
+ checkbox_label_text_size="*text_md",
+ checkbox_label_text_weight="400",
+ checkbox_shadow="*input_shadow",
+ color_accent="*primary_500",
+ color_accent_soft="*primary_50",
+ color_accent_soft_dark="*neutral_700",
+ container_radius="*radius_xl",
+ embed_radius="*radius_lg",
+ error_background_fill="*background_fill_primary",
+ error_background_fill_dark="*background_fill_primary",
+ error_border_color="*border_color_primary",
+ error_border_color_dark="*border_color_primary",
+ error_border_width="1px",
+ error_border_width_dark="1px",
+ error_text_color="#ef4444",
+ error_text_color_dark="#ef4444",
+ form_gap_width="0px",
+ input_background_fill="*neutral_900",
+ input_background_fill_dark="*neutral_900",
+ input_background_fill_focus="*secondary_600",
+ input_background_fill_focus_dark="*secondary_600",
+ input_background_fill_hover="*input_background_fill",
+ input_background_fill_hover_dark="*input_background_fill",
+ input_border_color="*neutral_700",
+ input_border_color_dark="*neutral_700",
+ input_border_color_focus="*secondary_600",
+ input_border_color_focus_dark="*primary_600",
+ input_border_color_hover="*input_border_color",
+ input_border_color_hover_dark="*input_border_color",
+ input_border_width="1px",
+ input_border_width_dark="1px",
+ input_padding="*spacing_xl",
+ input_placeholder_color="*neutral_500",
+ input_placeholder_color_dark="*neutral_500",
+ input_radius="*radius_lg",
+ input_shadow="none",
+ input_shadow_dark="none",
+ input_shadow_focus="*input_shadow",
+ input_shadow_focus_dark="*input_shadow",
+ input_text_size="*text_md",
+ input_text_weight="400",
+ layout_gap="*spacing_xxl",
+ link_text_color="*secondary_500",
+ link_text_color_active="*secondary_500",
+ link_text_color_active_dark="*secondary_500",
+ link_text_color_dark="*secondary_500",
+ link_text_color_hover="*secondary_400",
+ link_text_color_hover_dark="*secondary_400",
+ link_text_color_visited="*secondary_600",
+ link_text_color_visited_dark="*secondary_600",
+ loader_color="*color_accent",
+ loader_color_dark="*color_accent",
+ panel_background_fill="*background_fill_secondary",
+ panel_background_fill_dark="*background_fill_secondary",
+ panel_border_color="*border_color_primary",
+ panel_border_color_dark="*border_color_primary",
+ panel_border_width="1px",
+ panel_border_width_dark="1px",
+ prose_header_text_weight="600",
+ prose_text_size="*text_md",
+ prose_text_weight="400",
+ radio_circle="url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e\")",
+ section_header_text_size="*text_md",
+ section_header_text_weight="400",
+ shadow_drop="rgba(0,0,0,0.05) 0px 1px 2px 0px",
+ shadow_drop_lg="0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)",
+ shadow_inset="rgba(0,0,0,0.05) 0px 2px 4px 0px inset",
+ shadow_spread="3px",
+ shadow_spread_dark="1px",
+ slider_color="#9E9E9E",
+ slider_color_dark="#9E9E9E",
+ stat_background_fill="*primary_500",
+ stat_background_fill_dark="*primary_500",
+ table_border_color="*neutral_700",
+ table_border_color_dark="*neutral_700",
+ table_even_background_fill="*neutral_950",
+ table_even_background_fill_dark="*neutral_950",
+ table_odd_background_fill="*neutral_900",
+ table_odd_background_fill_dark="*neutral_900",
+ table_radius="*radius_lg",
+ table_row_focus="*color_accent_soft",
+ table_row_focus_dark="*color_accent_soft",
+ )
diff --git a/assets/themes/loadThemes.py b/assets/themes/loadThemes.py
new file mode 100644
index 0000000000000000000000000000000000000000..2530a5faeebd6e2bded5a0c7d1fce5185f4d8570
--- /dev/null
+++ b/assets/themes/loadThemes.py
@@ -0,0 +1,115 @@
+import json
+import os
+import importlib
+import gradio as gr
+import sys
+
+now_dir = os.getcwd()
+folder = os.path.join(
+ os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))),
+ "assets",
+ "themes",
+)
+config_file = os.path.join(now_dir, "assets", "config.json")
+
+sys.path.append(folder)
+
+
+def read_json_file(filename):
+ """Helper function to read a JSON file and return its contents."""
+ with open(filename, "r", encoding="utf8") as json_file:
+ return json.load(json_file)
+
+
+def get_class(filename):
+ """Retrieve the name of the first class found in the specified Python file."""
+ with open(filename, "r", encoding="utf8") as file:
+ for line in file:
+ if "class " in line:
+ class_name = line.split("class ")[1].split(":")[0].split("(")[0].strip()
+ return class_name
+ return None
+
+
+def get_theme_list():
+ """Compile a list of available themes from Python files and a JSON file."""
+ themes_from_files = [
+ os.path.splitext(name)[0]
+ for root, _, files in os.walk(folder)
+ for name in files
+ if name.endswith(".py") and root == folder
+ ]
+
+ json_file_path = os.path.join(folder, "theme_list.json")
+ themes_from_url = []
+
+ try:
+ themes_from_url = [item["id"] for item in read_json_file(json_file_path)]
+ except FileNotFoundError:
+ print("theme_list.json not found, proceeding with available files only.")
+
+ return list(set(themes_from_files + themes_from_url))
+
+
+def select_theme(name):
+ """Select a theme by its name, updating the configuration file accordingly."""
+ selected_file = f"{name}.py"
+ full_path = os.path.join(folder, selected_file)
+
+ config_data = read_json_file(config_file)
+
+ if not os.path.exists(full_path):
+ config_data["theme"]["file"] = None
+ config_data["theme"]["class"] = name
+ else:
+ class_found = get_class(full_path)
+ if class_found:
+ config_data["theme"]["file"] = selected_file
+ config_data["theme"]["class"] = class_found
+ else:
+ print(f"Theme class not found in {selected_file}.")
+ return
+
+ with open(config_file, "w", encoding="utf8") as json_file:
+ json.dump(config_data, json_file, indent=2)
+
+ message = f"Theme {name} successfully selected. Restart the application."
+ print(message)
+ gr.Info(message)
+
+
+def load_theme():
+ """Load the selected theme based on the configuration file."""
+ try:
+ config_data = read_json_file(config_file)
+ selected_file = config_data["theme"]["file"]
+ class_name = config_data["theme"]["class"]
+
+ if class_name:
+ if selected_file:
+ module = importlib.import_module(selected_file[:-3])
+ obtained_class = getattr(module, class_name)
+ return obtained_class()
+ else:
+ return class_name
+ else:
+ print("No valid theme class found.")
+ return None
+
+ except Exception as error:
+ print(f"An error occurred while loading the theme: {error}")
+ return None
+
+
+def read_current_theme():
+ """Read the current theme class from the configuration file."""
+ try:
+ config_data = read_json_file(config_file)
+ selected_file = config_data["theme"]["file"]
+ class_name = config_data["theme"]["class"]
+
+ return class_name if class_name else "ParityError/Interstellar"
+
+ except Exception as error:
+ print(f"An error occurred loading the theme: {error}")
+ return "ParityError/Interstellar"
diff --git a/assets/themes/theme_list.json b/assets/themes/theme_list.json
new file mode 100644
index 0000000000000000000000000000000000000000..8efc6f9b49e558892175e8eac9d1131a312cd651
--- /dev/null
+++ b/assets/themes/theme_list.json
@@ -0,0 +1,81 @@
+[
+ {"id": "freddyaboulton/dracula_revamped"},
+ {"id": "freddyaboulton/bad-theme-space"},
+ {"id": "gradio/dracula_revamped"},
+ {"id": "abidlabs/dracula_revamped"},
+ {"id": "gradio/dracula_test"},
+ {"id": "abidlabs/dracula_test"},
+ {"id": "gradio/seafoam"},
+ {"id": "gradio/glass"},
+ {"id": "gradio/monochrome"},
+ {"id": "gradio/soft"},
+ {"id": "gradio/default"},
+ {"id": "gradio/base"},
+ {"id": "abidlabs/pakistan"},
+ {"id": "dawood/microsoft_windows"},
+ {"id": "ysharma/steampunk"},
+ {"id": "ysharma/huggingface"},
+ {"id": "gstaff/xkcd"},
+ {"id": "JohnSmith9982/small_and_pretty"},
+ {"id": "abidlabs/Lime"},
+ {"id": "freddyaboulton/this-theme-does-not-exist-2"},
+ {"id": "aliabid94/new-theme"},
+ {"id": "aliabid94/test2"},
+ {"id": "aliabid94/test3"},
+ {"id": "aliabid94/test4"},
+ {"id": "abidlabs/banana"},
+ {"id": "freddyaboulton/test-blue"},
+ {"id": "gstaff/sketch"},
+ {"id": "gstaff/whiteboard"},
+ {"id": "ysharma/llamas"},
+ {"id": "abidlabs/font-test"},
+ {"id": "YenLai/Superhuman"},
+ {"id": "bethecloud/storj_theme"},
+ {"id": "sudeepshouche/minimalist"},
+ {"id": "knotdgaf/gradiotest"},
+ {"id": "ParityError/Interstellar"},
+ {"id": "ParityError/Anime"},
+ {"id": "Ajaxon6255/Emerald_Isle"},
+ {"id": "ParityError/LimeFace"},
+ {"id": "finlaymacklon/smooth_slate"},
+ {"id": "finlaymacklon/boxy_violet"},
+ {"id": "derekzen/stardust"},
+ {"id": "EveryPizza/Cartoony-Gradio-Theme"},
+ {"id": "Ifeanyi/Cyanister"},
+ {"id": "Tshackelton/IBMPlex-DenseReadable"},
+ {"id": "snehilsanyal/scikit-learn"},
+ {"id": "Himhimhim/xkcd"},
+ {"id": "shivi/calm_seafoam"},
+ {"id": "nota-ai/theme"},
+ {"id": "rawrsor1/Everforest"},
+ {"id": "SebastianBravo/simci_css"},
+ {"id": "rottenlittlecreature/Moon_Goblin"},
+ {"id": "abidlabs/test-yellow"},
+ {"id": "abidlabs/test-yellow3"},
+ {"id": "idspicQstitho/dracula_revamped"},
+ {"id": "kfahn/AnimalPose"},
+ {"id": "HaleyCH/HaleyCH_Theme"},
+ {"id": "simulKitke/dracula_test"},
+ {"id": "braintacles/CrimsonNight"},
+ {"id": "wentaohe/whiteboardv2"},
+ {"id": "reilnuud/polite"},
+ {"id": "remilia/Ghostly"},
+ {"id": "Franklisi/darkmode"},
+ {"id": "coding-alt/soft"},
+ {"id": "xiaobaiyuan/theme_land"},
+ {"id": "step-3-profit/Midnight-Deep"},
+ {"id": "xiaobaiyuan/theme_demo"},
+ {"id": "Taithrah/Minimal"},
+ {"id": "Insuz/SimpleIndigo"},
+ {"id": "zkunn/Alipay_Gradio_theme"},
+ {"id": "Insuz/Mocha"},
+ {"id": "xiaobaiyuan/theme_brief"},
+ {"id": "Ama434/434-base-Barlow"},
+ {"id": "Ama434/def_barlow"},
+ {"id": "Ama434/neutral-barlow"},
+ {"id": "dawood/dracula_test"},
+ {"id": "nuttea/Softblue"},
+ {"id": "BlueDancer/Alien_Diffusion"},
+ {"id": "naughtondale/monochrome"},
+ {"id": "Dagfinn1962/standard"}
+]
\ No newline at end of file
diff --git a/assets/version_checker.py b/assets/version_checker.py
new file mode 100644
index 0000000000000000000000000000000000000000..1a364f9604d52d5aa464e8629b2cfda7a28222ca
--- /dev/null
+++ b/assets/version_checker.py
@@ -0,0 +1,57 @@
+import os
+import sys
+import json
+import requests
+
+now_dir = os.getcwd()
+sys.path.append(now_dir)
+
+config_file = os.path.join(now_dir, "assets", "config.json")
+
+
+def load_local_version():
+ try:
+ with open(config_file, "r", encoding="utf8") as file:
+ config = json.load(file)
+ return config["version"]
+ except (FileNotFoundError, json.JSONDecodeError) as error:
+ print(f"Error loading local version: {error}")
+ return None
+
+
+def obtain_tag_name():
+ url = "https://api.github.com/repos/IAHispano/Applio/releases/latest"
+ session = requests.Session()
+
+ try:
+ response = session.get(url)
+ response.raise_for_status()
+
+ data = response.json()
+ return data.get("tag_name")
+
+ except requests.exceptions.RequestException as error:
+ print(f"Error obtaining online version: {error}")
+ return None
+
+
+def compare_version():
+ local_version = load_local_version()
+ if not local_version:
+ return "Local version could not be determined."
+
+ online_version = obtain_tag_name()
+ if not online_version:
+ return "Online version could not be determined. Make sure you have an internet connection."
+
+ elements_online_version = list(map(int, online_version.split(".")))
+ elements_local_version = list(map(int, local_version.split(".")))
+
+ for online, local in zip(elements_online_version, elements_local_version):
+ if local < online:
+ return f"Your local version {local_version} is older than the latest version {online_version}."
+
+ if len(elements_online_version) > len(elements_local_version):
+ return f"Your local version {local_version} is older than the latest version {online_version}."
+
+ return f"Your local version {local_version} is the latest version."
diff --git a/assets/zluda/README.md b/assets/zluda/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..fb68abaf2829b871f8a320d124a25dcfa1c044db
--- /dev/null
+++ b/assets/zluda/README.md
@@ -0,0 +1,70 @@
+
+## Installation and Setup Instructions
+
+Zluda is a CUDA emulator that supports a select number of modern AMD GPUs. The following guide is for Windows installation of Zluda.
+
+### 1. Install VC++ Runtime
+
+Download and install the VC++ Runtime from [this link](https://aka.ms/vs/17/release/vc_redist.x64.exe).
+
+
+### 2. Install HIP SDK
+
+Read the [System Requirements](https://rocm.docs.amd.com/projects/install-on-windows/en/develop/reference/system-requirements.html)
+
+Check the *"Windows-supported GPUs"* section to determine the correct installation steps:
+
+2.1 If your GPU has a green checkbox in the HIP SDK column:
+
+- Install either v6.1.2 or v5.7.1 HIP SDK from [AMD ROCm Hub](https://www.amd.com/en/developer/resources/rocm-hub/hip-sdk.html)
+
+2.2 If your GPU is RX 6600, 6600XT, 6650XT, 6700, 6700XT, 6750XT:
+- Install v5.7.1 HIP SDK from [AMD ROCm Hub](https://www.amd.com/en/developer/resources/rocm-hub/hip-sdk.html)
+- For 6700, 6700XT, 6750XT, download [gfx1031 archive](https://github.com/brknsoul/ROCmLibs/raw/main/Optimised_ROCmLibs_gfx1031.7z)
+- For 6600, 6600XT, 6650XT, download [gfx1032 archive](https://github.com/brknsoul/ROCmLibs/raw/main/Optimised_ROCmLibs_gfx1032.7z)
+**Steps:**
+a. Rename `C:\Program Files\AMD\ROCm\5.7\bin\rocblas\library` to `library.old`
+b. Create a new folder named `library`
+c. Unzip the content of the archive into that folder
+
+2.3 For all other AMD GPUs: find gfxNNNN value for your GPU by googling "techpowerup your_gpu" (listed under "Shader ISA" on the page).
+
+2.3.1 For `gfx803, gfx900, gfx906, gfx1010, gfx1011, gfx1012, gfx1030, gfx1100, gfx1101, gfx1102` GPUs:
+- Install v5.7.1 HIP SDK from [AMD ROCm Hub](https://www.amd.com/en/developer/resources/rocm-hub/hip-sdk.html)
+- Download [this archive](https://github.com/brknsoul/ROCmLibs/raw/main/ROCmLibs.7z)
+ **Steps:**
+ a. Rename `C:\Program Files\AMD\ROCm\5.7\bin\rocblas\library` to `library.old`
+ b. Unzip the content of the archive into `C:\Program Files\AMD\ROCm\5.7\bin\rocblas\`
+
+2.3.2 Other GPUs
+- Visit [this repository with a collection of tensile libraries](https://github.com/likelovewant/ROCmLibs-for-gfx1103-AMD780M-APU)
+- Follow the description there.
+
+### 3. Installing Applio
+3.1 Install [Python 3.10.11] https://www.python.org/ftp/python/3.10.11/python-3.10.11-amd64.exe
+ - check "Add Python to Path"
+3.2 Download Applio v3.2.5 or higher source code zip Applio's release page, unzip to the desired folder.
+3.3 Edit `run-install.bat` and update the Torch URL from `cu121` to `cu118`
+ ```pip install torch==2.3.1 torchvision torchaudio --upgrade --index-url https://download.pytorch.org/whl/cu121```
+3.4 Execute `run-install.bat` to install the required python libraries.
+3.5. If installation completes without errors proceed to the next step
+
+### 4. Download Zluda and Patch Torch Libraries
+4.1 move all .bat files from `assets\zluda`to root Applio folder
+4.2 For HIP SDK 5.7:
+- Run `patch_zluda_hip57.bat`.
+- Add `C:\Program Files\AMD\ROCm\5.7\bin` to your system's Path environment variable.
+
+4.3 For HIP SDK 6.1:**
+- Run `patch_zluda_hip61.bat`.
+- Add `C:\Program Files\AMD\ROCm\6.1\bin` to your system's Path environment variable.
+
+### 5. Starting Applio
+
+It is assumed your primary AMD GPU has index 0. If by some reason your iGPU is listed first under 'Display Adapters' in Device manager, edit the `run-applio-amd.bat` file and change the value from "0" to "1".
+
+Execute `run-applio-amd.bat` to start Applio.
+
+### 6. Initial Compilation
+
+Any time Zluda emulator meets a previously unseen computational task it compiles the kernel code to support it. During this time there's no output and Applio appears to be frozen. The compilation time takes 15..20 minutes.
diff --git a/assets/zluda/patch-zluda-hip57.bat b/assets/zluda/patch-zluda-hip57.bat
new file mode 100644
index 0000000000000000000000000000000000000000..21490a605b5e0d4448f7785f986a8a0a424b0171
--- /dev/null
+++ b/assets/zluda/patch-zluda-hip57.bat
@@ -0,0 +1,7 @@
+rmdir /S /q zluda
+curl -s -L https://github.com/lshqqytiger/ZLUDA/releases/download/rel.c0804ca624963aab420cb418412b1c7fbae3454b/ZLUDA-windows-rocm5-amd64.zip > zluda.zip
+tar -xf zluda.zip
+del zluda.zip
+copy zluda\cublas.dll env\Lib\site-packages\torch\lib\cublas64_11.dll /y
+copy zluda\cusparse.dll env\Lib\site-packages\torch\lib\cusparse64_11.dll /y
+copy zluda\nvrtc.dll env\Lib\site-packages\torch\lib\nvrtc64_112_0.dll /y
diff --git a/assets/zluda/patch-zluda-hip61.bat b/assets/zluda/patch-zluda-hip61.bat
new file mode 100644
index 0000000000000000000000000000000000000000..d5ab84815e852e8a13ef02ff867af8f4d0a3c12c
--- /dev/null
+++ b/assets/zluda/patch-zluda-hip61.bat
@@ -0,0 +1,7 @@
+rmdir /S /q zluda
+curl -s -L https://github.com/lshqqytiger/ZLUDA/releases/download/rel.c0804ca624963aab420cb418412b1c7fbae3454b/ZLUDA-windows-rocm6-amd64.zip > zluda.zip
+tar -xf zluda.zip
+del zluda.zip
+copy zluda\cublas.dll env\Lib\site-packages\torch\lib\cublas64_11.dll /y
+copy zluda\cusparse.dll env\Lib\site-packages\torch\lib\cusparse64_11.dll /y
+copy zluda\nvrtc.dll env\Lib\site-packages\torch\lib\nvrtc64_112_0.dll /y
diff --git a/assets/zluda/run-applio-amd.bat b/assets/zluda/run-applio-amd.bat
new file mode 100644
index 0000000000000000000000000000000000000000..ed02d31534c72d4d0e8c8765da1b5367c27f8dc0
--- /dev/null
+++ b/assets/zluda/run-applio-amd.bat
@@ -0,0 +1,15 @@
+@echo off
+setlocal
+title Applio
+
+if not exist env (
+ echo Please run 'run-install.bat' first to set up the environment.
+ pause
+ exit /b 1
+)
+
+set HIP_VISIBLE_DEVICES="0"
+set ZLUDA_COMGR_LOG_LEVEL=1
+zluda\zluda.exe -- env\python.exe app.py --open
+echo.
+pause
\ No newline at end of file
diff --git a/core/__init__.py b/core/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..1f9c0fc5567582543cd52372763c3a12fdb940fe
--- /dev/null
+++ b/core/__init__.py
@@ -0,0 +1,2555 @@
+import os
+import sys
+import json
+import argparse
+import subprocess
+from functools import lru_cache
+from distutils.util import strtobool
+
+now_dir = os.getcwd()
+sys.path.append(now_dir)
+
+current_script_directory = os.path.dirname(os.path.realpath(__file__))
+logs_path = os.path.join(current_script_directory, "logs")
+
+from rvc.lib.tools.prerequisites_download import prequisites_download_pipeline
+from rvc.train.process.model_blender import model_blender
+from rvc.train.process.model_information import model_information
+from rvc.train.process.extract_small_model import extract_small_model
+from rvc.lib.tools.analyzer import analyze_audio
+from rvc.lib.tools.launch_tensorboard import launch_tensorboard_pipeline
+from rvc.lib.tools.model_download import model_download_pipeline
+
+python = sys.executable
+
+
+# Get TTS Voices -> https://speech.platform.bing.com/consumer/speech/synthesize/readaloud/voices/list?trustedclienttoken=6A5AA1D4EAFF4E9FB37E23D68491D6F4
+@lru_cache(maxsize=1) # Cache only one result since the file is static
+def load_voices_data():
+ with open(
+ os.path.join("rvc", "lib", "tools", "tts_voices.json"), "r", encoding="utf-8"
+ ) as file:
+ return json.load(file)
+
+
+voices_data = load_voices_data()
+locales = list({voice["Locale"] for voice in voices_data})
+
+
+@lru_cache(maxsize=None)
+def import_voice_converter():
+ from rvc.infer.infer import VoiceConverter
+
+ return VoiceConverter()
+
+
+@lru_cache(maxsize=1)
+def get_config():
+ from rvc.configs.config import Config
+
+ return Config()
+
+
+# Infer
+def run_infer_script(
+ pitch: int,
+ filter_radius: int,
+ index_rate: float,
+ volume_envelope: int,
+ protect: float,
+ hop_length: int,
+ f0_method: str,
+ input_path: str,
+ output_path: str,
+ pth_path: str,
+ index_path: str,
+ split_audio: bool,
+ f0_autotune: bool,
+ f0_autotune_strength: float,
+ clean_audio: bool,
+ clean_strength: float,
+ export_format: str,
+ upscale_audio: bool,
+ f0_file: str,
+ embedder_model: str,
+ embedder_model_custom: str = None,
+ formant_shifting: bool = False,
+ formant_qfrency: float = 1.0,
+ formant_timbre: float = 1.0,
+ post_process: bool = False,
+ reverb: bool = False,
+ pitch_shift: bool = False,
+ limiter: bool = False,
+ gain: bool = False,
+ distortion: bool = False,
+ chorus: bool = False,
+ bitcrush: bool = False,
+ clipping: bool = False,
+ compressor: bool = False,
+ delay: bool = False,
+ reverb_room_size: float = 0.5,
+ reverb_damping: float = 0.5,
+ reverb_wet_gain: float = 0.5,
+ reverb_dry_gain: float = 0.5,
+ reverb_width: float = 0.5,
+ reverb_freeze_mode: float = 0.5,
+ pitch_shift_semitones: float = 0.0,
+ limiter_threshold: float = -6,
+ limiter_release_time: float = 0.01,
+ gain_db: float = 0.0,
+ distortion_gain: float = 25,
+ chorus_rate: float = 1.0,
+ chorus_depth: float = 0.25,
+ chorus_center_delay: float = 7,
+ chorus_feedback: float = 0.0,
+ chorus_mix: float = 0.5,
+ bitcrush_bit_depth: int = 8,
+ clipping_threshold: float = -6,
+ compressor_threshold: float = 0,
+ compressor_ratio: float = 1,
+ compressor_attack: float = 1.0,
+ compressor_release: float = 100,
+ delay_seconds: float = 0.5,
+ delay_feedback: float = 0.0,
+ delay_mix: float = 0.5,
+ sid: int = 0,
+):
+ kwargs = {
+ "audio_input_path": input_path,
+ "audio_output_path": output_path,
+ "model_path": pth_path,
+ "index_path": index_path,
+ "pitch": pitch,
+ "filter_radius": filter_radius,
+ "index_rate": index_rate,
+ "volume_envelope": volume_envelope,
+ "protect": protect,
+ "hop_length": hop_length,
+ "f0_method": f0_method,
+ "pth_path": pth_path,
+ "index_path": index_path,
+ "split_audio": split_audio,
+ "f0_autotune": f0_autotune,
+ "f0_autotune_strength": f0_autotune_strength,
+ "clean_audio": clean_audio,
+ "clean_strength": clean_strength,
+ "export_format": export_format,
+ "upscale_audio": upscale_audio,
+ "f0_file": f0_file,
+ "embedder_model": embedder_model,
+ "embedder_model_custom": embedder_model_custom,
+ "post_process": post_process,
+ "formant_shifting": formant_shifting,
+ "formant_qfrency": formant_qfrency,
+ "formant_timbre": formant_timbre,
+ "reverb": reverb,
+ "pitch_shift": pitch_shift,
+ "limiter": limiter,
+ "gain": gain,
+ "distortion": distortion,
+ "chorus": chorus,
+ "bitcrush": bitcrush,
+ "clipping": clipping,
+ "compressor": compressor,
+ "delay": delay,
+ "reverb_room_size": reverb_room_size,
+ "reverb_damping": reverb_damping,
+ "reverb_wet_level": reverb_wet_gain,
+ "reverb_dry_level": reverb_dry_gain,
+ "reverb_width": reverb_width,
+ "reverb_freeze_mode": reverb_freeze_mode,
+ "pitch_shift_semitones": pitch_shift_semitones,
+ "limiter_threshold": limiter_threshold,
+ "limiter_release": limiter_release_time,
+ "gain_db": gain_db,
+ "distortion_gain": distortion_gain,
+ "chorus_rate": chorus_rate,
+ "chorus_depth": chorus_depth,
+ "chorus_delay": chorus_center_delay,
+ "chorus_feedback": chorus_feedback,
+ "chorus_mix": chorus_mix,
+ "bitcrush_bit_depth": bitcrush_bit_depth,
+ "clipping_threshold": clipping_threshold,
+ "compressor_threshold": compressor_threshold,
+ "compressor_ratio": compressor_ratio,
+ "compressor_attack": compressor_attack,
+ "compressor_release": compressor_release,
+ "delay_seconds": delay_seconds,
+ "delay_feedback": delay_feedback,
+ "delay_mix": delay_mix,
+ "sid": sid,
+ }
+ infer_pipeline = import_voice_converter()
+ infer_pipeline.convert_audio(
+ **kwargs,
+ )
+ return f"File {input_path} inferred successfully.", output_path.replace(
+ ".wav", f".{export_format.lower()}"
+ )
+
+
+# Batch infer
+def run_batch_infer_script(
+ pitch: int,
+ filter_radius: int,
+ index_rate: float,
+ volume_envelope: int,
+ protect: float,
+ hop_length: int,
+ f0_method: str,
+ input_folder: str,
+ output_folder: str,
+ pth_path: str,
+ index_path: str,
+ split_audio: bool,
+ f0_autotune: bool,
+ f0_autotune_strength: float,
+ clean_audio: bool,
+ clean_strength: float,
+ export_format: str,
+ upscale_audio: bool,
+ f0_file: str,
+ embedder_model: str,
+ embedder_model_custom: str = None,
+ formant_shifting: bool = False,
+ formant_qfrency: float = 1.0,
+ formant_timbre: float = 1.0,
+ post_process: bool = False,
+ reverb: bool = False,
+ pitch_shift: bool = False,
+ limiter: bool = False,
+ gain: bool = False,
+ distortion: bool = False,
+ chorus: bool = False,
+ bitcrush: bool = False,
+ clipping: bool = False,
+ compressor: bool = False,
+ delay: bool = False,
+ reverb_room_size: float = 0.5,
+ reverb_damping: float = 0.5,
+ reverb_wet_gain: float = 0.5,
+ reverb_dry_gain: float = 0.5,
+ reverb_width: float = 0.5,
+ reverb_freeze_mode: float = 0.5,
+ pitch_shift_semitones: float = 0.0,
+ limiter_threshold: float = -6,
+ limiter_release_time: float = 0.01,
+ gain_db: float = 0.0,
+ distortion_gain: float = 25,
+ chorus_rate: float = 1.0,
+ chorus_depth: float = 0.25,
+ chorus_center_delay: float = 7,
+ chorus_feedback: float = 0.0,
+ chorus_mix: float = 0.5,
+ bitcrush_bit_depth: int = 8,
+ clipping_threshold: float = -6,
+ compressor_threshold: float = 0,
+ compressor_ratio: float = 1,
+ compressor_attack: float = 1.0,
+ compressor_release: float = 100,
+ delay_seconds: float = 0.5,
+ delay_feedback: float = 0.0,
+ delay_mix: float = 0.5,
+ sid: int = 0,
+):
+ kwargs = {
+ "audio_input_paths": input_folder,
+ "audio_output_path": output_folder,
+ "model_path": pth_path,
+ "index_path": index_path,
+ "pitch": pitch,
+ "filter_radius": filter_radius,
+ "index_rate": index_rate,
+ "volume_envelope": volume_envelope,
+ "protect": protect,
+ "hop_length": hop_length,
+ "f0_method": f0_method,
+ "pth_path": pth_path,
+ "index_path": index_path,
+ "split_audio": split_audio,
+ "f0_autotune": f0_autotune,
+ "f0_autotune_strength": f0_autotune_strength,
+ "clean_audio": clean_audio,
+ "clean_strength": clean_strength,
+ "export_format": export_format,
+ "upscale_audio": upscale_audio,
+ "f0_file": f0_file,
+ "embedder_model": embedder_model,
+ "embedder_model_custom": embedder_model_custom,
+ "post_process": post_process,
+ "formant_shifting": formant_shifting,
+ "formant_qfrency": formant_qfrency,
+ "formant_timbre": formant_timbre,
+ "reverb": reverb,
+ "pitch_shift": pitch_shift,
+ "limiter": limiter,
+ "gain": gain,
+ "distortion": distortion,
+ "chorus": chorus,
+ "bitcrush": bitcrush,
+ "clipping": clipping,
+ "compressor": compressor,
+ "delay": delay,
+ "reverb_room_size": reverb_room_size,
+ "reverb_damping": reverb_damping,
+ "reverb_wet_level": reverb_wet_gain,
+ "reverb_dry_level": reverb_dry_gain,
+ "reverb_width": reverb_width,
+ "reverb_freeze_mode": reverb_freeze_mode,
+ "pitch_shift_semitones": pitch_shift_semitones,
+ "limiter_threshold": limiter_threshold,
+ "limiter_release": limiter_release_time,
+ "gain_db": gain_db,
+ "distortion_gain": distortion_gain,
+ "chorus_rate": chorus_rate,
+ "chorus_depth": chorus_depth,
+ "chorus_delay": chorus_center_delay,
+ "chorus_feedback": chorus_feedback,
+ "chorus_mix": chorus_mix,
+ "bitcrush_bit_depth": bitcrush_bit_depth,
+ "clipping_threshold": clipping_threshold,
+ "compressor_threshold": compressor_threshold,
+ "compressor_ratio": compressor_ratio,
+ "compressor_attack": compressor_attack,
+ "compressor_release": compressor_release,
+ "delay_seconds": delay_seconds,
+ "delay_feedback": delay_feedback,
+ "delay_mix": delay_mix,
+ "sid": sid,
+ }
+ infer_pipeline = import_voice_converter()
+ infer_pipeline.convert_audio_batch(
+ **kwargs,
+ )
+
+ return f"Files from {input_folder} inferred successfully."
+
+
+# TTS
+def run_tts_script(
+ tts_file: str,
+ tts_text: str,
+ tts_voice: str,
+ tts_rate: int,
+ pitch: int,
+ filter_radius: int,
+ index_rate: float,
+ volume_envelope: int,
+ protect: float,
+ hop_length: int,
+ f0_method: str,
+ output_tts_path: str,
+ output_rvc_path: str,
+ pth_path: str,
+ index_path: str,
+ split_audio: bool,
+ f0_autotune: bool,
+ f0_autotune_strength: float,
+ clean_audio: bool,
+ clean_strength: float,
+ export_format: str,
+ upscale_audio: bool,
+ f0_file: str,
+ embedder_model: str,
+ embedder_model_custom: str = None,
+ sid: int = 0,
+):
+
+ tts_script_path = os.path.join("rvc", "lib", "tools", "tts.py")
+
+ if os.path.exists(output_tts_path):
+ os.remove(output_tts_path)
+
+ command_tts = [
+ *map(
+ str,
+ [
+ python,
+ tts_script_path,
+ tts_file,
+ tts_text,
+ tts_voice,
+ tts_rate,
+ output_tts_path,
+ ],
+ ),
+ ]
+ subprocess.run(command_tts)
+ infer_pipeline = import_voice_converter()
+ infer_pipeline.convert_audio(
+ pitch=pitch,
+ filter_radius=filter_radius,
+ index_rate=index_rate,
+ volume_envelope=volume_envelope,
+ protect=protect,
+ hop_length=hop_length,
+ f0_method=f0_method,
+ audio_input_path=output_tts_path,
+ audio_output_path=output_rvc_path,
+ model_path=pth_path,
+ index_path=index_path,
+ split_audio=split_audio,
+ f0_autotune=f0_autotune,
+ f0_autotune_strength=f0_autotune_strength,
+ clean_audio=clean_audio,
+ clean_strength=clean_strength,
+ export_format=export_format,
+ upscale_audio=upscale_audio,
+ f0_file=f0_file,
+ embedder_model=embedder_model,
+ embedder_model_custom=embedder_model_custom,
+ sid=sid,
+ formant_shifting=None,
+ formant_qfrency=None,
+ formant_timbre=None,
+ post_process=None,
+ reverb=None,
+ pitch_shift=None,
+ limiter=None,
+ gain=None,
+ distortion=None,
+ chorus=None,
+ bitcrush=None,
+ clipping=None,
+ compressor=None,
+ delay=None,
+ sliders=None,
+ )
+
+ return f"Text {tts_text} synthesized successfully.", output_rvc_path.replace(
+ ".wav", f".{export_format.lower()}"
+ )
+
+
+# Preprocess
+def run_preprocess_script(
+ model_name: str,
+ dataset_path: str,
+ sample_rate: int,
+ cpu_cores: int,
+ cut_preprocess: bool,
+ process_effects: bool,
+ noise_reduction: bool,
+ clean_strength: float,
+):
+ config = get_config()
+ per = 3.0 if config.is_half else 3.7
+ preprocess_script_path = os.path.join("rvc", "train", "preprocess", "preprocess.py")
+ command = [
+ python,
+ preprocess_script_path,
+ *map(
+ str,
+ [
+ os.path.join(logs_path, model_name),
+ dataset_path,
+ sample_rate,
+ per,
+ cpu_cores,
+ cut_preprocess,
+ process_effects,
+ noise_reduction,
+ clean_strength,
+ ],
+ ),
+ ]
+ subprocess.run(command)
+ return f"Model {model_name} preprocessed successfully."
+
+
+# Extract
+def run_extract_script(
+ model_name: str,
+ rvc_version: str,
+ f0_method: str,
+ hop_length: int,
+ cpu_cores: int,
+ gpu: int,
+ sample_rate: int,
+ embedder_model: str,
+ embedder_model_custom: str = None,
+):
+
+ model_path = os.path.join(logs_path, model_name)
+ extract = os.path.join("rvc", "train", "extract", "extract.py")
+
+ command_1 = [
+ python,
+ extract,
+ *map(
+ str,
+ [
+ model_path,
+ f0_method,
+ hop_length,
+ cpu_cores,
+ gpu,
+ rvc_version,
+ sample_rate,
+ embedder_model,
+ embedder_model_custom,
+ ],
+ ),
+ ]
+
+ subprocess.run(command_1)
+
+ return f"Model {model_name} extracted successfully."
+
+
+# Train
+def run_train_script(
+ model_name: str,
+ rvc_version: str,
+ save_every_epoch: int,
+ save_only_latest: bool,
+ save_every_weights: bool,
+ total_epoch: int,
+ sample_rate: int,
+ batch_size: int,
+ gpu: int,
+ pitch_guidance: bool,
+ overtraining_detector: bool,
+ overtraining_threshold: int,
+ pretrained: bool,
+ cleanup: bool,
+ index_algorithm: str = "Auto",
+ cache_data_in_gpu: bool = False,
+ custom_pretrained: bool = False,
+ g_pretrained_path: str = None,
+ d_pretrained_path: str = None,
+):
+
+ if pretrained == True:
+ from rvc.lib.tools.pretrained_selector import pretrained_selector
+
+ if custom_pretrained == False:
+ pg, pd = pretrained_selector(bool(pitch_guidance))[str(rvc_version)][
+ int(sample_rate)
+ ]
+ else:
+ if g_pretrained_path is None or d_pretrained_path is None:
+ raise ValueError(
+ "Please provide the path to the pretrained G and D models."
+ )
+ pg, pd = g_pretrained_path, d_pretrained_path
+ else:
+ pg, pd = "", ""
+
+ train_script_path = os.path.join("rvc", "train", "train.py")
+ command = [
+ python,
+ train_script_path,
+ *map(
+ str,
+ [
+ model_name,
+ save_every_epoch,
+ total_epoch,
+ pg,
+ pd,
+ rvc_version,
+ gpu,
+ batch_size,
+ sample_rate,
+ pitch_guidance,
+ save_only_latest,
+ save_every_weights,
+ cache_data_in_gpu,
+ overtraining_detector,
+ overtraining_threshold,
+ cleanup,
+ ],
+ ),
+ ]
+ subprocess.run(command)
+ run_index_script(model_name, rvc_version, index_algorithm)
+ return f"Model {model_name} trained successfully."
+
+
+# Index
+def run_index_script(model_name: str, rvc_version: str, index_algorithm: str):
+ index_script_path = os.path.join("rvc", "train", "process", "extract_index.py")
+ command = [
+ python,
+ index_script_path,
+ os.path.join(logs_path, model_name),
+ rvc_version,
+ index_algorithm,
+ ]
+
+ subprocess.run(command)
+ return f"Index file for {model_name} generated successfully."
+
+
+# Model extract
+def run_model_extract_script(
+ pth_path: str,
+ model_name: str,
+ sample_rate: int,
+ pitch_guidance: bool,
+ rvc_version: str,
+ epoch: int,
+ step: int,
+):
+ extract_small_model(
+ pth_path, model_name, sample_rate, pitch_guidance, rvc_version, epoch, step
+ )
+ return f"Model {model_name} extracted successfully."
+
+
+# Model information
+def run_model_information_script(pth_path: str):
+ print(model_information(pth_path))
+ return model_information(pth_path)
+
+
+# Model blender
+def run_model_blender_script(
+ model_name: str, pth_path_1: str, pth_path_2: str, ratio: float
+):
+ message, model_blended = model_blender(model_name, pth_path_1, pth_path_2, ratio)
+ return message, model_blended
+
+
+# Tensorboard
+def run_tensorboard_script():
+ launch_tensorboard_pipeline()
+
+
+# Download
+def run_download_script(model_link: str):
+ model_download_pipeline(model_link)
+ return f"Model downloaded successfully."
+
+
+# Prerequisites
+def run_prerequisites_script(
+ pretraineds_v1_f0: bool,
+ pretraineds_v1_nof0: bool,
+ pretraineds_v2_f0: bool,
+ pretraineds_v2_nof0: bool,
+ models: bool,
+ exe: bool,
+):
+ prequisites_download_pipeline(
+ pretraineds_v1_f0,
+ pretraineds_v1_nof0,
+ pretraineds_v2_f0,
+ pretraineds_v2_nof0,
+ models,
+ exe,
+ )
+ return "Prerequisites installed successfully."
+
+
+# Audio analyzer
+def run_audio_analyzer_script(
+ input_path: str, save_plot_path: str = "logs/audio_analysis.png"
+):
+ audio_info, plot_path = analyze_audio(input_path, save_plot_path)
+ print(
+ f"Audio info of {input_path}: {audio_info}",
+ f"Audio file {input_path} analyzed successfully. Plot saved at: {plot_path}",
+ )
+ return audio_info, plot_path
+
+
+# Parse arguments
+def parse_arguments():
+ parser = argparse.ArgumentParser(
+ description="Run the main.py script with specific parameters."
+ )
+ subparsers = parser.add_subparsers(
+ title="subcommands", dest="mode", help="Choose a mode"
+ )
+
+ # Parser for 'infer' mode
+ infer_parser = subparsers.add_parser("infer", help="Run inference")
+ pitch_description = (
+ "Set the pitch of the audio. Higher values result in a higher pitch."
+ )
+ infer_parser.add_argument(
+ "--pitch",
+ type=int,
+ help=pitch_description,
+ choices=range(-24, 25),
+ default=0,
+ )
+ filter_radius_description = "Apply median filtering to the extracted pitch values if this value is greater than or equal to three. This can help reduce breathiness in the output audio."
+ infer_parser.add_argument(
+ "--filter_radius",
+ type=int,
+ help=filter_radius_description,
+ choices=range(11),
+ default=3,
+ )
+ index_rate_description = "Control the influence of the index file on the output. Higher values mean stronger influence. Lower values can help reduce artifacts but may result in less accurate voice cloning."
+ infer_parser.add_argument(
+ "--index_rate",
+ type=float,
+ help=index_rate_description,
+ choices=[i / 100.0 for i in range(0, 101)],
+ default=0.3,
+ )
+ volume_envelope_description = "Control the blending of the output's volume envelope. A value of 1 means the output envelope is fully used."
+ infer_parser.add_argument(
+ "--volume_envelope",
+ type=float,
+ help=volume_envelope_description,
+ choices=[i / 100.0 for i in range(0, 101)],
+ default=1,
+ )
+ protect_description = "Protect consonants and breathing sounds from artifacts. A value of 0.5 offers the strongest protection, while lower values may reduce the protection level but potentially mitigate the indexing effect."
+ infer_parser.add_argument(
+ "--protect",
+ type=float,
+ help=protect_description,
+ choices=[i / 1000.0 for i in range(0, 501)],
+ default=0.33,
+ )
+ hop_length_description = "Only applicable for the Crepe pitch extraction method. Determines the time it takes for the system to react to a significant pitch change. Smaller values require more processing time but can lead to better pitch accuracy."
+ infer_parser.add_argument(
+ "--hop_length",
+ type=int,
+ help=hop_length_description,
+ choices=range(1, 513),
+ default=128,
+ )
+ f0_method_description = "Choose the pitch extraction algorithm for the conversion. 'rmvpe' is the default and generally recommended."
+ infer_parser.add_argument(
+ "--f0_method",
+ type=str,
+ help=f0_method_description,
+ choices=[
+ "crepe",
+ "crepe-tiny",
+ "rmvpe",
+ "fcpe",
+ "hybrid[crepe+rmvpe]",
+ "hybrid[crepe+fcpe]",
+ "hybrid[rmvpe+fcpe]",
+ "hybrid[crepe+rmvpe+fcpe]",
+ ],
+ default="rmvpe",
+ )
+ infer_parser.add_argument(
+ "--input_path",
+ type=str,
+ help="Full path to the input audio file.",
+ required=True,
+ )
+ infer_parser.add_argument(
+ "--output_path",
+ type=str,
+ help="Full path to the output audio file.",
+ required=True,
+ )
+ pth_path_description = "Full path to the RVC model file (.pth)."
+ infer_parser.add_argument(
+ "--pth_path", type=str, help=pth_path_description, required=True
+ )
+ index_path_description = "Full path to the index file (.index)."
+ infer_parser.add_argument(
+ "--index_path", type=str, help=index_path_description, required=True
+ )
+ split_audio_description = "Split the audio into smaller segments before inference. This can improve the quality of the output for longer audio files."
+ infer_parser.add_argument(
+ "--split_audio",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help=split_audio_description,
+ default=False,
+ )
+ f0_autotune_description = "Apply a light autotune to the inferred audio. Particularly useful for singing voice conversions."
+ infer_parser.add_argument(
+ "--f0_autotune",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help=f0_autotune_description,
+ default=False,
+ )
+ f0_autotune_strength_description = "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid."
+ infer_parser.add_argument(
+ "--f0_autotune_strength",
+ type=float,
+ help=f0_autotune_strength_description,
+ choices=[(i / 10) for i in range(11)],
+ default=1.0,
+ )
+ clean_audio_description = "Clean the output audio using noise reduction algorithms. Recommended for speech conversions."
+ infer_parser.add_argument(
+ "--clean_audio",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help=clean_audio_description,
+ default=False,
+ )
+ clean_strength_description = "Adjust the intensity of the audio cleaning process. Higher values result in stronger cleaning, but may lead to a more compressed sound."
+ infer_parser.add_argument(
+ "--clean_strength",
+ type=float,
+ help=clean_strength_description,
+ choices=[(i / 10) for i in range(11)],
+ default=0.7,
+ )
+ export_format_description = "Select the desired output audio format."
+ infer_parser.add_argument(
+ "--export_format",
+ type=str,
+ help=export_format_description,
+ choices=["WAV", "MP3", "FLAC", "OGG", "M4A"],
+ default="WAV",
+ )
+ embedder_model_description = (
+ "Choose the model used for generating speaker embeddings."
+ )
+ infer_parser.add_argument(
+ "--embedder_model",
+ type=str,
+ help=embedder_model_description,
+ choices=[
+ "contentvec",
+ "chinese-hubert-base",
+ "japanese-hubert-base",
+ "korean-hubert-base",
+ "custom",
+ ],
+ default="contentvec",
+ )
+ embedder_model_custom_description = "Specify the path to a custom model for speaker embedding. Only applicable if 'embedder_model' is set to 'custom'."
+ infer_parser.add_argument(
+ "--embedder_model_custom",
+ type=str,
+ help=embedder_model_custom_description,
+ default=None,
+ )
+ upscale_audio_description = "Upscale the input audio to a higher quality before processing. This can improve the overall quality of the output, especially for low-quality input audio."
+ infer_parser.add_argument(
+ "--upscale_audio",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help=upscale_audio_description,
+ default=False,
+ )
+ f0_file_description = "Full path to an external F0 file (.f0). This allows you to use pre-computed pitch values for the input audio."
+ infer_parser.add_argument(
+ "--f0_file",
+ type=str,
+ help=f0_file_description,
+ default=None,
+ )
+ formant_shifting_description = "Apply formant shifting to the input audio. This can help adjust the timbre of the voice."
+ infer_parser.add_argument(
+ "--formant_shifting",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help=formant_shifting_description,
+ default=False,
+ required=False,
+ )
+ formant_qfrency_description = "Control the frequency of the formant shifting effect. Higher values result in a more pronounced effect."
+ infer_parser.add_argument(
+ "--formant_qfrency",
+ type=float,
+ help=formant_qfrency_description,
+ default=1.0,
+ required=False,
+ )
+ formant_timbre_description = "Control the timbre of the formant shifting effect. Higher values result in a more pronounced effect."
+ infer_parser.add_argument(
+ "--formant_timbre",
+ type=float,
+ help=formant_timbre_description,
+ default=1.0,
+ required=False,
+ )
+ sid_description = "Speaker ID for multi-speaker models."
+ infer_parser.add_argument(
+ "--sid",
+ type=int,
+ help=sid_description,
+ default=0,
+ required=False,
+ )
+ post_process_description = "Apply post-processing effects to the output audio."
+ infer_parser.add_argument(
+ "--post_process",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help=post_process_description,
+ default=False,
+ required=False,
+ )
+ reverb_description = "Apply reverb effect to the output audio."
+ infer_parser.add_argument(
+ "--reverb",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help=reverb_description,
+ default=False,
+ required=False,
+ )
+
+ pitch_shift_description = "Apply pitch shifting effect to the output audio."
+ infer_parser.add_argument(
+ "--pitch_shift",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help=pitch_shift_description,
+ default=False,
+ required=False,
+ )
+
+ limiter_description = "Apply limiter effect to the output audio."
+ infer_parser.add_argument(
+ "--limiter",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help=limiter_description,
+ default=False,
+ required=False,
+ )
+
+ gain_description = "Apply gain effect to the output audio."
+ infer_parser.add_argument(
+ "--gain",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help=gain_description,
+ default=False,
+ required=False,
+ )
+
+ distortion_description = "Apply distortion effect to the output audio."
+ infer_parser.add_argument(
+ "--distortion",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help=distortion_description,
+ default=False,
+ required=False,
+ )
+
+ chorus_description = "Apply chorus effect to the output audio."
+ infer_parser.add_argument(
+ "--chorus",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help=chorus_description,
+ default=False,
+ required=False,
+ )
+
+ bitcrush_description = "Apply bitcrush effect to the output audio."
+ infer_parser.add_argument(
+ "--bitcrush",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help=bitcrush_description,
+ default=False,
+ required=False,
+ )
+
+ clipping_description = "Apply clipping effect to the output audio."
+ infer_parser.add_argument(
+ "--clipping",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help=clipping_description,
+ default=False,
+ required=False,
+ )
+
+ compressor_description = "Apply compressor effect to the output audio."
+ infer_parser.add_argument(
+ "--compressor",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help=compressor_description,
+ default=False,
+ required=False,
+ )
+
+ delay_description = "Apply delay effect to the output audio."
+ infer_parser.add_argument(
+ "--delay",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help=delay_description,
+ default=False,
+ required=False,
+ )
+
+ reverb_room_size_description = "Control the room size of the reverb effect. Higher values result in a larger room size."
+ infer_parser.add_argument(
+ "--reverb_room_size",
+ type=float,
+ help=reverb_room_size_description,
+ default=0.5,
+ required=False,
+ )
+
+ reverb_damping_description = "Control the damping of the reverb effect. Higher values result in a more damped sound."
+ infer_parser.add_argument(
+ "--reverb_damping",
+ type=float,
+ help=reverb_damping_description,
+ default=0.5,
+ required=False,
+ )
+
+ reverb_wet_gain_description = "Control the wet gain of the reverb effect. Higher values result in a stronger reverb effect."
+ infer_parser.add_argument(
+ "--reverb_wet_gain",
+ type=float,
+ help=reverb_wet_gain_description,
+ default=0.5,
+ required=False,
+ )
+
+ reverb_dry_gain_description = "Control the dry gain of the reverb effect. Higher values result in a stronger dry signal."
+ infer_parser.add_argument(
+ "--reverb_dry_gain",
+ type=float,
+ help=reverb_dry_gain_description,
+ default=0.5,
+ required=False,
+ )
+
+ reverb_width_description = "Control the stereo width of the reverb effect. Higher values result in a wider stereo image."
+ infer_parser.add_argument(
+ "--reverb_width",
+ type=float,
+ help=reverb_width_description,
+ default=0.5,
+ required=False,
+ )
+
+ reverb_freeze_mode_description = "Control the freeze mode of the reverb effect. Higher values result in a stronger freeze effect."
+ infer_parser.add_argument(
+ "--reverb_freeze_mode",
+ type=float,
+ help=reverb_freeze_mode_description,
+ default=0.5,
+ required=False,
+ )
+
+ pitch_shift_semitones_description = "Control the pitch shift in semitones. Positive values increase the pitch, while negative values decrease it."
+ infer_parser.add_argument(
+ "--pitch_shift_semitones",
+ type=float,
+ help=pitch_shift_semitones_description,
+ default=0.0,
+ required=False,
+ )
+
+ limiter_threshold_description = "Control the threshold of the limiter effect. Higher values result in a stronger limiting effect."
+ infer_parser.add_argument(
+ "--limiter_threshold",
+ type=float,
+ help=limiter_threshold_description,
+ default=-6,
+ required=False,
+ )
+
+ limiter_release_time_description = "Control the release time of the limiter effect. Higher values result in a longer release time."
+ infer_parser.add_argument(
+ "--limiter_release_time",
+ type=float,
+ help=limiter_release_time_description,
+ default=0.01,
+ required=False,
+ )
+
+ gain_db_description = "Control the gain in decibels. Positive values increase the gain, while negative values decrease it."
+ infer_parser.add_argument(
+ "--gain_db",
+ type=float,
+ help=gain_db_description,
+ default=0.0,
+ required=False,
+ )
+
+ distortion_gain_description = "Control the gain of the distortion effect. Higher values result in a stronger distortion effect."
+ infer_parser.add_argument(
+ "--distortion_gain",
+ type=float,
+ help=distortion_gain_description,
+ default=25,
+ required=False,
+ )
+
+ chorus_rate_description = "Control the rate of the chorus effect. Higher values result in a faster chorus effect."
+ infer_parser.add_argument(
+ "--chorus_rate",
+ type=float,
+ help=chorus_rate_description,
+ default=1.0,
+ required=False,
+ )
+
+ chorus_depth_description = "Control the depth of the chorus effect. Higher values result in a stronger chorus effect."
+ infer_parser.add_argument(
+ "--chorus_depth",
+ type=float,
+ help=chorus_depth_description,
+ default=0.25,
+ required=False,
+ )
+
+ chorus_center_delay_description = "Control the center delay of the chorus effect. Higher values result in a longer center delay."
+ infer_parser.add_argument(
+ "--chorus_center_delay",
+ type=float,
+ help=chorus_center_delay_description,
+ default=7,
+ required=False,
+ )
+
+ chorus_feedback_description = "Control the feedback of the chorus effect. Higher values result in a stronger feedback effect."
+ infer_parser.add_argument(
+ "--chorus_feedback",
+ type=float,
+ help=chorus_feedback_description,
+ default=0.0,
+ required=False,
+ )
+
+ chorus_mix_description = "Control the mix of the chorus effect. Higher values result in a stronger chorus effect."
+ infer_parser.add_argument(
+ "--chorus_mix",
+ type=float,
+ help=chorus_mix_description,
+ default=0.5,
+ required=False,
+ )
+
+ bitcrush_bit_depth_description = "Control the bit depth of the bitcrush effect. Higher values result in a stronger bitcrush effect."
+ infer_parser.add_argument(
+ "--bitcrush_bit_depth",
+ type=int,
+ help=bitcrush_bit_depth_description,
+ default=8,
+ required=False,
+ )
+
+ clipping_threshold_description = "Control the threshold of the clipping effect. Higher values result in a stronger clipping effect."
+ infer_parser.add_argument(
+ "--clipping_threshold",
+ type=float,
+ help=clipping_threshold_description,
+ default=-6,
+ required=False,
+ )
+
+ compressor_threshold_description = "Control the threshold of the compressor effect. Higher values result in a stronger compressor effect."
+ infer_parser.add_argument(
+ "--compressor_threshold",
+ type=float,
+ help=compressor_threshold_description,
+ default=0,
+ required=False,
+ )
+
+ compressor_ratio_description = "Control the ratio of the compressor effect. Higher values result in a stronger compressor effect."
+ infer_parser.add_argument(
+ "--compressor_ratio",
+ type=float,
+ help=compressor_ratio_description,
+ default=1,
+ required=False,
+ )
+
+ compressor_attack_description = "Control the attack of the compressor effect. Higher values result in a stronger compressor effect."
+ infer_parser.add_argument(
+ "--compressor_attack",
+ type=float,
+ help=compressor_attack_description,
+ default=1.0,
+ required=False,
+ )
+
+ compressor_release_description = "Control the release of the compressor effect. Higher values result in a stronger compressor effect."
+ infer_parser.add_argument(
+ "--compressor_release",
+ type=float,
+ help=compressor_release_description,
+ default=100,
+ required=False,
+ )
+
+ delay_seconds_description = "Control the delay time in seconds. Higher values result in a longer delay time."
+ infer_parser.add_argument(
+ "--delay_seconds",
+ type=float,
+ help=delay_seconds_description,
+ default=0.5,
+ required=False,
+ )
+ delay_feedback_description = "Control the feedback of the delay effect. Higher values result in a stronger feedback effect."
+ infer_parser.add_argument(
+ "--delay_feedback",
+ type=float,
+ help=delay_feedback_description,
+ default=0.0,
+ required=False,
+ )
+ delay_mix_description = "Control the mix of the delay effect. Higher values result in a stronger delay effect."
+ infer_parser.add_argument(
+ "--delay_mix",
+ type=float,
+ help=delay_mix_description,
+ default=0.5,
+ required=False,
+ )
+
+ # Parser for 'batch_infer' mode
+ batch_infer_parser = subparsers.add_parser(
+ "batch_infer",
+ help="Run batch inference",
+ )
+ batch_infer_parser.add_argument(
+ "--pitch",
+ type=int,
+ help=pitch_description,
+ choices=range(-24, 25),
+ default=0,
+ )
+ batch_infer_parser.add_argument(
+ "--filter_radius",
+ type=int,
+ help=filter_radius_description,
+ choices=range(11),
+ default=3,
+ )
+ batch_infer_parser.add_argument(
+ "--index_rate",
+ type=float,
+ help=index_rate_description,
+ choices=[i / 100.0 for i in range(0, 101)],
+ default=0.3,
+ )
+ batch_infer_parser.add_argument(
+ "--volume_envelope",
+ type=float,
+ help=volume_envelope_description,
+ choices=[i / 100.0 for i in range(0, 101)],
+ default=1,
+ )
+ batch_infer_parser.add_argument(
+ "--protect",
+ type=float,
+ help=protect_description,
+ choices=[i / 1000.0 for i in range(0, 501)],
+ default=0.33,
+ )
+ batch_infer_parser.add_argument(
+ "--hop_length",
+ type=int,
+ help=hop_length_description,
+ choices=range(1, 513),
+ default=128,
+ )
+ batch_infer_parser.add_argument(
+ "--f0_method",
+ type=str,
+ help=f0_method_description,
+ choices=[
+ "crepe",
+ "crepe-tiny",
+ "rmvpe",
+ "fcpe",
+ "hybrid[crepe+rmvpe]",
+ "hybrid[crepe+fcpe]",
+ "hybrid[rmvpe+fcpe]",
+ "hybrid[crepe+rmvpe+fcpe]",
+ ],
+ default="rmvpe",
+ )
+ batch_infer_parser.add_argument(
+ "--input_folder",
+ type=str,
+ help="Path to the folder containing input audio files.",
+ required=True,
+ )
+ batch_infer_parser.add_argument(
+ "--output_folder",
+ type=str,
+ help="Path to the folder for saving output audio files.",
+ required=True,
+ )
+ batch_infer_parser.add_argument(
+ "--pth_path", type=str, help=pth_path_description, required=True
+ )
+ batch_infer_parser.add_argument(
+ "--index_path", type=str, help=index_path_description, required=True
+ )
+ batch_infer_parser.add_argument(
+ "--split_audio",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help=split_audio_description,
+ default=False,
+ )
+ batch_infer_parser.add_argument(
+ "--f0_autotune",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help=f0_autotune_description,
+ default=False,
+ )
+ batch_infer_parser.add_argument(
+ "--f0_autotune_strength",
+ type=float,
+ help=clean_strength_description,
+ choices=[(i / 10) for i in range(11)],
+ default=1.0,
+ )
+ batch_infer_parser.add_argument(
+ "--clean_audio",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help=clean_audio_description,
+ default=False,
+ )
+ batch_infer_parser.add_argument(
+ "--clean_strength",
+ type=float,
+ help=clean_strength_description,
+ choices=[(i / 10) for i in range(11)],
+ default=0.7,
+ )
+ batch_infer_parser.add_argument(
+ "--export_format",
+ type=str,
+ help=export_format_description,
+ choices=["WAV", "MP3", "FLAC", "OGG", "M4A"],
+ default="WAV",
+ )
+ batch_infer_parser.add_argument(
+ "--embedder_model",
+ type=str,
+ help=embedder_model_description,
+ choices=[
+ "contentvec",
+ "chinese-hubert-base",
+ "japanese-hubert-base",
+ "korean-hubert-base",
+ "custom",
+ ],
+ default="contentvec",
+ )
+ batch_infer_parser.add_argument(
+ "--embedder_model_custom",
+ type=str,
+ help=embedder_model_custom_description,
+ default=None,
+ )
+ batch_infer_parser.add_argument(
+ "--upscale_audio",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help=upscale_audio_description,
+ default=False,
+ )
+ batch_infer_parser.add_argument(
+ "--f0_file",
+ type=str,
+ help=f0_file_description,
+ default=None,
+ )
+ batch_infer_parser.add_argument(
+ "--formant_shifting",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help=formant_shifting_description,
+ default=False,
+ required=False,
+ )
+ batch_infer_parser.add_argument(
+ "--formant_qfrency",
+ type=float,
+ help=formant_qfrency_description,
+ default=1.0,
+ required=False,
+ )
+ batch_infer_parser.add_argument(
+ "--formant_timbre",
+ type=float,
+ help=formant_timbre_description,
+ default=1.0,
+ required=False,
+ )
+ batch_infer_parser.add_argument(
+ "--sid",
+ type=int,
+ help=sid_description,
+ default=0,
+ required=False,
+ )
+ batch_infer_parser.add_argument(
+ "--post_process",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help=post_process_description,
+ default=False,
+ required=False,
+ )
+ batch_infer_parser.add_argument(
+ "--reverb",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help=reverb_description,
+ default=False,
+ required=False,
+ )
+
+ batch_infer_parser.add_argument(
+ "--pitch_shift",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help=pitch_shift_description,
+ default=False,
+ required=False,
+ )
+
+ batch_infer_parser.add_argument(
+ "--limiter",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help=limiter_description,
+ default=False,
+ required=False,
+ )
+
+ batch_infer_parser.add_argument(
+ "--gain",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help=gain_description,
+ default=False,
+ required=False,
+ )
+
+ batch_infer_parser.add_argument(
+ "--distortion",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help=distortion_description,
+ default=False,
+ required=False,
+ )
+
+ batch_infer_parser.add_argument(
+ "--chorus",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help=chorus_description,
+ default=False,
+ required=False,
+ )
+
+ batch_infer_parser.add_argument(
+ "--bitcrush",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help=bitcrush_description,
+ default=False,
+ required=False,
+ )
+
+ batch_infer_parser.add_argument(
+ "--clipping",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help=clipping_description,
+ default=False,
+ required=False,
+ )
+
+ batch_infer_parser.add_argument(
+ "--compressor",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help=compressor_description,
+ default=False,
+ required=False,
+ )
+
+ batch_infer_parser.add_argument(
+ "--delay",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help=delay_description,
+ default=False,
+ required=False,
+ )
+
+ batch_infer_parser.add_argument(
+ "--reverb_room_size",
+ type=float,
+ help=reverb_room_size_description,
+ default=0.5,
+ required=False,
+ )
+
+ batch_infer_parser.add_argument(
+ "--reverb_damping",
+ type=float,
+ help=reverb_damping_description,
+ default=0.5,
+ required=False,
+ )
+
+ batch_infer_parser.add_argument(
+ "--reverb_wet_gain",
+ type=float,
+ help=reverb_wet_gain_description,
+ default=0.5,
+ required=False,
+ )
+
+ batch_infer_parser.add_argument(
+ "--reverb_dry_gain",
+ type=float,
+ help=reverb_dry_gain_description,
+ default=0.5,
+ required=False,
+ )
+
+ batch_infer_parser.add_argument(
+ "--reverb_width",
+ type=float,
+ help=reverb_width_description,
+ default=0.5,
+ required=False,
+ )
+
+ batch_infer_parser.add_argument(
+ "--reverb_freeze_mode",
+ type=float,
+ help=reverb_freeze_mode_description,
+ default=0.5,
+ required=False,
+ )
+
+ batch_infer_parser.add_argument(
+ "--pitch_shift_semitones",
+ type=float,
+ help=pitch_shift_semitones_description,
+ default=0.0,
+ required=False,
+ )
+
+ batch_infer_parser.add_argument(
+ "--limiter_threshold",
+ type=float,
+ help=limiter_threshold_description,
+ default=-6,
+ required=False,
+ )
+
+ batch_infer_parser.add_argument(
+ "--limiter_release_time",
+ type=float,
+ help=limiter_release_time_description,
+ default=0.01,
+ required=False,
+ )
+ batch_infer_parser.add_argument(
+ "--gain_db",
+ type=float,
+ help=gain_db_description,
+ default=0.0,
+ required=False,
+ )
+
+ batch_infer_parser.add_argument(
+ "--distortion_gain",
+ type=float,
+ help=distortion_gain_description,
+ default=25,
+ required=False,
+ )
+
+ batch_infer_parser.add_argument(
+ "--chorus_rate",
+ type=float,
+ help=chorus_rate_description,
+ default=1.0,
+ required=False,
+ )
+
+ batch_infer_parser.add_argument(
+ "--chorus_depth",
+ type=float,
+ help=chorus_depth_description,
+ default=0.25,
+ required=False,
+ )
+ batch_infer_parser.add_argument(
+ "--chorus_center_delay",
+ type=float,
+ help=chorus_center_delay_description,
+ default=7,
+ required=False,
+ )
+
+ batch_infer_parser.add_argument(
+ "--chorus_feedback",
+ type=float,
+ help=chorus_feedback_description,
+ default=0.0,
+ required=False,
+ )
+
+ batch_infer_parser.add_argument(
+ "--chorus_mix",
+ type=float,
+ help=chorus_mix_description,
+ default=0.5,
+ required=False,
+ )
+
+ batch_infer_parser.add_argument(
+ "--bitcrush_bit_depth",
+ type=int,
+ help=bitcrush_bit_depth_description,
+ default=8,
+ required=False,
+ )
+
+ batch_infer_parser.add_argument(
+ "--clipping_threshold",
+ type=float,
+ help=clipping_threshold_description,
+ default=-6,
+ required=False,
+ )
+
+ batch_infer_parser.add_argument(
+ "--compressor_threshold",
+ type=float,
+ help=compressor_threshold_description,
+ default=0,
+ required=False,
+ )
+
+ batch_infer_parser.add_argument(
+ "--compressor_ratio",
+ type=float,
+ help=compressor_ratio_description,
+ default=1,
+ required=False,
+ )
+
+ batch_infer_parser.add_argument(
+ "--compressor_attack",
+ type=float,
+ help=compressor_attack_description,
+ default=1.0,
+ required=False,
+ )
+
+ batch_infer_parser.add_argument(
+ "--compressor_release",
+ type=float,
+ help=compressor_release_description,
+ default=100,
+ required=False,
+ )
+ batch_infer_parser.add_argument(
+ "--delay_seconds",
+ type=float,
+ help=delay_seconds_description,
+ default=0.5,
+ required=False,
+ )
+ batch_infer_parser.add_argument(
+ "--delay_feedback",
+ type=float,
+ help=delay_feedback_description,
+ default=0.0,
+ required=False,
+ )
+ batch_infer_parser.add_argument(
+ "--delay_mix",
+ type=float,
+ help=delay_mix_description,
+ default=0.5,
+ required=False,
+ )
+
+ # Parser for 'tts' mode
+ tts_parser = subparsers.add_parser("tts", help="Run TTS inference")
+ tts_parser.add_argument(
+ "--tts_file", type=str, help="File with a text to be synthesized", required=True
+ )
+ tts_parser.add_argument(
+ "--tts_text", type=str, help="Text to be synthesized", required=True
+ )
+ tts_parser.add_argument(
+ "--tts_voice",
+ type=str,
+ help="Voice to be used for TTS synthesis.",
+ choices=locales,
+ required=True,
+ )
+ tts_parser.add_argument(
+ "--tts_rate",
+ type=int,
+ help="Control the speaking rate of the TTS. Values range from -100 (slower) to 100 (faster).",
+ choices=range(-100, 101),
+ default=0,
+ )
+ tts_parser.add_argument(
+ "--pitch",
+ type=int,
+ help=pitch_description,
+ choices=range(-24, 25),
+ default=0,
+ )
+ tts_parser.add_argument(
+ "--filter_radius",
+ type=int,
+ help=filter_radius_description,
+ choices=range(11),
+ default=3,
+ )
+ tts_parser.add_argument(
+ "--index_rate",
+ type=float,
+ help=index_rate_description,
+ choices=[(i / 10) for i in range(11)],
+ default=0.3,
+ )
+ tts_parser.add_argument(
+ "--volume_envelope",
+ type=float,
+ help=volume_envelope_description,
+ choices=[(i / 10) for i in range(11)],
+ default=1,
+ )
+ tts_parser.add_argument(
+ "--protect",
+ type=float,
+ help=protect_description,
+ choices=[(i / 10) for i in range(6)],
+ default=0.33,
+ )
+ tts_parser.add_argument(
+ "--hop_length",
+ type=int,
+ help=hop_length_description,
+ choices=range(1, 513),
+ default=128,
+ )
+ tts_parser.add_argument(
+ "--f0_method",
+ type=str,
+ help=f0_method_description,
+ choices=[
+ "crepe",
+ "crepe-tiny",
+ "rmvpe",
+ "fcpe",
+ "hybrid[crepe+rmvpe]",
+ "hybrid[crepe+fcpe]",
+ "hybrid[rmvpe+fcpe]",
+ "hybrid[crepe+rmvpe+fcpe]",
+ ],
+ default="rmvpe",
+ )
+ tts_parser.add_argument(
+ "--output_tts_path",
+ type=str,
+ help="Full path to save the synthesized TTS audio.",
+ required=True,
+ )
+ tts_parser.add_argument(
+ "--output_rvc_path",
+ type=str,
+ help="Full path to save the voice-converted audio using the synthesized TTS.",
+ required=True,
+ )
+ tts_parser.add_argument(
+ "--pth_path", type=str, help=pth_path_description, required=True
+ )
+ tts_parser.add_argument(
+ "--index_path", type=str, help=index_path_description, required=True
+ )
+ tts_parser.add_argument(
+ "--split_audio",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help=split_audio_description,
+ default=False,
+ )
+ tts_parser.add_argument(
+ "--f0_autotune",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help=f0_autotune_description,
+ default=False,
+ )
+ tts_parser.add_argument(
+ "--f0_autotune_strength",
+ type=float,
+ help=clean_strength_description,
+ choices=[(i / 10) for i in range(11)],
+ default=1.0,
+ )
+ tts_parser.add_argument(
+ "--clean_audio",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help=clean_audio_description,
+ default=False,
+ )
+ tts_parser.add_argument(
+ "--clean_strength",
+ type=float,
+ help=clean_strength_description,
+ choices=[(i / 10) for i in range(11)],
+ default=0.7,
+ )
+ tts_parser.add_argument(
+ "--export_format",
+ type=str,
+ help=export_format_description,
+ choices=["WAV", "MP3", "FLAC", "OGG", "M4A"],
+ default="WAV",
+ )
+ tts_parser.add_argument(
+ "--embedder_model",
+ type=str,
+ help=embedder_model_description,
+ choices=[
+ "contentvec",
+ "chinese-hubert-base",
+ "japanese-hubert-base",
+ "korean-hubert-base",
+ "custom",
+ ],
+ default="contentvec",
+ )
+ tts_parser.add_argument(
+ "--embedder_model_custom",
+ type=str,
+ help=embedder_model_custom_description,
+ default=None,
+ )
+ tts_parser.add_argument(
+ "--upscale_audio",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help=upscale_audio_description,
+ default=False,
+ )
+ tts_parser.add_argument(
+ "--f0_file",
+ type=str,
+ help=f0_file_description,
+ default=None,
+ )
+
+ # Parser for 'preprocess' mode
+ preprocess_parser = subparsers.add_parser(
+ "preprocess", help="Preprocess a dataset for training."
+ )
+ preprocess_parser.add_argument(
+ "--model_name", type=str, help="Name of the model to be trained.", required=True
+ )
+ preprocess_parser.add_argument(
+ "--dataset_path", type=str, help="Path to the dataset directory.", required=True
+ )
+ preprocess_parser.add_argument(
+ "--sample_rate",
+ type=int,
+ help="Target sampling rate for the audio data.",
+ choices=[32000, 40000, 48000],
+ required=True,
+ )
+ preprocess_parser.add_argument(
+ "--cpu_cores",
+ type=int,
+ help="Number of CPU cores to use for preprocessing.",
+ choices=range(1, 65),
+ )
+ preprocess_parser.add_argument(
+ "--cut_preprocess",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help="Cut the dataset into smaller segments for faster preprocessing.",
+ default=True,
+ required=False,
+ )
+ preprocess_parser.add_argument(
+ "--process_effects",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help="Disable all filters during preprocessing.",
+ default=False,
+ required=False,
+ )
+ preprocess_parser.add_argument(
+ "--noise_reduction",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help="Enable noise reduction during preprocessing.",
+ default=False,
+ required=False,
+ )
+ preprocess_parser.add_argument(
+ "--noise_reduction_strength",
+ type=float,
+ help="Strength of the noise reduction filter.",
+ choices=[(i / 10) for i in range(11)],
+ default=0.7,
+ required=False,
+ )
+
+ # Parser for 'extract' mode
+ extract_parser = subparsers.add_parser(
+ "extract", help="Extract features from a dataset."
+ )
+ extract_parser.add_argument(
+ "--model_name", type=str, help="Name of the model.", required=True
+ )
+ extract_parser.add_argument(
+ "--rvc_version",
+ type=str,
+ help="Version of the RVC model ('v1' or 'v2').",
+ choices=["v1", "v2"],
+ default="v2",
+ )
+ extract_parser.add_argument(
+ "--f0_method",
+ type=str,
+ help="Pitch extraction method to use.",
+ choices=[
+ "crepe",
+ "crepe-tiny",
+ "rmvpe",
+ ],
+ default="rmvpe",
+ )
+ extract_parser.add_argument(
+ "--hop_length",
+ type=int,
+ help="Hop length for feature extraction. Only applicable for Crepe pitch extraction.",
+ choices=range(1, 513),
+ default=128,
+ )
+ extract_parser.add_argument(
+ "--cpu_cores",
+ type=int,
+ help="Number of CPU cores to use for feature extraction (optional).",
+ choices=range(1, 65),
+ default=None,
+ )
+ extract_parser.add_argument(
+ "--gpu",
+ type=int,
+ help="GPU device to use for feature extraction (optional).",
+ default="-",
+ )
+ extract_parser.add_argument(
+ "--sample_rate",
+ type=int,
+ help="Target sampling rate for the audio data.",
+ choices=[32000, 40000, 48000],
+ required=True,
+ )
+ extract_parser.add_argument(
+ "--embedder_model",
+ type=str,
+ help=embedder_model_description,
+ choices=[
+ "contentvec",
+ "chinese-hubert-base",
+ "japanese-hubert-base",
+ "korean-hubert-base",
+ "custom",
+ ],
+ default="contentvec",
+ )
+ extract_parser.add_argument(
+ "--embedder_model_custom",
+ type=str,
+ help=embedder_model_custom_description,
+ default=None,
+ )
+
+ # Parser for 'train' mode
+ train_parser = subparsers.add_parser("train", help="Train an RVC model.")
+ train_parser.add_argument(
+ "--model_name", type=str, help="Name of the model to be trained.", required=True
+ )
+ train_parser.add_argument(
+ "--rvc_version",
+ type=str,
+ help="Version of the RVC model to train ('v1' or 'v2').",
+ choices=["v1", "v2"],
+ default="v2",
+ )
+ train_parser.add_argument(
+ "--save_every_epoch",
+ type=int,
+ help="Save the model every specified number of epochs.",
+ choices=range(1, 101),
+ required=True,
+ )
+ train_parser.add_argument(
+ "--save_only_latest",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help="Save only the latest model checkpoint.",
+ default=False,
+ )
+ train_parser.add_argument(
+ "--save_every_weights",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help="Save model weights every epoch.",
+ default=True,
+ )
+ train_parser.add_argument(
+ "--total_epoch",
+ type=int,
+ help="Total number of epochs to train for.",
+ choices=range(1, 10001),
+ default=1000,
+ )
+ train_parser.add_argument(
+ "--sample_rate",
+ type=int,
+ help="Sampling rate of the training data.",
+ choices=[32000, 40000, 48000],
+ required=True,
+ )
+ train_parser.add_argument(
+ "--batch_size",
+ type=int,
+ help="Batch size for training.",
+ choices=range(1, 51),
+ default=8,
+ )
+ train_parser.add_argument(
+ "--gpu",
+ type=str,
+ help="GPU device to use for training (e.g., '0').",
+ default="0",
+ )
+ train_parser.add_argument(
+ "--pitch_guidance",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help="Enable or disable pitch guidance during training.",
+ default=True,
+ )
+ train_parser.add_argument(
+ "--pretrained",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help="Use a pretrained model for initialization.",
+ default=True,
+ )
+ train_parser.add_argument(
+ "--custom_pretrained",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help="Use a custom pretrained model.",
+ default=False,
+ )
+ train_parser.add_argument(
+ "--g_pretrained_path",
+ type=str,
+ nargs="?",
+ default=None,
+ help="Path to the pretrained generator model file.",
+ )
+ train_parser.add_argument(
+ "--d_pretrained_path",
+ type=str,
+ nargs="?",
+ default=None,
+ help="Path to the pretrained discriminator model file.",
+ )
+ train_parser.add_argument(
+ "--overtraining_detector",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help="Enable overtraining detection.",
+ default=False,
+ )
+ train_parser.add_argument(
+ "--overtraining_threshold",
+ type=int,
+ help="Threshold for overtraining detection.",
+ choices=range(1, 101),
+ default=50,
+ )
+ train_parser.add_argument(
+ "--cleanup",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help="Cleanup previous training attempt.",
+ default=False,
+ )
+ train_parser.add_argument(
+ "--cache_data_in_gpu",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help="Cache training data in GPU memory.",
+ default=False,
+ )
+ train_parser.add_argument(
+ "--index_algorithm",
+ type=str,
+ choices=["Auto", "Faiss", "KMeans"],
+ help="Choose the method for generating the index file.",
+ default="Auto",
+ required=False,
+ )
+
+ # Parser for 'index' mode
+ index_parser = subparsers.add_parser(
+ "index", help="Generate an index file for an RVC model."
+ )
+ index_parser.add_argument(
+ "--model_name", type=str, help="Name of the model.", required=True
+ )
+ index_parser.add_argument(
+ "--rvc_version",
+ type=str,
+ help="Version of the RVC model ('v1' or 'v2').",
+ choices=["v1", "v2"],
+ default="v2",
+ )
+ index_parser.add_argument(
+ "--index_algorithm",
+ type=str,
+ choices=["Auto", "Faiss", "KMeans"],
+ help="Choose the method for generating the index file.",
+ default="Auto",
+ required=False,
+ )
+
+ # Parser for 'model_extract' mode
+ model_extract_parser = subparsers.add_parser(
+ "model_extract", help="Extract a specific epoch from a trained model."
+ )
+ model_extract_parser.add_argument(
+ "--pth_path", type=str, help="Path to the main .pth model file.", required=True
+ )
+ model_extract_parser.add_argument(
+ "--model_name", type=str, help="Name of the model.", required=True
+ )
+ model_extract_parser.add_argument(
+ "--sample_rate",
+ type=int,
+ help="Sampling rate of the extracted model.",
+ choices=[32000, 40000, 48000],
+ required=True,
+ )
+ model_extract_parser.add_argument(
+ "--pitch_guidance",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ help="Enable or disable pitch guidance for the extracted model.",
+ required=True,
+ )
+ model_extract_parser.add_argument(
+ "--rvc_version",
+ type=str,
+ help="Version of the extracted RVC model ('v1' or 'v2').",
+ choices=["v1", "v2"],
+ default="v2",
+ )
+ model_extract_parser.add_argument(
+ "--epoch",
+ type=int,
+ help="Epoch number to extract from the model.",
+ choices=range(1, 10001),
+ required=True,
+ )
+ model_extract_parser.add_argument(
+ "--step",
+ type=str,
+ help="Step number to extract from the model (optional).",
+ required=False,
+ )
+
+ # Parser for 'model_information' mode
+ model_information_parser = subparsers.add_parser(
+ "model_information", help="Display information about a trained model."
+ )
+ model_information_parser.add_argument(
+ "--pth_path", type=str, help="Path to the .pth model file.", required=True
+ )
+
+ # Parser for 'model_blender' mode
+ model_blender_parser = subparsers.add_parser(
+ "model_blender", help="Fuse two RVC models together."
+ )
+ model_blender_parser.add_argument(
+ "--model_name", type=str, help="Name of the new fused model.", required=True
+ )
+ model_blender_parser.add_argument(
+ "--pth_path_1",
+ type=str,
+ help="Path to the first .pth model file.",
+ required=True,
+ )
+ model_blender_parser.add_argument(
+ "--pth_path_2",
+ type=str,
+ help="Path to the second .pth model file.",
+ required=True,
+ )
+ model_blender_parser.add_argument(
+ "--ratio",
+ type=float,
+ help="Ratio for blending the two models (0.0 to 1.0).",
+ choices=[(i / 10) for i in range(11)],
+ default=0.5,
+ )
+
+ # Parser for 'tensorboard' mode
+ subparsers.add_parser(
+ "tensorboard", help="Launch TensorBoard for monitoring training progress."
+ )
+
+ # Parser for 'download' mode
+ download_parser = subparsers.add_parser(
+ "download", help="Download a model from a provided link."
+ )
+ download_parser.add_argument(
+ "--model_link", type=str, help="Direct link to the model file.", required=True
+ )
+
+ # Parser for 'prerequisites' mode
+ prerequisites_parser = subparsers.add_parser(
+ "prerequisites", help="Install prerequisites for RVC."
+ )
+ prerequisites_parser.add_argument(
+ "--pretraineds_v1_f0",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ default=False,
+ help="Download pretrained models for RVC v1.",
+ )
+ prerequisites_parser.add_argument(
+ "--pretraineds_v2_f0",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ default=True,
+ help="Download pretrained models for RVC v2.",
+ )
+ prerequisites_parser.add_argument(
+ "--pretraineds_v1_nof0",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ default=False,
+ help="Download non f0 pretrained models for RVC v1.",
+ )
+ prerequisites_parser.add_argument(
+ "--pretraineds_v2_nof0",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ default=False,
+ help="Download non f0 pretrained models for RVC v2.",
+ )
+ prerequisites_parser.add_argument(
+ "--models",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ default=True,
+ help="Download additional models.",
+ )
+ prerequisites_parser.add_argument(
+ "--exe",
+ type=lambda x: bool(strtobool(x)),
+ choices=[True, False],
+ default=True,
+ help="Download required executables.",
+ )
+
+ # Parser for 'audio_analyzer' mode
+ audio_analyzer = subparsers.add_parser(
+ "audio_analyzer", help="Analyze an audio file."
+ )
+ audio_analyzer.add_argument(
+ "--input_path", type=str, help="Path to the input audio file.", required=True
+ )
+
+ return parser.parse_args()
+
+
+def main():
+ if len(sys.argv) == 1:
+ print("Please run the script with '-h' for more information.")
+ sys.exit(1)
+
+ args = parse_arguments()
+
+ try:
+ if args.mode == "infer":
+ run_infer_script(
+ pitch=args.pitch,
+ filter_radius=args.filter_radius,
+ index_rate=args.index_rate,
+ volume_envelope=args.volume_envelope,
+ protect=args.protect,
+ hop_length=args.hop_length,
+ f0_method=args.f0_method,
+ input_path=args.input_path,
+ output_path=args.output_path,
+ pth_path=args.pth_path,
+ index_path=args.index_path,
+ split_audio=args.split_audio,
+ f0_autotune=args.f0_autotune,
+ f0_autotune_strength=args.f0_autotune_strength,
+ clean_audio=args.clean_audio,
+ clean_strength=args.clean_strength,
+ export_format=args.export_format,
+ embedder_model=args.embedder_model,
+ embedder_model_custom=args.embedder_model_custom,
+ upscale_audio=args.upscale_audio,
+ f0_file=args.f0_file,
+ formant_shifting=args.formant_shifting,
+ formant_qfrency=args.formant_qfrency,
+ formant_timbre=args.formant_timbre,
+ sid=args.sid,
+ post_process=args.post_process,
+ reverb=args.reverb,
+ pitch_shift=args.pitch_shift,
+ limiter=args.limiter,
+ gain=args.gain,
+ distortion=args.distortion,
+ chorus=args.chorus,
+ bitcrush=args.bitcrush,
+ clipping=args.clipping,
+ compressor=args.compressor,
+ delay=args.delay,
+ reverb_room_size=args.reverb_room_size,
+ reverb_damping=args.reverb_damping,
+ reverb_wet_gain=args.reverb_wet_gain,
+ reverb_dry_gain=args.reverb_dry_gain,
+ reverb_width=args.reverb_width,
+ reverb_freeze_mode=args.reverb_freeze_mode,
+ pitch_shift_semitones=args.pitch_shift_semitones,
+ limiter_threshold=args.limiter_threshold,
+ limiter_release_time=args.limiter_release_time,
+ gain_db=args.gain_db,
+ distortion_gain=args.distortion_gain,
+ chorus_rate=args.chorus_rate,
+ chorus_depth=args.chorus_depth,
+ chorus_center_delay=args.chorus_center_delay,
+ chorus_feedback=args.chorus_feedback,
+ chorus_mix=args.chorus_mix,
+ bitcrush_bit_depth=args.bitcrush_bit_depth,
+ clipping_threshold=args.clipping_threshold,
+ compressor_threshold=args.compressor_threshold,
+ compressor_ratio=args.compressor_ratio,
+ compressor_attack=args.compressor_attack,
+ compressor_release=args.compressor_release,
+ delay_seconds=args.delay_seconds,
+ delay_feedback=args.delay_feedback,
+ delay_mix=args.delay_mix,
+ )
+ elif args.mode == "batch_infer":
+ run_batch_infer_script(
+ pitch=args.pitch,
+ filter_radius=args.filter_radius,
+ index_rate=args.index_rate,
+ volume_envelope=args.volume_envelope,
+ protect=args.protect,
+ hop_length=args.hop_length,
+ f0_method=args.f0_method,
+ input_folder=args.input_folder,
+ output_folder=args.output_folder,
+ pth_path=args.pth_path,
+ index_path=args.index_path,
+ split_audio=args.split_audio,
+ f0_autotune=args.f0_autotune,
+ f0_autotune_strength=args.f0_autotune_strength,
+ clean_audio=args.clean_audio,
+ clean_strength=args.clean_strength,
+ export_format=args.export_format,
+ embedder_model=args.embedder_model,
+ embedder_model_custom=args.embedder_model_custom,
+ upscale_audio=args.upscale_audio,
+ f0_file=args.f0_file,
+ formant_shifting=args.formant_shifting,
+ formant_qfrency=args.formant_qfrency,
+ formant_timbre=args.formant_timbre,
+ sid=args.sid,
+ post_process=args.post_process,
+ reverb=args.reverb,
+ pitch_shift=args.pitch_shift,
+ limiter=args.limiter,
+ gain=args.gain,
+ distortion=args.distortion,
+ chorus=args.chorus,
+ bitcrush=args.bitcrush,
+ clipping=args.clipping,
+ compressor=args.compressor,
+ delay=args.delay,
+ reverb_room_size=args.reverb_room_size,
+ reverb_damping=args.reverb_damping,
+ reverb_wet_gain=args.reverb_wet_gain,
+ reverb_dry_gain=args.reverb_dry_gain,
+ reverb_width=args.reverb_width,
+ reverb_freeze_mode=args.reverb_freeze_mode,
+ pitch_shift_semitones=args.pitch_shift_semitones,
+ limiter_threshold=args.limiter_threshold,
+ limiter_release_time=args.limiter_release_time,
+ gain_db=args.gain_db,
+ distortion_gain=args.distortion_gain,
+ chorus_rate=args.chorus_rate,
+ chorus_depth=args.chorus_depth,
+ chorus_center_delay=args.chorus_center_delay,
+ chorus_feedback=args.chorus_feedback,
+ chorus_mix=args.chorus_mix,
+ bitcrush_bit_depth=args.bitcrush_bit_depth,
+ clipping_threshold=args.clipping_threshold,
+ compressor_threshold=args.compressor_threshold,
+ compressor_ratio=args.compressor_ratio,
+ compressor_attack=args.compressor_attack,
+ compressor_release=args.compressor_release,
+ delay_seconds=args.delay_seconds,
+ delay_feedback=args.delay_feedback,
+ delay_mix=args.delay_mix,
+ )
+ elif args.mode == "tts":
+ run_tts_script(
+ tts_file=args.tts_file,
+ tts_text=args.tts_text,
+ tts_voice=args.tts_voice,
+ tts_rate=args.tts_rate,
+ pitch=args.pitch,
+ filter_radius=args.filter_radius,
+ index_rate=args.index_rate,
+ volume_envelope=args.volume_envelope,
+ protect=args.protect,
+ hop_length=args.hop_length,
+ f0_method=args.f0_method,
+ input_path=args.input_path,
+ output_path=args.output_path,
+ pth_path=args.pth_path,
+ index_path=args.index_path,
+ split_audio=args.split_audio,
+ f0_autotune=args.f0_autotune,
+ f0_autotune_strength=args.f0_autotune_strength,
+ clean_audio=args.clean_audio,
+ clean_strength=args.clean_strength,
+ export_format=args.export_format,
+ embedder_model=args.embedder_model,
+ embedder_model_custom=args.embedder_model_custom,
+ upscale_audio=args.upscale_audio,
+ f0_file=args.f0_file,
+ )
+ elif args.mode == "preprocess":
+ run_preprocess_script(
+ model_name=args.model_name,
+ dataset_path=args.dataset_path,
+ sample_rate=args.sample_rate,
+ cpu_cores=args.cpu_cores,
+ cut_preprocess=args.cut_preprocess,
+ process_effects=args.process_effects,
+ noise_reduction=args.noise_reduction,
+ clean_strength=args.noise_reduction_strength,
+ )
+ elif args.mode == "extract":
+ run_extract_script(
+ model_name=args.model_name,
+ rvc_version=args.rvc_version,
+ f0_method=args.f0_method,
+ hop_length=args.hop_length,
+ cpu_cores=args.cpu_cores,
+ gpu=args.gpu,
+ sample_rate=args.sample_rate,
+ embedder_model=args.embedder_model,
+ embedder_model_custom=args.embedder_model_custom,
+ )
+ elif args.mode == "train":
+ run_train_script(
+ model_name=args.model_name,
+ rvc_version=args.rvc_version,
+ save_every_epoch=args.save_every_epoch,
+ save_only_latest=args.save_only_latest,
+ save_every_weights=args.save_every_weights,
+ total_epoch=args.total_epoch,
+ sample_rate=args.sample_rate,
+ batch_size=args.batch_size,
+ gpu=args.gpu,
+ pitch_guidance=args.pitch_guidance,
+ overtraining_detector=args.overtraining_detector,
+ overtraining_threshold=args.overtraining_threshold,
+ pretrained=args.pretrained,
+ custom_pretrained=args.custom_pretrained,
+ cleanup=args.cleanup,
+ index_algorithm=args.index_algorithm,
+ cache_data_in_gpu=args.cache_data_in_gpu,
+ g_pretrained_path=args.g_pretrained_path,
+ d_pretrained_path=args.d_pretrained_path,
+ )
+ elif args.mode == "index":
+ run_index_script(
+ model_name=args.model_name,
+ rvc_version=args.rvc_version,
+ index_algorithm=args.index_algorithm,
+ )
+ elif args.mode == "model_extract":
+ run_model_extract_script(
+ pth_path=args.pth_path,
+ model_name=args.model_name,
+ sample_rate=args.sample_rate,
+ pitch_guidance=args.pitch_guidance,
+ rvc_version=args.rvc_version,
+ epoch=args.epoch,
+ step=args.step,
+ )
+ elif args.mode == "model_information":
+ run_model_information_script(
+ pth_path=args.pth_path,
+ )
+ elif args.mode == "model_blender":
+ run_model_blender_script(
+ model_name=args.model_name,
+ pth_path_1=args.pth_path_1,
+ pth_path_2=args.pth_path_2,
+ ratio=args.ratio,
+ )
+ elif args.mode == "tensorboard":
+ run_tensorboard_script()
+ elif args.mode == "download":
+ run_download_script(
+ model_link=args.model_link,
+ )
+ elif args.mode == "prerequisites":
+ run_prerequisites_script(
+ pretraineds_v1_f0=args.pretraineds_v1_f0,
+ pretraineds_v1_nof0=args.pretraineds_v1_nof0,
+ pretraineds_v2_f0=args.pretraineds_v2_f0,
+ pretraineds_v2_nof0=args.pretraineds_v2_nof0,
+ models=args.models,
+ exe=args.exe,
+ )
+ elif args.mode == "audio_analyzer":
+ run_audio_analyzer_script(
+ input_path=args.input_path,
+ )
+ except Exception as error:
+ print(f"An error occurred during execution: {error}")
+
+ import traceback
+
+ traceback.print_exc()
+
+
+if __name__ == "__main__":
+ main()
diff --git a/poetry.lock b/poetry.lock
index 6053162eaf46ff54ca1e1b69275d0989111f1324..ed3ce251e57d243595c3af3ac66b542bea89f445 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -1,5 +1,16 @@
# This file is automatically @generated by Poetry 1.8.4 and should not be changed by hand.
+[[package]]
+name = "absl-py"
+version = "2.1.0"
+description = "Abseil Python Common Libraries, see https://github.com/abseil/abseil-py."
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "absl-py-2.1.0.tar.gz", hash = "sha256:7820790efbb316739cde8b4e19357243fc3608a152024288513dd968d7d959ff"},
+ {file = "absl_py-2.1.0-py3-none-any.whl", hash = "sha256:526a04eadab8b4ee719ce68f204172ead1027549089702d99b9059f129ff1308"},
+]
+
[[package]]
name = "aiofiles"
version = "23.2.1"
@@ -11,6 +22,129 @@ files = [
{file = "aiofiles-23.2.1.tar.gz", hash = "sha256:84ec2218d8419404abcb9f0c02df3f34c6e0a68ed41072acfb1cef5cbc29051a"},
]
+[[package]]
+name = "aiohappyeyeballs"
+version = "2.4.3"
+description = "Happy Eyeballs for asyncio"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "aiohappyeyeballs-2.4.3-py3-none-any.whl", hash = "sha256:8a7a83727b2756f394ab2895ea0765a0a8c475e3c71e98d43d76f22b4b435572"},
+ {file = "aiohappyeyeballs-2.4.3.tar.gz", hash = "sha256:75cf88a15106a5002a8eb1dab212525c00d1f4c0fa96e551c9fbe6f09a621586"},
+]
+
+[[package]]
+name = "aiohttp"
+version = "3.11.7"
+description = "Async http client/server framework (asyncio)"
+optional = false
+python-versions = ">=3.9"
+files = [
+ {file = "aiohttp-3.11.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8bedb1f6cb919af3b6353921c71281b1491f948ca64408871465d889b4ee1b66"},
+ {file = "aiohttp-3.11.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f5022504adab881e2d801a88b748ea63f2a9d130e0b2c430824682a96f6534be"},
+ {file = "aiohttp-3.11.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e22d1721c978a6494adc824e0916f9d187fa57baeda34b55140315fa2f740184"},
+ {file = "aiohttp-3.11.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e993676c71288618eb07e20622572b1250d8713e7e00ab3aabae28cb70f3640d"},
+ {file = "aiohttp-3.11.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e13a05db87d3b241c186d0936808d0e4e12decc267c617d54e9c643807e968b6"},
+ {file = "aiohttp-3.11.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4ba8d043fed7ffa117024d7ba66fdea011c0e7602327c6d73cacaea38abe4491"},
+ {file = "aiohttp-3.11.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dda3ed0a7869d2fa16aa41f9961ade73aa2c2e3b2fcb0a352524e7b744881889"},
+ {file = "aiohttp-3.11.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43bfd25113c1e98aec6c70e26d5f4331efbf4aa9037ba9ad88f090853bf64d7f"},
+ {file = "aiohttp-3.11.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3dd3e7e7c9ef3e7214f014f1ae260892286647b3cf7c7f1b644a568fd410f8ca"},
+ {file = "aiohttp-3.11.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:78c657ece7a73b976905ab9ec8be9ef2df12ed8984c24598a1791c58ce3b4ce4"},
+ {file = "aiohttp-3.11.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:db70a47987e34494b451a334605bee57a126fe8d290511349e86810b4be53b01"},
+ {file = "aiohttp-3.11.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:9e67531370a3b07e49b280c1f8c2df67985c790ad2834d1b288a2f13cd341c5f"},
+ {file = "aiohttp-3.11.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9202f184cc0582b1db15056f2225ab4c1e3dac4d9ade50dd0613ac3c46352ac2"},
+ {file = "aiohttp-3.11.7-cp310-cp310-win32.whl", hash = "sha256:2257bdd5cf54a4039a4337162cd8048f05a724380a2283df34620f55d4e29341"},
+ {file = "aiohttp-3.11.7-cp310-cp310-win_amd64.whl", hash = "sha256:b7215bf2b53bc6cb35808149980c2ae80a4ae4e273890ac85459c014d5aa60ac"},
+ {file = "aiohttp-3.11.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cea52d11e02123f125f9055dfe0ccf1c3857225fb879e4a944fae12989e2aef2"},
+ {file = "aiohttp-3.11.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3ce18f703b7298e7f7633efd6a90138d99a3f9a656cb52c1201e76cb5d79cf08"},
+ {file = "aiohttp-3.11.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:670847ee6aeb3a569cd7cdfbe0c3bec1d44828bbfbe78c5d305f7f804870ef9e"},
+ {file = "aiohttp-3.11.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4dda726f89bfa5c465ba45b76515135a3ece0088dfa2da49b8bb278f3bdeea12"},
+ {file = "aiohttp-3.11.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c25b74a811dba37c7ea6a14d99eb9402d89c8d739d50748a75f3cf994cf19c43"},
+ {file = "aiohttp-3.11.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5522ee72f95661e79db691310290c4618b86dff2d9b90baedf343fd7a08bf79"},
+ {file = "aiohttp-3.11.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fbf41a6bbc319a7816ae0f0177c265b62f2a59ad301a0e49b395746eb2a9884"},
+ {file = "aiohttp-3.11.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:59ee1925b5a5efdf6c4e7be51deee93984d0ac14a6897bd521b498b9916f1544"},
+ {file = "aiohttp-3.11.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:24054fce8c6d6f33a3e35d1c603ef1b91bbcba73e3f04a22b4f2f27dac59b347"},
+ {file = "aiohttp-3.11.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:351849aca2c6f814575c1a485c01c17a4240413f960df1bf9f5deb0003c61a53"},
+ {file = "aiohttp-3.11.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:12724f3a211fa243570e601f65a8831372caf1a149d2f1859f68479f07efec3d"},
+ {file = "aiohttp-3.11.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:7ea4490360b605804bea8173d2d086b6c379d6bb22ac434de605a9cbce006e7d"},
+ {file = "aiohttp-3.11.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e0bf378db07df0a713a1e32381a1b277e62ad106d0dbe17b5479e76ec706d720"},
+ {file = "aiohttp-3.11.7-cp311-cp311-win32.whl", hash = "sha256:cd8d62cab363dfe713067027a5adb4907515861f1e4ce63e7be810b83668b847"},
+ {file = "aiohttp-3.11.7-cp311-cp311-win_amd64.whl", hash = "sha256:bf0e6cce113596377cadda4e3ac5fb89f095bd492226e46d91b4baef1dd16f60"},
+ {file = "aiohttp-3.11.7-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:4bb7493c3e3a36d3012b8564bd0e2783259ddd7ef3a81a74f0dbfa000fce48b7"},
+ {file = "aiohttp-3.11.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e143b0ef9cb1a2b4f74f56d4fbe50caa7c2bb93390aff52f9398d21d89bc73ea"},
+ {file = "aiohttp-3.11.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f7c58a240260822dc07f6ae32a0293dd5bccd618bb2d0f36d51c5dbd526f89c0"},
+ {file = "aiohttp-3.11.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d20cfe63a1c135d26bde8c1d0ea46fd1200884afbc523466d2f1cf517d1fe33"},
+ {file = "aiohttp-3.11.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12e4d45847a174f77b2b9919719203769f220058f642b08504cf8b1cf185dacf"},
+ {file = "aiohttp-3.11.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cf4efa2d01f697a7dbd0509891a286a4af0d86902fc594e20e3b1712c28c0106"},
+ {file = "aiohttp-3.11.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ee6a4cdcbf54b8083dc9723cdf5f41f722c00db40ccf9ec2616e27869151129"},
+ {file = "aiohttp-3.11.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c6095aaf852c34f42e1bd0cf0dc32d1e4b48a90bfb5054abdbb9d64b36acadcb"},
+ {file = "aiohttp-3.11.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1cf03d27885f8c5ebf3993a220cc84fc66375e1e6e812731f51aab2b2748f4a6"},
+ {file = "aiohttp-3.11.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:1a17f6a230f81eb53282503823f59d61dff14fb2a93847bf0399dc8e87817307"},
+ {file = "aiohttp-3.11.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:481f10a1a45c5f4c4a578bbd74cff22eb64460a6549819242a87a80788461fba"},
+ {file = "aiohttp-3.11.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:db37248535d1ae40735d15bdf26ad43be19e3d93ab3f3dad8507eb0f85bb8124"},
+ {file = "aiohttp-3.11.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9d18a8b44ec8502a7fde91446cd9c9b95ce7c49f1eacc1fb2358b8907d4369fd"},
+ {file = "aiohttp-3.11.7-cp312-cp312-win32.whl", hash = "sha256:3d1c9c15d3999107cbb9b2d76ca6172e6710a12fda22434ee8bd3f432b7b17e8"},
+ {file = "aiohttp-3.11.7-cp312-cp312-win_amd64.whl", hash = "sha256:018f1b04883a12e77e7fc161934c0f298865d3a484aea536a6a2ca8d909f0ba0"},
+ {file = "aiohttp-3.11.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:241a6ca732d2766836d62c58c49ca7a93d08251daef0c1e3c850df1d1ca0cbc4"},
+ {file = "aiohttp-3.11.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:aa3705a8d14de39898da0fbad920b2a37b7547c3afd2a18b9b81f0223b7d0f68"},
+ {file = "aiohttp-3.11.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9acfc7f652b31853eed3b92095b0acf06fd5597eeea42e939bd23a17137679d5"},
+ {file = "aiohttp-3.11.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcefcf2915a2dbdbce37e2fc1622129a1918abfe3d06721ce9f6cdac9b6d2eaa"},
+ {file = "aiohttp-3.11.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c1f6490dd1862af5aae6cfcf2a274bffa9a5b32a8f5acb519a7ecf5a99a88866"},
+ {file = "aiohttp-3.11.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1ac5462582d6561c1c1708853a9faf612ff4e5ea5e679e99be36143d6eabd8e"},
+ {file = "aiohttp-3.11.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c1a6309005acc4b2bcc577ba3b9169fea52638709ffacbd071f3503264620da"},
+ {file = "aiohttp-3.11.7-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f5b973cce96793725ef63eb449adfb74f99c043c718acb76e0d2a447ae369962"},
+ {file = "aiohttp-3.11.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ce91a24aac80de6be8512fb1c4838a9881aa713f44f4e91dd7bb3b34061b497d"},
+ {file = "aiohttp-3.11.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:875f7100ce0e74af51d4139495eec4025affa1a605280f23990b6434b81df1bd"},
+ {file = "aiohttp-3.11.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c171fc35d3174bbf4787381716564042a4cbc008824d8195eede3d9b938e29a8"},
+ {file = "aiohttp-3.11.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:ee9afa1b0d2293c46954f47f33e150798ad68b78925e3710044e0d67a9487791"},
+ {file = "aiohttp-3.11.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8360c7cc620abb320e1b8d603c39095101391a82b1d0be05fb2225471c9c5c52"},
+ {file = "aiohttp-3.11.7-cp313-cp313-win32.whl", hash = "sha256:7a9318da4b4ada9a67c1dd84d1c0834123081e746bee311a16bb449f363d965e"},
+ {file = "aiohttp-3.11.7-cp313-cp313-win_amd64.whl", hash = "sha256:fc6da202068e0a268e298d7cd09b6e9f3997736cd9b060e2750963754552a0a9"},
+ {file = "aiohttp-3.11.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:17829f37c0d31d89aa6b8b010475a10233774771f9b6dc2cc352ea4f8ce95d9a"},
+ {file = "aiohttp-3.11.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d6177077a31b1aecfc3c9070bd2f11419dbb4a70f30f4c65b124714f525c2e48"},
+ {file = "aiohttp-3.11.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:badda65ac99555791eed75e234afb94686ed2317670c68bff8a4498acdaee935"},
+ {file = "aiohttp-3.11.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0de6466b9d742b4ee56fe1b2440706e225eb48c77c63152b1584864a236e7a50"},
+ {file = "aiohttp-3.11.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:04b0cc74d5a882c9dacaeeccc1444f0233212b6f5be8bc90833feef1e1ce14b9"},
+ {file = "aiohttp-3.11.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c7af3e50e5903d21d7b935aceed901cc2475463bc16ddd5587653548661fdb"},
+ {file = "aiohttp-3.11.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c63f898f683d1379b9be5afc3dd139e20b30b0b1e0bf69a3fc3681f364cf1629"},
+ {file = "aiohttp-3.11.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fdadc3f6a32d6eca45f9a900a254757fd7855dfb2d8f8dcf0e88f0fae3ff8eb1"},
+ {file = "aiohttp-3.11.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d329300fb23e14ed1f8c6d688dfd867d1dcc3b1d7cd49b7f8c5b44e797ce0932"},
+ {file = "aiohttp-3.11.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:5578cf40440eafcb054cf859964bc120ab52ebe0e0562d2b898126d868749629"},
+ {file = "aiohttp-3.11.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:7b2f8107a3c329789f3c00b2daad0e35f548d0a55cda6291579136622099a46e"},
+ {file = "aiohttp-3.11.7-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:43dd89a6194f6ab02a3fe36b09e42e2df19c211fc2050ce37374d96f39604997"},
+ {file = "aiohttp-3.11.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d2fa6fc7cc865d26ff42480ac9b52b8c9b7da30a10a6442a9cdf429de840e949"},
+ {file = "aiohttp-3.11.7-cp39-cp39-win32.whl", hash = "sha256:a7d9a606355655617fee25dd7e54d3af50804d002f1fd3118dd6312d26692d70"},
+ {file = "aiohttp-3.11.7-cp39-cp39-win_amd64.whl", hash = "sha256:53c921b58fdc6485d6b2603e0132bb01cd59b8f0620ffc0907f525e0ba071687"},
+ {file = "aiohttp-3.11.7.tar.gz", hash = "sha256:01a8aca4af3da85cea5c90141d23f4b0eee3cbecfd33b029a45a80f28c66c668"},
+]
+
+[package.dependencies]
+aiohappyeyeballs = ">=2.3.0"
+aiosignal = ">=1.1.2"
+async-timeout = {version = ">=4.0,<6.0", markers = "python_version < \"3.11\""}
+attrs = ">=17.3.0"
+frozenlist = ">=1.1.1"
+multidict = ">=4.5,<7.0"
+propcache = ">=0.2.0"
+yarl = ">=1.17.0,<2.0"
+
+[package.extras]
+speedups = ["Brotli", "aiodns (>=3.2.0)", "brotlicffi"]
+
+[[package]]
+name = "aiosignal"
+version = "1.3.1"
+description = "aiosignal: a list of registered asynchronous callbacks"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"},
+ {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"},
+]
+
+[package.dependencies]
+frozenlist = ">=1.1.0"
+
[[package]]
name = "annotated-types"
version = "0.7.0"
@@ -34,8 +168,10 @@ files = [
]
[package.dependencies]
+exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""}
idna = ">=2.8"
sniffio = ">=1.1"
+typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""}
[package.extras]
doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"]
@@ -71,15 +207,124 @@ six = ">=1.12.0"
astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"]
test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"]
+[[package]]
+name = "async-timeout"
+version = "5.0.1"
+description = "Timeout context manager for asyncio programs"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c"},
+ {file = "async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"},
+]
+
+[[package]]
+name = "attrs"
+version = "24.2.0"
+description = "Classes Without Boilerplate"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "attrs-24.2.0-py3-none-any.whl", hash = "sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2"},
+ {file = "attrs-24.2.0.tar.gz", hash = "sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346"},
+]
+
+[package.extras]
+benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
+cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
+dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
+docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier (<24.7)"]
+tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
+tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"]
+
+[[package]]
+name = "audioread"
+version = "3.0.1"
+description = "Multi-library, cross-platform audio decoding."
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "audioread-3.0.1-py3-none-any.whl", hash = "sha256:4cdce70b8adc0da0a3c9e0d85fb10b3ace30fbdf8d1670fd443929b61d117c33"},
+ {file = "audioread-3.0.1.tar.gz", hash = "sha256:ac5460a5498c48bdf2e8e767402583a4dcd13f4414d286f42ce4379e8b35066d"},
+]
+
+[package.extras]
+test = ["tox"]
+
+[[package]]
+name = "babel"
+version = "2.16.0"
+description = "Internationalization utilities"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "babel-2.16.0-py3-none-any.whl", hash = "sha256:368b5b98b37c06b7daf6696391c3240c938b37767d4584413e8438c5c435fa8b"},
+ {file = "babel-2.16.0.tar.gz", hash = "sha256:d1f3554ca26605fe173f3de0c65f750f5a42f924499bf134de6423582298e316"},
+]
+
+[package.extras]
+dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"]
+
+[[package]]
+name = "beautifulsoup4"
+version = "4.12.3"
+description = "Screen-scraping library"
+optional = false
+python-versions = ">=3.6.0"
+files = [
+ {file = "beautifulsoup4-4.12.3-py3-none-any.whl", hash = "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed"},
+ {file = "beautifulsoup4-4.12.3.tar.gz", hash = "sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051"},
+]
+
+[package.dependencies]
+soupsieve = ">1.2"
+
+[package.extras]
+cchardet = ["cchardet"]
+chardet = ["chardet"]
+charset-normalizer = ["charset-normalizer"]
+html5lib = ["html5lib"]
+lxml = ["lxml"]
+
+[[package]]
+name = "bibtexparser"
+version = "2.0.0b7"
+description = "Bibtex parser for python 3"
+optional = false
+python-versions = "*"
+files = [
+ {file = "bibtexparser-2.0.0b7-py3-none-any.whl", hash = "sha256:1f4ac78cc6fbfdcc7ce432105fef127688c78ce60324363955fc11feb32964cd"},
+ {file = "bibtexparser-2.0.0b7.tar.gz", hash = "sha256:9e0034dd16e1961fbc895b108f49bdef6f988b5d48782b62c9492ee8a281efad"},
+]
+
+[package.dependencies]
+pylatexenc = ">=2.10"
+
+[package.extras]
+docs = ["sphinx"]
+lint = ["black (==23.3.0)", "docstr-coverage (==2.2.0)", "isort (==5.12.0)"]
+test = ["jupyter", "pytest", "pytest-cov", "pytest-xdist"]
+
+[[package]]
+name = "blinker"
+version = "1.9.0"
+description = "Fast, simple object-to-object and broadcast signaling"
+optional = false
+python-versions = ">=3.9"
+files = [
+ {file = "blinker-1.9.0-py3-none-any.whl", hash = "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc"},
+ {file = "blinker-1.9.0.tar.gz", hash = "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf"},
+]
+
[[package]]
name = "certifi"
-version = "2024.8.30"
+version = "2023.7.22"
description = "Python package for providing Mozilla's CA Bundle."
optional = false
python-versions = ">=3.6"
files = [
- {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"},
- {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"},
+ {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"},
+ {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"},
]
[[package]]
@@ -172,6 +417,17 @@ files = [
{file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"},
]
+[[package]]
+name = "chardet"
+version = "5.2.0"
+description = "Universal encoding detector for Python 3"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970"},
+ {file = "chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7"},
+]
+
[[package]]
name = "charset-normalizer"
version = "3.4.0"
@@ -317,6 +573,33 @@ click = ">=7.0,<9"
[package.extras]
dev = ["mypy", "pytest"]
+[[package]]
+name = "clldutils"
+version = "3.24.0"
+description = "Utilities for programmatic data curation"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "clldutils-3.24.0-py2.py3-none-any.whl", hash = "sha256:8da23dfc42c9867c4ad06eca0463a784ec08a880012a4446e10318183671bdd2"},
+ {file = "clldutils-3.24.0.tar.gz", hash = "sha256:c4a9faa6a5b849b9b766767c67991ae46dec555f76624240b956bb926e1e13ff"},
+]
+
+[package.dependencies]
+attrs = ">=18.1.0"
+bibtexparser = ">=2.0.0b4"
+colorlog = "*"
+lxml = "*"
+markdown = "*"
+markupsafe = "*"
+pylatexenc = "*"
+python-dateutil = "*"
+tabulate = ">=0.7.7"
+
+[package.extras]
+dev = ["build", "flake8", "twine", "wheel"]
+docs = ["sphinx (<7)", "sphinx-autodoc-typehints", "sphinx-rtd-theme"]
+test = ["pytest (>=5)", "pytest-cov", "pytest-mock", "tox"]
+
[[package]]
name = "colorama"
version = "0.4.6"
@@ -328,6 +611,23 @@ files = [
{file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
]
+[[package]]
+name = "colorlog"
+version = "6.9.0"
+description = "Add colours to the output of Python's logging module."
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "colorlog-6.9.0-py3-none-any.whl", hash = "sha256:5906e71acd67cb07a71e779c47c4bcb45fb8c2993eebe9e5adcd6a6f1b283eff"},
+ {file = "colorlog-6.9.0.tar.gz", hash = "sha256:bfba54a1b93b94f54e1f4fe48395725a3d92fd2a4af702f6bd70946bdc0c6ac2"},
+]
+
+[package.dependencies]
+colorama = {version = "*", markers = "sys_platform == \"win32\""}
+
+[package.extras]
+development = ["black", "flake8", "mypy", "pytest", "types-colorama"]
+
[[package]]
name = "comm"
version = "0.2.2"
@@ -345,6 +645,79 @@ traitlets = ">=4"
[package.extras]
test = ["pytest"]
+[[package]]
+name = "contourpy"
+version = "1.3.1"
+description = "Python library for calculating contours of 2D quadrilateral grids"
+optional = false
+python-versions = ">=3.10"
+files = [
+ {file = "contourpy-1.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a045f341a77b77e1c5de31e74e966537bba9f3c4099b35bf4c2e3939dd54cdab"},
+ {file = "contourpy-1.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:500360b77259914f7805af7462e41f9cb7ca92ad38e9f94d6c8641b089338124"},
+ {file = "contourpy-1.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2f926efda994cdf3c8d3fdb40b9962f86edbc4457e739277b961eced3d0b4c1"},
+ {file = "contourpy-1.3.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:adce39d67c0edf383647a3a007de0a45fd1b08dedaa5318404f1a73059c2512b"},
+ {file = "contourpy-1.3.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abbb49fb7dac584e5abc6636b7b2a7227111c4f771005853e7d25176daaf8453"},
+ {file = "contourpy-1.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0cffcbede75c059f535725c1680dfb17b6ba8753f0c74b14e6a9c68c29d7ea3"},
+ {file = "contourpy-1.3.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ab29962927945d89d9b293eabd0d59aea28d887d4f3be6c22deaefbb938a7277"},
+ {file = "contourpy-1.3.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:974d8145f8ca354498005b5b981165b74a195abfae9a8129df3e56771961d595"},
+ {file = "contourpy-1.3.1-cp310-cp310-win32.whl", hash = "sha256:ac4578ac281983f63b400f7fe6c101bedc10651650eef012be1ccffcbacf3697"},
+ {file = "contourpy-1.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:174e758c66bbc1c8576992cec9599ce8b6672b741b5d336b5c74e35ac382b18e"},
+ {file = "contourpy-1.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3e8b974d8db2c5610fb4e76307e265de0edb655ae8169e8b21f41807ccbeec4b"},
+ {file = "contourpy-1.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:20914c8c973f41456337652a6eeca26d2148aa96dd7ac323b74516988bea89fc"},
+ {file = "contourpy-1.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19d40d37c1c3a4961b4619dd9d77b12124a453cc3d02bb31a07d58ef684d3d86"},
+ {file = "contourpy-1.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:113231fe3825ebf6f15eaa8bc1f5b0ddc19d42b733345eae0934cb291beb88b6"},
+ {file = "contourpy-1.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4dbbc03a40f916a8420e420d63e96a1258d3d1b58cbdfd8d1f07b49fcbd38e85"},
+ {file = "contourpy-1.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a04ecd68acbd77fa2d39723ceca4c3197cb2969633836ced1bea14e219d077c"},
+ {file = "contourpy-1.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c414fc1ed8ee1dbd5da626cf3710c6013d3d27456651d156711fa24f24bd1291"},
+ {file = "contourpy-1.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:31c1b55c1f34f80557d3830d3dd93ba722ce7e33a0b472cba0ec3b6535684d8f"},
+ {file = "contourpy-1.3.1-cp311-cp311-win32.whl", hash = "sha256:f611e628ef06670df83fce17805c344710ca5cde01edfdc72751311da8585375"},
+ {file = "contourpy-1.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:b2bdca22a27e35f16794cf585832e542123296b4687f9fd96822db6bae17bfc9"},
+ {file = "contourpy-1.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0ffa84be8e0bd33410b17189f7164c3589c229ce5db85798076a3fa136d0e509"},
+ {file = "contourpy-1.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805617228ba7e2cbbfb6c503858e626ab528ac2a32a04a2fe88ffaf6b02c32bc"},
+ {file = "contourpy-1.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ade08d343436a94e633db932e7e8407fe7de8083967962b46bdfc1b0ced39454"},
+ {file = "contourpy-1.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:47734d7073fb4590b4a40122b35917cd77be5722d80683b249dac1de266aac80"},
+ {file = "contourpy-1.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2ba94a401342fc0f8b948e57d977557fbf4d515f03c67682dd5c6191cb2d16ec"},
+ {file = "contourpy-1.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efa874e87e4a647fd2e4f514d5e91c7d493697127beb95e77d2f7561f6905bd9"},
+ {file = "contourpy-1.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1bf98051f1045b15c87868dbaea84f92408337d4f81d0e449ee41920ea121d3b"},
+ {file = "contourpy-1.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:61332c87493b00091423e747ea78200659dc09bdf7fd69edd5e98cef5d3e9a8d"},
+ {file = "contourpy-1.3.1-cp312-cp312-win32.whl", hash = "sha256:e914a8cb05ce5c809dd0fe350cfbb4e881bde5e2a38dc04e3afe1b3e58bd158e"},
+ {file = "contourpy-1.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:08d9d449a61cf53033612cb368f3a1b26cd7835d9b8cd326647efe43bca7568d"},
+ {file = "contourpy-1.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a761d9ccfc5e2ecd1bf05534eda382aa14c3e4f9205ba5b1684ecfe400716ef2"},
+ {file = "contourpy-1.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:523a8ee12edfa36f6d2a49407f705a6ef4c5098de4f498619787e272de93f2d5"},
+ {file = "contourpy-1.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece6df05e2c41bd46776fbc712e0996f7c94e0d0543af1656956d150c4ca7c81"},
+ {file = "contourpy-1.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:573abb30e0e05bf31ed067d2f82500ecfdaec15627a59d63ea2d95714790f5c2"},
+ {file = "contourpy-1.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9fa36448e6a3a1a9a2ba23c02012c43ed88905ec80163f2ffe2421c7192a5d7"},
+ {file = "contourpy-1.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ea9924d28fc5586bf0b42d15f590b10c224117e74409dd7a0be3b62b74a501c"},
+ {file = "contourpy-1.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5b75aa69cb4d6f137b36f7eb2ace9280cfb60c55dc5f61c731fdf6f037f958a3"},
+ {file = "contourpy-1.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:041b640d4ec01922083645a94bb3b2e777e6b626788f4095cf21abbe266413c1"},
+ {file = "contourpy-1.3.1-cp313-cp313-win32.whl", hash = "sha256:36987a15e8ace5f58d4d5da9dca82d498c2bbb28dff6e5d04fbfcc35a9cb3a82"},
+ {file = "contourpy-1.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:a7895f46d47671fa7ceec40f31fae721da51ad34bdca0bee83e38870b1f47ffd"},
+ {file = "contourpy-1.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9ddeb796389dadcd884c7eb07bd14ef12408aaae358f0e2ae24114d797eede30"},
+ {file = "contourpy-1.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:19c1555a6801c2f084c7ddc1c6e11f02eb6a6016ca1318dd5452ba3f613a1751"},
+ {file = "contourpy-1.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:841ad858cff65c2c04bf93875e384ccb82b654574a6d7f30453a04f04af71342"},
+ {file = "contourpy-1.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4318af1c925fb9a4fb190559ef3eec206845f63e80fb603d47f2d6d67683901c"},
+ {file = "contourpy-1.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:14c102b0eab282427b662cb590f2e9340a9d91a1c297f48729431f2dcd16e14f"},
+ {file = "contourpy-1.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05e806338bfeaa006acbdeba0ad681a10be63b26e1b17317bfac3c5d98f36cda"},
+ {file = "contourpy-1.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4d76d5993a34ef3df5181ba3c92fabb93f1eaa5729504fb03423fcd9f3177242"},
+ {file = "contourpy-1.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:89785bb2a1980c1bd87f0cb1517a71cde374776a5f150936b82580ae6ead44a1"},
+ {file = "contourpy-1.3.1-cp313-cp313t-win32.whl", hash = "sha256:8eb96e79b9f3dcadbad2a3891672f81cdcab7f95b27f28f1c67d75f045b6b4f1"},
+ {file = "contourpy-1.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:287ccc248c9e0d0566934e7d606201abd74761b5703d804ff3df8935f523d546"},
+ {file = "contourpy-1.3.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b457d6430833cee8e4b8e9b6f07aa1c161e5e0d52e118dc102c8f9bd7dd060d6"},
+ {file = "contourpy-1.3.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb76c1a154b83991a3cbbf0dfeb26ec2833ad56f95540b442c73950af2013750"},
+ {file = "contourpy-1.3.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:44a29502ca9c7b5ba389e620d44f2fbe792b1fb5734e8b931ad307071ec58c53"},
+ {file = "contourpy-1.3.1.tar.gz", hash = "sha256:dfd97abd83335045a913e3bcc4a09c0ceadbe66580cf573fe961f4a825efa699"},
+]
+
+[package.dependencies]
+numpy = ">=1.23"
+
+[package.extras]
+bokeh = ["bokeh", "selenium"]
+docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"]
+mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.11.1)", "types-Pillow"]
+test = ["Pillow", "contourpy[test-no-images]", "matplotlib"]
+test-no-images = ["pytest", "pytest-cov", "pytest-rerunfailures", "pytest-xdist", "wurlitzer"]
+
[[package]]
name = "coverage"
version = "7.6.8"
@@ -416,9 +789,56 @@ files = [
{file = "coverage-7.6.8.tar.gz", hash = "sha256:8b2b8503edb06822c86d82fa64a4a5cb0760bb8f31f26e138ec743f422f37cfc"},
]
+[package.dependencies]
+tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""}
+
[package.extras]
toml = ["tomli"]
+[[package]]
+name = "csvw"
+version = "3.5.1"
+description = "Python library to work with CSVW described tabular data"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "csvw-3.5.1-py2.py3-none-any.whl", hash = "sha256:8dd3864aae51bfd943713a62ec2c6688d3f406a9627b5f16de2479b1281febe5"},
+ {file = "csvw-3.5.1.tar.gz", hash = "sha256:e13dfcbf56a51f66bd4c6b442b8b32b3fee4b615dcd9436149832b41572938f3"},
+]
+
+[package.dependencies]
+attrs = ">=18.1"
+babel = "*"
+colorama = "*"
+isodate = "*"
+jsonschema = "*"
+language-tags = "*"
+python-dateutil = "*"
+rdflib = "*"
+requests = "*"
+rfc3986 = "<2"
+uritemplate = ">=3.0.0"
+
+[package.extras]
+dev = ["build", "flake8", "twine", "wheel"]
+docs = ["sphinx (<7)", "sphinx-autodoc-typehints", "sphinx-rtd-theme"]
+test = ["frictionless", "pytest (>=5)", "pytest-cov", "pytest-mock", "requests-mock"]
+
+[[package]]
+name = "cycler"
+version = "0.12.1"
+description = "Composable style cycles"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"},
+ {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"},
+]
+
+[package.extras]
+docs = ["ipython", "matplotlib", "numpydoc", "sphinx"]
+tests = ["pytest", "pytest-cov", "pytest-xdist"]
+
[[package]]
name = "debugpy"
version = "1.8.9"
@@ -476,6 +896,60 @@ files = [
{file = "distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"},
]
+[[package]]
+name = "dlinfo"
+version = "1.2.1"
+description = "Python wrapper for libc's dlinfo and dyld_find on Mac"
+optional = false
+python-versions = "*"
+files = [
+ {file = "dlinfo-1.2.1-py3-none-any.whl", hash = "sha256:a97d7cc66d997b4ac491f0e8068eb324790994834951a9beb5a4619835b361d9"},
+ {file = "dlinfo-1.2.1.tar.gz", hash = "sha256:5f6f43b47f3aa5fe12bd347cf536dc8fca6068c61a0a260e408bec7f6eb4bd38"},
+]
+
+[[package]]
+name = "edge-tts"
+version = "6.1.9"
+description = "Microsoft Edge's TTS"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "edge-tts-6.1.9.tar.gz", hash = "sha256:296c05a0f96fbc26c226ad266266ccb494ed2ce1c5bb27d4d99356506623ca36"},
+ {file = "edge_tts-6.1.9-py3-none-any.whl", hash = "sha256:21214164cfc008172990da495a41afce308acb3b3ab75c9371dc750e86b1f9f9"},
+]
+
+[package.dependencies]
+aiohttp = ">=3.8.0"
+certifi = "2023.07.22"
+
+[package.extras]
+dev = ["black", "isort", "mypy", "pylint"]
+
+[[package]]
+name = "einops"
+version = "0.8.0"
+description = "A new flavour of deep learning operations"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "einops-0.8.0-py3-none-any.whl", hash = "sha256:9572fb63046264a862693b0a87088af3bdc8c068fde03de63453cbbde245465f"},
+ {file = "einops-0.8.0.tar.gz", hash = "sha256:63486517fed345712a8385c100cb279108d9d47e6ae59099b07657e983deae85"},
+]
+
+[[package]]
+name = "exceptiongroup"
+version = "1.2.2"
+description = "Backport of PEP 654 (exception groups)"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"},
+ {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"},
+]
+
+[package.extras]
+test = ["pytest (>=6)"]
+
[[package]]
name = "executing"
version = "2.1.0"
@@ -490,20 +964,54 @@ files = [
[package.extras]
tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"]
+[[package]]
+name = "faiss-cpu"
+version = "1.7.3"
+description = "A library for efficient similarity search and clustering of dense vectors."
+optional = false
+python-versions = "*"
+files = [
+ {file = "faiss-cpu-1.7.3.tar.gz", hash = "sha256:cb71fe3f2934732d157d9d8cfb6ed2dd4020a0065571c84842ff6a3f0beab310"},
+ {file = "faiss_cpu-1.7.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:343f025e0846239d987d0c719772387ad685b74e5ef62b2e5616cabef9062729"},
+ {file = "faiss_cpu-1.7.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8b7b1cf693d7c24b5a633ff024717bd715fec501af4854357da0805b4899bcec"},
+ {file = "faiss_cpu-1.7.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c37e5fc0a266839844798a53dd42dd6afbee0c5905611f3f278297053fccbd7"},
+ {file = "faiss_cpu-1.7.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0628f7b0c6263ef4431995bb4f5f39833f999e96e6663935cbf0a1f2243dc4ac"},
+ {file = "faiss_cpu-1.7.3-cp310-cp310-win_amd64.whl", hash = "sha256:e22d1887c617156a673665c913ee82a30bfc1a3bc939ba8500b61328bce5a625"},
+ {file = "faiss_cpu-1.7.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6d411449a5f3c3abfcafadaac3190ab1ab206023fc9110da86649506dcbe8a27"},
+ {file = "faiss_cpu-1.7.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a10ea8622908f9f9ca4003e66da809dfad4af5c7d9fb7f582722d703bbc6c8bd"},
+ {file = "faiss_cpu-1.7.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c5ced43ae058a62f63b12194ec9aa4c34066b0ea813ecbd936c65b7d52848c8"},
+ {file = "faiss_cpu-1.7.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3df6371012248dea8e9509949e2d2c6d73dea7c1bdaa4ba4563eb1c3cd8021a6"},
+ {file = "faiss_cpu-1.7.3-cp311-cp311-win_amd64.whl", hash = "sha256:8b6ff7854c3f46104718c6b34e81cd48c156d970dd87703c5122ca90217bb8dc"},
+ {file = "faiss_cpu-1.7.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ab6314a8fbcce11dc3ecb6f48dda8c4ec274ed11c1f336f599f480bf0561442c"},
+ {file = "faiss_cpu-1.7.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:877c0bbf4c4a1806d88e091aba4c91ff3fa35c3ede5663b7fafc5b39247a369e"},
+ {file = "faiss_cpu-1.7.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6f199be10d30ecc6ed65350931006eca01b7bb8faa27d63069318eea0f6a0c1"},
+ {file = "faiss_cpu-1.7.3-cp37-cp37m-win_amd64.whl", hash = "sha256:1ca2b7cdbfdcc6a2e8fa75a09594916b50ec8260913ca48334dc3ce797179b5f"},
+ {file = "faiss_cpu-1.7.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7b3f91856c19cfb8464178bab7e8ea94a391f6947b556be6754f9fc10b3c25fb"},
+ {file = "faiss_cpu-1.7.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7a238a0ef4d36c614d6f60e1ea308288b3920091638a3687f708de6071d007c1"},
+ {file = "faiss_cpu-1.7.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:af53bee502c629eaaaf8b5ec648484a726be0fd2768ad4ef2bd4b829384b2682"},
+ {file = "faiss_cpu-1.7.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:441d1c305595d925138f2cde63dabe8c10ee05fc8ad66bf750e278a7e8c409bd"},
+ {file = "faiss_cpu-1.7.3-cp38-cp38-win_amd64.whl", hash = "sha256:2766cc14b9004c1aae3b3943e693c3a9566eb1a25168b681981f9048276fe1e7"},
+ {file = "faiss_cpu-1.7.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:20ef191bb6164c8e794b11d20427568a75d15980b6d66732071e9aa57ea06e2d"},
+ {file = "faiss_cpu-1.7.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c57c293c4682066955626c2a2956be9a3b92594f69ed1a33abd72260a6911b69"},
+ {file = "faiss_cpu-1.7.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd128170446ff3c3e28d89e813d32cd04f17fa3025794778a01a0d81524275dc"},
+ {file = "faiss_cpu-1.7.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a14d832b5361ce9af21977eb1dcdebe23b9edcc12aad40316df7ca1bd86bc6b5"},
+ {file = "faiss_cpu-1.7.3-cp39-cp39-win_amd64.whl", hash = "sha256:52df8895c5e59d1c9eda368a63790381a6f7fceddb22bed08f9c90a706d8a148"},
+]
+
[[package]]
name = "fastapi"
-version = "0.115.5"
+version = "0.112.4"
description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production"
optional = false
python-versions = ">=3.8"
files = [
- {file = "fastapi-0.115.5-py3-none-any.whl", hash = "sha256:596b95adbe1474da47049e802f9a65ab2ffa9c2b07e7efee70eb8a66c9f2f796"},
- {file = "fastapi-0.115.5.tar.gz", hash = "sha256:0e7a4d0dc0d01c68df21887cce0945e72d3c48b9f4f79dfe7a7d53aa08fbb289"},
+ {file = "fastapi-0.112.4-py3-none-any.whl", hash = "sha256:6d4f9c3301825d4620665cace8e2bc34e303f61c05a5382d1d61a048ea7f2f37"},
+ {file = "fastapi-0.112.4.tar.gz", hash = "sha256:b1f72e1f72afe7902ccd639ba320abb5d57a309804f45c10ab0ce3693cadeb33"},
]
[package.dependencies]
pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0"
-starlette = ">=0.40.0,<0.42.0"
+starlette = ">=0.37.2,<0.39.0"
typing-extensions = ">=4.8.0"
[package.extras]
@@ -537,6 +1045,202 @@ docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.
testing = ["covdefaults (>=2.3)", "coverage (>=7.6.1)", "diff-cover (>=9.2)", "pytest (>=8.3.3)", "pytest-asyncio (>=0.24)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.26.4)"]
typing = ["typing-extensions (>=4.12.2)"]
+[[package]]
+name = "flask"
+version = "3.1.0"
+description = "A simple framework for building complex web applications."
+optional = false
+python-versions = ">=3.9"
+files = [
+ {file = "flask-3.1.0-py3-none-any.whl", hash = "sha256:d667207822eb83f1c4b50949b1623c8fc8d51f2341d65f72e1a1815397551136"},
+ {file = "flask-3.1.0.tar.gz", hash = "sha256:5f873c5184c897c8d9d1b05df1e3d01b14910ce69607a117bd3277098a5836ac"},
+]
+
+[package.dependencies]
+blinker = ">=1.9"
+click = ">=8.1.3"
+itsdangerous = ">=2.2"
+Jinja2 = ">=3.1.2"
+Werkzeug = ">=3.1"
+
+[package.extras]
+async = ["asgiref (>=3.2)"]
+dotenv = ["python-dotenv"]
+
+[[package]]
+name = "fonttools"
+version = "4.55.0"
+description = "Tools to manipulate font files"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "fonttools-4.55.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:51c029d4c0608a21a3d3d169dfc3fb776fde38f00b35ca11fdab63ba10a16f61"},
+ {file = "fonttools-4.55.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bca35b4e411362feab28e576ea10f11268b1aeed883b9f22ed05675b1e06ac69"},
+ {file = "fonttools-4.55.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ce4ba6981e10f7e0ccff6348e9775ce25ffadbee70c9fd1a3737e3e9f5fa74f"},
+ {file = "fonttools-4.55.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31d00f9852a6051dac23294a4cf2df80ced85d1d173a61ba90a3d8f5abc63c60"},
+ {file = "fonttools-4.55.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e198e494ca6e11f254bac37a680473a311a88cd40e58f9cc4dc4911dfb686ec6"},
+ {file = "fonttools-4.55.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7208856f61770895e79732e1dcbe49d77bd5783adf73ae35f87fcc267df9db81"},
+ {file = "fonttools-4.55.0-cp310-cp310-win32.whl", hash = "sha256:e7e6a352ff9e46e8ef8a3b1fe2c4478f8a553e1b5a479f2e899f9dc5f2055880"},
+ {file = "fonttools-4.55.0-cp310-cp310-win_amd64.whl", hash = "sha256:636caaeefe586d7c84b5ee0734c1a5ab2dae619dc21c5cf336f304ddb8f6001b"},
+ {file = "fonttools-4.55.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fa34aa175c91477485c44ddfbb51827d470011e558dfd5c7309eb31bef19ec51"},
+ {file = "fonttools-4.55.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:37dbb3fdc2ef7302d3199fb12468481cbebaee849e4b04bc55b77c24e3c49189"},
+ {file = "fonttools-4.55.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5263d8e7ef3c0ae87fbce7f3ec2f546dc898d44a337e95695af2cd5ea21a967"},
+ {file = "fonttools-4.55.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f307f6b5bf9e86891213b293e538d292cd1677e06d9faaa4bf9c086ad5f132f6"},
+ {file = "fonttools-4.55.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:f0a4b52238e7b54f998d6a56b46a2c56b59c74d4f8a6747fb9d4042190f37cd3"},
+ {file = "fonttools-4.55.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3e569711464f777a5d4ef522e781dc33f8095ab5efd7548958b36079a9f2f88c"},
+ {file = "fonttools-4.55.0-cp311-cp311-win32.whl", hash = "sha256:2b3ab90ec0f7b76c983950ac601b58949f47aca14c3f21eed858b38d7ec42b05"},
+ {file = "fonttools-4.55.0-cp311-cp311-win_amd64.whl", hash = "sha256:aa046f6a63bb2ad521004b2769095d4c9480c02c1efa7d7796b37826508980b6"},
+ {file = "fonttools-4.55.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:838d2d8870f84fc785528a692e724f2379d5abd3fc9dad4d32f91cf99b41e4a7"},
+ {file = "fonttools-4.55.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f46b863d74bab7bb0d395f3b68d3f52a03444964e67ce5c43ce43a75efce9246"},
+ {file = "fonttools-4.55.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33b52a9cfe4e658e21b1f669f7309b4067910321757fec53802ca8f6eae96a5a"},
+ {file = "fonttools-4.55.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:732a9a63d6ea4a81b1b25a1f2e5e143761b40c2e1b79bb2b68e4893f45139a40"},
+ {file = "fonttools-4.55.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7dd91ac3fcb4c491bb4763b820bcab6c41c784111c24172616f02f4bc227c17d"},
+ {file = "fonttools-4.55.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1f0e115281a32ff532118aa851ef497a1b7cda617f4621c1cdf81ace3e36fb0c"},
+ {file = "fonttools-4.55.0-cp312-cp312-win32.whl", hash = "sha256:6c99b5205844f48a05cb58d4a8110a44d3038c67ed1d79eb733c4953c628b0f6"},
+ {file = "fonttools-4.55.0-cp312-cp312-win_amd64.whl", hash = "sha256:f8c8c76037d05652510ae45be1cd8fb5dd2fd9afec92a25374ac82255993d57c"},
+ {file = "fonttools-4.55.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8118dc571921dc9e4b288d9cb423ceaf886d195a2e5329cc427df82bba872cd9"},
+ {file = "fonttools-4.55.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01124f2ca6c29fad4132d930da69158d3f49b2350e4a779e1efbe0e82bd63f6c"},
+ {file = "fonttools-4.55.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81ffd58d2691f11f7c8438796e9f21c374828805d33e83ff4b76e4635633674c"},
+ {file = "fonttools-4.55.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5435e5f1eb893c35c2bc2b9cd3c9596b0fcb0a59e7a14121562986dd4c47b8dd"},
+ {file = "fonttools-4.55.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d12081729280c39d001edd0f4f06d696014c26e6e9a0a55488fabc37c28945e4"},
+ {file = "fonttools-4.55.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a7ad1f1b98ab6cb927ab924a38a8649f1ffd7525c75fe5b594f5dab17af70e18"},
+ {file = "fonttools-4.55.0-cp313-cp313-win32.whl", hash = "sha256:abe62987c37630dca69a104266277216de1023cf570c1643bb3a19a9509e7a1b"},
+ {file = "fonttools-4.55.0-cp313-cp313-win_amd64.whl", hash = "sha256:2863555ba90b573e4201feaf87a7e71ca3b97c05aa4d63548a4b69ea16c9e998"},
+ {file = "fonttools-4.55.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:00f7cf55ad58a57ba421b6a40945b85ac7cc73094fb4949c41171d3619a3a47e"},
+ {file = "fonttools-4.55.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f27526042efd6f67bfb0cc2f1610fa20364396f8b1fc5edb9f45bb815fb090b2"},
+ {file = "fonttools-4.55.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8e67974326af6a8879dc2a4ec63ab2910a1c1a9680ccd63e4a690950fceddbe"},
+ {file = "fonttools-4.55.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61dc0a13451143c5e987dec5254d9d428f3c2789a549a7cf4f815b63b310c1cc"},
+ {file = "fonttools-4.55.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:b2e526b325a903868c62155a6a7e24df53f6ce4c5c3160214d8fe1be2c41b478"},
+ {file = "fonttools-4.55.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:b7ef9068a1297714e6fefe5932c33b058aa1d45a2b8be32a4c6dee602ae22b5c"},
+ {file = "fonttools-4.55.0-cp38-cp38-win32.whl", hash = "sha256:55718e8071be35dff098976bc249fc243b58efa263768c611be17fe55975d40a"},
+ {file = "fonttools-4.55.0-cp38-cp38-win_amd64.whl", hash = "sha256:553bd4f8cc327f310c20158e345e8174c8eed49937fb047a8bda51daf2c353c8"},
+ {file = "fonttools-4.55.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3f901cef813f7c318b77d1c5c14cf7403bae5cb977cede023e22ba4316f0a8f6"},
+ {file = "fonttools-4.55.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8c9679fc0dd7e8a5351d321d8d29a498255e69387590a86b596a45659a39eb0d"},
+ {file = "fonttools-4.55.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd2820a8b632f3307ebb0bf57948511c2208e34a4939cf978333bc0a3f11f838"},
+ {file = "fonttools-4.55.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23bbbb49bec613a32ed1b43df0f2b172313cee690c2509f1af8fdedcf0a17438"},
+ {file = "fonttools-4.55.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a656652e1f5d55b9728937a7e7d509b73d23109cddd4e89ee4f49bde03b736c6"},
+ {file = "fonttools-4.55.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f50a1f455902208486fbca47ce33054208a4e437b38da49d6721ce2fef732fcf"},
+ {file = "fonttools-4.55.0-cp39-cp39-win32.whl", hash = "sha256:161d1ac54c73d82a3cded44202d0218ab007fde8cf194a23d3dd83f7177a2f03"},
+ {file = "fonttools-4.55.0-cp39-cp39-win_amd64.whl", hash = "sha256:ca7fd6987c68414fece41c96836e945e1f320cda56fc96ffdc16e54a44ec57a2"},
+ {file = "fonttools-4.55.0-py3-none-any.whl", hash = "sha256:12db5888cd4dd3fcc9f0ee60c6edd3c7e1fd44b7dd0f31381ea03df68f8a153f"},
+ {file = "fonttools-4.55.0.tar.gz", hash = "sha256:7636acc6ab733572d5e7eec922b254ead611f1cdad17be3f0be7418e8bfaca71"},
+]
+
+[package.extras]
+all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "pycairo", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"]
+graphite = ["lz4 (>=1.7.4.2)"]
+interpolatable = ["munkres", "pycairo", "scipy"]
+lxml = ["lxml (>=4.0)"]
+pathops = ["skia-pathops (>=0.5.0)"]
+plot = ["matplotlib"]
+repacker = ["uharfbuzz (>=0.23.0)"]
+symfont = ["sympy"]
+type1 = ["xattr"]
+ufo = ["fs (>=2.2.0,<3)"]
+unicode = ["unicodedata2 (>=15.1.0)"]
+woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"]
+
+[[package]]
+name = "frozenlist"
+version = "1.5.0"
+description = "A list-like structure which implements collections.abc.MutableSequence"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5b6a66c18b5b9dd261ca98dffcb826a525334b2f29e7caa54e182255c5f6a65a"},
+ {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d1b3eb7b05ea246510b43a7e53ed1653e55c2121019a97e60cad7efb881a97bb"},
+ {file = "frozenlist-1.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:15538c0cbf0e4fa11d1e3a71f823524b0c46299aed6e10ebb4c2089abd8c3bec"},
+ {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e79225373c317ff1e35f210dd5f1344ff31066ba8067c307ab60254cd3a78ad5"},
+ {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9272fa73ca71266702c4c3e2d4a28553ea03418e591e377a03b8e3659d94fa76"},
+ {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:498524025a5b8ba81695761d78c8dd7382ac0b052f34e66939c42df860b8ff17"},
+ {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:92b5278ed9d50fe610185ecd23c55d8b307d75ca18e94c0e7de328089ac5dcba"},
+ {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f3c8c1dacd037df16e85227bac13cca58c30da836c6f936ba1df0c05d046d8d"},
+ {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f2ac49a9bedb996086057b75bf93538240538c6d9b38e57c82d51f75a73409d2"},
+ {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e66cc454f97053b79c2ab09c17fbe3c825ea6b4de20baf1be28919460dd7877f"},
+ {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:5a3ba5f9a0dfed20337d3e966dc359784c9f96503674c2faf015f7fe8e96798c"},
+ {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6321899477db90bdeb9299ac3627a6a53c7399c8cd58d25da094007402b039ab"},
+ {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:76e4753701248476e6286f2ef492af900ea67d9706a0155335a40ea21bf3b2f5"},
+ {file = "frozenlist-1.5.0-cp310-cp310-win32.whl", hash = "sha256:977701c081c0241d0955c9586ffdd9ce44f7a7795df39b9151cd9a6fd0ce4cfb"},
+ {file = "frozenlist-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:189f03b53e64144f90990d29a27ec4f7997d91ed3d01b51fa39d2dbe77540fd4"},
+ {file = "frozenlist-1.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fd74520371c3c4175142d02a976aee0b4cb4a7cc912a60586ffd8d5929979b30"},
+ {file = "frozenlist-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2f3f7a0fbc219fb4455264cae4d9f01ad41ae6ee8524500f381de64ffaa077d5"},
+ {file = "frozenlist-1.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f47c9c9028f55a04ac254346e92977bf0f166c483c74b4232bee19a6697e4778"},
+ {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0996c66760924da6e88922756d99b47512a71cfd45215f3570bf1e0b694c206a"},
+ {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a2fe128eb4edeabe11896cb6af88fca5346059f6c8d807e3b910069f39157869"},
+ {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1a8ea951bbb6cacd492e3948b8da8c502a3f814f5d20935aae74b5df2b19cf3d"},
+ {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de537c11e4aa01d37db0d403b57bd6f0546e71a82347a97c6a9f0dcc532b3a45"},
+ {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c2623347b933fcb9095841f1cc5d4ff0b278addd743e0e966cb3d460278840d"},
+ {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cee6798eaf8b1416ef6909b06f7dc04b60755206bddc599f52232606e18179d3"},
+ {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f5f9da7f5dbc00a604fe74aa02ae7c98bcede8a3b8b9666f9f86fc13993bc71a"},
+ {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:90646abbc7a5d5c7c19461d2e3eeb76eb0b204919e6ece342feb6032c9325ae9"},
+ {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:bdac3c7d9b705d253b2ce370fde941836a5f8b3c5c2b8fd70940a3ea3af7f4f2"},
+ {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:03d33c2ddbc1816237a67f66336616416e2bbb6beb306e5f890f2eb22b959cdf"},
+ {file = "frozenlist-1.5.0-cp311-cp311-win32.whl", hash = "sha256:237f6b23ee0f44066219dae14c70ae38a63f0440ce6750f868ee08775073f942"},
+ {file = "frozenlist-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:0cc974cc93d32c42e7b0f6cf242a6bd941c57c61b618e78b6c0a96cb72788c1d"},
+ {file = "frozenlist-1.5.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:31115ba75889723431aa9a4e77d5f398f5cf976eea3bdf61749731f62d4a4a21"},
+ {file = "frozenlist-1.5.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7437601c4d89d070eac8323f121fcf25f88674627505334654fd027b091db09d"},
+ {file = "frozenlist-1.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7948140d9f8ece1745be806f2bfdf390127cf1a763b925c4a805c603df5e697e"},
+ {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feeb64bc9bcc6b45c6311c9e9b99406660a9c05ca8a5b30d14a78555088b0b3a"},
+ {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:683173d371daad49cffb8309779e886e59c2f369430ad28fe715f66d08d4ab1a"},
+ {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7d57d8f702221405a9d9b40f9da8ac2e4a1a8b5285aac6100f3393675f0a85ee"},
+ {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30c72000fbcc35b129cb09956836c7d7abf78ab5416595e4857d1cae8d6251a6"},
+ {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:000a77d6034fbad9b6bb880f7ec073027908f1b40254b5d6f26210d2dab1240e"},
+ {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5d7f5a50342475962eb18b740f3beecc685a15b52c91f7d975257e13e029eca9"},
+ {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:87f724d055eb4785d9be84e9ebf0f24e392ddfad00b3fe036e43f489fafc9039"},
+ {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:6e9080bb2fb195a046e5177f10d9d82b8a204c0736a97a153c2466127de87784"},
+ {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9b93d7aaa36c966fa42efcaf716e6b3900438632a626fb09c049f6a2f09fc631"},
+ {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:52ef692a4bc60a6dd57f507429636c2af8b6046db8b31b18dac02cbc8f507f7f"},
+ {file = "frozenlist-1.5.0-cp312-cp312-win32.whl", hash = "sha256:29d94c256679247b33a3dc96cce0f93cbc69c23bf75ff715919332fdbb6a32b8"},
+ {file = "frozenlist-1.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:8969190d709e7c48ea386db202d708eb94bdb29207a1f269bab1196ce0dcca1f"},
+ {file = "frozenlist-1.5.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7a1a048f9215c90973402e26c01d1cff8a209e1f1b53f72b95c13db61b00f953"},
+ {file = "frozenlist-1.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dd47a5181ce5fcb463b5d9e17ecfdb02b678cca31280639255ce9d0e5aa67af0"},
+ {file = "frozenlist-1.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1431d60b36d15cda188ea222033eec8e0eab488f39a272461f2e6d9e1a8e63c2"},
+ {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6482a5851f5d72767fbd0e507e80737f9c8646ae7fd303def99bfe813f76cf7f"},
+ {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44c49271a937625619e862baacbd037a7ef86dd1ee215afc298a417ff3270608"},
+ {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:12f78f98c2f1c2429d42e6a485f433722b0061d5c0b0139efa64f396efb5886b"},
+ {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce3aa154c452d2467487765e3adc730a8c153af77ad84096bc19ce19a2400840"},
+ {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b7dc0c4338e6b8b091e8faf0db3168a37101943e687f373dce00959583f7439"},
+ {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:45e0896250900b5aa25180f9aec243e84e92ac84bd4a74d9ad4138ef3f5c97de"},
+ {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:561eb1c9579d495fddb6da8959fd2a1fca2c6d060d4113f5844b433fc02f2641"},
+ {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:df6e2f325bfee1f49f81aaac97d2aa757c7646534a06f8f577ce184afe2f0a9e"},
+ {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:140228863501b44b809fb39ec56b5d4071f4d0aa6d216c19cbb08b8c5a7eadb9"},
+ {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7707a25d6a77f5d27ea7dc7d1fc608aa0a478193823f88511ef5e6b8a48f9d03"},
+ {file = "frozenlist-1.5.0-cp313-cp313-win32.whl", hash = "sha256:31a9ac2b38ab9b5a8933b693db4939764ad3f299fcaa931a3e605bc3460e693c"},
+ {file = "frozenlist-1.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:11aabdd62b8b9c4b84081a3c246506d1cddd2dd93ff0ad53ede5defec7886b28"},
+ {file = "frozenlist-1.5.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:dd94994fc91a6177bfaafd7d9fd951bc8689b0a98168aa26b5f543868548d3ca"},
+ {file = "frozenlist-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d0da8bbec082bf6bf18345b180958775363588678f64998c2b7609e34719b10"},
+ {file = "frozenlist-1.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:73f2e31ea8dd7df61a359b731716018c2be196e5bb3b74ddba107f694fbd7604"},
+ {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:828afae9f17e6de596825cf4228ff28fbdf6065974e5ac1410cecc22f699d2b3"},
+ {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1577515d35ed5649d52ab4319db757bb881ce3b2b796d7283e6634d99ace307"},
+ {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2150cc6305a2c2ab33299453e2968611dacb970d2283a14955923062c8d00b10"},
+ {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a72b7a6e3cd2725eff67cd64c8f13335ee18fc3c7befc05aed043d24c7b9ccb9"},
+ {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c16d2fa63e0800723139137d667e1056bee1a1cf7965153d2d104b62855e9b99"},
+ {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:17dcc32fc7bda7ce5875435003220a457bcfa34ab7924a49a1c19f55b6ee185c"},
+ {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:97160e245ea33d8609cd2b8fd997c850b56db147a304a262abc2b3be021a9171"},
+ {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f1e6540b7fa044eee0bb5111ada694cf3dc15f2b0347ca125ee9ca984d5e9e6e"},
+ {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:91d6c171862df0a6c61479d9724f22efb6109111017c87567cfeb7b5d1449fdf"},
+ {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c1fac3e2ace2eb1052e9f7c7db480818371134410e1f5c55d65e8f3ac6d1407e"},
+ {file = "frozenlist-1.5.0-cp38-cp38-win32.whl", hash = "sha256:b97f7b575ab4a8af9b7bc1d2ef7f29d3afee2226bd03ca3875c16451ad5a7723"},
+ {file = "frozenlist-1.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:374ca2dabdccad8e2a76d40b1d037f5bd16824933bf7bcea3e59c891fd4a0923"},
+ {file = "frozenlist-1.5.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9bbcdfaf4af7ce002694a4e10a0159d5a8d20056a12b05b45cea944a4953f972"},
+ {file = "frozenlist-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1893f948bf6681733aaccf36c5232c231e3b5166d607c5fa77773611df6dc336"},
+ {file = "frozenlist-1.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2b5e23253bb709ef57a8e95e6ae48daa9ac5f265637529e4ce6b003a37b2621f"},
+ {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f253985bb515ecd89629db13cb58d702035ecd8cfbca7d7a7e29a0e6d39af5f"},
+ {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:04a5c6babd5e8fb7d3c871dc8b321166b80e41b637c31a995ed844a6139942b6"},
+ {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9fe0f1c29ba24ba6ff6abf688cb0b7cf1efab6b6aa6adc55441773c252f7411"},
+ {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:226d72559fa19babe2ccd920273e767c96a49b9d3d38badd7c91a0fdeda8ea08"},
+ {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15b731db116ab3aedec558573c1a5eec78822b32292fe4f2f0345b7f697745c2"},
+ {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:366d8f93e3edfe5a918c874702f78faac300209a4d5bf38352b2c1bdc07a766d"},
+ {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1b96af8c582b94d381a1c1f51ffaedeb77c821c690ea5f01da3d70a487dd0a9b"},
+ {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c03eff4a41bd4e38415cbed054bbaff4a075b093e2394b6915dca34a40d1e38b"},
+ {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:50cf5e7ee9b98f22bdecbabf3800ae78ddcc26e4a435515fc72d97903e8488e0"},
+ {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1e76bfbc72353269c44e0bc2cfe171900fbf7f722ad74c9a7b638052afe6a00c"},
+ {file = "frozenlist-1.5.0-cp39-cp39-win32.whl", hash = "sha256:666534d15ba8f0fda3f53969117383d5dc021266b3c1a42c9ec4855e4b58b9d3"},
+ {file = "frozenlist-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:5c28f4b5dbef8a0d8aad0d4de24d1e9e981728628afaf4ea0792f5d0939372f0"},
+ {file = "frozenlist-1.5.0-py3-none-any.whl", hash = "sha256:d994863bba198a4a518b467bb971c56e1db3f180a25c6cf7bb1949c267f748c3"},
+ {file = "frozenlist-1.5.0.tar.gz", hash = "sha256:81d5af29e61b9c8348e876d442253723928dce6433e0e76cd925cd83f1b4b817"},
+]
+
[[package]]
name = "fsspec"
version = "2024.10.0"
@@ -576,43 +1280,58 @@ test-downstream = ["aiobotocore (>=2.5.4,<3.0.0)", "dask-expr", "dask[dataframe,
test-full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "cloudpickle", "dask", "distributed", "dropbox", "dropboxdrivefs", "fastparquet", "fusepy", "gcsfs", "jinja2", "kerchunk", "libarchive-c", "lz4", "notebook", "numpy", "ocifs", "pandas", "panel", "paramiko", "pyarrow", "pyarrow (>=1)", "pyftpdlib", "pygit2", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "python-snappy", "requests", "smbprotocol", "tqdm", "urllib3", "zarr", "zstandard"]
tqdm = ["tqdm"]
+[[package]]
+name = "ftfy"
+version = "6.3.1"
+description = "Fixes mojibake and other problems with Unicode, after the fact"
+optional = false
+python-versions = ">=3.9"
+files = [
+ {file = "ftfy-6.3.1-py3-none-any.whl", hash = "sha256:7c70eb532015cd2f9adb53f101fb6c7945988d023a085d127d1573dc49dd0083"},
+ {file = "ftfy-6.3.1.tar.gz", hash = "sha256:9b3c3d90f84fb267fe64d375a07b7f8912d817cf86009ae134aa03e1819506ec"},
+]
+
+[package.dependencies]
+wcwidth = "*"
+
[[package]]
name = "gradio"
-version = "5.6.0"
+version = "4.43.0"
description = "Python library for easily interacting with trained machine learning models"
optional = false
-python-versions = ">=3.10"
+python-versions = ">=3.8"
files = [
- {file = "gradio-5.6.0-py3-none-any.whl", hash = "sha256:6eba135b32fb2fcb5d83fa845f6ad57c033894d5218fd3010de8fb4d735b9b6d"},
+ {file = "gradio-4.43.0-py3-none-any.whl", hash = "sha256:a8a785af95b7985d1d17287b1f79add3c913ed79180c4b89ef30cea375329bb9"},
+ {file = "gradio-4.43.0.tar.gz", hash = "sha256:0d510e98b7fcb5d829fdc9452dcfef9f060c86130c9e85a539b9e709ba460823"},
]
[package.dependencies]
aiofiles = ">=22.0,<24.0"
anyio = ">=3.0,<5.0"
-fastapi = ">=0.115.2,<1.0"
+fastapi = "<0.113.0"
ffmpy = "*"
-gradio-client = "1.4.3"
+gradio-client = "1.3.0"
httpx = ">=0.24.1"
-huggingface-hub = ">=0.25.1"
+huggingface-hub = ">=0.19.3"
+importlib-resources = ">=1.3,<7.0"
jinja2 = "<4.0"
markupsafe = ">=2.0,<3.0"
+matplotlib = ">=3.0,<4.0"
numpy = ">=1.0,<3.0"
orjson = ">=3.0,<4.0"
packaging = "*"
pandas = ">=1.0,<3.0"
-pillow = ">=8.0,<12.0"
+pillow = ">=8.0,<11.0"
pydantic = ">=2.0"
pydub = "*"
-python-multipart = "0.0.12"
+python-multipart = ">=0.0.9"
pyyaml = ">=5.0,<7.0"
ruff = {version = ">=0.2.2", markers = "sys_platform != \"emscripten\""}
-safehttpx = ">=0.1.1,<1.0"
semantic-version = ">=2.0,<3.0"
-starlette = {version = ">=0.40.0,<1.0", markers = "sys_platform != \"emscripten\""}
tomlkit = "0.12.0"
typer = {version = ">=0.12,<1.0", markers = "sys_platform != \"emscripten\""}
typing-extensions = ">=4.0,<5.0"
-urllib3 = {version = ">=2.0,<3.0", markers = "sys_platform == \"emscripten\""}
+urllib3 = ">=2.0,<3.0"
uvicorn = {version = ">=0.14.0", markers = "sys_platform != \"emscripten\""}
[package.extras]
@@ -620,13 +1339,13 @@ oauth = ["authlib", "itsdangerous"]
[[package]]
name = "gradio-client"
-version = "1.4.3"
+version = "1.3.0"
description = "Python library for easily interacting with trained machine learning models"
optional = false
-python-versions = ">=3.10"
+python-versions = ">=3.8"
files = [
- {file = "gradio_client-1.4.3-py3-none-any.whl", hash = "sha256:a76990277cab011f1c49391bdf33670bbbbb32b3503971ae5d91281e7946bdc1"},
- {file = "gradio_client-1.4.3.tar.gz", hash = "sha256:55fd446ae80a5320f164b6913e8862b398fca9097d33b76bd98efb61cbd449c3"},
+ {file = "gradio_client-1.3.0-py3-none-any.whl", hash = "sha256:20c40cb4d56e18de1a025ccf58079f08a304e4fb2dfbcf7c2352815b2cb31091"},
+ {file = "gradio_client-1.3.0.tar.gz", hash = "sha256:d904afeae4f5682add0a6a263542c10e7669ff6c9de0a53a5c2fc9b719a24bb8"},
]
[package.dependencies]
@@ -637,6 +1356,73 @@ packaging = "*"
typing-extensions = ">=4.0,<5.0"
websockets = ">=10.0,<13.0"
+[[package]]
+name = "grpcio"
+version = "1.68.0"
+description = "HTTP/2-based RPC framework"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "grpcio-1.68.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:619b5d0f29f4f5351440e9343224c3e19912c21aeda44e0c49d0d147a8d01544"},
+ {file = "grpcio-1.68.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:a59f5822f9459bed098ffbceb2713abbf7c6fd13f2b9243461da5c338d0cd6c3"},
+ {file = "grpcio-1.68.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:c03d89df516128febc5a7e760d675b478ba25802447624edf7aa13b1e7b11e2a"},
+ {file = "grpcio-1.68.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44bcbebb24363d587472089b89e2ea0ab2e2b4df0e4856ba4c0b087c82412121"},
+ {file = "grpcio-1.68.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79f81b7fbfb136247b70465bd836fa1733043fdee539cd6031cb499e9608a110"},
+ {file = "grpcio-1.68.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:88fb2925789cfe6daa20900260ef0a1d0a61283dfb2d2fffe6194396a354c618"},
+ {file = "grpcio-1.68.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:99f06232b5c9138593ae6f2e355054318717d32a9c09cdc5a2885540835067a1"},
+ {file = "grpcio-1.68.0-cp310-cp310-win32.whl", hash = "sha256:a6213d2f7a22c3c30a479fb5e249b6b7e648e17f364598ff64d08a5136fe488b"},
+ {file = "grpcio-1.68.0-cp310-cp310-win_amd64.whl", hash = "sha256:15327ab81131ef9b94cb9f45b5bd98803a179c7c61205c8c0ac9aff9d6c4e82a"},
+ {file = "grpcio-1.68.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:3b2b559beb2d433129441783e5f42e3be40a9e1a89ec906efabf26591c5cd415"},
+ {file = "grpcio-1.68.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e46541de8425a4d6829ac6c5d9b16c03c292105fe9ebf78cb1c31e8d242f9155"},
+ {file = "grpcio-1.68.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:c1245651f3c9ea92a2db4f95d37b7597db6b246d5892bca6ee8c0e90d76fb73c"},
+ {file = "grpcio-1.68.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f1931c7aa85be0fa6cea6af388e576f3bf6baee9e5d481c586980c774debcb4"},
+ {file = "grpcio-1.68.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b0ff09c81e3aded7a183bc6473639b46b6caa9c1901d6f5e2cba24b95e59e30"},
+ {file = "grpcio-1.68.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8c73f9fbbaee1a132487e31585aa83987ddf626426d703ebcb9a528cf231c9b1"},
+ {file = "grpcio-1.68.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6b2f98165ea2790ea159393a2246b56f580d24d7da0d0342c18a085299c40a75"},
+ {file = "grpcio-1.68.0-cp311-cp311-win32.whl", hash = "sha256:e1e7ed311afb351ff0d0e583a66fcb39675be112d61e7cfd6c8269884a98afbc"},
+ {file = "grpcio-1.68.0-cp311-cp311-win_amd64.whl", hash = "sha256:e0d2f68eaa0a755edd9a47d40e50dba6df2bceda66960dee1218da81a2834d27"},
+ {file = "grpcio-1.68.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:8af6137cc4ae8e421690d276e7627cfc726d4293f6607acf9ea7260bd8fc3d7d"},
+ {file = "grpcio-1.68.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4028b8e9a3bff6f377698587d642e24bd221810c06579a18420a17688e421af7"},
+ {file = "grpcio-1.68.0-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:f60fa2adf281fd73ae3a50677572521edca34ba373a45b457b5ebe87c2d01e1d"},
+ {file = "grpcio-1.68.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e18589e747c1e70b60fab6767ff99b2d0c359ea1db8a2cb524477f93cdbedf5b"},
+ {file = "grpcio-1.68.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0d30f3fee9372796f54d3100b31ee70972eaadcc87314be369360248a3dcffe"},
+ {file = "grpcio-1.68.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:7e0a3e72c0e9a1acab77bef14a73a416630b7fd2cbd893c0a873edc47c42c8cd"},
+ {file = "grpcio-1.68.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a831dcc343440969aaa812004685ed322cdb526cd197112d0db303b0da1e8659"},
+ {file = "grpcio-1.68.0-cp312-cp312-win32.whl", hash = "sha256:5a180328e92b9a0050958ced34dddcb86fec5a8b332f5a229e353dafc16cd332"},
+ {file = "grpcio-1.68.0-cp312-cp312-win_amd64.whl", hash = "sha256:2bddd04a790b69f7a7385f6a112f46ea0b34c4746f361ebafe9ca0be567c78e9"},
+ {file = "grpcio-1.68.0-cp313-cp313-linux_armv7l.whl", hash = "sha256:fc05759ffbd7875e0ff2bd877be1438dfe97c9312bbc558c8284a9afa1d0f40e"},
+ {file = "grpcio-1.68.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:15fa1fe25d365a13bc6d52fcac0e3ee1f9baebdde2c9b3b2425f8a4979fccea1"},
+ {file = "grpcio-1.68.0-cp313-cp313-manylinux_2_17_aarch64.whl", hash = "sha256:32a9cb4686eb2e89d97022ecb9e1606d132f85c444354c17a7dbde4a455e4a3b"},
+ {file = "grpcio-1.68.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dba037ff8d284c8e7ea9a510c8ae0f5b016004f13c3648f72411c464b67ff2fb"},
+ {file = "grpcio-1.68.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0efbbd849867e0e569af09e165363ade75cf84f5229b2698d53cf22c7a4f9e21"},
+ {file = "grpcio-1.68.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:4e300e6978df0b65cc2d100c54e097c10dfc7018b9bd890bbbf08022d47f766d"},
+ {file = "grpcio-1.68.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:6f9c7ad1a23e1047f827385f4713b5b8c6c7d325705be1dd3e31fb00dcb2f665"},
+ {file = "grpcio-1.68.0-cp313-cp313-win32.whl", hash = "sha256:3ac7f10850fd0487fcce169c3c55509101c3bde2a3b454869639df2176b60a03"},
+ {file = "grpcio-1.68.0-cp313-cp313-win_amd64.whl", hash = "sha256:afbf45a62ba85a720491bfe9b2642f8761ff348006f5ef67e4622621f116b04a"},
+ {file = "grpcio-1.68.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:f8f695d9576ce836eab27ba7401c60acaf9ef6cf2f70dfe5462055ba3df02cc3"},
+ {file = "grpcio-1.68.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9fe1b141cda52f2ca73e17d2d3c6a9f3f3a0c255c216b50ce616e9dca7e3441d"},
+ {file = "grpcio-1.68.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:4df81d78fd1646bf94ced4fb4cd0a7fe2e91608089c522ef17bc7db26e64effd"},
+ {file = "grpcio-1.68.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:46a2d74d4dd8993151c6cd585594c082abe74112c8e4175ddda4106f2ceb022f"},
+ {file = "grpcio-1.68.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a17278d977746472698460c63abf333e1d806bd41f2224f90dbe9460101c9796"},
+ {file = "grpcio-1.68.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:15377bce516b1c861c35e18eaa1c280692bf563264836cece693c0f169b48829"},
+ {file = "grpcio-1.68.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cc5f0a4f5904b8c25729a0498886b797feb817d1fd3812554ffa39551112c161"},
+ {file = "grpcio-1.68.0-cp38-cp38-win32.whl", hash = "sha256:def1a60a111d24376e4b753db39705adbe9483ef4ca4761f825639d884d5da78"},
+ {file = "grpcio-1.68.0-cp38-cp38-win_amd64.whl", hash = "sha256:55d3b52fd41ec5772a953612db4e70ae741a6d6ed640c4c89a64f017a1ac02b5"},
+ {file = "grpcio-1.68.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:0d230852ba97654453d290e98d6aa61cb48fa5fafb474fb4c4298d8721809354"},
+ {file = "grpcio-1.68.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:50992f214264e207e07222703c17d9cfdcc2c46ed5a1ea86843d440148ebbe10"},
+ {file = "grpcio-1.68.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:14331e5c27ed3545360464a139ed279aa09db088f6e9502e95ad4bfa852bb116"},
+ {file = "grpcio-1.68.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f84890b205692ea813653ece4ac9afa2139eae136e419231b0eec7c39fdbe4c2"},
+ {file = "grpcio-1.68.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0cf343c6f4f6aa44863e13ec9ddfe299e0be68f87d68e777328bff785897b05"},
+ {file = "grpcio-1.68.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:fd2c2d47969daa0e27eadaf15c13b5e92605c5e5953d23c06d0b5239a2f176d3"},
+ {file = "grpcio-1.68.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:18668e36e7f4045820f069997834e94e8275910b1f03e078a6020bd464cb2363"},
+ {file = "grpcio-1.68.0-cp39-cp39-win32.whl", hash = "sha256:2af76ab7c427aaa26aa9187c3e3c42f38d3771f91a20f99657d992afada2294a"},
+ {file = "grpcio-1.68.0-cp39-cp39-win_amd64.whl", hash = "sha256:e694b5928b7b33ca2d3b4d5f9bf8b5888906f181daff6b406f4938f3a997a490"},
+ {file = "grpcio-1.68.0.tar.gz", hash = "sha256:7e7483d39b4a4fddb9906671e9ea21aaad4f031cdfc349fec76bdfa1e404543a"},
+]
+
+[package.extras]
+protobuf = ["grpcio-tools (>=1.68.0)"]
+
[[package]]
name = "h11"
version = "0.14.0"
@@ -756,6 +1542,25 @@ files = [
[package.extras]
all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"]
+[[package]]
+name = "importlib-resources"
+version = "6.4.5"
+description = "Read resources from Python packages"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "importlib_resources-6.4.5-py3-none-any.whl", hash = "sha256:ac29d5f956f01d5e4bb63102a5a19957f1b9175e45649977264a1416783bb717"},
+ {file = "importlib_resources-6.4.5.tar.gz", hash = "sha256:980862a1d16c9e147a59603677fa2aa5fd82b87f223b6cb870695bcfce830065"},
+]
+
+[package.extras]
+check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"]
+cover = ["pytest-cov"]
+doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
+enabler = ["pytest-enabler (>=2.2)"]
+test = ["jaraco.test (>=5.4)", "pytest (>=6,!=8.1.*)", "zipp (>=3.17)"]
+type = ["pytest-mypy"]
+
[[package]]
name = "iniconfig"
version = "2.0.0"
@@ -767,6 +1572,20 @@ files = [
{file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"},
]
+[[package]]
+name = "intel-openmp"
+version = "2021.4.0"
+description = "Intel OpenMP* Runtime Library"
+optional = false
+python-versions = "*"
+files = [
+ {file = "intel_openmp-2021.4.0-py2.py3-none-macosx_10_15_x86_64.macosx_11_0_x86_64.whl", hash = "sha256:41c01e266a7fdb631a7609191709322da2bbf24b252ba763f125dd651bcc7675"},
+ {file = "intel_openmp-2021.4.0-py2.py3-none-manylinux1_i686.whl", hash = "sha256:3b921236a38384e2016f0f3d65af6732cf2c12918087128a9163225451e776f2"},
+ {file = "intel_openmp-2021.4.0-py2.py3-none-manylinux1_x86_64.whl", hash = "sha256:e2240ab8d01472fed04f3544a878cda5da16c26232b7ea1b59132dbfb48b186e"},
+ {file = "intel_openmp-2021.4.0-py2.py3-none-win32.whl", hash = "sha256:6e863d8fd3d7e8ef389d52cf97a50fe2afe1a19247e8c0d168ce021546f96fc9"},
+ {file = "intel_openmp-2021.4.0-py2.py3-none-win_amd64.whl", hash = "sha256:eef4c8bcc8acefd7f5cd3b9384dbf73d59e2c99fc56545712ded913f43c4a94f"},
+]
+
[[package]]
name = "ipykernel"
version = "6.29.5"
@@ -814,6 +1633,7 @@ files = [
[package.dependencies]
colorama = {version = "*", markers = "sys_platform == \"win32\""}
decorator = "*"
+exceptiongroup = {version = "*", markers = "python_version < \"3.11\""}
jedi = ">=0.16"
matplotlib-inline = "*"
pexpect = {version = ">4.3", markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\""}
@@ -821,6 +1641,7 @@ prompt-toolkit = ">=3.0.41,<3.1.0"
pygments = ">=2.4.0"
stack-data = "*"
traitlets = ">=5.13.0"
+typing-extensions = {version = ">=4.6", markers = "python_version < \"3.12\""}
[package.extras]
all = ["ipython[black,doc,kernel,matplotlib,nbconvert,nbformat,notebook,parallel,qtconsole]", "ipython[test,test-extra]"]
@@ -836,6 +1657,28 @@ qtconsole = ["qtconsole"]
test = ["packaging", "pickleshare", "pytest", "pytest-asyncio (<0.22)", "testpath"]
test-extra = ["curio", "ipython[test]", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.23)", "pandas", "trio"]
+[[package]]
+name = "isodate"
+version = "0.7.2"
+description = "An ISO 8601 date/time/duration parser and formatter"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "isodate-0.7.2-py3-none-any.whl", hash = "sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15"},
+ {file = "isodate-0.7.2.tar.gz", hash = "sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6"},
+]
+
+[[package]]
+name = "itsdangerous"
+version = "2.2.0"
+description = "Safely pass data to untrusted environments and back."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "itsdangerous-2.2.0-py3-none-any.whl", hash = "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef"},
+ {file = "itsdangerous-2.2.0.tar.gz", hash = "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173"},
+]
+
[[package]]
name = "jedi"
version = "0.19.2"
@@ -873,7 +1716,53 @@ MarkupSafe = ">=2.0"
i18n = ["Babel (>=2.7)"]
[[package]]
-name = "jupyter-client"
+name = "joblib"
+version = "1.4.2"
+description = "Lightweight pipelining with Python functions"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6"},
+ {file = "joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e"},
+]
+
+[[package]]
+name = "jsonschema"
+version = "4.23.0"
+description = "An implementation of JSON Schema validation for Python"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"},
+ {file = "jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4"},
+]
+
+[package.dependencies]
+attrs = ">=22.2.0"
+jsonschema-specifications = ">=2023.03.6"
+referencing = ">=0.28.4"
+rpds-py = ">=0.7.1"
+
+[package.extras]
+format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
+format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=24.6.0)"]
+
+[[package]]
+name = "jsonschema-specifications"
+version = "2024.10.1"
+description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry"
+optional = false
+python-versions = ">=3.9"
+files = [
+ {file = "jsonschema_specifications-2024.10.1-py3-none-any.whl", hash = "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf"},
+ {file = "jsonschema_specifications-2024.10.1.tar.gz", hash = "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272"},
+]
+
+[package.dependencies]
+referencing = ">=0.31.0"
+
+[[package]]
+name = "jupyter-client"
version = "8.6.3"
description = "Jupyter protocol implementation and client libraries"
optional = false
@@ -914,6 +1803,405 @@ traitlets = ">=5.3"
docs = ["myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"]
test = ["ipykernel", "pre-commit", "pytest (<8)", "pytest-cov", "pytest-timeout"]
+[[package]]
+name = "kiwisolver"
+version = "1.4.7"
+description = "A fast implementation of the Cassowary constraint solver"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8a9c83f75223d5e48b0bc9cb1bf2776cf01563e00ade8775ffe13b0b6e1af3a6"},
+ {file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:58370b1ffbd35407444d57057b57da5d6549d2d854fa30249771775c63b5fe17"},
+ {file = "kiwisolver-1.4.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aa0abdf853e09aff551db11fce173e2177d00786c688203f52c87ad7fcd91ef9"},
+ {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8d53103597a252fb3ab8b5845af04c7a26d5e7ea8122303dd7a021176a87e8b9"},
+ {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:88f17c5ffa8e9462fb79f62746428dd57b46eb931698e42e990ad63103f35e6c"},
+ {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88a9ca9c710d598fd75ee5de59d5bda2684d9db36a9f50b6125eaea3969c2599"},
+ {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f4d742cb7af1c28303a51b7a27aaee540e71bb8e24f68c736f6f2ffc82f2bf05"},
+ {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e28c7fea2196bf4c2f8d46a0415c77a1c480cc0724722f23d7410ffe9842c407"},
+ {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e968b84db54f9d42046cf154e02911e39c0435c9801681e3fc9ce8a3c4130278"},
+ {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0c18ec74c0472de033e1bebb2911c3c310eef5649133dd0bedf2a169a1b269e5"},
+ {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8f0ea6da6d393d8b2e187e6a5e3fb81f5862010a40c3945e2c6d12ae45cfb2ad"},
+ {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:f106407dda69ae456dd1227966bf445b157ccc80ba0dff3802bb63f30b74e895"},
+ {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:84ec80df401cfee1457063732d90022f93951944b5b58975d34ab56bb150dfb3"},
+ {file = "kiwisolver-1.4.7-cp310-cp310-win32.whl", hash = "sha256:71bb308552200fb2c195e35ef05de12f0c878c07fc91c270eb3d6e41698c3bcc"},
+ {file = "kiwisolver-1.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:44756f9fd339de0fb6ee4f8c1696cfd19b2422e0d70b4cefc1cc7f1f64045a8c"},
+ {file = "kiwisolver-1.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:78a42513018c41c2ffd262eb676442315cbfe3c44eed82385c2ed043bc63210a"},
+ {file = "kiwisolver-1.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d2b0e12a42fb4e72d509fc994713d099cbb15ebf1103545e8a45f14da2dfca54"},
+ {file = "kiwisolver-1.4.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2a8781ac3edc42ea4b90bc23e7d37b665d89423818e26eb6df90698aa2287c95"},
+ {file = "kiwisolver-1.4.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:46707a10836894b559e04b0fd143e343945c97fd170d69a2d26d640b4e297935"},
+ {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef97b8df011141c9b0f6caf23b29379f87dd13183c978a30a3c546d2c47314cb"},
+ {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab58c12a2cd0fc769089e6d38466c46d7f76aced0a1f54c77652446733d2d02"},
+ {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:803b8e1459341c1bb56d1c5c010406d5edec8a0713a0945851290a7930679b51"},
+ {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9a9e8a507420fe35992ee9ecb302dab68550dedc0da9e2880dd88071c5fb052"},
+ {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18077b53dc3bb490e330669a99920c5e6a496889ae8c63b58fbc57c3d7f33a18"},
+ {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6af936f79086a89b3680a280c47ea90b4df7047b5bdf3aa5c524bbedddb9e545"},
+ {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:3abc5b19d24af4b77d1598a585b8a719beb8569a71568b66f4ebe1fb0449460b"},
+ {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:933d4de052939d90afbe6e9d5273ae05fb836cc86c15b686edd4b3560cc0ee36"},
+ {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:65e720d2ab2b53f1f72fb5da5fb477455905ce2c88aaa671ff0a447c2c80e8e3"},
+ {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3bf1ed55088f214ba6427484c59553123fdd9b218a42bbc8c6496d6754b1e523"},
+ {file = "kiwisolver-1.4.7-cp311-cp311-win32.whl", hash = "sha256:4c00336b9dd5ad96d0a558fd18a8b6f711b7449acce4c157e7343ba92dd0cf3d"},
+ {file = "kiwisolver-1.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:929e294c1ac1e9f615c62a4e4313ca1823ba37326c164ec720a803287c4c499b"},
+ {file = "kiwisolver-1.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:e33e8fbd440c917106b237ef1a2f1449dfbb9b6f6e1ce17c94cd6a1e0d438376"},
+ {file = "kiwisolver-1.4.7-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:5360cc32706dab3931f738d3079652d20982511f7c0ac5711483e6eab08efff2"},
+ {file = "kiwisolver-1.4.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:942216596dc64ddb25adb215c3c783215b23626f8d84e8eff8d6d45c3f29f75a"},
+ {file = "kiwisolver-1.4.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:48b571ecd8bae15702e4f22d3ff6a0f13e54d3d00cd25216d5e7f658242065ee"},
+ {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad42ba922c67c5f219097b28fae965e10045ddf145d2928bfac2eb2e17673640"},
+ {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:612a10bdae23404a72941a0fc8fa2660c6ea1217c4ce0dbcab8a8f6543ea9e7f"},
+ {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e838bba3a3bac0fe06d849d29772eb1afb9745a59710762e4ba3f4cb8424483"},
+ {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:22f499f6157236c19f4bbbd472fa55b063db77a16cd74d49afe28992dff8c258"},
+ {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693902d433cf585133699972b6d7c42a8b9f8f826ebcaf0132ff55200afc599e"},
+ {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4e77f2126c3e0b0d055f44513ed349038ac180371ed9b52fe96a32aa071a5107"},
+ {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:657a05857bda581c3656bfc3b20e353c232e9193eb167766ad2dc58b56504948"},
+ {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4bfa75a048c056a411f9705856abfc872558e33c055d80af6a380e3658766038"},
+ {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:34ea1de54beef1c104422d210c47c7d2a4999bdecf42c7b5718fbe59a4cac383"},
+ {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:90da3b5f694b85231cf93586dad5e90e2d71b9428f9aad96952c99055582f520"},
+ {file = "kiwisolver-1.4.7-cp312-cp312-win32.whl", hash = "sha256:18e0cca3e008e17fe9b164b55735a325140a5a35faad8de92dd80265cd5eb80b"},
+ {file = "kiwisolver-1.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:58cb20602b18f86f83a5c87d3ee1c766a79c0d452f8def86d925e6c60fbf7bfb"},
+ {file = "kiwisolver-1.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:f5a8b53bdc0b3961f8b6125e198617c40aeed638b387913bf1ce78afb1b0be2a"},
+ {file = "kiwisolver-1.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2e6039dcbe79a8e0f044f1c39db1986a1b8071051efba3ee4d74f5b365f5226e"},
+ {file = "kiwisolver-1.4.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a1ecf0ac1c518487d9d23b1cd7139a6a65bc460cd101ab01f1be82ecf09794b6"},
+ {file = "kiwisolver-1.4.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7ab9ccab2b5bd5702ab0803676a580fffa2aa178c2badc5557a84cc943fcf750"},
+ {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f816dd2277f8d63d79f9c8473a79fe54047bc0467754962840782c575522224d"},
+ {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf8bcc23ceb5a1b624572a1623b9f79d2c3b337c8c455405ef231933a10da379"},
+ {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dea0bf229319828467d7fca8c7c189780aa9ff679c94539eed7532ebe33ed37c"},
+ {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c06a4c7cf15ec739ce0e5971b26c93638730090add60e183530d70848ebdd34"},
+ {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:913983ad2deb14e66d83c28b632fd35ba2b825031f2fa4ca29675e665dfecbe1"},
+ {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5337ec7809bcd0f424c6b705ecf97941c46279cf5ed92311782c7c9c2026f07f"},
+ {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4c26ed10c4f6fa6ddb329a5120ba3b6db349ca192ae211e882970bfc9d91420b"},
+ {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c619b101e6de2222c1fcb0531e1b17bbffbe54294bfba43ea0d411d428618c27"},
+ {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:073a36c8273647592ea332e816e75ef8da5c303236ec0167196793eb1e34657a"},
+ {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3ce6b2b0231bda412463e152fc18335ba32faf4e8c23a754ad50ffa70e4091ee"},
+ {file = "kiwisolver-1.4.7-cp313-cp313-win32.whl", hash = "sha256:f4c9aee212bc89d4e13f58be11a56cc8036cabad119259d12ace14b34476fd07"},
+ {file = "kiwisolver-1.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:8a3ec5aa8e38fc4c8af308917ce12c536f1c88452ce554027e55b22cbbfbff76"},
+ {file = "kiwisolver-1.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:76c8094ac20ec259471ac53e774623eb62e6e1f56cd8690c67ce6ce4fcb05650"},
+ {file = "kiwisolver-1.4.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5d5abf8f8ec1f4e22882273c423e16cae834c36856cac348cfbfa68e01c40f3a"},
+ {file = "kiwisolver-1.4.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:aeb3531b196ef6f11776c21674dba836aeea9d5bd1cf630f869e3d90b16cfade"},
+ {file = "kiwisolver-1.4.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b7d755065e4e866a8086c9bdada157133ff466476a2ad7861828e17b6026e22c"},
+ {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08471d4d86cbaec61f86b217dd938a83d85e03785f51121e791a6e6689a3be95"},
+ {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7bbfcb7165ce3d54a3dfbe731e470f65739c4c1f85bb1018ee912bae139e263b"},
+ {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d34eb8494bea691a1a450141ebb5385e4b69d38bb8403b5146ad279f4b30fa3"},
+ {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9242795d174daa40105c1d86aba618e8eab7bf96ba8c3ee614da8302a9f95503"},
+ {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a0f64a48bb81af7450e641e3fe0b0394d7381e342805479178b3d335d60ca7cf"},
+ {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:8e045731a5416357638d1700927529e2b8ab304811671f665b225f8bf8d8f933"},
+ {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:4322872d5772cae7369f8351da1edf255a604ea7087fe295411397d0cfd9655e"},
+ {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:e1631290ee9271dffe3062d2634c3ecac02c83890ada077d225e081aca8aab89"},
+ {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:edcfc407e4eb17e037bca59be0e85a2031a2ac87e4fed26d3e9df88b4165f92d"},
+ {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:4d05d81ecb47d11e7f8932bd8b61b720bf0b41199358f3f5e36d38e28f0532c5"},
+ {file = "kiwisolver-1.4.7-cp38-cp38-win32.whl", hash = "sha256:b38ac83d5f04b15e515fd86f312479d950d05ce2368d5413d46c088dda7de90a"},
+ {file = "kiwisolver-1.4.7-cp38-cp38-win_amd64.whl", hash = "sha256:d83db7cde68459fc803052a55ace60bea2bae361fc3b7a6d5da07e11954e4b09"},
+ {file = "kiwisolver-1.4.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3f9362ecfca44c863569d3d3c033dbe8ba452ff8eed6f6b5806382741a1334bd"},
+ {file = "kiwisolver-1.4.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e8df2eb9b2bac43ef8b082e06f750350fbbaf2887534a5be97f6cf07b19d9583"},
+ {file = "kiwisolver-1.4.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f32d6edbc638cde7652bd690c3e728b25332acbadd7cad670cc4a02558d9c417"},
+ {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e2e6c39bd7b9372b0be21456caab138e8e69cc0fc1190a9dfa92bd45a1e6e904"},
+ {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dda56c24d869b1193fcc763f1284b9126550eaf84b88bbc7256e15028f19188a"},
+ {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79849239c39b5e1fd906556c474d9b0439ea6792b637511f3fe3a41158d89ca8"},
+ {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5e3bc157fed2a4c02ec468de4ecd12a6e22818d4f09cde2c31ee3226ffbefab2"},
+ {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3da53da805b71e41053dc670f9a820d1157aae77b6b944e08024d17bcd51ef88"},
+ {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8705f17dfeb43139a692298cb6637ee2e59c0194538153e83e9ee0c75c2eddde"},
+ {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:82a5c2f4b87c26bb1a0ef3d16b5c4753434633b83d365cc0ddf2770c93829e3c"},
+ {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce8be0466f4c0d585cdb6c1e2ed07232221df101a4c6f28821d2aa754ca2d9e2"},
+ {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:409afdfe1e2e90e6ee7fc896f3df9a7fec8e793e58bfa0d052c8a82f99c37abb"},
+ {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5b9c3f4ee0b9a439d2415012bd1b1cc2df59e4d6a9939f4d669241d30b414327"},
+ {file = "kiwisolver-1.4.7-cp39-cp39-win32.whl", hash = "sha256:a79ae34384df2b615eefca647a2873842ac3b596418032bef9a7283675962644"},
+ {file = "kiwisolver-1.4.7-cp39-cp39-win_amd64.whl", hash = "sha256:cf0438b42121a66a3a667de17e779330fc0f20b0d97d59d2f2121e182b0505e4"},
+ {file = "kiwisolver-1.4.7-cp39-cp39-win_arm64.whl", hash = "sha256:764202cc7e70f767dab49e8df52c7455e8de0df5d858fa801a11aa0d882ccf3f"},
+ {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:94252291e3fe68001b1dd747b4c0b3be12582839b95ad4d1b641924d68fd4643"},
+ {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5b7dfa3b546da08a9f622bb6becdb14b3e24aaa30adba66749d38f3cc7ea9706"},
+ {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd3de6481f4ed8b734da5df134cd5a6a64fe32124fe83dde1e5b5f29fe30b1e6"},
+ {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a91b5f9f1205845d488c928e8570dcb62b893372f63b8b6e98b863ebd2368ff2"},
+ {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40fa14dbd66b8b8f470d5fc79c089a66185619d31645f9b0773b88b19f7223c4"},
+ {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:eb542fe7933aa09d8d8f9d9097ef37532a7df6497819d16efe4359890a2f417a"},
+ {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bfa1acfa0c54932d5607e19a2c24646fb4c1ae2694437789129cf099789a3b00"},
+ {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:eee3ea935c3d227d49b4eb85660ff631556841f6e567f0f7bda972df6c2c9935"},
+ {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f3160309af4396e0ed04db259c3ccbfdc3621b5559b5453075e5de555e1f3a1b"},
+ {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a17f6a29cf8935e587cc8a4dbfc8368c55edc645283db0ce9801016f83526c2d"},
+ {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10849fb2c1ecbfae45a693c070e0320a91b35dd4bcf58172c023b994283a124d"},
+ {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:ac542bf38a8a4be2dc6b15248d36315ccc65f0743f7b1a76688ffb6b5129a5c2"},
+ {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8b01aac285f91ca889c800042c35ad3b239e704b150cfd3382adfc9dcc780e39"},
+ {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:48be928f59a1f5c8207154f935334d374e79f2b5d212826307d072595ad76a2e"},
+ {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f37cfe618a117e50d8c240555331160d73d0411422b59b5ee217843d7b693608"},
+ {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:599b5c873c63a1f6ed7eead644a8a380cfbdf5db91dcb6f85707aaab213b1674"},
+ {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:801fa7802e5cfabe3ab0c81a34c323a319b097dfb5004be950482d882f3d7225"},
+ {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0c6c43471bc764fad4bc99c5c2d6d16a676b1abf844ca7c8702bdae92df01ee0"},
+ {file = "kiwisolver-1.4.7.tar.gz", hash = "sha256:9893ff81bd7107f7b685d3017cc6583daadb4fc26e4a888350df530e41980a60"},
+]
+
+[[package]]
+name = "language-tags"
+version = "1.2.0"
+description = "This project is a Python version of the language-tags Javascript project."
+optional = false
+python-versions = "*"
+files = [
+ {file = "language_tags-1.2.0-py3-none-any.whl", hash = "sha256:d815604622242fdfbbfd747b40c31213617fd03734a267f2e39ee4bd73c88722"},
+ {file = "language_tags-1.2.0.tar.gz", hash = "sha256:e934acba3e3dc85f867703eca421847a9ab7b7679b11b5d5cfd096febbf8bde6"},
+]
+
+[[package]]
+name = "libf0"
+version = "1.0.2"
+description = "A Python Library for Fundamental Frequency Estimation in Music Recordings"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "libf0-1.0.2-py3-none-any.whl", hash = "sha256:8b2f4fc234eb6f1af5061b01613fcf477976604b865a236a4ac98e966bfd4587"},
+ {file = "libf0-1.0.2.tar.gz", hash = "sha256:a679788d6604db60621ac28979f4024b81bae0752d9bf7d3205e15f37718f800"},
+]
+
+[package.dependencies]
+librosa = ">=0.8.0,<1.0.0"
+numba = ">=0.51.0,<1.0.0"
+numpy = ">=1.17.0,<2.0.0"
+scipy = ">=1.3.0,<2.0.0"
+
+[package.extras]
+dev = ["ipython (>=7.8.0,<8.0.0)", "jupyter (==1.0.*)", "matplotlib (>=3.1.0,<4.0.0)", "nbstripout (==0.4.*)", "pysoundfile (>=0.9.0,<1.0.0)"]
+docs = ["sphinx (==4.0.*)", "sphinx-rtd-theme (==0.5.*)"]
+tests = ["pytest (==6.2.*)"]
+
+[[package]]
+name = "librosa"
+version = "0.9.2"
+description = "Python module for audio and music processing"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "librosa-0.9.2-py3-none-any.whl", hash = "sha256:322a813e6d37af9fbc369e6a637dcf5fdc5c6925ce806a0d27c68de61a81350f"},
+ {file = "librosa-0.9.2.tar.gz", hash = "sha256:5b576b5efdce428e90bc988bdd5a953d12a727e5f931f30d74c53b63abbe3c89"},
+]
+
+[package.dependencies]
+audioread = ">=2.1.9"
+decorator = ">=4.0.10"
+joblib = ">=0.14"
+numba = ">=0.45.1"
+numpy = ">=1.17.0"
+packaging = ">=20.0"
+pooch = ">=1.0"
+resampy = ">=0.2.2"
+scikit-learn = ">=0.19.1"
+scipy = ">=1.2.0"
+soundfile = ">=0.10.2"
+
+[package.extras]
+display = ["matplotlib (>=3.3.0)"]
+docs = ["ipython (>=7.0)", "matplotlib (>=3.3.0)", "mir-eval (>=0.5)", "numba (<0.50)", "numpydoc", "presets", "sphinx (!=1.3.1)", "sphinx-gallery (>=0.7)", "sphinx-multiversion (>=0.2.3)", "sphinx-rtd-theme (==1.*)", "sphinxcontrib-svg2pdfconverter"]
+tests = ["contextlib2", "matplotlib (>=3.3.0)", "pytest", "pytest-cov", "pytest-mpl", "samplerate", "soxr"]
+
+[[package]]
+name = "llvmlite"
+version = "0.43.0"
+description = "lightweight wrapper around basic LLVM functionality"
+optional = false
+python-versions = ">=3.9"
+files = [
+ {file = "llvmlite-0.43.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a289af9a1687c6cf463478f0fa8e8aa3b6fb813317b0d70bf1ed0759eab6f761"},
+ {file = "llvmlite-0.43.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6d4fd101f571a31acb1559ae1af30f30b1dc4b3186669f92ad780e17c81e91bc"},
+ {file = "llvmlite-0.43.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d434ec7e2ce3cc8f452d1cd9a28591745de022f931d67be688a737320dfcead"},
+ {file = "llvmlite-0.43.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6912a87782acdff6eb8bf01675ed01d60ca1f2551f8176a300a886f09e836a6a"},
+ {file = "llvmlite-0.43.0-cp310-cp310-win_amd64.whl", hash = "sha256:14f0e4bf2fd2d9a75a3534111e8ebeb08eda2f33e9bdd6dfa13282afacdde0ed"},
+ {file = "llvmlite-0.43.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3e8d0618cb9bfe40ac38a9633f2493d4d4e9fcc2f438d39a4e854f39cc0f5f98"},
+ {file = "llvmlite-0.43.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0a9a1a39d4bf3517f2af9d23d479b4175ead205c592ceeb8b89af48a327ea57"},
+ {file = "llvmlite-0.43.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1da416ab53e4f7f3bc8d4eeba36d801cc1894b9fbfbf2022b29b6bad34a7df2"},
+ {file = "llvmlite-0.43.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:977525a1e5f4059316b183fb4fd34fa858c9eade31f165427a3977c95e3ee749"},
+ {file = "llvmlite-0.43.0-cp311-cp311-win_amd64.whl", hash = "sha256:d5bd550001d26450bd90777736c69d68c487d17bf371438f975229b2b8241a91"},
+ {file = "llvmlite-0.43.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f99b600aa7f65235a5a05d0b9a9f31150c390f31261f2a0ba678e26823ec38f7"},
+ {file = "llvmlite-0.43.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:35d80d61d0cda2d767f72de99450766250560399edc309da16937b93d3b676e7"},
+ {file = "llvmlite-0.43.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eccce86bba940bae0d8d48ed925f21dbb813519169246e2ab292b5092aba121f"},
+ {file = "llvmlite-0.43.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df6509e1507ca0760787a199d19439cc887bfd82226f5af746d6977bd9f66844"},
+ {file = "llvmlite-0.43.0-cp312-cp312-win_amd64.whl", hash = "sha256:7a2872ee80dcf6b5dbdc838763d26554c2a18aa833d31a2635bff16aafefb9c9"},
+ {file = "llvmlite-0.43.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9cd2a7376f7b3367019b664c21f0c61766219faa3b03731113ead75107f3b66c"},
+ {file = "llvmlite-0.43.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:18e9953c748b105668487b7c81a3e97b046d8abf95c4ddc0cd3c94f4e4651ae8"},
+ {file = "llvmlite-0.43.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74937acd22dc11b33946b67dca7680e6d103d6e90eeaaaf932603bec6fe7b03a"},
+ {file = "llvmlite-0.43.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc9efc739cc6ed760f795806f67889923f7274276f0eb45092a1473e40d9b867"},
+ {file = "llvmlite-0.43.0-cp39-cp39-win_amd64.whl", hash = "sha256:47e147cdda9037f94b399bf03bfd8a6b6b1f2f90be94a454e3386f006455a9b4"},
+ {file = "llvmlite-0.43.0.tar.gz", hash = "sha256:ae2b5b5c3ef67354824fb75517c8db5fbe93bc02cd9671f3c62271626bc041d5"},
+]
+
+[[package]]
+name = "local-attention"
+version = "1.9.15"
+description = "Local attention, window with lookback, for language modeling"
+optional = false
+python-versions = "*"
+files = [
+ {file = "local_attention-1.9.15-py3-none-any.whl", hash = "sha256:d3055bdb87c1a8a68c6795b849b453ea9c2adb0dc426d72f71bd53f84be6e0db"},
+ {file = "local_attention-1.9.15.tar.gz", hash = "sha256:8c322d9141af2860624917d9d60b502f1a1654ac3cf1052c6ff03f5ab785d5e9"},
+]
+
+[package.dependencies]
+einops = ">=0.8.0"
+torch = "*"
+
+[[package]]
+name = "lxml"
+version = "5.3.0"
+description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API."
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "lxml-5.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:dd36439be765e2dde7660212b5275641edbc813e7b24668831a5c8ac91180656"},
+ {file = "lxml-5.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ae5fe5c4b525aa82b8076c1a59d642c17b6e8739ecf852522c6321852178119d"},
+ {file = "lxml-5.3.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:501d0d7e26b4d261fca8132854d845e4988097611ba2531408ec91cf3fd9d20a"},
+ {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb66442c2546446944437df74379e9cf9e9db353e61301d1a0e26482f43f0dd8"},
+ {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e41506fec7a7f9405b14aa2d5c8abbb4dbbd09d88f9496958b6d00cb4d45330"},
+ {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f7d4a670107d75dfe5ad080bed6c341d18c4442f9378c9f58e5851e86eb79965"},
+ {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41ce1f1e2c7755abfc7e759dc34d7d05fd221723ff822947132dc934d122fe22"},
+ {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:44264ecae91b30e5633013fb66f6ddd05c006d3e0e884f75ce0b4755b3e3847b"},
+ {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:3c174dc350d3ec52deb77f2faf05c439331d6ed5e702fc247ccb4e6b62d884b7"},
+ {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:2dfab5fa6a28a0b60a20638dc48e6343c02ea9933e3279ccb132f555a62323d8"},
+ {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b1c8c20847b9f34e98080da785bb2336ea982e7f913eed5809e5a3c872900f32"},
+ {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2c86bf781b12ba417f64f3422cfc302523ac9cd1d8ae8c0f92a1c66e56ef2e86"},
+ {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:c162b216070f280fa7da844531169be0baf9ccb17263cf5a8bf876fcd3117fa5"},
+ {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:36aef61a1678cb778097b4a6eeae96a69875d51d1e8f4d4b491ab3cfb54b5a03"},
+ {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f65e5120863c2b266dbcc927b306c5b78e502c71edf3295dfcb9501ec96e5fc7"},
+ {file = "lxml-5.3.0-cp310-cp310-win32.whl", hash = "sha256:ef0c1fe22171dd7c7c27147f2e9c3e86f8bdf473fed75f16b0c2e84a5030ce80"},
+ {file = "lxml-5.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:052d99051e77a4f3e8482c65014cf6372e61b0a6f4fe9edb98503bb5364cfee3"},
+ {file = "lxml-5.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:74bcb423462233bc5d6066e4e98b0264e7c1bed7541fff2f4e34fe6b21563c8b"},
+ {file = "lxml-5.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a3d819eb6f9b8677f57f9664265d0a10dd6551d227afb4af2b9cd7bdc2ccbf18"},
+ {file = "lxml-5.3.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b8f5db71b28b8c404956ddf79575ea77aa8b1538e8b2ef9ec877945b3f46442"},
+ {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3406b63232fc7e9b8783ab0b765d7c59e7c59ff96759d8ef9632fca27c7ee4"},
+ {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ecdd78ab768f844c7a1d4a03595038c166b609f6395e25af9b0f3f26ae1230f"},
+ {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:168f2dfcfdedf611eb285efac1516c8454c8c99caf271dccda8943576b67552e"},
+ {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa617107a410245b8660028a7483b68e7914304a6d4882b5ff3d2d3eb5948d8c"},
+ {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:69959bd3167b993e6e710b99051265654133a98f20cec1d9b493b931942e9c16"},
+ {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:bd96517ef76c8654446fc3db9242d019a1bb5fe8b751ba414765d59f99210b79"},
+ {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:ab6dd83b970dc97c2d10bc71aa925b84788c7c05de30241b9e96f9b6d9ea3080"},
+ {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:eec1bb8cdbba2925bedc887bc0609a80e599c75b12d87ae42ac23fd199445654"},
+ {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6a7095eeec6f89111d03dabfe5883a1fd54da319c94e0fb104ee8f23616b572d"},
+ {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6f651ebd0b21ec65dfca93aa629610a0dbc13dbc13554f19b0113da2e61a4763"},
+ {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:f422a209d2455c56849442ae42f25dbaaba1c6c3f501d58761c619c7836642ec"},
+ {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:62f7fdb0d1ed2065451f086519865b4c90aa19aed51081979ecd05a21eb4d1be"},
+ {file = "lxml-5.3.0-cp311-cp311-win32.whl", hash = "sha256:c6379f35350b655fd817cd0d6cbeef7f265f3ae5fedb1caae2eb442bbeae9ab9"},
+ {file = "lxml-5.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:9c52100e2c2dbb0649b90467935c4b0de5528833c76a35ea1a2691ec9f1ee7a1"},
+ {file = "lxml-5.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:e99f5507401436fdcc85036a2e7dc2e28d962550afe1cbfc07c40e454256a859"},
+ {file = "lxml-5.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:384aacddf2e5813a36495233b64cb96b1949da72bef933918ba5c84e06af8f0e"},
+ {file = "lxml-5.3.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:874a216bf6afaf97c263b56371434e47e2c652d215788396f60477540298218f"},
+ {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65ab5685d56914b9a2a34d67dd5488b83213d680b0c5d10b47f81da5a16b0b0e"},
+ {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aac0bbd3e8dd2d9c45ceb82249e8bdd3ac99131a32b4d35c8af3cc9db1657179"},
+ {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b369d3db3c22ed14c75ccd5af429086f166a19627e84a8fdade3f8f31426e52a"},
+ {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c24037349665434f375645fa9d1f5304800cec574d0310f618490c871fd902b3"},
+ {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:62d172f358f33a26d6b41b28c170c63886742f5b6772a42b59b4f0fa10526cb1"},
+ {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:c1f794c02903c2824fccce5b20c339a1a14b114e83b306ff11b597c5f71a1c8d"},
+ {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:5d6a6972b93c426ace71e0be9a6f4b2cfae9b1baed2eed2006076a746692288c"},
+ {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:3879cc6ce938ff4eb4900d901ed63555c778731a96365e53fadb36437a131a99"},
+ {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:74068c601baff6ff021c70f0935b0c7bc528baa8ea210c202e03757c68c5a4ff"},
+ {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:ecd4ad8453ac17bc7ba3868371bffb46f628161ad0eefbd0a855d2c8c32dd81a"},
+ {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:7e2f58095acc211eb9d8b5771bf04df9ff37d6b87618d1cbf85f92399c98dae8"},
+ {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e63601ad5cd8f860aa99d109889b5ac34de571c7ee902d6812d5d9ddcc77fa7d"},
+ {file = "lxml-5.3.0-cp312-cp312-win32.whl", hash = "sha256:17e8d968d04a37c50ad9c456a286b525d78c4a1c15dd53aa46c1d8e06bf6fa30"},
+ {file = "lxml-5.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:c1a69e58a6bb2de65902051d57fde951febad631a20a64572677a1052690482f"},
+ {file = "lxml-5.3.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8c72e9563347c7395910de6a3100a4840a75a6f60e05af5e58566868d5eb2d6a"},
+ {file = "lxml-5.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e92ce66cd919d18d14b3856906a61d3f6b6a8500e0794142338da644260595cd"},
+ {file = "lxml-5.3.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d04f064bebdfef9240478f7a779e8c5dc32b8b7b0b2fc6a62e39b928d428e51"},
+ {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c2fb570d7823c2bbaf8b419ba6e5662137f8166e364a8b2b91051a1fb40ab8b"},
+ {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c120f43553ec759f8de1fee2f4794452b0946773299d44c36bfe18e83caf002"},
+ {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:562e7494778a69086f0312ec9689f6b6ac1c6b65670ed7d0267e49f57ffa08c4"},
+ {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:423b121f7e6fa514ba0c7918e56955a1d4470ed35faa03e3d9f0e3baa4c7e492"},
+ {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:c00f323cc00576df6165cc9d21a4c21285fa6b9989c5c39830c3903dc4303ef3"},
+ {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:1fdc9fae8dd4c763e8a31e7630afef517eab9f5d5d31a278df087f307bf601f4"},
+ {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:658f2aa69d31e09699705949b5fc4719cbecbd4a97f9656a232e7d6c7be1a367"},
+ {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1473427aff3d66a3fa2199004c3e601e6c4500ab86696edffdbc84954c72d832"},
+ {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a87de7dd873bf9a792bf1e58b1c3887b9264036629a5bf2d2e6579fe8e73edff"},
+ {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:0d7b36afa46c97875303a94e8f3ad932bf78bace9e18e603f2085b652422edcd"},
+ {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:cf120cce539453ae086eacc0130a324e7026113510efa83ab42ef3fcfccac7fb"},
+ {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:df5c7333167b9674aa8ae1d4008fa4bc17a313cc490b2cca27838bbdcc6bb15b"},
+ {file = "lxml-5.3.0-cp313-cp313-win32.whl", hash = "sha256:c802e1c2ed9f0c06a65bc4ed0189d000ada8049312cfeab6ca635e39c9608957"},
+ {file = "lxml-5.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:406246b96d552e0503e17a1006fd27edac678b3fcc9f1be71a2f94b4ff61528d"},
+ {file = "lxml-5.3.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:8f0de2d390af441fe8b2c12626d103540b5d850d585b18fcada58d972b74a74e"},
+ {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1afe0a8c353746e610bd9031a630a95bcfb1a720684c3f2b36c4710a0a96528f"},
+ {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56b9861a71575f5795bde89256e7467ece3d339c9b43141dbdd54544566b3b94"},
+ {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:9fb81d2824dff4f2e297a276297e9031f46d2682cafc484f49de182aa5e5df99"},
+ {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2c226a06ecb8cdef28845ae976da407917542c5e6e75dcac7cc33eb04aaeb237"},
+ {file = "lxml-5.3.0-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:7d3d1ca42870cdb6d0d29939630dbe48fa511c203724820fc0fd507b2fb46577"},
+ {file = "lxml-5.3.0-cp36-cp36m-win32.whl", hash = "sha256:094cb601ba9f55296774c2d57ad68730daa0b13dc260e1f941b4d13678239e70"},
+ {file = "lxml-5.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:eafa2c8658f4e560b098fe9fc54539f86528651f61849b22111a9b107d18910c"},
+ {file = "lxml-5.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cb83f8a875b3d9b458cada4f880fa498646874ba4011dc974e071a0a84a1b033"},
+ {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:25f1b69d41656b05885aa185f5fdf822cb01a586d1b32739633679699f220391"},
+ {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23e0553b8055600b3bf4a00b255ec5c92e1e4aebf8c2c09334f8368e8bd174d6"},
+ {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ada35dd21dc6c039259596b358caab6b13f4db4d4a7f8665764d616daf9cc1d"},
+ {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:81b4e48da4c69313192d8c8d4311e5d818b8be1afe68ee20f6385d0e96fc9512"},
+ {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:2bc9fd5ca4729af796f9f59cd8ff160fe06a474da40aca03fcc79655ddee1a8b"},
+ {file = "lxml-5.3.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:07da23d7ee08577760f0a71d67a861019103e4812c87e2fab26b039054594cc5"},
+ {file = "lxml-5.3.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:ea2e2f6f801696ad7de8aec061044d6c8c0dd4037608c7cab38a9a4d316bfb11"},
+ {file = "lxml-5.3.0-cp37-cp37m-win32.whl", hash = "sha256:5c54afdcbb0182d06836cc3d1be921e540be3ebdf8b8a51ee3ef987537455f84"},
+ {file = "lxml-5.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:f2901429da1e645ce548bf9171784c0f74f0718c3f6150ce166be39e4dd66c3e"},
+ {file = "lxml-5.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c56a1d43b2f9ee4786e4658c7903f05da35b923fb53c11025712562d5cc02753"},
+ {file = "lxml-5.3.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ee8c39582d2652dcd516d1b879451500f8db3fe3607ce45d7c5957ab2596040"},
+ {file = "lxml-5.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fdf3a3059611f7585a78ee10399a15566356116a4288380921a4b598d807a22"},
+ {file = "lxml-5.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:146173654d79eb1fc97498b4280c1d3e1e5d58c398fa530905c9ea50ea849b22"},
+ {file = "lxml-5.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:0a7056921edbdd7560746f4221dca89bb7a3fe457d3d74267995253f46343f15"},
+ {file = "lxml-5.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:9e4b47ac0f5e749cfc618efdf4726269441014ae1d5583e047b452a32e221920"},
+ {file = "lxml-5.3.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:f914c03e6a31deb632e2daa881fe198461f4d06e57ac3d0e05bbcab8eae01945"},
+ {file = "lxml-5.3.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:213261f168c5e1d9b7535a67e68b1f59f92398dd17a56d934550837143f79c42"},
+ {file = "lxml-5.3.0-cp38-cp38-win32.whl", hash = "sha256:218c1b2e17a710e363855594230f44060e2025b05c80d1f0661258142b2add2e"},
+ {file = "lxml-5.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:315f9542011b2c4e1d280e4a20ddcca1761993dda3afc7a73b01235f8641e903"},
+ {file = "lxml-5.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1ffc23010330c2ab67fac02781df60998ca8fe759e8efde6f8b756a20599c5de"},
+ {file = "lxml-5.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2b3778cb38212f52fac9fe913017deea2fdf4eb1a4f8e4cfc6b009a13a6d3fcc"},
+ {file = "lxml-5.3.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b0c7a688944891086ba192e21c5229dea54382f4836a209ff8d0a660fac06be"},
+ {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:747a3d3e98e24597981ca0be0fd922aebd471fa99d0043a3842d00cdcad7ad6a"},
+ {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86a6b24b19eaebc448dc56b87c4865527855145d851f9fc3891673ff97950540"},
+ {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b11a5d918a6216e521c715b02749240fb07ae5a1fefd4b7bf12f833bc8b4fe70"},
+ {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68b87753c784d6acb8a25b05cb526c3406913c9d988d51f80adecc2b0775d6aa"},
+ {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:109fa6fede314cc50eed29e6e56c540075e63d922455346f11e4d7a036d2b8cf"},
+ {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_ppc64le.whl", hash = "sha256:02ced472497b8362c8e902ade23e3300479f4f43e45f4105c85ef43b8db85229"},
+ {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_s390x.whl", hash = "sha256:6b038cc86b285e4f9fea2ba5ee76e89f21ed1ea898e287dc277a25884f3a7dfe"},
+ {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:7437237c6a66b7ca341e868cda48be24b8701862757426852c9b3186de1da8a2"},
+ {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7f41026c1d64043a36fda21d64c5026762d53a77043e73e94b71f0521939cc71"},
+ {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:482c2f67761868f0108b1743098640fbb2a28a8e15bf3f47ada9fa59d9fe08c3"},
+ {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:1483fd3358963cc5c1c9b122c80606a3a79ee0875bcac0204149fa09d6ff2727"},
+ {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2dec2d1130a9cda5b904696cec33b2cfb451304ba9081eeda7f90f724097300a"},
+ {file = "lxml-5.3.0-cp39-cp39-win32.whl", hash = "sha256:a0eabd0a81625049c5df745209dc7fcef6e2aea7793e5f003ba363610aa0a3ff"},
+ {file = "lxml-5.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:89e043f1d9d341c52bf2af6d02e6adde62e0a46e6755d5eb60dc6e4f0b8aeca2"},
+ {file = "lxml-5.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7b1cd427cb0d5f7393c31b7496419da594fe600e6fdc4b105a54f82405e6626c"},
+ {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51806cfe0279e06ed8500ce19479d757db42a30fd509940b1701be9c86a5ff9a"},
+ {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee70d08fd60c9565ba8190f41a46a54096afa0eeb8f76bd66f2c25d3b1b83005"},
+ {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:8dc2c0395bea8254d8daebc76dcf8eb3a95ec2a46fa6fae5eaccee366bfe02ce"},
+ {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6ba0d3dcac281aad8a0e5b14c7ed6f9fa89c8612b47939fc94f80b16e2e9bc83"},
+ {file = "lxml-5.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:6e91cf736959057f7aac7adfc83481e03615a8e8dd5758aa1d95ea69e8931dba"},
+ {file = "lxml-5.3.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:94d6c3782907b5e40e21cadf94b13b0842ac421192f26b84c45f13f3c9d5dc27"},
+ {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c300306673aa0f3ed5ed9372b21867690a17dba38c68c44b287437c362ce486b"},
+ {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78d9b952e07aed35fe2e1a7ad26e929595412db48535921c5013edc8aa4a35ce"},
+ {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:01220dca0d066d1349bd6a1726856a78f7929f3878f7e2ee83c296c69495309e"},
+ {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:2d9b8d9177afaef80c53c0a9e30fa252ff3036fb1c6494d427c066a4ce6a282f"},
+ {file = "lxml-5.3.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:20094fc3f21ea0a8669dc4c61ed7fa8263bd37d97d93b90f28fc613371e7a875"},
+ {file = "lxml-5.3.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ace2c2326a319a0bb8a8b0e5b570c764962e95818de9f259ce814ee666603f19"},
+ {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92e67a0be1639c251d21e35fe74df6bcc40cba445c2cda7c4a967656733249e2"},
+ {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd5350b55f9fecddc51385463a4f67a5da829bc741e38cf689f38ec9023f54ab"},
+ {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c1fefd7e3d00921c44dc9ca80a775af49698bbfd92ea84498e56acffd4c5469"},
+ {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:71a8dd38fbd2f2319136d4ae855a7078c69c9a38ae06e0c17c73fd70fc6caad8"},
+ {file = "lxml-5.3.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:97acf1e1fd66ab53dacd2c35b319d7e548380c2e9e8c54525c6e76d21b1ae3b1"},
+ {file = "lxml-5.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:68934b242c51eb02907c5b81d138cb977b2129a0a75a8f8b60b01cb8586c7b21"},
+ {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b710bc2b8292966b23a6a0121f7a6c51d45d2347edcc75f016ac123b8054d3f2"},
+ {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18feb4b93302091b1541221196a2155aa296c363fd233814fa11e181adebc52f"},
+ {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:3eb44520c4724c2e1a57c0af33a379eee41792595023f367ba3952a2d96c2aab"},
+ {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:609251a0ca4770e5a8768ff902aa02bf636339c5a93f9349b48eb1f606f7f3e9"},
+ {file = "lxml-5.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:516f491c834eb320d6c843156440fe7fc0d50b33e44387fcec5b02f0bc118a4c"},
+ {file = "lxml-5.3.0.tar.gz", hash = "sha256:4e109ca30d1edec1ac60cdbe341905dc3b8f55b16855e03a54aaf59e51ec8c6f"},
+]
+
+[package.extras]
+cssselect = ["cssselect (>=0.7)"]
+html-clean = ["lxml-html-clean"]
+html5 = ["html5lib"]
+htmlsoup = ["BeautifulSoup4"]
+source = ["Cython (>=3.0.11)"]
+
+[[package]]
+name = "markdown"
+version = "3.7"
+description = "Python implementation of John Gruber's Markdown."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "Markdown-3.7-py3-none-any.whl", hash = "sha256:7eb6df5690b81a1d7942992c97fad2938e956e79df20cbc6186e9c3a77b1c803"},
+ {file = "markdown-3.7.tar.gz", hash = "sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2"},
+]
+
+[package.extras]
+docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"]
+testing = ["coverage", "pyyaml"]
+
[[package]]
name = "markdown-it-py"
version = "3.0.0"
@@ -1007,6 +2295,67 @@ files = [
{file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"},
]
+[[package]]
+name = "matplotlib"
+version = "3.7.2"
+description = "Python plotting package"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "matplotlib-3.7.2-cp310-cp310-macosx_10_12_universal2.whl", hash = "sha256:2699f7e73a76d4c110f4f25be9d2496d6ab4f17345307738557d345f099e07de"},
+ {file = "matplotlib-3.7.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a8035ba590658bae7562786c9cc6ea1a84aa49d3afab157e414c9e2ea74f496d"},
+ {file = "matplotlib-3.7.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2f8e4a49493add46ad4a8c92f63e19d548b2b6ebbed75c6b4c7f46f57d36cdd1"},
+ {file = "matplotlib-3.7.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71667eb2ccca4c3537d9414b1bc00554cb7f91527c17ee4ec38027201f8f1603"},
+ {file = "matplotlib-3.7.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:152ee0b569a37630d8628534c628456b28686e085d51394da6b71ef84c4da201"},
+ {file = "matplotlib-3.7.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:070f8dddd1f5939e60aacb8fa08f19551f4b0140fab16a3669d5cd6e9cb28fc8"},
+ {file = "matplotlib-3.7.2-cp310-cp310-win32.whl", hash = "sha256:fdbb46fad4fb47443b5b8ac76904b2e7a66556844f33370861b4788db0f8816a"},
+ {file = "matplotlib-3.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:23fb1750934e5f0128f9423db27c474aa32534cec21f7b2153262b066a581fd1"},
+ {file = "matplotlib-3.7.2-cp311-cp311-macosx_10_12_universal2.whl", hash = "sha256:30e1409b857aa8a747c5d4f85f63a79e479835f8dffc52992ac1f3f25837b544"},
+ {file = "matplotlib-3.7.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:50e0a55ec74bf2d7a0ebf50ac580a209582c2dd0f7ab51bc270f1b4a0027454e"},
+ {file = "matplotlib-3.7.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ac60daa1dc83e8821eed155796b0f7888b6b916cf61d620a4ddd8200ac70cd64"},
+ {file = "matplotlib-3.7.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:305e3da477dc8607336ba10bac96986d6308d614706cae2efe7d3ffa60465b24"},
+ {file = "matplotlib-3.7.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c308b255efb9b06b23874236ec0f10f026673ad6515f602027cc8ac7805352d"},
+ {file = "matplotlib-3.7.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60c521e21031632aa0d87ca5ba0c1c05f3daacadb34c093585a0be6780f698e4"},
+ {file = "matplotlib-3.7.2-cp311-cp311-win32.whl", hash = "sha256:26bede320d77e469fdf1bde212de0ec889169b04f7f1179b8930d66f82b30cbc"},
+ {file = "matplotlib-3.7.2-cp311-cp311-win_amd64.whl", hash = "sha256:af4860132c8c05261a5f5f8467f1b269bf1c7c23902d75f2be57c4a7f2394b3e"},
+ {file = "matplotlib-3.7.2-cp38-cp38-macosx_10_12_universal2.whl", hash = "sha256:a1733b8e84e7e40a9853e505fe68cc54339f97273bdfe6f3ed980095f769ddc7"},
+ {file = "matplotlib-3.7.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d9881356dc48e58910c53af82b57183879129fa30492be69058c5b0d9fddf391"},
+ {file = "matplotlib-3.7.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f081c03f413f59390a80b3e351cc2b2ea0205839714dbc364519bcf51f4b56ca"},
+ {file = "matplotlib-3.7.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1cd120fca3407a225168238b790bd5c528f0fafde6172b140a2f3ab7a4ea63e9"},
+ {file = "matplotlib-3.7.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a2c1590b90aa7bd741b54c62b78de05d4186271e34e2377e0289d943b3522273"},
+ {file = "matplotlib-3.7.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d2ff3c984b8a569bc1383cd468fc06b70d7b59d5c2854ca39f1436ae8394117"},
+ {file = "matplotlib-3.7.2-cp38-cp38-win32.whl", hash = "sha256:5dea00b62d28654b71ca92463656d80646675628d0828e08a5f3b57e12869e13"},
+ {file = "matplotlib-3.7.2-cp38-cp38-win_amd64.whl", hash = "sha256:0f506a1776ee94f9e131af1ac6efa6e5bc7cb606a3e389b0ccb6e657f60bb676"},
+ {file = "matplotlib-3.7.2-cp39-cp39-macosx_10_12_universal2.whl", hash = "sha256:6515e878f91894c2e4340d81f0911857998ccaf04dbc1bba781e3d89cbf70608"},
+ {file = "matplotlib-3.7.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:71f7a8c6b124e904db550f5b9fe483d28b896d4135e45c4ea381ad3b8a0e3256"},
+ {file = "matplotlib-3.7.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:12f01b92ecd518e0697da4d97d163b2b3aa55eb3eb4e2c98235b3396d7dad55f"},
+ {file = "matplotlib-3.7.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7e28d6396563955f7af437894a36bf2b279462239a41028323e04b85179058b"},
+ {file = "matplotlib-3.7.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbcf59334ff645e6a67cd5f78b4b2cdb76384cdf587fa0d2dc85f634a72e1a3e"},
+ {file = "matplotlib-3.7.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:318c89edde72ff95d8df67d82aca03861240512994a597a435a1011ba18dbc7f"},
+ {file = "matplotlib-3.7.2-cp39-cp39-win32.whl", hash = "sha256:ce55289d5659b5b12b3db4dc9b7075b70cef5631e56530f14b2945e8836f2d20"},
+ {file = "matplotlib-3.7.2-cp39-cp39-win_amd64.whl", hash = "sha256:2ecb5be2b2815431c81dc115667e33da0f5a1bcf6143980d180d09a717c4a12e"},
+ {file = "matplotlib-3.7.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:fdcd28360dbb6203fb5219b1a5658df226ac9bebc2542a9e8f457de959d713d0"},
+ {file = "matplotlib-3.7.2-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c3cca3e842b11b55b52c6fb8bd6a4088693829acbfcdb3e815fa9b7d5c92c1b"},
+ {file = "matplotlib-3.7.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ebf577c7a6744e9e1bd3fee45fc74a02710b214f94e2bde344912d85e0c9af7c"},
+ {file = "matplotlib-3.7.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:936bba394682049919dda062d33435b3be211dc3dcaa011e09634f060ec878b2"},
+ {file = "matplotlib-3.7.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bc221ffbc2150458b1cd71cdd9ddd5bb37962b036e41b8be258280b5b01da1dd"},
+ {file = "matplotlib-3.7.2-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35d74ebdb3f71f112b36c2629cf32323adfbf42679e2751252acd468f5001c07"},
+ {file = "matplotlib-3.7.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:717157e61b3a71d3d26ad4e1770dc85156c9af435659a25ee6407dc866cb258d"},
+ {file = "matplotlib-3.7.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:20f844d6be031948148ba49605c8b96dfe7d3711d1b63592830d650622458c11"},
+ {file = "matplotlib-3.7.2.tar.gz", hash = "sha256:a8cdb91dddb04436bd2f098b8fdf4b81352e68cf4d2c6756fcc414791076569b"},
+]
+
+[package.dependencies]
+contourpy = ">=1.0.1"
+cycler = ">=0.10"
+fonttools = ">=4.22.0"
+kiwisolver = ">=1.0.1"
+numpy = ">=1.20"
+packaging = ">=20.0"
+pillow = ">=6.2.0"
+pyparsing = ">=2.3.1,<3.1"
+python-dateutil = ">=2.7"
+
[[package]]
name = "matplotlib-inline"
version = "0.1.7"
@@ -1032,6 +2381,145 @@ files = [
{file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"},
]
+[[package]]
+name = "mkl"
+version = "2021.4.0"
+description = "Intel® oneAPI Math Kernel Library"
+optional = false
+python-versions = "*"
+files = [
+ {file = "mkl-2021.4.0-py2.py3-none-macosx_10_15_x86_64.macosx_11_0_x86_64.whl", hash = "sha256:67460f5cd7e30e405b54d70d1ed3ca78118370b65f7327d495e9c8847705e2fb"},
+ {file = "mkl-2021.4.0-py2.py3-none-manylinux1_i686.whl", hash = "sha256:636d07d90e68ccc9630c654d47ce9fdeb036bb46e2b193b3a9ac8cfea683cce5"},
+ {file = "mkl-2021.4.0-py2.py3-none-manylinux1_x86_64.whl", hash = "sha256:398dbf2b0d12acaf54117a5210e8f191827f373d362d796091d161f610c1ebfb"},
+ {file = "mkl-2021.4.0-py2.py3-none-win32.whl", hash = "sha256:439c640b269a5668134e3dcbcea4350459c4a8bc46469669b2d67e07e3d330e8"},
+ {file = "mkl-2021.4.0-py2.py3-none-win_amd64.whl", hash = "sha256:ceef3cafce4c009dd25f65d7ad0d833a0fbadc3d8903991ec92351fe5de1e718"},
+]
+
+[package.dependencies]
+intel-openmp = "==2021.*"
+tbb = "==2021.*"
+
+[[package]]
+name = "mpmath"
+version = "1.3.0"
+description = "Python library for arbitrary-precision floating-point arithmetic"
+optional = false
+python-versions = "*"
+files = [
+ {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"},
+ {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"},
+]
+
+[package.extras]
+develop = ["codecov", "pycodestyle", "pytest (>=4.6)", "pytest-cov", "wheel"]
+docs = ["sphinx"]
+gmpy = ["gmpy2 (>=2.1.0a4)"]
+tests = ["pytest (>=4.6)"]
+
+[[package]]
+name = "multidict"
+version = "6.1.0"
+description = "multidict implementation"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3380252550e372e8511d49481bd836264c009adb826b23fefcc5dd3c69692f60"},
+ {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:99f826cbf970077383d7de805c0681799491cb939c25450b9b5b3ced03ca99f1"},
+ {file = "multidict-6.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a114d03b938376557927ab23f1e950827c3b893ccb94b62fd95d430fd0e5cf53"},
+ {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1c416351ee6271b2f49b56ad7f308072f6f44b37118d69c2cad94f3fa8a40d5"},
+ {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6b5d83030255983181005e6cfbac1617ce9746b219bc2aad52201ad121226581"},
+ {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3e97b5e938051226dc025ec80980c285b053ffb1e25a3db2a3aa3bc046bf7f56"},
+ {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d618649d4e70ac6efcbba75be98b26ef5078faad23592f9b51ca492953012429"},
+ {file = "multidict-6.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10524ebd769727ac77ef2278390fb0068d83f3acb7773792a5080f2b0abf7748"},
+ {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ff3827aef427c89a25cc96ded1759271a93603aba9fb977a6d264648ebf989db"},
+ {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:06809f4f0f7ab7ea2cabf9caca7d79c22c0758b58a71f9d32943ae13c7ace056"},
+ {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:f179dee3b863ab1c59580ff60f9d99f632f34ccb38bf67a33ec6b3ecadd0fd76"},
+ {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:aaed8b0562be4a0876ee3b6946f6869b7bcdb571a5d1496683505944e268b160"},
+ {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3c8b88a2ccf5493b6c8da9076fb151ba106960a2df90c2633f342f120751a9e7"},
+ {file = "multidict-6.1.0-cp310-cp310-win32.whl", hash = "sha256:4a9cb68166a34117d6646c0023c7b759bf197bee5ad4272f420a0141d7eb03a0"},
+ {file = "multidict-6.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:20b9b5fbe0b88d0bdef2012ef7dee867f874b72528cf1d08f1d59b0e3850129d"},
+ {file = "multidict-6.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3efe2c2cb5763f2f1b275ad2bf7a287d3f7ebbef35648a9726e3b69284a4f3d6"},
+ {file = "multidict-6.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c7053d3b0353a8b9de430a4f4b4268ac9a4fb3481af37dfe49825bf45ca24156"},
+ {file = "multidict-6.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:27e5fc84ccef8dfaabb09d82b7d179c7cf1a3fbc8a966f8274fcb4ab2eb4cadb"},
+ {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e2b90b43e696f25c62656389d32236e049568b39320e2735d51f08fd362761b"},
+ {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d83a047959d38a7ff552ff94be767b7fd79b831ad1cd9920662db05fec24fe72"},
+ {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d1a9dd711d0877a1ece3d2e4fea11a8e75741ca21954c919406b44e7cf971304"},
+ {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec2abea24d98246b94913b76a125e855eb5c434f7c46546046372fe60f666351"},
+ {file = "multidict-6.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4867cafcbc6585e4b678876c489b9273b13e9fff9f6d6d66add5e15d11d926cb"},
+ {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5b48204e8d955c47c55b72779802b219a39acc3ee3d0116d5080c388970b76e3"},
+ {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d8fff389528cad1618fb4b26b95550327495462cd745d879a8c7c2115248e399"},
+ {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a7a9541cd308eed5e30318430a9c74d2132e9a8cb46b901326272d780bf2d423"},
+ {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:da1758c76f50c39a2efd5e9859ce7d776317eb1dd34317c8152ac9251fc574a3"},
+ {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c943a53e9186688b45b323602298ab727d8865d8c9ee0b17f8d62d14b56f0753"},
+ {file = "multidict-6.1.0-cp311-cp311-win32.whl", hash = "sha256:90f8717cb649eea3504091e640a1b8568faad18bd4b9fcd692853a04475a4b80"},
+ {file = "multidict-6.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:82176036e65644a6cc5bd619f65f6f19781e8ec2e5330f51aa9ada7504cc1926"},
+ {file = "multidict-6.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b04772ed465fa3cc947db808fa306d79b43e896beb677a56fb2347ca1a49c1fa"},
+ {file = "multidict-6.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6180c0ae073bddeb5a97a38c03f30c233e0a4d39cd86166251617d1bbd0af436"},
+ {file = "multidict-6.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:071120490b47aa997cca00666923a83f02c7fbb44f71cf7f136df753f7fa8761"},
+ {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50b3a2710631848991d0bf7de077502e8994c804bb805aeb2925a981de58ec2e"},
+ {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b58c621844d55e71c1b7f7c498ce5aa6985d743a1a59034c57a905b3f153c1ef"},
+ {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55b6d90641869892caa9ca42ff913f7ff1c5ece06474fbd32fb2cf6834726c95"},
+ {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b820514bfc0b98a30e3d85462084779900347e4d49267f747ff54060cc33925"},
+ {file = "multidict-6.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10a9b09aba0c5b48c53761b7c720aaaf7cf236d5fe394cd399c7ba662d5f9966"},
+ {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1e16bf3e5fc9f44632affb159d30a437bfe286ce9e02754759be5536b169b305"},
+ {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:76f364861c3bfc98cbbcbd402d83454ed9e01a5224bb3a28bf70002a230f73e2"},
+ {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:820c661588bd01a0aa62a1283f20d2be4281b086f80dad9e955e690c75fb54a2"},
+ {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:0e5f362e895bc5b9e67fe6e4ded2492d8124bdf817827f33c5b46c2fe3ffaca6"},
+ {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3ec660d19bbc671e3a6443325f07263be452c453ac9e512f5eb935e7d4ac28b3"},
+ {file = "multidict-6.1.0-cp312-cp312-win32.whl", hash = "sha256:58130ecf8f7b8112cdb841486404f1282b9c86ccb30d3519faf301b2e5659133"},
+ {file = "multidict-6.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:188215fc0aafb8e03341995e7c4797860181562380f81ed0a87ff455b70bf1f1"},
+ {file = "multidict-6.1.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:d569388c381b24671589335a3be6e1d45546c2988c2ebe30fdcada8457a31008"},
+ {file = "multidict-6.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:052e10d2d37810b99cc170b785945421141bf7bb7d2f8799d431e7db229c385f"},
+ {file = "multidict-6.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f90c822a402cb865e396a504f9fc8173ef34212a342d92e362ca498cad308e28"},
+ {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b225d95519a5bf73860323e633a664b0d85ad3d5bede6d30d95b35d4dfe8805b"},
+ {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:23bfd518810af7de1116313ebd9092cb9aa629beb12f6ed631ad53356ed6b86c"},
+ {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c09fcfdccdd0b57867577b719c69e347a436b86cd83747f179dbf0cc0d4c1f3"},
+ {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf6bea52ec97e95560af5ae576bdac3aa3aae0b6758c6efa115236d9e07dae44"},
+ {file = "multidict-6.1.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57feec87371dbb3520da6192213c7d6fc892d5589a93db548331954de8248fd2"},
+ {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0c3f390dc53279cbc8ba976e5f8035eab997829066756d811616b652b00a23a3"},
+ {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:59bfeae4b25ec05b34f1956eaa1cb38032282cd4dfabc5056d0a1ec4d696d3aa"},
+ {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b2f59caeaf7632cc633b5cf6fc449372b83bbdf0da4ae04d5be36118e46cc0aa"},
+ {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:37bb93b2178e02b7b618893990941900fd25b6b9ac0fa49931a40aecdf083fe4"},
+ {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4e9f48f58c2c523d5a06faea47866cd35b32655c46b443f163d08c6d0ddb17d6"},
+ {file = "multidict-6.1.0-cp313-cp313-win32.whl", hash = "sha256:3a37ffb35399029b45c6cc33640a92bef403c9fd388acce75cdc88f58bd19a81"},
+ {file = "multidict-6.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:e9aa71e15d9d9beaad2c6b9319edcdc0a49a43ef5c0a4c8265ca9ee7d6c67774"},
+ {file = "multidict-6.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:db7457bac39421addd0c8449933ac32d8042aae84a14911a757ae6ca3eef1392"},
+ {file = "multidict-6.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d094ddec350a2fb899fec68d8353c78233debde9b7d8b4beeafa70825f1c281a"},
+ {file = "multidict-6.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5845c1fd4866bb5dd3125d89b90e57ed3138241540897de748cdf19de8a2fca2"},
+ {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9079dfc6a70abe341f521f78405b8949f96db48da98aeb43f9907f342f627cdc"},
+ {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3914f5aaa0f36d5d60e8ece6a308ee1c9784cd75ec8151062614657a114c4478"},
+ {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c08be4f460903e5a9d0f76818db3250f12e9c344e79314d1d570fc69d7f4eae4"},
+ {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d093be959277cb7dee84b801eb1af388b6ad3ca6a6b6bf1ed7585895789d027d"},
+ {file = "multidict-6.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3702ea6872c5a2a4eeefa6ffd36b042e9773f05b1f37ae3ef7264b1163c2dcf6"},
+ {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2090f6a85cafc5b2db085124d752757c9d251548cedabe9bd31afe6363e0aff2"},
+ {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:f67f217af4b1ff66c68a87318012de788dd95fcfeb24cc889011f4e1c7454dfd"},
+ {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:189f652a87e876098bbc67b4da1049afb5f5dfbaa310dd67c594b01c10388db6"},
+ {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:6bb5992037f7a9eff7991ebe4273ea7f51f1c1c511e6a2ce511d0e7bdb754492"},
+ {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f4c2b9e770c4e393876e35a7046879d195cd123b4f116d299d442b335bcd"},
+ {file = "multidict-6.1.0-cp38-cp38-win32.whl", hash = "sha256:e27bbb6d14416713a8bd7aaa1313c0fc8d44ee48d74497a0ff4c3a1b6ccb5167"},
+ {file = "multidict-6.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:22f3105d4fb15c8f57ff3959a58fcab6ce36814486500cd7485651230ad4d4ef"},
+ {file = "multidict-6.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:4e18b656c5e844539d506a0a06432274d7bd52a7487e6828c63a63d69185626c"},
+ {file = "multidict-6.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a185f876e69897a6f3325c3f19f26a297fa058c5e456bfcff8015e9a27e83ae1"},
+ {file = "multidict-6.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ab7c4ceb38d91570a650dba194e1ca87c2b543488fe9309b4212694174fd539c"},
+ {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e617fb6b0b6953fffd762669610c1c4ffd05632c138d61ac7e14ad187870669c"},
+ {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:16e5f4bf4e603eb1fdd5d8180f1a25f30056f22e55ce51fb3d6ad4ab29f7d96f"},
+ {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c035da3f544b1882bac24115f3e2e8760f10a0107614fc9839fd232200b875"},
+ {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:957cf8e4b6e123a9eea554fa7ebc85674674b713551de587eb318a2df3e00255"},
+ {file = "multidict-6.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:483a6aea59cb89904e1ceabd2b47368b5600fb7de78a6e4a2c2987b2d256cf30"},
+ {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:87701f25a2352e5bf7454caa64757642734da9f6b11384c1f9d1a8e699758057"},
+ {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:682b987361e5fd7a139ed565e30d81fd81e9629acc7d925a205366877d8c8657"},
+ {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce2186a7df133a9c895dea3331ddc5ddad42cdd0d1ea2f0a51e5d161e4762f28"},
+ {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:9f636b730f7e8cb19feb87094949ba54ee5357440b9658b2a32a5ce4bce53972"},
+ {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:73eae06aa53af2ea5270cc066dcaf02cc60d2994bbb2c4ef5764949257d10f43"},
+ {file = "multidict-6.1.0-cp39-cp39-win32.whl", hash = "sha256:1ca0083e80e791cffc6efce7660ad24af66c8d4079d2a750b29001b53ff59ada"},
+ {file = "multidict-6.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:aa466da5b15ccea564bdab9c89175c762bc12825f4659c11227f515cee76fa4a"},
+ {file = "multidict-6.1.0-py3-none-any.whl", hash = "sha256:48e171e52d1c4d33888e529b999e5900356b9ae588c2f09a52dcefb158b27506"},
+ {file = "multidict-6.1.0.tar.gz", hash = "sha256:22ae2ebf9b0c69d206c003e2f6a914ea33f0a932d4aa16f236afc049d9958f4a"},
+]
+
+[package.dependencies]
+typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.11\""}
+
[[package]]
name = "mypy"
version = "1.13.0"
@@ -1075,6 +2563,7 @@ files = [
[package.dependencies]
mypy-extensions = ">=1.0.0"
+tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""}
typing-extensions = ">=4.6.0"
[package.extras]
@@ -1106,6 +2595,25 @@ files = [
{file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"},
]
+[[package]]
+name = "networkx"
+version = "3.4.2"
+description = "Python package for creating and manipulating graphs and networks"
+optional = false
+python-versions = ">=3.10"
+files = [
+ {file = "networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f"},
+ {file = "networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1"},
+]
+
+[package.extras]
+default = ["matplotlib (>=3.7)", "numpy (>=1.24)", "pandas (>=2.0)", "scipy (>=1.10,!=1.11.0,!=1.11.1)"]
+developer = ["changelist (==0.5)", "mypy (>=1.1)", "pre-commit (>=3.2)", "rtoml"]
+doc = ["intersphinx-registry", "myst-nb (>=1.1)", "numpydoc (>=1.8.0)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.15)", "sphinx (>=7.3)", "sphinx-gallery (>=0.16)", "texext (>=0.6.7)"]
+example = ["cairocffi (>=1.7)", "contextily (>=1.6)", "igraph (>=0.11)", "momepy (>=0.7.2)", "osmnx (>=1.9)", "scikit-learn (>=1.5)", "seaborn (>=0.13)"]
+extra = ["lxml (>=4.6)", "pydot (>=3.0.1)", "pygraphviz (>=1.14)", "sympy (>=1.10)"]
+test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"]
+
[[package]]
name = "nodeenv"
version = "1.9.1"
@@ -1117,68 +2625,239 @@ files = [
{file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"},
]
+[[package]]
+name = "noisereduce"
+version = "3.0.3"
+description = "Noise reduction using Spectral Gating in Python"
+optional = false
+python-versions = "*"
+files = [
+ {file = "noisereduce-3.0.3-py3-none-any.whl", hash = "sha256:95cb64cfe29b5fa0311ac764755d2f503ae71571040693577796412be1a54b9d"},
+ {file = "noisereduce-3.0.3.tar.gz", hash = "sha256:ff64a28fb92e3c81f153cf29550e5c2db56b2523afa8f56f5e03c177cc5e918f"},
+]
+
+[package.dependencies]
+joblib = "*"
+matplotlib = "*"
+numpy = "*"
+scipy = "*"
+tqdm = "*"
+
+[package.extras]
+pytorch = ["torch (>=1.9.0)"]
+
+[[package]]
+name = "numba"
+version = "0.60.0"
+description = "compiling Python code using LLVM"
+optional = false
+python-versions = ">=3.9"
+files = [
+ {file = "numba-0.60.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5d761de835cd38fb400d2c26bb103a2726f548dc30368853121d66201672e651"},
+ {file = "numba-0.60.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:159e618ef213fba758837f9837fb402bbe65326e60ba0633dbe6c7f274d42c1b"},
+ {file = "numba-0.60.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1527dc578b95c7c4ff248792ec33d097ba6bef9eda466c948b68dfc995c25781"},
+ {file = "numba-0.60.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fe0b28abb8d70f8160798f4de9d486143200f34458d34c4a214114e445d7124e"},
+ {file = "numba-0.60.0-cp310-cp310-win_amd64.whl", hash = "sha256:19407ced081d7e2e4b8d8c36aa57b7452e0283871c296e12d798852bc7d7f198"},
+ {file = "numba-0.60.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a17b70fc9e380ee29c42717e8cc0bfaa5556c416d94f9aa96ba13acb41bdece8"},
+ {file = "numba-0.60.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3fb02b344a2a80efa6f677aa5c40cd5dd452e1b35f8d1c2af0dfd9ada9978e4b"},
+ {file = "numba-0.60.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5f4fde652ea604ea3c86508a3fb31556a6157b2c76c8b51b1d45eb40c8598703"},
+ {file = "numba-0.60.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4142d7ac0210cc86432b818338a2bc368dc773a2f5cf1e32ff7c5b378bd63ee8"},
+ {file = "numba-0.60.0-cp311-cp311-win_amd64.whl", hash = "sha256:cac02c041e9b5bc8cf8f2034ff6f0dbafccd1ae9590dc146b3a02a45e53af4e2"},
+ {file = "numba-0.60.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d7da4098db31182fc5ffe4bc42c6f24cd7d1cb8a14b59fd755bfee32e34b8404"},
+ {file = "numba-0.60.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:38d6ea4c1f56417076ecf8fc327c831ae793282e0ff51080c5094cb726507b1c"},
+ {file = "numba-0.60.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:62908d29fb6a3229c242e981ca27e32a6e606cc253fc9e8faeb0e48760de241e"},
+ {file = "numba-0.60.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0ebaa91538e996f708f1ab30ef4d3ddc344b64b5227b67a57aa74f401bb68b9d"},
+ {file = "numba-0.60.0-cp312-cp312-win_amd64.whl", hash = "sha256:f75262e8fe7fa96db1dca93d53a194a38c46da28b112b8a4aca168f0df860347"},
+ {file = "numba-0.60.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:01ef4cd7d83abe087d644eaa3d95831b777aa21d441a23703d649e06b8e06b74"},
+ {file = "numba-0.60.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:819a3dfd4630d95fd574036f99e47212a1af41cbcb019bf8afac63ff56834449"},
+ {file = "numba-0.60.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0b983bd6ad82fe868493012487f34eae8bf7dd94654951404114f23c3466d34b"},
+ {file = "numba-0.60.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c151748cd269ddeab66334bd754817ffc0cabd9433acb0f551697e5151917d25"},
+ {file = "numba-0.60.0-cp39-cp39-win_amd64.whl", hash = "sha256:3031547a015710140e8c87226b4cfe927cac199835e5bf7d4fe5cb64e814e3ab"},
+ {file = "numba-0.60.0.tar.gz", hash = "sha256:5df6158e5584eece5fc83294b949fd30b9f1125df7708862205217e068aabf16"},
+]
+
+[package.dependencies]
+llvmlite = "==0.43.*"
+numpy = ">=1.22,<2.1"
+
[[package]]
name = "numpy"
-version = "2.1.3"
-description = "Fundamental package for array computing in Python"
+version = "1.23.5"
+description = "NumPy is the fundamental package for array computing with Python."
optional = false
-python-versions = ">=3.10"
+python-versions = ">=3.8"
+files = [
+ {file = "numpy-1.23.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9c88793f78fca17da0145455f0d7826bcb9f37da4764af27ac945488116efe63"},
+ {file = "numpy-1.23.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e9f4c4e51567b616be64e05d517c79a8a22f3606499941d97bb76f2ca59f982d"},
+ {file = "numpy-1.23.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7903ba8ab592b82014713c491f6c5d3a1cde5b4a3bf116404e08f5b52f6daf43"},
+ {file = "numpy-1.23.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e05b1c973a9f858c74367553e236f287e749465f773328c8ef31abe18f691e1"},
+ {file = "numpy-1.23.5-cp310-cp310-win32.whl", hash = "sha256:522e26bbf6377e4d76403826ed689c295b0b238f46c28a7251ab94716da0b280"},
+ {file = "numpy-1.23.5-cp310-cp310-win_amd64.whl", hash = "sha256:dbee87b469018961d1ad79b1a5d50c0ae850000b639bcb1b694e9981083243b6"},
+ {file = "numpy-1.23.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ce571367b6dfe60af04e04a1834ca2dc5f46004ac1cc756fb95319f64c095a96"},
+ {file = "numpy-1.23.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56e454c7833e94ec9769fa0f86e6ff8e42ee38ce0ce1fa4cbb747ea7e06d56aa"},
+ {file = "numpy-1.23.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5039f55555e1eab31124a5768898c9e22c25a65c1e0037f4d7c495a45778c9f2"},
+ {file = "numpy-1.23.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58f545efd1108e647604a1b5aa809591ccd2540f468a880bedb97247e72db387"},
+ {file = "numpy-1.23.5-cp311-cp311-win32.whl", hash = "sha256:b2a9ab7c279c91974f756c84c365a669a887efa287365a8e2c418f8b3ba73fb0"},
+ {file = "numpy-1.23.5-cp311-cp311-win_amd64.whl", hash = "sha256:0cbe9848fad08baf71de1a39e12d1b6310f1d5b2d0ea4de051058e6e1076852d"},
+ {file = "numpy-1.23.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f063b69b090c9d918f9df0a12116029e274daf0181df392839661c4c7ec9018a"},
+ {file = "numpy-1.23.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0aaee12d8883552fadfc41e96b4c82ee7d794949e2a7c3b3a7201e968c7ecab9"},
+ {file = "numpy-1.23.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92c8c1e89a1f5028a4c6d9e3ccbe311b6ba53694811269b992c0b224269e2398"},
+ {file = "numpy-1.23.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d208a0f8729f3fb790ed18a003f3a57895b989b40ea4dce4717e9cf4af62c6bb"},
+ {file = "numpy-1.23.5-cp38-cp38-win32.whl", hash = "sha256:06005a2ef6014e9956c09ba07654f9837d9e26696a0470e42beedadb78c11b07"},
+ {file = "numpy-1.23.5-cp38-cp38-win_amd64.whl", hash = "sha256:ca51fcfcc5f9354c45f400059e88bc09215fb71a48d3768fb80e357f3b457e1e"},
+ {file = "numpy-1.23.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8969bfd28e85c81f3f94eb4a66bc2cf1dbdc5c18efc320af34bffc54d6b1e38f"},
+ {file = "numpy-1.23.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a7ac231a08bb37f852849bbb387a20a57574a97cfc7b6cabb488a4fc8be176de"},
+ {file = "numpy-1.23.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf837dc63ba5c06dc8797c398db1e223a466c7ece27a1f7b5232ba3466aafe3d"},
+ {file = "numpy-1.23.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33161613d2269025873025b33e879825ec7b1d831317e68f4f2f0f84ed14c719"},
+ {file = "numpy-1.23.5-cp39-cp39-win32.whl", hash = "sha256:af1da88f6bc3d2338ebbf0e22fe487821ea4d8e89053e25fa59d1d79786e7481"},
+ {file = "numpy-1.23.5-cp39-cp39-win_amd64.whl", hash = "sha256:09b7847f7e83ca37c6e627682f145856de331049013853f344f37b0c9690e3df"},
+ {file = "numpy-1.23.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:abdde9f795cf292fb9651ed48185503a2ff29be87770c3b8e2a14b0cd7aa16f8"},
+ {file = "numpy-1.23.5-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9a909a8bae284d46bbfdefbdd4a262ba19d3bc9921b1e76126b1d21c3c34135"},
+ {file = "numpy-1.23.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:01dd17cbb340bf0fc23981e52e1d18a9d4050792e8fb8363cecbf066a84b827d"},
+ {file = "numpy-1.23.5.tar.gz", hash = "sha256:1b1766d6f397c18153d40015ddfc79ddb715cabadc04d2d228d4e5a8bc4ded1a"},
+]
+
+[[package]]
+name = "nvidia-cublas-cu12"
+version = "12.1.3.1"
+description = "CUBLAS native runtime libraries"
+optional = false
+python-versions = ">=3"
+files = [
+ {file = "nvidia_cublas_cu12-12.1.3.1-py3-none-manylinux1_x86_64.whl", hash = "sha256:ee53ccca76a6fc08fb9701aa95b6ceb242cdaab118c3bb152af4e579af792728"},
+ {file = "nvidia_cublas_cu12-12.1.3.1-py3-none-win_amd64.whl", hash = "sha256:2b964d60e8cf11b5e1073d179d85fa340c120e99b3067558f3cf98dd69d02906"},
+]
+
+[[package]]
+name = "nvidia-cuda-cupti-cu12"
+version = "12.1.105"
+description = "CUDA profiling tools runtime libs."
+optional = false
+python-versions = ">=3"
+files = [
+ {file = "nvidia_cuda_cupti_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:e54fde3983165c624cb79254ae9818a456eb6e87a7fd4d56a2352c24ee542d7e"},
+ {file = "nvidia_cuda_cupti_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:bea8236d13a0ac7190bd2919c3e8e6ce1e402104276e6f9694479e48bb0eb2a4"},
+]
+
+[[package]]
+name = "nvidia-cuda-nvrtc-cu12"
+version = "12.1.105"
+description = "NVRTC native runtime libraries"
+optional = false
+python-versions = ">=3"
+files = [
+ {file = "nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:339b385f50c309763ca65456ec75e17bbefcbbf2893f462cb8b90584cd27a1c2"},
+ {file = "nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:0a98a522d9ff138b96c010a65e145dc1b4850e9ecb75a0172371793752fd46ed"},
+]
+
+[[package]]
+name = "nvidia-cuda-runtime-cu12"
+version = "12.1.105"
+description = "CUDA Runtime native Libraries"
+optional = false
+python-versions = ">=3"
+files = [
+ {file = "nvidia_cuda_runtime_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:6e258468ddf5796e25f1dc591a31029fa317d97a0a94ed93468fc86301d61e40"},
+ {file = "nvidia_cuda_runtime_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:dfb46ef84d73fababab44cf03e3b83f80700d27ca300e537f85f636fac474344"},
+]
+
+[[package]]
+name = "nvidia-cudnn-cu12"
+version = "8.9.2.26"
+description = "cuDNN runtime libraries"
+optional = false
+python-versions = ">=3"
+files = [
+ {file = "nvidia_cudnn_cu12-8.9.2.26-py3-none-manylinux1_x86_64.whl", hash = "sha256:5ccb288774fdfb07a7e7025ffec286971c06d8d7b4fb162525334616d7629ff9"},
+]
+
+[package.dependencies]
+nvidia-cublas-cu12 = "*"
+
+[[package]]
+name = "nvidia-cufft-cu12"
+version = "11.0.2.54"
+description = "CUFFT native runtime libraries"
+optional = false
+python-versions = ">=3"
+files = [
+ {file = "nvidia_cufft_cu12-11.0.2.54-py3-none-manylinux1_x86_64.whl", hash = "sha256:794e3948a1aa71fd817c3775866943936774d1c14e7628c74f6f7417224cdf56"},
+ {file = "nvidia_cufft_cu12-11.0.2.54-py3-none-win_amd64.whl", hash = "sha256:d9ac353f78ff89951da4af698f80870b1534ed69993f10a4cf1d96f21357e253"},
+]
+
+[[package]]
+name = "nvidia-curand-cu12"
+version = "10.3.2.106"
+description = "CURAND native runtime libraries"
+optional = false
+python-versions = ">=3"
+files = [
+ {file = "nvidia_curand_cu12-10.3.2.106-py3-none-manylinux1_x86_64.whl", hash = "sha256:9d264c5036dde4e64f1de8c50ae753237c12e0b1348738169cd0f8a536c0e1e0"},
+ {file = "nvidia_curand_cu12-10.3.2.106-py3-none-win_amd64.whl", hash = "sha256:75b6b0c574c0037839121317e17fd01f8a69fd2ef8e25853d826fec30bdba74a"},
+]
+
+[[package]]
+name = "nvidia-cusolver-cu12"
+version = "11.4.5.107"
+description = "CUDA solver native runtime libraries"
+optional = false
+python-versions = ">=3"
+files = [
+ {file = "nvidia_cusolver_cu12-11.4.5.107-py3-none-manylinux1_x86_64.whl", hash = "sha256:8a7ec542f0412294b15072fa7dab71d31334014a69f953004ea7a118206fe0dd"},
+ {file = "nvidia_cusolver_cu12-11.4.5.107-py3-none-win_amd64.whl", hash = "sha256:74e0c3a24c78612192a74fcd90dd117f1cf21dea4822e66d89e8ea80e3cd2da5"},
+]
+
+[package.dependencies]
+nvidia-cublas-cu12 = "*"
+nvidia-cusparse-cu12 = "*"
+nvidia-nvjitlink-cu12 = "*"
+
+[[package]]
+name = "nvidia-cusparse-cu12"
+version = "12.1.0.106"
+description = "CUSPARSE native runtime libraries"
+optional = false
+python-versions = ">=3"
+files = [
+ {file = "nvidia_cusparse_cu12-12.1.0.106-py3-none-manylinux1_x86_64.whl", hash = "sha256:f3b50f42cf363f86ab21f720998517a659a48131e8d538dc02f8768237bd884c"},
+ {file = "nvidia_cusparse_cu12-12.1.0.106-py3-none-win_amd64.whl", hash = "sha256:b798237e81b9719373e8fae8d4f091b70a0cf09d9d85c95a557e11df2d8e9a5a"},
+]
+
+[package.dependencies]
+nvidia-nvjitlink-cu12 = "*"
+
+[[package]]
+name = "nvidia-nccl-cu12"
+version = "2.20.5"
+description = "NVIDIA Collective Communication Library (NCCL) Runtime"
+optional = false
+python-versions = ">=3"
+files = [
+ {file = "nvidia_nccl_cu12-2.20.5-py3-none-manylinux2014_aarch64.whl", hash = "sha256:1fc150d5c3250b170b29410ba682384b14581db722b2531b0d8d33c595f33d01"},
+ {file = "nvidia_nccl_cu12-2.20.5-py3-none-manylinux2014_x86_64.whl", hash = "sha256:057f6bf9685f75215d0c53bf3ac4a10b3e6578351de307abad9e18a99182af56"},
+]
+
+[[package]]
+name = "nvidia-nvjitlink-cu12"
+version = "12.6.85"
+description = "Nvidia JIT LTO Library"
+optional = false
+python-versions = ">=3"
+files = [
+ {file = "nvidia_nvjitlink_cu12-12.6.85-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:eedc36df9e88b682efe4309aa16b5b4e78c2407eac59e8c10a6a47535164369a"},
+ {file = "nvidia_nvjitlink_cu12-12.6.85-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cf4eaa7d4b6b543ffd69d6abfb11efdeb2db48270d94dfd3a452c24150829e41"},
+ {file = "nvidia_nvjitlink_cu12-12.6.85-py3-none-win_amd64.whl", hash = "sha256:e61120e52ed675747825cdd16febc6a0730537451d867ee58bee3853b1b13d1c"},
+]
+
+[[package]]
+name = "nvidia-nvtx-cu12"
+version = "12.1.105"
+description = "NVIDIA Tools Extension"
+optional = false
+python-versions = ">=3"
files = [
- {file = "numpy-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c894b4305373b9c5576d7a12b473702afdf48ce5369c074ba304cc5ad8730dff"},
- {file = "numpy-2.1.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b47fbb433d3260adcd51eb54f92a2ffbc90a4595f8970ee00e064c644ac788f5"},
- {file = "numpy-2.1.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:825656d0743699c529c5943554d223c021ff0494ff1442152ce887ef4f7561a1"},
- {file = "numpy-2.1.3-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:6a4825252fcc430a182ac4dee5a505053d262c807f8a924603d411f6718b88fd"},
- {file = "numpy-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e711e02f49e176a01d0349d82cb5f05ba4db7d5e7e0defd026328e5cfb3226d3"},
- {file = "numpy-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78574ac2d1a4a02421f25da9559850d59457bac82f2b8d7a44fe83a64f770098"},
- {file = "numpy-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c7662f0e3673fe4e832fe07b65c50342ea27d989f92c80355658c7f888fcc83c"},
- {file = "numpy-2.1.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fa2d1337dc61c8dc417fbccf20f6d1e139896a30721b7f1e832b2bb6ef4eb6c4"},
- {file = "numpy-2.1.3-cp310-cp310-win32.whl", hash = "sha256:72dcc4a35a8515d83e76b58fdf8113a5c969ccd505c8a946759b24e3182d1f23"},
- {file = "numpy-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:ecc76a9ba2911d8d37ac01de72834d8849e55473457558e12995f4cd53e778e0"},
- {file = "numpy-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4d1167c53b93f1f5d8a139a742b3c6f4d429b54e74e6b57d0eff40045187b15d"},
- {file = "numpy-2.1.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c80e4a09b3d95b4e1cac08643f1152fa71a0a821a2d4277334c88d54b2219a41"},
- {file = "numpy-2.1.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:576a1c1d25e9e02ed7fa5477f30a127fe56debd53b8d2c89d5578f9857d03ca9"},
- {file = "numpy-2.1.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:973faafebaae4c0aaa1a1ca1ce02434554d67e628b8d805e61f874b84e136b09"},
- {file = "numpy-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:762479be47a4863e261a840e8e01608d124ee1361e48b96916f38b119cfda04a"},
- {file = "numpy-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc6f24b3d1ecc1eebfbf5d6051faa49af40b03be1aaa781ebdadcbc090b4539b"},
- {file = "numpy-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:17ee83a1f4fef3c94d16dc1802b998668b5419362c8a4f4e8a491de1b41cc3ee"},
- {file = "numpy-2.1.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:15cb89f39fa6d0bdfb600ea24b250e5f1a3df23f901f51c8debaa6a5d122b2f0"},
- {file = "numpy-2.1.3-cp311-cp311-win32.whl", hash = "sha256:d9beb777a78c331580705326d2367488d5bc473b49a9bc3036c154832520aca9"},
- {file = "numpy-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:d89dd2b6da69c4fff5e39c28a382199ddedc3a5be5390115608345dec660b9e2"},
- {file = "numpy-2.1.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f55ba01150f52b1027829b50d70ef1dafd9821ea82905b63936668403c3b471e"},
- {file = "numpy-2.1.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:13138eadd4f4da03074851a698ffa7e405f41a0845a6b1ad135b81596e4e9958"},
- {file = "numpy-2.1.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:a6b46587b14b888e95e4a24d7b13ae91fa22386c199ee7b418f449032b2fa3b8"},
- {file = "numpy-2.1.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:0fa14563cc46422e99daef53d725d0c326e99e468a9320a240affffe87852564"},
- {file = "numpy-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8637dcd2caa676e475503d1f8fdb327bc495554e10838019651b76d17b98e512"},
- {file = "numpy-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2312b2aa89e1f43ecea6da6ea9a810d06aae08321609d8dc0d0eda6d946a541b"},
- {file = "numpy-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a38c19106902bb19351b83802531fea19dee18e5b37b36454f27f11ff956f7fc"},
- {file = "numpy-2.1.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:02135ade8b8a84011cbb67dc44e07c58f28575cf9ecf8ab304e51c05528c19f0"},
- {file = "numpy-2.1.3-cp312-cp312-win32.whl", hash = "sha256:e6988e90fcf617da2b5c78902fe8e668361b43b4fe26dbf2d7b0f8034d4cafb9"},
- {file = "numpy-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:0d30c543f02e84e92c4b1f415b7c6b5326cbe45ee7882b6b77db7195fb971e3a"},
- {file = "numpy-2.1.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96fe52fcdb9345b7cd82ecd34547fca4321f7656d500eca497eb7ea5a926692f"},
- {file = "numpy-2.1.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f653490b33e9c3a4c1c01d41bc2aef08f9475af51146e4a7710c450cf9761598"},
- {file = "numpy-2.1.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:dc258a761a16daa791081d026f0ed4399b582712e6fc887a95af09df10c5ca57"},
- {file = "numpy-2.1.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:016d0f6f5e77b0f0d45d77387ffa4bb89816b57c835580c3ce8e099ef830befe"},
- {file = "numpy-2.1.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c181ba05ce8299c7aa3125c27b9c2167bca4a4445b7ce73d5febc411ca692e43"},
- {file = "numpy-2.1.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5641516794ca9e5f8a4d17bb45446998c6554704d888f86df9b200e66bdcce56"},
- {file = "numpy-2.1.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ea4dedd6e394a9c180b33c2c872b92f7ce0f8e7ad93e9585312b0c5a04777a4a"},
- {file = "numpy-2.1.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b0df3635b9c8ef48bd3be5f862cf71b0a4716fa0e702155c45067c6b711ddcef"},
- {file = "numpy-2.1.3-cp313-cp313-win32.whl", hash = "sha256:50ca6aba6e163363f132b5c101ba078b8cbd3fa92c7865fd7d4d62d9779ac29f"},
- {file = "numpy-2.1.3-cp313-cp313-win_amd64.whl", hash = "sha256:747641635d3d44bcb380d950679462fae44f54b131be347d5ec2bce47d3df9ed"},
- {file = "numpy-2.1.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:996bb9399059c5b82f76b53ff8bb686069c05acc94656bb259b1d63d04a9506f"},
- {file = "numpy-2.1.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:45966d859916ad02b779706bb43b954281db43e185015df6eb3323120188f9e4"},
- {file = "numpy-2.1.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:baed7e8d7481bfe0874b566850cb0b85243e982388b7b23348c6db2ee2b2ae8e"},
- {file = "numpy-2.1.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:a9f7f672a3388133335589cfca93ed468509cb7b93ba3105fce780d04a6576a0"},
- {file = "numpy-2.1.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7aac50327da5d208db2eec22eb11e491e3fe13d22653dce51b0f4109101b408"},
- {file = "numpy-2.1.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4394bc0dbd074b7f9b52024832d16e019decebf86caf909d94f6b3f77a8ee3b6"},
- {file = "numpy-2.1.3-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:50d18c4358a0a8a53f12a8ba9d772ab2d460321e6a93d6064fc22443d189853f"},
- {file = "numpy-2.1.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:14e253bd43fc6b37af4921b10f6add6925878a42a0c5fe83daee390bca80bc17"},
- {file = "numpy-2.1.3-cp313-cp313t-win32.whl", hash = "sha256:08788d27a5fd867a663f6fc753fd7c3ad7e92747efc73c53bca2f19f8bc06f48"},
- {file = "numpy-2.1.3-cp313-cp313t-win_amd64.whl", hash = "sha256:2564fbdf2b99b3f815f2107c1bbc93e2de8ee655a69c261363a1172a79a257d4"},
- {file = "numpy-2.1.3-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:4f2015dfe437dfebbfce7c85c7b53d81ba49e71ba7eadbf1df40c915af75979f"},
- {file = "numpy-2.1.3-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:3522b0dfe983a575e6a9ab3a4a4dfe156c3e428468ff08ce582b9bb6bd1d71d4"},
- {file = "numpy-2.1.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c006b607a865b07cd981ccb218a04fc86b600411d83d6fc261357f1c0966755d"},
- {file = "numpy-2.1.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e14e26956e6f1696070788252dcdff11b4aca4c3e8bd166e0df1bb8f315a67cb"},
- {file = "numpy-2.1.3.tar.gz", hash = "sha256:aa08e04e08aaf974d4458def539dece0d28146d866a39da5639596f4921fd761"},
+ {file = "nvidia_nvtx_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:dc21cf308ca5691e7c04d962e213f8a4aa9bbfa23d95412f452254c2caeb09e5"},
+ {file = "nvidia_nvtx_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:65f4d98982b31b60026e0e6de73fbdfc09d08a96f4656dd3665ca616a11e1e82"},
]
[[package]]
@@ -1328,7 +3007,7 @@ files = [
]
[package.dependencies]
-numpy = {version = ">=1.26.0", markers = "python_version >= \"3.12\""}
+numpy = {version = ">=1.22.4", markers = "python_version < \"3.11\""}
python-dateutil = ">=2.8.2"
pytz = ">=2020.1"
tzdata = ">=2022.7"
@@ -1358,6 +3037,21 @@ sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-d
test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"]
xml = ["lxml (>=4.9.2)"]
+[[package]]
+name = "pandas-stubs"
+version = "2.2.3.241009"
+description = "Type annotations for pandas"
+optional = false
+python-versions = ">=3.10"
+files = [
+ {file = "pandas_stubs-2.2.3.241009-py3-none-any.whl", hash = "sha256:3a6f8f142105a42550be677ba741ba532621f4e0acad2155c0e7b2450f114cfa"},
+ {file = "pandas_stubs-2.2.3.241009.tar.gz", hash = "sha256:d4ab618253f0acf78a5d0d2bfd6dffdd92d91a56a69bdc8144e5a5c6d25be3b5"},
+]
+
+[package.dependencies]
+numpy = ">=1.23.5"
+types-pytz = ">=2022.1.1"
+
[[package]]
name = "parso"
version = "0.8.4"
@@ -1373,6 +3067,53 @@ files = [
qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"]
testing = ["docopt", "pytest"]
+[[package]]
+name = "pedalboard"
+version = "0.9.16"
+description = "A Python library for adding effects to audio."
+optional = false
+python-versions = "*"
+files = [
+ {file = "pedalboard-0.9.16-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:9d68f2a0816f4b611ef9e6fd2d216c0f89840c7aa855efdb499b63b5e8014009"},
+ {file = "pedalboard-0.9.16-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2ac0f9c57a89c2e437a41288cd5da42d65d737457848fd95adfba7c97bb99914"},
+ {file = "pedalboard-0.9.16-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89270613982174fb0ce6d10e6f251d78ef15aa21438c22753db87d974d5e2b27"},
+ {file = "pedalboard-0.9.16-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5712fe0f07eb0a0955681b867c2aff7f57e3d4d8dbf05a3d6f1eb0404cb0e679"},
+ {file = "pedalboard-0.9.16-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b040271cc9eadaa14f0a0afdc2393e8b11fe1ed6967de0ed2957b3dc0b2d1431"},
+ {file = "pedalboard-0.9.16-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:29ba6f8d785060f4c2e9e659d3ab45559c1ce222b468dc1676f6345dcc17b6df"},
+ {file = "pedalboard-0.9.16-cp310-cp310-win_amd64.whl", hash = "sha256:6f82a4941e9ad72a0c672994fa45453521eedf05081367b77c0a09cdabc25b9c"},
+ {file = "pedalboard-0.9.16-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:57f1a78e9d253263360d8de1d6bc24d37f827511fae63035a4d5b0477a891401"},
+ {file = "pedalboard-0.9.16-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c90e80f3b8a6397b4918aabf4635053b8c62d55414038defa9906c378443f2f0"},
+ {file = "pedalboard-0.9.16-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8873a52e06b41336f06f93306bb113545485bbf3759f30d5f6bf887c5056902d"},
+ {file = "pedalboard-0.9.16-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e870cac507fdae73fa0bfbe6d1d5de380228862d4eba9164d1615e9bccaf6d04"},
+ {file = "pedalboard-0.9.16-cp311-cp311-win_amd64.whl", hash = "sha256:abdb338b9231c509e0ed900507f128a65a79a272c3c284fa3912c53751a4f3c3"},
+ {file = "pedalboard-0.9.16-cp312-cp312-macosx_10_14_universal2.whl", hash = "sha256:0f352356fdb8e6246a0577a62ce003781c2a5fa9ba0f6b09cf344e5a51142288"},
+ {file = "pedalboard-0.9.16-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:4b92ab1c940d27dcd520cd376a61aa99d442edd27b6787ee6193ad7f8bd799e5"},
+ {file = "pedalboard-0.9.16-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2b6161453ac8f8f28f67b49eeaf58f41448f61b54a73e151c0a59626ab574d08"},
+ {file = "pedalboard-0.9.16-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e32ad20a3ffc13324cbf17a1c3fae9c08a391edabcfa371d2ad0ed08bedfffb"},
+ {file = "pedalboard-0.9.16-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eac5dd6627bbd8c239c916bffbb7c5d9588d99867591d2e43ab6efd79f75ccbc"},
+ {file = "pedalboard-0.9.16-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3a523fba1756d1bed0f5e3ae9816d70ffa971457f67adf4efd03cca0310a879a"},
+ {file = "pedalboard-0.9.16-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:dece4acbc8d43f6a0b44c4af48fdeb90c181890babe88c77cfcee726fbb73865"},
+ {file = "pedalboard-0.9.16-cp312-cp312-win32.whl", hash = "sha256:3d2a815c0fd045a252fdfa57baa9bf35e7dff5e1ddcda8bf1a9ae59b53d3e798"},
+ {file = "pedalboard-0.9.16-cp312-cp312-win_amd64.whl", hash = "sha256:6baf122b22403e5bff2477f37e17e457ad7db1621948debf558f8b2cfe64f39e"},
+ {file = "pedalboard-0.9.16-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:b84fe32ab13b50076e21d1e79bbef7c00f43bb3623c84d7ced1022b0d9ed55ca"},
+ {file = "pedalboard-0.9.16-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:031e6833c5983c3fe0a96bc4ff04790663a9e95a01c402828bd5a4eff4b8b541"},
+ {file = "pedalboard-0.9.16-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4be376b2727341cac2540e9f0f3b1d0bb2449ceed7f92399bcfabae052ae7a1a"},
+ {file = "pedalboard-0.9.16-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e46117dc1b62af13bdd4a7ac53b6d92b3a001f2c68ce89bacced9bfcaafe295"},
+ {file = "pedalboard-0.9.16-cp313-cp313-win_amd64.whl", hash = "sha256:1eea9fb96672014a663fa7309133c6506ebdd28d84249a7708eae18c0cabb35c"},
+ {file = "pedalboard-0.9.16-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:8ffadf7de250d4ccc45929f88b49979d9243077b910fb352eb3cc7231f240d8e"},
+ {file = "pedalboard-0.9.16-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a260d2c5bc79f90340e5eef985919da92188dea9b493b4756d622f6e7e151028"},
+ {file = "pedalboard-0.9.16-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8abf69fe280c0c834750072692d5ebb3b4ba7ef49d50b369946d4743a723bb49"},
+ {file = "pedalboard-0.9.16-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03e73da46d6678a8adbd1ebc70bf38e4316918e44514eb9b1d7989bfb43cb30c"},
+ {file = "pedalboard-0.9.16-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:16b2610ad1923e0f49d1e6923c2b740c8da9a2db2c5315f56e857b7a862f1fdd"},
+ {file = "pedalboard-0.9.16-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c47265698416d6e1042c21eaf027eb643f2e4f83421383f7ab783f7fb9320bd4"},
+ {file = "pedalboard-0.9.16-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:822f3184dd09f07c29b7b0d4281fa834d9a94ed8aa86037c0c739e8907132f9f"},
+ {file = "pedalboard-0.9.16-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8635d57f72be0f2eb8ca523dacec5bd13736ccffe5f70109c586a6b750fdeb33"},
+ {file = "pedalboard-0.9.16-cp39-cp39-win_amd64.whl", hash = "sha256:d46f917322065fe780778c416e016ab79e6a3d8ba75df9a71ae368142aba3443"},
+]
+
+[package.dependencies]
+numpy = "*"
+
[[package]]
name = "pexpect"
version = "4.9.0"
@@ -1387,92 +3128,119 @@ files = [
[package.dependencies]
ptyprocess = ">=0.5"
+[[package]]
+name = "phonemizer"
+version = "3.3.0"
+description = "Simple text to phones converter for multiple languages"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "phonemizer-3.3.0-py3-none-any.whl", hash = "sha256:17afaa98691fe73b025dd8d8727b0e67cc376c5e7ee27590853e457fb3f43602"},
+ {file = "phonemizer-3.3.0.tar.gz", hash = "sha256:5e0c38122effe0b331a24e674aff256874ece169d70a9cf1120337b56f8e3d0c"},
+]
+
+[package.dependencies]
+attrs = ">=18.1"
+dlinfo = "*"
+joblib = "*"
+segments = "*"
+typing-extensions = "*"
+
+[package.extras]
+doc = ["sphinx", "sphinx-rtd-theme"]
+test = ["coverage[toml]", "pytest (>=6.0)", "pytest-cov"]
+
[[package]]
name = "pillow"
-version = "11.0.0"
+version = "10.4.0"
description = "Python Imaging Library (Fork)"
optional = false
-python-versions = ">=3.9"
+python-versions = ">=3.8"
files = [
- {file = "pillow-11.0.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:6619654954dc4936fcff82db8eb6401d3159ec6be81e33c6000dfd76ae189947"},
- {file = "pillow-11.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b3c5ac4bed7519088103d9450a1107f76308ecf91d6dabc8a33a2fcfb18d0fba"},
- {file = "pillow-11.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a65149d8ada1055029fcb665452b2814fe7d7082fcb0c5bed6db851cb69b2086"},
- {file = "pillow-11.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88a58d8ac0cc0e7f3a014509f0455248a76629ca9b604eca7dc5927cc593c5e9"},
- {file = "pillow-11.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:c26845094b1af3c91852745ae78e3ea47abf3dbcd1cf962f16b9a5fbe3ee8488"},
- {file = "pillow-11.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:1a61b54f87ab5786b8479f81c4b11f4d61702830354520837f8cc791ebba0f5f"},
- {file = "pillow-11.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:674629ff60030d144b7bca2b8330225a9b11c482ed408813924619c6f302fdbb"},
- {file = "pillow-11.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:598b4e238f13276e0008299bd2482003f48158e2b11826862b1eb2ad7c768b97"},
- {file = "pillow-11.0.0-cp310-cp310-win32.whl", hash = "sha256:9a0f748eaa434a41fccf8e1ee7a3eed68af1b690e75328fd7a60af123c193b50"},
- {file = "pillow-11.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:a5629742881bcbc1f42e840af185fd4d83a5edeb96475a575f4da50d6ede337c"},
- {file = "pillow-11.0.0-cp310-cp310-win_arm64.whl", hash = "sha256:ee217c198f2e41f184f3869f3e485557296d505b5195c513b2bfe0062dc537f1"},
- {file = "pillow-11.0.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1c1d72714f429a521d8d2d018badc42414c3077eb187a59579f28e4270b4b0fc"},
- {file = "pillow-11.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:499c3a1b0d6fc8213519e193796eb1a86a1be4b1877d678b30f83fd979811d1a"},
- {file = "pillow-11.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8b2351c85d855293a299038e1f89db92a2f35e8d2f783489c6f0b2b5f3fe8a3"},
- {file = "pillow-11.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f4dba50cfa56f910241eb7f883c20f1e7b1d8f7d91c750cd0b318bad443f4d5"},
- {file = "pillow-11.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:5ddbfd761ee00c12ee1be86c9c0683ecf5bb14c9772ddbd782085779a63dd55b"},
- {file = "pillow-11.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:45c566eb10b8967d71bf1ab8e4a525e5a93519e29ea071459ce517f6b903d7fa"},
- {file = "pillow-11.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b4fd7bd29610a83a8c9b564d457cf5bd92b4e11e79a4ee4716a63c959699b306"},
- {file = "pillow-11.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:cb929ca942d0ec4fac404cbf520ee6cac37bf35be479b970c4ffadf2b6a1cad9"},
- {file = "pillow-11.0.0-cp311-cp311-win32.whl", hash = "sha256:006bcdd307cc47ba43e924099a038cbf9591062e6c50e570819743f5607404f5"},
- {file = "pillow-11.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:52a2d8323a465f84faaba5236567d212c3668f2ab53e1c74c15583cf507a0291"},
- {file = "pillow-11.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:16095692a253047fe3ec028e951fa4221a1f3ed3d80c397e83541a3037ff67c9"},
- {file = "pillow-11.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d2c0a187a92a1cb5ef2c8ed5412dd8d4334272617f532d4ad4de31e0495bd923"},
- {file = "pillow-11.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:084a07ef0821cfe4858fe86652fffac8e187b6ae677e9906e192aafcc1b69903"},
- {file = "pillow-11.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8069c5179902dcdce0be9bfc8235347fdbac249d23bd90514b7a47a72d9fecf4"},
- {file = "pillow-11.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f02541ef64077f22bf4924f225c0fd1248c168f86e4b7abdedd87d6ebaceab0f"},
- {file = "pillow-11.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:fcb4621042ac4b7865c179bb972ed0da0218a076dc1820ffc48b1d74c1e37fe9"},
- {file = "pillow-11.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:00177a63030d612148e659b55ba99527803288cea7c75fb05766ab7981a8c1b7"},
- {file = "pillow-11.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8853a3bf12afddfdf15f57c4b02d7ded92c7a75a5d7331d19f4f9572a89c17e6"},
- {file = "pillow-11.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3107c66e43bda25359d5ef446f59c497de2b5ed4c7fdba0894f8d6cf3822dafc"},
- {file = "pillow-11.0.0-cp312-cp312-win32.whl", hash = "sha256:86510e3f5eca0ab87429dd77fafc04693195eec7fd6a137c389c3eeb4cfb77c6"},
- {file = "pillow-11.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:8ec4a89295cd6cd4d1058a5e6aec6bf51e0eaaf9714774e1bfac7cfc9051db47"},
- {file = "pillow-11.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:27a7860107500d813fcd203b4ea19b04babe79448268403172782754870dac25"},
- {file = "pillow-11.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:bcd1fb5bb7b07f64c15618c89efcc2cfa3e95f0e3bcdbaf4642509de1942a699"},
- {file = "pillow-11.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0e038b0745997c7dcaae350d35859c9715c71e92ffb7e0f4a8e8a16732150f38"},
- {file = "pillow-11.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ae08bd8ffc41aebf578c2af2f9d8749d91f448b3bfd41d7d9ff573d74f2a6b2"},
- {file = "pillow-11.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d69bfd8ec3219ae71bcde1f942b728903cad25fafe3100ba2258b973bd2bc1b2"},
- {file = "pillow-11.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:61b887f9ddba63ddf62fd02a3ba7add935d053b6dd7d58998c630e6dbade8527"},
- {file = "pillow-11.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:c6a660307ca9d4867caa8d9ca2c2658ab685de83792d1876274991adec7b93fa"},
- {file = "pillow-11.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:73e3a0200cdda995c7e43dd47436c1548f87a30bb27fb871f352a22ab8dcf45f"},
- {file = "pillow-11.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fba162b8872d30fea8c52b258a542c5dfd7b235fb5cb352240c8d63b414013eb"},
- {file = "pillow-11.0.0-cp313-cp313-win32.whl", hash = "sha256:f1b82c27e89fffc6da125d5eb0ca6e68017faf5efc078128cfaa42cf5cb38798"},
- {file = "pillow-11.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:8ba470552b48e5835f1d23ecb936bb7f71d206f9dfeee64245f30c3270b994de"},
- {file = "pillow-11.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:846e193e103b41e984ac921b335df59195356ce3f71dcfd155aa79c603873b84"},
- {file = "pillow-11.0.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4ad70c4214f67d7466bea6a08061eba35c01b1b89eaa098040a35272a8efb22b"},
- {file = "pillow-11.0.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:6ec0d5af64f2e3d64a165f490d96368bb5dea8b8f9ad04487f9ab60dc4bb6003"},
- {file = "pillow-11.0.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c809a70e43c7977c4a42aefd62f0131823ebf7dd73556fa5d5950f5b354087e2"},
- {file = "pillow-11.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:4b60c9520f7207aaf2e1d94de026682fc227806c6e1f55bba7606d1c94dd623a"},
- {file = "pillow-11.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:1e2688958a840c822279fda0086fec1fdab2f95bf2b717b66871c4ad9859d7e8"},
- {file = "pillow-11.0.0-cp313-cp313t-win32.whl", hash = "sha256:607bbe123c74e272e381a8d1957083a9463401f7bd01287f50521ecb05a313f8"},
- {file = "pillow-11.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5c39ed17edea3bc69c743a8dd3e9853b7509625c2462532e62baa0732163a904"},
- {file = "pillow-11.0.0-cp313-cp313t-win_arm64.whl", hash = "sha256:75acbbeb05b86bc53cbe7b7e6fe00fbcf82ad7c684b3ad82e3d711da9ba287d3"},
- {file = "pillow-11.0.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:2e46773dc9f35a1dd28bd6981332fd7f27bec001a918a72a79b4133cf5291dba"},
- {file = "pillow-11.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2679d2258b7f1192b378e2893a8a0a0ca472234d4c2c0e6bdd3380e8dfa21b6a"},
- {file = "pillow-11.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eda2616eb2313cbb3eebbe51f19362eb434b18e3bb599466a1ffa76a033fb916"},
- {file = "pillow-11.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ec184af98a121fb2da42642dea8a29ec80fc3efbaefb86d8fdd2606619045d"},
- {file = "pillow-11.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:8594f42df584e5b4bb9281799698403f7af489fba84c34d53d1c4bfb71b7c4e7"},
- {file = "pillow-11.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:c12b5ae868897c7338519c03049a806af85b9b8c237b7d675b8c5e089e4a618e"},
- {file = "pillow-11.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:70fbbdacd1d271b77b7721fe3cdd2d537bbbd75d29e6300c672ec6bb38d9672f"},
- {file = "pillow-11.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5178952973e588b3f1360868847334e9e3bf49d19e169bbbdfaf8398002419ae"},
- {file = "pillow-11.0.0-cp39-cp39-win32.whl", hash = "sha256:8c676b587da5673d3c75bd67dd2a8cdfeb282ca38a30f37950511766b26858c4"},
- {file = "pillow-11.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:94f3e1780abb45062287b4614a5bc0874519c86a777d4a7ad34978e86428b8dd"},
- {file = "pillow-11.0.0-cp39-cp39-win_arm64.whl", hash = "sha256:290f2cc809f9da7d6d622550bbf4c1e57518212da51b6a30fe8e0a270a5b78bd"},
- {file = "pillow-11.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1187739620f2b365de756ce086fdb3604573337cc28a0d3ac4a01ab6b2d2a6d2"},
- {file = "pillow-11.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:fbbcb7b57dc9c794843e3d1258c0fbf0f48656d46ffe9e09b63bbd6e8cd5d0a2"},
- {file = "pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d203af30149ae339ad1b4f710d9844ed8796e97fda23ffbc4cc472968a47d0b"},
- {file = "pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21a0d3b115009ebb8ac3d2ebec5c2982cc693da935f4ab7bb5c8ebe2f47d36f2"},
- {file = "pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:73853108f56df97baf2bb8b522f3578221e56f646ba345a372c78326710d3830"},
- {file = "pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e58876c91f97b0952eb766123bfef372792ab3f4e3e1f1a2267834c2ab131734"},
- {file = "pillow-11.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:224aaa38177597bb179f3ec87eeefcce8e4f85e608025e9cfac60de237ba6316"},
- {file = "pillow-11.0.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:5bd2d3bdb846d757055910f0a59792d33b555800813c3b39ada1829c372ccb06"},
- {file = "pillow-11.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:375b8dd15a1f5d2feafff536d47e22f69625c1aa92f12b339ec0b2ca40263273"},
- {file = "pillow-11.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:daffdf51ee5db69a82dd127eabecce20729e21f7a3680cf7cbb23f0829189790"},
- {file = "pillow-11.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7326a1787e3c7b0429659e0a944725e1b03eeaa10edd945a86dead1913383944"},
- {file = "pillow-11.0.0.tar.gz", hash = "sha256:72bacbaf24ac003fea9bff9837d1eedb6088758d41e100c1552930151f677739"},
-]
-
-[package.extras]
-docs = ["furo", "olefile", "sphinx (>=8.1)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"]
+ {file = "pillow-10.4.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:4d9667937cfa347525b319ae34375c37b9ee6b525440f3ef48542fcf66f2731e"},
+ {file = "pillow-10.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:543f3dc61c18dafb755773efc89aae60d06b6596a63914107f75459cf984164d"},
+ {file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7928ecbf1ece13956b95d9cbcfc77137652b02763ba384d9ab508099a2eca856"},
+ {file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4d49b85c4348ea0b31ea63bc75a9f3857869174e2bf17e7aba02945cd218e6f"},
+ {file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:6c762a5b0997f5659a5ef2266abc1d8851ad7749ad9a6a5506eb23d314e4f46b"},
+ {file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a985e028fc183bf12a77a8bbf36318db4238a3ded7fa9df1b9a133f1cb79f8fc"},
+ {file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:812f7342b0eee081eaec84d91423d1b4650bb9828eb53d8511bcef8ce5aecf1e"},
+ {file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ac1452d2fbe4978c2eec89fb5a23b8387aba707ac72810d9490118817d9c0b46"},
+ {file = "pillow-10.4.0-cp310-cp310-win32.whl", hash = "sha256:bcd5e41a859bf2e84fdc42f4edb7d9aba0a13d29a2abadccafad99de3feff984"},
+ {file = "pillow-10.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:ecd85a8d3e79cd7158dec1c9e5808e821feea088e2f69a974db5edf84dc53141"},
+ {file = "pillow-10.4.0-cp310-cp310-win_arm64.whl", hash = "sha256:ff337c552345e95702c5fde3158acb0625111017d0e5f24bf3acdb9cc16b90d1"},
+ {file = "pillow-10.4.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:0a9ec697746f268507404647e531e92889890a087e03681a3606d9b920fbee3c"},
+ {file = "pillow-10.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe91cb65544a1321e631e696759491ae04a2ea11d36715eca01ce07284738be"},
+ {file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dc6761a6efc781e6a1544206f22c80c3af4c8cf461206d46a1e6006e4429ff3"},
+ {file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e84b6cc6a4a3d76c153a6b19270b3526a5a8ed6b09501d3af891daa2a9de7d6"},
+ {file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:bbc527b519bd3aa9d7f429d152fea69f9ad37c95f0b02aebddff592688998abe"},
+ {file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:76a911dfe51a36041f2e756b00f96ed84677cdeb75d25c767f296c1c1eda1319"},
+ {file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:59291fb29317122398786c2d44427bbd1a6d7ff54017075b22be9d21aa59bd8d"},
+ {file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:416d3a5d0e8cfe4f27f574362435bc9bae57f679a7158e0096ad2beb427b8696"},
+ {file = "pillow-10.4.0-cp311-cp311-win32.whl", hash = "sha256:7086cc1d5eebb91ad24ded9f58bec6c688e9f0ed7eb3dbbf1e4800280a896496"},
+ {file = "pillow-10.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cbed61494057c0f83b83eb3a310f0bf774b09513307c434d4366ed64f4128a91"},
+ {file = "pillow-10.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:f5f0c3e969c8f12dd2bb7e0b15d5c468b51e5017e01e2e867335c81903046a22"},
+ {file = "pillow-10.4.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:673655af3eadf4df6b5457033f086e90299fdd7a47983a13827acf7459c15d94"},
+ {file = "pillow-10.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:866b6942a92f56300012f5fbac71f2d610312ee65e22f1aa2609e491284e5597"},
+ {file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29dbdc4207642ea6aad70fbde1a9338753d33fb23ed6956e706936706f52dd80"},
+ {file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf2342ac639c4cf38799a44950bbc2dfcb685f052b9e262f446482afaf4bffca"},
+ {file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f5b92f4d70791b4a67157321c4e8225d60b119c5cc9aee8ecf153aace4aad4ef"},
+ {file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:86dcb5a1eb778d8b25659d5e4341269e8590ad6b4e8b44d9f4b07f8d136c414a"},
+ {file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:780c072c2e11c9b2c7ca37f9a2ee8ba66f44367ac3e5c7832afcfe5104fd6d1b"},
+ {file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:37fb69d905be665f68f28a8bba3c6d3223c8efe1edf14cc4cfa06c241f8c81d9"},
+ {file = "pillow-10.4.0-cp312-cp312-win32.whl", hash = "sha256:7dfecdbad5c301d7b5bde160150b4db4c659cee2b69589705b6f8a0c509d9f42"},
+ {file = "pillow-10.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:1d846aea995ad352d4bdcc847535bd56e0fd88d36829d2c90be880ef1ee4668a"},
+ {file = "pillow-10.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:e553cad5179a66ba15bb18b353a19020e73a7921296a7979c4a2b7f6a5cd57f9"},
+ {file = "pillow-10.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8bc1a764ed8c957a2e9cacf97c8b2b053b70307cf2996aafd70e91a082e70df3"},
+ {file = "pillow-10.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6209bb41dc692ddfee4942517c19ee81b86c864b626dbfca272ec0f7cff5d9fb"},
+ {file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bee197b30783295d2eb680b311af15a20a8b24024a19c3a26431ff83eb8d1f70"},
+ {file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ef61f5dd14c300786318482456481463b9d6b91ebe5ef12f405afbba77ed0be"},
+ {file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:297e388da6e248c98bc4a02e018966af0c5f92dfacf5a5ca22fa01cb3179bca0"},
+ {file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:e4db64794ccdf6cb83a59d73405f63adbe2a1887012e308828596100a0b2f6cc"},
+ {file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd2880a07482090a3bcb01f4265f1936a903d70bc740bfcb1fd4e8a2ffe5cf5a"},
+ {file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4b35b21b819ac1dbd1233317adeecd63495f6babf21b7b2512d244ff6c6ce309"},
+ {file = "pillow-10.4.0-cp313-cp313-win32.whl", hash = "sha256:551d3fd6e9dc15e4c1eb6fc4ba2b39c0c7933fa113b220057a34f4bb3268a060"},
+ {file = "pillow-10.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:030abdbe43ee02e0de642aee345efa443740aa4d828bfe8e2eb11922ea6a21ea"},
+ {file = "pillow-10.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:5b001114dd152cfd6b23befeb28d7aee43553e2402c9f159807bf55f33af8a8d"},
+ {file = "pillow-10.4.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8d4d5063501b6dd4024b8ac2f04962d661222d120381272deea52e3fc52d3736"},
+ {file = "pillow-10.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7c1ee6f42250df403c5f103cbd2768a28fe1a0ea1f0f03fe151c8741e1469c8b"},
+ {file = "pillow-10.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b15e02e9bb4c21e39876698abf233c8c579127986f8207200bc8a8f6bb27acf2"},
+ {file = "pillow-10.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a8d4bade9952ea9a77d0c3e49cbd8b2890a399422258a77f357b9cc9be8d680"},
+ {file = "pillow-10.4.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:43efea75eb06b95d1631cb784aa40156177bf9dd5b4b03ff38979e048258bc6b"},
+ {file = "pillow-10.4.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:950be4d8ba92aca4b2bb0741285a46bfae3ca699ef913ec8416c1b78eadd64cd"},
+ {file = "pillow-10.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d7480af14364494365e89d6fddc510a13e5a2c3584cb19ef65415ca57252fb84"},
+ {file = "pillow-10.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:73664fe514b34c8f02452ffb73b7a92c6774e39a647087f83d67f010eb9a0cf0"},
+ {file = "pillow-10.4.0-cp38-cp38-win32.whl", hash = "sha256:e88d5e6ad0d026fba7bdab8c3f225a69f063f116462c49892b0149e21b6c0a0e"},
+ {file = "pillow-10.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:5161eef006d335e46895297f642341111945e2c1c899eb406882a6c61a4357ab"},
+ {file = "pillow-10.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0ae24a547e8b711ccaaf99c9ae3cd975470e1a30caa80a6aaee9a2f19c05701d"},
+ {file = "pillow-10.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:298478fe4f77a4408895605f3482b6cc6222c018b2ce565c2b6b9c354ac3229b"},
+ {file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:134ace6dc392116566980ee7436477d844520a26a4b1bd4053f6f47d096997fd"},
+ {file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:930044bb7679ab003b14023138b50181899da3f25de50e9dbee23b61b4de2126"},
+ {file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c76e5786951e72ed3686e122d14c5d7012f16c8303a674d18cdcd6d89557fc5b"},
+ {file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b2724fdb354a868ddf9a880cb84d102da914e99119211ef7ecbdc613b8c96b3c"},
+ {file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dbc6ae66518ab3c5847659e9988c3b60dc94ffb48ef9168656e0019a93dbf8a1"},
+ {file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:06b2f7898047ae93fad74467ec3d28fe84f7831370e3c258afa533f81ef7f3df"},
+ {file = "pillow-10.4.0-cp39-cp39-win32.whl", hash = "sha256:7970285ab628a3779aecc35823296a7869f889b8329c16ad5a71e4901a3dc4ef"},
+ {file = "pillow-10.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:961a7293b2457b405967af9c77dcaa43cc1a8cd50d23c532e62d48ab6cdd56f5"},
+ {file = "pillow-10.4.0-cp39-cp39-win_arm64.whl", hash = "sha256:32cda9e3d601a52baccb2856b8ea1fc213c90b340c542dcef77140dfa3278a9e"},
+ {file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5b4815f2e65b30f5fbae9dfffa8636d992d49705723fe86a3661806e069352d4"},
+ {file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8f0aef4ef59694b12cadee839e2ba6afeab89c0f39a3adc02ed51d109117b8da"},
+ {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f4727572e2918acaa9077c919cbbeb73bd2b3ebcfe033b72f858fc9fbef0026"},
+ {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff25afb18123cea58a591ea0244b92eb1e61a1fd497bf6d6384f09bc3262ec3e"},
+ {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:dc3e2db6ba09ffd7d02ae9141cfa0ae23393ee7687248d46a7507b75d610f4f5"},
+ {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:02a2be69f9c9b8c1e97cf2713e789d4e398c751ecfd9967c18d0ce304efbf885"},
+ {file = "pillow-10.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0755ffd4a0c6f267cccbae2e9903d95477ca2f77c4fcf3a3a09570001856c8a5"},
+ {file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:a02364621fe369e06200d4a16558e056fe2805d3468350df3aef21e00d26214b"},
+ {file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:1b5dea9831a90e9d0721ec417a80d4cbd7022093ac38a568db2dd78363b00908"},
+ {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b885f89040bb8c4a1573566bbb2f44f5c505ef6e74cec7ab9068c900047f04b"},
+ {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87dd88ded2e6d74d31e1e0a99a726a6765cda32d00ba72dc37f0651f306daaa8"},
+ {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:2db98790afc70118bd0255c2eeb465e9767ecf1f3c25f9a1abb8ffc8cfd1fe0a"},
+ {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f7baece4ce06bade126fb84b8af1c33439a76d8a6fd818970215e0560ca28c27"},
+ {file = "pillow-10.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cfdd747216947628af7b259d274771d84db2268ca062dd5faf373639d00113a3"},
+ {file = "pillow-10.4.0.tar.gz", hash = "sha256:166c1cd4d24309b30d61f79f4a9114b7b2313d7450912277855ff5dfd7cd4a06"},
+]
+
+[package.extras]
+docs = ["furo", "olefile", "sphinx (>=7.3)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"]
fpx = ["olefile"]
mic = ["olefile"]
tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"]
@@ -1540,6 +3308,27 @@ files = [
dev = ["pre-commit", "tox"]
testing = ["pytest", "pytest-benchmark"]
+[[package]]
+name = "pooch"
+version = "1.8.2"
+description = "A friend to fetch your data files"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "pooch-1.8.2-py3-none-any.whl", hash = "sha256:3529a57096f7198778a5ceefd5ac3ef0e4d06a6ddaf9fc2d609b806f25302c47"},
+ {file = "pooch-1.8.2.tar.gz", hash = "sha256:76561f0de68a01da4df6af38e9955c4c9d1a5c90da73f7e40276a5728ec83d10"},
+]
+
+[package.dependencies]
+packaging = ">=20.0"
+platformdirs = ">=2.5.0"
+requests = ">=2.19.0"
+
+[package.extras]
+progress = ["tqdm (>=4.41.0,<5.0.0)"]
+sftp = ["paramiko (>=2.7.0)"]
+xxhash = ["xxhash (>=1.4.3)"]
+
[[package]]
name = "pre-commit"
version = "4.0.1"
@@ -1559,7 +3348,17 @@ pyyaml = ">=5.1"
virtualenv = ">=20.10.0"
[[package]]
-name = "prompt-toolkit"
+name = "progressbar"
+version = "2.5"
+description = "Text progress bar library for Python."
+optional = false
+python-versions = "*"
+files = [
+ {file = "progressbar-2.5.tar.gz", hash = "sha256:5d81cb529da2e223b53962afd6c8ca0f05c6670e40309a7219eacc36af9b6c63"},
+]
+
+[[package]]
+name = "prompt-toolkit"
version = "3.0.48"
description = "Library for building powerful interactive command lines in Python"
optional = false
@@ -1572,6 +3371,133 @@ files = [
[package.dependencies]
wcwidth = "*"
+[[package]]
+name = "propcache"
+version = "0.2.0"
+description = "Accelerated property cache"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "propcache-0.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c5869b8fd70b81835a6f187c5fdbe67917a04d7e52b6e7cc4e5fe39d55c39d58"},
+ {file = "propcache-0.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:952e0d9d07609d9c5be361f33b0d6d650cd2bae393aabb11d9b719364521984b"},
+ {file = "propcache-0.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:33ac8f098df0585c0b53009f039dfd913b38c1d2edafed0cedcc0c32a05aa110"},
+ {file = "propcache-0.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97e48e8875e6c13909c800fa344cd54cc4b2b0db1d5f911f840458a500fde2c2"},
+ {file = "propcache-0.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:388f3217649d6d59292b722d940d4d2e1e6a7003259eb835724092a1cca0203a"},
+ {file = "propcache-0.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f571aea50ba5623c308aa146eb650eebf7dbe0fd8c5d946e28343cb3b5aad577"},
+ {file = "propcache-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3dfafb44f7bb35c0c06eda6b2ab4bfd58f02729e7c4045e179f9a861b07c9850"},
+ {file = "propcache-0.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3ebe9a75be7ab0b7da2464a77bb27febcb4fab46a34f9288f39d74833db7f61"},
+ {file = "propcache-0.2.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d2f0d0f976985f85dfb5f3d685697ef769faa6b71993b46b295cdbbd6be8cc37"},
+ {file = "propcache-0.2.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:a3dc1a4b165283bd865e8f8cb5f0c64c05001e0718ed06250d8cac9bec115b48"},
+ {file = "propcache-0.2.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9e0f07b42d2a50c7dd2d8675d50f7343d998c64008f1da5fef888396b7f84630"},
+ {file = "propcache-0.2.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:e63e3e1e0271f374ed489ff5ee73d4b6e7c60710e1f76af5f0e1a6117cd26394"},
+ {file = "propcache-0.2.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:56bb5c98f058a41bb58eead194b4db8c05b088c93d94d5161728515bd52b052b"},
+ {file = "propcache-0.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7665f04d0c7f26ff8bb534e1c65068409bf4687aa2534faf7104d7182debb336"},
+ {file = "propcache-0.2.0-cp310-cp310-win32.whl", hash = "sha256:7cf18abf9764746b9c8704774d8b06714bcb0a63641518a3a89c7f85cc02c2ad"},
+ {file = "propcache-0.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:cfac69017ef97db2438efb854edf24f5a29fd09a536ff3a992b75990720cdc99"},
+ {file = "propcache-0.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:63f13bf09cc3336eb04a837490b8f332e0db41da66995c9fd1ba04552e516354"},
+ {file = "propcache-0.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608cce1da6f2672a56b24a015b42db4ac612ee709f3d29f27a00c943d9e851de"},
+ {file = "propcache-0.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:466c219deee4536fbc83c08d09115249db301550625c7fef1c5563a584c9bc87"},
+ {file = "propcache-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc2db02409338bf36590aa985a461b2c96fce91f8e7e0f14c50c5fcc4f229016"},
+ {file = "propcache-0.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a6ed8db0a556343d566a5c124ee483ae113acc9a557a807d439bcecc44e7dfbb"},
+ {file = "propcache-0.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:91997d9cb4a325b60d4e3f20967f8eb08dfcb32b22554d5ef78e6fd1dda743a2"},
+ {file = "propcache-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c7dde9e533c0a49d802b4f3f218fa9ad0a1ce21f2c2eb80d5216565202acab4"},
+ {file = "propcache-0.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffcad6c564fe6b9b8916c1aefbb37a362deebf9394bd2974e9d84232e3e08504"},
+ {file = "propcache-0.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:97a58a28bcf63284e8b4d7b460cbee1edaab24634e82059c7b8c09e65284f178"},
+ {file = "propcache-0.2.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:945db8ee295d3af9dbdbb698cce9bbc5c59b5c3fe328bbc4387f59a8a35f998d"},
+ {file = "propcache-0.2.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:39e104da444a34830751715f45ef9fc537475ba21b7f1f5b0f4d71a3b60d7fe2"},
+ {file = "propcache-0.2.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c5ecca8f9bab618340c8e848d340baf68bcd8ad90a8ecd7a4524a81c1764b3db"},
+ {file = "propcache-0.2.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:c436130cc779806bdf5d5fae0d848713105472b8566b75ff70048c47d3961c5b"},
+ {file = "propcache-0.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:191db28dc6dcd29d1a3e063c3be0b40688ed76434622c53a284e5427565bbd9b"},
+ {file = "propcache-0.2.0-cp311-cp311-win32.whl", hash = "sha256:5f2564ec89058ee7c7989a7b719115bdfe2a2fb8e7a4543b8d1c0cc4cf6478c1"},
+ {file = "propcache-0.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:6e2e54267980349b723cff366d1e29b138b9a60fa376664a157a342689553f71"},
+ {file = "propcache-0.2.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:2ee7606193fb267be4b2e3b32714f2d58cad27217638db98a60f9efb5efeccc2"},
+ {file = "propcache-0.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:91ee8fc02ca52e24bcb77b234f22afc03288e1dafbb1f88fe24db308910c4ac7"},
+ {file = "propcache-0.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2e900bad2a8456d00a113cad8c13343f3b1f327534e3589acc2219729237a2e8"},
+ {file = "propcache-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f52a68c21363c45297aca15561812d542f8fc683c85201df0bebe209e349f793"},
+ {file = "propcache-0.2.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e41d67757ff4fbc8ef2af99b338bfb955010444b92929e9e55a6d4dcc3c4f09"},
+ {file = "propcache-0.2.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a64e32f8bd94c105cc27f42d3b658902b5bcc947ece3c8fe7bc1b05982f60e89"},
+ {file = "propcache-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:55346705687dbd7ef0d77883ab4f6fabc48232f587925bdaf95219bae072491e"},
+ {file = "propcache-0.2.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00181262b17e517df2cd85656fcd6b4e70946fe62cd625b9d74ac9977b64d8d9"},
+ {file = "propcache-0.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6994984550eaf25dd7fc7bd1b700ff45c894149341725bb4edc67f0ffa94efa4"},
+ {file = "propcache-0.2.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:56295eb1e5f3aecd516d91b00cfd8bf3a13991de5a479df9e27dd569ea23959c"},
+ {file = "propcache-0.2.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:439e76255daa0f8151d3cb325f6dd4a3e93043e6403e6491813bcaaaa8733887"},
+ {file = "propcache-0.2.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:f6475a1b2ecb310c98c28d271a30df74f9dd436ee46d09236a6b750a7599ce57"},
+ {file = "propcache-0.2.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:3444cdba6628accf384e349014084b1cacd866fbb88433cd9d279d90a54e0b23"},
+ {file = "propcache-0.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4a9d9b4d0a9b38d1c391bb4ad24aa65f306c6f01b512e10a8a34a2dc5675d348"},
+ {file = "propcache-0.2.0-cp312-cp312-win32.whl", hash = "sha256:69d3a98eebae99a420d4b28756c8ce6ea5a29291baf2dc9ff9414b42676f61d5"},
+ {file = "propcache-0.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:ad9c9b99b05f163109466638bd30ada1722abb01bbb85c739c50b6dc11f92dc3"},
+ {file = "propcache-0.2.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ecddc221a077a8132cf7c747d5352a15ed763b674c0448d811f408bf803d9ad7"},
+ {file = "propcache-0.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0e53cb83fdd61cbd67202735e6a6687a7b491c8742dfc39c9e01e80354956763"},
+ {file = "propcache-0.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92fe151145a990c22cbccf9ae15cae8ae9eddabfc949a219c9f667877e40853d"},
+ {file = "propcache-0.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6a21ef516d36909931a2967621eecb256018aeb11fc48656e3257e73e2e247a"},
+ {file = "propcache-0.2.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f88a4095e913f98988f5b338c1d4d5d07dbb0b6bad19892fd447484e483ba6b"},
+ {file = "propcache-0.2.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a5b3bb545ead161be780ee85a2b54fdf7092815995661947812dde94a40f6fb"},
+ {file = "propcache-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67aeb72e0f482709991aa91345a831d0b707d16b0257e8ef88a2ad246a7280bf"},
+ {file = "propcache-0.2.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c997f8c44ec9b9b0bcbf2d422cc00a1d9b9c681f56efa6ca149a941e5560da2"},
+ {file = "propcache-0.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2a66df3d4992bc1d725b9aa803e8c5a66c010c65c741ad901e260ece77f58d2f"},
+ {file = "propcache-0.2.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:3ebbcf2a07621f29638799828b8d8668c421bfb94c6cb04269130d8de4fb7136"},
+ {file = "propcache-0.2.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:1235c01ddaa80da8235741e80815ce381c5267f96cc49b1477fdcf8c047ef325"},
+ {file = "propcache-0.2.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3947483a381259c06921612550867b37d22e1df6d6d7e8361264b6d037595f44"},
+ {file = "propcache-0.2.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:d5bed7f9805cc29c780f3aee05de3262ee7ce1f47083cfe9f77471e9d6777e83"},
+ {file = "propcache-0.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e4a91d44379f45f5e540971d41e4626dacd7f01004826a18cb048e7da7e96544"},
+ {file = "propcache-0.2.0-cp313-cp313-win32.whl", hash = "sha256:f902804113e032e2cdf8c71015651c97af6418363bea8d78dc0911d56c335032"},
+ {file = "propcache-0.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:8f188cfcc64fb1266f4684206c9de0e80f54622c3f22a910cbd200478aeae61e"},
+ {file = "propcache-0.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:53d1bd3f979ed529f0805dd35ddaca330f80a9a6d90bc0121d2ff398f8ed8861"},
+ {file = "propcache-0.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:83928404adf8fb3d26793665633ea79b7361efa0287dfbd372a7e74311d51ee6"},
+ {file = "propcache-0.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:77a86c261679ea5f3896ec060be9dc8e365788248cc1e049632a1be682442063"},
+ {file = "propcache-0.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:218db2a3c297a3768c11a34812e63b3ac1c3234c3a086def9c0fee50d35add1f"},
+ {file = "propcache-0.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7735e82e3498c27bcb2d17cb65d62c14f1100b71723b68362872bca7d0913d90"},
+ {file = "propcache-0.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:20a617c776f520c3875cf4511e0d1db847a076d720714ae35ffe0df3e440be68"},
+ {file = "propcache-0.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67b69535c870670c9f9b14a75d28baa32221d06f6b6fa6f77a0a13c5a7b0a5b9"},
+ {file = "propcache-0.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4569158070180c3855e9c0791c56be3ceeb192defa2cdf6a3f39e54319e56b89"},
+ {file = "propcache-0.2.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:db47514ffdbd91ccdc7e6f8407aac4ee94cc871b15b577c1c324236b013ddd04"},
+ {file = "propcache-0.2.0-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:2a60ad3e2553a74168d275a0ef35e8c0a965448ffbc3b300ab3a5bb9956c2162"},
+ {file = "propcache-0.2.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:662dd62358bdeaca0aee5761de8727cfd6861432e3bb828dc2a693aa0471a563"},
+ {file = "propcache-0.2.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:25a1f88b471b3bc911d18b935ecb7115dff3a192b6fef46f0bfaf71ff4f12418"},
+ {file = "propcache-0.2.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:f60f0ac7005b9f5a6091009b09a419ace1610e163fa5deaba5ce3484341840e7"},
+ {file = "propcache-0.2.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:74acd6e291f885678631b7ebc85d2d4aec458dd849b8c841b57ef04047833bed"},
+ {file = "propcache-0.2.0-cp38-cp38-win32.whl", hash = "sha256:d9b6ddac6408194e934002a69bcaadbc88c10b5f38fb9307779d1c629181815d"},
+ {file = "propcache-0.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:676135dcf3262c9c5081cc8f19ad55c8a64e3f7282a21266d05544450bffc3a5"},
+ {file = "propcache-0.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:25c8d773a62ce0451b020c7b29a35cfbc05de8b291163a7a0f3b7904f27253e6"},
+ {file = "propcache-0.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:375a12d7556d462dc64d70475a9ee5982465fbb3d2b364f16b86ba9135793638"},
+ {file = "propcache-0.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1ec43d76b9677637a89d6ab86e1fef70d739217fefa208c65352ecf0282be957"},
+ {file = "propcache-0.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f45eec587dafd4b2d41ac189c2156461ebd0c1082d2fe7013571598abb8505d1"},
+ {file = "propcache-0.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bc092ba439d91df90aea38168e11f75c655880c12782facf5cf9c00f3d42b562"},
+ {file = "propcache-0.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fa1076244f54bb76e65e22cb6910365779d5c3d71d1f18b275f1dfc7b0d71b4d"},
+ {file = "propcache-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:682a7c79a2fbf40f5dbb1eb6bfe2cd865376deeac65acf9beb607505dced9e12"},
+ {file = "propcache-0.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8e40876731f99b6f3c897b66b803c9e1c07a989b366c6b5b475fafd1f7ba3fb8"},
+ {file = "propcache-0.2.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:363ea8cd3c5cb6679f1c2f5f1f9669587361c062e4899fce56758efa928728f8"},
+ {file = "propcache-0.2.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:140fbf08ab3588b3468932974a9331aff43c0ab8a2ec2c608b6d7d1756dbb6cb"},
+ {file = "propcache-0.2.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:e70fac33e8b4ac63dfc4c956fd7d85a0b1139adcfc0d964ce288b7c527537fea"},
+ {file = "propcache-0.2.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:b33d7a286c0dc1a15f5fc864cc48ae92a846df287ceac2dd499926c3801054a6"},
+ {file = "propcache-0.2.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:f6d5749fdd33d90e34c2efb174c7e236829147a2713334d708746e94c4bde40d"},
+ {file = "propcache-0.2.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:22aa8f2272d81d9317ff5756bb108021a056805ce63dd3630e27d042c8092798"},
+ {file = "propcache-0.2.0-cp39-cp39-win32.whl", hash = "sha256:73e4b40ea0eda421b115248d7e79b59214411109a5bc47d0d48e4c73e3b8fcf9"},
+ {file = "propcache-0.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:9517d5e9e0731957468c29dbfd0f976736a0e55afaea843726e887f36fe017df"},
+ {file = "propcache-0.2.0-py3-none-any.whl", hash = "sha256:2ccc28197af5313706511fab3a8b66dcd6da067a1331372c82ea1cb74285e036"},
+ {file = "propcache-0.2.0.tar.gz", hash = "sha256:df81779732feb9d01e5d513fad0122efb3d53bbc75f61b2a4f29a020bc985e70"},
+]
+
+[[package]]
+name = "protobuf"
+version = "5.28.3"
+description = ""
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "protobuf-5.28.3-cp310-abi3-win32.whl", hash = "sha256:0c4eec6f987338617072592b97943fdbe30d019c56126493111cf24344c1cc24"},
+ {file = "protobuf-5.28.3-cp310-abi3-win_amd64.whl", hash = "sha256:91fba8f445723fcf400fdbe9ca796b19d3b1242cd873907979b9ed71e4afe868"},
+ {file = "protobuf-5.28.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:a3f6857551e53ce35e60b403b8a27b0295f7d6eb63d10484f12bc6879c715687"},
+ {file = "protobuf-5.28.3-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:3fa2de6b8b29d12c61911505d893afe7320ce7ccba4df913e2971461fa36d584"},
+ {file = "protobuf-5.28.3-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:712319fbdddb46f21abb66cd33cb9e491a5763b2febd8f228251add221981135"},
+ {file = "protobuf-5.28.3-cp38-cp38-win32.whl", hash = "sha256:3e6101d095dfd119513cde7259aa703d16c6bbdfae2554dfe5cfdbe94e32d548"},
+ {file = "protobuf-5.28.3-cp38-cp38-win_amd64.whl", hash = "sha256:27b246b3723692bf1068d5734ddaf2fccc2cdd6e0c9b47fe099244d80200593b"},
+ {file = "protobuf-5.28.3-cp39-cp39-win32.whl", hash = "sha256:135658402f71bbd49500322c0f736145731b16fc79dc8f367ab544a17eab4535"},
+ {file = "protobuf-5.28.3-cp39-cp39-win_amd64.whl", hash = "sha256:70585a70fc2dd4818c51287ceef5bdba6387f88a578c86d47bb34669b5552c36"},
+ {file = "protobuf-5.28.3-py3-none-any.whl", hash = "sha256:cee1757663fa32a1ee673434fcf3bf24dd54763c79690201208bafec62f19eed"},
+ {file = "protobuf-5.28.3.tar.gz", hash = "sha256:64badbc49180a5e401f373f9ce7ab1d18b63f7dd4a9cdc43c92b9f0b481cef7b"},
+]
+
[[package]]
name = "psutil"
version = "6.1.0"
@@ -1795,6 +3721,41 @@ files = [
[package.extras]
windows-terminal = ["colorama (>=0.4.6)"]
+[[package]]
+name = "pylatexenc"
+version = "2.10"
+description = "Simple LaTeX parser providing latex-to-unicode and unicode-to-latex conversion"
+optional = false
+python-versions = "*"
+files = [
+ {file = "pylatexenc-2.10.tar.gz", hash = "sha256:3dd8fd84eb46dc30bee1e23eaab8d8fb5a7f507347b23e5f38ad9675c84f40d3"},
+]
+
+[[package]]
+name = "pyparsing"
+version = "3.0.9"
+description = "pyparsing module - Classes and methods to define and execute parsing grammars"
+optional = false
+python-versions = ">=3.6.8"
+files = [
+ {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"},
+ {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"},
+]
+
+[package.extras]
+diagrams = ["jinja2", "railroad-diagrams"]
+
+[[package]]
+name = "pypresence"
+version = "4.3.0"
+description = "Discord RPC client written in Python"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "pypresence-4.3.0-py2.py3-none-any.whl", hash = "sha256:af878c6d49315084f1b108aec86b31915080614d9421d6dd3a44737aba9ff13f"},
+ {file = "pypresence-4.3.0.tar.gz", hash = "sha256:a6191a3af33a9667f2a4ef0185577c86b962ee70aa82643c472768a6fed1fbf3"},
+]
+
[[package]]
name = "pytest"
version = "8.3.3"
@@ -1808,9 +3769,11 @@ files = [
[package.dependencies]
colorama = {version = "*", markers = "sys_platform == \"win32\""}
+exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""}
iniconfig = "*"
packaging = "*"
pluggy = ">=1.5,<2"
+tomli = {version = ">=1", markers = "python_version < \"3.11\""}
[package.extras]
dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"]
@@ -1849,13 +3812,13 @@ six = ">=1.5"
[[package]]
name = "python-multipart"
-version = "0.0.12"
+version = "0.0.17"
description = "A streaming multipart parser for Python"
optional = false
python-versions = ">=3.8"
files = [
- {file = "python_multipart-0.0.12-py3-none-any.whl", hash = "sha256:43dcf96cf65888a9cd3423544dd0d75ac10f7aa0c3c28a175bbcd00c9ce1aebf"},
- {file = "python_multipart-0.0.12.tar.gz", hash = "sha256:045e1f98d719c1ce085ed7f7e1ef9d8ccc8c02ba02b5566d5f7521410ced58cb"},
+ {file = "python_multipart-0.0.17-py3-none-any.whl", hash = "sha256:15dc4f487e0a9476cc1201261188ee0940165cffc94429b6fc565c4d3045cb5d"},
+ {file = "python_multipart-0.0.17.tar.gz", hash = "sha256:41330d831cae6e2f22902704ead2826ea038d0419530eadff3ea80175aec5538"},
]
[[package]]
@@ -2079,15 +4042,155 @@ files = [
[package.dependencies]
cffi = {version = "*", markers = "implementation_name == \"pypy\""}
+[[package]]
+name = "rdflib"
+version = "7.1.1"
+description = "RDFLib is a Python library for working with RDF, a simple yet powerful language for representing information."
+optional = false
+python-versions = "<4.0.0,>=3.8.1"
+files = [
+ {file = "rdflib-7.1.1-py3-none-any.whl", hash = "sha256:e590fa9a2c34ba33a667818b5a84be3fb8a4d85868f8038f17912ec84f912a25"},
+ {file = "rdflib-7.1.1.tar.gz", hash = "sha256:164de86bd3564558802ca983d84f6616a4a1a420c7a17a8152f5016076b2913e"},
+]
+
+[package.dependencies]
+isodate = {version = ">=0.7.2,<1.0.0", markers = "python_version < \"3.11\""}
+pyparsing = ">=2.1.0,<4"
+
+[package.extras]
+berkeleydb = ["berkeleydb (>=18.1.0,<19.0.0)"]
+html = ["html5rdf (>=1.2,<2)"]
+lxml = ["lxml (>=4.3,<6.0)"]
+networkx = ["networkx (>=2,<4)"]
+orjson = ["orjson (>=3.9.14,<4)"]
+
+[[package]]
+name = "referencing"
+version = "0.35.1"
+description = "JSON Referencing + Python"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de"},
+ {file = "referencing-0.35.1.tar.gz", hash = "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c"},
+]
+
+[package.dependencies]
+attrs = ">=22.2.0"
+rpds-py = ">=0.7.0"
+
+[[package]]
+name = "regex"
+version = "2024.11.6"
+description = "Alternative regular expression module, to replace re."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91"},
+ {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0"},
+ {file = "regex-2024.11.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:164d8b7b3b4bcb2068b97428060b2a53be050085ef94eca7f240e7947f1b080e"},
+ {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3660c82f209655a06b587d55e723f0b813d3a7db2e32e5e7dc64ac2a9e86fde"},
+ {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d22326fcdef5e08c154280b71163ced384b428343ae16a5ab2b3354aed12436e"},
+ {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1ac758ef6aebfc8943560194e9fd0fa18bcb34d89fd8bd2af18183afd8da3a2"},
+ {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:997d6a487ff00807ba810e0f8332c18b4eb8d29463cfb7c820dc4b6e7562d0cf"},
+ {file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:02a02d2bb04fec86ad61f3ea7f49c015a0681bf76abb9857f945d26159d2968c"},
+ {file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f02f93b92358ee3f78660e43b4b0091229260c5d5c408d17d60bf26b6c900e86"},
+ {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:06eb1be98df10e81ebaded73fcd51989dcf534e3c753466e4b60c4697a003b67"},
+ {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:040df6fe1a5504eb0f04f048e6d09cd7c7110fef851d7c567a6b6e09942feb7d"},
+ {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabbfc59f2c6edba2a6622c647b716e34e8e3867e0ab975412c5c2f79b82da2"},
+ {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8447d2d39b5abe381419319f942de20b7ecd60ce86f16a23b0698f22e1b70008"},
+ {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:da8f5fc57d1933de22a9e23eec290a0d8a5927a5370d24bda9a6abe50683fe62"},
+ {file = "regex-2024.11.6-cp310-cp310-win32.whl", hash = "sha256:b489578720afb782f6ccf2840920f3a32e31ba28a4b162e13900c3e6bd3f930e"},
+ {file = "regex-2024.11.6-cp310-cp310-win_amd64.whl", hash = "sha256:5071b2093e793357c9d8b2929dfc13ac5f0a6c650559503bb81189d0a3814519"},
+ {file = "regex-2024.11.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5478c6962ad548b54a591778e93cd7c456a7a29f8eca9c49e4f9a806dcc5d638"},
+ {file = "regex-2024.11.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c89a8cc122b25ce6945f0423dc1352cb9593c68abd19223eebbd4e56612c5b7"},
+ {file = "regex-2024.11.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:94d87b689cdd831934fa3ce16cc15cd65748e6d689f5d2b8f4f4df2065c9fa20"},
+ {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1062b39a0a2b75a9c694f7a08e7183a80c63c0d62b301418ffd9c35f55aaa114"},
+ {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:167ed4852351d8a750da48712c3930b031f6efdaa0f22fa1933716bfcd6bf4a3"},
+ {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d548dafee61f06ebdb584080621f3e0c23fff312f0de1afc776e2a2ba99a74f"},
+ {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a19f302cd1ce5dd01a9099aaa19cae6173306d1302a43b627f62e21cf18ac0"},
+ {file = "regex-2024.11.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bec9931dfb61ddd8ef2ebc05646293812cb6b16b60cf7c9511a832b6f1854b55"},
+ {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9714398225f299aa85267fd222f7142fcb5c769e73d7733344efc46f2ef5cf89"},
+ {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:202eb32e89f60fc147a41e55cb086db2a3f8cb82f9a9a88440dcfc5d37faae8d"},
+ {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:4181b814e56078e9b00427ca358ec44333765f5ca1b45597ec7446d3a1ef6e34"},
+ {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:068376da5a7e4da51968ce4c122a7cd31afaaec4fccc7856c92f63876e57b51d"},
+ {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f2c4184420d881a3475fb2c6f4d95d53a8d50209a2500723d831036f7c45"},
+ {file = "regex-2024.11.6-cp311-cp311-win32.whl", hash = "sha256:c36f9b6f5f8649bb251a5f3f66564438977b7ef8386a52460ae77e6070d309d9"},
+ {file = "regex-2024.11.6-cp311-cp311-win_amd64.whl", hash = "sha256:02e28184be537f0e75c1f9b2f8847dc51e08e6e171c6bde130b2687e0c33cf60"},
+ {file = "regex-2024.11.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:52fb28f528778f184f870b7cf8f225f5eef0a8f6e3778529bdd40c7b3920796a"},
+ {file = "regex-2024.11.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdd6028445d2460f33136c55eeb1f601ab06d74cb3347132e1c24250187500d9"},
+ {file = "regex-2024.11.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805e6b60c54bf766b251e94526ebad60b7de0c70f70a4e6210ee2891acb70bf2"},
+ {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b85c2530be953a890eaffde05485238f07029600e8f098cdf1848d414a8b45e4"},
+ {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb26437975da7dc36b7efad18aa9dd4ea569d2357ae6b783bf1118dabd9ea577"},
+ {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abfa5080c374a76a251ba60683242bc17eeb2c9818d0d30117b4486be10c59d3"},
+ {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b7fa6606c2881c1db9479b0eaa11ed5dfa11c8d60a474ff0e095099f39d98e"},
+ {file = "regex-2024.11.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c32f75920cf99fe6b6c539c399a4a128452eaf1af27f39bce8909c9a3fd8cbe"},
+ {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:982e6d21414e78e1f51cf595d7f321dcd14de1f2881c5dc6a6e23bbbbd68435e"},
+ {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a7c2155f790e2fb448faed6dd241386719802296ec588a8b9051c1f5c481bc29"},
+ {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149f5008d286636e48cd0b1dd65018548944e495b0265b45e1bffecce1ef7f39"},
+ {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e5364a4502efca094731680e80009632ad6624084aff9a23ce8c8c6820de3e51"},
+ {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0a86e7eeca091c09e021db8eb72d54751e527fa47b8d5787caf96d9831bd02ad"},
+ {file = "regex-2024.11.6-cp312-cp312-win32.whl", hash = "sha256:32f9a4c643baad4efa81d549c2aadefaeba12249b2adc5af541759237eee1c54"},
+ {file = "regex-2024.11.6-cp312-cp312-win_amd64.whl", hash = "sha256:a93c194e2df18f7d264092dc8539b8ffb86b45b899ab976aa15d48214138e81b"},
+ {file = "regex-2024.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84"},
+ {file = "regex-2024.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4"},
+ {file = "regex-2024.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0"},
+ {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bde01f35767c4a7899b7eb6e823b125a64de314a8ee9791367c9a34d56af18d0"},
+ {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b583904576650166b3d920d2bcce13971f6f9e9a396c673187f49811b2769dc7"},
+ {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c4de13f06a0d54fa0d5ab1b7138bfa0d883220965a29616e3ea61b35d5f5fc7"},
+ {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cde6e9f2580eb1665965ce9bf17ff4952f34f5b126beb509fee8f4e994f143c"},
+ {file = "regex-2024.11.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d7f453dca13f40a02b79636a339c5b62b670141e63efd511d3f8f73fba162b3"},
+ {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59dfe1ed21aea057a65c6b586afd2a945de04fc7db3de0a6e3ed5397ad491b07"},
+ {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b97c1e0bd37c5cd7902e65f410779d39eeda155800b65fc4d04cc432efa9bc6e"},
+ {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d1e379028e0fc2ae3654bac3cbbef81bf3fd571272a42d56c24007979bafb6"},
+ {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:13291b39131e2d002a7940fb176e120bec5145f3aeb7621be6534e46251912c4"},
+ {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f51f88c126370dcec4908576c5a627220da6c09d0bff31cfa89f2523843316d"},
+ {file = "regex-2024.11.6-cp313-cp313-win32.whl", hash = "sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff"},
+ {file = "regex-2024.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a"},
+ {file = "regex-2024.11.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3a51ccc315653ba012774efca4f23d1d2a8a8f278a6072e29c7147eee7da446b"},
+ {file = "regex-2024.11.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ad182d02e40de7459b73155deb8996bbd8e96852267879396fb274e8700190e3"},
+ {file = "regex-2024.11.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ba9b72e5643641b7d41fa1f6d5abda2c9a263ae835b917348fc3c928182ad467"},
+ {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40291b1b89ca6ad8d3f2b82782cc33807f1406cf68c8d440861da6304d8ffbbd"},
+ {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cdf58d0e516ee426a48f7b2c03a332a4114420716d55769ff7108c37a09951bf"},
+ {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a36fdf2af13c2b14738f6e973aba563623cb77d753bbbd8d414d18bfaa3105dd"},
+ {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1cee317bfc014c2419a76bcc87f071405e3966da434e03e13beb45f8aced1a6"},
+ {file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50153825ee016b91549962f970d6a4442fa106832e14c918acd1c8e479916c4f"},
+ {file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea1bfda2f7162605f6e8178223576856b3d791109f15ea99a9f95c16a7636fb5"},
+ {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:df951c5f4a1b1910f1a99ff42c473ff60f8225baa1cdd3539fe2819d9543e9df"},
+ {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:072623554418a9911446278f16ecb398fb3b540147a7828c06e2011fa531e773"},
+ {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f654882311409afb1d780b940234208a252322c24a93b442ca714d119e68086c"},
+ {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:89d75e7293d2b3e674db7d4d9b1bee7f8f3d1609428e293771d1a962617150cc"},
+ {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:f65557897fc977a44ab205ea871b690adaef6b9da6afda4790a2484b04293a5f"},
+ {file = "regex-2024.11.6-cp38-cp38-win32.whl", hash = "sha256:6f44ec28b1f858c98d3036ad5d7d0bfc568bdd7a74f9c24e25f41ef1ebfd81a4"},
+ {file = "regex-2024.11.6-cp38-cp38-win_amd64.whl", hash = "sha256:bb8f74f2f10dbf13a0be8de623ba4f9491faf58c24064f32b65679b021ed0001"},
+ {file = "regex-2024.11.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5704e174f8ccab2026bd2f1ab6c510345ae8eac818b613d7d73e785f1310f839"},
+ {file = "regex-2024.11.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:220902c3c5cc6af55d4fe19ead504de80eb91f786dc102fbd74894b1551f095e"},
+ {file = "regex-2024.11.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e7e351589da0850c125f1600a4c4ba3c722efefe16b297de54300f08d734fbf"},
+ {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5056b185ca113c88e18223183aa1a50e66507769c9640a6ff75859619d73957b"},
+ {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e34b51b650b23ed3354b5a07aab37034d9f923db2a40519139af34f485f77d0"},
+ {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5670bce7b200273eee1840ef307bfa07cda90b38ae56e9a6ebcc9f50da9c469b"},
+ {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08986dce1339bc932923e7d1232ce9881499a0e02925f7402fb7c982515419ef"},
+ {file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93c0b12d3d3bc25af4ebbf38f9ee780a487e8bf6954c115b9f015822d3bb8e48"},
+ {file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:764e71f22ab3b305e7f4c21f1a97e1526a25ebdd22513e251cf376760213da13"},
+ {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f056bf21105c2515c32372bbc057f43eb02aae2fda61052e2f7622c801f0b4e2"},
+ {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:69ab78f848845569401469da20df3e081e6b5a11cb086de3eed1d48f5ed57c95"},
+ {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:86fddba590aad9208e2fa8b43b4c098bb0ec74f15718bb6a704e3c63e2cef3e9"},
+ {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:684d7a212682996d21ca12ef3c17353c021fe9de6049e19ac8481ec35574a70f"},
+ {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a03e02f48cd1abbd9f3b7e3586d97c8f7a9721c436f51a5245b3b9483044480b"},
+ {file = "regex-2024.11.6-cp39-cp39-win32.whl", hash = "sha256:41758407fc32d5c3c5de163888068cfee69cb4c2be844e7ac517a52770f9af57"},
+ {file = "regex-2024.11.6-cp39-cp39-win_amd64.whl", hash = "sha256:b2837718570f95dd41675328e111345f9b7095d821bac435aac173ac80b19983"},
+ {file = "regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519"},
+]
+
[[package]]
name = "requests"
-version = "2.32.3"
+version = "2.31.0"
description = "Python HTTP for Humans."
optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.7"
files = [
- {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"},
- {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"},
+ {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"},
+ {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"},
]
[package.dependencies]
@@ -2100,6 +4203,40 @@ urllib3 = ">=1.21.1,<3"
socks = ["PySocks (>=1.5.6,!=1.5.7)"]
use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
+[[package]]
+name = "resampy"
+version = "0.4.3"
+description = "Efficient signal resampling"
+optional = false
+python-versions = "*"
+files = [
+ {file = "resampy-0.4.3-py3-none-any.whl", hash = "sha256:ad2ed64516b140a122d96704e32bc0f92b23f45419e8b8f478e5a05f83edcebd"},
+ {file = "resampy-0.4.3.tar.gz", hash = "sha256:a0d1c28398f0e55994b739650afef4e3974115edbe96cd4bb81968425e916e47"},
+]
+
+[package.dependencies]
+numba = ">=0.53"
+numpy = ">=1.17"
+
+[package.extras]
+design = ["optuna (>=2.10.0)"]
+docs = ["numpydoc", "sphinx (!=1.3.1)"]
+tests = ["pytest (<8)", "pytest-cov", "scipy (>=1.1)"]
+
+[[package]]
+name = "rfc3986"
+version = "1.5.0"
+description = "Validating URI References per RFC 3986"
+optional = false
+python-versions = "*"
+files = [
+ {file = "rfc3986-1.5.0-py2.py3-none-any.whl", hash = "sha256:a86d6e1f5b1dc238b218b012df0aa79409667bb209e58da56d0b94704e712a97"},
+ {file = "rfc3986-1.5.0.tar.gz", hash = "sha256:270aaf10d87d0d4e095063c65bf3ddbc6ee3d0b226328ce21e036f946e421835"},
+]
+
+[package.extras]
+idna2008 = ["idna"]
+
[[package]]
name = "rich"
version = "13.9.4"
@@ -2114,10 +4251,110 @@ files = [
[package.dependencies]
markdown-it-py = ">=2.2.0"
pygments = ">=2.13.0,<3.0.0"
+typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.11\""}
[package.extras]
jupyter = ["ipywidgets (>=7.5.1,<9)"]
+[[package]]
+name = "rpds-py"
+version = "0.21.0"
+description = "Python bindings to Rust's persistent data structures (rpds)"
+optional = false
+python-versions = ">=3.9"
+files = [
+ {file = "rpds_py-0.21.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a017f813f24b9df929674d0332a374d40d7f0162b326562daae8066b502d0590"},
+ {file = "rpds_py-0.21.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:20cc1ed0bcc86d8e1a7e968cce15be45178fd16e2ff656a243145e0b439bd250"},
+ {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad116dda078d0bc4886cb7840e19811562acdc7a8e296ea6ec37e70326c1b41c"},
+ {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:808f1ac7cf3b44f81c9475475ceb221f982ef548e44e024ad5f9e7060649540e"},
+ {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de552f4a1916e520f2703ec474d2b4d3f86d41f353e7680b597512ffe7eac5d0"},
+ {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:efec946f331349dfc4ae9d0e034c263ddde19414fe5128580f512619abed05f1"},
+ {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b80b4690bbff51a034bfde9c9f6bf9357f0a8c61f548942b80f7b66356508bf5"},
+ {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:085ed25baac88953d4283e5b5bd094b155075bb40d07c29c4f073e10623f9f2e"},
+ {file = "rpds_py-0.21.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:daa8efac2a1273eed2354397a51216ae1e198ecbce9036fba4e7610b308b6153"},
+ {file = "rpds_py-0.21.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:95a5bad1ac8a5c77b4e658671642e4af3707f095d2b78a1fdd08af0dfb647624"},
+ {file = "rpds_py-0.21.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3e53861b29a13d5b70116ea4230b5f0f3547b2c222c5daa090eb7c9c82d7f664"},
+ {file = "rpds_py-0.21.0-cp310-none-win32.whl", hash = "sha256:ea3a6ac4d74820c98fcc9da4a57847ad2cc36475a8bd9683f32ab6d47a2bd682"},
+ {file = "rpds_py-0.21.0-cp310-none-win_amd64.whl", hash = "sha256:b8f107395f2f1d151181880b69a2869c69e87ec079c49c0016ab96860b6acbe5"},
+ {file = "rpds_py-0.21.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5555db3e618a77034954b9dc547eae94166391a98eb867905ec8fcbce1308d95"},
+ {file = "rpds_py-0.21.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:97ef67d9bbc3e15584c2f3c74bcf064af36336c10d2e21a2131e123ce0f924c9"},
+ {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ab2c2a26d2f69cdf833174f4d9d86118edc781ad9a8fa13970b527bf8236027"},
+ {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4e8921a259f54bfbc755c5bbd60c82bb2339ae0324163f32868f63f0ebb873d9"},
+ {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a7ff941004d74d55a47f916afc38494bd1cfd4b53c482b77c03147c91ac0ac3"},
+ {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5145282a7cd2ac16ea0dc46b82167754d5e103a05614b724457cffe614f25bd8"},
+ {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de609a6f1b682f70bb7163da745ee815d8f230d97276db049ab447767466a09d"},
+ {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:40c91c6e34cf016fa8e6b59d75e3dbe354830777fcfd74c58b279dceb7975b75"},
+ {file = "rpds_py-0.21.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d2132377f9deef0c4db89e65e8bb28644ff75a18df5293e132a8d67748397b9f"},
+ {file = "rpds_py-0.21.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0a9e0759e7be10109645a9fddaaad0619d58c9bf30a3f248a2ea57a7c417173a"},
+ {file = "rpds_py-0.21.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9e20da3957bdf7824afdd4b6eeb29510e83e026473e04952dca565170cd1ecc8"},
+ {file = "rpds_py-0.21.0-cp311-none-win32.whl", hash = "sha256:f71009b0d5e94c0e86533c0b27ed7cacc1239cb51c178fd239c3cfefefb0400a"},
+ {file = "rpds_py-0.21.0-cp311-none-win_amd64.whl", hash = "sha256:e168afe6bf6ab7ab46c8c375606298784ecbe3ba31c0980b7dcbb9631dcba97e"},
+ {file = "rpds_py-0.21.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:30b912c965b2aa76ba5168fd610087bad7fcde47f0a8367ee8f1876086ee6d1d"},
+ {file = "rpds_py-0.21.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ca9989d5d9b1b300bc18e1801c67b9f6d2c66b8fd9621b36072ed1df2c977f72"},
+ {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f54e7106f0001244a5f4cf810ba8d3f9c542e2730821b16e969d6887b664266"},
+ {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fed5dfefdf384d6fe975cc026886aece4f292feaf69d0eeb716cfd3c5a4dd8be"},
+ {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:590ef88db231c9c1eece44dcfefd7515d8bf0d986d64d0caf06a81998a9e8cab"},
+ {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f983e4c2f603c95dde63df633eec42955508eefd8d0f0e6d236d31a044c882d7"},
+ {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b229ce052ddf1a01c67d68166c19cb004fb3612424921b81c46e7ea7ccf7c3bf"},
+ {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ebf64e281a06c904a7636781d2e973d1f0926a5b8b480ac658dc0f556e7779f4"},
+ {file = "rpds_py-0.21.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:998a8080c4495e4f72132f3d66ff91f5997d799e86cec6ee05342f8f3cda7dca"},
+ {file = "rpds_py-0.21.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:98486337f7b4f3c324ab402e83453e25bb844f44418c066623db88e4c56b7c7b"},
+ {file = "rpds_py-0.21.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a78d8b634c9df7f8d175451cfeac3810a702ccb85f98ec95797fa98b942cea11"},
+ {file = "rpds_py-0.21.0-cp312-none-win32.whl", hash = "sha256:a58ce66847711c4aa2ecfcfaff04cb0327f907fead8945ffc47d9407f41ff952"},
+ {file = "rpds_py-0.21.0-cp312-none-win_amd64.whl", hash = "sha256:e860f065cc4ea6f256d6f411aba4b1251255366e48e972f8a347cf88077b24fd"},
+ {file = "rpds_py-0.21.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ee4eafd77cc98d355a0d02f263efc0d3ae3ce4a7c24740010a8b4012bbb24937"},
+ {file = "rpds_py-0.21.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:688c93b77e468d72579351a84b95f976bd7b3e84aa6686be6497045ba84be560"},
+ {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c38dbf31c57032667dd5a2f0568ccde66e868e8f78d5a0d27dcc56d70f3fcd3b"},
+ {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2d6129137f43f7fa02d41542ffff4871d4aefa724a5fe38e2c31a4e0fd343fb0"},
+ {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:520ed8b99b0bf86a176271f6fe23024323862ac674b1ce5b02a72bfeff3fff44"},
+ {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaeb25ccfb9b9014a10eaf70904ebf3f79faaa8e60e99e19eef9f478651b9b74"},
+ {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af04ac89c738e0f0f1b913918024c3eab6e3ace989518ea838807177d38a2e94"},
+ {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b9b76e2afd585803c53c5b29e992ecd183f68285b62fe2668383a18e74abe7a3"},
+ {file = "rpds_py-0.21.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5afb5efde74c54724e1a01118c6e5c15e54e642c42a1ba588ab1f03544ac8c7a"},
+ {file = "rpds_py-0.21.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:52c041802a6efa625ea18027a0723676a778869481d16803481ef6cc02ea8cb3"},
+ {file = "rpds_py-0.21.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ee1e4fc267b437bb89990b2f2abf6c25765b89b72dd4a11e21934df449e0c976"},
+ {file = "rpds_py-0.21.0-cp313-none-win32.whl", hash = "sha256:0c025820b78817db6a76413fff6866790786c38f95ea3f3d3c93dbb73b632202"},
+ {file = "rpds_py-0.21.0-cp313-none-win_amd64.whl", hash = "sha256:320c808df533695326610a1b6a0a6e98f033e49de55d7dc36a13c8a30cfa756e"},
+ {file = "rpds_py-0.21.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:2c51d99c30091f72a3c5d126fad26236c3f75716b8b5e5cf8effb18889ced928"},
+ {file = "rpds_py-0.21.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cbd7504a10b0955ea287114f003b7ad62330c9e65ba012c6223dba646f6ffd05"},
+ {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6dcc4949be728ede49e6244eabd04064336012b37f5c2200e8ec8eb2988b209c"},
+ {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f414da5c51bf350e4b7960644617c130140423882305f7574b6cf65a3081cecb"},
+ {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9afe42102b40007f588666bc7de82451e10c6788f6f70984629db193849dced1"},
+ {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b929c2bb6e29ab31f12a1117c39f7e6d6450419ab7464a4ea9b0b417174f044"},
+ {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8404b3717da03cbf773a1d275d01fec84ea007754ed380f63dfc24fb76ce4592"},
+ {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e12bb09678f38b7597b8346983d2323a6482dcd59e423d9448108c1be37cac9d"},
+ {file = "rpds_py-0.21.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:58a0e345be4b18e6b8501d3b0aa540dad90caeed814c515e5206bb2ec26736fd"},
+ {file = "rpds_py-0.21.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:c3761f62fcfccf0864cc4665b6e7c3f0c626f0380b41b8bd1ce322103fa3ef87"},
+ {file = "rpds_py-0.21.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c2b2f71c6ad6c2e4fc9ed9401080badd1469fa9889657ec3abea42a3d6b2e1ed"},
+ {file = "rpds_py-0.21.0-cp39-none-win32.whl", hash = "sha256:b21747f79f360e790525e6f6438c7569ddbfb1b3197b9e65043f25c3c9b489d8"},
+ {file = "rpds_py-0.21.0-cp39-none-win_amd64.whl", hash = "sha256:0626238a43152918f9e72ede9a3b6ccc9e299adc8ade0d67c5e142d564c9a83d"},
+ {file = "rpds_py-0.21.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6b4ef7725386dc0762857097f6b7266a6cdd62bfd209664da6712cb26acef035"},
+ {file = "rpds_py-0.21.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:6bc0e697d4d79ab1aacbf20ee5f0df80359ecf55db33ff41481cf3e24f206919"},
+ {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da52d62a96e61c1c444f3998c434e8b263c384f6d68aca8274d2e08d1906325c"},
+ {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:98e4fe5db40db87ce1c65031463a760ec7906ab230ad2249b4572c2fc3ef1f9f"},
+ {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30bdc973f10d28e0337f71d202ff29345320f8bc49a31c90e6c257e1ccef4333"},
+ {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:faa5e8496c530f9c71f2b4e1c49758b06e5f4055e17144906245c99fa6d45356"},
+ {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32eb88c30b6a4f0605508023b7141d043a79b14acb3b969aa0b4f99b25bc7d4a"},
+ {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a89a8ce9e4e75aeb7fa5d8ad0f3fecdee813802592f4f46a15754dcb2fd6b061"},
+ {file = "rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:241e6c125568493f553c3d0fdbb38c74babf54b45cef86439d4cd97ff8feb34d"},
+ {file = "rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:3b766a9f57663396e4f34f5140b3595b233a7b146e94777b97a8413a1da1be18"},
+ {file = "rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:af4a644bf890f56e41e74be7d34e9511e4954894d544ec6b8efe1e21a1a8da6c"},
+ {file = "rpds_py-0.21.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:3e30a69a706e8ea20444b98a49f386c17b26f860aa9245329bab0851ed100677"},
+ {file = "rpds_py-0.21.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:031819f906bb146561af051c7cef4ba2003d28cff07efacef59da973ff7969ba"},
+ {file = "rpds_py-0.21.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b876f2bc27ab5954e2fd88890c071bd0ed18b9c50f6ec3de3c50a5ece612f7a6"},
+ {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc5695c321e518d9f03b7ea6abb5ea3af4567766f9852ad1560f501b17588c7b"},
+ {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b4de1da871b5c0fd5537b26a6fc6814c3cc05cabe0c941db6e9044ffbb12f04a"},
+ {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:878f6fea96621fda5303a2867887686d7a198d9e0f8a40be100a63f5d60c88c9"},
+ {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8eeec67590e94189f434c6d11c426892e396ae59e4801d17a93ac96b8c02a6c"},
+ {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ff2eba7f6c0cb523d7e9cff0903f2fe1feff8f0b2ceb6bd71c0e20a4dcee271"},
+ {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a429b99337062877d7875e4ff1a51fe788424d522bd64a8c0a20ef3021fdb6ed"},
+ {file = "rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:d167e4dbbdac48bd58893c7e446684ad5d425b407f9336e04ab52e8b9194e2ed"},
+ {file = "rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:4eb2de8a147ffe0626bfdc275fc6563aa7bf4b6db59cf0d44f0ccd6ca625a24e"},
+ {file = "rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e78868e98f34f34a88e23ee9ccaeeec460e4eaf6db16d51d7a9b883e5e785a5e"},
+ {file = "rpds_py-0.21.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4991ca61656e3160cdaca4851151fd3f4a92e9eba5c7a530ab030d6aee96ec89"},
+ {file = "rpds_py-0.21.0.tar.gz", hash = "sha256:ed6378c9d66d0de903763e7706383d60c33829581f0adff47b6535f1802fa6db"},
+]
+
[[package]]
name = "ruff"
version = "0.7.4"
@@ -2146,21 +4383,242 @@ files = [
]
[[package]]
-name = "safehttpx"
-version = "0.1.1"
-description = "A small Python library created to help developers protect their applications from Server Side Request Forgery (SSRF) attacks."
+name = "safetensors"
+version = "0.4.5"
+description = ""
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "safetensors-0.4.5-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a63eaccd22243c67e4f2b1c3e258b257effc4acd78f3b9d397edc8cf8f1298a7"},
+ {file = "safetensors-0.4.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:23fc9b4ec7b602915cbb4ec1a7c1ad96d2743c322f20ab709e2c35d1b66dad27"},
+ {file = "safetensors-0.4.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6885016f34bef80ea1085b7e99b3c1f92cb1be78a49839203060f67b40aee761"},
+ {file = "safetensors-0.4.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:133620f443450429322f238fda74d512c4008621227fccf2f8cf4a76206fea7c"},
+ {file = "safetensors-0.4.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4fb3e0609ec12d2a77e882f07cced530b8262027f64b75d399f1504ffec0ba56"},
+ {file = "safetensors-0.4.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d0f1dd769f064adc33831f5e97ad07babbd728427f98e3e1db6902e369122737"},
+ {file = "safetensors-0.4.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c6d156bdb26732feada84f9388a9f135528c1ef5b05fae153da365ad4319c4c5"},
+ {file = "safetensors-0.4.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9e347d77e2c77eb7624400ccd09bed69d35c0332f417ce8c048d404a096c593b"},
+ {file = "safetensors-0.4.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9f556eea3aec1d3d955403159fe2123ddd68e880f83954ee9b4a3f2e15e716b6"},
+ {file = "safetensors-0.4.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9483f42be3b6bc8ff77dd67302de8ae411c4db39f7224dec66b0eb95822e4163"},
+ {file = "safetensors-0.4.5-cp310-none-win32.whl", hash = "sha256:7389129c03fadd1ccc37fd1ebbc773f2b031483b04700923c3511d2a939252cc"},
+ {file = "safetensors-0.4.5-cp310-none-win_amd64.whl", hash = "sha256:e98ef5524f8b6620c8cdef97220c0b6a5c1cef69852fcd2f174bb96c2bb316b1"},
+ {file = "safetensors-0.4.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:21f848d7aebd5954f92538552d6d75f7c1b4500f51664078b5b49720d180e47c"},
+ {file = "safetensors-0.4.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bb07000b19d41e35eecef9a454f31a8b4718a185293f0d0b1c4b61d6e4487971"},
+ {file = "safetensors-0.4.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09dedf7c2fda934ee68143202acff6e9e8eb0ddeeb4cfc24182bef999efa9f42"},
+ {file = "safetensors-0.4.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:59b77e4b7a708988d84f26de3ebead61ef1659c73dcbc9946c18f3b1786d2688"},
+ {file = "safetensors-0.4.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d3bc83e14d67adc2e9387e511097f254bd1b43c3020440e708858c684cbac68"},
+ {file = "safetensors-0.4.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39371fc551c1072976073ab258c3119395294cf49cdc1f8476794627de3130df"},
+ {file = "safetensors-0.4.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6c19feda32b931cae0acd42748a670bdf56bee6476a046af20181ad3fee4090"},
+ {file = "safetensors-0.4.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a659467495de201e2f282063808a41170448c78bada1e62707b07a27b05e6943"},
+ {file = "safetensors-0.4.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bad5e4b2476949bcd638a89f71b6916fa9a5cae5c1ae7eede337aca2100435c0"},
+ {file = "safetensors-0.4.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a3a315a6d0054bc6889a17f5668a73f94f7fe55121ff59e0a199e3519c08565f"},
+ {file = "safetensors-0.4.5-cp311-none-win32.whl", hash = "sha256:a01e232e6d3d5cf8b1667bc3b657a77bdab73f0743c26c1d3c5dd7ce86bd3a92"},
+ {file = "safetensors-0.4.5-cp311-none-win_amd64.whl", hash = "sha256:cbd39cae1ad3e3ef6f63a6f07296b080c951f24cec60188378e43d3713000c04"},
+ {file = "safetensors-0.4.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:473300314e026bd1043cef391bb16a8689453363381561b8a3e443870937cc1e"},
+ {file = "safetensors-0.4.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:801183a0f76dc647f51a2d9141ad341f9665602a7899a693207a82fb102cc53e"},
+ {file = "safetensors-0.4.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1524b54246e422ad6fb6aea1ac71edeeb77666efa67230e1faf6999df9b2e27f"},
+ {file = "safetensors-0.4.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b3139098e3e8b2ad7afbca96d30ad29157b50c90861084e69fcb80dec7430461"},
+ {file = "safetensors-0.4.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65573dc35be9059770808e276b017256fa30058802c29e1038eb1c00028502ea"},
+ {file = "safetensors-0.4.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fd33da8e9407559f8779c82a0448e2133737f922d71f884da27184549416bfed"},
+ {file = "safetensors-0.4.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3685ce7ed036f916316b567152482b7e959dc754fcc4a8342333d222e05f407c"},
+ {file = "safetensors-0.4.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dde2bf390d25f67908278d6f5d59e46211ef98e44108727084d4637ee70ab4f1"},
+ {file = "safetensors-0.4.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7469d70d3de970b1698d47c11ebbf296a308702cbaae7fcb993944751cf985f4"},
+ {file = "safetensors-0.4.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3a6ba28118636a130ccbb968bc33d4684c48678695dba2590169d5ab03a45646"},
+ {file = "safetensors-0.4.5-cp312-none-win32.whl", hash = "sha256:c859c7ed90b0047f58ee27751c8e56951452ed36a67afee1b0a87847d065eec6"},
+ {file = "safetensors-0.4.5-cp312-none-win_amd64.whl", hash = "sha256:b5a8810ad6a6f933fff6c276eae92c1da217b39b4d8b1bc1c0b8af2d270dc532"},
+ {file = "safetensors-0.4.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:25e5f8e2e92a74f05b4ca55686234c32aac19927903792b30ee6d7bd5653d54e"},
+ {file = "safetensors-0.4.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:81efb124b58af39fcd684254c645e35692fea81c51627259cdf6d67ff4458916"},
+ {file = "safetensors-0.4.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:585f1703a518b437f5103aa9cf70e9bd437cb78eea9c51024329e4fb8a3e3679"},
+ {file = "safetensors-0.4.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4b99fbf72e3faf0b2f5f16e5e3458b93b7d0a83984fe8d5364c60aa169f2da89"},
+ {file = "safetensors-0.4.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b17b299ca9966ca983ecda1c0791a3f07f9ca6ab5ded8ef3d283fff45f6bcd5f"},
+ {file = "safetensors-0.4.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:76ded72f69209c9780fdb23ea89e56d35c54ae6abcdec67ccb22af8e696e449a"},
+ {file = "safetensors-0.4.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2783956926303dcfeb1de91a4d1204cd4089ab441e622e7caee0642281109db3"},
+ {file = "safetensors-0.4.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d94581aab8c6b204def4d7320f07534d6ee34cd4855688004a4354e63b639a35"},
+ {file = "safetensors-0.4.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:67e1e7cb8678bb1b37ac48ec0df04faf689e2f4e9e81e566b5c63d9f23748523"},
+ {file = "safetensors-0.4.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:dbd280b07e6054ea68b0cb4b16ad9703e7d63cd6890f577cb98acc5354780142"},
+ {file = "safetensors-0.4.5-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:77d9b228da8374c7262046a36c1f656ba32a93df6cc51cd4453af932011e77f1"},
+ {file = "safetensors-0.4.5-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:500cac01d50b301ab7bb192353317035011c5ceeef0fca652f9f43c000bb7f8d"},
+ {file = "safetensors-0.4.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:75331c0c746f03158ded32465b7d0b0e24c5a22121743662a2393439c43a45cf"},
+ {file = "safetensors-0.4.5-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:670e95fe34e0d591d0529e5e59fd9d3d72bc77b1444fcaa14dccda4f36b5a38b"},
+ {file = "safetensors-0.4.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:098923e2574ff237c517d6e840acada8e5b311cb1fa226019105ed82e9c3b62f"},
+ {file = "safetensors-0.4.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13ca0902d2648775089fa6a0c8fc9e6390c5f8ee576517d33f9261656f851e3f"},
+ {file = "safetensors-0.4.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f0032bedc869c56f8d26259fe39cd21c5199cd57f2228d817a0e23e8370af25"},
+ {file = "safetensors-0.4.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f4b15f51b4f8f2a512341d9ce3475cacc19c5fdfc5db1f0e19449e75f95c7dc8"},
+ {file = "safetensors-0.4.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f6594d130d0ad933d885c6a7b75c5183cb0e8450f799b80a39eae2b8508955eb"},
+ {file = "safetensors-0.4.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:60c828a27e852ded2c85fc0f87bf1ec20e464c5cd4d56ff0e0711855cc2e17f8"},
+ {file = "safetensors-0.4.5-cp37-none-win32.whl", hash = "sha256:6d3de65718b86c3eeaa8b73a9c3d123f9307a96bbd7be9698e21e76a56443af5"},
+ {file = "safetensors-0.4.5-cp37-none-win_amd64.whl", hash = "sha256:5a2d68a523a4cefd791156a4174189a4114cf0bf9c50ceb89f261600f3b2b81a"},
+ {file = "safetensors-0.4.5-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:e7a97058f96340850da0601a3309f3d29d6191b0702b2da201e54c6e3e44ccf0"},
+ {file = "safetensors-0.4.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:63bfd425e25f5c733f572e2246e08a1c38bd6f2e027d3f7c87e2e43f228d1345"},
+ {file = "safetensors-0.4.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3664ac565d0e809b0b929dae7ccd74e4d3273cd0c6d1220c6430035befb678e"},
+ {file = "safetensors-0.4.5-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:313514b0b9b73ff4ddfb4edd71860696dbe3c1c9dc4d5cc13dbd74da283d2cbf"},
+ {file = "safetensors-0.4.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31fa33ee326f750a2f2134a6174773c281d9a266ccd000bd4686d8021f1f3dac"},
+ {file = "safetensors-0.4.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:09566792588d77b68abe53754c9f1308fadd35c9f87be939e22c623eaacbed6b"},
+ {file = "safetensors-0.4.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309aaec9b66cbf07ad3a2e5cb8a03205663324fea024ba391594423d0f00d9fe"},
+ {file = "safetensors-0.4.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:53946c5813b8f9e26103c5efff4a931cc45d874f45229edd68557ffb35ffb9f8"},
+ {file = "safetensors-0.4.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:868f9df9e99ad1e7f38c52194063a982bc88fedc7d05096f4f8160403aaf4bd6"},
+ {file = "safetensors-0.4.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9cc9449bd0b0bc538bd5e268221f0c5590bc5c14c1934a6ae359d44410dc68c4"},
+ {file = "safetensors-0.4.5-cp38-none-win32.whl", hash = "sha256:83c4f13a9e687335c3928f615cd63a37e3f8ef072a3f2a0599fa09f863fb06a2"},
+ {file = "safetensors-0.4.5-cp38-none-win_amd64.whl", hash = "sha256:b98d40a2ffa560653f6274e15b27b3544e8e3713a44627ce268f419f35c49478"},
+ {file = "safetensors-0.4.5-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:cf727bb1281d66699bef5683b04d98c894a2803442c490a8d45cd365abfbdeb2"},
+ {file = "safetensors-0.4.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:96f1d038c827cdc552d97e71f522e1049fef0542be575421f7684756a748e457"},
+ {file = "safetensors-0.4.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:139fbee92570ecea774e6344fee908907db79646d00b12c535f66bc78bd5ea2c"},
+ {file = "safetensors-0.4.5-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c36302c1c69eebb383775a89645a32b9d266878fab619819ce660309d6176c9b"},
+ {file = "safetensors-0.4.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d641f5b8149ea98deb5ffcf604d764aad1de38a8285f86771ce1abf8e74c4891"},
+ {file = "safetensors-0.4.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b4db6a61d968de73722b858038c616a1bebd4a86abe2688e46ca0cc2d17558f2"},
+ {file = "safetensors-0.4.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b75a616e02f21b6f1d5785b20cecbab5e2bd3f6358a90e8925b813d557666ec1"},
+ {file = "safetensors-0.4.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:788ee7d04cc0e0e7f944c52ff05f52a4415b312f5efd2ee66389fb7685ee030c"},
+ {file = "safetensors-0.4.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:87bc42bd04fd9ca31396d3ca0433db0be1411b6b53ac5a32b7845a85d01ffc2e"},
+ {file = "safetensors-0.4.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4037676c86365a721a8c9510323a51861d703b399b78a6b4486a54a65a975fca"},
+ {file = "safetensors-0.4.5-cp39-none-win32.whl", hash = "sha256:1500418454529d0ed5c1564bda376c4ddff43f30fce9517d9bee7bcce5a8ef50"},
+ {file = "safetensors-0.4.5-cp39-none-win_amd64.whl", hash = "sha256:9d1a94b9d793ed8fe35ab6d5cea28d540a46559bafc6aae98f30ee0867000cab"},
+ {file = "safetensors-0.4.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:fdadf66b5a22ceb645d5435a0be7a0292ce59648ca1d46b352f13cff3ea80410"},
+ {file = "safetensors-0.4.5-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d42ffd4c2259f31832cb17ff866c111684c87bd930892a1ba53fed28370c918c"},
+ {file = "safetensors-0.4.5-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd8a1f6d2063a92cd04145c7fd9e31a1c7d85fbec20113a14b487563fdbc0597"},
+ {file = "safetensors-0.4.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:951d2fcf1817f4fb0ef0b48f6696688a4e852a95922a042b3f96aaa67eedc920"},
+ {file = "safetensors-0.4.5-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6ac85d9a8c1af0e3132371d9f2d134695a06a96993c2e2f0bbe25debb9e3f67a"},
+ {file = "safetensors-0.4.5-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:e3cec4a29eb7fe8da0b1c7988bc3828183080439dd559f720414450de076fcab"},
+ {file = "safetensors-0.4.5-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:21742b391b859e67b26c0b2ac37f52c9c0944a879a25ad2f9f9f3cd61e7fda8f"},
+ {file = "safetensors-0.4.5-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c7db3006a4915151ce1913652e907cdede299b974641a83fbc092102ac41b644"},
+ {file = "safetensors-0.4.5-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f68bf99ea970960a237f416ea394e266e0361895753df06e3e06e6ea7907d98b"},
+ {file = "safetensors-0.4.5-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8158938cf3324172df024da511839d373c40fbfaa83e9abf467174b2910d7b4c"},
+ {file = "safetensors-0.4.5-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:540ce6c4bf6b58cb0fd93fa5f143bc0ee341c93bb4f9287ccd92cf898cc1b0dd"},
+ {file = "safetensors-0.4.5-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:bfeaa1a699c6b9ed514bd15e6a91e74738b71125a9292159e3d6b7f0a53d2cde"},
+ {file = "safetensors-0.4.5-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:01c8f00da537af711979e1b42a69a8ec9e1d7112f208e0e9b8a35d2c381085ef"},
+ {file = "safetensors-0.4.5-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a0dd565f83b30f2ca79b5d35748d0d99dd4b3454f80e03dfb41f0038e3bdf180"},
+ {file = "safetensors-0.4.5-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:023b6e5facda76989f4cba95a861b7e656b87e225f61811065d5c501f78cdb3f"},
+ {file = "safetensors-0.4.5-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9633b663393d5796f0b60249549371e392b75a0b955c07e9c6f8708a87fc841f"},
+ {file = "safetensors-0.4.5-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78dd8adfb48716233c45f676d6e48534d34b4bceb50162c13d1f0bdf6f78590a"},
+ {file = "safetensors-0.4.5-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8e8deb16c4321d61ae72533b8451ec4a9af8656d1c61ff81aa49f966406e4b68"},
+ {file = "safetensors-0.4.5-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:52452fa5999dc50c4decaf0c53aa28371f7f1e0fe5c2dd9129059fbe1e1599c7"},
+ {file = "safetensors-0.4.5-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:d5f23198821e227cfc52d50fa989813513db381255c6d100927b012f0cfec63d"},
+ {file = "safetensors-0.4.5-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f4beb84b6073b1247a773141a6331117e35d07134b3bb0383003f39971d414bb"},
+ {file = "safetensors-0.4.5-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:68814d599d25ed2fdd045ed54d370d1d03cf35e02dce56de44c651f828fb9b7b"},
+ {file = "safetensors-0.4.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0b6453c54c57c1781292c46593f8a37254b8b99004c68d6c3ce229688931a22"},
+ {file = "safetensors-0.4.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:adaa9c6dead67e2dd90d634f89131e43162012479d86e25618e821a03d1eb1dc"},
+ {file = "safetensors-0.4.5-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:73e7d408e9012cd17511b382b43547850969c7979efc2bc353f317abaf23c84c"},
+ {file = "safetensors-0.4.5-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:775409ce0fcc58b10773fdb4221ed1eb007de10fe7adbdf8f5e8a56096b6f0bc"},
+ {file = "safetensors-0.4.5-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:834001bed193e4440c4a3950a31059523ee5090605c907c66808664c932b549c"},
+ {file = "safetensors-0.4.5.tar.gz", hash = "sha256:d73de19682deabb02524b3d5d1f8b3aaba94c72f1bbfc7911b9b9d5d391c0310"},
+]
+
+[package.extras]
+all = ["safetensors[jax]", "safetensors[numpy]", "safetensors[paddlepaddle]", "safetensors[pinned-tf]", "safetensors[quality]", "safetensors[testing]", "safetensors[torch]"]
+dev = ["safetensors[all]"]
+jax = ["flax (>=0.6.3)", "jax (>=0.3.25)", "jaxlib (>=0.3.25)", "safetensors[numpy]"]
+mlx = ["mlx (>=0.0.9)"]
+numpy = ["numpy (>=1.21.6)"]
+paddlepaddle = ["paddlepaddle (>=2.4.1)", "safetensors[numpy]"]
+pinned-tf = ["safetensors[numpy]", "tensorflow (==2.11.0)"]
+quality = ["black (==22.3)", "click (==8.0.4)", "flake8 (>=3.8.3)", "isort (>=5.5.4)"]
+tensorflow = ["safetensors[numpy]", "tensorflow (>=2.11.0)"]
+testing = ["h5py (>=3.7.0)", "huggingface-hub (>=0.12.1)", "hypothesis (>=6.70.2)", "pytest (>=7.2.0)", "pytest-benchmark (>=4.0.0)", "safetensors[numpy]", "setuptools-rust (>=1.5.2)"]
+torch = ["safetensors[numpy]", "torch (>=1.10)"]
+
+[[package]]
+name = "scikit-learn"
+version = "1.5.2"
+description = "A set of python modules for machine learning and data mining"
optional = false
python-versions = ">=3.9"
files = [
- {file = "safehttpx-0.1.1-py3-none-any.whl", hash = "sha256:1d93b64023c00d5c53ea70ea36e773b8a0dba5eaf1a1eb188856584a0a4cf4d1"},
- {file = "safehttpx-0.1.1.tar.gz", hash = "sha256:6e1bedf7767213300da5e4cb7e823e98edc934f17ca192d2e585111a2b899149"},
+ {file = "scikit_learn-1.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:299406827fb9a4f862626d0fe6c122f5f87f8910b86fe5daa4c32dcd742139b6"},
+ {file = "scikit_learn-1.5.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:2d4cad1119c77930b235579ad0dc25e65c917e756fe80cab96aa3b9428bd3fb0"},
+ {file = "scikit_learn-1.5.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c412ccc2ad9bf3755915e3908e677b367ebc8d010acbb3f182814524f2e5540"},
+ {file = "scikit_learn-1.5.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a686885a4b3818d9e62904d91b57fa757fc2bed3e465c8b177be652f4dd37c8"},
+ {file = "scikit_learn-1.5.2-cp310-cp310-win_amd64.whl", hash = "sha256:c15b1ca23d7c5f33cc2cb0a0d6aaacf893792271cddff0edbd6a40e8319bc113"},
+ {file = "scikit_learn-1.5.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:03b6158efa3faaf1feea3faa884c840ebd61b6484167c711548fce208ea09445"},
+ {file = "scikit_learn-1.5.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:1ff45e26928d3b4eb767a8f14a9a6efbf1cbff7c05d1fb0f95f211a89fd4f5de"},
+ {file = "scikit_learn-1.5.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f763897fe92d0e903aa4847b0aec0e68cadfff77e8a0687cabd946c89d17e675"},
+ {file = "scikit_learn-1.5.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8b0ccd4a902836493e026c03256e8b206656f91fbcc4fde28c57a5b752561f1"},
+ {file = "scikit_learn-1.5.2-cp311-cp311-win_amd64.whl", hash = "sha256:6c16d84a0d45e4894832b3c4d0bf73050939e21b99b01b6fd59cbb0cf39163b6"},
+ {file = "scikit_learn-1.5.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f932a02c3f4956dfb981391ab24bda1dbd90fe3d628e4b42caef3e041c67707a"},
+ {file = "scikit_learn-1.5.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:3b923d119d65b7bd555c73be5423bf06c0105678ce7e1f558cb4b40b0a5502b1"},
+ {file = "scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f60021ec1574e56632be2a36b946f8143bf4e5e6af4a06d85281adc22938e0dd"},
+ {file = "scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:394397841449853c2290a32050382edaec3da89e35b3e03d6cc966aebc6a8ae6"},
+ {file = "scikit_learn-1.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:57cc1786cfd6bd118220a92ede80270132aa353647684efa385a74244a41e3b1"},
+ {file = "scikit_learn-1.5.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9a702e2de732bbb20d3bad29ebd77fc05a6b427dc49964300340e4c9328b3f5"},
+ {file = "scikit_learn-1.5.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:b0768ad641981f5d3a198430a1d31c3e044ed2e8a6f22166b4d546a5116d7908"},
+ {file = "scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:178ddd0a5cb0044464fc1bfc4cca5b1833bfc7bb022d70b05db8530da4bb3dd3"},
+ {file = "scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7284ade780084d94505632241bf78c44ab3b6f1e8ccab3d2af58e0e950f9c12"},
+ {file = "scikit_learn-1.5.2-cp313-cp313-win_amd64.whl", hash = "sha256:b7b0f9a0b1040830d38c39b91b3a44e1b643f4b36e36567b80b7c6bd2202a27f"},
+ {file = "scikit_learn-1.5.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:757c7d514ddb00ae249832fe87100d9c73c6ea91423802872d9e74970a0e40b9"},
+ {file = "scikit_learn-1.5.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:52788f48b5d8bca5c0736c175fa6bdaab2ef00a8f536cda698db61bd89c551c1"},
+ {file = "scikit_learn-1.5.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:643964678f4b5fbdc95cbf8aec638acc7aa70f5f79ee2cdad1eec3df4ba6ead8"},
+ {file = "scikit_learn-1.5.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca64b3089a6d9b9363cd3546f8978229dcbb737aceb2c12144ee3f70f95684b7"},
+ {file = "scikit_learn-1.5.2-cp39-cp39-win_amd64.whl", hash = "sha256:3bed4909ba187aca80580fe2ef370d9180dcf18e621a27c4cf2ef10d279a7efe"},
+ {file = "scikit_learn-1.5.2.tar.gz", hash = "sha256:b4237ed7b3fdd0a4882792e68ef2545d5baa50aca3bb45aa7df468138ad8f94d"},
]
[package.dependencies]
-httpx = "*"
+joblib = ">=1.2.0"
+numpy = ">=1.19.5"
+scipy = ">=1.6.0"
+threadpoolctl = ">=3.1.0"
[package.extras]
-dev = ["pytest"]
+benchmark = ["matplotlib (>=3.3.4)", "memory_profiler (>=0.57.0)", "pandas (>=1.1.5)"]
+build = ["cython (>=3.0.10)", "meson-python (>=0.16.0)", "numpy (>=1.19.5)", "scipy (>=1.6.0)"]
+docs = ["Pillow (>=7.1.2)", "matplotlib (>=3.3.4)", "memory_profiler (>=0.57.0)", "numpydoc (>=1.2.0)", "pandas (>=1.1.5)", "plotly (>=5.14.0)", "polars (>=0.20.30)", "pooch (>=1.6.0)", "pydata-sphinx-theme (>=0.15.3)", "scikit-image (>=0.17.2)", "seaborn (>=0.9.0)", "sphinx (>=7.3.7)", "sphinx-copybutton (>=0.5.2)", "sphinx-design (>=0.5.0)", "sphinx-design (>=0.6.0)", "sphinx-gallery (>=0.16.0)", "sphinx-prompt (>=1.4.0)", "sphinx-remove-toctrees (>=1.0.0.post1)", "sphinxcontrib-sass (>=0.3.4)", "sphinxext-opengraph (>=0.9.1)"]
+examples = ["matplotlib (>=3.3.4)", "pandas (>=1.1.5)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.17.2)", "seaborn (>=0.9.0)"]
+install = ["joblib (>=1.2.0)", "numpy (>=1.19.5)", "scipy (>=1.6.0)", "threadpoolctl (>=3.1.0)"]
+maintenance = ["conda-lock (==2.5.6)"]
+tests = ["black (>=24.3.0)", "matplotlib (>=3.3.4)", "mypy (>=1.9)", "numpydoc (>=1.2.0)", "pandas (>=1.1.5)", "polars (>=0.20.30)", "pooch (>=1.6.0)", "pyamg (>=4.0.0)", "pyarrow (>=12.0.0)", "pytest (>=7.1.2)", "pytest-cov (>=2.9.0)", "ruff (>=0.2.1)", "scikit-image (>=0.17.2)"]
+
+[[package]]
+name = "scipy"
+version = "1.11.1"
+description = "Fundamental algorithms for scientific computing in Python"
+optional = false
+python-versions = "<3.13,>=3.9"
+files = [
+ {file = "scipy-1.11.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:aec8c62fbe52914f9cf28d846cf0401dd80ab80788bbab909434eb336ed07c04"},
+ {file = "scipy-1.11.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:3b9963798df1d8a52db41a6fc0e6fa65b1c60e85d73da27ae8bb754de4792481"},
+ {file = "scipy-1.11.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e8eb42db36526b130dfbc417609498a6192381abc1975b91e3eb238e0b41c1a"},
+ {file = "scipy-1.11.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:366a6a937110d80dca4f63b3f5b00cc89d36f678b2d124a01067b154e692bab1"},
+ {file = "scipy-1.11.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:08d957ca82d3535b3b9ba6c8ff355d78fe975271874e2af267cb5add5bd78625"},
+ {file = "scipy-1.11.1-cp310-cp310-win_amd64.whl", hash = "sha256:e866514bc2d660608447b6ba95c8900d591f2865c07cca0aa4f7ff3c4ca70f30"},
+ {file = "scipy-1.11.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ba94eeef3c9caa4cea7b402a35bb02a5714ee1ee77eb98aca1eed4543beb0f4c"},
+ {file = "scipy-1.11.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:512fdc18c65f76dadaca139348e525646d440220d8d05f6d21965b8d4466bccd"},
+ {file = "scipy-1.11.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cce154372f0ebe88556ed06d7b196e9c2e0c13080ecb58d0f35062dc7cc28b47"},
+ {file = "scipy-1.11.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4bb943010203465ac81efa392e4645265077b4d9e99b66cf3ed33ae12254173"},
+ {file = "scipy-1.11.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:249cfa465c379c9bb2c20123001e151ff5e29b351cbb7f9c91587260602c58d0"},
+ {file = "scipy-1.11.1-cp311-cp311-win_amd64.whl", hash = "sha256:ffb28e3fa31b9c376d0fb1f74c1f13911c8c154a760312fbee87a21eb21efe31"},
+ {file = "scipy-1.11.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:39154437654260a52871dfde852adf1b93b1d1bc5dc0ffa70068f16ec0be2624"},
+ {file = "scipy-1.11.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:b588311875c58d1acd4ef17c983b9f1ab5391755a47c3d70b6bd503a45bfaf71"},
+ {file = "scipy-1.11.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d51565560565a0307ed06fa0ec4c6f21ff094947d4844d6068ed04400c72d0c3"},
+ {file = "scipy-1.11.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b41a0f322b4eb51b078cb3441e950ad661ede490c3aca66edef66f4b37ab1877"},
+ {file = "scipy-1.11.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:396fae3f8c12ad14c5f3eb40499fd06a6fef8393a6baa352a652ecd51e74e029"},
+ {file = "scipy-1.11.1-cp39-cp39-win_amd64.whl", hash = "sha256:be8c962a821957fdde8c4044efdab7a140c13294997a407eaee777acf63cbf0c"},
+ {file = "scipy-1.11.1.tar.gz", hash = "sha256:fb5b492fa035334fd249f0973cc79ecad8b09c604b42a127a677b45a9a3d4289"},
+]
+
+[package.dependencies]
+numpy = ">=1.21.6,<1.28.0"
+
+[package.extras]
+dev = ["click", "cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"]
+doc = ["jupytext", "matplotlib (>2)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"]
+test = ["asv", "gmpy2", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"]
+
+[[package]]
+name = "segments"
+version = "2.2.1"
+description = ""
+optional = false
+python-versions = "*"
+files = [
+ {file = "segments-2.2.1-py2.py3-none-any.whl", hash = "sha256:069860ae5a499ad7bd86e23ee52250a16e61ba3474c17e515b16d494ac1423c1"},
+ {file = "segments-2.2.1.tar.gz", hash = "sha256:515ae188f21d24e420d48ad45689edc747d961d6b52fde22e47500a8d85f2741"},
+]
+
+[package.dependencies]
+clldutils = ">=1.7.3"
+csvw = ">=1.5.6"
+regex = "*"
+
+[package.extras]
+dev = ["flake8", "twine", "wheel"]
+test = ["pytest (>=5)", "pytest-cov", "pytest-mock"]
[[package]]
name = "semantic-version"
@@ -2177,6 +4635,26 @@ files = [
dev = ["Django (>=1.11)", "check-manifest", "colorama (<=0.4.1)", "coverage", "flake8", "nose2", "readme-renderer (<25.0)", "tox", "wheel", "zest.releaser[recommended]"]
doc = ["Sphinx", "sphinx-rtd-theme"]
+[[package]]
+name = "setuptools"
+version = "75.6.0"
+description = "Easily download, build, install, upgrade, and uninstall Python packages"
+optional = false
+python-versions = ">=3.9"
+files = [
+ {file = "setuptools-75.6.0-py3-none-any.whl", hash = "sha256:ce74b49e8f7110f9bf04883b730f4765b774ef3ef28f722cce7c273d253aaf7d"},
+ {file = "setuptools-75.6.0.tar.gz", hash = "sha256:8199222558df7c86216af4f84c30e9b34a61d8ba19366cc914424cdbd28252f6"},
+]
+
+[package.extras]
+check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.7.0)"]
+core = ["importlib_metadata (>=6)", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"]
+cover = ["pytest-cov"]
+doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"]
+enabler = ["pytest-enabler (>=2.2)"]
+test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"]
+type = ["importlib_metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (>=1.12,<1.14)", "pytest-mypy"]
+
[[package]]
name = "shellingham"
version = "1.5.4"
@@ -2210,6 +4688,40 @@ files = [
{file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"},
]
+[[package]]
+name = "soundfile"
+version = "0.12.1"
+description = "An audio library based on libsndfile, CFFI and NumPy"
+optional = false
+python-versions = "*"
+files = [
+ {file = "soundfile-0.12.1-py2.py3-none-any.whl", hash = "sha256:828a79c2e75abab5359f780c81dccd4953c45a2c4cd4f05ba3e233ddf984b882"},
+ {file = "soundfile-0.12.1-py2.py3-none-macosx_10_9_x86_64.whl", hash = "sha256:d922be1563ce17a69582a352a86f28ed8c9f6a8bc951df63476ffc310c064bfa"},
+ {file = "soundfile-0.12.1-py2.py3-none-macosx_11_0_arm64.whl", hash = "sha256:bceaab5c4febb11ea0554566784bcf4bc2e3977b53946dda2b12804b4fe524a8"},
+ {file = "soundfile-0.12.1-py2.py3-none-manylinux_2_17_x86_64.whl", hash = "sha256:2dc3685bed7187c072a46ab4ffddd38cef7de9ae5eb05c03df2ad569cf4dacbc"},
+ {file = "soundfile-0.12.1-py2.py3-none-manylinux_2_31_x86_64.whl", hash = "sha256:074247b771a181859d2bc1f98b5ebf6d5153d2c397b86ee9e29ba602a8dfe2a6"},
+ {file = "soundfile-0.12.1-py2.py3-none-win32.whl", hash = "sha256:59dfd88c79b48f441bbf6994142a19ab1de3b9bb7c12863402c2bc621e49091a"},
+ {file = "soundfile-0.12.1-py2.py3-none-win_amd64.whl", hash = "sha256:0d86924c00b62552b650ddd28af426e3ff2d4dc2e9047dae5b3d8452e0a49a77"},
+ {file = "soundfile-0.12.1.tar.gz", hash = "sha256:e8e1017b2cf1dda767aef19d2fd9ee5ebe07e050d430f77a0a7c66ba08b8cdae"},
+]
+
+[package.dependencies]
+cffi = ">=1.0"
+
+[package.extras]
+numpy = ["numpy"]
+
+[[package]]
+name = "soupsieve"
+version = "2.6"
+description = "A modern CSS selector implementation for Beautiful Soup."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "soupsieve-2.6-py3-none-any.whl", hash = "sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9"},
+ {file = "soupsieve-2.6.tar.gz", hash = "sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb"},
+]
+
[[package]]
name = "stack-data"
version = "0.6.3"
@@ -2231,13 +4743,13 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"]
[[package]]
name = "starlette"
-version = "0.41.3"
+version = "0.38.6"
description = "The little ASGI library that shines."
optional = false
python-versions = ">=3.8"
files = [
- {file = "starlette-0.41.3-py3-none-any.whl", hash = "sha256:44cedb2b7c77a9de33a8b74b2b90e9f50d11fcf25d8270ea525ad71a25374ff7"},
- {file = "starlette-0.41.3.tar.gz", hash = "sha256:0e4ab3d16522a255be6b28260b938eae2482f98ce5cc934cb08dce8dc3ba5835"},
+ {file = "starlette-0.38.6-py3-none-any.whl", hash = "sha256:4517a1409e2e73ee4951214ba012052b9e16f60e90d73cfb06192c19203bbb05"},
+ {file = "starlette-0.38.6.tar.gz", hash = "sha256:863a1588f5574e70a821dadefb41e4881ea451a47a3cd1b4df359d4ffefe5ead"},
]
[package.dependencies]
@@ -2246,6 +4758,257 @@ anyio = ">=3.4.0,<5"
[package.extras]
full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.7)", "pyyaml"]
+[[package]]
+name = "stftpitchshift"
+version = "2.0"
+description = "STFT based pitch and timbre shifting"
+optional = false
+python-versions = ">=3"
+files = [
+ {file = "stftpitchshift-2.0-py3-none-any.whl", hash = "sha256:4629694a19669012e8176ce6f16d79cecec05181406230bba08d6f4bf732ac22"},
+ {file = "stftpitchshift-2.0.tar.gz", hash = "sha256:c0ca22434bd05e9c1c3ec11273b52c0761c68e4d03a1e642a4a2dd9cdb8ac96d"},
+]
+
+[package.dependencies]
+click = "*"
+matplotlib = "*"
+numpy = ">=1.20.0"
+
+[[package]]
+name = "sympy"
+version = "1.13.3"
+description = "Computer algebra system (CAS) in Python"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "sympy-1.13.3-py3-none-any.whl", hash = "sha256:54612cf55a62755ee71824ce692986f23c88ffa77207b30c1368eda4a7060f73"},
+ {file = "sympy-1.13.3.tar.gz", hash = "sha256:b27fd2c6530e0ab39e275fc9b683895367e51d5da91baa8d3d64db2565fec4d9"},
+]
+
+[package.dependencies]
+mpmath = ">=1.1.0,<1.4"
+
+[package.extras]
+dev = ["hypothesis (>=6.70.0)", "pytest (>=7.1.0)"]
+
+[[package]]
+name = "tabulate"
+version = "0.9.0"
+description = "Pretty-print tabular data"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"},
+ {file = "tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c"},
+]
+
+[package.extras]
+widechars = ["wcwidth"]
+
+[[package]]
+name = "tbb"
+version = "2021.13.1"
+description = "Intel® oneAPI Threading Building Blocks (oneTBB)"
+optional = false
+python-versions = "*"
+files = [
+ {file = "tbb-2021.13.1-py2.py3-none-manylinux1_i686.whl", hash = "sha256:bb5bdea0c0e9e6ad0739e7a8796c2635ce9eccca86dd48c426cd8027ac70fb1d"},
+ {file = "tbb-2021.13.1-py2.py3-none-manylinux1_x86_64.whl", hash = "sha256:d916359dc685579d09e4b344241550afc1cc034f7f5ec7234c258b6680912d70"},
+ {file = "tbb-2021.13.1-py3-none-win32.whl", hash = "sha256:00f5e5a70051650ddd0ab6247c0549521968339ec21002e475cd23b1cbf46d66"},
+ {file = "tbb-2021.13.1-py3-none-win_amd64.whl", hash = "sha256:cbf024b2463fdab3ebe3fa6ff453026358e6b903839c80d647e08ad6d0796ee9"},
+]
+
+[[package]]
+name = "tensorboard"
+version = "2.18.0"
+description = "TensorBoard lets you watch Tensors Flow"
+optional = false
+python-versions = ">=3.9"
+files = [
+ {file = "tensorboard-2.18.0-py3-none-any.whl", hash = "sha256:107ca4821745f73e2aefa02c50ff70a9b694f39f790b11e6f682f7d326745eab"},
+]
+
+[package.dependencies]
+absl-py = ">=0.4"
+grpcio = ">=1.48.2"
+markdown = ">=2.6.8"
+numpy = ">=1.12.0"
+packaging = "*"
+protobuf = ">=3.19.6,<4.24.0 || >4.24.0"
+setuptools = ">=41.0.0"
+six = ">1.9"
+tensorboard-data-server = ">=0.7.0,<0.8.0"
+werkzeug = ">=1.0.1"
+
+[[package]]
+name = "tensorboard-data-server"
+version = "0.7.2"
+description = "Fast data loading for TensorBoard"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "tensorboard_data_server-0.7.2-py3-none-any.whl", hash = "sha256:7e0610d205889588983836ec05dc098e80f97b7e7bbff7e994ebb78f578d0ddb"},
+ {file = "tensorboard_data_server-0.7.2-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:9fe5d24221b29625dbc7328b0436ca7fc1c23de4acf4d272f1180856e32f9f60"},
+ {file = "tensorboard_data_server-0.7.2-py3-none-manylinux_2_31_x86_64.whl", hash = "sha256:ef687163c24185ae9754ed5650eb5bc4d84ff257aabdc33f0cc6f74d8ba54530"},
+]
+
+[[package]]
+name = "threadpoolctl"
+version = "3.5.0"
+description = "threadpoolctl"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "threadpoolctl-3.5.0-py3-none-any.whl", hash = "sha256:56c1e26c150397e58c4926da8eeee87533b1e32bef131bd4bf6a2f45f3185467"},
+ {file = "threadpoolctl-3.5.0.tar.gz", hash = "sha256:082433502dd922bf738de0d8bcc4fdcbf0979ff44c42bd40f5af8a282f6fa107"},
+]
+
+[[package]]
+name = "timm"
+version = "1.0.11"
+description = "PyTorch Image Models"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "timm-1.0.11-py3-none-any.whl", hash = "sha256:52a6f895e2cbec35a87d0846870419c2c0aa40de9b205bcda917f38278bf3044"},
+ {file = "timm-1.0.11.tar.gz", hash = "sha256:a005f72b87e67ed30cdbf405a9ffd4e723360c780a43b1cefe266af8ecc9d151"},
+]
+
+[package.dependencies]
+huggingface_hub = "*"
+pyyaml = "*"
+safetensors = "*"
+torch = "*"
+torchvision = "*"
+
+[[package]]
+name = "tokenizers"
+version = "0.19.1"
+description = ""
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "tokenizers-0.19.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:952078130b3d101e05ecfc7fc3640282d74ed26bcf691400f872563fca15ac97"},
+ {file = "tokenizers-0.19.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:82c8b8063de6c0468f08e82c4e198763e7b97aabfe573fd4cf7b33930ca4df77"},
+ {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f03727225feaf340ceeb7e00604825addef622d551cbd46b7b775ac834c1e1c4"},
+ {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:453e4422efdfc9c6b6bf2eae00d5e323f263fff62b29a8c9cd526c5003f3f642"},
+ {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:02e81bf089ebf0e7f4df34fa0207519f07e66d8491d963618252f2e0729e0b46"},
+ {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b07c538ba956843833fee1190cf769c60dc62e1cf934ed50d77d5502194d63b1"},
+ {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e28cab1582e0eec38b1f38c1c1fb2e56bce5dc180acb1724574fc5f47da2a4fe"},
+ {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b01afb7193d47439f091cd8f070a1ced347ad0f9144952a30a41836902fe09e"},
+ {file = "tokenizers-0.19.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7fb297edec6c6841ab2e4e8f357209519188e4a59b557ea4fafcf4691d1b4c98"},
+ {file = "tokenizers-0.19.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2e8a3dd055e515df7054378dc9d6fa8c8c34e1f32777fb9a01fea81496b3f9d3"},
+ {file = "tokenizers-0.19.1-cp310-none-win32.whl", hash = "sha256:7ff898780a155ea053f5d934925f3902be2ed1f4d916461e1a93019cc7250837"},
+ {file = "tokenizers-0.19.1-cp310-none-win_amd64.whl", hash = "sha256:bea6f9947e9419c2fda21ae6c32871e3d398cba549b93f4a65a2d369662d9403"},
+ {file = "tokenizers-0.19.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5c88d1481f1882c2e53e6bb06491e474e420d9ac7bdff172610c4f9ad3898059"},
+ {file = "tokenizers-0.19.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ddf672ed719b4ed82b51499100f5417d7d9f6fb05a65e232249268f35de5ed14"},
+ {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:dadc509cc8a9fe460bd274c0e16ac4184d0958117cf026e0ea8b32b438171594"},
+ {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfedf31824ca4915b511b03441784ff640378191918264268e6923da48104acc"},
+ {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac11016d0a04aa6487b1513a3a36e7bee7eec0e5d30057c9c0408067345c48d2"},
+ {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76951121890fea8330d3a0df9a954b3f2a37e3ec20e5b0530e9a0044ca2e11fe"},
+ {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b342d2ce8fc8d00f376af068e3274e2e8649562e3bc6ae4a67784ded6b99428d"},
+ {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d16ff18907f4909dca9b076b9c2d899114dd6abceeb074eca0c93e2353f943aa"},
+ {file = "tokenizers-0.19.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:706a37cc5332f85f26efbe2bdc9ef8a9b372b77e4645331a405073e4b3a8c1c6"},
+ {file = "tokenizers-0.19.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:16baac68651701364b0289979ecec728546133e8e8fe38f66fe48ad07996b88b"},
+ {file = "tokenizers-0.19.1-cp311-none-win32.whl", hash = "sha256:9ed240c56b4403e22b9584ee37d87b8bfa14865134e3e1c3fb4b2c42fafd3256"},
+ {file = "tokenizers-0.19.1-cp311-none-win_amd64.whl", hash = "sha256:ad57d59341710b94a7d9dbea13f5c1e7d76fd8d9bcd944a7a6ab0b0da6e0cc66"},
+ {file = "tokenizers-0.19.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:621d670e1b1c281a1c9698ed89451395d318802ff88d1fc1accff0867a06f153"},
+ {file = "tokenizers-0.19.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d924204a3dbe50b75630bd16f821ebda6a5f729928df30f582fb5aade90c818a"},
+ {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4f3fefdc0446b1a1e6d81cd4c07088ac015665d2e812f6dbba4a06267d1a2c95"},
+ {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9620b78e0b2d52ef07b0d428323fb34e8ea1219c5eac98c2596311f20f1f9266"},
+ {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:04ce49e82d100594715ac1b2ce87d1a36e61891a91de774755f743babcd0dd52"},
+ {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5c2ff13d157afe413bf7e25789879dd463e5a4abfb529a2d8f8473d8042e28f"},
+ {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3174c76efd9d08f836bfccaca7cfec3f4d1c0a4cf3acbc7236ad577cc423c840"},
+ {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c9d5b6c0e7a1e979bec10ff960fae925e947aab95619a6fdb4c1d8ff3708ce3"},
+ {file = "tokenizers-0.19.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a179856d1caee06577220ebcfa332af046d576fb73454b8f4d4b0ba8324423ea"},
+ {file = "tokenizers-0.19.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:952b80dac1a6492170f8c2429bd11fcaa14377e097d12a1dbe0ef2fb2241e16c"},
+ {file = "tokenizers-0.19.1-cp312-none-win32.whl", hash = "sha256:01d62812454c188306755c94755465505836fd616f75067abcae529c35edeb57"},
+ {file = "tokenizers-0.19.1-cp312-none-win_amd64.whl", hash = "sha256:b70bfbe3a82d3e3fb2a5e9b22a39f8d1740c96c68b6ace0086b39074f08ab89a"},
+ {file = "tokenizers-0.19.1-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:bb9dfe7dae85bc6119d705a76dc068c062b8b575abe3595e3c6276480e67e3f1"},
+ {file = "tokenizers-0.19.1-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:1f0360cbea28ea99944ac089c00de7b2e3e1c58f479fb8613b6d8d511ce98267"},
+ {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:71e3ec71f0e78780851fef28c2a9babe20270404c921b756d7c532d280349214"},
+ {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b82931fa619dbad979c0ee8e54dd5278acc418209cc897e42fac041f5366d626"},
+ {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e8ff5b90eabdcdaa19af697885f70fe0b714ce16709cf43d4952f1f85299e73a"},
+ {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e742d76ad84acbdb1a8e4694f915fe59ff6edc381c97d6dfdd054954e3478ad4"},
+ {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d8c5d59d7b59885eab559d5bc082b2985555a54cda04dda4c65528d90ad252ad"},
+ {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b2da5c32ed869bebd990c9420df49813709e953674c0722ff471a116d97b22d"},
+ {file = "tokenizers-0.19.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:638e43936cc8b2cbb9f9d8dde0fe5e7e30766a3318d2342999ae27f68fdc9bd6"},
+ {file = "tokenizers-0.19.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:78e769eb3b2c79687d9cb0f89ef77223e8e279b75c0a968e637ca7043a84463f"},
+ {file = "tokenizers-0.19.1-cp37-none-win32.whl", hash = "sha256:72791f9bb1ca78e3ae525d4782e85272c63faaef9940d92142aa3eb79f3407a3"},
+ {file = "tokenizers-0.19.1-cp37-none-win_amd64.whl", hash = "sha256:f3bbb7a0c5fcb692950b041ae11067ac54826204318922da754f908d95619fbc"},
+ {file = "tokenizers-0.19.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:07f9295349bbbcedae8cefdbcfa7f686aa420be8aca5d4f7d1ae6016c128c0c5"},
+ {file = "tokenizers-0.19.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:10a707cc6c4b6b183ec5dbfc5c34f3064e18cf62b4a938cb41699e33a99e03c1"},
+ {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6309271f57b397aa0aff0cbbe632ca9d70430839ca3178bf0f06f825924eca22"},
+ {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ad23d37d68cf00d54af184586d79b84075ada495e7c5c0f601f051b162112dc"},
+ {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:427c4f0f3df9109314d4f75b8d1f65d9477033e67ffaec4bca53293d3aca286d"},
+ {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e83a31c9cf181a0a3ef0abad2b5f6b43399faf5da7e696196ddd110d332519ee"},
+ {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c27b99889bd58b7e301468c0838c5ed75e60c66df0d4db80c08f43462f82e0d3"},
+ {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bac0b0eb952412b0b196ca7a40e7dce4ed6f6926489313414010f2e6b9ec2adf"},
+ {file = "tokenizers-0.19.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8a6298bde623725ca31c9035a04bf2ef63208d266acd2bed8c2cb7d2b7d53ce6"},
+ {file = "tokenizers-0.19.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:08a44864e42fa6d7d76d7be4bec62c9982f6f6248b4aa42f7302aa01e0abfd26"},
+ {file = "tokenizers-0.19.1-cp38-none-win32.whl", hash = "sha256:1de5bc8652252d9357a666e609cb1453d4f8e160eb1fb2830ee369dd658e8975"},
+ {file = "tokenizers-0.19.1-cp38-none-win_amd64.whl", hash = "sha256:0bcce02bf1ad9882345b34d5bd25ed4949a480cf0e656bbd468f4d8986f7a3f1"},
+ {file = "tokenizers-0.19.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:0b9394bd204842a2a1fd37fe29935353742be4a3460b6ccbaefa93f58a8df43d"},
+ {file = "tokenizers-0.19.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4692ab92f91b87769d950ca14dbb61f8a9ef36a62f94bad6c82cc84a51f76f6a"},
+ {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6258c2ef6f06259f70a682491c78561d492e885adeaf9f64f5389f78aa49a051"},
+ {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c85cf76561fbd01e0d9ea2d1cbe711a65400092bc52b5242b16cfd22e51f0c58"},
+ {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:670b802d4d82bbbb832ddb0d41df7015b3e549714c0e77f9bed3e74d42400fbe"},
+ {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:85aa3ab4b03d5e99fdd31660872249df5e855334b6c333e0bc13032ff4469c4a"},
+ {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cbf001afbbed111a79ca47d75941e9e5361297a87d186cbfc11ed45e30b5daba"},
+ {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4c89aa46c269e4e70c4d4f9d6bc644fcc39bb409cb2a81227923404dd6f5227"},
+ {file = "tokenizers-0.19.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:39c1ec76ea1027438fafe16ecb0fb84795e62e9d643444c1090179e63808c69d"},
+ {file = "tokenizers-0.19.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c2a0d47a89b48d7daa241e004e71fb5a50533718897a4cd6235cb846d511a478"},
+ {file = "tokenizers-0.19.1-cp39-none-win32.whl", hash = "sha256:61b7fe8886f2e104d4caf9218b157b106207e0f2a4905c9c7ac98890688aabeb"},
+ {file = "tokenizers-0.19.1-cp39-none-win_amd64.whl", hash = "sha256:f97660f6c43efd3e0bfd3f2e3e5615bf215680bad6ee3d469df6454b8c6e8256"},
+ {file = "tokenizers-0.19.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3b11853f17b54c2fe47742c56d8a33bf49ce31caf531e87ac0d7d13d327c9334"},
+ {file = "tokenizers-0.19.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d26194ef6c13302f446d39972aaa36a1dda6450bc8949f5eb4c27f51191375bd"},
+ {file = "tokenizers-0.19.1-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e8d1ed93beda54bbd6131a2cb363a576eac746d5c26ba5b7556bc6f964425594"},
+ {file = "tokenizers-0.19.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca407133536f19bdec44b3da117ef0d12e43f6d4b56ac4c765f37eca501c7bda"},
+ {file = "tokenizers-0.19.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce05fde79d2bc2e46ac08aacbc142bead21614d937aac950be88dc79f9db9022"},
+ {file = "tokenizers-0.19.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:35583cd46d16f07c054efd18b5d46af4a2f070a2dd0a47914e66f3ff5efb2b1e"},
+ {file = "tokenizers-0.19.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:43350270bfc16b06ad3f6f07eab21f089adb835544417afda0f83256a8bf8b75"},
+ {file = "tokenizers-0.19.1-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b4399b59d1af5645bcee2072a463318114c39b8547437a7c2d6a186a1b5a0e2d"},
+ {file = "tokenizers-0.19.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6852c5b2a853b8b0ddc5993cd4f33bfffdca4fcc5d52f89dd4b8eada99379285"},
+ {file = "tokenizers-0.19.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bcd266ae85c3d39df2f7e7d0e07f6c41a55e9a3123bb11f854412952deacd828"},
+ {file = "tokenizers-0.19.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecb2651956eea2aa0a2d099434134b1b68f1c31f9a5084d6d53f08ed43d45ff2"},
+ {file = "tokenizers-0.19.1-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:b279ab506ec4445166ac476fb4d3cc383accde1ea152998509a94d82547c8e2a"},
+ {file = "tokenizers-0.19.1-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:89183e55fb86e61d848ff83753f64cded119f5d6e1f553d14ffee3700d0a4a49"},
+ {file = "tokenizers-0.19.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b2edbc75744235eea94d595a8b70fe279dd42f3296f76d5a86dde1d46e35f574"},
+ {file = "tokenizers-0.19.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:0e64bfde9a723274e9a71630c3e9494ed7b4c0f76a1faacf7fe294cd26f7ae7c"},
+ {file = "tokenizers-0.19.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0b5ca92bfa717759c052e345770792d02d1f43b06f9e790ca0a1db62838816f3"},
+ {file = "tokenizers-0.19.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f8a20266e695ec9d7a946a019c1d5ca4eddb6613d4f466888eee04f16eedb85"},
+ {file = "tokenizers-0.19.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63c38f45d8f2a2ec0f3a20073cccb335b9f99f73b3c69483cd52ebc75369d8a1"},
+ {file = "tokenizers-0.19.1-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:dd26e3afe8a7b61422df3176e06664503d3f5973b94f45d5c45987e1cb711876"},
+ {file = "tokenizers-0.19.1-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:eddd5783a4a6309ce23432353cdb36220e25cbb779bfa9122320666508b44b88"},
+ {file = "tokenizers-0.19.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:56ae39d4036b753994476a1b935584071093b55c7a72e3b8288e68c313ca26e7"},
+ {file = "tokenizers-0.19.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:f9939ca7e58c2758c01b40324a59c034ce0cebad18e0d4563a9b1beab3018243"},
+ {file = "tokenizers-0.19.1-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6c330c0eb815d212893c67a032e9dc1b38a803eccb32f3e8172c19cc69fbb439"},
+ {file = "tokenizers-0.19.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec11802450a2487cdf0e634b750a04cbdc1c4d066b97d94ce7dd2cb51ebb325b"},
+ {file = "tokenizers-0.19.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2b718f316b596f36e1dae097a7d5b91fc5b85e90bf08b01ff139bd8953b25af"},
+ {file = "tokenizers-0.19.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:ed69af290c2b65169f0ba9034d1dc39a5db9459b32f1dd8b5f3f32a3fcf06eab"},
+ {file = "tokenizers-0.19.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f8a9c828277133af13f3859d1b6bf1c3cb6e9e1637df0e45312e6b7c2e622b1f"},
+ {file = "tokenizers-0.19.1.tar.gz", hash = "sha256:ee59e6680ed0fdbe6b724cf38bd70400a0c1dd623b07ac729087270caeac88e3"},
+]
+
+[package.dependencies]
+huggingface-hub = ">=0.16.4,<1.0"
+
+[package.extras]
+dev = ["tokenizers[testing]"]
+docs = ["setuptools-rust", "sphinx", "sphinx-rtd-theme"]
+testing = ["black (==22.3)", "datasets", "numpy", "pytest", "requests", "ruff"]
+
+[[package]]
+name = "tomli"
+version = "2.1.0"
+description = "A lil' TOML parser"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "tomli-2.1.0-py3-none-any.whl", hash = "sha256:a5c57c3d1c56f5ccdf89f6523458f60ef716e210fc47c4cfb188c5ba473e0391"},
+ {file = "tomli-2.1.0.tar.gz", hash = "sha256:3f646cae2aec94e17d04973e4249548320197cfabdf130015d023de4b74d8ab8"},
+]
+
[[package]]
name = "tomlkit"
version = "0.12.0"
@@ -2257,6 +5020,180 @@ files = [
{file = "tomlkit-0.12.0.tar.gz", hash = "sha256:01f0477981119c7d8ee0f67ebe0297a7c95b14cf9f4b102b45486deb77018716"},
]
+[[package]]
+name = "torch"
+version = "2.3.1"
+description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration"
+optional = false
+python-versions = ">=3.8.0"
+files = [
+ {file = "torch-2.3.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:605a25b23944be5ab7c3467e843580e1d888b8066e5aaf17ff7bf9cc30001cc3"},
+ {file = "torch-2.3.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:f2357eb0965583a0954d6f9ad005bba0091f956aef879822274b1bcdb11bd308"},
+ {file = "torch-2.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:32b05fe0d1ada7f69c9f86c14ff69b0ef1957a5a54199bacba63d22d8fab720b"},
+ {file = "torch-2.3.1-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:7c09a94362778428484bcf995f6004b04952106aee0ef45ff0b4bab484f5498d"},
+ {file = "torch-2.3.1-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:b2ec81b61bb094ea4a9dee1cd3f7b76a44555375719ad29f05c0ca8ef596ad39"},
+ {file = "torch-2.3.1-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:490cc3d917d1fe0bd027057dfe9941dc1d6d8e3cae76140f5dd9a7e5bc7130ab"},
+ {file = "torch-2.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:5802530783bd465fe66c2df99123c9a54be06da118fbd785a25ab0a88123758a"},
+ {file = "torch-2.3.1-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:a7dd4ed388ad1f3d502bf09453d5fe596c7b121de7e0cfaca1e2017782e9bbac"},
+ {file = "torch-2.3.1-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:a486c0b1976a118805fc7c9641d02df7afbb0c21e6b555d3bb985c9f9601b61a"},
+ {file = "torch-2.3.1-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:224259821fe3e4c6f7edf1528e4fe4ac779c77addaa74215eb0b63a5c474d66c"},
+ {file = "torch-2.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:e5fdccbf6f1334b2203a61a0e03821d5845f1421defe311dabeae2fc8fbeac2d"},
+ {file = "torch-2.3.1-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:3c333dc2ebc189561514eda06e81df22bf8fb64e2384746b2cb9f04f96d1d4c8"},
+ {file = "torch-2.3.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:07e9ba746832b8d069cacb45f312cadd8ad02b81ea527ec9766c0e7404bb3feb"},
+ {file = "torch-2.3.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:462d1c07dbf6bb5d9d2f3316fee73a24f3d12cd8dacf681ad46ef6418f7f6626"},
+ {file = "torch-2.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:ff60bf7ce3de1d43ad3f6969983f321a31f0a45df3690921720bcad6a8596cc4"},
+ {file = "torch-2.3.1-cp38-none-macosx_11_0_arm64.whl", hash = "sha256:bee0bd33dc58aa8fc8a7527876e9b9a0e812ad08122054a5bff2ce5abf005b10"},
+ {file = "torch-2.3.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:aaa872abde9a3d4f91580f6396d54888620f4a0b92e3976a6034759df4b961ad"},
+ {file = "torch-2.3.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:3d7a7f7ef21a7520510553dc3938b0c57c116a7daee20736a9e25cbc0e832bdc"},
+ {file = "torch-2.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:4777f6cefa0c2b5fa87223c213e7b6f417cf254a45e5829be4ccd1b2a4ee1011"},
+ {file = "torch-2.3.1-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:2bb5af780c55be68fe100feb0528d2edebace1d55cb2e351de735809ba7391eb"},
+]
+
+[package.dependencies]
+filelock = "*"
+fsspec = "*"
+jinja2 = "*"
+mkl = {version = ">=2021.1.1,<=2021.4.0", markers = "platform_system == \"Windows\""}
+networkx = "*"
+nvidia-cublas-cu12 = {version = "12.1.3.1", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""}
+nvidia-cuda-cupti-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""}
+nvidia-cuda-nvrtc-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""}
+nvidia-cuda-runtime-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""}
+nvidia-cudnn-cu12 = {version = "8.9.2.26", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""}
+nvidia-cufft-cu12 = {version = "11.0.2.54", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""}
+nvidia-curand-cu12 = {version = "10.3.2.106", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""}
+nvidia-cusolver-cu12 = {version = "11.4.5.107", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""}
+nvidia-cusparse-cu12 = {version = "12.1.0.106", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""}
+nvidia-nccl-cu12 = {version = "2.20.5", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""}
+nvidia-nvtx-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""}
+sympy = "*"
+triton = {version = "2.3.1", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version < \"3.12\""}
+typing-extensions = ">=4.8.0"
+
+[package.extras]
+opt-einsum = ["opt-einsum (>=3.3)"]
+optree = ["optree (>=0.9.1)"]
+
+[[package]]
+name = "torchaudio"
+version = "2.3.1"
+description = "An audio package for PyTorch"
+optional = false
+python-versions = "*"
+files = [
+ {file = "torchaudio-2.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1f9134b27e5a7f0c1e33382fc0fe278e53695768cb0af02e8d22b5006c74a2ad"},
+ {file = "torchaudio-2.3.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:88796183c12631dbc3dca58a74625e2fb6c5c7e50a54649df14239439d874ba6"},
+ {file = "torchaudio-2.3.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:6b57e773aad72743d50a64a7402a06cb8bdfcc709efc6d8c26429d940e6788e2"},
+ {file = "torchaudio-2.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:5b1224f944d1a3fc9755bd2876df6824a42c60cf4f32a05426dfdcd9668466da"},
+ {file = "torchaudio-2.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:01984f38398ca5e98ecfbfeafb72ae5b2131d0bb8aa464b5777addb3e4826877"},
+ {file = "torchaudio-2.3.1-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:68815815e09105fe1171f0541681a7ebaf6d5d52b8e095ccde94b8064b107002"},
+ {file = "torchaudio-2.3.1-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:c8c727c8341825bd18d91017c4c00f36b53b08f2176cdb9bdcb0def1c450b21d"},
+ {file = "torchaudio-2.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:341e33450831146bc4c4cc8191d94484f1acc8bb566c2463a57c4133f792464e"},
+ {file = "torchaudio-2.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5e36685420a07a176146e9d6e0fa8225198f126e167a00785538f853807e2d43"},
+ {file = "torchaudio-2.3.1-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:07b72d76fa108ac0f3400a759456ba96bdaa2b8649fd9588cc93295a532b01d9"},
+ {file = "torchaudio-2.3.1-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:42af6c7a430e6268f2c028e06078d413912b5ec6efa28a097ebdd3c3c79659df"},
+ {file = "torchaudio-2.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:25bd1137e47de96b48ef0dc4865bc620a0b759e44c009c7e78e92d7bfdf257ba"},
+ {file = "torchaudio-2.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ce45e05acd544696c6a6f023d4fe8614ade57515799a1103b2418e854838d4a5"},
+ {file = "torchaudio-2.3.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:6f8bc958ce1f24346dabe00d42e816f9b51698c00afe52492914761103e617a9"},
+ {file = "torchaudio-2.3.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:9fd0f4bbc3fd585fbd7d976a988fe6e783fcb2e0db9d70dac60f40be072c6504"},
+ {file = "torchaudio-2.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:d4982f4c520e49628507e968fb29c5db707108a8580b11593f049a932c8f2b98"},
+ {file = "torchaudio-2.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:36e8c0b6532571c27a08a40dae428cd34af225007f15bcd77272643b6266b81d"},
+ {file = "torchaudio-2.3.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:ae22a402fa862f7c3c177916f1b17482641d96b8bec56937e7df10739f3e3947"},
+ {file = "torchaudio-2.3.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:4e3bca232f820c6a0fa5394424076cc519fae32288e7ff6f6d68bd71794dc354"},
+ {file = "torchaudio-2.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:b7e0758b217e397bf2addfdc2df7c21f7dc34641968597a2a7e279c16e7c6d0b"},
+]
+
+[package.dependencies]
+torch = "2.3.1"
+
+[[package]]
+name = "torchcrepe"
+version = "0.0.23"
+description = "Pytorch implementation of CREPE pitch tracker"
+optional = false
+python-versions = "*"
+files = [
+ {file = "torchcrepe-0.0.23-py3-none-any.whl", hash = "sha256:6e104465b89e763ba7fd0d1b228162783ed4b5a6c5735772baca286c20d7ae2c"},
+ {file = "torchcrepe-0.0.23.tar.gz", hash = "sha256:8f7e75638a5ab3fbb9cfc1704c173adbcb61de73dbdadcf428b3d93b54dfe57f"},
+]
+
+[package.dependencies]
+librosa = ">=0.9.1"
+resampy = "*"
+scipy = "*"
+torch = "*"
+torchaudio = "*"
+tqdm = "*"
+
+[[package]]
+name = "torchfcpe"
+version = "0.0.4"
+description = "The official Pytorch implementation of Fast Context-based Pitch Estimation (FCPE)"
+optional = false
+python-versions = "*"
+files = [
+ {file = "torchfcpe-0.0.4-py3-none-any.whl", hash = "sha256:f042c463d850d76c6f4899a0b84f0b694bb560adf05f4de951097a756d17472d"},
+]
+
+[package.dependencies]
+einops = "*"
+local-attention = "*"
+numpy = "*"
+torch = "*"
+torchaudio = "*"
+
+[[package]]
+name = "torchlibrosa"
+version = "0.1.0"
+description = "PyTorch implemention of part of librosa functions."
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "torchlibrosa-0.1.0-py3-none-any.whl", hash = "sha256:89b65fd28b833ceb6bc74a3d0d87e2924ddc5a845d0a246b194952a4e12a38cb"},
+ {file = "torchlibrosa-0.1.0.tar.gz", hash = "sha256:62a8beedf9c9b4141a06234df3f10229f7ba86e67678ccee02489ec4ef044028"},
+]
+
+[package.dependencies]
+librosa = ">=0.8.0"
+numpy = "*"
+
+[[package]]
+name = "torchvision"
+version = "0.18.1"
+description = "image and video datasets and models for torch deep learning"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "torchvision-0.18.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3e694e54b0548dad99c12af6bf0c8e4f3350137d391dcd19af22a1c5f89322b3"},
+ {file = "torchvision-0.18.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:0b3bda0aa5b416eeb547143b8eeaf17720bdba9cf516dc991aacb81811aa96a5"},
+ {file = "torchvision-0.18.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:573ff523c739405edb085f65cb592f482d28a30e29b0be4c4ba08040b3ae785f"},
+ {file = "torchvision-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:ef7bbbc60b38e831a75e547c66ca1784f2ac27100f9e4ddbe9614cef6cbcd942"},
+ {file = "torchvision-0.18.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:80b5d794dd0fdba787adc22f1a367a5ead452327686473cb260dd94364bc56a6"},
+ {file = "torchvision-0.18.1-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:9077cf590cdb3a5e8fdf5cdb71797f8c67713f974cf0228ecb17fcd670ab42f9"},
+ {file = "torchvision-0.18.1-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:ceb993a882f1ae7ae373ed39c28d7e3e802205b0e59a7ed84ef4028f0bba8d7f"},
+ {file = "torchvision-0.18.1-cp311-cp311-win_amd64.whl", hash = "sha256:52f7436140045dc2239cdc502aa76b2bd8bd676d64244ff154d304aa69852046"},
+ {file = "torchvision-0.18.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2be6f0bf7c455c89a51a1dbb6f668d36c6edc479f49ac912d745d10df5715657"},
+ {file = "torchvision-0.18.1-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:f118d887bfde3a948a41d56587525401e5cac1b7db2eaca203324d6ed2b1caca"},
+ {file = "torchvision-0.18.1-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:13d24d904f65e62d66a1e0c41faec630bc193867b8a4a01166769e8a8e8df8e9"},
+ {file = "torchvision-0.18.1-cp312-cp312-win_amd64.whl", hash = "sha256:ed6340b69a63a625e512a66127210d412551d9c5f2ad2978130c6a45bf56cd4a"},
+ {file = "torchvision-0.18.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b1c3864fa9378c88bce8ad0ef3599f4f25397897ce612e1c245c74b97092f35e"},
+ {file = "torchvision-0.18.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:02085a2ffc7461f5c0edb07d6f3455ee1806561f37736b903da820067eea58c7"},
+ {file = "torchvision-0.18.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:9726c316a2501df8503e5a5dc46a631afd4c515a958972e5b7f7b9c87d2125c0"},
+ {file = "torchvision-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:64a2662dbf30db9055d8b201d6e56f312a504e5ccd9d144c57c41622d3c524cb"},
+ {file = "torchvision-0.18.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:975b8594c0f5288875408acbb74946eea786c5b008d129c0d045d0ead23742bc"},
+ {file = "torchvision-0.18.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:da83c8bbd34d8bee48bfa1d1b40e0844bc3cba10ed825a5a8cbe3ce7b62264cd"},
+ {file = "torchvision-0.18.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:54bfcd352abb396d5c9c237d200167c178bd136051b138e1e8ef46ce367c2773"},
+ {file = "torchvision-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:5c8366a1aeee49e9ea9e64b30d199debdf06b1bd7610a76165eb5d7869c3bde5"},
+]
+
+[package.dependencies]
+numpy = "*"
+pillow = ">=5.3.0,<8.3.dev0 || >=8.4.dev0"
+torch = "2.3.1"
+
+[package.extras]
+scipy = ["scipy"]
+
[[package]]
name = "tornado"
version = "6.4.2"
@@ -2313,6 +5250,97 @@ files = [
docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"]
test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"]
+[[package]]
+name = "transformers"
+version = "4.44.2"
+description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow"
+optional = false
+python-versions = ">=3.8.0"
+files = [
+ {file = "transformers-4.44.2-py3-none-any.whl", hash = "sha256:1c02c65e7bfa5e52a634aff3da52138b583fc6f263c1f28d547dc144ba3d412d"},
+ {file = "transformers-4.44.2.tar.gz", hash = "sha256:36aa17cc92ee154058e426d951684a2dab48751b35b49437896f898931270826"},
+]
+
+[package.dependencies]
+filelock = "*"
+huggingface-hub = ">=0.23.2,<1.0"
+numpy = ">=1.17"
+packaging = ">=20.0"
+pyyaml = ">=5.1"
+regex = "!=2019.12.17"
+requests = "*"
+safetensors = ">=0.4.1"
+tokenizers = ">=0.19,<0.20"
+tqdm = ">=4.27"
+
+[package.extras]
+accelerate = ["accelerate (>=0.21.0)"]
+agents = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "datasets (!=2.5.0)", "diffusers", "opencv-python", "sentencepiece (>=0.1.91,!=0.1.92)", "torch"]
+all = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "codecarbon (==1.2.0)", "decord (==0.6.0)", "flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1,<0.14.0)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf", "pyctcdecode (>=0.4.0)", "ray[tune] (>=2.7.0)", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timm (<=0.9.16)", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision"]
+audio = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"]
+benchmark = ["optimum-benchmark (>=0.2.0)"]
+codecarbon = ["codecarbon (==1.2.0)"]
+deepspeed = ["accelerate (>=0.21.0)", "deepspeed (>=0.9.3)"]
+deepspeed-testing = ["GitPython (<3.1.19)", "accelerate (>=0.21.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "deepspeed (>=0.9.3)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "nltk", "optuna", "parameterized", "protobuf", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"]
+dev = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "decord (==0.6.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "flax (>=0.4.1,<=0.7.0)", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1,<0.14.0)", "librosa", "nltk", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "timm (<=0.9.16)", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"]
+dev-tensorflow = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "isort (>=5.5.4)", "kenlm", "keras-nlp (>=0.3.1,<0.14.0)", "librosa", "nltk", "onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "tokenizers (>=0.19,<0.20)", "urllib3 (<2.0.0)"]
+dev-torch = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "kenlm", "librosa", "nltk", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "timeout-decorator", "timm (<=0.9.16)", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"]
+flax = ["flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "optax (>=0.0.8,<=0.1.4)", "scipy (<1.13.0)"]
+flax-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"]
+ftfy = ["ftfy"]
+integrations = ["optuna", "ray[tune] (>=2.7.0)", "sigopt"]
+ja = ["fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "rhoknp (>=1.1.0,<1.3.1)", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)"]
+modelcreation = ["cookiecutter (==1.7.3)"]
+natten = ["natten (>=0.14.6,<0.15.0)"]
+onnx = ["onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "tf2onnx"]
+onnxruntime = ["onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)"]
+optuna = ["optuna"]
+quality = ["GitPython (<3.1.19)", "datasets (!=2.5.0)", "isort (>=5.5.4)", "ruff (==0.5.1)", "urllib3 (<2.0.0)"]
+ray = ["ray[tune] (>=2.7.0)"]
+retrieval = ["datasets (!=2.5.0)", "faiss-cpu"]
+ruff = ["ruff (==0.5.1)"]
+sagemaker = ["sagemaker (>=2.31.0)"]
+sentencepiece = ["protobuf", "sentencepiece (>=0.1.91,!=0.1.92)"]
+serving = ["fastapi", "pydantic", "starlette", "uvicorn"]
+sigopt = ["sigopt"]
+sklearn = ["scikit-learn"]
+speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)", "torchaudio"]
+testing = ["GitPython (<3.1.19)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "nltk", "parameterized", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"]
+tf = ["keras-nlp (>=0.3.1,<0.14.0)", "onnxconverter-common", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx"]
+tf-cpu = ["keras (>2.9,<2.16)", "keras-nlp (>=0.3.1,<0.14.0)", "onnxconverter-common", "tensorflow-cpu (>2.9,<2.16)", "tensorflow-probability (<0.24)", "tensorflow-text (<2.16)", "tf2onnx"]
+tf-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"]
+timm = ["timm (<=0.9.16)"]
+tokenizers = ["tokenizers (>=0.19,<0.20)"]
+torch = ["accelerate (>=0.21.0)", "torch"]
+torch-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)", "torchaudio"]
+torch-vision = ["Pillow (>=10.0.1,<=15.0)", "torchvision"]
+torchhub = ["filelock", "huggingface-hub (>=0.23.2,<1.0)", "importlib-metadata", "numpy (>=1.17)", "packaging (>=20.0)", "protobuf", "regex (!=2019.12.17)", "requests", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.19,<0.20)", "torch", "tqdm (>=4.27)"]
+video = ["av (==9.2.0)", "decord (==0.6.0)"]
+vision = ["Pillow (>=10.0.1,<=15.0)"]
+
+[[package]]
+name = "triton"
+version = "2.3.1"
+description = "A language and compiler for custom Deep Learning operations"
+optional = false
+python-versions = "*"
+files = [
+ {file = "triton-2.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c84595cbe5e546b1b290d2a58b1494df5a2ef066dd890655e5b8a8a92205c33"},
+ {file = "triton-2.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9d64ae33bcb3a7a18081e3a746e8cf87ca8623ca13d2c362413ce7a486f893e"},
+ {file = "triton-2.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaf80e8761a9e3498aa92e7bf83a085b31959c61f5e8ac14eedd018df6fccd10"},
+ {file = "triton-2.3.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b13bf35a2b659af7159bf78e92798dc62d877aa991de723937329e2d382f1991"},
+ {file = "triton-2.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63381e35ded3304704ea867ffde3b7cfc42c16a55b3062d41e017ef510433d66"},
+ {file = "triton-2.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d968264523c7a07911c8fb51b4e0d1b920204dae71491b1fe7b01b62a31e124"},
+]
+
+[package.dependencies]
+filelock = "*"
+
+[package.extras]
+build = ["cmake (>=3.20)", "lit"]
+tests = ["autopep8", "flake8", "isort", "numpy", "pytest", "scipy (>=1.7.1)", "torch"]
+tutorials = ["matplotlib", "pandas", "tabulate", "torch"]
+
[[package]]
name = "typer"
version = "0.13.1"
@@ -2330,6 +5358,92 @@ rich = ">=10.11.0"
shellingham = ">=1.3.0"
typing-extensions = ">=3.7.4.3"
+[[package]]
+name = "types-beautifulsoup4"
+version = "4.12.0.20241020"
+description = "Typing stubs for beautifulsoup4"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "types-beautifulsoup4-4.12.0.20241020.tar.gz", hash = "sha256:158370d08d0cd448bd11b132a50ff5279237a5d4b5837beba074de152a513059"},
+ {file = "types_beautifulsoup4-4.12.0.20241020-py3-none-any.whl", hash = "sha256:c95e66ce15a4f5f0835f7fbc5cd886321ae8294f977c495424eaf4225307fd30"},
+]
+
+[package.dependencies]
+types-html5lib = "*"
+
+[[package]]
+name = "types-html5lib"
+version = "1.1.11.20241018"
+description = "Typing stubs for html5lib"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "types-html5lib-1.1.11.20241018.tar.gz", hash = "sha256:98042555ff78d9e3a51c77c918b1041acbb7eb6c405408d8a9e150ff5beccafa"},
+ {file = "types_html5lib-1.1.11.20241018-py3-none-any.whl", hash = "sha256:3f1e064d9ed2c289001ae6392c84c93833abb0816165c6ff0abfc304a779f403"},
+]
+
+[[package]]
+name = "types-pytz"
+version = "2024.2.0.20241003"
+description = "Typing stubs for pytz"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "types-pytz-2024.2.0.20241003.tar.gz", hash = "sha256:575dc38f385a922a212bac00a7d6d2e16e141132a3c955078f4a4fd13ed6cb44"},
+ {file = "types_pytz-2024.2.0.20241003-py3-none-any.whl", hash = "sha256:3e22df1336c0c6ad1d29163c8fda82736909eb977281cb823c57f8bae07118b7"},
+]
+
+[[package]]
+name = "types-regex"
+version = "2024.11.6.20241108"
+description = "Typing stubs for regex"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "types-regex-2024.11.6.20241108.tar.gz", hash = "sha256:a774e307b99b3df49481b29e8b4962f021693052a8d8a2b9e6792fcec896cf5e"},
+ {file = "types_regex-2024.11.6.20241108-py3-none-any.whl", hash = "sha256:adec2ff2dfed00855551057334466fde923606599d01e7440556d53a3ef20835"},
+]
+
+[[package]]
+name = "types-requests"
+version = "2.32.0.20241016"
+description = "Typing stubs for requests"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "types-requests-2.32.0.20241016.tar.gz", hash = "sha256:0d9cad2f27515d0e3e3da7134a1b6f28fb97129d86b867f24d9c726452634d95"},
+ {file = "types_requests-2.32.0.20241016-py3-none-any.whl", hash = "sha256:4195d62d6d3e043a4eaaf08ff8a62184584d2e8684e9d2aa178c7915a7da3747"},
+]
+
+[package.dependencies]
+urllib3 = ">=2"
+
+[[package]]
+name = "types-six"
+version = "1.16.21.20241105"
+description = "Typing stubs for six"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "types-six-1.16.21.20241105.tar.gz", hash = "sha256:ce3534c38079ec3242f4a20376283eb265a3837f80592b0ecacb14bd41acc29e"},
+ {file = "types_six-1.16.21.20241105-py3-none-any.whl", hash = "sha256:8b4b29e5c8fe7f1131be8f3cb7cedbcd8bb889707336f32c3fb332c9b1c71991"},
+]
+
+[[package]]
+name = "types-tqdm"
+version = "4.67.0.20241119"
+description = "Typing stubs for tqdm"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "types-tqdm-4.67.0.20241119.tar.gz", hash = "sha256:1769e0e94d5e6d8fa814965f9cf3d9928376dd15dabcbcb784bb8769081092b4"},
+ {file = "types_tqdm-4.67.0.20241119-py3-none-any.whl", hash = "sha256:a18d4eb62db0d35c52707ae13d821b5a57970755273ecb56e133ccc0ac7e7c79"},
+]
+
+[package.dependencies]
+types-requests = "*"
+
[[package]]
name = "typing-extensions"
version = "4.12.2"
@@ -2352,6 +5466,28 @@ files = [
{file = "tzdata-2024.2.tar.gz", hash = "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc"},
]
+[[package]]
+name = "unidecode"
+version = "1.3.8"
+description = "ASCII transliterations of Unicode text"
+optional = false
+python-versions = ">=3.5"
+files = [
+ {file = "Unidecode-1.3.8-py3-none-any.whl", hash = "sha256:d130a61ce6696f8148a3bd8fe779c99adeb4b870584eeb9526584e9aa091fd39"},
+ {file = "Unidecode-1.3.8.tar.gz", hash = "sha256:cfdb349d46ed3873ece4586b96aa75258726e2fa8ec21d6f00a591d98806c2f4"},
+]
+
+[[package]]
+name = "uritemplate"
+version = "4.1.1"
+description = "Implementation of RFC 6570 URI Templates"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "uritemplate-4.1.1-py2.py3-none-any.whl", hash = "sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e"},
+ {file = "uritemplate-4.1.1.tar.gz", hash = "sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0"},
+]
+
[[package]]
name = "urllib3"
version = "2.2.3"
@@ -2383,10 +5519,46 @@ files = [
[package.dependencies]
click = ">=7.0"
h11 = ">=0.8"
+typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""}
[package.extras]
standard = ["colorama (>=0.4)", "httptools (>=0.6.3)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"]
+[[package]]
+name = "versatile-audio-upscaler"
+version = "0.0.2"
+description = "Versatile AI-driven audio upscaler to enhance the quality of any audio."
+optional = false
+python-versions = ">=3.7.0"
+files = [
+ {file = "versatile-audio-upscaler-0.0.2.tar.gz", hash = "sha256:bb141097f3b88e288c6b625297bebe729872d068f321c78fe46c73c1b9fe5d64"},
+ {file = "versatile_audio_upscaler-0.0.2-py3-none-any.whl", hash = "sha256:8fb6fa5dd5446eabb352afb8afafc356f8a3e0d961a7faec4de83ad168ad4e47"},
+]
+
+[package.dependencies]
+chardet = "*"
+einops = "*"
+ftfy = "*"
+librosa = "0.9.2"
+matplotlib = "*"
+numpy = "<=1.23.5"
+pandas = "*"
+phonemizer = "*"
+progressbar = "*"
+pyyaml = "*"
+scipy = "*"
+soundfile = "*"
+timm = "*"
+tokenizers = ">=0.14.1"
+torch = ">=1.13.0"
+torchaudio = ">=0.13.0"
+torchlibrosa = ">=0.0.9"
+torchvision = ">=0.14.0"
+tqdm = "*"
+transformers = "*"
+unidecode = "*"
+wget = "*"
+
[[package]]
name = "virtualenv"
version = "20.27.1"
@@ -2499,7 +5671,130 @@ files = [
{file = "websockets-12.0.tar.gz", hash = "sha256:81df9cbcbb6c260de1e007e58c011bfebe2dafc8435107b0537f393dd38c8b1b"},
]
+[[package]]
+name = "werkzeug"
+version = "3.1.3"
+description = "The comprehensive WSGI web application library."
+optional = false
+python-versions = ">=3.9"
+files = [
+ {file = "werkzeug-3.1.3-py3-none-any.whl", hash = "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e"},
+ {file = "werkzeug-3.1.3.tar.gz", hash = "sha256:60723ce945c19328679790e3282cc758aa4a6040e4bb330f53d30fa546d44746"},
+]
+
+[package.dependencies]
+MarkupSafe = ">=2.1.1"
+
+[package.extras]
+watchdog = ["watchdog (>=2.3)"]
+
+[[package]]
+name = "wget"
+version = "3.2"
+description = "pure python download utility"
+optional = false
+python-versions = "*"
+files = [
+ {file = "wget-3.2.zip", hash = "sha256:35e630eca2aa50ce998b9b1a127bb26b30dfee573702782aa982f875e3f16061"},
+]
+
+[[package]]
+name = "yarl"
+version = "1.18.0"
+description = "Yet another URL library"
+optional = false
+python-versions = ">=3.9"
+files = [
+ {file = "yarl-1.18.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:074fee89caab89a97e18ef5f29060ef61ba3cae6cd77673acc54bfdd3214b7b7"},
+ {file = "yarl-1.18.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b026cf2c32daf48d90c0c4e406815c3f8f4cfe0c6dfccb094a9add1ff6a0e41a"},
+ {file = "yarl-1.18.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ae38bd86eae3ba3d2ce5636cc9e23c80c9db2e9cb557e40b98153ed102b5a736"},
+ {file = "yarl-1.18.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:685cc37f3f307c6a8e879986c6d85328f4c637f002e219f50e2ef66f7e062c1d"},
+ {file = "yarl-1.18.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8254dbfce84ee5d1e81051ee7a0f1536c108ba294c0fdb5933476398df0654f3"},
+ {file = "yarl-1.18.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:20de4a8b04de70c49698dc2390b7fd2d18d424d3b876371f9b775e2b462d4b41"},
+ {file = "yarl-1.18.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0a2074a37285570d54b55820687de3d2f2b9ecf1b714e482e48c9e7c0402038"},
+ {file = "yarl-1.18.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f576ed278860df2721a5d57da3381040176ef1d07def9688a385c8330db61a1"},
+ {file = "yarl-1.18.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3a3709450a574d61be6ac53d582496014342ea34876af8dc17cc16da32826c9a"},
+ {file = "yarl-1.18.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:bd80ed29761490c622edde5dd70537ca8c992c2952eb62ed46984f8eff66d6e8"},
+ {file = "yarl-1.18.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:32141e13a1d5a48525e519c9197d3f4d9744d818d5c7d6547524cc9eccc8971e"},
+ {file = "yarl-1.18.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8b8d3e4e014fb4274f1c5bf61511d2199e263909fb0b8bda2a7428b0894e8dc6"},
+ {file = "yarl-1.18.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:701bb4a8f4de191c8c0cc9a1e6d5142f4df880e9d1210e333b829ca9425570ed"},
+ {file = "yarl-1.18.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a45d94075ac0647621eaaf693c8751813a3eccac455d423f473ffed38c8ac5c9"},
+ {file = "yarl-1.18.0-cp310-cp310-win32.whl", hash = "sha256:34176bfb082add67cb2a20abd85854165540891147f88b687a5ed0dc225750a0"},
+ {file = "yarl-1.18.0-cp310-cp310-win_amd64.whl", hash = "sha256:73553bbeea7d6ec88c08ad8027f4e992798f0abc459361bf06641c71972794dc"},
+ {file = "yarl-1.18.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b8e8c516dc4e1a51d86ac975b0350735007e554c962281c432eaa5822aa9765c"},
+ {file = "yarl-1.18.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2e6b4466714a73f5251d84b471475850954f1fa6acce4d3f404da1d55d644c34"},
+ {file = "yarl-1.18.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c893f8c1a6d48b25961e00922724732d00b39de8bb0b451307482dc87bddcd74"},
+ {file = "yarl-1.18.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:13aaf2bdbc8c86ddce48626b15f4987f22e80d898818d735b20bd58f17292ee8"},
+ {file = "yarl-1.18.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd21c0128e301851de51bc607b0a6da50e82dc34e9601f4b508d08cc89ee7929"},
+ {file = "yarl-1.18.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:205de377bd23365cd85562c9c6c33844050a93661640fda38e0567d2826b50df"},
+ {file = "yarl-1.18.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed69af4fe2a0949b1ea1d012bf065c77b4c7822bad4737f17807af2adb15a73c"},
+ {file = "yarl-1.18.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8e1c18890091aa3cc8a77967943476b729dc2016f4cfe11e45d89b12519d4a93"},
+ {file = "yarl-1.18.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:91b8fb9427e33f83ca2ba9501221ffaac1ecf0407f758c4d2f283c523da185ee"},
+ {file = "yarl-1.18.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:536a7a8a53b75b2e98ff96edb2dfb91a26b81c4fed82782035767db5a465be46"},
+ {file = "yarl-1.18.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:a64619a9c47c25582190af38e9eb382279ad42e1f06034f14d794670796016c0"},
+ {file = "yarl-1.18.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c73a6bbc97ba1b5a0c3c992ae93d721c395bdbb120492759b94cc1ac71bc6350"},
+ {file = "yarl-1.18.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:a173401d7821a2a81c7b47d4e7d5c4021375a1441af0c58611c1957445055056"},
+ {file = "yarl-1.18.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7520e799b1f84e095cce919bd6c23c9d49472deeef25fe1ef960b04cca51c3fc"},
+ {file = "yarl-1.18.0-cp311-cp311-win32.whl", hash = "sha256:c4cb992d8090d5ae5f7afa6754d7211c578be0c45f54d3d94f7781c495d56716"},
+ {file = "yarl-1.18.0-cp311-cp311-win_amd64.whl", hash = "sha256:52c136f348605974c9b1c878addd6b7a60e3bf2245833e370862009b86fa4689"},
+ {file = "yarl-1.18.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1ece25e2251c28bab737bdf0519c88189b3dd9492dc086a1d77336d940c28ced"},
+ {file = "yarl-1.18.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:454902dc1830d935c90b5b53c863ba2a98dcde0fbaa31ca2ed1ad33b2a7171c6"},
+ {file = "yarl-1.18.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:01be8688fc211dc237e628fcc209dda412d35de7642453059a0553747018d075"},
+ {file = "yarl-1.18.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d26f1fa9fa2167bb238f6f4b20218eb4e88dd3ef21bb8f97439fa6b5313e30d"},
+ {file = "yarl-1.18.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b234a4a9248a9f000b7a5dfe84b8cb6210ee5120ae70eb72a4dcbdb4c528f72f"},
+ {file = "yarl-1.18.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe94d1de77c4cd8caff1bd5480e22342dbd54c93929f5943495d9c1e8abe9f42"},
+ {file = "yarl-1.18.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b4c90c5363c6b0a54188122b61edb919c2cd1119684999d08cd5e538813a28e"},
+ {file = "yarl-1.18.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49a98ecadc5a241c9ba06de08127ee4796e1009555efd791bac514207862b43d"},
+ {file = "yarl-1.18.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9106025c7f261f9f5144f9aa7681d43867eed06349a7cfb297a1bc804de2f0d1"},
+ {file = "yarl-1.18.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:f275ede6199d0f1ed4ea5d55a7b7573ccd40d97aee7808559e1298fe6efc8dbd"},
+ {file = "yarl-1.18.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f7edeb1dcc7f50a2c8e08b9dc13a413903b7817e72273f00878cb70e766bdb3b"},
+ {file = "yarl-1.18.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c083f6dd6951b86e484ebfc9c3524b49bcaa9c420cb4b2a78ef9f7a512bfcc85"},
+ {file = "yarl-1.18.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:80741ec5b471fbdfb997821b2842c59660a1c930ceb42f8a84ba8ca0f25a66aa"},
+ {file = "yarl-1.18.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b1a3297b9cad594e1ff0c040d2881d7d3a74124a3c73e00c3c71526a1234a9f7"},
+ {file = "yarl-1.18.0-cp312-cp312-win32.whl", hash = "sha256:cd6ab7d6776c186f544f893b45ee0c883542b35e8a493db74665d2e594d3ca75"},
+ {file = "yarl-1.18.0-cp312-cp312-win_amd64.whl", hash = "sha256:039c299a0864d1f43c3e31570045635034ea7021db41bf4842693a72aca8df3a"},
+ {file = "yarl-1.18.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6fb64dd45453225f57d82c4764818d7a205ee31ce193e9f0086e493916bd4f72"},
+ {file = "yarl-1.18.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3adaaf9c6b1b4fc258584f4443f24d775a2086aee82d1387e48a8b4f3d6aecf6"},
+ {file = "yarl-1.18.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:da206d1ec78438a563c5429ab808a2b23ad7bc025c8adbf08540dde202be37d5"},
+ {file = "yarl-1.18.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:576d258b21c1db4c6449b1c572c75d03f16a482eb380be8003682bdbe7db2f28"},
+ {file = "yarl-1.18.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c60e547c0a375c4bfcdd60eef82e7e0e8698bf84c239d715f5c1278a73050393"},
+ {file = "yarl-1.18.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e3818eabaefb90adeb5e0f62f047310079d426387991106d4fbf3519eec7d90a"},
+ {file = "yarl-1.18.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5f72421246c21af6a92fbc8c13b6d4c5427dfd949049b937c3b731f2f9076bd"},
+ {file = "yarl-1.18.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7fa7d37f2ada0f42e0723632993ed422f2a679af0e200874d9d861720a54f53e"},
+ {file = "yarl-1.18.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:42ba84e2ac26a3f252715f8ec17e6fdc0cbf95b9617c5367579fafcd7fba50eb"},
+ {file = "yarl-1.18.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:6a49ad0102c0f0ba839628d0bf45973c86ce7b590cdedf7540d5b1833ddc6f00"},
+ {file = "yarl-1.18.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:96404e8d5e1bbe36bdaa84ef89dc36f0e75939e060ca5cd45451aba01db02902"},
+ {file = "yarl-1.18.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:a0509475d714df8f6d498935b3f307cd122c4ca76f7d426c7e1bb791bcd87eda"},
+ {file = "yarl-1.18.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:1ff116f0285b5c8b3b9a2680aeca29a858b3b9e0402fc79fd850b32c2bcb9f8b"},
+ {file = "yarl-1.18.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e2580c1d7e66e6d29d6e11855e3b1c6381971e0edd9a5066e6c14d79bc8967af"},
+ {file = "yarl-1.18.0-cp313-cp313-win32.whl", hash = "sha256:14408cc4d34e202caba7b5ac9cc84700e3421a9e2d1b157d744d101b061a4a88"},
+ {file = "yarl-1.18.0-cp313-cp313-win_amd64.whl", hash = "sha256:1db1537e9cb846eb0ff206eac667f627794be8b71368c1ab3207ec7b6f8c5afc"},
+ {file = "yarl-1.18.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:fa2c9cb607e0f660d48c54a63de7a9b36fef62f6b8bd50ff592ce1137e73ac7d"},
+ {file = "yarl-1.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c0f4808644baf0a434a3442df5e0bedf8d05208f0719cedcd499e168b23bfdc4"},
+ {file = "yarl-1.18.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7db9584235895a1dffca17e1c634b13870852094f6389b68dcc6338086aa7b08"},
+ {file = "yarl-1.18.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:309f8d27d6f93ceeeb80aa6980e883aa57895270f7f41842b92247e65d7aeddf"},
+ {file = "yarl-1.18.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:609ffd44fed2ed88d9b4ef62ee860cf86446cf066333ad4ce4123505b819e581"},
+ {file = "yarl-1.18.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f172b8b2c72a13a06ea49225a9c47079549036ad1b34afa12d5491b881f5b993"},
+ {file = "yarl-1.18.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d89ae7de94631b60d468412c18290d358a9d805182373d804ec839978b120422"},
+ {file = "yarl-1.18.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:466d31fd043ef9af822ee3f1df8fdff4e8c199a7f4012c2642006af240eade17"},
+ {file = "yarl-1.18.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7609b8462351c4836b3edce4201acb6dd46187b207c589b30a87ffd1813b48dc"},
+ {file = "yarl-1.18.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:d9d4f5e471e8dc49b593a80766c2328257e405f943c56a3dc985c125732bc4cf"},
+ {file = "yarl-1.18.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:67b336c15e564d76869c9a21316f90edf546809a5796a083b8f57c845056bc01"},
+ {file = "yarl-1.18.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:b212452b80cae26cb767aa045b051740e464c5129b7bd739c58fbb7deb339e7b"},
+ {file = "yarl-1.18.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:38b39b7b3e692b6c92b986b00137a3891eddb66311b229d1940dcbd4f025083c"},
+ {file = "yarl-1.18.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a7ee6884a8848792d58b854946b685521f41d8871afa65e0d4a774954e9c9e89"},
+ {file = "yarl-1.18.0-cp39-cp39-win32.whl", hash = "sha256:b4095c5019bb889aa866bf12ed4c85c0daea5aafcb7c20d1519f02a1e738f07f"},
+ {file = "yarl-1.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:2d90f2e4d16a5b0915ee065218b435d2ef619dd228973b1b47d262a6f7cd8fa5"},
+ {file = "yarl-1.18.0-py3-none-any.whl", hash = "sha256:dbf53db46f7cf176ee01d8d98c39381440776fcda13779d269a8ba664f69bec0"},
+ {file = "yarl-1.18.0.tar.gz", hash = "sha256:20d95535e7d833889982bfe7cc321b7f63bf8879788fee982c76ae2b24cfb715"},
+]
+
+[package.dependencies]
+idna = ">=2.0"
+multidict = ">=4.0"
+propcache = ">=0.2.0"
+
[metadata]
lock-version = "2.0"
-python-versions = "~3.12"
-content-hash = "f1557f8c46a2f3d602b7198af2e816f148e080ffada3615a0b58f089f7fd3a13"
+python-versions = "~3.10"
+content-hash = "1efb5efb494c33cb4fcc0cae070f9afd155b114529b98360ea2277dea26aafac"
diff --git a/pyproject.toml b/pyproject.toml
index 3f8b327c4c59c906dfb7a8a65de3aa9b76d8aabe..b200e303192f78a4feb1eb1148cdf58d901fe298 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -4,6 +4,13 @@ version = "0.1.0"
description = ""
authors = ["Jesus Lopez "]
readme = "README.md"
+packages = [
+ { include = "assets", from = "." },
+ { include = "core", from = "." },
+ { include = "rvc", from = "." },
+ { include = "tabs", from = "." },
+ { include = "tts_service", from = "." },
+]
[tool.poetry.scripts]
@@ -11,14 +18,31 @@ tts-service = "tts_service.cli:main"
[tool.poetry.dependencies]
-python = "~3.12"
+python = "~3.10"
+regex = "^2024.11.6"
+numpy = "1.23.5"
+tqdm = "^4.67.1"
+requests = ">=2.31.0,<2.32.0"
+six = "^1.16.0"
+wget = "^3.2"
+pandas = "^2.2.3"
+
+[tool.poetry.group.ml.dependencies]
+torch = "2.3.1"
+transformers = "4.44.2"
+libf0 = "^1.0.2"
+torchcrepe = "0.0.23"
+torchfcpe = "^0.0.4"
+einops = "^0.8.0"
+torchaudio = "2.3.1"
+scikit-learn = "^1.5.2"
[tool.poetry.group.cli.dependencies]
click = "^8.1.7"
click-help-colors = "^0.9.4"
[tool.poetry.group.ci.dependencies]
-gradio = "^5.6.0"
+gradio = "4.43.0"
huggingface-hub = "^0.26.2"
[tool.poetry.group.dev.dependencies]
@@ -34,7 +58,37 @@ pytest-cov = "^6.0.0"
[tool.poetry.group.typing.dependencies]
mypy = "^1.13.0"
-
+types-requests = "^2.32.0.20241016"
+types-tqdm = "^4.67.0.20241119"
+types-six = "^1.16.21.20241105"
+types-beautifulsoup4 = "^4.12.0.20241020"
+types-regex = "^2024.11.6.20241108"
+pandas-stubs = "^2.2.3.241009"
+
+
+[tool.poetry.group.ui.dependencies]
+matplotlib = "3.7.2"
+tensorboard = "^2.18.0"
+
+
+[tool.poetry.group.audio.dependencies]
+librosa = "0.9.2"
+pydub = "^0.25.1"
+resampy = "^0.4.3"
+pedalboard = "^0.9.16"
+scipy = "1.11.1"
+faiss-cpu = "1.7.3"
+noisereduce = "^3.0.3"
+stftpitchshift = "^2.0"
+versatile-audio-upscaler = "^0.0.2"
+
+
+[tool.poetry.group.misc.dependencies]
+beautifulsoup4 = "^4.12.3"
+pypresence = "^4.3.0"
+flask = "^3.1.0"
+local-attention = "^1.9.15"
+edge-tts = "6.1.9"
[tool.ruff]
line-length = 132
@@ -57,11 +111,56 @@ select = [
[tool.mypy]
-strict = true
-disallow_untyped_defs = true
+packages = "assets,core,rvc,tabs,tts_service,tests"
+
+#1181 errors
+[[tool.mypy.overrides]]
+module = [
+ "core.*",
+ "rvc.infer.infer",
+ "rvc.infer.pipeline",
+ "rvc.lib.algorithm.attentions",
+ "rvc.lib.algorithm.commons",
+ "rvc.lib.algorithm.synthesizers",
+ "rvc.lib.predictors.FCPE",
+ "rvc.lib.zluda",
+ "rvc.train.train",
+ "rvc.train.data_utils",
+ "rvc.train.extract.extract",
+ "rvc.train.preprocess.preprocess",
+ "rvc.train.preprocess.slicer",
+ "rvc.train.process.extract_small_model",
+ "tabs.extra.f0_extractor.f0_extractor",
+]
+ignore_errors = true
[[tool.mypy.overrides]]
-module = ["gradio"]
+module = [
+ "audio_upscaler",
+ "edge_tts",
+ "faiss",
+ "gradio",
+ "gradio.themes.base",
+ "gradio.themes.utils",
+ "libf0",
+ "librosa.*",
+ "local_attention",
+ "matplotlib.*",
+ "noisereduce",
+ "pydub",
+ "pypresence",
+ "resampy",
+ "scipy.*",
+ "sklearn.*",
+ "soundfile",
+ "stftpitchshift",
+ "tensorboard",
+ "torchaudio.*",
+ "torchcrepe",
+ "torchfcpe",
+ "transformers",
+ "wget",
+]
ignore_missing_imports = true
[build-system]
diff --git a/rvc/configs/config.py b/rvc/configs/config.py
new file mode 100644
index 0000000000000000000000000000000000000000..e6490936dd07acdd59d1189ee249f24dc9fef0fc
--- /dev/null
+++ b/rvc/configs/config.py
@@ -0,0 +1,179 @@
+import torch
+import json
+import os
+
+
+version_config_paths = [
+ os.path.join("v1", "32000.json"),
+ os.path.join("v1", "40000.json"),
+ os.path.join("v1", "48000.json"),
+ os.path.join("v2", "48000.json"),
+ os.path.join("v2", "40000.json"),
+ os.path.join("v2", "32000.json"),
+]
+
+
+def singleton(cls):
+ instances = {}
+
+ def get_instance(*args, **kwargs):
+ if cls not in instances:
+ instances[cls] = cls(*args, **kwargs)
+ return instances[cls]
+
+ return get_instance
+
+
+@singleton
+class Config:
+ def __init__(self):
+ self.device = "cuda:0" if torch.cuda.is_available() else "cpu"
+ self.is_half = self.device != "cpu"
+ self.gpu_name = (
+ torch.cuda.get_device_name(int(self.device.split(":")[-1]))
+ if self.device.startswith("cuda")
+ else None
+ )
+ self.json_config = self.load_config_json()
+ self.gpu_mem = None
+ self.x_pad, self.x_query, self.x_center, self.x_max = self.device_config()
+
+ def load_config_json(self) -> dict:
+ configs = {}
+ for config_file in version_config_paths:
+ config_path = os.path.join("rvc", "configs", config_file)
+ with open(config_path, "r") as f:
+ configs[config_file] = json.load(f)
+ return configs
+
+ def has_mps(self) -> bool:
+ # Check if Metal Performance Shaders are available - for macOS 12.3+.
+ return torch.backends.mps.is_available()
+
+ def has_xpu(self) -> bool:
+ # Check if XPU is available.
+ return hasattr(torch, "xpu") and torch.xpu.is_available()
+
+ def set_precision(self, precision):
+ if precision not in ["fp32", "fp16"]:
+ raise ValueError("Invalid precision type. Must be 'fp32' or 'fp16'.")
+
+ fp16_run_value = precision == "fp16"
+ preprocess_target_version = "3.7" if precision == "fp16" else "3.0"
+ preprocess_path = os.path.join(
+ os.path.dirname(__file__),
+ os.pardir,
+ "rvc",
+ "train",
+ "preprocess",
+ "preprocess.py",
+ )
+
+ for config_path in version_config_paths:
+ full_config_path = os.path.join("rvc", "configs", config_path)
+ try:
+ with open(full_config_path, "r") as f:
+ config = json.load(f)
+ config["train"]["fp16_run"] = fp16_run_value
+ with open(full_config_path, "w") as f:
+ json.dump(config, f, indent=4)
+ except FileNotFoundError:
+ print(f"File not found: {full_config_path}")
+
+ if os.path.exists(preprocess_path):
+ with open(preprocess_path, "r") as f:
+ preprocess_content = f.read()
+ preprocess_content = preprocess_content.replace(
+ "3.0" if precision == "fp16" else "3.7", preprocess_target_version
+ )
+ with open(preprocess_path, "w") as f:
+ f.write(preprocess_content)
+
+ return f"Overwritten preprocess and config.json to use {precision}."
+
+ def get_precision(self):
+ if not version_config_paths:
+ raise FileNotFoundError("No configuration paths provided.")
+
+ full_config_path = os.path.join("rvc", "configs", version_config_paths[0])
+ try:
+ with open(full_config_path, "r") as f:
+ config = json.load(f)
+ fp16_run_value = config["train"].get("fp16_run", False)
+ precision = "fp16" if fp16_run_value else "fp32"
+ return precision
+ except FileNotFoundError:
+ print(f"File not found: {full_config_path}")
+ return None
+
+ def device_config(self) -> tuple:
+ if self.device.startswith("cuda"):
+ self.set_cuda_config()
+ elif self.has_mps():
+ self.device = "mps"
+ self.is_half = False
+ self.set_precision("fp32")
+ else:
+ self.device = "cpu"
+ self.is_half = False
+ self.set_precision("fp32")
+
+ # Configuration for 6GB GPU memory
+ x_pad, x_query, x_center, x_max = (
+ (3, 10, 60, 65) if self.is_half else (1, 6, 38, 41)
+ )
+ if self.gpu_mem is not None and self.gpu_mem <= 4:
+ # Configuration for 5GB GPU memory
+ x_pad, x_query, x_center, x_max = (1, 5, 30, 32)
+
+ return x_pad, x_query, x_center, x_max
+
+ def set_cuda_config(self):
+ i_device = int(self.device.split(":")[-1])
+ self.gpu_name = torch.cuda.get_device_name(i_device)
+ low_end_gpus = ["16", "P40", "P10", "1060", "1070", "1080"]
+ if (
+ any(gpu in self.gpu_name for gpu in low_end_gpus)
+ and "V100" not in self.gpu_name.upper()
+ ):
+ self.is_half = False
+ self.set_precision("fp32")
+
+ self.gpu_mem = torch.cuda.get_device_properties(i_device).total_memory // (
+ 1024**3
+ )
+
+
+def max_vram_gpu(gpu):
+ if torch.cuda.is_available():
+ gpu_properties = torch.cuda.get_device_properties(gpu)
+ total_memory_gb = round(gpu_properties.total_memory / 1024 / 1024 / 1024)
+ return total_memory_gb
+ else:
+ return "8"
+
+
+def get_gpu_info():
+ ngpu = torch.cuda.device_count()
+ gpu_infos = []
+ if torch.cuda.is_available() or ngpu != 0:
+ for i in range(ngpu):
+ gpu_name = torch.cuda.get_device_name(i)
+ mem = int(
+ torch.cuda.get_device_properties(i).total_memory / 1024 / 1024 / 1024
+ + 0.4
+ )
+ gpu_infos.append(f"{i}: {gpu_name} ({mem} GB)")
+ if len(gpu_infos) > 0:
+ gpu_info = "\n".join(gpu_infos)
+ else:
+ gpu_info = "Unfortunately, there is no compatible GPU available to support your training."
+ return gpu_info
+
+
+def get_number_of_gpus():
+ if torch.cuda.is_available():
+ num_gpus = torch.cuda.device_count()
+ return "-".join(map(str, range(num_gpus)))
+ else:
+ return "-"
diff --git a/rvc/configs/v1/32000.json b/rvc/configs/v1/32000.json
new file mode 100644
index 0000000000000000000000000000000000000000..64208650b6a3416c28d12cd8634b6fea3d5f61ff
--- /dev/null
+++ b/rvc/configs/v1/32000.json
@@ -0,0 +1,82 @@
+{
+ "train": {
+ "log_interval": 200,
+ "seed": 1234,
+ "epochs": 20000,
+ "learning_rate": 0.0001,
+ "betas": [
+ 0.8,
+ 0.99
+ ],
+ "eps": 1e-09,
+ "batch_size": 4,
+ "fp16_run": false,
+ "lr_decay": 0.999875,
+ "segment_size": 12800,
+ "init_lr_ratio": 1,
+ "warmup_epochs": 0,
+ "c_mel": 45,
+ "c_kl": 1.0
+ },
+ "data": {
+ "max_wav_value": 32768.0,
+ "sample_rate": 32000,
+ "filter_length": 1024,
+ "hop_length": 320,
+ "win_length": 1024,
+ "n_mel_channels": 80,
+ "mel_fmin": 0.0,
+ "mel_fmax": null
+ },
+ "model": {
+ "inter_channels": 192,
+ "hidden_channels": 192,
+ "filter_channels": 768,
+ "text_enc_hidden_dim": 256,
+ "n_heads": 2,
+ "n_layers": 6,
+ "kernel_size": 3,
+ "p_dropout": 0,
+ "resblock": "1",
+ "resblock_kernel_sizes": [
+ 3,
+ 7,
+ 11
+ ],
+ "resblock_dilation_sizes": [
+ [
+ 1,
+ 3,
+ 5
+ ],
+ [
+ 1,
+ 3,
+ 5
+ ],
+ [
+ 1,
+ 3,
+ 5
+ ]
+ ],
+ "upsample_rates": [
+ 10,
+ 4,
+ 2,
+ 2,
+ 2
+ ],
+ "upsample_initial_channel": 512,
+ "upsample_kernel_sizes": [
+ 16,
+ 16,
+ 4,
+ 4,
+ 4
+ ],
+ "use_spectral_norm": false,
+ "gin_channels": 256,
+ "spk_embed_dim": 109
+ }
+}
\ No newline at end of file
diff --git a/rvc/configs/v1/40000.json b/rvc/configs/v1/40000.json
new file mode 100644
index 0000000000000000000000000000000000000000..0188143b7be97d37f739e44df0b7000f592647d3
--- /dev/null
+++ b/rvc/configs/v1/40000.json
@@ -0,0 +1,80 @@
+{
+ "train": {
+ "log_interval": 200,
+ "seed": 1234,
+ "epochs": 20000,
+ "learning_rate": 0.0001,
+ "betas": [
+ 0.8,
+ 0.99
+ ],
+ "eps": 1e-09,
+ "batch_size": 4,
+ "fp16_run": false,
+ "lr_decay": 0.999875,
+ "segment_size": 12800,
+ "init_lr_ratio": 1,
+ "warmup_epochs": 0,
+ "c_mel": 45,
+ "c_kl": 1.0
+ },
+ "data": {
+ "max_wav_value": 32768.0,
+ "sample_rate": 40000,
+ "filter_length": 2048,
+ "hop_length": 400,
+ "win_length": 2048,
+ "n_mel_channels": 125,
+ "mel_fmin": 0.0,
+ "mel_fmax": null
+ },
+ "model": {
+ "inter_channels": 192,
+ "hidden_channels": 192,
+ "filter_channels": 768,
+ "text_enc_hidden_dim": 256,
+ "n_heads": 2,
+ "n_layers": 6,
+ "kernel_size": 3,
+ "p_dropout": 0,
+ "resblock": "1",
+ "resblock_kernel_sizes": [
+ 3,
+ 7,
+ 11
+ ],
+ "resblock_dilation_sizes": [
+ [
+ 1,
+ 3,
+ 5
+ ],
+ [
+ 1,
+ 3,
+ 5
+ ],
+ [
+ 1,
+ 3,
+ 5
+ ]
+ ],
+ "upsample_rates": [
+ 10,
+ 10,
+ 2,
+ 2
+ ],
+ "upsample_initial_channel": 512,
+ "upsample_kernel_sizes": [
+ 16,
+ 16,
+ 4,
+ 4
+ ],
+ "use_spectral_norm": false,
+ "gin_channels": 256,
+ "spk_embed_dim": 109
+ }
+}
\ No newline at end of file
diff --git a/rvc/configs/v1/48000.json b/rvc/configs/v1/48000.json
new file mode 100644
index 0000000000000000000000000000000000000000..a43440e8fb54c40859fbab353321a352e87c955a
--- /dev/null
+++ b/rvc/configs/v1/48000.json
@@ -0,0 +1,82 @@
+{
+ "train": {
+ "log_interval": 200,
+ "seed": 1234,
+ "epochs": 20000,
+ "learning_rate": 0.0001,
+ "betas": [
+ 0.8,
+ 0.99
+ ],
+ "eps": 1e-09,
+ "batch_size": 4,
+ "fp16_run": false,
+ "lr_decay": 0.999875,
+ "segment_size": 11520,
+ "init_lr_ratio": 1,
+ "warmup_epochs": 0,
+ "c_mel": 45,
+ "c_kl": 1.0
+ },
+ "data": {
+ "max_wav_value": 32768.0,
+ "sample_rate": 48000,
+ "filter_length": 2048,
+ "hop_length": 480,
+ "win_length": 2048,
+ "n_mel_channels": 128,
+ "mel_fmin": 0.0,
+ "mel_fmax": null
+ },
+ "model": {
+ "inter_channels": 192,
+ "hidden_channels": 192,
+ "filter_channels": 768,
+ "text_enc_hidden_dim": 256,
+ "n_heads": 2,
+ "n_layers": 6,
+ "kernel_size": 3,
+ "p_dropout": 0,
+ "resblock": "1",
+ "resblock_kernel_sizes": [
+ 3,
+ 7,
+ 11
+ ],
+ "resblock_dilation_sizes": [
+ [
+ 1,
+ 3,
+ 5
+ ],
+ [
+ 1,
+ 3,
+ 5
+ ],
+ [
+ 1,
+ 3,
+ 5
+ ]
+ ],
+ "upsample_rates": [
+ 10,
+ 6,
+ 2,
+ 2,
+ 2
+ ],
+ "upsample_initial_channel": 512,
+ "upsample_kernel_sizes": [
+ 16,
+ 16,
+ 4,
+ 4,
+ 4
+ ],
+ "use_spectral_norm": false,
+ "gin_channels": 256,
+ "spk_embed_dim": 109
+ }
+}
\ No newline at end of file
diff --git a/rvc/configs/v2/32000.json b/rvc/configs/v2/32000.json
new file mode 100644
index 0000000000000000000000000000000000000000..a593745a8fc7aabd9daf0c3421acfda106746d69
--- /dev/null
+++ b/rvc/configs/v2/32000.json
@@ -0,0 +1,76 @@
+{
+ "train": {
+ "log_interval": 200,
+ "seed": 1234,
+ "learning_rate": 0.0001,
+ "betas": [
+ 0.8,
+ 0.99
+ ],
+ "eps": 1e-09,
+ "fp16_run": false,
+ "lr_decay": 0.999875,
+ "segment_size": 12800,
+ "c_mel": 45,
+ "c_kl": 1.0
+ },
+ "data": {
+ "max_wav_value": 32768.0,
+ "sample_rate": 32000,
+ "filter_length": 1024,
+ "hop_length": 320,
+ "win_length": 1024,
+ "n_mel_channels": 80,
+ "mel_fmin": 0.0,
+ "mel_fmax": null
+ },
+ "model": {
+ "inter_channels": 192,
+ "hidden_channels": 192,
+ "filter_channels": 768,
+ "text_enc_hidden_dim": 768,
+ "n_heads": 2,
+ "n_layers": 6,
+ "kernel_size": 3,
+ "p_dropout": 0,
+ "resblock": "1",
+ "resblock_kernel_sizes": [
+ 3,
+ 7,
+ 11
+ ],
+ "resblock_dilation_sizes": [
+ [
+ 1,
+ 3,
+ 5
+ ],
+ [
+ 1,
+ 3,
+ 5
+ ],
+ [
+ 1,
+ 3,
+ 5
+ ]
+ ],
+ "upsample_rates": [
+ 10,
+ 8,
+ 2,
+ 2
+ ],
+ "upsample_initial_channel": 512,
+ "upsample_kernel_sizes": [
+ 20,
+ 16,
+ 4,
+ 4
+ ],
+ "use_spectral_norm": false,
+ "gin_channels": 256,
+ "spk_embed_dim": 109
+ }
+}
\ No newline at end of file
diff --git a/rvc/configs/v2/40000.json b/rvc/configs/v2/40000.json
new file mode 100644
index 0000000000000000000000000000000000000000..a1deb56bf3304d6d0bc61c2ccfa86f0fec33aae0
--- /dev/null
+++ b/rvc/configs/v2/40000.json
@@ -0,0 +1,76 @@
+{
+ "train": {
+ "log_interval": 200,
+ "seed": 1234,
+ "learning_rate": 0.0001,
+ "betas": [
+ 0.8,
+ 0.99
+ ],
+ "eps": 1e-09,
+ "fp16_run": false,
+ "lr_decay": 0.999875,
+ "segment_size": 12800,
+ "c_mel": 45,
+ "c_kl": 1.0
+ },
+ "data": {
+ "max_wav_value": 32768.0,
+ "sample_rate": 40000,
+ "filter_length": 2048,
+ "hop_length": 400,
+ "win_length": 2048,
+ "n_mel_channels": 125,
+ "mel_fmin": 0.0,
+ "mel_fmax": null
+ },
+ "model": {
+ "inter_channels": 192,
+ "hidden_channels": 192,
+ "filter_channels": 768,
+ "text_enc_hidden_dim": 768,
+ "n_heads": 2,
+ "n_layers": 6,
+ "kernel_size": 3,
+ "p_dropout": 0,
+ "resblock": "1",
+ "resblock_kernel_sizes": [
+ 3,
+ 7,
+ 11
+ ],
+ "resblock_dilation_sizes": [
+ [
+ 1,
+ 3,
+ 5
+ ],
+ [
+ 1,
+ 3,
+ 5
+ ],
+ [
+ 1,
+ 3,
+ 5
+ ]
+ ],
+ "upsample_rates": [
+ 10,
+ 10,
+ 2,
+ 2
+ ],
+ "upsample_initial_channel": 512,
+ "upsample_kernel_sizes": [
+ 16,
+ 16,
+ 4,
+ 4
+ ],
+ "use_spectral_norm": false,
+ "gin_channels": 256,
+ "spk_embed_dim": 109
+ }
+}
\ No newline at end of file
diff --git a/rvc/configs/v2/48000.json b/rvc/configs/v2/48000.json
new file mode 100644
index 0000000000000000000000000000000000000000..b616a58fe1480cc10db9ce10eaedaf5af383358b
--- /dev/null
+++ b/rvc/configs/v2/48000.json
@@ -0,0 +1,76 @@
+{
+ "train": {
+ "log_interval": 200,
+ "seed": 1234,
+ "learning_rate": 0.0001,
+ "betas": [
+ 0.8,
+ 0.99
+ ],
+ "eps": 1e-09,
+ "fp16_run": false,
+ "lr_decay": 0.999875,
+ "segment_size": 17280,
+ "c_mel": 45,
+ "c_kl": 1.0
+ },
+ "data": {
+ "max_wav_value": 32768.0,
+ "sample_rate": 48000,
+ "filter_length": 2048,
+ "hop_length": 480,
+ "win_length": 2048,
+ "n_mel_channels": 128,
+ "mel_fmin": 0.0,
+ "mel_fmax": null
+ },
+ "model": {
+ "inter_channels": 192,
+ "hidden_channels": 192,
+ "filter_channels": 768,
+ "text_enc_hidden_dim": 768,
+ "n_heads": 2,
+ "n_layers": 6,
+ "kernel_size": 3,
+ "p_dropout": 0,
+ "resblock": "1",
+ "resblock_kernel_sizes": [
+ 3,
+ 7,
+ 11
+ ],
+ "resblock_dilation_sizes": [
+ [
+ 1,
+ 3,
+ 5
+ ],
+ [
+ 1,
+ 3,
+ 5
+ ],
+ [
+ 1,
+ 3,
+ 5
+ ]
+ ],
+ "upsample_rates": [
+ 12,
+ 10,
+ 2,
+ 2
+ ],
+ "upsample_initial_channel": 512,
+ "upsample_kernel_sizes": [
+ 24,
+ 20,
+ 4,
+ 4
+ ],
+ "use_spectral_norm": false,
+ "gin_channels": 256,
+ "spk_embed_dim": 109
+ }
+}
\ No newline at end of file
diff --git a/rvc/infer/infer.py b/rvc/infer/infer.py
new file mode 100644
index 0000000000000000000000000000000000000000..e53942e6fdf67b1b7ef6fe97f4c4d19c43dc6ff8
--- /dev/null
+++ b/rvc/infer/infer.py
@@ -0,0 +1,499 @@
+import os
+import sys
+import time
+import torch
+import librosa
+import logging
+import traceback
+import numpy as np
+import soundfile as sf
+import noisereduce as nr
+from pedalboard import (
+ Pedalboard,
+ Chorus,
+ Distortion,
+ Reverb,
+ PitchShift,
+ Limiter,
+ Gain,
+ Bitcrush,
+ Clipping,
+ Compressor,
+ Delay,
+)
+
+now_dir = os.getcwd()
+sys.path.append(now_dir)
+
+from rvc.infer.pipeline import Pipeline as VC
+from rvc.lib.utils import load_audio_infer, load_embedding
+from rvc.lib.tools.split_audio import process_audio, merge_audio
+from rvc.lib.algorithm.synthesizers import Synthesizer
+from rvc.configs.config import Config
+
+logging.getLogger("httpx").setLevel(logging.WARNING)
+logging.getLogger("httpcore").setLevel(logging.WARNING)
+logging.getLogger("faiss").setLevel(logging.WARNING)
+logging.getLogger("faiss.loader").setLevel(logging.WARNING)
+
+
+class VoiceConverter:
+ """
+ A class for performing voice conversion using the Retrieval-Based Voice Conversion (RVC) method.
+ """
+
+ def __init__(self):
+ """
+ Initializes the VoiceConverter with default configuration, and sets up models and parameters.
+ """
+ self.config = Config() # Load RVC configuration
+ self.hubert_model = (
+ None # Initialize the Hubert model (for embedding extraction)
+ )
+ self.last_embedder_model = None # Last used embedder model
+ self.tgt_sr = None # Target sampling rate for the output audio
+ self.net_g = None # Generator network for voice conversion
+ self.vc = None # Voice conversion pipeline instance
+ self.cpt = None # Checkpoint for loading model weights
+ self.version = None # Model version
+ self.n_spk = None # Number of speakers in the model
+ self.use_f0 = None # Whether the model uses F0
+ self.loaded_model = None
+
+ def load_hubert(self, embedder_model: str, embedder_model_custom: str = None):
+ """
+ Loads the HuBERT model for speaker embedding extraction.
+
+ Args:
+ embedder_model (str): Path to the pre-trained HuBERT model.
+ embedder_model_custom (str): Path to the custom HuBERT model.
+ """
+ self.hubert_model = load_embedding(embedder_model, embedder_model_custom)
+ self.hubert_model.to(self.config.device)
+ self.hubert_model = (
+ self.hubert_model.half()
+ if self.config.is_half
+ else self.hubert_model.float()
+ )
+ self.hubert_model.eval()
+
+ @staticmethod
+ def remove_audio_noise(data, sr, reduction_strength=0.7):
+ """
+ Removes noise from an audio file using the NoiseReduce library.
+
+ Args:
+ data (numpy.ndarray): The audio data as a NumPy array.
+ sr (int): The sample rate of the audio data.
+ reduction_strength (float): Strength of the noise reduction. Default is 0.7.
+ """
+ try:
+ reduced_noise = nr.reduce_noise(
+ y=data, sr=sr, prop_decrease=reduction_strength
+ )
+ return reduced_noise
+ except Exception as error:
+ print(f"An error occurred removing audio noise: {error}")
+ return None
+
+ @staticmethod
+ def convert_audio_format(input_path, output_path, output_format):
+ """
+ Converts an audio file to a specified output format.
+
+ Args:
+ input_path (str): Path to the input audio file.
+ output_path (str): Path to the output audio file.
+ output_format (str): Desired audio format (e.g., "WAV", "MP3").
+ """
+ try:
+ if output_format != "WAV":
+ print(f"Converting audio to {output_format} format...")
+ audio, sample_rate = librosa.load(input_path, sr=None)
+ common_sample_rates = [
+ 8000,
+ 11025,
+ 12000,
+ 16000,
+ 22050,
+ 24000,
+ 32000,
+ 44100,
+ 48000,
+ ]
+ target_sr = min(common_sample_rates, key=lambda x: abs(x - sample_rate))
+ audio = librosa.resample(
+ audio, orig_sr=sample_rate, target_sr=target_sr
+ )
+ sf.write(output_path, audio, target_sr, format=output_format.lower())
+ return output_path
+ except Exception as error:
+ print(f"An error occurred converting the audio format: {error}")
+
+ @staticmethod
+ def post_process_audio(
+ audio_input,
+ sample_rate,
+ **kwargs,
+ ):
+ board = Pedalboard()
+ if kwargs.get("reverb", False):
+ reverb = Reverb(
+ room_size=kwargs.get("reverb_room_size", 0.5),
+ damping=kwargs.get("reverb_damping", 0.5),
+ wet_level=kwargs.get("reverb_wet_level", 0.33),
+ dry_level=kwargs.get("reverb_dry_level", 0.4),
+ width=kwargs.get("reverb_width", 1.0),
+ freeze_mode=kwargs.get("reverb_freeze_mode", 0),
+ )
+ board.append(reverb)
+ if kwargs.get("pitch_shift", False):
+ pitch_shift = PitchShift(semitones=kwargs.get("pitch_shift_semitones", 0))
+ board.append(pitch_shift)
+ if kwargs.get("limiter", False):
+ limiter = Limiter(
+ threshold_db=kwargs.get("limiter_threshold", -6),
+ release_ms=kwargs.get("limiter_release", 0.05),
+ )
+ board.append(limiter)
+ if kwargs.get("gain", False):
+ gain = Gain(gain_db=kwargs.get("gain_db", 0))
+ board.append(gain)
+ if kwargs.get("distortion", False):
+ distortion = Distortion(drive_db=kwargs.get("distortion_gain", 25))
+ board.append(distortion)
+ if kwargs.get("chorus", False):
+ chorus = Chorus(
+ rate_hz=kwargs.get("chorus_rate", 1.0),
+ depth=kwargs.get("chorus_depth", 0.25),
+ centre_delay_ms=kwargs.get("chorus_delay", 7),
+ feedback=kwargs.get("chorus_feedback", 0.0),
+ mix=kwargs.get("chorus_mix", 0.5),
+ )
+ board.append(chorus)
+ if kwargs.get("bitcrush", False):
+ bitcrush = Bitcrush(bit_depth=kwargs.get("bitcrush_bit_depth", 8))
+ board.append(bitcrush)
+ if kwargs.get("clipping", False):
+ clipping = Clipping(threshold_db=kwargs.get("clipping_threshold", 0))
+ board.append(clipping)
+ if kwargs.get("compressor", False):
+ compressor = Compressor(
+ threshold_db=kwargs.get("compressor_threshold", 0),
+ ratio=kwargs.get("compressor_ratio", 1),
+ attack_ms=kwargs.get("compressor_attack", 1.0),
+ release_ms=kwargs.get("compressor_release", 100),
+ )
+ board.append(compressor)
+ if kwargs.get("delay", False):
+ delay = Delay(
+ delay_seconds=kwargs.get("delay_seconds", 0.5),
+ feedback=kwargs.get("delay_feedback", 0.0),
+ mix=kwargs.get("delay_mix", 0.5),
+ )
+ board.append(delay)
+ return board(audio_input, sample_rate)
+
+ def convert_audio(
+ self,
+ audio_input_path: str,
+ audio_output_path: str,
+ model_path: str,
+ index_path: str,
+ pitch: int = 0,
+ f0_file: str = None,
+ f0_method: str = "rmvpe",
+ index_rate: float = 0.75,
+ volume_envelope: float = 1,
+ protect: float = 0.5,
+ hop_length: int = 128,
+ split_audio: bool = False,
+ f0_autotune: bool = False,
+ f0_autotune_strength: float = 1,
+ filter_radius: int = 3,
+ embedder_model: str = "contentvec",
+ embedder_model_custom: str = None,
+ clean_audio: bool = False,
+ clean_strength: float = 0.5,
+ export_format: str = "WAV",
+ upscale_audio: bool = False,
+ post_process: bool = False,
+ resample_sr: int = 0,
+ sid: int = 0,
+ **kwargs,
+ ):
+ """
+ Performs voice conversion on the input audio.
+
+ Args:
+ pitch (int): Key for F0 up-sampling.
+ filter_radius (int): Radius for filtering.
+ index_rate (float): Rate for index matching.
+ volume_envelope (int): RMS mix rate.
+ protect (float): Protection rate for certain audio segments.
+ hop_length (int): Hop length for audio processing.
+ f0_method (str): Method for F0 extraction.
+ audio_input_path (str): Path to the input audio file.
+ audio_output_path (str): Path to the output audio file.
+ model_path (str): Path to the voice conversion model.
+ index_path (str): Path to the index file.
+ split_audio (bool): Whether to split the audio for processing.
+ f0_autotune (bool): Whether to use F0 autotune.
+ clean_audio (bool): Whether to clean the audio.
+ clean_strength (float): Strength of the audio cleaning.
+ export_format (str): Format for exporting the audio.
+ upscale_audio (bool): Whether to upscale the audio.
+ f0_file (str): Path to the F0 file.
+ embedder_model (str): Path to the embedder model.
+ embedder_model_custom (str): Path to the custom embedder model.
+ resample_sr (int, optional): Resample sampling rate. Default is 0.
+ sid (int, optional): Speaker ID. Default is 0.
+ **kwargs: Additional keyword arguments.
+ """
+ self.get_vc(model_path, sid)
+ try:
+ start_time = time.time()
+ print(f"Converting audio '{audio_input_path}'...")
+
+ if upscale_audio == True:
+ from audio_upscaler import upscale
+
+ upscale(audio_input_path, audio_input_path)
+ audio = load_audio_infer(
+ audio_input_path,
+ 16000,
+ **kwargs,
+ )
+ audio_max = np.abs(audio).max() / 0.95
+
+ if audio_max > 1:
+ audio /= audio_max
+
+ if not self.hubert_model or embedder_model != self.last_embedder_model:
+ self.load_hubert(embedder_model, embedder_model_custom)
+ self.last_embedder_model = embedder_model
+
+ file_index = (
+ index_path.strip()
+ .strip('"')
+ .strip("\n")
+ .strip('"')
+ .strip()
+ .replace("trained", "added")
+ )
+
+ if self.tgt_sr != resample_sr >= 16000:
+ self.tgt_sr = resample_sr
+
+ if split_audio:
+ chunks, intervals = process_audio(audio, 16000)
+ print(f"Audio split into {len(chunks)} chunks for processing.")
+ else:
+ chunks = []
+ chunks.append(audio)
+
+ converted_chunks = []
+ for c in chunks:
+ audio_opt = self.vc.pipeline(
+ model=self.hubert_model,
+ net_g=self.net_g,
+ sid=sid,
+ audio=c,
+ pitch=pitch,
+ f0_method=f0_method,
+ file_index=file_index,
+ index_rate=index_rate,
+ pitch_guidance=self.use_f0,
+ filter_radius=filter_radius,
+ volume_envelope=volume_envelope,
+ version=self.version,
+ protect=protect,
+ hop_length=hop_length,
+ f0_autotune=f0_autotune,
+ f0_autotune_strength=f0_autotune_strength,
+ f0_file=f0_file,
+ )
+ converted_chunks.append(audio_opt)
+ if split_audio:
+ print(f"Converted audio chunk {len(converted_chunks)}")
+
+ if split_audio:
+ audio_opt = merge_audio(converted_chunks, intervals, 16000, self.tgt_sr)
+ else:
+ audio_opt = converted_chunks[0]
+
+ if clean_audio:
+ cleaned_audio = self.remove_audio_noise(
+ audio_opt, self.tgt_sr, clean_strength
+ )
+ if cleaned_audio is not None:
+ audio_opt = cleaned_audio
+
+ if post_process:
+ audio_opt = self.post_process_audio(
+ audio_input=audio_opt,
+ sample_rate=self.tgt_sr,
+ **kwargs,
+ )
+
+ sf.write(audio_output_path, audio_opt, self.tgt_sr, format="WAV")
+ output_path_format = audio_output_path.replace(
+ ".wav", f".{export_format.lower()}"
+ )
+ audio_output_path = self.convert_audio_format(
+ audio_output_path, output_path_format, export_format
+ )
+
+ elapsed_time = time.time() - start_time
+ print(
+ f"Conversion completed at '{audio_output_path}' in {elapsed_time:.2f} seconds."
+ )
+ except Exception as error:
+ print(f"An error occurred during audio conversion: {error}")
+ print(traceback.format_exc())
+
+ def convert_audio_batch(
+ self,
+ audio_input_paths: str,
+ audio_output_path: str,
+ **kwargs,
+ ):
+ """
+ Performs voice conversion on a batch of input audio files.
+
+ Args:
+ audio_input_paths (str): List of paths to the input audio files.
+ audio_output_path (str): Path to the output audio file.
+ resample_sr (int, optional): Resample sampling rate. Default is 0.
+ sid (int, optional): Speaker ID. Default is 0.
+ **kwargs: Additional keyword arguments.
+ """
+ pid = os.getpid()
+ try:
+ with open(
+ os.path.join(now_dir, "assets", "infer_pid.txt"), "w"
+ ) as pid_file:
+ pid_file.write(str(pid))
+ start_time = time.time()
+ print(f"Converting audio batch '{audio_input_paths}'...")
+ audio_files = [
+ f
+ for f in os.listdir(audio_input_paths)
+ if f.endswith(
+ (
+ "wav",
+ "mp3",
+ "flac",
+ "ogg",
+ "opus",
+ "m4a",
+ "mp4",
+ "aac",
+ "alac",
+ "wma",
+ "aiff",
+ "webm",
+ "ac3",
+ )
+ )
+ ]
+ print(f"Detected {len(audio_files)} audio files for inference.")
+ for a in audio_files:
+ new_input = os.path.join(audio_input_paths, a)
+ new_output = os.path.splitext(a)[0] + "_output.wav"
+ new_output = os.path.join(audio_output_path, new_output)
+ if os.path.exists(new_output):
+ continue
+ self.convert_audio(
+ audio_input_path=new_input,
+ audio_output_path=new_output,
+ **kwargs,
+ )
+ print(f"Conversion completed at '{audio_input_paths}'.")
+ elapsed_time = time.time() - start_time
+ print(f"Batch conversion completed in {elapsed_time:.2f} seconds.")
+ except Exception as error:
+ print(f"An error occurred during audio batch conversion: {error}")
+ print(traceback.format_exc())
+ finally:
+ os.remove(os.path.join(now_dir, "assets", "infer_pid.txt"))
+
+ def get_vc(self, weight_root, sid):
+ """
+ Loads the voice conversion model and sets up the pipeline.
+
+ Args:
+ weight_root (str): Path to the model weights.
+ sid (int): Speaker ID.
+ """
+ if sid == "" or sid == []:
+ self.cleanup_model()
+ if torch.cuda.is_available():
+ torch.cuda.empty_cache()
+
+ if not self.loaded_model or self.loaded_model != weight_root:
+ self.load_model(weight_root)
+ if self.cpt is not None:
+ self.setup_network()
+ self.setup_vc_instance()
+ self.loaded_model = weight_root
+
+ def cleanup_model(self):
+ """
+ Cleans up the model and releases resources.
+ """
+ if self.hubert_model is not None:
+ del self.net_g, self.n_spk, self.vc, self.hubert_model, self.tgt_sr
+ self.hubert_model = self.net_g = self.n_spk = self.vc = self.tgt_sr = None
+ if torch.cuda.is_available():
+ torch.cuda.empty_cache()
+
+ del self.net_g, self.cpt
+ if torch.cuda.is_available():
+ torch.cuda.empty_cache()
+ self.cpt = None
+
+ def load_model(self, weight_root):
+ """
+ Loads the model weights from the specified path.
+
+ Args:
+ weight_root (str): Path to the model weights.
+ """
+ self.cpt = (
+ torch.load(weight_root, map_location="cpu")
+ if os.path.isfile(weight_root)
+ else None
+ )
+
+ def setup_network(self):
+ """
+ Sets up the network configuration based on the loaded checkpoint.
+ """
+ if self.cpt is not None:
+ self.tgt_sr = self.cpt["config"][-1]
+ self.cpt["config"][-3] = self.cpt["weight"]["emb_g.weight"].shape[0]
+ self.use_f0 = self.cpt.get("f0", 1)
+
+ self.version = self.cpt.get("version", "v1")
+ self.text_enc_hidden_dim = 768 if self.version == "v2" else 256
+ self.net_g = Synthesizer(
+ *self.cpt["config"],
+ use_f0=self.use_f0,
+ text_enc_hidden_dim=self.text_enc_hidden_dim,
+ is_half=self.config.is_half,
+ )
+ del self.net_g.enc_q
+ self.net_g.load_state_dict(self.cpt["weight"], strict=False)
+ self.net_g.eval().to(self.config.device)
+ self.net_g = (
+ self.net_g.half() if self.config.is_half else self.net_g.float()
+ )
+
+ def setup_vc_instance(self):
+ """
+ Sets up the voice conversion pipeline instance based on the target sampling rate and configuration.
+ """
+ if self.cpt is not None:
+ self.vc = VC(self.tgt_sr, self.config)
+ self.n_spk = self.cpt["config"][-3]
diff --git a/rvc/infer/pipeline.py b/rvc/infer/pipeline.py
new file mode 100644
index 0000000000000000000000000000000000000000..0f570ee2edee0e9eb217fc2585a902589f9ed508
--- /dev/null
+++ b/rvc/infer/pipeline.py
@@ -0,0 +1,708 @@
+import os
+import gc
+import re
+import sys
+import torch
+import torch.nn.functional as F
+import torchcrepe
+import faiss
+import librosa
+import numpy as np
+from scipy import signal
+from torch import Tensor
+
+now_dir = os.getcwd()
+sys.path.append(now_dir)
+
+from rvc.lib.predictors.RMVPE import RMVPE0Predictor
+from rvc.lib.predictors.FCPE import FCPEF0Predictor
+
+import logging
+
+logging.getLogger("faiss").setLevel(logging.WARNING)
+
+# Constants for high-pass filter
+FILTER_ORDER = 5
+CUTOFF_FREQUENCY = 48 # Hz
+SAMPLE_RATE = 16000 # Hz
+bh, ah = signal.butter(
+ N=FILTER_ORDER, Wn=CUTOFF_FREQUENCY, btype="high", fs=SAMPLE_RATE
+)
+
+input_audio_path2wav = {}
+
+
+class AudioProcessor:
+ """
+ A class for processing audio signals, specifically for adjusting RMS levels.
+ """
+
+ def change_rms(
+ source_audio: np.ndarray,
+ source_rate: int,
+ target_audio: np.ndarray,
+ target_rate: int,
+ rate: float,
+ ) -> np.ndarray:
+ """
+ Adjust the RMS level of target_audio to match the RMS of source_audio, with a given blending rate.
+
+ Args:
+ source_audio: The source audio signal as a NumPy array.
+ source_rate: The sampling rate of the source audio.
+ target_audio: The target audio signal to adjust.
+ target_rate: The sampling rate of the target audio.
+ rate: The blending rate between the source and target RMS levels.
+ """
+ # Calculate RMS of both audio data
+ rms1 = librosa.feature.rms(
+ y=source_audio,
+ frame_length=source_rate // 2 * 2,
+ hop_length=source_rate // 2,
+ )
+ rms2 = librosa.feature.rms(
+ y=target_audio,
+ frame_length=target_rate // 2 * 2,
+ hop_length=target_rate // 2,
+ )
+
+ # Interpolate RMS to match target audio length
+ rms1 = F.interpolate(
+ torch.from_numpy(rms1).float().unsqueeze(0),
+ size=target_audio.shape[0],
+ mode="linear",
+ ).squeeze()
+ rms2 = F.interpolate(
+ torch.from_numpy(rms2).float().unsqueeze(0),
+ size=target_audio.shape[0],
+ mode="linear",
+ ).squeeze()
+ rms2 = torch.maximum(rms2, torch.zeros_like(rms2) + 1e-6)
+
+ # Adjust target audio RMS based on the source audio RMS
+ adjusted_audio = (
+ target_audio
+ * (torch.pow(rms1, 1 - rate) * torch.pow(rms2, rate - 1)).numpy()
+ )
+ return adjusted_audio
+
+
+class Autotune:
+ """
+ A class for applying autotune to a given fundamental frequency (F0) contour.
+ """
+
+ def __init__(self, ref_freqs):
+ """
+ Initializes the Autotune class with a set of reference frequencies.
+
+ Args:
+ ref_freqs: A list of reference frequencies representing musical notes.
+ """
+ self.ref_freqs = ref_freqs
+ self.note_dict = self.ref_freqs # No interpolation needed
+
+ def autotune_f0(self, f0, f0_autotune_strength):
+ """
+ Autotunes a given F0 contour by snapping each frequency to the closest reference frequency.
+
+ Args:
+ f0: The input F0 contour as a NumPy array.
+ """
+ autotuned_f0 = np.zeros_like(f0)
+ for i, freq in enumerate(f0):
+ closest_note = min(self.note_dict, key=lambda x: abs(x - freq))
+ autotuned_f0[i] = freq + (closest_note - freq) * f0_autotune_strength
+ return autotuned_f0
+
+
+class Pipeline:
+ """
+ The main pipeline class for performing voice conversion, including preprocessing, F0 estimation,
+ voice conversion using a model, and post-processing.
+ """
+
+ def __init__(self, tgt_sr, config):
+ """
+ Initializes the Pipeline class with target sampling rate and configuration parameters.
+
+ Args:
+ tgt_sr: The target sampling rate for the output audio.
+ config: A configuration object containing various parameters for the pipeline.
+ """
+ self.x_pad = config.x_pad
+ self.x_query = config.x_query
+ self.x_center = config.x_center
+ self.x_max = config.x_max
+ self.is_half = config.is_half
+ self.sample_rate = 16000
+ self.window = 160
+ self.t_pad = self.sample_rate * self.x_pad
+ self.t_pad_tgt = tgt_sr * self.x_pad
+ self.t_pad2 = self.t_pad * 2
+ self.t_query = self.sample_rate * self.x_query
+ self.t_center = self.sample_rate * self.x_center
+ self.t_max = self.sample_rate * self.x_max
+ self.time_step = self.window / self.sample_rate * 1000
+ self.f0_min = 50
+ self.f0_max = 1100
+ self.f0_mel_min = 1127 * np.log(1 + self.f0_min / 700)
+ self.f0_mel_max = 1127 * np.log(1 + self.f0_max / 700)
+ self.device = config.device
+ self.ref_freqs = [
+ 49.00, # G1
+ 51.91, # G#1 / Ab1
+ 55.00, # A1
+ 58.27, # A#1 / Bb1
+ 61.74, # B1
+ 65.41, # C2
+ 69.30, # C#2 / Db2
+ 73.42, # D2
+ 77.78, # D#2 / Eb2
+ 82.41, # E2
+ 87.31, # F2
+ 92.50, # F#2 / Gb2
+ 98.00, # G2
+ 103.83, # G#2 / Ab2
+ 110.00, # A2
+ 116.54, # A#2 / Bb2
+ 123.47, # B2
+ 130.81, # C3
+ 138.59, # C#3 / Db3
+ 146.83, # D3
+ 155.56, # D#3 / Eb3
+ 164.81, # E3
+ 174.61, # F3
+ 185.00, # F#3 / Gb3
+ 196.00, # G3
+ 207.65, # G#3 / Ab3
+ 220.00, # A3
+ 233.08, # A#3 / Bb3
+ 246.94, # B3
+ 261.63, # C4
+ 277.18, # C#4 / Db4
+ 293.66, # D4
+ 311.13, # D#4 / Eb4
+ 329.63, # E4
+ 349.23, # F4
+ 369.99, # F#4 / Gb4
+ 392.00, # G4
+ 415.30, # G#4 / Ab4
+ 440.00, # A4
+ 466.16, # A#4 / Bb4
+ 493.88, # B4
+ 523.25, # C5
+ 554.37, # C#5 / Db5
+ 587.33, # D5
+ 622.25, # D#5 / Eb5
+ 659.25, # E5
+ 698.46, # F5
+ 739.99, # F#5 / Gb5
+ 783.99, # G5
+ 830.61, # G#5 / Ab5
+ 880.00, # A5
+ 932.33, # A#5 / Bb5
+ 987.77, # B5
+ 1046.50, # C6
+ ]
+ self.autotune = Autotune(self.ref_freqs)
+ self.note_dict = self.autotune.note_dict
+ self.model_rmvpe = RMVPE0Predictor(
+ os.path.join("rvc", "models", "predictors", "rmvpe.pt"),
+ is_half=self.is_half,
+ device=self.device,
+ )
+
+ def get_f0_crepe(
+ self,
+ x,
+ f0_min,
+ f0_max,
+ p_len,
+ hop_length,
+ model="full",
+ ):
+ """
+ Estimates the fundamental frequency (F0) of a given audio signal using the Crepe model.
+
+ Args:
+ x: The input audio signal as a NumPy array.
+ f0_min: Minimum F0 value to consider.
+ f0_max: Maximum F0 value to consider.
+ p_len: Desired length of the F0 output.
+ hop_length: Hop length for the Crepe model.
+ model: Crepe model size to use ("full" or "tiny").
+ """
+ x = x.astype(np.float32)
+ x /= np.quantile(np.abs(x), 0.999)
+ audio = torch.from_numpy(x).to(self.device, copy=True)
+ audio = torch.unsqueeze(audio, dim=0)
+ if audio.ndim == 2 and audio.shape[0] > 1:
+ audio = torch.mean(audio, dim=0, keepdim=True).detach()
+ audio = audio.detach()
+ pitch: Tensor = torchcrepe.predict(
+ audio,
+ self.sample_rate,
+ hop_length,
+ f0_min,
+ f0_max,
+ model,
+ batch_size=hop_length * 2,
+ device=self.device,
+ pad=True,
+ )
+ p_len = p_len or x.shape[0] // hop_length
+ source = np.array(pitch.squeeze(0).cpu().float().numpy())
+ source[source < 0.001] = np.nan
+ target = np.interp(
+ np.arange(0, len(source) * p_len, len(source)) / p_len,
+ np.arange(0, len(source)),
+ source,
+ )
+ f0 = np.nan_to_num(target)
+ return f0
+
+ def get_f0_hybrid(
+ self,
+ methods_str,
+ x,
+ f0_min,
+ f0_max,
+ p_len,
+ hop_length,
+ ):
+ """
+ Estimates the fundamental frequency (F0) using a hybrid approach combining multiple methods.
+
+ Args:
+ methods_str: A string specifying the methods to combine (e.g., "hybrid[crepe+rmvpe]").
+ x: The input audio signal as a NumPy array.
+ f0_min: Minimum F0 value to consider.
+ f0_max: Maximum F0 value to consider.
+ p_len: Desired length of the F0 output.
+ hop_length: Hop length for F0 estimation methods.
+ """
+ methods_str = re.search("hybrid\[(.+)\]", methods_str)
+ if methods_str:
+ methods = [method.strip() for method in methods_str.group(1).split("+")]
+ f0_computation_stack = []
+ print(f"Calculating f0 pitch estimations for methods {str(methods)}")
+ x = x.astype(np.float32)
+ x /= np.quantile(np.abs(x), 0.999)
+ for method in methods:
+ f0 = None
+ if method == "crepe":
+ f0 = self.get_f0_crepe_computation(
+ x, f0_min, f0_max, p_len, int(hop_length)
+ )
+ elif method == "rmvpe":
+ f0 = self.model_rmvpe.infer_from_audio(x, thred=0.03)
+ f0 = f0[1:]
+ elif method == "fcpe":
+ self.model_fcpe = FCPEF0Predictor(
+ os.path.join("rvc", "models", "predictors", "fcpe.pt"),
+ f0_min=int(f0_min),
+ f0_max=int(f0_max),
+ dtype=torch.float32,
+ device=self.device,
+ sample_rate=self.sample_rate,
+ threshold=0.03,
+ )
+ f0 = self.model_fcpe.compute_f0(x, p_len=p_len)
+ del self.model_fcpe
+ gc.collect()
+ f0_computation_stack.append(f0)
+
+ f0_computation_stack = [fc for fc in f0_computation_stack if fc is not None]
+ f0_median_hybrid = None
+ if len(f0_computation_stack) == 1:
+ f0_median_hybrid = f0_computation_stack[0]
+ else:
+ f0_median_hybrid = np.nanmedian(f0_computation_stack, axis=0)
+ return f0_median_hybrid
+
+ def get_f0(
+ self,
+ input_audio_path,
+ x,
+ p_len,
+ pitch,
+ f0_method,
+ filter_radius,
+ hop_length,
+ f0_autotune,
+ f0_autotune_strength,
+ inp_f0=None,
+ ):
+ """
+ Estimates the fundamental frequency (F0) of a given audio signal using various methods.
+
+ Args:
+ input_audio_path: Path to the input audio file.
+ x: The input audio signal as a NumPy array.
+ p_len: Desired length of the F0 output.
+ pitch: Key to adjust the pitch of the F0 contour.
+ f0_method: Method to use for F0 estimation (e.g., "crepe").
+ filter_radius: Radius for median filtering the F0 contour.
+ hop_length: Hop length for F0 estimation methods.
+ f0_autotune: Whether to apply autotune to the F0 contour.
+ inp_f0: Optional input F0 contour to use instead of estimating.
+ """
+ global input_audio_path2wav
+ if f0_method == "crepe":
+ f0 = self.get_f0_crepe(x, self.f0_min, self.f0_max, p_len, int(hop_length))
+ elif f0_method == "crepe-tiny":
+ f0 = self.get_f0_crepe(
+ x, self.f0_min, self.f0_max, p_len, int(hop_length), "tiny"
+ )
+ elif f0_method == "rmvpe":
+ f0 = self.model_rmvpe.infer_from_audio(x, thred=0.03)
+ elif f0_method == "fcpe":
+ self.model_fcpe = FCPEF0Predictor(
+ os.path.join("rvc", "models", "predictors", "fcpe.pt"),
+ f0_min=int(self.f0_min),
+ f0_max=int(self.f0_max),
+ dtype=torch.float32,
+ device=self.device,
+ sample_rate=self.sample_rate,
+ threshold=0.03,
+ )
+ f0 = self.model_fcpe.compute_f0(x, p_len=p_len)
+ del self.model_fcpe
+ gc.collect()
+ elif "hybrid" in f0_method:
+ input_audio_path2wav[input_audio_path] = x.astype(np.double)
+ f0 = self.get_f0_hybrid(
+ f0_method,
+ x,
+ self.f0_min,
+ self.f0_max,
+ p_len,
+ hop_length,
+ )
+
+ if f0_autotune is True:
+ f0 = Autotune.autotune_f0(self, f0, f0_autotune_strength)
+
+ f0 *= pow(2, pitch / 12)
+ tf0 = self.sample_rate // self.window
+ if inp_f0 is not None:
+ delta_t = np.round(
+ (inp_f0[:, 0].max() - inp_f0[:, 0].min()) * tf0 + 1
+ ).astype("int16")
+ replace_f0 = np.interp(
+ list(range(delta_t)), inp_f0[:, 0] * 100, inp_f0[:, 1]
+ )
+ shape = f0[self.x_pad * tf0 : self.x_pad * tf0 + len(replace_f0)].shape[0]
+ f0[self.x_pad * tf0 : self.x_pad * tf0 + len(replace_f0)] = replace_f0[
+ :shape
+ ]
+ f0bak = f0.copy()
+ f0_mel = 1127 * np.log(1 + f0 / 700)
+ f0_mel[f0_mel > 0] = (f0_mel[f0_mel > 0] - self.f0_mel_min) * 254 / (
+ self.f0_mel_max - self.f0_mel_min
+ ) + 1
+ f0_mel[f0_mel <= 1] = 1
+ f0_mel[f0_mel > 255] = 255
+ f0_coarse = np.rint(f0_mel).astype(np.int)
+
+ return f0_coarse, f0bak
+
+ def voice_conversion(
+ self,
+ model,
+ net_g,
+ sid,
+ audio0,
+ pitch,
+ pitchf,
+ index,
+ big_npy,
+ index_rate,
+ version,
+ protect,
+ ):
+ """
+ Performs voice conversion on a given audio segment.
+
+ Args:
+ model: The feature extractor model.
+ net_g: The generative model for synthesizing speech.
+ sid: Speaker ID for the target voice.
+ audio0: The input audio segment.
+ pitch: Quantized F0 contour for pitch guidance.
+ pitchf: Original F0 contour for pitch guidance.
+ index: FAISS index for speaker embedding retrieval.
+ big_npy: Speaker embeddings stored in a NumPy array.
+ index_rate: Blending rate for speaker embedding retrieval.
+ version: Model version ("v1" or "v2").
+ protect: Protection level for preserving the original pitch.
+ """
+ with torch.no_grad():
+ pitch_guidance = pitch != None and pitchf != None
+ # prepare source audio
+ feats = (
+ torch.from_numpy(audio0).half()
+ if self.is_half
+ else torch.from_numpy(audio0).float()
+ )
+ feats = feats.mean(-1) if feats.dim() == 2 else feats
+ assert feats.dim() == 1, feats.dim()
+ feats = feats.view(1, -1).to(self.device)
+ # extract features
+ feats = model(feats)["last_hidden_state"]
+ feats = (
+ model.final_proj(feats[0]).unsqueeze(0) if version == "v1" else feats
+ )
+ # make a copy for pitch guidance and protection
+ feats0 = feats.clone() if pitch_guidance else None
+ if (
+ index
+ ): # set by parent function, only true if index is available, loaded, and index rate > 0
+ feats = self._retrieve_speaker_embeddings(
+ feats, index, big_npy, index_rate
+ )
+ # feature upsampling
+ feats = F.interpolate(feats.permute(0, 2, 1), scale_factor=2).permute(
+ 0, 2, 1
+ )
+ # adjust the length if the audio is short
+ p_len = min(audio0.shape[0] // self.window, feats.shape[1])
+ if pitch_guidance:
+ feats0 = F.interpolate(feats0.permute(0, 2, 1), scale_factor=2).permute(
+ 0, 2, 1
+ )
+ pitch, pitchf = pitch[:, :p_len], pitchf[:, :p_len]
+ # Pitch protection blending
+ if protect < 0.5:
+ pitchff = pitchf.clone()
+ pitchff[pitchf > 0] = 1
+ pitchff[pitchf < 1] = protect
+ feats = feats * pitchff.unsqueeze(-1) + feats0 * (
+ 1 - pitchff.unsqueeze(-1)
+ )
+ feats = feats.to(feats0.dtype)
+ else:
+ pitch, pitchf = None, None
+ p_len = torch.tensor([p_len], device=self.device).long()
+ audio1 = (
+ (net_g.infer(feats, p_len, pitch, pitchf, sid)[0][0, 0])
+ .data.cpu()
+ .float()
+ .numpy()
+ )
+ # clean up
+ del feats, feats0, p_len
+ if torch.cuda.is_available():
+ torch.cuda.empty_cache()
+ return audio1
+
+ def _retrieve_speaker_embeddings(self, feats, index, big_npy, index_rate):
+ npy = feats[0].cpu().numpy()
+ npy = npy.astype("float32") if self.is_half else npy
+ score, ix = index.search(npy, k=8)
+ weight = np.square(1 / score)
+ weight /= weight.sum(axis=1, keepdims=True)
+ npy = np.sum(big_npy[ix] * np.expand_dims(weight, axis=2), axis=1)
+ npy = npy.astype("float16") if self.is_half else npy
+ feats = (
+ torch.from_numpy(npy).unsqueeze(0).to(self.device) * index_rate
+ + (1 - index_rate) * feats
+ )
+ return feats
+
+ def pipeline(
+ self,
+ model,
+ net_g,
+ sid,
+ audio,
+ pitch,
+ f0_method,
+ file_index,
+ index_rate,
+ pitch_guidance,
+ filter_radius,
+ volume_envelope,
+ version,
+ protect,
+ hop_length,
+ f0_autotune,
+ f0_autotune_strength,
+ f0_file,
+ ):
+ """
+ The main pipeline function for performing voice conversion.
+
+ Args:
+ model: The feature extractor model.
+ net_g: The generative model for synthesizing speech.
+ sid: Speaker ID for the target voice.
+ audio: The input audio signal.
+ input_audio_path: Path to the input audio file.
+ pitch: Key to adjust the pitch of the F0 contour.
+ f0_method: Method to use for F0 estimation.
+ file_index: Path to the FAISS index file for speaker embedding retrieval.
+ index_rate: Blending rate for speaker embedding retrieval.
+ pitch_guidance: Whether to use pitch guidance during voice conversion.
+ filter_radius: Radius for median filtering the F0 contour.
+ tgt_sr: Target sampling rate for the output audio.
+ resample_sr: Resampling rate for the output audio.
+ volume_envelope: Blending rate for adjusting the RMS level of the output audio.
+ version: Model version.
+ protect: Protection level for preserving the original pitch.
+ hop_length: Hop length for F0 estimation methods.
+ f0_autotune: Whether to apply autotune to the F0 contour.
+ f0_file: Path to a file containing an F0 contour to use.
+ """
+ if file_index != "" and os.path.exists(file_index) and index_rate > 0:
+ try:
+ index = faiss.read_index(file_index)
+ big_npy = index.reconstruct_n(0, index.ntotal)
+ except Exception as error:
+ print(f"An error occurred reading the FAISS index: {error}")
+ index = big_npy = None
+ else:
+ index = big_npy = None
+ audio = signal.filtfilt(bh, ah, audio)
+ audio_pad = np.pad(audio, (self.window // 2, self.window // 2), mode="reflect")
+ opt_ts = []
+ if audio_pad.shape[0] > self.t_max:
+ audio_sum = np.zeros_like(audio)
+ for i in range(self.window):
+ audio_sum += audio_pad[i : i - self.window]
+ for t in range(self.t_center, audio.shape[0], self.t_center):
+ opt_ts.append(
+ t
+ - self.t_query
+ + np.where(
+ np.abs(audio_sum[t - self.t_query : t + self.t_query])
+ == np.abs(audio_sum[t - self.t_query : t + self.t_query]).min()
+ )[0][0]
+ )
+ s = 0
+ audio_opt = []
+ t = None
+ audio_pad = np.pad(audio, (self.t_pad, self.t_pad), mode="reflect")
+ p_len = audio_pad.shape[0] // self.window
+ inp_f0 = None
+ if hasattr(f0_file, "name"):
+ try:
+ with open(f0_file.name, "r") as f:
+ lines = f.read().strip("\n").split("\n")
+ inp_f0 = []
+ for line in lines:
+ inp_f0.append([float(i) for i in line.split(",")])
+ inp_f0 = np.array(inp_f0, dtype="float32")
+ except Exception as error:
+ print(f"An error occurred reading the F0 file: {error}")
+ sid = torch.tensor(sid, device=self.device).unsqueeze(0).long()
+ if pitch_guidance:
+ pitch, pitchf = self.get_f0(
+ "input_audio_path", # questionable purpose of making a key for an array
+ audio_pad,
+ p_len,
+ pitch,
+ f0_method,
+ filter_radius,
+ hop_length,
+ f0_autotune,
+ f0_autotune_strength,
+ inp_f0,
+ )
+ pitch = pitch[:p_len]
+ pitchf = pitchf[:p_len]
+ if self.device == "mps":
+ pitchf = pitchf.astype(np.float32)
+ pitch = torch.tensor(pitch, device=self.device).unsqueeze(0).long()
+ pitchf = torch.tensor(pitchf, device=self.device).unsqueeze(0).float()
+ for t in opt_ts:
+ t = t // self.window * self.window
+ if pitch_guidance:
+ audio_opt.append(
+ self.voice_conversion(
+ model,
+ net_g,
+ sid,
+ audio_pad[s : t + self.t_pad2 + self.window],
+ pitch[:, s // self.window : (t + self.t_pad2) // self.window],
+ pitchf[:, s // self.window : (t + self.t_pad2) // self.window],
+ index,
+ big_npy,
+ index_rate,
+ version,
+ protect,
+ )[self.t_pad_tgt : -self.t_pad_tgt]
+ )
+ else:
+ audio_opt.append(
+ self.voice_conversion(
+ model,
+ net_g,
+ sid,
+ audio_pad[s : t + self.t_pad2 + self.window],
+ None,
+ None,
+ index,
+ big_npy,
+ index_rate,
+ version,
+ protect,
+ )[self.t_pad_tgt : -self.t_pad_tgt]
+ )
+ s = t
+ if pitch_guidance:
+ audio_opt.append(
+ self.voice_conversion(
+ model,
+ net_g,
+ sid,
+ audio_pad[t:],
+ pitch[:, t // self.window :] if t is not None else pitch,
+ pitchf[:, t // self.window :] if t is not None else pitchf,
+ index,
+ big_npy,
+ index_rate,
+ version,
+ protect,
+ )[self.t_pad_tgt : -self.t_pad_tgt]
+ )
+ else:
+ audio_opt.append(
+ self.voice_conversion(
+ model,
+ net_g,
+ sid,
+ audio_pad[t:],
+ None,
+ None,
+ index,
+ big_npy,
+ index_rate,
+ version,
+ protect,
+ )[self.t_pad_tgt : -self.t_pad_tgt]
+ )
+ audio_opt = np.concatenate(audio_opt)
+ if volume_envelope != 1:
+ audio_opt = AudioProcessor.change_rms(
+ audio, self.sample_rate, audio_opt, self.sample_rate, volume_envelope
+ )
+ # if resample_sr >= self.sample_rate and tgt_sr != resample_sr:
+ # audio_opt = librosa.resample(
+ # audio_opt, orig_sr=tgt_sr, target_sr=resample_sr
+ # )
+ # audio_max = np.abs(audio_opt).max() / 0.99
+ # max_int16 = 32768
+ # if audio_max > 1:
+ # max_int16 /= audio_max
+ # audio_opt = (audio_opt * 32768).astype(np.int16)
+ audio_max = np.abs(audio_opt).max() / 0.99
+ if audio_max > 1:
+ audio_opt /= audio_max
+ if pitch_guidance:
+ del pitch, pitchf
+ del sid
+ if torch.cuda.is_available():
+ torch.cuda.empty_cache()
+ return audio_opt
diff --git a/rvc/lib/algorithm/__init__.py b/rvc/lib/algorithm/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/rvc/lib/algorithm/attentions.py b/rvc/lib/algorithm/attentions.py
new file mode 100644
index 0000000000000000000000000000000000000000..c4f47f8b9abfdf3e38521bda0b449e00dee553fe
--- /dev/null
+++ b/rvc/lib/algorithm/attentions.py
@@ -0,0 +1,292 @@
+import math
+import torch
+
+from rvc.lib.algorithm.commons import convert_pad_shape
+
+
+class MultiHeadAttention(torch.nn.Module):
+ """
+ Multi-head attention module with optional relative positional encoding and proximal bias.
+
+ Args:
+ channels (int): Number of input channels.
+ out_channels (int): Number of output channels.
+ n_heads (int): Number of attention heads.
+ p_dropout (float, optional): Dropout probability. Defaults to 0.0.
+ window_size (int, optional): Window size for relative positional encoding. Defaults to None.
+ heads_share (bool, optional): Whether to share relative positional embeddings across heads. Defaults to True.
+ block_length (int, optional): Block length for local attention. Defaults to None.
+ proximal_bias (bool, optional): Whether to use proximal bias in self-attention. Defaults to False.
+ proximal_init (bool, optional): Whether to initialize the key projection weights the same as query projection weights. Defaults to False.
+ """
+
+ def __init__(
+ self,
+ channels,
+ out_channels,
+ n_heads,
+ p_dropout=0.0,
+ window_size=None,
+ heads_share=True,
+ block_length=None,
+ proximal_bias=False,
+ proximal_init=False,
+ ):
+ super().__init__()
+ assert channels % n_heads == 0
+
+ self.channels = channels
+ self.out_channels = out_channels
+ self.n_heads = n_heads
+ self.p_dropout = p_dropout
+ self.window_size = window_size
+ self.heads_share = heads_share
+ self.block_length = block_length
+ self.proximal_bias = proximal_bias
+ self.proximal_init = proximal_init
+ self.attn = None
+
+ self.k_channels = channels // n_heads
+ self.conv_q = torch.nn.Conv1d(channels, channels, 1)
+ self.conv_k = torch.nn.Conv1d(channels, channels, 1)
+ self.conv_v = torch.nn.Conv1d(channels, channels, 1)
+ self.conv_o = torch.nn.Conv1d(channels, out_channels, 1)
+ self.drop = torch.nn.Dropout(p_dropout)
+
+ if window_size is not None:
+ n_heads_rel = 1 if heads_share else n_heads
+ rel_stddev = self.k_channels**-0.5
+ self.emb_rel_k = torch.nn.Parameter(
+ torch.randn(n_heads_rel, window_size * 2 + 1, self.k_channels)
+ * rel_stddev
+ )
+ self.emb_rel_v = torch.nn.Parameter(
+ torch.randn(n_heads_rel, window_size * 2 + 1, self.k_channels)
+ * rel_stddev
+ )
+
+ torch.nn.init.xavier_uniform_(self.conv_q.weight)
+ torch.nn.init.xavier_uniform_(self.conv_k.weight)
+ torch.nn.init.xavier_uniform_(self.conv_v.weight)
+ if proximal_init:
+ with torch.no_grad():
+ self.conv_k.weight.copy_(self.conv_q.weight)
+ self.conv_k.bias.copy_(self.conv_q.bias)
+
+ def forward(self, x, c, attn_mask=None):
+ q = self.conv_q(x)
+ k = self.conv_k(c)
+ v = self.conv_v(c)
+
+ x, self.attn = self.attention(q, k, v, mask=attn_mask)
+
+ x = self.conv_o(x)
+ return x
+
+ def attention(self, query, key, value, mask=None):
+ # reshape [b, d, t] -> [b, n_h, t, d_k]
+ b, d, t_s, t_t = (*key.size(), query.size(2))
+ query = query.view(b, self.n_heads, self.k_channels, t_t).transpose(2, 3)
+ key = key.view(b, self.n_heads, self.k_channels, t_s).transpose(2, 3)
+ value = value.view(b, self.n_heads, self.k_channels, t_s).transpose(2, 3)
+
+ scores = torch.matmul(query / math.sqrt(self.k_channels), key.transpose(-2, -1))
+ if self.window_size is not None:
+ assert (
+ t_s == t_t
+ ), "Relative attention is only available for self-attention."
+ key_relative_embeddings = self._get_relative_embeddings(self.emb_rel_k, t_s)
+ rel_logits = self._matmul_with_relative_keys(
+ query / math.sqrt(self.k_channels), key_relative_embeddings
+ )
+ scores_local = self._relative_position_to_absolute_position(rel_logits)
+ scores = scores + scores_local
+ if self.proximal_bias:
+ assert t_s == t_t, "Proximal bias is only available for self-attention."
+ scores = scores + self._attention_bias_proximal(t_s).to(
+ device=scores.device, dtype=scores.dtype
+ )
+ if mask is not None:
+ scores = scores.masked_fill(mask == 0, -1e4)
+ if self.block_length is not None:
+ assert (
+ t_s == t_t
+ ), "Local attention is only available for self-attention."
+ block_mask = (
+ torch.ones_like(scores)
+ .triu(-self.block_length)
+ .tril(self.block_length)
+ )
+ scores = scores.masked_fill(block_mask == 0, -1e4)
+ p_attn = torch.nn.functional.softmax(scores, dim=-1) # [b, n_h, t_t, t_s]
+ p_attn = self.drop(p_attn)
+ output = torch.matmul(p_attn, value)
+ if self.window_size is not None:
+ relative_weights = self._absolute_position_to_relative_position(p_attn)
+ value_relative_embeddings = self._get_relative_embeddings(
+ self.emb_rel_v, t_s
+ )
+ output = output + self._matmul_with_relative_values(
+ relative_weights, value_relative_embeddings
+ )
+ output = (
+ output.transpose(2, 3).contiguous().view(b, d, t_t)
+ ) # [b, n_h, t_t, d_k] -> [b, d, t_t]
+ return output, p_attn
+
+ def _matmul_with_relative_values(self, x, y):
+ """
+ x: [b, h, l, m]
+ y: [h or 1, m, d]
+ ret: [b, h, l, d]
+ """
+ ret = torch.matmul(x, y.unsqueeze(0))
+ return ret
+
+ def _matmul_with_relative_keys(self, x, y):
+ """
+ x: [b, h, l, d]
+ y: [h or 1, m, d]
+ ret: [b, h, l, m]
+ """
+ ret = torch.matmul(x, y.unsqueeze(0).transpose(-2, -1))
+ return ret
+
+ def _get_relative_embeddings(self, relative_embeddings, length):
+ # Pad first before slice to avoid using cond ops.
+ pad_length = max(length - (self.window_size + 1), 0)
+ slice_start_position = max((self.window_size + 1) - length, 0)
+ slice_end_position = slice_start_position + 2 * length - 1
+ if pad_length > 0:
+ padded_relative_embeddings = torch.nn.functional.pad(
+ relative_embeddings,
+ convert_pad_shape([[0, 0], [pad_length, pad_length], [0, 0]]),
+ )
+ else:
+ padded_relative_embeddings = relative_embeddings
+ used_relative_embeddings = padded_relative_embeddings[
+ :, slice_start_position:slice_end_position
+ ]
+ return used_relative_embeddings
+
+ def _relative_position_to_absolute_position(self, x):
+ """
+ x: [b, h, l, 2*l-1]
+ ret: [b, h, l, l]
+ """
+ batch, heads, length, _ = x.size()
+
+ # Concat columns of pad to shift from relative to absolute indexing.
+ x = torch.nn.functional.pad(
+ x, convert_pad_shape([[0, 0], [0, 0], [0, 0], [0, 1]])
+ )
+
+ # Concat extra elements so to add up to shape (len+1, 2*len-1).
+ x_flat = x.view([batch, heads, length * 2 * length])
+ x_flat = torch.nn.functional.pad(
+ x_flat, convert_pad_shape([[0, 0], [0, 0], [0, length - 1]])
+ )
+
+ # Reshape and slice out the padded elements.
+ x_final = x_flat.view([batch, heads, length + 1, 2 * length - 1])[
+ :, :, :length, length - 1 :
+ ]
+ return x_final
+
+ def _absolute_position_to_relative_position(self, x):
+ """
+ x: [b, h, l, l]
+ ret: [b, h, l, 2*l-1]
+ """
+ batch, heads, length, _ = x.size()
+ # padd along column
+ x = torch.nn.functional.pad(
+ x, convert_pad_shape([[0, 0], [0, 0], [0, 0], [0, length - 1]])
+ )
+ x_flat = x.view([batch, heads, length**2 + length * (length - 1)])
+ # add 0's in the beginning that will skew the elements after reshape
+ x_flat = torch.nn.functional.pad(
+ x_flat, convert_pad_shape([[0, 0], [0, 0], [length, 0]])
+ )
+ x_final = x_flat.view([batch, heads, length, 2 * length])[:, :, :, 1:]
+ return x_final
+
+ def _attention_bias_proximal(self, length):
+ """Bias for self-attention to encourage attention to close positions.
+ Args:
+ length: an integer scalar.
+ """
+ r = torch.arange(length, dtype=torch.float32)
+ diff = torch.unsqueeze(r, 0) - torch.unsqueeze(r, 1)
+ return torch.unsqueeze(torch.unsqueeze(-torch.log1p(torch.abs(diff)), 0), 0)
+
+
+class FFN(torch.nn.Module):
+ """
+ Feed-forward network module.
+
+ Args:
+ in_channels (int): Number of input channels.
+ out_channels (int): Number of output channels.
+ filter_channels (int): Number of filter channels in the convolution layers.
+ kernel_size (int): Kernel size of the convolution layers.
+ p_dropout (float, optional): Dropout probability. Defaults to 0.0.
+ activation (str, optional): Activation function to use. Defaults to None.
+ causal (bool, optional): Whether to use causal padding in the convolution layers. Defaults to False.
+ """
+
+ def __init__(
+ self,
+ in_channels,
+ out_channels,
+ filter_channels,
+ kernel_size,
+ p_dropout=0.0,
+ activation=None,
+ causal=False,
+ ):
+ super().__init__()
+ self.in_channels = in_channels
+ self.out_channels = out_channels
+ self.filter_channels = filter_channels
+ self.kernel_size = kernel_size
+ self.p_dropout = p_dropout
+ self.activation = activation
+ self.causal = causal
+
+ if causal:
+ self.padding = self._causal_padding
+ else:
+ self.padding = self._same_padding
+
+ self.conv_1 = torch.nn.Conv1d(in_channels, filter_channels, kernel_size)
+ self.conv_2 = torch.nn.Conv1d(filter_channels, out_channels, kernel_size)
+ self.drop = torch.nn.Dropout(p_dropout)
+
+ def forward(self, x, x_mask):
+ x = self.conv_1(self.padding(x * x_mask))
+ if self.activation == "gelu":
+ x = x * torch.sigmoid(1.702 * x)
+ else:
+ x = torch.relu(x)
+ x = self.drop(x)
+ x = self.conv_2(self.padding(x * x_mask))
+ return x * x_mask
+
+ def _causal_padding(self, x):
+ if self.kernel_size == 1:
+ return x
+ pad_l = self.kernel_size - 1
+ pad_r = 0
+ padding = [[0, 0], [0, 0], [pad_l, pad_r]]
+ x = torch.nn.functional.pad(x, convert_pad_shape(padding))
+ return x
+
+ def _same_padding(self, x):
+ if self.kernel_size == 1:
+ return x
+ pad_l = (self.kernel_size - 1) // 2
+ pad_r = self.kernel_size // 2
+ padding = [[0, 0], [0, 0], [pad_l, pad_r]]
+ x = torch.nn.functional.pad(x, convert_pad_shape(padding))
+ return x
diff --git a/rvc/lib/algorithm/commons.py b/rvc/lib/algorithm/commons.py
new file mode 100644
index 0000000000000000000000000000000000000000..2524abc417f0746731f0ca848f2823ec23f098a5
--- /dev/null
+++ b/rvc/lib/algorithm/commons.py
@@ -0,0 +1,207 @@
+import math
+import torch
+from typing import List, Optional
+
+
+def init_weights(m, mean=0.0, std=0.01):
+ """
+ Initialize the weights of a module.
+
+ Args:
+ m: The module to initialize.
+ mean: The mean of the normal distribution.
+ std: The standard deviation of the normal distribution.
+ """
+ classname = m.__class__.__name__
+ if classname.find("Conv") != -1:
+ m.weight.data.normal_(mean, std)
+
+
+def get_padding(kernel_size, dilation=1):
+ """
+ Calculate the padding needed for a convolution.
+
+ Args:
+ kernel_size: The size of the kernel.
+ dilation: The dilation of the convolution.
+ """
+ return int((kernel_size * dilation - dilation) / 2)
+
+
+def convert_pad_shape(pad_shape):
+ """
+ Convert the pad shape to a list of integers.
+
+ Args:
+ pad_shape: The pad shape..
+ """
+ l = pad_shape[::-1]
+ pad_shape = [item for sublist in l for item in sublist]
+ return pad_shape
+
+
+def kl_divergence(m_p, logs_p, m_q, logs_q):
+ """
+ Calculate the KL divergence between two distributions.
+
+ Args:
+ m_p: The mean of the first distribution.
+ logs_p: The log of the standard deviation of the first distribution.
+ m_q: The mean of the second distribution.
+ logs_q: The log of the standard deviation of the second distribution.
+ """
+ kl = (logs_q - logs_p) - 0.5
+ kl += (
+ 0.5 * (torch.exp(2.0 * logs_p) + ((m_p - m_q) ** 2)) * torch.exp(-2.0 * logs_q)
+ )
+ return kl
+
+
+def slice_segments(
+ x: torch.Tensor, ids_str: torch.Tensor, segment_size: int = 4, dim: int = 2
+):
+ """
+ Slice segments from a tensor, handling tensors with different numbers of dimensions.
+
+ Args:
+ x (torch.Tensor): The tensor to slice.
+ ids_str (torch.Tensor): The starting indices of the segments.
+ segment_size (int, optional): The size of each segment. Defaults to 4.
+ dim (int, optional): The dimension to slice across (2D or 3D tensors). Defaults to 2.
+ """
+ if dim == 2:
+ ret = torch.zeros_like(x[:, :segment_size])
+ elif dim == 3:
+ ret = torch.zeros_like(x[:, :, :segment_size])
+
+ for i in range(x.size(0)):
+ idx_str = ids_str[i].item()
+ idx_end = idx_str + segment_size
+ if dim == 2:
+ ret[i] = x[i, idx_str:idx_end]
+ else:
+ ret[i] = x[i, :, idx_str:idx_end]
+
+ return ret
+
+
+def rand_slice_segments(x, x_lengths=None, segment_size=4):
+ """
+ Randomly slice segments from a tensor.
+
+ Args:
+ x: The tensor to slice.
+ x_lengths: The lengths of the sequences.
+ segment_size: The size of each segment.
+ """
+ b, d, t = x.size()
+ if x_lengths is None:
+ x_lengths = t
+ ids_str_max = x_lengths - segment_size + 1
+ ids_str = (torch.rand([b]).to(device=x.device) * ids_str_max).to(dtype=torch.long)
+ ret = slice_segments(x, ids_str, segment_size, dim=3)
+ return ret, ids_str
+
+
+def get_timing_signal_1d(length, channels, min_timescale=1.0, max_timescale=1.0e4):
+ """
+ Generate a 1D timing signal.
+
+ Args:
+ length: The length of the signal.
+ channels: The number of channels of the signal.
+ min_timescale: The minimum timescale.
+ max_timescale: The maximum timescale.
+ """
+ position = torch.arange(length, dtype=torch.float)
+ num_timescales = channels // 2
+ log_timescale_increment = math.log(float(max_timescale) / float(min_timescale)) / (
+ num_timescales - 1
+ )
+ inv_timescales = min_timescale * torch.exp(
+ torch.arange(num_timescales, dtype=torch.float) * -log_timescale_increment
+ )
+ scaled_time = position.unsqueeze(0) * inv_timescales.unsqueeze(1)
+ signal = torch.cat([torch.sin(scaled_time), torch.cos(scaled_time)], 0)
+ signal = torch.nn.functional.pad(signal, [0, 0, 0, channels % 2])
+ signal = signal.view(1, channels, length)
+ return signal
+
+
+def subsequent_mask(length):
+ """
+ Generate a subsequent mask.
+
+ Args:
+ length: The length of the sequence.
+ """
+ mask = torch.tril(torch.ones(length, length)).unsqueeze(0).unsqueeze(0)
+ return mask
+
+
+@torch.jit.script
+def fused_add_tanh_sigmoid_multiply(input_a, input_b, n_channels):
+ """
+ Fused add tanh sigmoid multiply operation.
+
+ Args:
+ input_a: The first input tensor.
+ input_b: The second input tensor.
+ n_channels: The number of channels.
+ """
+ n_channels_int = n_channels[0]
+ in_act = input_a + input_b
+ t_act = torch.tanh(in_act[:, :n_channels_int, :])
+ s_act = torch.sigmoid(in_act[:, n_channels_int:, :])
+ acts = t_act * s_act
+ return acts
+
+
+def convert_pad_shape(pad_shape: List[List[int]]) -> List[int]:
+ """
+ Convert the pad shape to a list of integers.
+
+ Args:
+ pad_shape: The pad shape.
+ """
+ return torch.tensor(pad_shape).flip(0).reshape(-1).int().tolist()
+
+
+def sequence_mask(length: torch.Tensor, max_length: Optional[int] = None):
+ """
+ Generate a sequence mask.
+
+ Args:
+ length: The lengths of the sequences.
+ max_length: The maximum length of the sequences.
+ """
+ if max_length is None:
+ max_length = length.max()
+ x = torch.arange(max_length, dtype=length.dtype, device=length.device)
+ return x.unsqueeze(0) < length.unsqueeze(1)
+
+
+def clip_grad_value(parameters, clip_value, norm_type=2):
+ """
+ Clip the gradients of a list of parameters.
+
+ Args:
+ parameters: The list of parameters to clip.
+ clip_value: The maximum value of the gradients.
+ norm_type: The type of norm to use for clipping.
+ """
+ if isinstance(parameters, torch.Tensor):
+ parameters = [parameters]
+ parameters = list(filter(lambda p: p.grad is not None, parameters))
+ norm_type = float(norm_type)
+ if clip_value is not None:
+ clip_value = float(clip_value)
+
+ total_norm = 0
+ for p in parameters:
+ param_norm = p.grad.data.norm(norm_type)
+ total_norm += param_norm.item() ** norm_type
+ if clip_value is not None:
+ p.grad.data.clamp_(min=-clip_value, max=clip_value)
+ total_norm = total_norm ** (1.0 / norm_type)
+ return total_norm
diff --git a/rvc/lib/algorithm/discriminators.py b/rvc/lib/algorithm/discriminators.py
new file mode 100644
index 0000000000000000000000000000000000000000..23f8c689464d9fcac3f07f7a04dc241627d926d7
--- /dev/null
+++ b/rvc/lib/algorithm/discriminators.py
@@ -0,0 +1,199 @@
+import torch
+from torch.nn.utils.parametrizations import spectral_norm, weight_norm
+
+from rvc.lib.algorithm.commons import get_padding
+from rvc.lib.algorithm.residuals import LRELU_SLOPE
+
+
+class MultiPeriodDiscriminator(torch.nn.Module):
+ """
+ Multi-period discriminator.
+
+ This class implements a multi-period discriminator, which is used to
+ discriminate between real and fake audio signals. The discriminator
+ is composed of a series of convolutional layers that are applied to
+ the input signal at different periods.
+
+ Args:
+ use_spectral_norm (bool): Whether to use spectral normalization.
+ Defaults to False.
+ """
+
+ def __init__(self, use_spectral_norm=False):
+ super(MultiPeriodDiscriminator, self).__init__()
+ periods = [2, 3, 5, 7, 11, 17]
+ self.discriminators = torch.nn.ModuleList(
+ [DiscriminatorS(use_spectral_norm=use_spectral_norm)]
+ + [DiscriminatorP(p, use_spectral_norm=use_spectral_norm) for p in periods]
+ )
+
+ def forward(self, y, y_hat):
+ """
+ Forward pass of the multi-period discriminator.
+
+ Args:
+ y (torch.Tensor): Real audio signal.
+ y_hat (torch.Tensor): Fake audio signal.
+ """
+ y_d_rs, y_d_gs, fmap_rs, fmap_gs = [], [], [], []
+ for d in self.discriminators:
+ y_d_r, fmap_r = d(y)
+ y_d_g, fmap_g = d(y_hat)
+ y_d_rs.append(y_d_r)
+ y_d_gs.append(y_d_g)
+ fmap_rs.append(fmap_r)
+ fmap_gs.append(fmap_g)
+
+ return y_d_rs, y_d_gs, fmap_rs, fmap_gs
+
+
+class MultiPeriodDiscriminatorV2(torch.nn.Module):
+ """
+ Multi-period discriminator V2.
+
+ This class implements a multi-period discriminator V2, which is used
+ to discriminate between real and fake audio signals. The discriminator
+ is composed of a series of convolutional layers that are applied to
+ the input signal at different periods.
+
+ Args:
+ use_spectral_norm (bool): Whether to use spectral normalization.
+ Defaults to False.
+ """
+
+ def __init__(self, use_spectral_norm=False):
+ super(MultiPeriodDiscriminatorV2, self).__init__()
+ periods = [2, 3, 5, 7, 11, 17, 23, 37]
+ self.discriminators = torch.nn.ModuleList(
+ [DiscriminatorS(use_spectral_norm=use_spectral_norm)]
+ + [DiscriminatorP(p, use_spectral_norm=use_spectral_norm) for p in periods]
+ )
+
+ def forward(self, y, y_hat):
+ """
+ Forward pass of the multi-period discriminator V2.
+
+ Args:
+ y (torch.Tensor): Real audio signal.
+ y_hat (torch.Tensor): Fake audio signal.
+ """
+ y_d_rs, y_d_gs, fmap_rs, fmap_gs = [], [], [], []
+ for d in self.discriminators:
+ y_d_r, fmap_r = d(y)
+ y_d_g, fmap_g = d(y_hat)
+ y_d_rs.append(y_d_r)
+ y_d_gs.append(y_d_g)
+ fmap_rs.append(fmap_r)
+ fmap_gs.append(fmap_g)
+
+ return y_d_rs, y_d_gs, fmap_rs, fmap_gs
+
+
+class DiscriminatorS(torch.nn.Module):
+ """
+ Discriminator for the short-term component.
+
+ This class implements a discriminator for the short-term component
+ of the audio signal. The discriminator is composed of a series of
+ convolutional layers that are applied to the input signal.
+ """
+
+ def __init__(self, use_spectral_norm=False):
+ super(DiscriminatorS, self).__init__()
+ norm_f = spectral_norm if use_spectral_norm else weight_norm
+ self.convs = torch.nn.ModuleList(
+ [
+ norm_f(torch.nn.Conv1d(1, 16, 15, 1, padding=7)),
+ norm_f(torch.nn.Conv1d(16, 64, 41, 4, groups=4, padding=20)),
+ norm_f(torch.nn.Conv1d(64, 256, 41, 4, groups=16, padding=20)),
+ norm_f(torch.nn.Conv1d(256, 1024, 41, 4, groups=64, padding=20)),
+ norm_f(torch.nn.Conv1d(1024, 1024, 41, 4, groups=256, padding=20)),
+ norm_f(torch.nn.Conv1d(1024, 1024, 5, 1, padding=2)),
+ ]
+ )
+ self.conv_post = norm_f(torch.nn.Conv1d(1024, 1, 3, 1, padding=1))
+ self.lrelu = torch.nn.LeakyReLU(LRELU_SLOPE)
+
+ def forward(self, x):
+ """
+ Forward pass of the discriminator.
+
+ Args:
+ x (torch.Tensor): Input audio signal.
+ """
+ fmap = []
+ for conv in self.convs:
+ x = self.lrelu(conv(x))
+ fmap.append(x)
+ x = self.conv_post(x)
+ fmap.append(x)
+ x = torch.flatten(x, 1, -1)
+ return x, fmap
+
+
+class DiscriminatorP(torch.nn.Module):
+ """
+ Discriminator for the long-term component.
+
+ This class implements a discriminator for the long-term component
+ of the audio signal. The discriminator is composed of a series of
+ convolutional layers that are applied to the input signal at a given
+ period.
+
+ Args:
+ period (int): Period of the discriminator.
+ kernel_size (int): Kernel size of the convolutional layers.
+ Defaults to 5.
+ stride (int): Stride of the convolutional layers. Defaults to 3.
+ use_spectral_norm (bool): Whether to use spectral normalization.
+ Defaults to False.
+ """
+
+ def __init__(self, period, kernel_size=5, stride=3, use_spectral_norm=False):
+ super(DiscriminatorP, self).__init__()
+ self.period = period
+ norm_f = spectral_norm if use_spectral_norm else weight_norm
+
+ in_channels = [1, 32, 128, 512, 1024]
+ out_channels = [32, 128, 512, 1024, 1024]
+
+ self.convs = torch.nn.ModuleList(
+ [
+ norm_f(
+ torch.nn.Conv2d(
+ in_ch,
+ out_ch,
+ (kernel_size, 1),
+ (stride, 1),
+ padding=(get_padding(kernel_size, 1), 0),
+ )
+ )
+ for in_ch, out_ch in zip(in_channels, out_channels)
+ ]
+ )
+
+ self.conv_post = norm_f(torch.nn.Conv2d(1024, 1, (3, 1), 1, padding=(1, 0)))
+ self.lrelu = torch.nn.LeakyReLU(LRELU_SLOPE)
+
+ def forward(self, x):
+ """
+ Forward pass of the discriminator.
+
+ Args:
+ x (torch.Tensor): Input audio signal.
+ """
+ fmap = []
+ b, c, t = x.shape
+ if t % self.period != 0:
+ n_pad = self.period - (t % self.period)
+ x = torch.nn.functional.pad(x, (0, n_pad), "reflect")
+ x = x.view(b, c, -1, self.period)
+
+ for conv in self.convs:
+ x = self.lrelu(conv(x))
+ fmap.append(x)
+
+ x = self.conv_post(x)
+ fmap.append(x)
+ x = torch.flatten(x, 1, -1)
+ return x, fmap
diff --git a/rvc/lib/algorithm/encoders.py b/rvc/lib/algorithm/encoders.py
new file mode 100644
index 0000000000000000000000000000000000000000..d0823a47e8e7fc7592e4c82a0b1fa7796af169a0
--- /dev/null
+++ b/rvc/lib/algorithm/encoders.py
@@ -0,0 +1,219 @@
+import math
+import torch
+from typing import Optional
+
+from rvc.lib.algorithm.commons import sequence_mask
+from rvc.lib.algorithm.modules import WaveNet
+from rvc.lib.algorithm.normalization import LayerNorm
+from rvc.lib.algorithm.attentions import FFN, MultiHeadAttention
+
+
+class Encoder(torch.nn.Module):
+ """
+ Encoder module for the Transformer model.
+
+ Args:
+ hidden_channels (int): Number of hidden channels in the encoder.
+ filter_channels (int): Number of filter channels in the feed-forward network.
+ n_heads (int): Number of attention heads.
+ n_layers (int): Number of encoder layers.
+ kernel_size (int, optional): Kernel size of the convolution layers in the feed-forward network. Defaults to 1.
+ p_dropout (float, optional): Dropout probability. Defaults to 0.0.
+ window_size (int, optional): Window size for relative positional encoding. Defaults to 10.
+ """
+
+ def __init__(
+ self,
+ hidden_channels,
+ filter_channels,
+ n_heads,
+ n_layers,
+ kernel_size=1,
+ p_dropout=0.0,
+ window_size=10,
+ **kwargs
+ ):
+ super().__init__()
+ self.hidden_channels = hidden_channels
+ self.filter_channels = filter_channels
+ self.n_heads = n_heads
+ self.n_layers = n_layers
+ self.kernel_size = kernel_size
+ self.p_dropout = p_dropout
+ self.window_size = window_size
+
+ self.drop = torch.nn.Dropout(p_dropout)
+ self.attn_layers = torch.nn.ModuleList()
+ self.norm_layers_1 = torch.nn.ModuleList()
+ self.ffn_layers = torch.nn.ModuleList()
+ self.norm_layers_2 = torch.nn.ModuleList()
+ for i in range(self.n_layers):
+ self.attn_layers.append(
+ MultiHeadAttention(
+ hidden_channels,
+ hidden_channels,
+ n_heads,
+ p_dropout=p_dropout,
+ window_size=window_size,
+ )
+ )
+ self.norm_layers_1.append(LayerNorm(hidden_channels))
+ self.ffn_layers.append(
+ FFN(
+ hidden_channels,
+ hidden_channels,
+ filter_channels,
+ kernel_size,
+ p_dropout=p_dropout,
+ )
+ )
+ self.norm_layers_2.append(LayerNorm(hidden_channels))
+
+ def forward(self, x, x_mask):
+ attn_mask = x_mask.unsqueeze(2) * x_mask.unsqueeze(-1)
+ x = x * x_mask
+ for i in range(self.n_layers):
+ y = self.attn_layers[i](x, x, attn_mask)
+ y = self.drop(y)
+ x = self.norm_layers_1[i](x + y)
+
+ y = self.ffn_layers[i](x, x_mask)
+ y = self.drop(y)
+ x = self.norm_layers_2[i](x + y)
+ x = x * x_mask
+ return x
+
+
+class TextEncoder(torch.nn.Module):
+ """Text Encoder with configurable embedding dimension.
+
+ Args:
+ out_channels (int): Output channels of the encoder.
+ hidden_channels (int): Hidden channels of the encoder.
+ filter_channels (int): Filter channels of the encoder.
+ n_heads (int): Number of attention heads.
+ n_layers (int): Number of encoder layers.
+ kernel_size (int): Kernel size of the convolutional layers.
+ p_dropout (float): Dropout probability.
+ embedding_dim (int): Embedding dimension for phone embeddings (v1 = 256, v2 = 768).
+ f0 (bool, optional): Whether to use F0 embedding. Defaults to True.
+ """
+
+ def __init__(
+ self,
+ out_channels,
+ hidden_channels,
+ filter_channels,
+ n_heads,
+ n_layers,
+ kernel_size,
+ p_dropout,
+ embedding_dim,
+ f0=True,
+ ):
+ super(TextEncoder, self).__init__()
+ self.out_channels = out_channels
+ self.hidden_channels = hidden_channels
+ self.filter_channels = filter_channels
+ self.n_heads = n_heads
+ self.n_layers = n_layers
+ self.kernel_size = kernel_size
+ self.p_dropout = float(p_dropout)
+ self.emb_phone = torch.nn.Linear(embedding_dim, hidden_channels)
+ self.lrelu = torch.nn.LeakyReLU(0.1, inplace=True)
+ if f0:
+ self.emb_pitch = torch.nn.Embedding(256, hidden_channels)
+ self.encoder = Encoder(
+ hidden_channels,
+ filter_channels,
+ n_heads,
+ n_layers,
+ kernel_size,
+ float(p_dropout),
+ )
+ self.proj = torch.nn.Conv1d(hidden_channels, out_channels * 2, 1)
+
+ def forward(
+ self, phone: torch.Tensor, pitch: Optional[torch.Tensor], lengths: torch.Tensor
+ ):
+ if pitch is None:
+ x = self.emb_phone(phone)
+ else:
+ x = self.emb_phone(phone) + self.emb_pitch(pitch)
+ x = x * math.sqrt(self.hidden_channels) # [b, t, h]
+ x = self.lrelu(x)
+ x = torch.transpose(x, 1, -1) # [b, h, t]
+ x_mask = torch.unsqueeze(sequence_mask(lengths, x.size(2)), 1).to(x.dtype)
+ x = self.encoder(x * x_mask, x_mask)
+ stats = self.proj(x) * x_mask
+
+ m, logs = torch.split(stats, self.out_channels, dim=1)
+ return m, logs, x_mask
+
+
+class PosteriorEncoder(torch.nn.Module):
+ """Posterior Encoder for inferring latent representation.
+
+ Args:
+ in_channels (int): Number of channels in the input.
+ out_channels (int): Number of channels in the output.
+ hidden_channels (int): Number of hidden channels in the encoder.
+ kernel_size (int): Kernel size of the convolutional layers.
+ dilation_rate (int): Dilation rate of the convolutional layers.
+ n_layers (int): Number of layers in the encoder.
+ gin_channels (int, optional): Number of channels for the global conditioning input. Defaults to 0.
+ """
+
+ def __init__(
+ self,
+ in_channels,
+ out_channels,
+ hidden_channels,
+ kernel_size,
+ dilation_rate,
+ n_layers,
+ gin_channels=0,
+ ):
+ super(PosteriorEncoder, self).__init__()
+ self.in_channels = in_channels
+ self.out_channels = out_channels
+ self.hidden_channels = hidden_channels
+ self.kernel_size = kernel_size
+ self.dilation_rate = dilation_rate
+ self.n_layers = n_layers
+ self.gin_channels = gin_channels
+
+ self.pre = torch.nn.Conv1d(in_channels, hidden_channels, 1)
+ self.enc = WaveNet(
+ hidden_channels,
+ kernel_size,
+ dilation_rate,
+ n_layers,
+ gin_channels=gin_channels,
+ )
+ self.proj = torch.nn.Conv1d(hidden_channels, out_channels * 2, 1)
+
+ def forward(
+ self, x: torch.Tensor, x_lengths: torch.Tensor, g: Optional[torch.Tensor] = None
+ ):
+ x_mask = torch.unsqueeze(sequence_mask(x_lengths, x.size(2)), 1).to(x.dtype)
+ x = self.pre(x) * x_mask
+ x = self.enc(x, x_mask, g=g)
+ stats = self.proj(x) * x_mask
+ m, logs = torch.split(stats, self.out_channels, dim=1)
+ z = (m + torch.randn_like(m) * torch.exp(logs)) * x_mask
+ return z, m, logs, x_mask
+
+ def remove_weight_norm(self):
+ """Removes weight normalization from the encoder."""
+ self.enc.remove_weight_norm()
+
+ def __prepare_scriptable__(self):
+ """Prepares the module for scripting."""
+ for hook in self.enc._forward_pre_hooks.values():
+ if (
+ hook.__module__ == "torch.nn.utils.parametrizations.weight_norm"
+ and hook.__class__.__name__ == "WeightNorm"
+ ):
+ torch.nn.utils.remove_weight_norm(self.enc)
+ return self
diff --git a/rvc/lib/algorithm/generators.py b/rvc/lib/algorithm/generators.py
new file mode 100644
index 0000000000000000000000000000000000000000..e08023de97f9f361781d7af7ff566ac3d2e66be3
--- /dev/null
+++ b/rvc/lib/algorithm/generators.py
@@ -0,0 +1,199 @@
+import torch
+from torch.nn.utils import remove_weight_norm
+from torch.nn.utils.parametrizations import weight_norm
+from typing import Optional
+
+from rvc.lib.algorithm.residuals import LRELU_SLOPE, ResBlock1, ResBlock2
+from rvc.lib.algorithm.commons import init_weights
+
+
+class Generator(torch.nn.Module):
+ """Generator for synthesizing audio. Optimized for performance and quality.
+
+ Args:
+ initial_channel (int): Number of channels in the initial convolutional layer.
+ resblock (str): Type of residual block to use (1 or 2).
+ resblock_kernel_sizes (list): Kernel sizes of the residual blocks.
+ resblock_dilation_sizes (list): Dilation rates of the residual blocks.
+ upsample_rates (list): Upsampling rates.
+ upsample_initial_channel (int): Number of channels in the initial upsampling layer.
+ upsample_kernel_sizes (list): Kernel sizes of the upsampling layers.
+ gin_channels (int, optional): Number of channels for the global conditioning input. Defaults to 0.
+ """
+
+ def __init__(
+ self,
+ initial_channel,
+ resblock,
+ resblock_kernel_sizes,
+ resblock_dilation_sizes,
+ upsample_rates,
+ upsample_initial_channel,
+ upsample_kernel_sizes,
+ gin_channels=0,
+ ):
+ super(Generator, self).__init__()
+ self.num_kernels = len(resblock_kernel_sizes)
+ self.num_upsamples = len(upsample_rates)
+ self.conv_pre = torch.nn.Conv1d(
+ initial_channel, upsample_initial_channel, 7, 1, padding=3
+ )
+ resblock = ResBlock1 if resblock == "1" else ResBlock2
+
+ self.ups = torch.nn.ModuleList()
+ self.resblocks = torch.nn.ModuleList()
+
+ for i, (u, k) in enumerate(zip(upsample_rates, upsample_kernel_sizes)):
+ self.ups.append(
+ weight_norm(
+ torch.nn.ConvTranspose1d(
+ upsample_initial_channel // (2**i),
+ upsample_initial_channel // (2 ** (i + 1)),
+ k,
+ u,
+ padding=(k - u) // 2,
+ )
+ )
+ )
+ ch = upsample_initial_channel // (2 ** (i + 1))
+ for j, (k, d) in enumerate(
+ zip(resblock_kernel_sizes, resblock_dilation_sizes)
+ ):
+ self.resblocks.append(resblock(ch, k, d))
+
+ self.conv_post = torch.nn.Conv1d(ch, 1, 7, 1, padding=3, bias=False)
+ self.ups.apply(init_weights)
+
+ if gin_channels != 0:
+ self.cond = torch.nn.Conv1d(gin_channels, upsample_initial_channel, 1)
+
+ def forward(self, x: torch.Tensor, g: Optional[torch.Tensor] = None):
+ x = self.conv_pre(x)
+ if g is not None:
+ x = x + self.cond(g)
+
+ for i in range(self.num_upsamples):
+ x = torch.nn.functional.leaky_relu(x, LRELU_SLOPE)
+ x = self.ups[i](x)
+ xs = None
+ for j in range(self.num_kernels):
+ if xs == None:
+ xs = self.resblocks[i * self.num_kernels + j](x)
+ else:
+ xs += self.resblocks[i * self.num_kernels + j](x)
+ x = xs / self.num_kernels
+
+ x = torch.nn.functional.leaky_relu(x)
+ x = self.conv_post(x)
+ x = torch.tanh(x)
+
+ return x
+
+ def __prepare_scriptable__(self):
+ """Prepares the module for scripting."""
+ for l in self.ups_and_resblocks:
+ for hook in l._forward_pre_hooks.values():
+ if (
+ hook.__module__ == "torch.nn.utils.parametrizations.weight_norm"
+ and hook.__class__.__name__ == "WeightNorm"
+ ):
+ torch.nn.utils.remove_weight_norm(l)
+ return self
+
+ def remove_weight_norm(self):
+ """Removes weight normalization from the upsampling and residual blocks."""
+ for l in self.ups:
+ remove_weight_norm(l)
+ for l in self.resblocks:
+ l.remove_weight_norm()
+
+
+class SineGen(torch.nn.Module):
+ """Sine wave generator.
+
+ Args:
+ samp_rate (int): Sampling rate in Hz.
+ harmonic_num (int, optional): Number of harmonic overtones. Defaults to 0.
+ sine_amp (float, optional): Amplitude of sine waveform. Defaults to 0.1.
+ noise_std (float, optional): Standard deviation of Gaussian noise. Defaults to 0.003.
+ voiced_threshold (float, optional): F0 threshold for voiced/unvoiced classification. Defaults to 0.
+ flag_for_pulse (bool, optional): Whether this SineGen is used inside PulseGen. Defaults to False.
+ """
+
+ def __init__(
+ self,
+ samp_rate,
+ harmonic_num=0,
+ sine_amp=0.1,
+ noise_std=0.003,
+ voiced_threshold=0,
+ flag_for_pulse=False,
+ ):
+ super(SineGen, self).__init__()
+ self.sine_amp = sine_amp
+ self.noise_std = noise_std
+ self.harmonic_num = harmonic_num
+ self.dim = self.harmonic_num + 1
+ self.sample_rate = samp_rate
+ self.voiced_threshold = voiced_threshold
+
+ def _f02uv(self, f0):
+ """Converts F0 to voiced/unvoiced signal.
+
+ Args:
+ f0 (torch.Tensor): F0 tensor with shape (batch_size, length, 1)..
+ """
+ uv = torch.ones_like(f0)
+ uv = uv * (f0 > self.voiced_threshold)
+ return uv
+
+ def forward(self, f0: torch.Tensor, upp: int):
+ """Generates sine waves.
+
+ Args:
+ f0 (torch.Tensor): F0 tensor with shape (batch_size, length, 1).
+ upp (int): Upsampling factor.
+ """
+ with torch.no_grad():
+ f0 = f0[:, None].transpose(1, 2)
+ f0_buf = torch.zeros(f0.shape[0], f0.shape[1], self.dim, device=f0.device)
+ f0_buf[:, :, 0] = f0[:, :, 0]
+ f0_buf[:, :, 1:] = (
+ f0_buf[:, :, 0:1]
+ * torch.arange(2, self.harmonic_num + 2, device=f0.device)[
+ None, None, :
+ ]
+ )
+ rad_values = (f0_buf / float(self.sample_rate)) % 1
+ rand_ini = torch.rand(
+ f0_buf.shape[0], f0_buf.shape[2], device=f0_buf.device
+ )
+ rand_ini[:, 0] = 0
+ rad_values[:, 0, :] = rad_values[:, 0, :] + rand_ini
+ tmp_over_one = torch.cumsum(rad_values, 1)
+ tmp_over_one *= upp
+ tmp_over_one = torch.nn.functional.interpolate(
+ tmp_over_one.transpose(2, 1),
+ scale_factor=float(upp),
+ mode="linear",
+ align_corners=True,
+ ).transpose(2, 1)
+ rad_values = torch.nn.functional.interpolate(
+ rad_values.transpose(2, 1), scale_factor=float(upp), mode="nearest"
+ ).transpose(2, 1)
+ tmp_over_one %= 1
+ tmp_over_one_idx = (tmp_over_one[:, 1:, :] - tmp_over_one[:, :-1, :]) < 0
+ cumsum_shift = torch.zeros_like(rad_values)
+ cumsum_shift[:, 1:, :] = tmp_over_one_idx * -1.0
+ sine_waves = torch.sin(
+ torch.cumsum(rad_values + cumsum_shift, dim=1) * 2 * torch.pi
+ )
+ sine_waves = sine_waves * self.sine_amp
+ uv = self._f02uv(f0)
+ uv = torch.nn.functional.interpolate(
+ uv.transpose(2, 1), scale_factor=float(upp), mode="nearest"
+ ).transpose(2, 1)
+ noise_amp = uv * self.noise_std + (1 - uv) * self.sine_amp / 3
+ noise = noise_amp * torch.randn_like(sine_waves)
+ sine_waves = sine_waves * uv + noise
+ return sine_waves, uv, noise
diff --git a/rvc/lib/algorithm/modules.py b/rvc/lib/algorithm/modules.py
new file mode 100644
index 0000000000000000000000000000000000000000..1038356d2a09c780a15f943d4a79c3fe88478570
--- /dev/null
+++ b/rvc/lib/algorithm/modules.py
@@ -0,0 +1,115 @@
+import torch
+from rvc.lib.algorithm.commons import fused_add_tanh_sigmoid_multiply
+
+
+class WaveNet(torch.nn.Module):
+ """WaveNet residual blocks as used in WaveGlow
+
+ Args:
+ hidden_channels (int): Number of hidden channels.
+ kernel_size (int): Size of the convolutional kernel.
+ dilation_rate (int): Dilation rate of the convolution.
+ n_layers (int): Number of convolutional layers.
+ gin_channels (int, optional): Number of conditioning channels. Defaults to 0.
+ p_dropout (float, optional): Dropout probability. Defaults to 0.
+ """
+
+ def __init__(
+ self,
+ hidden_channels,
+ kernel_size,
+ dilation_rate,
+ n_layers,
+ gin_channels=0,
+ p_dropout=0,
+ ):
+ super(WaveNet, self).__init__()
+ assert kernel_size % 2 == 1
+ self.hidden_channels = hidden_channels
+ self.kernel_size = (kernel_size,)
+ self.dilation_rate = dilation_rate
+ self.n_layers = n_layers
+ self.gin_channels = gin_channels
+ self.p_dropout = p_dropout
+
+ self.in_layers = torch.nn.ModuleList()
+ self.res_skip_layers = torch.nn.ModuleList()
+ self.drop = torch.nn.Dropout(p_dropout)
+
+ if gin_channels != 0:
+ cond_layer = torch.nn.Conv1d(
+ gin_channels, 2 * hidden_channels * n_layers, 1
+ )
+ self.cond_layer = torch.nn.utils.parametrizations.weight_norm(
+ cond_layer, name="weight"
+ )
+
+ dilations = [dilation_rate**i for i in range(n_layers)]
+ paddings = [(kernel_size * d - d) // 2 for d in dilations]
+
+ for i in range(n_layers):
+ in_layer = torch.nn.Conv1d(
+ hidden_channels,
+ 2 * hidden_channels,
+ kernel_size,
+ dilation=dilations[i],
+ padding=paddings[i],
+ )
+ in_layer = torch.nn.utils.parametrizations.weight_norm(
+ in_layer, name="weight"
+ )
+ self.in_layers.append(in_layer)
+
+ res_skip_channels = (
+ hidden_channels if i == n_layers - 1 else 2 * hidden_channels
+ )
+
+ res_skip_layer = torch.nn.Conv1d(hidden_channels, res_skip_channels, 1)
+ res_skip_layer = torch.nn.utils.parametrizations.weight_norm(
+ res_skip_layer, name="weight"
+ )
+ self.res_skip_layers.append(res_skip_layer)
+
+ def forward(self, x, x_mask, g=None, **kwargs):
+ """Forward pass.
+
+ Args:
+ x (torch.Tensor): Input tensor of shape (batch_size, hidden_channels, time_steps).
+ x_mask (torch.Tensor): Mask tensor of shape (batch_size, 1, time_steps).
+ g (torch.Tensor, optional): Conditioning tensor of shape (batch_size, gin_channels, time_steps).
+ Defaults to None.
+ """
+ output = torch.zeros_like(x)
+ n_channels_tensor = torch.IntTensor([self.hidden_channels])
+
+ if g is not None:
+ g = self.cond_layer(g)
+
+ for i in range(self.n_layers):
+ x_in = self.in_layers[i](x)
+ if g is not None:
+ cond_offset = i * 2 * self.hidden_channels
+ g_l = g[:, cond_offset : cond_offset + 2 * self.hidden_channels, :]
+ else:
+ g_l = torch.zeros_like(x_in)
+
+ acts = fused_add_tanh_sigmoid_multiply(x_in, g_l, n_channels_tensor)
+ acts = self.drop(acts)
+
+ res_skip_acts = self.res_skip_layers[i](acts)
+ if i < self.n_layers - 1:
+ res_acts = res_skip_acts[:, : self.hidden_channels, :]
+ x = (x + res_acts) * x_mask
+ output = output + res_skip_acts[:, self.hidden_channels :, :]
+ else:
+ output = output + res_skip_acts
+ return output * x_mask
+
+ def remove_weight_norm(self):
+ """Remove weight normalization from the module."""
+ if self.gin_channels != 0:
+ torch.nn.utils.remove_weight_norm(self.cond_layer)
+ for l in self.in_layers:
+ torch.nn.utils.remove_weight_norm(l)
+ for l in self.res_skip_layers:
+ torch.nn.utils.remove_weight_norm(l)
diff --git a/rvc/lib/algorithm/normalization.py b/rvc/lib/algorithm/normalization.py
new file mode 100644
index 0000000000000000000000000000000000000000..878ec09de09b021bc9a2b92def21e07d42f34c75
--- /dev/null
+++ b/rvc/lib/algorithm/normalization.py
@@ -0,0 +1,31 @@
+import torch
+
+
+class LayerNorm(torch.nn.Module):
+ """Layer normalization module.
+
+ Args:
+ channels (int): Number of channels.
+ eps (float, optional): Epsilon value for numerical stability. Defaults to 1e-5.
+ """
+
+ def __init__(self, channels, eps=1e-5):
+ super().__init__()
+ self.eps = eps
+ self.gamma = torch.nn.Parameter(torch.ones(channels))
+ self.beta = torch.nn.Parameter(torch.zeros(channels))
+
+ def forward(self, x):
+ """Forward pass.
+
+ Args:
+ x (torch.Tensor): Input tensor of shape (batch_size, channels, time_steps).
+
+ """
+ # Transpose to (batch_size, time_steps, channels) for layer_norm
+ x = x.transpose(1, -1)
+ x = torch.nn.functional.layer_norm(
+ x, (x.size(-1),), self.gamma, self.beta, self.eps
+ )
+ # Transpose back to (batch_size, channels, time_steps)
+ return x.transpose(1, -1)
diff --git a/rvc/lib/algorithm/nsf.py b/rvc/lib/algorithm/nsf.py
new file mode 100644
index 0000000000000000000000000000000000000000..465e04de55d4881008552df091fcf1800f4ccd94
--- /dev/null
+++ b/rvc/lib/algorithm/nsf.py
@@ -0,0 +1,196 @@
+import math
+import torch
+from torch.nn.utils import remove_weight_norm
+from torch.nn.utils.parametrizations import weight_norm
+from typing import Optional
+
+from rvc.lib.algorithm.generators import SineGen
+from rvc.lib.algorithm.residuals import LRELU_SLOPE, ResBlock1, ResBlock2
+from rvc.lib.algorithm.commons import init_weights
+
+
+class SourceModuleHnNSF(torch.nn.Module):
+ """
+ Source Module for harmonic-plus-noise excitation.
+
+ Args:
+ sample_rate (int): Sampling rate in Hz.
+ harmonic_num (int, optional): Number of harmonics above F0. Defaults to 0.
+ sine_amp (float, optional): Amplitude of sine source signal. Defaults to 0.1.
+ add_noise_std (float, optional): Standard deviation of additive Gaussian noise. Defaults to 0.003.
+ voiced_threshod (float, optional): Threshold to set voiced/unvoiced given F0. Defaults to 0.
+ is_half (bool, optional): Whether to use half precision. Defaults to True.
+ """
+
+ def __init__(
+ self,
+ sample_rate,
+ harmonic_num=0,
+ sine_amp=0.1,
+ add_noise_std=0.003,
+ voiced_threshod=0,
+ is_half=True,
+ ):
+ super(SourceModuleHnNSF, self).__init__()
+
+ self.sine_amp = sine_amp
+ self.noise_std = add_noise_std
+ self.is_half = is_half
+
+ self.l_sin_gen = SineGen(
+ sample_rate, harmonic_num, sine_amp, add_noise_std, voiced_threshod
+ )
+ self.l_linear = torch.nn.Linear(harmonic_num + 1, 1)
+ self.l_tanh = torch.nn.Tanh()
+
+ def forward(self, x: torch.Tensor, upsample_factor: int = 1):
+ sine_wavs, uv, _ = self.l_sin_gen(x, upsample_factor)
+ sine_wavs = sine_wavs.to(dtype=self.l_linear.weight.dtype)
+ sine_merge = self.l_tanh(self.l_linear(sine_wavs))
+ return sine_merge, None, None
+
+
+class GeneratorNSF(torch.nn.Module):
+ """
+ Generator for synthesizing audio using the NSF (Neural Source Filter) approach.
+
+ Args:
+ initial_channel (int): Number of channels in the initial convolutional layer.
+ resblock (str): Type of residual block to use (1 or 2).
+ resblock_kernel_sizes (list): Kernel sizes of the residual blocks.
+ resblock_dilation_sizes (list): Dilation rates of the residual blocks.
+ upsample_rates (list): Upsampling rates.
+ upsample_initial_channel (int): Number of channels in the initial upsampling layer.
+ upsample_kernel_sizes (list): Kernel sizes of the upsampling layers.
+ gin_channels (int): Number of channels for the global conditioning input.
+ sr (int): Sampling rate.
+ is_half (bool, optional): Whether to use half precision. Defaults to False.
+ """
+
+ def __init__(
+ self,
+ initial_channel,
+ resblock,
+ resblock_kernel_sizes,
+ resblock_dilation_sizes,
+ upsample_rates,
+ upsample_initial_channel,
+ upsample_kernel_sizes,
+ gin_channels,
+ sr,
+ is_half=False,
+ ):
+ super(GeneratorNSF, self).__init__()
+
+ self.num_kernels = len(resblock_kernel_sizes)
+ self.num_upsamples = len(upsample_rates)
+ self.f0_upsamp = torch.nn.Upsample(scale_factor=math.prod(upsample_rates))
+ self.m_source = SourceModuleHnNSF(
+ sample_rate=sr, harmonic_num=0, is_half=is_half
+ )
+
+ self.conv_pre = torch.nn.Conv1d(
+ initial_channel, upsample_initial_channel, 7, 1, padding=3
+ )
+ resblock_cls = ResBlock1 if resblock == "1" else ResBlock2
+
+ self.ups = torch.nn.ModuleList()
+ self.noise_convs = torch.nn.ModuleList()
+
+ channels = [
+ upsample_initial_channel // (2 ** (i + 1))
+ for i in range(len(upsample_rates))
+ ]
+ stride_f0s = [
+ math.prod(upsample_rates[i + 1 :]) if i + 1 < len(upsample_rates) else 1
+ for i in range(len(upsample_rates))
+ ]
+
+ for i, (u, k) in enumerate(zip(upsample_rates, upsample_kernel_sizes)):
+ self.ups.append(
+ weight_norm(
+ torch.nn.ConvTranspose1d(
+ upsample_initial_channel // (2**i),
+ channels[i],
+ k,
+ u,
+ padding=(k - u) // 2,
+ )
+ )
+ )
+
+ self.noise_convs.append(
+ torch.nn.Conv1d(
+ 1,
+ channels[i],
+ kernel_size=(stride_f0s[i] * 2 if stride_f0s[i] > 1 else 1),
+ stride=stride_f0s[i],
+ padding=(stride_f0s[i] // 2 if stride_f0s[i] > 1 else 0),
+ )
+ )
+
+ self.resblocks = torch.nn.ModuleList(
+ [
+ resblock_cls(channels[i], k, d)
+ for i in range(len(self.ups))
+ for k, d in zip(resblock_kernel_sizes, resblock_dilation_sizes)
+ ]
+ )
+
+ self.conv_post = torch.nn.Conv1d(channels[-1], 1, 7, 1, padding=3, bias=False)
+ self.ups.apply(init_weights)
+
+ if gin_channels != 0:
+ self.cond = torch.nn.Conv1d(gin_channels, upsample_initial_channel, 1)
+
+ self.upp = math.prod(upsample_rates)
+ self.lrelu_slope = LRELU_SLOPE
+
+ def forward(self, x, f0, g: Optional[torch.Tensor] = None):
+ har_source, _, _ = self.m_source(f0, self.upp)
+ har_source = har_source.transpose(1, 2)
+ x = self.conv_pre(x)
+
+ if g is not None:
+ x = x + self.cond(g)
+
+ for i, (ups, noise_convs) in enumerate(zip(self.ups, self.noise_convs)):
+ x = torch.nn.functional.leaky_relu(x, self.lrelu_slope)
+ x = ups(x)
+ x = x + noise_convs(har_source)
+
+ xs = sum(
+ [
+ resblock(x)
+ for j, resblock in enumerate(self.resblocks)
+ if j in range(i * self.num_kernels, (i + 1) * self.num_kernels)
+ ]
+ )
+ x = xs / self.num_kernels
+
+ x = torch.nn.functional.leaky_relu(x)
+ x = torch.tanh(self.conv_post(x))
+ return x
+
+ def remove_weight_norm(self):
+ for l in self.ups:
+ remove_weight_norm(l)
+ for l in self.resblocks:
+ l.remove_weight_norm()
+
+ def __prepare_scriptable__(self):
+ for l in self.ups:
+ for hook in l._forward_pre_hooks.values():
+ if (
+ hook.__module__ == "torch.nn.utils.parametrizations.weight_norm"
+ and hook.__class__.__name__ == "WeightNorm"
+ ):
+ remove_weight_norm(l)
+ for l in self.resblocks:
+ for hook in l._forward_pre_hooks.values():
+ if (
+ hook.__module__ == "torch.nn.utils.parametrizations.weight_norm"
+ and hook.__class__.__name__ == "WeightNorm"
+ ):
+ remove_weight_norm(l)
+ return self
diff --git a/rvc/lib/algorithm/residuals.py b/rvc/lib/algorithm/residuals.py
new file mode 100644
index 0000000000000000000000000000000000000000..a2b2e39ddff11164cb01deb6df55d73191ecd21b
--- /dev/null
+++ b/rvc/lib/algorithm/residuals.py
@@ -0,0 +1,251 @@
+from typing import Optional
+import torch
+from torch.nn.utils import remove_weight_norm
+from torch.nn.utils.parametrizations import weight_norm
+
+from rvc.lib.algorithm.modules import WaveNet
+from rvc.lib.algorithm.commons import get_padding, init_weights
+
+LRELU_SLOPE = 0.1
+
+
+# Helper functions
+def create_conv1d_layer(channels, kernel_size, dilation):
+ return weight_norm(
+ torch.nn.Conv1d(
+ channels,
+ channels,
+ kernel_size,
+ 1,
+ dilation=dilation,
+ padding=get_padding(kernel_size, dilation),
+ )
+ )
+
+
+def apply_mask(tensor, mask):
+ return tensor * mask if mask is not None else tensor
+
+
+class ResBlockBase(torch.nn.Module):
+ def __init__(self, channels, kernel_size, dilations):
+ super(ResBlockBase, self).__init__()
+ self.convs1 = torch.nn.ModuleList(
+ [create_conv1d_layer(channels, kernel_size, d) for d in dilations]
+ )
+ self.convs1.apply(init_weights)
+
+ self.convs2 = torch.nn.ModuleList(
+ [create_conv1d_layer(channels, kernel_size, 1) for _ in dilations]
+ )
+ self.convs2.apply(init_weights)
+
+ def forward(self, x, x_mask=None):
+ for c1, c2 in zip(self.convs1, self.convs2):
+ xt = torch.nn.functional.leaky_relu(x, LRELU_SLOPE)
+ xt = apply_mask(xt, x_mask)
+ xt = torch.nn.functional.leaky_relu(c1(xt), LRELU_SLOPE)
+ xt = apply_mask(xt, x_mask)
+ xt = c2(xt)
+ x = xt + x
+ return apply_mask(x, x_mask)
+
+ def remove_weight_norm(self):
+ for conv in self.convs1 + self.convs2:
+ remove_weight_norm(conv)
+
+
+class ResBlock1(ResBlockBase):
+ def __init__(self, channels, kernel_size=3, dilation=(1, 3, 5)):
+ super(ResBlock1, self).__init__(channels, kernel_size, dilation)
+
+
+class ResBlock2(ResBlockBase):
+ def __init__(self, channels, kernel_size=3, dilation=(1, 3)):
+ super(ResBlock2, self).__init__(channels, kernel_size, dilation)
+
+
+class Flip(torch.nn.Module):
+ """Flip module for flow-based models.
+
+ This module flips the input along the time dimension.
+ """
+
+ def forward(self, x, *args, reverse=False, **kwargs):
+ """Forward pass.
+
+ Args:
+ x (torch.Tensor): Input tensor.
+ reverse (bool, optional): Whether to reverse the operation. Defaults to False.
+ """
+ x = torch.flip(x, [1])
+ if not reverse:
+ logdet = torch.zeros(x.size(0)).to(dtype=x.dtype, device=x.device)
+ return x, logdet
+ else:
+ return x
+
+
+class ResidualCouplingBlock(torch.nn.Module):
+ """Residual Coupling Block for normalizing flow.
+
+ Args:
+ channels (int): Number of channels in the input.
+ hidden_channels (int): Number of hidden channels in the coupling layer.
+ kernel_size (int): Kernel size of the convolutional layers.
+ dilation_rate (int): Dilation rate of the convolutional layers.
+ n_layers (int): Number of layers in the coupling layer.
+ n_flows (int, optional): Number of coupling layers in the block. Defaults to 4.
+ gin_channels (int, optional): Number of channels for the global conditioning input. Defaults to 0.
+ """
+
+ def __init__(
+ self,
+ channels,
+ hidden_channels,
+ kernel_size,
+ dilation_rate,
+ n_layers,
+ n_flows=4,
+ gin_channels=0,
+ ):
+ super(ResidualCouplingBlock, self).__init__()
+ self.channels = channels
+ self.hidden_channels = hidden_channels
+ self.kernel_size = kernel_size
+ self.dilation_rate = dilation_rate
+ self.n_layers = n_layers
+ self.n_flows = n_flows
+ self.gin_channels = gin_channels
+
+ self.flows = torch.nn.ModuleList()
+ for i in range(n_flows):
+ self.flows.append(
+ ResidualCouplingLayer(
+ channels,
+ hidden_channels,
+ kernel_size,
+ dilation_rate,
+ n_layers,
+ gin_channels=gin_channels,
+ mean_only=True,
+ )
+ )
+ self.flows.append(Flip())
+
+ def forward(
+ self,
+ x: torch.Tensor,
+ x_mask: torch.Tensor,
+ g: Optional[torch.Tensor] = None,
+ reverse: bool = False,
+ ):
+ if not reverse:
+ for flow in self.flows:
+ x, _ = flow(x, x_mask, g=g, reverse=reverse)
+ else:
+ for flow in reversed(self.flows):
+ x = flow.forward(x, x_mask, g=g, reverse=reverse)
+ return x
+
+ def remove_weight_norm(self):
+ """Removes weight normalization from the coupling layers."""
+ for i in range(self.n_flows):
+ self.flows[i * 2].remove_weight_norm()
+
+ def __prepare_scriptable__(self):
+ """Prepares the module for scripting."""
+ for i in range(self.n_flows):
+ for hook in self.flows[i * 2]._forward_pre_hooks.values():
+ if (
+ hook.__module__ == "torch.nn.utils.parametrizations.weight_norm"
+ and hook.__class__.__name__ == "WeightNorm"
+ ):
+ torch.nn.utils.remove_weight_norm(self.flows[i * 2])
+
+ return self
+
+
+class ResidualCouplingLayer(torch.nn.Module):
+ """Residual coupling layer for flow-based models.
+
+ Args:
+ channels (int): Number of channels.
+ hidden_channels (int): Number of hidden channels.
+ kernel_size (int): Size of the convolutional kernel.
+ dilation_rate (int): Dilation rate of the convolution.
+ n_layers (int): Number of convolutional layers.
+ p_dropout (float, optional): Dropout probability. Defaults to 0.
+ gin_channels (int, optional): Number of conditioning channels. Defaults to 0.
+ mean_only (bool, optional): Whether to use mean-only coupling. Defaults to False.
+ """
+
+ def __init__(
+ self,
+ channels,
+ hidden_channels,
+ kernel_size,
+ dilation_rate,
+ n_layers,
+ p_dropout=0,
+ gin_channels=0,
+ mean_only=False,
+ ):
+ assert channels % 2 == 0, "channels should be divisible by 2"
+ super().__init__()
+ self.channels = channels
+ self.hidden_channels = hidden_channels
+ self.kernel_size = kernel_size
+ self.dilation_rate = dilation_rate
+ self.n_layers = n_layers
+ self.half_channels = channels // 2
+ self.mean_only = mean_only
+
+ self.pre = torch.nn.Conv1d(self.half_channels, hidden_channels, 1)
+ self.enc = WaveNet(
+ hidden_channels,
+ kernel_size,
+ dilation_rate,
+ n_layers,
+ p_dropout=p_dropout,
+ gin_channels=gin_channels,
+ )
+ self.post = torch.nn.Conv1d(
+ hidden_channels, self.half_channels * (2 - mean_only), 1
+ )
+ self.post.weight.data.zero_()
+ self.post.bias.data.zero_()
+
+ def forward(self, x, x_mask, g=None, reverse=False):
+ """Forward pass.
+
+ Args:
+ x (torch.Tensor): Input tensor of shape (batch_size, channels, time_steps).
+ x_mask (torch.Tensor): Mask tensor of shape (batch_size, 1, time_steps).
+ g (torch.Tensor, optional): Conditioning tensor of shape (batch_size, gin_channels, time_steps).
+ Defaults to None.
+ reverse (bool, optional): Whether to reverse the operation. Defaults to False.
+ """
+ x0, x1 = torch.split(x, [self.half_channels] * 2, 1)
+ h = self.pre(x0) * x_mask
+ h = self.enc(h, x_mask, g=g)
+ stats = self.post(h) * x_mask
+ if not self.mean_only:
+ m, logs = torch.split(stats, [self.half_channels] * 2, 1)
+ else:
+ m = stats
+ logs = torch.zeros_like(m)
+
+ if not reverse:
+ x1 = m + x1 * torch.exp(logs) * x_mask
+ x = torch.cat([x0, x1], 1)
+ logdet = torch.sum(logs, [1, 2])
+ return x, logdet
+ else:
+ x1 = (x1 - m) * torch.exp(-logs) * x_mask
+ x = torch.cat([x0, x1], 1)
+ return x
+
+ def remove_weight_norm(self):
+ """Remove weight normalization from the module."""
+ self.enc.remove_weight_norm()
diff --git a/rvc/lib/algorithm/synthesizers.py b/rvc/lib/algorithm/synthesizers.py
new file mode 100644
index 0000000000000000000000000000000000000000..2a1aa2366b49d5124c65e4234b6948ed2ca70676
--- /dev/null
+++ b/rvc/lib/algorithm/synthesizers.py
@@ -0,0 +1,237 @@
+import torch
+from typing import Optional
+
+from rvc.lib.algorithm.nsf import GeneratorNSF
+from rvc.lib.algorithm.generators import Generator
+from rvc.lib.algorithm.commons import slice_segments, rand_slice_segments
+from rvc.lib.algorithm.residuals import ResidualCouplingBlock
+from rvc.lib.algorithm.encoders import TextEncoder, PosteriorEncoder
+
+
+class Synthesizer(torch.nn.Module):
+ """
+ Base Synthesizer model.
+
+ Args:
+ spec_channels (int): Number of channels in the spectrogram.
+ segment_size (int): Size of the audio segment.
+ inter_channels (int): Number of channels in the intermediate layers.
+ hidden_channels (int): Number of channels in the hidden layers.
+ filter_channels (int): Number of channels in the filter layers.
+ n_heads (int): Number of attention heads.
+ n_layers (int): Number of layers in the encoder.
+ kernel_size (int): Size of the convolution kernel.
+ p_dropout (float): Dropout probability.
+ resblock (str): Type of residual block.
+ resblock_kernel_sizes (list): Kernel sizes for the residual blocks.
+ resblock_dilation_sizes (list): Dilation sizes for the residual blocks.
+ upsample_rates (list): Upsampling rates for the decoder.
+ upsample_initial_channel (int): Number of channels in the initial upsampling layer.
+ upsample_kernel_sizes (list): Kernel sizes for the upsampling layers.
+ spk_embed_dim (int): Dimension of the speaker embedding.
+ gin_channels (int): Number of channels in the global conditioning vector.
+ sr (int): Sampling rate of the audio.
+ use_f0 (bool): Whether to use F0 information.
+ text_enc_hidden_dim (int): Hidden dimension for the text encoder.
+ kwargs: Additional keyword arguments.
+ """
+
+ def __init__(
+ self,
+ spec_channels,
+ segment_size,
+ inter_channels,
+ hidden_channels,
+ filter_channels,
+ n_heads,
+ n_layers,
+ kernel_size,
+ p_dropout,
+ resblock,
+ resblock_kernel_sizes,
+ resblock_dilation_sizes,
+ upsample_rates,
+ upsample_initial_channel,
+ upsample_kernel_sizes,
+ spk_embed_dim,
+ gin_channels,
+ sr,
+ use_f0,
+ text_enc_hidden_dim=768,
+ **kwargs
+ ):
+ super(Synthesizer, self).__init__()
+ self.spec_channels = spec_channels
+ self.inter_channels = inter_channels
+ self.hidden_channels = hidden_channels
+ self.filter_channels = filter_channels
+ self.n_heads = n_heads
+ self.n_layers = n_layers
+ self.kernel_size = kernel_size
+ self.p_dropout = float(p_dropout)
+ self.resblock = resblock
+ self.resblock_kernel_sizes = resblock_kernel_sizes
+ self.resblock_dilation_sizes = resblock_dilation_sizes
+ self.upsample_rates = upsample_rates
+ self.upsample_initial_channel = upsample_initial_channel
+ self.upsample_kernel_sizes = upsample_kernel_sizes
+ self.segment_size = segment_size
+ self.gin_channels = gin_channels
+ self.spk_embed_dim = spk_embed_dim
+ self.use_f0 = use_f0
+
+ self.enc_p = TextEncoder(
+ inter_channels,
+ hidden_channels,
+ filter_channels,
+ n_heads,
+ n_layers,
+ kernel_size,
+ float(p_dropout),
+ text_enc_hidden_dim,
+ f0=use_f0,
+ )
+
+ if use_f0:
+ self.dec = GeneratorNSF(
+ inter_channels,
+ resblock,
+ resblock_kernel_sizes,
+ resblock_dilation_sizes,
+ upsample_rates,
+ upsample_initial_channel,
+ upsample_kernel_sizes,
+ gin_channels=gin_channels,
+ sr=sr,
+ is_half=kwargs["is_half"],
+ )
+ else:
+ self.dec = Generator(
+ inter_channels,
+ resblock,
+ resblock_kernel_sizes,
+ resblock_dilation_sizes,
+ upsample_rates,
+ upsample_initial_channel,
+ upsample_kernel_sizes,
+ gin_channels=gin_channels,
+ )
+
+ self.enc_q = PosteriorEncoder(
+ spec_channels,
+ inter_channels,
+ hidden_channels,
+ 5,
+ 1,
+ 16,
+ gin_channels=gin_channels,
+ )
+ self.flow = ResidualCouplingBlock(
+ inter_channels, hidden_channels, 5, 1, 3, gin_channels=gin_channels
+ )
+ self.emb_g = torch.nn.Embedding(self.spk_embed_dim, gin_channels)
+
+ def remove_weight_norm(self):
+ """Removes weight normalization from the model."""
+ self.dec.remove_weight_norm()
+ self.flow.remove_weight_norm()
+ self.enc_q.remove_weight_norm()
+
+ def __prepare_scriptable__(self):
+ for hook in self.dec._forward_pre_hooks.values():
+ if (
+ hook.__module__ == "torch.nn.utils.parametrizations.weight_norm"
+ and hook.__class__.__name__ == "WeightNorm"
+ ):
+ torch.nn.utils.remove_weight_norm(self.dec)
+ for hook in self.flow._forward_pre_hooks.values():
+ if (
+ hook.__module__ == "torch.nn.utils.parametrizations.weight_norm"
+ and hook.__class__.__name__ == "WeightNorm"
+ ):
+ torch.nn.utils.remove_weight_norm(self.flow)
+ if hasattr(self, "enc_q"):
+ for hook in self.enc_q._forward_pre_hooks.values():
+ if (
+ hook.__module__ == "torch.nn.utils.parametrizations.weight_norm"
+ and hook.__class__.__name__ == "WeightNorm"
+ ):
+ torch.nn.utils.remove_weight_norm(self.enc_q)
+ return self
+
+ @torch.jit.ignore
+ def forward(
+ self,
+ phone: torch.Tensor,
+ phone_lengths: torch.Tensor,
+ pitch: Optional[torch.Tensor] = None,
+ pitchf: Optional[torch.Tensor] = None,
+ y: torch.Tensor = None,
+ y_lengths: torch.Tensor = None,
+ ds: Optional[torch.Tensor] = None,
+ ):
+ """
+ Forward pass of the model.
+
+ Args:
+ phone (torch.Tensor): Phoneme sequence.
+ phone_lengths (torch.Tensor): Lengths of the phoneme sequences.
+ pitch (torch.Tensor, optional): Pitch sequence.
+ pitchf (torch.Tensor, optional): Fine-grained pitch sequence.
+ y (torch.Tensor, optional): Target spectrogram.
+ y_lengths (torch.Tensor, optional): Lengths of the target spectrograms.
+ ds (torch.Tensor, optional): Speaker embedding. Defaults to None.
+ """
+ g = self.emb_g(ds).unsqueeze(-1)
+ m_p, logs_p, x_mask = self.enc_p(phone, pitch, phone_lengths)
+ if y is not None:
+ z, m_q, logs_q, y_mask = self.enc_q(y, y_lengths, g=g)
+ z_p = self.flow(z, y_mask, g=g)
+ z_slice, ids_slice = rand_slice_segments(z, y_lengths, self.segment_size)
+ if self.use_f0:
+ pitchf = slice_segments(pitchf, ids_slice, self.segment_size, 2)
+ o = self.dec(z_slice, pitchf, g=g)
+ else:
+ o = self.dec(z_slice, g=g)
+ return o, ids_slice, x_mask, y_mask, (z, z_p, m_p, logs_p, m_q, logs_q)
+ else:
+ return None, None, x_mask, None, (None, None, m_p, logs_p, None, None)
+
+ @torch.jit.export
+ def infer(
+ self,
+ phone: torch.Tensor,
+ phone_lengths: torch.Tensor,
+ pitch: Optional[torch.Tensor] = None,
+ nsff0: Optional[torch.Tensor] = None,
+ sid: torch.Tensor = None,
+ rate: Optional[torch.Tensor] = None,
+ ):
+ """
+ Inference of the model.
+
+ Args:
+ phone (torch.Tensor): Phoneme sequence.
+ phone_lengths (torch.Tensor): Lengths of the phoneme sequences.
+ pitch (torch.Tensor, optional): Pitch sequence.
+ nsff0 (torch.Tensor, optional): Fine-grained pitch sequence.
+ sid (torch.Tensor): Speaker embedding.
+ rate (torch.Tensor, optional): Rate for time-stretching. Defaults to None.
+ """
+ g = self.emb_g(sid).unsqueeze(-1)
+ m_p, logs_p, x_mask = self.enc_p(phone, pitch, phone_lengths)
+ z_p = (m_p + torch.exp(logs_p) * torch.randn_like(m_p) * 0.66666) * x_mask
+ if rate is not None:
+ assert isinstance(rate, torch.Tensor)
+ head = int(z_p.shape[2] * (1.0 - rate.item()))
+ z_p = z_p[:, :, head:]
+ x_mask = x_mask[:, :, head:]
+ if self.use_f0:
+ nsff0 = nsff0[:, head:]
+ if self.use_f0:
+ z = self.flow(z_p, x_mask, g=g, reverse=True)
+ o = self.dec(z * x_mask, nsff0, g=g)
+ else:
+ z = self.flow(z_p, x_mask, g=g, reverse=True)
+ o = self.dec(z * x_mask, g=g)
+ return o, x_mask, (z, z_p, m_p, logs_p)
diff --git a/rvc/lib/predictors/F0Extractor.py b/rvc/lib/predictors/F0Extractor.py
new file mode 100644
index 0000000000000000000000000000000000000000..bc3b61f3da741d428add423019286f081d73775c
--- /dev/null
+++ b/rvc/lib/predictors/F0Extractor.py
@@ -0,0 +1,100 @@
+import dataclasses
+import pathlib
+import libf0
+import librosa
+import numpy as np
+import resampy
+import torch
+import torchcrepe
+import torchfcpe
+import os
+
+# from tools.anyf0.rmvpe import RMVPE
+from rvc.lib.predictors.RMVPE import RMVPE0Predictor
+from rvc.configs.config import Config
+
+config = Config()
+
+
+@dataclasses.dataclass
+class F0Extractor:
+ wav_path: pathlib.Path
+ sample_rate: int = 44100
+ hop_length: int = 512
+ f0_min: int = 50
+ f0_max: int = 1600
+ method: str = "rmvpe"
+ x: np.ndarray = dataclasses.field(init=False)
+
+ def __post_init__(self):
+ self.x, self.sample_rate = librosa.load(self.wav_path, sr=self.sample_rate)
+
+ @property
+ def hop_size(self) -> float:
+ return self.hop_length / self.sample_rate
+
+ @property
+ def wav16k(self) -> np.ndarray:
+ return resampy.resample(self.x, self.sample_rate, 16000)
+
+ def extract_f0(self) -> np.ndarray:
+ f0 = None
+ method = self.method
+ if method == "crepe":
+ wav16k_torch = torch.FloatTensor(self.wav16k).unsqueeze(0).to(config.device)
+ f0 = torchcrepe.predict(
+ wav16k_torch,
+ sample_rate=16000,
+ hop_length=160,
+ batch_size=512,
+ fmin=self.f0_min,
+ fmax=self.f0_max,
+ device=config.device,
+ )
+ f0 = f0[0].cpu().numpy()
+ elif method == "fcpe":
+ audio = librosa.to_mono(self.x)
+ audio_length = len(audio)
+ f0_target_length = (audio_length // self.hop_length) + 1
+ audio = (
+ torch.from_numpy(audio)
+ .float()
+ .unsqueeze(0)
+ .unsqueeze(-1)
+ .to(config.device)
+ )
+ model = torchfcpe.spawn_bundled_infer_model(device=config.device)
+
+ f0 = model.infer(
+ audio,
+ sr=self.sample_rate,
+ decoder_mode="local_argmax",
+ threshold=0.006,
+ f0_min=self.f0_min,
+ f0_max=self.f0_max,
+ interp_uv=False,
+ output_interp_target_length=f0_target_length,
+ )
+ f0 = f0.squeeze().cpu().numpy()
+ elif method == "rmvpe":
+ model_rmvpe = RMVPE0Predictor(
+ os.path.join("rvc", "models", "predictors", "rmvpe.pt"),
+ is_half=config.is_half,
+ device=config.device,
+ # hop_length=80
+ )
+ f0 = model_rmvpe.infer_from_audio(self.wav16k, thred=0.03)
+
+ else:
+ raise ValueError(f"Unknown method: {self.method}")
+ return libf0.hz_to_cents(f0, librosa.midi_to_hz(0))
+
+ def plot_f0(self, f0):
+ from matplotlib import pyplot as plt
+
+ plt.figure(figsize=(10, 4))
+ plt.plot(f0)
+ plt.title(self.method)
+ plt.xlabel("Time (frames)")
+ plt.ylabel("F0 (cents)")
+ plt.show()
diff --git a/rvc/lib/predictors/FCPE.py b/rvc/lib/predictors/FCPE.py
new file mode 100644
index 0000000000000000000000000000000000000000..12f6c346aa5d448a2133400a09e103043b5863c8
--- /dev/null
+++ b/rvc/lib/predictors/FCPE.py
@@ -0,0 +1,920 @@
+from typing import Union
+
+import torch.nn.functional as F
+import numpy as np
+import torch
+import torch.nn as nn
+from torch.nn.utils.parametrizations import weight_norm
+from torchaudio.transforms import Resample
+import os
+import librosa
+import soundfile as sf
+import torch.utils.data
+from librosa.filters import mel as librosa_mel_fn
+import math
+from functools import partial
+
+from einops import rearrange, repeat
+from local_attention import LocalAttention
+from torch import nn
+
+os.environ["LRU_CACHE_CAPACITY"] = "3"
+
+
+def load_wav_to_torch(full_path, target_sr=None, return_empty_on_exception=False):
+ """Loads wav file to torch tensor."""
+ try:
+ data, sample_rate = sf.read(full_path, always_2d=True)
+ except Exception as error:
+ print(f"An error occurred loading {full_path}: {error}")
+ if return_empty_on_exception:
+ return [], sample_rate or target_sr or 48000
+ else:
+ raise
+
+ data = data[:, 0] if len(data.shape) > 1 else data
+ assert len(data) > 2
+
+ # Normalize data
+ max_mag = (
+ -np.iinfo(data.dtype).min
+ if np.issubdtype(data.dtype, np.integer)
+ else max(np.amax(data), -np.amin(data))
+ )
+ max_mag = (
+ (2**31) + 1 if max_mag > (2**15) else ((2**15) + 1 if max_mag > 1.01 else 1.0)
+ )
+ data = torch.FloatTensor(data.astype(np.float32)) / max_mag
+
+ # Handle exceptions and resample
+ if (torch.isinf(data) | torch.isnan(data)).any() and return_empty_on_exception:
+ return [], sample_rate or target_sr or 48000
+ if target_sr is not None and sample_rate != target_sr:
+ data = torch.from_numpy(
+ librosa.core.resample(
+ data.numpy(), orig_sr=sample_rate, target_sr=target_sr
+ )
+ )
+ sample_rate = target_sr
+
+ return data, sample_rate
+
+
+def dynamic_range_compression(x, C=1, clip_val=1e-5):
+ return np.log(np.clip(x, a_min=clip_val, a_max=None) * C)
+
+
+def dynamic_range_decompression(x, C=1):
+ return np.exp(x) / C
+
+
+def dynamic_range_compression_torch(x, C=1, clip_val=1e-5):
+ return torch.log(torch.clamp(x, min=clip_val) * C)
+
+
+def dynamic_range_decompression_torch(x, C=1):
+ return torch.exp(x) / C
+
+
+class STFT:
+ def __init__(
+ self,
+ sr=22050,
+ n_mels=80,
+ n_fft=1024,
+ win_size=1024,
+ hop_length=256,
+ fmin=20,
+ fmax=11025,
+ clip_val=1e-5,
+ ):
+ self.target_sr = sr
+ self.n_mels = n_mels
+ self.n_fft = n_fft
+ self.win_size = win_size
+ self.hop_length = hop_length
+ self.fmin = fmin
+ self.fmax = fmax
+ self.clip_val = clip_val
+ self.mel_basis = {}
+ self.hann_window = {}
+
+ def get_mel(self, y, keyshift=0, speed=1, center=False, train=False):
+ sample_rate = self.target_sr
+ n_mels = self.n_mels
+ n_fft = self.n_fft
+ win_size = self.win_size
+ hop_length = self.hop_length
+ fmin = self.fmin
+ fmax = self.fmax
+ clip_val = self.clip_val
+
+ factor = 2 ** (keyshift / 12)
+ n_fft_new = int(np.round(n_fft * factor))
+ win_size_new = int(np.round(win_size * factor))
+ hop_length_new = int(np.round(hop_length * speed))
+
+ # Optimize mel_basis and hann_window caching
+ mel_basis = self.mel_basis if not train else {}
+ hann_window = self.hann_window if not train else {}
+
+ mel_basis_key = str(fmax) + "_" + str(y.device)
+ if mel_basis_key not in mel_basis:
+ mel = librosa_mel_fn(
+ sr=sample_rate, n_fft=n_fft, n_mels=n_mels, fmin=fmin, fmax=fmax
+ )
+ mel_basis[mel_basis_key] = torch.from_numpy(mel).float().to(y.device)
+
+ keyshift_key = str(keyshift) + "_" + str(y.device)
+ if keyshift_key not in hann_window:
+ hann_window[keyshift_key] = torch.hann_window(win_size_new).to(y.device)
+
+ # Padding and STFT
+ pad_left = (win_size_new - hop_length_new) // 2
+ pad_right = max(
+ (win_size_new - hop_length_new + 1) // 2,
+ win_size_new - y.size(-1) - pad_left,
+ )
+ mode = "reflect" if pad_right < y.size(-1) else "constant"
+ y = torch.nn.functional.pad(y.unsqueeze(1), (pad_left, pad_right), mode=mode)
+ y = y.squeeze(1)
+
+ spec = torch.stft(
+ y,
+ n_fft_new,
+ hop_length=hop_length_new,
+ win_length=win_size_new,
+ window=hann_window[keyshift_key],
+ center=center,
+ pad_mode="reflect",
+ normalized=False,
+ onesided=True,
+ return_complex=True,
+ )
+ spec = torch.sqrt(spec.real.pow(2) + spec.imag.pow(2) + (1e-9))
+
+ # Handle keyshift and mel conversion
+ if keyshift != 0:
+ size = n_fft // 2 + 1
+ resize = spec.size(1)
+ spec = (
+ F.pad(spec, (0, 0, 0, size - resize))
+ if resize < size
+ else spec[:, :size, :]
+ )
+ spec = spec * win_size / win_size_new
+ spec = torch.matmul(mel_basis[mel_basis_key], spec)
+ spec = dynamic_range_compression_torch(spec, clip_val=clip_val)
+ return spec
+
+ def __call__(self, audiopath):
+ audio, sr = load_wav_to_torch(audiopath, target_sr=self.target_sr)
+ spect = self.get_mel(audio.unsqueeze(0)).squeeze(0)
+ return spect
+
+
+stft = STFT()
+
+
+def softmax_kernel(
+ data, *, projection_matrix, is_query, normalize_data=True, eps=1e-4, device=None
+):
+ b, h, *_ = data.shape
+
+ # Normalize data
+ data_normalizer = (data.shape[-1] ** -0.25) if normalize_data else 1.0
+
+ # Project data
+ ratio = projection_matrix.shape[0] ** -0.5
+ projection = repeat(projection_matrix, "j d -> b h j d", b=b, h=h)
+ projection = projection.type_as(data)
+ data_dash = torch.einsum("...id,...jd->...ij", (data_normalizer * data), projection)
+
+ # Calculate diagonal data
+ diag_data = data**2
+ diag_data = torch.sum(diag_data, dim=-1)
+ diag_data = (diag_data / 2.0) * (data_normalizer**2)
+ diag_data = diag_data.unsqueeze(dim=-1)
+
+ # Apply softmax
+ if is_query:
+ data_dash = ratio * (
+ torch.exp(
+ data_dash
+ - diag_data
+ - torch.max(data_dash, dim=-1, keepdim=True).values
+ )
+ + eps
+ )
+ else:
+ data_dash = ratio * (torch.exp(data_dash - diag_data + eps))
+
+ return data_dash.type_as(data)
+
+
+def orthogonal_matrix_chunk(cols, qr_uniform_q=False, device=None):
+ unstructured_block = torch.randn((cols, cols), device=device)
+ q, r = torch.linalg.qr(unstructured_block.cpu(), mode="reduced")
+ q, r = map(lambda t: t.to(device), (q, r))
+
+ if qr_uniform_q:
+ d = torch.diag(r, 0)
+ q *= d.sign()
+ return q.t()
+
+
+def exists(val):
+ return val is not None
+
+
+def empty(tensor):
+ return tensor.numel() == 0
+
+
+def default(val, d):
+ return val if exists(val) else d
+
+
+def cast_tuple(val):
+ return (val,) if not isinstance(val, tuple) else val
+
+
+class PCmer(nn.Module):
+ def __init__(
+ self,
+ num_layers,
+ num_heads,
+ dim_model,
+ dim_keys,
+ dim_values,
+ residual_dropout,
+ attention_dropout,
+ ):
+ super().__init__()
+ self.num_layers = num_layers
+ self.num_heads = num_heads
+ self.dim_model = dim_model
+ self.dim_values = dim_values
+ self.dim_keys = dim_keys
+ self.residual_dropout = residual_dropout
+ self.attention_dropout = attention_dropout
+
+ self._layers = nn.ModuleList([_EncoderLayer(self) for _ in range(num_layers)])
+
+ def forward(self, phone, mask=None):
+ for layer in self._layers:
+ phone = layer(phone, mask)
+ return phone
+
+
+class _EncoderLayer(nn.Module):
+ def __init__(self, parent: PCmer):
+ super().__init__()
+ self.conformer = ConformerConvModule(parent.dim_model)
+ self.norm = nn.LayerNorm(parent.dim_model)
+ self.dropout = nn.Dropout(parent.residual_dropout)
+ self.attn = SelfAttention(
+ dim=parent.dim_model, heads=parent.num_heads, causal=False
+ )
+
+ def forward(self, phone, mask=None):
+ phone = phone + (self.attn(self.norm(phone), mask=mask))
+ phone = phone + (self.conformer(phone))
+ return phone
+
+
+def calc_same_padding(kernel_size):
+ pad = kernel_size // 2
+ return (pad, pad - (kernel_size + 1) % 2)
+
+
+class Swish(nn.Module):
+ def forward(self, x):
+ return x * x.sigmoid()
+
+
+class Transpose(nn.Module):
+ def __init__(self, dims):
+ super().__init__()
+ assert len(dims) == 2, "dims must be a tuple of two dimensions"
+ self.dims = dims
+
+ def forward(self, x):
+ return x.transpose(*self.dims)
+
+
+class GLU(nn.Module):
+ def __init__(self, dim):
+ super().__init__()
+ self.dim = dim
+
+ def forward(self, x):
+ out, gate = x.chunk(2, dim=self.dim)
+ return out * gate.sigmoid()
+
+
+class DepthWiseConv1d(nn.Module):
+ def __init__(self, chan_in, chan_out, kernel_size, padding):
+ super().__init__()
+ self.padding = padding
+ self.conv = nn.Conv1d(chan_in, chan_out, kernel_size, groups=chan_in)
+
+ def forward(self, x):
+ x = F.pad(x, self.padding)
+ return self.conv(x)
+
+
+class ConformerConvModule(nn.Module):
+ def __init__(
+ self, dim, causal=False, expansion_factor=2, kernel_size=31, dropout=0.0
+ ):
+ super().__init__()
+
+ inner_dim = dim * expansion_factor
+ padding = calc_same_padding(kernel_size) if not causal else (kernel_size - 1, 0)
+
+ self.net = nn.Sequential(
+ nn.LayerNorm(dim),
+ Transpose((1, 2)),
+ nn.Conv1d(dim, inner_dim * 2, 1),
+ GLU(dim=1),
+ DepthWiseConv1d(
+ inner_dim, inner_dim, kernel_size=kernel_size, padding=padding
+ ),
+ Swish(),
+ nn.Conv1d(inner_dim, dim, 1),
+ Transpose((1, 2)),
+ nn.Dropout(dropout),
+ )
+
+ def forward(self, x):
+ return self.net(x)
+
+
+def linear_attention(q, k, v):
+ if v is None:
+ out = torch.einsum("...ed,...nd->...ne", k, q)
+ return out
+ else:
+ k_cumsum = k.sum(dim=-2)
+ D_inv = 1.0 / (torch.einsum("...nd,...d->...n", q, k_cumsum.type_as(q)) + 1e-8)
+ context = torch.einsum("...nd,...ne->...de", k, v)
+ out = torch.einsum("...de,...nd,...n->...ne", context, q, D_inv)
+ return out
+
+
+def gaussian_orthogonal_random_matrix(
+ nb_rows, nb_columns, scaling=0, qr_uniform_q=False, device=None
+):
+ nb_full_blocks = int(nb_rows / nb_columns)
+ block_list = []
+
+ for _ in range(nb_full_blocks):
+ q = orthogonal_matrix_chunk(
+ nb_columns, qr_uniform_q=qr_uniform_q, device=device
+ )
+ block_list.append(q)
+
+ remaining_rows = nb_rows - nb_full_blocks * nb_columns
+ if remaining_rows > 0:
+ q = orthogonal_matrix_chunk(
+ nb_columns, qr_uniform_q=qr_uniform_q, device=device
+ )
+ block_list.append(q[:remaining_rows])
+
+ final_matrix = torch.cat(block_list)
+
+ if scaling == 0:
+ multiplier = torch.randn((nb_rows, nb_columns), device=device).norm(dim=1)
+ elif scaling == 1:
+ multiplier = math.sqrt((float(nb_columns))) * torch.ones(
+ (nb_rows,), device=device
+ )
+ else:
+ raise ValueError(f"Invalid scaling {scaling}")
+
+ return torch.diag(multiplier) @ final_matrix
+
+
+class FastAttention(nn.Module):
+ def __init__(
+ self,
+ dim_heads,
+ nb_features=None,
+ ortho_scaling=0,
+ causal=False,
+ generalized_attention=False,
+ kernel_fn=nn.ReLU(),
+ qr_uniform_q=False,
+ no_projection=False,
+ ):
+ super().__init__()
+ nb_features = default(nb_features, int(dim_heads * math.log(dim_heads)))
+
+ self.dim_heads = dim_heads
+ self.nb_features = nb_features
+ self.ortho_scaling = ortho_scaling
+
+ self.create_projection = partial(
+ gaussian_orthogonal_random_matrix,
+ nb_rows=self.nb_features,
+ nb_columns=dim_heads,
+ scaling=ortho_scaling,
+ qr_uniform_q=qr_uniform_q,
+ )
+ projection_matrix = self.create_projection()
+ self.register_buffer("projection_matrix", projection_matrix)
+
+ self.generalized_attention = generalized_attention
+ self.kernel_fn = kernel_fn
+ self.no_projection = no_projection
+ self.causal = causal
+
+ @torch.no_grad()
+ def redraw_projection_matrix(self):
+ projections = self.create_projection()
+ self.projection_matrix.copy_(projections)
+ del projections
+
+ def forward(self, q, k, v):
+ device = q.device
+
+ if self.no_projection:
+ q = q.softmax(dim=-1)
+ k = torch.exp(k) if self.causal else k.softmax(dim=-2)
+ else:
+ create_kernel = partial(
+ softmax_kernel, projection_matrix=self.projection_matrix, device=device
+ )
+ q = create_kernel(q, is_query=True)
+ k = create_kernel(k, is_query=False)
+
+ attn_fn = linear_attention if not self.causal else self.causal_linear_fn
+
+ if v is None:
+ out = attn_fn(q, k, None)
+ return out
+ else:
+ out = attn_fn(q, k, v)
+ return out
+
+
+class SelfAttention(nn.Module):
+ def __init__(
+ self,
+ dim,
+ causal=False,
+ heads=8,
+ dim_head=64,
+ local_heads=0,
+ local_window_size=256,
+ nb_features=None,
+ feature_redraw_interval=1000,
+ generalized_attention=False,
+ kernel_fn=nn.ReLU(),
+ qr_uniform_q=False,
+ dropout=0.0,
+ no_projection=False,
+ ):
+ super().__init__()
+ assert dim % heads == 0, "dimension must be divisible by number of heads"
+ dim_head = default(dim_head, dim // heads)
+ inner_dim = dim_head * heads
+ self.fast_attention = FastAttention(
+ dim_head,
+ nb_features,
+ causal=causal,
+ generalized_attention=generalized_attention,
+ kernel_fn=kernel_fn,
+ qr_uniform_q=qr_uniform_q,
+ no_projection=no_projection,
+ )
+
+ self.heads = heads
+ self.global_heads = heads - local_heads
+ self.local_attn = (
+ LocalAttention(
+ window_size=local_window_size,
+ causal=causal,
+ autopad=True,
+ dropout=dropout,
+ look_forward=int(not causal),
+ rel_pos_emb_config=(dim_head, local_heads),
+ )
+ if local_heads > 0
+ else None
+ )
+
+ self.to_q = nn.Linear(dim, inner_dim)
+ self.to_k = nn.Linear(dim, inner_dim)
+ self.to_v = nn.Linear(dim, inner_dim)
+ self.to_out = nn.Linear(inner_dim, dim)
+ self.dropout = nn.Dropout(dropout)
+
+ @torch.no_grad()
+ def redraw_projection_matrix(self):
+ self.fast_attention.redraw_projection_matrix()
+
+ def forward(
+ self,
+ x,
+ context=None,
+ mask=None,
+ context_mask=None,
+ name=None,
+ inference=False,
+ **kwargs,
+ ):
+ _, _, _, h, gh = *x.shape, self.heads, self.global_heads
+
+ cross_attend = exists(context)
+ context = default(context, x)
+ context_mask = default(context_mask, mask) if not cross_attend else context_mask
+ q, k, v = self.to_q(x), self.to_k(context), self.to_v(context)
+
+ q, k, v = map(lambda t: rearrange(t, "b n (h d) -> b h n d", h=h), (q, k, v))
+ (q, lq), (k, lk), (v, lv) = map(lambda t: (t[:, :gh], t[:, gh:]), (q, k, v))
+
+ attn_outs = []
+ if not empty(q):
+ if exists(context_mask):
+ global_mask = context_mask[:, None, :, None]
+ v.masked_fill_(~global_mask, 0.0)
+ if cross_attend:
+ pass # TODO: Implement cross-attention
+ else:
+ out = self.fast_attention(q, k, v)
+ attn_outs.append(out)
+
+ if not empty(lq):
+ assert (
+ not cross_attend
+ ), "local attention is not compatible with cross attention"
+ out = self.local_attn(lq, lk, lv, input_mask=mask)
+ attn_outs.append(out)
+
+ out = torch.cat(attn_outs, dim=1)
+ out = rearrange(out, "b h n d -> b n (h d)")
+ out = self.to_out(out)
+ return self.dropout(out)
+
+
+def l2_regularization(model, l2_alpha):
+ l2_loss = []
+ for module in model.modules():
+ if type(module) is nn.Conv2d:
+ l2_loss.append((module.weight**2).sum() / 2.0)
+ return l2_alpha * sum(l2_loss)
+
+
+class FCPE(nn.Module):
+ def __init__(
+ self,
+ input_channel=128,
+ out_dims=360,
+ n_layers=12,
+ n_chans=512,
+ use_siren=False,
+ use_full=False,
+ loss_mse_scale=10,
+ loss_l2_regularization=False,
+ loss_l2_regularization_scale=1,
+ loss_grad1_mse=False,
+ loss_grad1_mse_scale=1,
+ f0_max=1975.5,
+ f0_min=32.70,
+ confidence=False,
+ threshold=0.05,
+ use_input_conv=True,
+ ):
+ super().__init__()
+ if use_siren is True:
+ raise ValueError("Siren is not supported yet.")
+ if use_full is True:
+ raise ValueError("Full model is not supported yet.")
+
+ self.loss_mse_scale = loss_mse_scale if (loss_mse_scale is not None) else 10
+ self.loss_l2_regularization = (
+ loss_l2_regularization if (loss_l2_regularization is not None) else False
+ )
+ self.loss_l2_regularization_scale = (
+ loss_l2_regularization_scale
+ if (loss_l2_regularization_scale is not None)
+ else 1
+ )
+ self.loss_grad1_mse = loss_grad1_mse if (loss_grad1_mse is not None) else False
+ self.loss_grad1_mse_scale = (
+ loss_grad1_mse_scale if (loss_grad1_mse_scale is not None) else 1
+ )
+ self.f0_max = f0_max if (f0_max is not None) else 1975.5
+ self.f0_min = f0_min if (f0_min is not None) else 32.70
+ self.confidence = confidence if (confidence is not None) else False
+ self.threshold = threshold if (threshold is not None) else 0.05
+ self.use_input_conv = use_input_conv if (use_input_conv is not None) else True
+
+ self.cent_table_b = torch.Tensor(
+ np.linspace(
+ self.f0_to_cent(torch.Tensor([f0_min]))[0],
+ self.f0_to_cent(torch.Tensor([f0_max]))[0],
+ out_dims,
+ )
+ )
+ self.register_buffer("cent_table", self.cent_table_b)
+
+ # conv in stack
+ _leaky = nn.LeakyReLU()
+ self.stack = nn.Sequential(
+ nn.Conv1d(input_channel, n_chans, 3, 1, 1),
+ nn.GroupNorm(4, n_chans),
+ _leaky,
+ nn.Conv1d(n_chans, n_chans, 3, 1, 1),
+ )
+
+ # transformer
+ self.decoder = PCmer(
+ num_layers=n_layers,
+ num_heads=8,
+ dim_model=n_chans,
+ dim_keys=n_chans,
+ dim_values=n_chans,
+ residual_dropout=0.1,
+ attention_dropout=0.1,
+ )
+ self.norm = nn.LayerNorm(n_chans)
+
+ # out
+ self.n_out = out_dims
+ self.dense_out = weight_norm(nn.Linear(n_chans, self.n_out))
+
+ def forward(
+ self, mel, infer=True, gt_f0=None, return_hz_f0=False, cdecoder="local_argmax"
+ ):
+ if cdecoder == "argmax":
+ self.cdecoder = self.cents_decoder
+ elif cdecoder == "local_argmax":
+ self.cdecoder = self.cents_local_decoder
+
+ x = (
+ self.stack(mel.transpose(1, 2)).transpose(1, 2)
+ if self.use_input_conv
+ else mel
+ )
+ x = self.decoder(x)
+ x = self.norm(x)
+ x = self.dense_out(x)
+ x = torch.sigmoid(x)
+
+ if not infer:
+ gt_cent_f0 = self.f0_to_cent(gt_f0)
+ gt_cent_f0 = self.gaussian_blurred_cent(gt_cent_f0)
+ loss_all = self.loss_mse_scale * F.binary_cross_entropy(x, gt_cent_f0)
+ if self.loss_l2_regularization:
+ loss_all = loss_all + l2_regularization(
+ model=self, l2_alpha=self.loss_l2_regularization_scale
+ )
+ x = loss_all
+ if infer:
+ x = self.cdecoder(x)
+ x = self.cent_to_f0(x)
+ x = (1 + x / 700).log() if not return_hz_f0 else x
+
+ return x
+
+ def cents_decoder(self, y, mask=True):
+ B, N, _ = y.size()
+ ci = self.cent_table[None, None, :].expand(B, N, -1)
+ rtn = torch.sum(ci * y, dim=-1, keepdim=True) / torch.sum(
+ y, dim=-1, keepdim=True
+ )
+ if mask:
+ confident = torch.max(y, dim=-1, keepdim=True)[0]
+ confident_mask = torch.ones_like(confident)
+ confident_mask[confident <= self.threshold] = float("-INF")
+ rtn = rtn * confident_mask
+ return (rtn, confident) if self.confidence else rtn
+
+ def cents_local_decoder(self, y, mask=True):
+ B, N, _ = y.size()
+ ci = self.cent_table[None, None, :].expand(B, N, -1)
+ confident, max_index = torch.max(y, dim=-1, keepdim=True)
+ local_argmax_index = torch.arange(0, 9).to(max_index.device) + (max_index - 4)
+ local_argmax_index = torch.clamp(local_argmax_index, 0, self.n_out - 1)
+ ci_l = torch.gather(ci, -1, local_argmax_index)
+ y_l = torch.gather(y, -1, local_argmax_index)
+ rtn = torch.sum(ci_l * y_l, dim=-1, keepdim=True) / torch.sum(
+ y_l, dim=-1, keepdim=True
+ )
+ if mask:
+ confident_mask = torch.ones_like(confident)
+ confident_mask[confident <= self.threshold] = float("-INF")
+ rtn = rtn * confident_mask
+ return (rtn, confident) if self.confidence else rtn
+
+ def cent_to_f0(self, cent):
+ return 10.0 * 2 ** (cent / 1200.0)
+
+ def f0_to_cent(self, f0):
+ return 1200.0 * torch.log2(f0 / 10.0)
+
+ def gaussian_blurred_cent(self, cents):
+ mask = (cents > 0.1) & (cents < (1200.0 * np.log2(self.f0_max / 10.0)))
+ B, N, _ = cents.size()
+ ci = self.cent_table[None, None, :].expand(B, N, -1)
+ return torch.exp(-torch.square(ci - cents) / 1250) * mask.float()
+
+
+class FCPEInfer:
+ def __init__(self, model_path, device=None, dtype=torch.float32):
+ if device is None:
+ device = "cuda" if torch.cuda.is_available() else "cpu"
+ self.device = device
+ ckpt = torch.load(model_path, map_location=torch.device(self.device))
+ self.args = DotDict(ckpt["config"])
+ self.dtype = dtype
+ model = FCPE(
+ input_channel=self.args.model.input_channel,
+ out_dims=self.args.model.out_dims,
+ n_layers=self.args.model.n_layers,
+ n_chans=self.args.model.n_chans,
+ use_siren=self.args.model.use_siren,
+ use_full=self.args.model.use_full,
+ loss_mse_scale=self.args.loss.loss_mse_scale,
+ loss_l2_regularization=self.args.loss.loss_l2_regularization,
+ loss_l2_regularization_scale=self.args.loss.loss_l2_regularization_scale,
+ loss_grad1_mse=self.args.loss.loss_grad1_mse,
+ loss_grad1_mse_scale=self.args.loss.loss_grad1_mse_scale,
+ f0_max=self.args.model.f0_max,
+ f0_min=self.args.model.f0_min,
+ confidence=self.args.model.confidence,
+ )
+ model.to(self.device).to(self.dtype)
+ model.load_state_dict(ckpt["model"])
+ model.eval()
+ self.model = model
+ self.wav2mel = Wav2Mel(self.args, dtype=self.dtype, device=self.device)
+
+ @torch.no_grad()
+ def __call__(self, audio, sr, threshold=0.05):
+ self.model.threshold = threshold
+ audio = audio[None, :]
+ mel = self.wav2mel(audio=audio, sample_rate=sr).to(self.dtype)
+ f0 = self.model(mel=mel, infer=True, return_hz_f0=True)
+ return f0
+
+
+class Wav2Mel:
+ def __init__(self, args, device=None, dtype=torch.float32):
+ self.sample_rate = args.mel.sampling_rate
+ self.hop_size = args.mel.hop_size
+ if device is None:
+ device = "cuda" if torch.cuda.is_available() else "cpu"
+ self.device = device
+ self.dtype = dtype
+ self.stft = STFT(
+ args.mel.sampling_rate,
+ args.mel.num_mels,
+ args.mel.n_fft,
+ args.mel.win_size,
+ args.mel.hop_size,
+ args.mel.fmin,
+ args.mel.fmax,
+ )
+ self.resample_kernel = {}
+
+ def extract_nvstft(self, audio, keyshift=0, train=False):
+ mel = self.stft.get_mel(audio, keyshift=keyshift, train=train).transpose(1, 2)
+ return mel
+
+ def extract_mel(self, audio, sample_rate, keyshift=0, train=False):
+ audio = audio.to(self.dtype).to(self.device)
+ if sample_rate == self.sample_rate:
+ audio_res = audio
+ else:
+ key_str = str(sample_rate)
+ if key_str not in self.resample_kernel:
+ self.resample_kernel[key_str] = Resample(
+ sample_rate, self.sample_rate, lowpass_filter_width=128
+ )
+ self.resample_kernel[key_str] = (
+ self.resample_kernel[key_str].to(self.dtype).to(self.device)
+ )
+ audio_res = self.resample_kernel[key_str](audio)
+
+ mel = self.extract_nvstft(
+ audio_res, keyshift=keyshift, train=train
+ ) # B, n_frames, bins
+ n_frames = int(audio.shape[1] // self.hop_size) + 1
+ mel = (
+ torch.cat((mel, mel[:, -1:, :]), 1) if n_frames > int(mel.shape[1]) else mel
+ )
+ mel = mel[:, :n_frames, :] if n_frames < int(mel.shape[1]) else mel
+ return mel
+
+ def __call__(self, audio, sample_rate, keyshift=0, train=False):
+ return self.extract_mel(audio, sample_rate, keyshift=keyshift, train=train)
+
+
+class DotDict(dict):
+ def __getattr__(*args):
+ val = dict.get(*args)
+ return DotDict(val) if type(val) is dict else val
+
+ __setattr__ = dict.__setitem__
+ __delattr__ = dict.__delitem__
+
+
+class F0Predictor(object):
+ def compute_f0(self, wav, p_len):
+ pass
+
+ def compute_f0_uv(self, wav, p_len):
+ pass
+
+
+class FCPEF0Predictor(F0Predictor):
+ def __init__(
+ self,
+ model_path,
+ hop_length=512,
+ f0_min=50,
+ f0_max=1100,
+ dtype=torch.float32,
+ device=None,
+ sample_rate=44100,
+ threshold=0.05,
+ ):
+ self.fcpe = FCPEInfer(model_path, device=device, dtype=dtype)
+ self.hop_length = hop_length
+ self.f0_min = f0_min
+ self.f0_max = f0_max
+ self.device = device or ("cuda" if torch.cuda.is_available() else "cpu")
+ self.threshold = threshold
+ self.sample_rate = sample_rate
+ self.dtype = dtype
+ self.name = "fcpe"
+
+ def repeat_expand(
+ self,
+ content: Union[torch.Tensor, np.ndarray],
+ target_len: int,
+ mode: str = "nearest",
+ ):
+ ndim = content.ndim
+ content = (
+ content[None, None]
+ if ndim == 1
+ else content[None] if ndim == 2 else content
+ )
+ assert content.ndim == 3
+ is_np = isinstance(content, np.ndarray)
+ content = torch.from_numpy(content) if is_np else content
+ results = torch.nn.functional.interpolate(content, size=target_len, mode=mode)
+ results = results.numpy() if is_np else results
+ return results[0, 0] if ndim == 1 else results[0] if ndim == 2 else results
+
+ def post_process(self, x, sample_rate, f0, pad_to):
+ f0 = (
+ torch.from_numpy(f0).float().to(x.device)
+ if isinstance(f0, np.ndarray)
+ else f0
+ )
+ f0 = self.repeat_expand(f0, pad_to) if pad_to is not None else f0
+
+ vuv_vector = torch.zeros_like(f0)
+ vuv_vector[f0 > 0.0] = 1.0
+ vuv_vector[f0 <= 0.0] = 0.0
+
+ nzindex = torch.nonzero(f0).squeeze()
+ f0 = torch.index_select(f0, dim=0, index=nzindex).cpu().numpy()
+ time_org = self.hop_length / sample_rate * nzindex.cpu().numpy()
+ time_frame = np.arange(pad_to) * self.hop_length / sample_rate
+
+ vuv_vector = F.interpolate(vuv_vector[None, None, :], size=pad_to)[0][0]
+
+ if f0.shape[0] <= 0:
+ return np.zeros(pad_to), vuv_vector.cpu().numpy()
+ if f0.shape[0] == 1:
+ return np.ones(pad_to) * f0[0], vuv_vector.cpu().numpy()
+
+ f0 = np.interp(time_frame, time_org, f0, left=f0[0], right=f0[-1])
+ return f0, vuv_vector.cpu().numpy()
+
+ def compute_f0(self, wav, p_len=None):
+ x = torch.FloatTensor(wav).to(self.dtype).to(self.device)
+ p_len = x.shape[0] // self.hop_length if p_len is None else p_len
+ f0 = self.fcpe(x, sr=self.sample_rate, threshold=self.threshold)[0, :, 0]
+ if torch.all(f0 == 0):
+ return f0.cpu().numpy() if p_len is None else np.zeros(p_len), (
+ f0.cpu().numpy() if p_len is None else np.zeros(p_len)
+ )
+ return self.post_process(x, self.sample_rate, f0, p_len)[0]
+
+ def compute_f0_uv(self, wav, p_len=None):
+ x = torch.FloatTensor(wav).to(self.dtype).to(self.device)
+ p_len = x.shape[0] // self.hop_length if p_len is None else p_len
+ f0 = self.fcpe(x, sr=self.sample_rate, threshold=self.threshold)[0, :, 0]
+ if torch.all(f0 == 0):
+ return f0.cpu().numpy() if p_len is None else np.zeros(p_len), (
+ f0.cpu().numpy() if p_len is None else np.zeros(p_len)
+ )
+ return self.post_process(x, self.sample_rate, f0, p_len)
diff --git a/rvc/lib/predictors/RMVPE.py b/rvc/lib/predictors/RMVPE.py
new file mode 100644
index 0000000000000000000000000000000000000000..970c5e58f80ca1b4050f5201388c2b5a514d695c
--- /dev/null
+++ b/rvc/lib/predictors/RMVPE.py
@@ -0,0 +1,560 @@
+import torch
+import torch.nn as nn
+import torch.nn.functional as F
+import numpy as np
+
+from librosa.filters import mel
+from typing import List
+
+# Constants for readability
+N_MELS = 128
+N_CLASS = 360
+
+
+# Define a helper function for creating convolutional blocks
+class ConvBlockRes(nn.Module):
+ """
+ A convolutional block with residual connection.
+
+ Args:
+ in_channels (int): Number of input channels.
+ out_channels (int): Number of output channels.
+ momentum (float): Momentum for batch normalization.
+ """
+
+ def __init__(self, in_channels, out_channels, momentum=0.01):
+ super(ConvBlockRes, self).__init__()
+ self.conv = nn.Sequential(
+ nn.Conv2d(
+ in_channels=in_channels,
+ out_channels=out_channels,
+ kernel_size=(3, 3),
+ stride=(1, 1),
+ padding=(1, 1),
+ bias=False,
+ ),
+ nn.BatchNorm2d(out_channels, momentum=momentum),
+ nn.ReLU(),
+ nn.Conv2d(
+ in_channels=out_channels,
+ out_channels=out_channels,
+ kernel_size=(3, 3),
+ stride=(1, 1),
+ padding=(1, 1),
+ bias=False,
+ ),
+ nn.BatchNorm2d(out_channels, momentum=momentum),
+ nn.ReLU(),
+ )
+ if in_channels != out_channels:
+ self.shortcut = nn.Conv2d(in_channels, out_channels, (1, 1))
+ self.is_shortcut = True
+ else:
+ self.is_shortcut = False
+
+ def forward(self, x):
+ if self.is_shortcut:
+ return self.conv(x) + self.shortcut(x)
+ else:
+ return self.conv(x) + x
+
+
+# Define a class for residual encoder blocks
+class ResEncoderBlock(nn.Module):
+ """
+ A residual encoder block.
+
+ Args:
+ in_channels (int): Number of input channels.
+ out_channels (int): Number of output channels.
+ kernel_size (tuple): Size of the average pooling kernel.
+ n_blocks (int): Number of convolutional blocks in the block.
+ momentum (float): Momentum for batch normalization.
+ """
+
+ def __init__(
+ self, in_channels, out_channels, kernel_size, n_blocks=1, momentum=0.01
+ ):
+ super(ResEncoderBlock, self).__init__()
+ self.n_blocks = n_blocks
+ self.conv = nn.ModuleList()
+ self.conv.append(ConvBlockRes(in_channels, out_channels, momentum))
+ for _ in range(n_blocks - 1):
+ self.conv.append(ConvBlockRes(out_channels, out_channels, momentum))
+ self.kernel_size = kernel_size
+ if self.kernel_size is not None:
+ self.pool = nn.AvgPool2d(kernel_size=kernel_size)
+
+ def forward(self, x):
+ for i in range(self.n_blocks):
+ x = self.conv[i](x)
+ if self.kernel_size is not None:
+ return x, self.pool(x)
+ else:
+ return x
+
+
+# Define a class for the encoder
+class Encoder(nn.Module):
+ """
+ The encoder part of the DeepUnet.
+
+ Args:
+ in_channels (int): Number of input channels.
+ in_size (int): Size of the input tensor.
+ n_encoders (int): Number of encoder blocks.
+ kernel_size (tuple): Size of the average pooling kernel.
+ n_blocks (int): Number of convolutional blocks in each encoder block.
+ out_channels (int): Number of output channels for the first encoder block.
+ momentum (float): Momentum for batch normalization.
+ """
+
+ def __init__(
+ self,
+ in_channels,
+ in_size,
+ n_encoders,
+ kernel_size,
+ n_blocks,
+ out_channels=16,
+ momentum=0.01,
+ ):
+ super(Encoder, self).__init__()
+ self.n_encoders = n_encoders
+ self.bn = nn.BatchNorm2d(in_channels, momentum=momentum)
+ self.layers = nn.ModuleList()
+ self.latent_channels = []
+ for i in range(self.n_encoders):
+ self.layers.append(
+ ResEncoderBlock(
+ in_channels, out_channels, kernel_size, n_blocks, momentum=momentum
+ )
+ )
+ self.latent_channels.append([out_channels, in_size])
+ in_channels = out_channels
+ out_channels *= 2
+ in_size //= 2
+ self.out_size = in_size
+ self.out_channel = out_channels
+
+ def forward(self, x: torch.Tensor):
+ concat_tensors: List[torch.Tensor] = []
+ x = self.bn(x)
+ for i in range(self.n_encoders):
+ t, x = self.layers[i](x)
+ concat_tensors.append(t)
+ return x, concat_tensors
+
+
+# Define a class for the intermediate layer
+class Intermediate(nn.Module):
+ """
+ The intermediate layer of the DeepUnet.
+
+ Args:
+ in_channels (int): Number of input channels.
+ out_channels (int): Number of output channels.
+ n_inters (int): Number of convolutional blocks in the intermediate layer.
+ n_blocks (int): Number of convolutional blocks in each intermediate block.
+ momentum (float): Momentum for batch normalization.
+ """
+
+ def __init__(self, in_channels, out_channels, n_inters, n_blocks, momentum=0.01):
+ super(Intermediate, self).__init__()
+ self.n_inters = n_inters
+ self.layers = nn.ModuleList()
+ self.layers.append(
+ ResEncoderBlock(in_channels, out_channels, None, n_blocks, momentum)
+ )
+ for _ in range(self.n_inters - 1):
+ self.layers.append(
+ ResEncoderBlock(out_channels, out_channels, None, n_blocks, momentum)
+ )
+
+ def forward(self, x):
+ for i in range(self.n_inters):
+ x = self.layers[i](x)
+ return x
+
+
+# Define a class for residual decoder blocks
+class ResDecoderBlock(nn.Module):
+ """
+ A residual decoder block.
+
+ Args:
+ in_channels (int): Number of input channels.
+ out_channels (int): Number of output channels.
+ stride (tuple): Stride for transposed convolution.
+ n_blocks (int): Number of convolutional blocks in the block.
+ momentum (float): Momentum for batch normalization.
+ """
+
+ def __init__(self, in_channels, out_channels, stride, n_blocks=1, momentum=0.01):
+ super(ResDecoderBlock, self).__init__()
+ out_padding = (0, 1) if stride == (1, 2) else (1, 1)
+ self.n_blocks = n_blocks
+ self.conv1 = nn.Sequential(
+ nn.ConvTranspose2d(
+ in_channels=in_channels,
+ out_channels=out_channels,
+ kernel_size=(3, 3),
+ stride=stride,
+ padding=(1, 1),
+ output_padding=out_padding,
+ bias=False,
+ ),
+ nn.BatchNorm2d(out_channels, momentum=momentum),
+ nn.ReLU(),
+ )
+ self.conv2 = nn.ModuleList()
+ self.conv2.append(ConvBlockRes(out_channels * 2, out_channels, momentum))
+ for _ in range(n_blocks - 1):
+ self.conv2.append(ConvBlockRes(out_channels, out_channels, momentum))
+
+ def forward(self, x, concat_tensor):
+ x = self.conv1(x)
+ x = torch.cat((x, concat_tensor), dim=1)
+ for i in range(self.n_blocks):
+ x = self.conv2[i](x)
+ return x
+
+
+# Define a class for the decoder
+class Decoder(nn.Module):
+ """
+ The decoder part of the DeepUnet.
+
+ Args:
+ in_channels (int): Number of input channels.
+ n_decoders (int): Number of decoder blocks.
+ stride (tuple): Stride for transposed convolution.
+ n_blocks (int): Number of convolutional blocks in each decoder block.
+ momentum (float): Momentum for batch normalization.
+ """
+
+ def __init__(self, in_channels, n_decoders, stride, n_blocks, momentum=0.01):
+ super(Decoder, self).__init__()
+ self.layers = nn.ModuleList()
+ self.n_decoders = n_decoders
+ for _ in range(self.n_decoders):
+ out_channels = in_channels // 2
+ self.layers.append(
+ ResDecoderBlock(in_channels, out_channels, stride, n_blocks, momentum)
+ )
+ in_channels = out_channels
+
+ def forward(self, x, concat_tensors):
+ for i in range(self.n_decoders):
+ x = self.layers[i](x, concat_tensors[-1 - i])
+ return x
+
+
+# Define a class for the DeepUnet architecture
+class DeepUnet(nn.Module):
+ """
+ The DeepUnet architecture.
+
+ Args:
+ kernel_size (tuple): Size of the average pooling kernel.
+ n_blocks (int): Number of convolutional blocks in each encoder/decoder block.
+ en_de_layers (int): Number of encoder/decoder layers.
+ inter_layers (int): Number of convolutional blocks in the intermediate layer.
+ in_channels (int): Number of input channels.
+ en_out_channels (int): Number of output channels for the first encoder block.
+ """
+
+ def __init__(
+ self,
+ kernel_size,
+ n_blocks,
+ en_de_layers=5,
+ inter_layers=4,
+ in_channels=1,
+ en_out_channels=16,
+ ):
+ super(DeepUnet, self).__init__()
+ self.encoder = Encoder(
+ in_channels, 128, en_de_layers, kernel_size, n_blocks, en_out_channels
+ )
+ self.intermediate = Intermediate(
+ self.encoder.out_channel // 2,
+ self.encoder.out_channel,
+ inter_layers,
+ n_blocks,
+ )
+ self.decoder = Decoder(
+ self.encoder.out_channel, en_de_layers, kernel_size, n_blocks
+ )
+
+ def forward(self, x):
+ x, concat_tensors = self.encoder(x)
+ x = self.intermediate(x)
+ x = self.decoder(x, concat_tensors)
+ return x
+
+
+# Define a class for the end-to-end model
+class E2E(nn.Module):
+ """
+ The end-to-end model.
+
+ Args:
+ n_blocks (int): Number of convolutional blocks in each encoder/decoder block.
+ n_gru (int): Number of GRU layers.
+ kernel_size (tuple): Size of the average pooling kernel.
+ en_de_layers (int): Number of encoder/decoder layers.
+ inter_layers (int): Number of convolutional blocks in the intermediate layer.
+ in_channels (int): Number of input channels.
+ en_out_channels (int): Number of output channels for the first encoder block.
+ """
+
+ def __init__(
+ self,
+ n_blocks,
+ n_gru,
+ kernel_size,
+ en_de_layers=5,
+ inter_layers=4,
+ in_channels=1,
+ en_out_channels=16,
+ ):
+ super(E2E, self).__init__()
+ self.unet = DeepUnet(
+ kernel_size,
+ n_blocks,
+ en_de_layers,
+ inter_layers,
+ in_channels,
+ en_out_channels,
+ )
+ self.cnn = nn.Conv2d(en_out_channels, 3, (3, 3), padding=(1, 1))
+ if n_gru:
+ self.fc = nn.Sequential(
+ BiGRU(3 * 128, 256, n_gru),
+ nn.Linear(512, N_CLASS),
+ nn.Dropout(0.25),
+ nn.Sigmoid(),
+ )
+ else:
+ self.fc = nn.Sequential(
+ nn.Linear(3 * N_MELS, N_CLASS), nn.Dropout(0.25), nn.Sigmoid()
+ )
+
+ def forward(self, mel):
+ mel = mel.transpose(-1, -2).unsqueeze(1)
+ x = self.cnn(self.unet(mel)).transpose(1, 2).flatten(-2)
+ x = self.fc(x)
+ return x
+
+
+# Define a class for the MelSpectrogram extractor
+class MelSpectrogram(torch.nn.Module):
+ """
+ Extracts Mel-spectrogram features from audio.
+
+ Args:
+ is_half (bool): Whether to use half-precision floating-point numbers.
+ n_mel_channels (int): Number of Mel-frequency bands.
+ sample_rate (int): Sampling rate of the audio.
+ win_length (int): Length of the window function in samples.
+ hop_length (int): Hop size between frames in samples.
+ n_fft (int, optional): Length of the FFT window. Defaults to None, which uses win_length.
+ mel_fmin (int, optional): Minimum frequency for the Mel filter bank. Defaults to 0.
+ mel_fmax (int, optional): Maximum frequency for the Mel filter bank. Defaults to None.
+ clamp (float, optional): Minimum value for clamping the Mel-spectrogram. Defaults to 1e-5.
+ """
+
+ def __init__(
+ self,
+ is_half,
+ n_mel_channels,
+ sample_rate,
+ win_length,
+ hop_length,
+ n_fft=None,
+ mel_fmin=0,
+ mel_fmax=None,
+ clamp=1e-5,
+ ):
+ super().__init__()
+ n_fft = win_length if n_fft is None else n_fft
+ self.hann_window = {}
+ mel_basis = mel(
+ sr=sample_rate,
+ n_fft=n_fft,
+ n_mels=n_mel_channels,
+ fmin=mel_fmin,
+ fmax=mel_fmax,
+ htk=True,
+ )
+ mel_basis = torch.from_numpy(mel_basis).float()
+ self.register_buffer("mel_basis", mel_basis)
+ self.n_fft = win_length if n_fft is None else n_fft
+ self.hop_length = hop_length
+ self.win_length = win_length
+ self.sample_rate = sample_rate
+ self.n_mel_channels = n_mel_channels
+ self.clamp = clamp
+ self.is_half = is_half
+
+ def forward(self, audio, keyshift=0, speed=1, center=True):
+ factor = 2 ** (keyshift / 12)
+ n_fft_new = int(np.round(self.n_fft * factor))
+ win_length_new = int(np.round(self.win_length * factor))
+ hop_length_new = int(np.round(self.hop_length * speed))
+ keyshift_key = str(keyshift) + "_" + str(audio.device)
+ if keyshift_key not in self.hann_window:
+ self.hann_window[keyshift_key] = torch.hann_window(win_length_new).to(
+ audio.device
+ )
+ fft = torch.stft(
+ audio,
+ n_fft=n_fft_new,
+ hop_length=hop_length_new,
+ win_length=win_length_new,
+ window=self.hann_window[keyshift_key],
+ center=center,
+ return_complex=True,
+ )
+
+ magnitude = torch.sqrt(fft.real.pow(2) + fft.imag.pow(2))
+ if keyshift != 0:
+ size = self.n_fft // 2 + 1
+ resize = magnitude.size(1)
+ if resize < size:
+ magnitude = F.pad(magnitude, (0, 0, 0, size - resize))
+ magnitude = magnitude[:, :size, :] * self.win_length / win_length_new
+ mel_output = torch.matmul(self.mel_basis, magnitude)
+ if self.is_half:
+ mel_output = mel_output.half()
+ log_mel_spec = torch.log(torch.clamp(mel_output, min=self.clamp))
+ return log_mel_spec
+
+
+# Define a class for the RMVPE0 predictor
+class RMVPE0Predictor:
+ """
+ A predictor for fundamental frequency (F0) based on the RMVPE0 model.
+
+ Args:
+ model_path (str): Path to the RMVPE0 model file.
+ is_half (bool): Whether to use half-precision floating-point numbers.
+ device (str, optional): Device to use for computation. Defaults to None, which uses CUDA if available.
+ """
+
+ def __init__(self, model_path, is_half, device=None):
+ self.resample_kernel = {}
+ model = E2E(4, 1, (2, 2))
+ ckpt = torch.load(model_path, map_location="cpu")
+ model.load_state_dict(ckpt)
+ model.eval()
+ if is_half:
+ model = model.half()
+ self.model = model
+ self.resample_kernel = {}
+ self.is_half = is_half
+ self.device = device
+ self.mel_extractor = MelSpectrogram(
+ is_half, N_MELS, 16000, 1024, 160, None, 30, 8000
+ ).to(device)
+ self.model = self.model.to(device)
+ cents_mapping = 20 * np.arange(N_CLASS) + 1997.3794084376191
+ self.cents_mapping = np.pad(cents_mapping, (4, 4))
+
+ def mel2hidden(self, mel):
+ """
+ Converts Mel-spectrogram features to hidden representation.
+
+ Args:
+ mel (torch.Tensor): Mel-spectrogram features.
+ """
+ with torch.no_grad():
+ n_frames = mel.shape[-1]
+ mel = F.pad(
+ mel, (0, 32 * ((n_frames - 1) // 32 + 1) - n_frames), mode="reflect"
+ )
+ hidden = self.model(mel)
+ return hidden[:, :n_frames]
+
+ def decode(self, hidden, thred=0.03):
+ """
+ Decodes hidden representation to F0.
+
+ Args:
+ hidden (np.ndarray): Hidden representation.
+ thred (float, optional): Threshold for salience. Defaults to 0.03.
+ """
+ cents_pred = self.to_local_average_cents(hidden, thred=thred)
+ f0 = 10 * (2 ** (cents_pred / 1200))
+ f0[f0 == 10] = 0
+ return f0
+
+ def infer_from_audio(self, audio, thred=0.03):
+ """
+ Infers F0 from audio.
+
+ Args:
+ audio (np.ndarray): Audio signal.
+ thred (float, optional): Threshold for salience. Defaults to 0.03.
+ """
+ audio = torch.from_numpy(audio).float().to(self.device).unsqueeze(0)
+ mel = self.mel_extractor(audio, center=True)
+ hidden = self.mel2hidden(mel)
+ hidden = hidden.squeeze(0).cpu().numpy()
+ if self.is_half == True:
+ hidden = hidden.astype("float32")
+ f0 = self.decode(hidden, thred=thred)
+ return f0
+
+ def to_local_average_cents(self, salience, thred=0.05):
+ """
+ Converts salience to local average cents.
+
+ Args:
+ salience (np.ndarray): Salience values.
+ thred (float, optional): Threshold for salience. Defaults to 0.05.
+ """
+ center = np.argmax(salience, axis=1)
+ salience = np.pad(salience, ((0, 0), (4, 4)))
+ center += 4
+ todo_salience = []
+ todo_cents_mapping = []
+ starts = center - 4
+ ends = center + 5
+ for idx in range(salience.shape[0]):
+ todo_salience.append(salience[:, starts[idx] : ends[idx]][idx])
+ todo_cents_mapping.append(self.cents_mapping[starts[idx] : ends[idx]])
+ todo_salience = np.array(todo_salience)
+ todo_cents_mapping = np.array(todo_cents_mapping)
+ product_sum = np.sum(todo_salience * todo_cents_mapping, 1)
+ weight_sum = np.sum(todo_salience, 1)
+ devided = product_sum / weight_sum
+ maxx = np.max(salience, axis=1)
+ devided[maxx <= thred] = 0
+ return devided
+
+
+# Define a class for BiGRU (bidirectional GRU)
+class BiGRU(nn.Module):
+ """
+ A bidirectional GRU layer.
+
+ Args:
+ input_features (int): Number of input features.
+ hidden_features (int): Number of hidden features.
+ num_layers (int): Number of GRU layers.
+ """
+
+ def __init__(self, input_features, hidden_features, num_layers):
+ super(BiGRU, self).__init__()
+ self.gru = nn.GRU(
+ input_features,
+ hidden_features,
+ num_layers=num_layers,
+ batch_first=True,
+ bidirectional=True,
+ )
+
+ def forward(self, x):
+ return self.gru(x)[0]
diff --git a/rvc/lib/tools/analyzer.py b/rvc/lib/tools/analyzer.py
new file mode 100644
index 0000000000000000000000000000000000000000..f4b794348082b168132dda0a23933c6d633f0097
--- /dev/null
+++ b/rvc/lib/tools/analyzer.py
@@ -0,0 +1,76 @@
+import numpy as np
+import matplotlib.pyplot as plt
+import librosa.display
+import librosa
+
+
+def calculate_features(y, sr):
+ stft = np.abs(librosa.stft(y))
+ duration = librosa.get_duration(y=y, sr=sr)
+ cent = librosa.feature.spectral_centroid(S=stft, sr=sr)[0]
+ bw = librosa.feature.spectral_bandwidth(S=stft, sr=sr)[0]
+ rolloff = librosa.feature.spectral_rolloff(S=stft, sr=sr)[0]
+ return stft, duration, cent, bw, rolloff
+
+
+def plot_title(title):
+ plt.suptitle(title, fontsize=16, fontweight="bold")
+
+
+def plot_spectrogram(y, sr, stft, duration, cmap="inferno"):
+ plt.subplot(3, 1, 1)
+ plt.imshow(
+ librosa.amplitude_to_db(stft, ref=np.max),
+ origin="lower",
+ extent=[0, duration, 0, sr / 1000],
+ aspect="auto",
+ cmap=cmap, # Change the colormap here
+ )
+ plt.colorbar(format="%+2.0f dB")
+ plt.xlabel("Time (s)")
+ plt.ylabel("Frequency (kHz)")
+ plt.title("Spectrogram")
+
+
+def plot_waveform(y, sr, duration):
+ plt.subplot(3, 1, 2)
+ librosa.display.waveshow(y, sr=sr)
+ plt.xlabel("Time (s)")
+ plt.ylabel("Amplitude")
+ plt.title("Waveform")
+
+
+def plot_features(times, cent, bw, rolloff, duration):
+ plt.subplot(3, 1, 3)
+ plt.plot(times, cent, label="Spectral Centroid (kHz)", color="b")
+ plt.plot(times, bw, label="Spectral Bandwidth (kHz)", color="g")
+ plt.plot(times, rolloff, label="Spectral Rolloff (kHz)", color="r")
+ plt.xlabel("Time (s)")
+ plt.title("Spectral Features")
+ plt.legend()
+
+
+def analyze_audio(audio_file, save_plot_path="logs/audio_analysis.png"):
+ y, sr = librosa.load(audio_file)
+ stft, duration, cent, bw, rolloff = calculate_features(y, sr)
+
+ plt.figure(figsize=(12, 10))
+
+ plot_title("Audio Analysis" + " - " + audio_file.split("/")[-1])
+ plot_spectrogram(y, sr, stft, duration)
+ plot_waveform(y, sr, duration)
+ plot_features(librosa.times_like(cent), cent, bw, rolloff, duration)
+
+ plt.tight_layout()
+
+ if save_plot_path:
+ plt.savefig(save_plot_path, bbox_inches="tight", dpi=300)
+ plt.close()
+
+ audio_info = f"""Sample Rate: {sr}\nDuration: {(
+ str(round(duration, 2)) + " seconds"
+ if duration < 60
+ else str(round(duration / 60, 2)) + " minutes"
+ )}\nNumber of Samples: {len(y)}\nBits per Sample: {librosa.get_samplerate(audio_file)}\nChannels: {"Mono (1)" if y.ndim == 1 else "Stereo (2)"}"""
+
+ return audio_info, save_plot_path
diff --git a/rvc/lib/tools/gdown.py b/rvc/lib/tools/gdown.py
new file mode 100644
index 0000000000000000000000000000000000000000..eb5ca071e52d3d48c58708ee2fbbeefb205827d3
--- /dev/null
+++ b/rvc/lib/tools/gdown.py
@@ -0,0 +1,354 @@
+import os
+import re
+import six
+import sys
+import json
+import tqdm
+import time
+import shutil
+import warnings
+import tempfile
+import textwrap
+import requests
+from six.moves import urllib_parse
+
+
+def indent(text, prefix):
+ """Indent each non-empty line of text with the given prefix."""
+ return "".join(
+ (prefix + line if line.strip() else line) for line in text.splitlines(True)
+ )
+
+
+class FileURLRetrievalError(Exception):
+ pass
+
+
+class FolderContentsMaximumLimitError(Exception):
+ pass
+
+
+def parse_url(url, warning=True):
+ """Parse URLs especially for Google Drive links.
+
+ Args:
+ url: URL to parse.
+ warning: Whether to warn if the URL is not a download link.
+
+ Returns:
+ A tuple (file_id, is_download_link), where file_id is the ID of the
+ file on Google Drive, and is_download_link is a flag indicating
+ whether the URL is a download link.
+ """
+ parsed = urllib_parse.urlparse(url)
+ query = urllib_parse.parse_qs(parsed.query)
+ is_gdrive = parsed.hostname in ("drive.google.com", "docs.google.com")
+ is_download_link = parsed.path.endswith("/uc")
+
+ if not is_gdrive:
+ return None, is_download_link
+
+ file_id = query.get("id", [None])[0]
+ if file_id is None:
+ for pattern in (
+ r"^/file/d/(.*?)/(edit|view)$",
+ r"^/file/u/[0-9]+/d/(.*?)/(edit|view)$",
+ r"^/document/d/(.*?)/(edit|htmlview|view)$",
+ r"^/document/u/[0-9]+/d/(.*?)/(edit|htmlview|view)$",
+ r"^/presentation/d/(.*?)/(edit|htmlview|view)$",
+ r"^/presentation/u/[0-9]+/d/(.*?)/(edit|htmlview|view)$",
+ r"^/spreadsheets/d/(.*?)/(edit|htmlview|view)$",
+ r"^/spreadsheets/u/[0-9]+/d/(.*?)/(edit|htmlview|view)$",
+ ):
+ match = re.match(pattern, parsed.path)
+ if match:
+ file_id = match.group(1)
+ break
+
+ if warning and not is_download_link:
+ warnings.warn(
+ "You specified a Google Drive link that is not the correct link "
+ "to download a file. You might want to try `--fuzzy` option "
+ f"or the following url: https://drive.google.com/uc?id={file_id}"
+ )
+
+ return file_id, is_download_link
+
+
+CHUNK_SIZE = 512 * 1024 # 512KB
+HOME = os.path.expanduser("~")
+
+
+def get_url_from_gdrive_confirmation(contents):
+ """Extract the download URL from a Google Drive confirmation page."""
+ for pattern in (
+ r'href="(\/uc\?export=download[^"]+)',
+ r'href="/open\?id=([^"]+)"',
+ r'"downloadUrl":"([^"]+)',
+ ):
+ match = re.search(pattern, contents)
+ if match:
+ url = match.group(1)
+ if pattern == r'href="/open\?id=([^"]+)"':
+ uuid = re.search(
+ r'(.*)
', contents)
+ if match:
+ error = match.group(1)
+ raise FileURLRetrievalError(error)
+
+ raise FileURLRetrievalError(
+ "Cannot retrieve the public link of the file. "
+ "You may need to change the permission to "
+ "'Anyone with the link', or have had many accesses."
+ )
+
+
+def _get_session(proxy, use_cookies, return_cookies_file=False):
+ """Create a requests session with optional proxy and cookie handling."""
+ sess = requests.session()
+ sess.headers.update(
+ {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)"}
+ )
+
+ if proxy is not None:
+ sess.proxies = {"http": proxy, "https": proxy}
+ print("Using proxy:", proxy, file=sys.stderr)
+
+ cookies_file = os.path.join(HOME, ".cache/gdown/cookies.json")
+ if os.path.exists(cookies_file) and use_cookies:
+ with open(cookies_file) as f:
+ cookies = json.load(f)
+ for k, v in cookies:
+ sess.cookies[k] = v
+
+ return (sess, cookies_file) if return_cookies_file else sess
+
+
+def download(
+ url=None,
+ output=None,
+ quiet=False,
+ proxy=None,
+ speed=None,
+ use_cookies=True,
+ verify=True,
+ id=None,
+ fuzzy=True,
+ resume=False,
+ format=None,
+):
+ """Download file from URL.
+
+ Parameters
+ ----------
+ url: str
+ URL. Google Drive URL is also supported.
+ output: str
+ Output filename. Default is basename of URL.
+ quiet: bool
+ Suppress terminal output. Default is False.
+ proxy: str
+ Proxy.
+ speed: float
+ Download byte size per second (e.g., 256KB/s = 256 * 1024).
+ use_cookies: bool
+ Flag to use cookies. Default is True.
+ verify: bool or string
+ Either a bool, in which case it controls whether the server's TLS
+ certificate is verified, or a string, in which case it must be a path
+ to a CA bundle to use. Default is True.
+ id: str
+ Google Drive's file ID.
+ fuzzy: bool
+ Fuzzy extraction of Google Drive's file Id. Default is False.
+ resume: bool
+ Resume the download from existing tmp file if possible.
+ Default is False.
+ format: str, optional
+ Format of Google Docs, Spreadsheets and Slides. Default is:
+ - Google Docs: 'docx'
+ - Google Spreadsheet: 'xlsx'
+ - Google Slides: 'pptx'
+
+ Returns
+ -------
+ output: str
+ Output filename.
+ """
+ if not (id is None) ^ (url is None):
+ raise ValueError("Either url or id has to be specified")
+ if id is not None:
+ url = f"https://drive.google.com/uc?id={id}"
+
+ url_origin = url
+
+ sess, cookies_file = _get_session(
+ proxy=proxy, use_cookies=use_cookies, return_cookies_file=True
+ )
+
+ gdrive_file_id, is_gdrive_download_link = parse_url(url, warning=not fuzzy)
+
+ if fuzzy and gdrive_file_id:
+ # overwrite the url with fuzzy match of a file id
+ url = f"https://drive.google.com/uc?id={gdrive_file_id}"
+ url_origin = url
+ is_gdrive_download_link = True
+
+ while True:
+ res = sess.get(url, stream=True, verify=verify)
+
+ if url == url_origin and res.status_code == 500:
+ # The file could be Google Docs or Spreadsheets.
+ url = f"https://drive.google.com/open?id={gdrive_file_id}"
+ continue
+
+ if res.headers["Content-Type"].startswith("text/html"):
+ title = re.search("(.+)", res.text)
+ if title:
+ title = title.group(1)
+ if title.endswith(" - Google Docs"):
+ url = f"https://docs.google.com/document/d/{gdrive_file_id}/export?format={'docx' if format is None else format}"
+ continue
+ if title.endswith(" - Google Sheets"):
+ url = f"https://docs.google.com/spreadsheets/d/{gdrive_file_id}/export?format={'xlsx' if format is None else format}"
+ continue
+ if title.endswith(" - Google Slides"):
+ url = f"https://docs.google.com/presentation/d/{gdrive_file_id}/export?format={'pptx' if format is None else format}"
+ continue
+ elif (
+ "Content-Disposition" in res.headers
+ and res.headers["Content-Disposition"].endswith("pptx")
+ and format not in (None, "pptx")
+ ):
+ url = f"https://docs.google.com/presentation/d/{gdrive_file_id}/export?format={'pptx' if format is None else format}"
+ continue
+
+ if use_cookies:
+ os.makedirs(os.path.dirname(cookies_file), exist_ok=True)
+ with open(cookies_file, "w") as f:
+ cookies = [
+ (k, v)
+ for k, v in sess.cookies.items()
+ if not k.startswith("download_warning_")
+ ]
+ json.dump(cookies, f, indent=2)
+
+ if "Content-Disposition" in res.headers:
+ # This is the file
+ break
+ if not (gdrive_file_id and is_gdrive_download_link):
+ break
+
+ # Need to redirect with confirmation
+ try:
+ url = get_url_from_gdrive_confirmation(res.text)
+ except FileURLRetrievalError as e:
+ message = (
+ "Failed to retrieve file url:\n\n"
+ "{}\n\n"
+ "You may still be able to access the file from the browser:"
+ f"\n\n\t{url_origin}\n\n"
+ "but Gdown can't. Please check connections and permissions."
+ ).format(indent("\n".join(textwrap.wrap(str(e))), prefix="\t"))
+ raise FileURLRetrievalError(message)
+
+ if gdrive_file_id and is_gdrive_download_link:
+ content_disposition = urllib_parse.unquote(res.headers["Content-Disposition"])
+ filename_from_url = (
+ re.search(r"filename\*=UTF-8''(.*)", content_disposition)
+ or re.search(r'filename=["\']?(.*?)["\']?$', content_disposition)
+ ).group(1)
+ filename_from_url = filename_from_url.replace(os.path.sep, "_")
+ else:
+ filename_from_url = os.path.basename(url)
+
+ output = output or filename_from_url
+
+ output_is_path = isinstance(output, six.string_types)
+ if output_is_path and output.endswith(os.path.sep):
+ os.makedirs(output, exist_ok=True)
+ output = os.path.join(output, filename_from_url)
+
+ if output_is_path:
+ temp_dir = os.path.dirname(output) or "."
+ prefix = os.path.basename(output)
+ existing_tmp_files = [
+ os.path.join(temp_dir, file)
+ for file in os.listdir(temp_dir)
+ if file.startswith(prefix)
+ ]
+ if resume and existing_tmp_files:
+ if len(existing_tmp_files) > 1:
+ print(
+ "There are multiple temporary files to resume:",
+ file=sys.stderr,
+ )
+ for file in existing_tmp_files:
+ print(f"\t{file}", file=sys.stderr)
+ print(
+ "Please remove them except one to resume downloading.",
+ file=sys.stderr,
+ )
+ return
+ tmp_file = existing_tmp_files[0]
+ else:
+ resume = False
+ tmp_file = tempfile.mktemp(
+ suffix=tempfile.template, prefix=prefix, dir=temp_dir
+ )
+ f = open(tmp_file, "ab")
+ else:
+ tmp_file = None
+ f = output
+
+ if tmp_file is not None and f.tell() != 0:
+ headers = {"Range": f"bytes={f.tell()}-"}
+ res = sess.get(url, headers=headers, stream=True, verify=verify)
+
+ if not quiet:
+ if resume:
+ print("Resume:", tmp_file, file=sys.stderr)
+ print(
+ "To:",
+ os.path.abspath(output) if output_is_path else output,
+ file=sys.stderr,
+ )
+
+ try:
+ total = int(res.headers.get("Content-Length", 0))
+ if not quiet:
+ pbar = tqdm.tqdm(total=total, unit="B", unit_scale=True)
+ t_start = time.time()
+ for chunk in res.iter_content(chunk_size=CHUNK_SIZE):
+ f.write(chunk)
+ if not quiet:
+ pbar.update(len(chunk))
+ if speed is not None:
+ elapsed_time_expected = 1.0 * pbar.n / speed
+ elapsed_time = time.time() - t_start
+ if elapsed_time < elapsed_time_expected:
+ time.sleep(elapsed_time_expected - elapsed_time)
+ if not quiet:
+ pbar.close()
+ if tmp_file:
+ f.close()
+ shutil.move(tmp_file, output)
+ finally:
+ sess.close()
+
+ return output
diff --git a/rvc/lib/tools/launch_tensorboard.py b/rvc/lib/tools/launch_tensorboard.py
new file mode 100644
index 0000000000000000000000000000000000000000..7f74e316762b737037f7b8e4448a1042553d5651
--- /dev/null
+++ b/rvc/lib/tools/launch_tensorboard.py
@@ -0,0 +1,21 @@
+import time
+import logging
+from tensorboard import program
+
+log_path = "logs"
+
+
+def launch_tensorboard_pipeline():
+ logging.getLogger("root").setLevel(logging.WARNING)
+ logging.getLogger("tensorboard").setLevel(logging.WARNING)
+
+ tb = program.TensorBoard()
+ tb.configure(argv=[None, "--logdir", log_path])
+ url = tb.launch()
+
+ print(
+ f"Access the tensorboard using the following link:\n{url}?pinnedCards=%5B%7B%22plugin%22%3A%22scalars%22%2C%22tag%22%3A%22loss%2Fg%2Ftotal%22%7D%2C%7B%22plugin%22%3A%22scalars%22%2C%22tag%22%3A%22loss%2Fd%2Ftotal%22%7D%2C%7B%22plugin%22%3A%22scalars%22%2C%22tag%22%3A%22loss%2Fg%2Fkl%22%7D%2C%7B%22plugin%22%3A%22scalars%22%2C%22tag%22%3A%22loss%2Fg%2Fmel%22%7D%5D"
+ )
+
+ while True:
+ time.sleep(600)
diff --git a/rvc/lib/tools/model_download.py b/rvc/lib/tools/model_download.py
new file mode 100644
index 0000000000000000000000000000000000000000..ab1b136e265994ea879e501bab1c93eebff6f468
--- /dev/null
+++ b/rvc/lib/tools/model_download.py
@@ -0,0 +1,385 @@
+import os
+import re
+import six
+import sys
+import wget
+import shutil
+import zipfile
+import requests
+from bs4 import BeautifulSoup
+from urllib.parse import unquote, urlencode, parse_qs, urlparse
+
+now_dir = os.getcwd()
+sys.path.append(now_dir)
+
+from rvc.lib.utils import format_title
+from rvc.lib.tools import gdown
+
+
+def find_folder_parent(search_dir, folder_name):
+ for dirpath, dirnames, _ in os.walk(search_dir):
+ if folder_name in dirnames:
+ return os.path.abspath(dirpath)
+ return None
+
+
+file_path = find_folder_parent(now_dir, "logs")
+zips_path = os.path.join(file_path, "zips")
+
+
+def search_pth_index(folder):
+ pth_paths = [
+ os.path.join(folder, file)
+ for file in os.listdir(folder)
+ if os.path.isfile(os.path.join(folder, file)) and file.endswith(".pth")
+ ]
+ index_paths = [
+ os.path.join(folder, file)
+ for file in os.listdir(folder)
+ if os.path.isfile(os.path.join(folder, file)) and file.endswith(".index")
+ ]
+
+ return pth_paths, index_paths
+
+
+def get_mediafire_download_link(url):
+ response = requests.get(url)
+ response.raise_for_status()
+ soup = BeautifulSoup(response.text, "html.parser")
+ download_button = soup.find(
+ "a", {"class": "input popsok", "aria-label": "Download file"}
+ )
+ if download_button:
+ download_link = download_button.get("href")
+ return download_link
+ else:
+ return None
+
+
+def download_from_url(url):
+ os.makedirs(zips_path, exist_ok=True)
+ if url != "":
+ if "drive.google.com" in url:
+ if "file/d/" in url:
+ file_id = url.split("file/d/")[1].split("/")[0]
+ elif "id=" in url:
+ file_id = url.split("id=")[1].split("&")[0]
+ else:
+ return None
+
+ if file_id:
+ os.chdir(zips_path)
+ try:
+ gdown.download(
+ f"https://drive.google.com/uc?id={file_id}",
+ quiet=True,
+ fuzzy=True,
+ )
+ except Exception as error:
+ error_message = str(
+ f"An error occurred downloading the file: {error}"
+ )
+ if (
+ "Too many users have viewed or downloaded this file recently"
+ in error_message
+ ):
+ os.chdir(now_dir)
+ return "too much use"
+ elif (
+ "Cannot retrieve the public link of the file." in error_message
+ ):
+ os.chdir(now_dir)
+ return "private link"
+ else:
+ print(error_message)
+ os.chdir(now_dir)
+ return None
+ elif "disk.yandex.ru" in url:
+ base_url = "https://cloud-api.yandex.net/v1/disk/public/resources/download?"
+ public_key = url
+ final_url = base_url + urlencode(dict(public_key=public_key))
+ response = requests.get(final_url)
+ download_url = response.json()["href"]
+ download_response = requests.get(download_url)
+
+ if download_response.status_code == 200:
+ filename = parse_qs(urlparse(unquote(download_url)).query).get(
+ "filename", [""]
+ )[0]
+ if filename:
+ os.chdir(zips_path)
+ with open(filename, "wb") as f:
+ f.write(download_response.content)
+ else:
+ print("Failed to get filename from URL.")
+ return None
+
+ elif "pixeldrain.com" in url:
+ try:
+ file_id = url.split("pixeldrain.com/u/")[1]
+ os.chdir(zips_path)
+ print(file_id)
+ response = requests.get(f"https://pixeldrain.com/api/file/{file_id}")
+ if response.status_code == 200:
+ file_name = (
+ response.headers.get("Content-Disposition")
+ .split("filename=")[-1]
+ .strip('";')
+ )
+ os.makedirs(zips_path, exist_ok=True)
+ with open(os.path.join(zips_path, file_name), "wb") as newfile:
+ newfile.write(response.content)
+ os.chdir(file_path)
+ return "downloaded"
+ else:
+ os.chdir(file_path)
+ return None
+ except Exception as error:
+ print(f"An error occurred downloading the file: {error}")
+ os.chdir(file_path)
+ return None
+
+ elif "cdn.discordapp.com" in url:
+ file = requests.get(url)
+ os.chdir(zips_path)
+ if file.status_code == 200:
+ name = url.split("/")
+ with open(os.path.join(name[-1]), "wb") as newfile:
+ newfile.write(file.content)
+ else:
+ return None
+ elif "/blob/" in url or "/resolve/" in url:
+ os.chdir(zips_path)
+ if "/blob/" in url:
+ url = url.replace("/blob/", "/resolve/")
+
+ response = requests.get(url, stream=True)
+ if response.status_code == 200:
+ content_disposition = six.moves.urllib_parse.unquote(
+ response.headers["Content-Disposition"]
+ )
+ m = re.search(r'filename="([^"]+)"', content_disposition)
+ file_name = m.groups()[0]
+ file_name = file_name.replace(os.path.sep, "_")
+ total_size_in_bytes = int(response.headers.get("content-length", 0))
+ block_size = 1024
+ progress_bar_length = 50
+ progress = 0
+
+ with open(os.path.join(zips_path, file_name), "wb") as file:
+ for data in response.iter_content(block_size):
+ file.write(data)
+ progress += len(data)
+ progress_percent = int((progress / total_size_in_bytes) * 100)
+ num_dots = int(
+ (progress / total_size_in_bytes) * progress_bar_length
+ )
+ progress_bar = (
+ "["
+ + "." * num_dots
+ + " " * (progress_bar_length - num_dots)
+ + "]"
+ )
+ print(
+ f"{progress_percent}% {progress_bar} {progress}/{total_size_in_bytes} ",
+ end="\r",
+ )
+ if progress_percent == 100:
+ print("\n")
+
+ else:
+ os.chdir(now_dir)
+ return None
+ elif "/tree/main" in url:
+ os.chdir(zips_path)
+ response = requests.get(url)
+ soup = BeautifulSoup(response.content, "html.parser")
+ temp_url = ""
+ for link in soup.find_all("a", href=True):
+ if link["href"].endswith(".zip"):
+ temp_url = link["href"]
+ break
+ if temp_url:
+ url = temp_url
+ url = url.replace("blob", "resolve")
+ if "huggingface.co" not in url:
+ url = "https://huggingface.co" + url
+
+ wget.download(url)
+ else:
+ os.chdir(now_dir)
+ return None
+ elif "applio.org" in url:
+ parts = url.split("/")
+ id_with_query = parts[-1]
+ id_parts = id_with_query.split("?")
+ id_number = id_parts[0]
+
+ url = "https://cjtfqzjfdimgpvpwhzlv.supabase.co/rest/v1/models"
+ headers = {
+ "apikey": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImNqdGZxempmZGltZ3B2cHdoemx2Iiwicm9sZSI6ImFub24iLCJpYXQiOjE2OTUxNjczODgsImV4cCI6MjAxMDc0MzM4OH0.7z5WMIbjR99c2Ooc0ma7B_FyGq10G8X-alkCYTkKR10"
+ }
+
+ params = {"id": f"eq.{id_number}"}
+ response = requests.get(url, headers=headers, params=params)
+ if response.status_code == 200:
+ json_response = response.json()
+ print(json_response)
+ if json_response:
+ link = json_response[0]["link"]
+ verify = download_from_url(link)
+ if verify == "downloaded":
+ return "downloaded"
+ else:
+ return None
+ else:
+ return None
+ else:
+ try:
+ os.chdir(zips_path)
+ wget.download(url)
+ except Exception as error:
+ os.chdir(now_dir)
+ print(f"An error occurred downloading the file: {error}")
+ return None
+
+ for currentPath, _, zipFiles in os.walk(zips_path):
+ for Files in zipFiles:
+ filePart = Files.split(".")
+ extensionFile = filePart[len(filePart) - 1]
+ filePart.pop()
+ nameFile = "_".join(filePart)
+ realPath = os.path.join(currentPath, Files)
+ os.rename(realPath, nameFile + "." + extensionFile)
+
+ os.chdir(now_dir)
+ return "downloaded"
+
+ os.chdir(now_dir)
+ return None
+
+
+def extract_and_show_progress(zipfile_path, unzips_path):
+ try:
+ with zipfile.ZipFile(zipfile_path, "r") as zip_ref:
+ for file_info in zip_ref.infolist():
+ zip_ref.extract(file_info, unzips_path)
+ os.remove(zipfile_path)
+ return True
+ except Exception as error:
+ print(f"An error occurred extracting the zip file: {error}")
+ return False
+
+
+def unzip_file(zip_path, zip_file_name):
+ zip_file_path = os.path.join(zip_path, zip_file_name + ".zip")
+ extract_path = os.path.join(file_path, zip_file_name)
+ with zipfile.ZipFile(zip_file_path, "r") as zip_ref:
+ zip_ref.extractall(extract_path)
+ os.remove(zip_file_path)
+
+
+def model_download_pipeline(url: str):
+ try:
+ verify = download_from_url(url)
+ if verify == "downloaded":
+ extract_folder_path = ""
+ for filename in os.listdir(zips_path):
+ if filename.endswith(".zip"):
+ zipfile_path = os.path.join(zips_path, filename)
+ print("Proceeding with the extraction...")
+
+ model_zip = os.path.basename(zipfile_path)
+ model_name = format_title(model_zip.split(".zip")[0])
+ extract_folder_path = os.path.join(
+ "logs",
+ os.path.normpath(model_name),
+ )
+ success = extract_and_show_progress(
+ zipfile_path, extract_folder_path
+ )
+
+ macosx_path = os.path.join(extract_folder_path, "__MACOSX")
+ if os.path.exists(macosx_path):
+ shutil.rmtree(macosx_path)
+
+ subfolders = [
+ f
+ for f in os.listdir(extract_folder_path)
+ if os.path.isdir(os.path.join(extract_folder_path, f))
+ ]
+ if len(subfolders) == 1:
+ subfolder_path = os.path.join(
+ extract_folder_path, subfolders[0]
+ )
+ for item in os.listdir(subfolder_path):
+ s = os.path.join(subfolder_path, item)
+ d = os.path.join(extract_folder_path, item)
+ shutil.move(s, d)
+ os.rmdir(subfolder_path)
+
+ for item in os.listdir(extract_folder_path):
+ if ".pth" in item:
+ file_name = item.split(".pth")[0]
+ if file_name != model_name:
+ os.rename(
+ os.path.join(extract_folder_path, item),
+ os.path.join(
+ extract_folder_path, model_name + ".pth"
+ ),
+ )
+ else:
+ if "v2" not in item:
+ if "_nprobe_1_" in item and "_v1" in item:
+ file_name = item.split("_nprobe_1_")[1].split(
+ "_v1"
+ )[0]
+ if file_name != model_name:
+ new_file_name = (
+ item.split("_nprobe_1_")[0]
+ + "_nprobe_1_"
+ + model_name
+ + "_v1"
+ )
+ os.rename(
+ os.path.join(extract_folder_path, item),
+ os.path.join(
+ extract_folder_path,
+ new_file_name + ".index",
+ ),
+ )
+ else:
+ if "_nprobe_1_" in item and "_v2" in item:
+ file_name = item.split("_nprobe_1_")[1].split(
+ "_v2"
+ )[0]
+ if file_name != model_name:
+ new_file_name = (
+ item.split("_nprobe_1_")[0]
+ + "_nprobe_1_"
+ + model_name
+ + "_v2"
+ )
+ os.rename(
+ os.path.join(extract_folder_path, item),
+ os.path.join(
+ extract_folder_path,
+ new_file_name + ".index",
+ ),
+ )
+
+ if success:
+ print(f"Model {model_name} downloaded!")
+ else:
+ print(f"Error downloading {model_name}")
+ return "Error"
+ if extract_folder_path == "":
+ print("Zip file was not found.")
+ return "Error"
+ result = search_pth_index(extract_folder_path)
+ return result
+ else:
+ return "Error"
+ except Exception as error:
+ print(f"An unexpected error occurred: {error}")
+ return "Error"
diff --git a/rvc/lib/tools/prerequisites_download.py b/rvc/lib/tools/prerequisites_download.py
new file mode 100644
index 0000000000000000000000000000000000000000..7ef7bcce1ae1e126ec9995215d62f94fb1b0270a
--- /dev/null
+++ b/rvc/lib/tools/prerequisites_download.py
@@ -0,0 +1,202 @@
+import os
+from concurrent.futures import ThreadPoolExecutor
+from tqdm import tqdm
+import requests
+
+url_base = "https://huggingface.co/IAHispano/Applio/resolve/main/Resources"
+
+pretraineds_v1_list = [
+ (
+ "pretrained_v1/",
+ [
+ "D32k.pth",
+ "D40k.pth",
+ "D48k.pth",
+ "G32k.pth",
+ "G40k.pth",
+ "G48k.pth",
+ "f0D32k.pth",
+ "f0D40k.pth",
+ "f0D48k.pth",
+ "f0G32k.pth",
+ "f0G40k.pth",
+ "f0G48k.pth",
+ ],
+ )
+]
+pretraineds_v2_list = [
+ (
+ "pretrained_v2/",
+ [
+ "D32k.pth",
+ "D40k.pth",
+ "D48k.pth",
+ "G32k.pth",
+ "G40k.pth",
+ "G48k.pth",
+ "f0D32k.pth",
+ "f0D40k.pth",
+ "f0D48k.pth",
+ "f0G32k.pth",
+ "f0G40k.pth",
+ "f0G48k.pth",
+ ],
+ )
+]
+models_list = [("predictors/", ["rmvpe.pt", "fcpe.pt"])]
+embedders_list = [("embedders/contentvec/", ["pytorch_model.bin", "config.json"])]
+executables_list = [
+ ("", ["ffmpeg.exe", "ffprobe.exe"]),
+]
+
+folder_mapping_list = {
+ "pretrained_v1/": "rvc/models/pretraineds/pretrained_v1/",
+ "pretrained_v2/": "rvc/models/pretraineds/pretrained_v2/",
+ "embedders/contentvec/": "rvc/models/embedders/contentvec/",
+ "predictors/": "rvc/models/predictors/",
+ "formant/": "rvc/models/formant/",
+}
+
+
+def get_file_size_if_missing(file_list):
+ """
+ Calculate the total size of files to be downloaded only if they do not exist locally.
+ """
+ total_size = 0
+ for remote_folder, files in file_list:
+ local_folder = folder_mapping_list.get(remote_folder, "")
+ for file in files:
+ destination_path = os.path.join(local_folder, file)
+ if not os.path.exists(destination_path):
+ url = f"{url_base}/{remote_folder}{file}"
+ response = requests.head(url)
+ total_size += int(response.headers.get("content-length", 0))
+ return total_size
+
+
+def download_file(url, destination_path, global_bar):
+ """
+ Download a file from the given URL to the specified destination path,
+ updating the global progress bar as data is downloaded.
+ """
+
+ dir_name = os.path.dirname(destination_path)
+ if dir_name:
+ os.makedirs(dir_name, exist_ok=True)
+ response = requests.get(url, stream=True)
+ block_size = 1024
+ with open(destination_path, "wb") as file:
+ for data in response.iter_content(block_size):
+ file.write(data)
+ global_bar.update(len(data))
+
+
+def download_mapping_files(file_mapping_list, global_bar):
+ """
+ Download all files in the provided file mapping list using a thread pool executor,
+ and update the global progress bar as downloads progress.
+ """
+ with ThreadPoolExecutor() as executor:
+ futures = []
+ for remote_folder, file_list in file_mapping_list:
+ local_folder = folder_mapping_list.get(remote_folder, "")
+ for file in file_list:
+ destination_path = os.path.join(local_folder, file)
+ if not os.path.exists(destination_path):
+ url = f"{url_base}/{remote_folder}{file}"
+ futures.append(
+ executor.submit(
+ download_file, url, destination_path, global_bar
+ )
+ )
+ for future in futures:
+ future.result()
+
+
+def split_pretraineds(pretrained_list):
+ f0_list = []
+ non_f0_list = []
+ for folder, files in pretrained_list:
+ f0_files = [f for f in files if f.startswith("f0")]
+ non_f0_files = [f for f in files if not f.startswith("f0")]
+ if f0_files:
+ f0_list.append((folder, f0_files))
+ if non_f0_files:
+ non_f0_list.append((folder, non_f0_files))
+ return f0_list, non_f0_list
+
+
+pretraineds_v1_f0_list, pretraineds_v1_nof0_list = split_pretraineds(
+ pretraineds_v1_list
+)
+pretraineds_v2_f0_list, pretraineds_v2_nof0_list = split_pretraineds(
+ pretraineds_v2_list
+)
+
+
+def calculate_total_size(
+ pretraineds_v1_f0,
+ pretraineds_v1_nof0,
+ pretraineds_v2_f0,
+ pretraineds_v2_nof0,
+ models,
+ exe,
+):
+ """
+ Calculate the total size of all files to be downloaded based on selected categories.
+ """
+ total_size = 0
+ if models:
+ total_size += get_file_size_if_missing(models_list)
+ total_size += get_file_size_if_missing(embedders_list)
+ if exe and os.name == "nt":
+ total_size += get_file_size_if_missing(executables_list)
+ total_size += get_file_size_if_missing(pretraineds_v1_f0)
+ total_size += get_file_size_if_missing(pretraineds_v1_nof0)
+ total_size += get_file_size_if_missing(pretraineds_v2_f0)
+ total_size += get_file_size_if_missing(pretraineds_v2_nof0)
+ return total_size
+
+
+def prequisites_download_pipeline(
+ pretraineds_v1_f0,
+ pretraineds_v1_nof0,
+ pretraineds_v2_f0,
+ pretraineds_v2_nof0,
+ models,
+ exe,
+):
+ """
+ Manage the download pipeline for different categories of files.
+ """
+ total_size = calculate_total_size(
+ pretraineds_v1_f0_list if pretraineds_v1_f0 else [],
+ pretraineds_v1_nof0_list if pretraineds_v1_nof0 else [],
+ pretraineds_v2_f0_list if pretraineds_v2_f0 else [],
+ pretraineds_v2_nof0_list if pretraineds_v2_nof0 else [],
+ models,
+ exe,
+ )
+
+ if total_size > 0:
+ with tqdm(
+ total=total_size, unit="iB", unit_scale=True, desc="Downloading all files"
+ ) as global_bar:
+ if models:
+ download_mapping_files(models_list, global_bar)
+ download_mapping_files(embedders_list, global_bar)
+ if exe:
+ if os.name == "nt":
+ download_mapping_files(executables_list, global_bar)
+ else:
+ print("No executables needed")
+ if pretraineds_v1_f0:
+ download_mapping_files(pretraineds_v1_f0_list, global_bar)
+ if pretraineds_v1_nof0:
+ download_mapping_files(pretraineds_v1_nof0_list, global_bar)
+ if pretraineds_v2_f0:
+ download_mapping_files(pretraineds_v2_f0_list, global_bar)
+ if pretraineds_v2_nof0:
+ download_mapping_files(pretraineds_v2_nof0_list, global_bar)
+ else:
+ pass
diff --git a/rvc/lib/tools/pretrained_selector.py b/rvc/lib/tools/pretrained_selector.py
new file mode 100644
index 0000000000000000000000000000000000000000..e982fac5078df43b3477f3e3d478a76ff85488c5
--- /dev/null
+++ b/rvc/lib/tools/pretrained_selector.py
@@ -0,0 +1,63 @@
+def pretrained_selector(pitch_guidance):
+ if pitch_guidance == True:
+ return {
+ "v1": {
+ 32000: (
+ "rvc/models/pretraineds/pretrained_v1/f0G32k.pth",
+ "rvc/models/pretraineds/pretrained_v1/f0D32k.pth",
+ ),
+ 40000: (
+ "rvc/models/pretraineds/pretrained_v1/f0G40k.pth",
+ "rvc/models/pretraineds/pretrained_v1/f0D40k.pth",
+ ),
+ 48000: (
+ "rvc/models/pretraineds/pretrained_v1/f0G48k.pth",
+ "rvc/models/pretraineds/pretrained_v1/f0D48k.pth",
+ ),
+ },
+ "v2": {
+ 32000: (
+ "rvc/models/pretraineds/pretrained_v2/f0G32k.pth",
+ "rvc/models/pretraineds/pretrained_v2/f0D32k.pth",
+ ),
+ 40000: (
+ "rvc/models/pretraineds/pretrained_v2/f0G40k.pth",
+ "rvc/models/pretraineds/pretrained_v2/f0D40k.pth",
+ ),
+ 48000: (
+ "rvc/models/pretraineds/pretrained_v2/f0G48k.pth",
+ "rvc/models/pretraineds/pretrained_v2/f0D48k.pth",
+ ),
+ },
+ }
+ elif pitch_guidance == False:
+ return {
+ "v1": {
+ 32000: (
+ "rvc/models/pretraineds/pretrained_v1/G32k.pth",
+ "rvc/models/pretraineds/pretrained_v1/D32k.pth",
+ ),
+ 40000: (
+ "rvc/models/pretraineds/pretrained_v1/G40k.pth",
+ "rvc/models/pretraineds/pretrained_v1/D40k.pth",
+ ),
+ 48000: (
+ "rvc/models/pretraineds/pretrained_v1/G48k.pth",
+ "rvc/models/pretraineds/pretrained_v1/D48k.pth",
+ ),
+ },
+ "v2": {
+ 32000: (
+ "rvc/models/pretraineds/pretrained_v2/G32k.pth",
+ "rvc/models/pretraineds/pretrained_v2/D32k.pth",
+ ),
+ 40000: (
+ "rvc/models/pretraineds/pretrained_v2/G40k.pth",
+ "rvc/models/pretraineds/pretrained_v2/D40k.pth",
+ ),
+ 48000: (
+ "rvc/models/pretraineds/pretrained_v2/G48k.pth",
+ "rvc/models/pretraineds/pretrained_v2/D48k.pth",
+ ),
+ },
+ }
diff --git a/rvc/lib/tools/split_audio.py b/rvc/lib/tools/split_audio.py
new file mode 100644
index 0000000000000000000000000000000000000000..65e7ba9471f5c7f1232b40dd3d01022c4cd25c69
--- /dev/null
+++ b/rvc/lib/tools/split_audio.py
@@ -0,0 +1,56 @@
+import numpy as np
+import librosa
+
+
+def process_audio(audio, sr=16000, silence_thresh=-60, min_silence_len=250):
+ """
+ Splits an audio signal into segments using a fixed frame size and hop size.
+
+ Parameters:
+ - audio (np.ndarray): The audio signal to split.
+ - sr (int): The sample rate of the input audio (default is 16000).
+ - silence_thresh (int): Silence threshold (default =-60dB)
+ - min_silence_len (int): Minimum silence duration (default 250ms).
+
+ Returns:
+ - list of np.ndarray: A list of audio segments.
+ - np.ndarray: The intervals where the audio was split.
+ """
+ frame_length = int(min_silence_len / 1000 * sr)
+ hop_length = frame_length // 2
+ intervals = librosa.effects.split(
+ audio, top_db=-silence_thresh, frame_length=frame_length, hop_length=hop_length
+ )
+ audio_segments = [audio[start:end] for start, end in intervals]
+
+ return audio_segments, intervals
+
+
+def merge_audio(audio_segments, intervals, sr_orig, sr_new):
+ """
+ Merges audio segments back into a single audio signal, filling gaps with silence.
+
+ Parameters:
+ - audio_segments (list of np.ndarray): The non-silent audio segments.
+ - intervals (np.ndarray): The intervals used for splitting the original audio.
+ - sr_orig (int): The sample rate of the original audio
+ - sr_new (int): The sample rate of the model
+
+ Returns:
+ - np.ndarray: The merged audio signal with silent gaps restored.
+ """
+ sr_ratio = sr_new / sr_orig if sr_new > sr_orig else 1.0
+
+ merged_audio = np.zeros(
+ int(intervals[0][0] * sr_ratio if intervals[0][0] > 0 else 0),
+ dtype=audio_segments[0].dtype,
+ )
+
+ merged_audio = np.concatenate((merged_audio, audio_segments[0]))
+
+ for i in range(1, len(intervals)):
+ silence_duration = int((intervals[i][0] - intervals[i - 1][1]) * sr_ratio)
+ silence = np.zeros(silence_duration, dtype=audio_segments[0].dtype)
+ merged_audio = np.concatenate((merged_audio, silence, audio_segments[i]))
+
+ return merged_audio
diff --git a/rvc/lib/tools/tts.py b/rvc/lib/tools/tts.py
new file mode 100644
index 0000000000000000000000000000000000000000..9b30c6e1af791102e55d9cb62649edeb80bab5ed
--- /dev/null
+++ b/rvc/lib/tools/tts.py
@@ -0,0 +1,29 @@
+import sys
+import asyncio
+import edge_tts
+import os
+
+
+async def main():
+ # Parse command line arguments
+ tts_file = str(sys.argv[1])
+ text = str(sys.argv[2])
+ voice = str(sys.argv[3])
+ rate = int(sys.argv[4])
+ output_file = str(sys.argv[5])
+
+ rates = f"+{rate}%" if rate >= 0 else f"{rate}%"
+ if tts_file and os.path.exists(tts_file):
+ text = ""
+ try:
+ with open(tts_file, "r", encoding="utf-8") as file:
+ text = file.read()
+ except UnicodeDecodeError:
+ with open(tts_file, "r") as file:
+ text = file.read()
+ await edge_tts.Communicate(text, voice, rate=rates).save(output_file)
+ print(f"TTS with {voice} completed. Output TTS file: '{output_file}'")
+
+
+if __name__ == "__main__":
+ asyncio.run(main())
diff --git a/rvc/lib/tools/tts_voices.json b/rvc/lib/tools/tts_voices.json
new file mode 100644
index 0000000000000000000000000000000000000000..b76cf447ccfacff86e844360caeac6c8e0b27e95
--- /dev/null
+++ b/rvc/lib/tools/tts_voices.json
@@ -0,0 +1,5748 @@
+[
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (af-ZA, AdriNeural)",
+ "ShortName": "af-ZA-AdriNeural",
+ "Gender": "Female",
+ "Locale": "af-ZA",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Adri Online (Natural) - Afrikaans (South Africa)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (af-ZA, WillemNeural)",
+ "ShortName": "af-ZA-WillemNeural",
+ "Gender": "Male",
+ "Locale": "af-ZA",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Willem Online (Natural) - Afrikaans (South Africa)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (sq-AL, AnilaNeural)",
+ "ShortName": "sq-AL-AnilaNeural",
+ "Gender": "Female",
+ "Locale": "sq-AL",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Anila Online (Natural) - Albanian (Albania)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (sq-AL, IlirNeural)",
+ "ShortName": "sq-AL-IlirNeural",
+ "Gender": "Male",
+ "Locale": "sq-AL",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Ilir Online (Natural) - Albanian (Albania)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (am-ET, AmehaNeural)",
+ "ShortName": "am-ET-AmehaNeural",
+ "Gender": "Male",
+ "Locale": "am-ET",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Ameha Online (Natural) - Amharic (Ethiopia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (am-ET, MekdesNeural)",
+ "ShortName": "am-ET-MekdesNeural",
+ "Gender": "Female",
+ "Locale": "am-ET",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Mekdes Online (Natural) - Amharic (Ethiopia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ar-DZ, AminaNeural)",
+ "ShortName": "ar-DZ-AminaNeural",
+ "Gender": "Female",
+ "Locale": "ar-DZ",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Amina Online (Natural) - Arabic (Algeria)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ar-DZ, IsmaelNeural)",
+ "ShortName": "ar-DZ-IsmaelNeural",
+ "Gender": "Male",
+ "Locale": "ar-DZ",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Ismael Online (Natural) - Arabic (Algeria)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ar-BH, AliNeural)",
+ "ShortName": "ar-BH-AliNeural",
+ "Gender": "Male",
+ "Locale": "ar-BH",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Ali Online (Natural) - Arabic (Bahrain)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ar-BH, LailaNeural)",
+ "ShortName": "ar-BH-LailaNeural",
+ "Gender": "Female",
+ "Locale": "ar-BH",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Laila Online (Natural) - Arabic (Bahrain)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ar-EG, SalmaNeural)",
+ "ShortName": "ar-EG-SalmaNeural",
+ "Gender": "Female",
+ "Locale": "ar-EG",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Salma Online (Natural) - Arabic (Egypt)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ar-EG, ShakirNeural)",
+ "ShortName": "ar-EG-ShakirNeural",
+ "Gender": "Male",
+ "Locale": "ar-EG",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Shakir Online (Natural) - Arabic (Egypt)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ar-IQ, BasselNeural)",
+ "ShortName": "ar-IQ-BasselNeural",
+ "Gender": "Male",
+ "Locale": "ar-IQ",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Bassel Online (Natural) - Arabic (Iraq)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ar-IQ, RanaNeural)",
+ "ShortName": "ar-IQ-RanaNeural",
+ "Gender": "Female",
+ "Locale": "ar-IQ",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Rana Online (Natural) - Arabic (Iraq)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ar-JO, SanaNeural)",
+ "ShortName": "ar-JO-SanaNeural",
+ "Gender": "Female",
+ "Locale": "ar-JO",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Sana Online (Natural) - Arabic (Jordan)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ar-JO, TaimNeural)",
+ "ShortName": "ar-JO-TaimNeural",
+ "Gender": "Male",
+ "Locale": "ar-JO",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Taim Online (Natural) - Arabic (Jordan)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ar-KW, FahedNeural)",
+ "ShortName": "ar-KW-FahedNeural",
+ "Gender": "Male",
+ "Locale": "ar-KW",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Fahed Online (Natural) - Arabic (Kuwait)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ar-KW, NouraNeural)",
+ "ShortName": "ar-KW-NouraNeural",
+ "Gender": "Female",
+ "Locale": "ar-KW",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Noura Online (Natural) - Arabic (Kuwait)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ar-LB, LaylaNeural)",
+ "ShortName": "ar-LB-LaylaNeural",
+ "Gender": "Female",
+ "Locale": "ar-LB",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Layla Online (Natural) - Arabic (Lebanon)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ar-LB, RamiNeural)",
+ "ShortName": "ar-LB-RamiNeural",
+ "Gender": "Male",
+ "Locale": "ar-LB",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Rami Online (Natural) - Arabic (Lebanon)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ar-LY, ImanNeural)",
+ "ShortName": "ar-LY-ImanNeural",
+ "Gender": "Female",
+ "Locale": "ar-LY",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Iman Online (Natural) - Arabic (Libya)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ar-LY, OmarNeural)",
+ "ShortName": "ar-LY-OmarNeural",
+ "Gender": "Male",
+ "Locale": "ar-LY",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Omar Online (Natural) - Arabic (Libya)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ar-MA, JamalNeural)",
+ "ShortName": "ar-MA-JamalNeural",
+ "Gender": "Male",
+ "Locale": "ar-MA",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Jamal Online (Natural) - Arabic (Morocco)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ar-MA, MounaNeural)",
+ "ShortName": "ar-MA-MounaNeural",
+ "Gender": "Female",
+ "Locale": "ar-MA",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Mouna Online (Natural) - Arabic (Morocco)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ar-OM, AbdullahNeural)",
+ "ShortName": "ar-OM-AbdullahNeural",
+ "Gender": "Male",
+ "Locale": "ar-OM",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Abdullah Online (Natural) - Arabic (Oman)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ar-OM, AyshaNeural)",
+ "ShortName": "ar-OM-AyshaNeural",
+ "Gender": "Female",
+ "Locale": "ar-OM",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Aysha Online (Natural) - Arabic (Oman)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ar-QA, AmalNeural)",
+ "ShortName": "ar-QA-AmalNeural",
+ "Gender": "Female",
+ "Locale": "ar-QA",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Amal Online (Natural) - Arabic (Qatar)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ar-QA, MoazNeural)",
+ "ShortName": "ar-QA-MoazNeural",
+ "Gender": "Male",
+ "Locale": "ar-QA",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Moaz Online (Natural) - Arabic (Qatar)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ar-SA, HamedNeural)",
+ "ShortName": "ar-SA-HamedNeural",
+ "Gender": "Male",
+ "Locale": "ar-SA",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Hamed Online (Natural) - Arabic (Saudi Arabia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ar-SA, ZariyahNeural)",
+ "ShortName": "ar-SA-ZariyahNeural",
+ "Gender": "Female",
+ "Locale": "ar-SA",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Zariyah Online (Natural) - Arabic (Saudi Arabia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ar-SY, AmanyNeural)",
+ "ShortName": "ar-SY-AmanyNeural",
+ "Gender": "Female",
+ "Locale": "ar-SY",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Amany Online (Natural) - Arabic (Syria)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ar-SY, LaithNeural)",
+ "ShortName": "ar-SY-LaithNeural",
+ "Gender": "Male",
+ "Locale": "ar-SY",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Laith Online (Natural) - Arabic (Syria)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ar-TN, HediNeural)",
+ "ShortName": "ar-TN-HediNeural",
+ "Gender": "Male",
+ "Locale": "ar-TN",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Hedi Online (Natural) - Arabic (Tunisia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ar-TN, ReemNeural)",
+ "ShortName": "ar-TN-ReemNeural",
+ "Gender": "Female",
+ "Locale": "ar-TN",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Reem Online (Natural) - Arabic (Tunisia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ar-AE, FatimaNeural)",
+ "ShortName": "ar-AE-FatimaNeural",
+ "Gender": "Female",
+ "Locale": "ar-AE",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Fatima Online (Natural) - Arabic (United Arab Emirates)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ar-AE, HamdanNeural)",
+ "ShortName": "ar-AE-HamdanNeural",
+ "Gender": "Male",
+ "Locale": "ar-AE",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Hamdan Online (Natural) - Arabic (United Arab Emirates)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ar-YE, MaryamNeural)",
+ "ShortName": "ar-YE-MaryamNeural",
+ "Gender": "Female",
+ "Locale": "ar-YE",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Maryam Online (Natural) - Arabic (Yemen)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ar-YE, SalehNeural)",
+ "ShortName": "ar-YE-SalehNeural",
+ "Gender": "Male",
+ "Locale": "ar-YE",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Saleh Online (Natural) - Arabic (Yemen)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (az-AZ, BabekNeural)",
+ "ShortName": "az-AZ-BabekNeural",
+ "Gender": "Male",
+ "Locale": "az-AZ",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Babek Online (Natural) - Azerbaijani (Azerbaijan)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (az-AZ, BanuNeural)",
+ "ShortName": "az-AZ-BanuNeural",
+ "Gender": "Female",
+ "Locale": "az-AZ",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Banu Online (Natural) - Azerbaijani (Azerbaijan)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (bn-BD, NabanitaNeural)",
+ "ShortName": "bn-BD-NabanitaNeural",
+ "Gender": "Female",
+ "Locale": "bn-BD",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Nabanita Online (Natural) - Bangla (Bangladesh)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (bn-BD, PradeepNeural)",
+ "ShortName": "bn-BD-PradeepNeural",
+ "Gender": "Male",
+ "Locale": "bn-BD",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Pradeep Online (Natural) - Bangla (Bangladesh)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (bn-IN, BashkarNeural)",
+ "ShortName": "bn-IN-BashkarNeural",
+ "Gender": "Male",
+ "Locale": "bn-IN",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Bashkar Online (Natural) - Bangla (India)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (bn-IN, TanishaaNeural)",
+ "ShortName": "bn-IN-TanishaaNeural",
+ "Gender": "Female",
+ "Locale": "bn-IN",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Tanishaa Online (Natural) - Bengali (India)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (bs-BA, GoranNeural)",
+ "ShortName": "bs-BA-GoranNeural",
+ "Gender": "Male",
+ "Locale": "bs-BA",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Goran Online (Natural) - Bosnian (Bosnia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (bs-BA, VesnaNeural)",
+ "ShortName": "bs-BA-VesnaNeural",
+ "Gender": "Female",
+ "Locale": "bs-BA",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Vesna Online (Natural) - Bosnian (Bosnia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (bg-BG, BorislavNeural)",
+ "ShortName": "bg-BG-BorislavNeural",
+ "Gender": "Male",
+ "Locale": "bg-BG",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Borislav Online (Natural) - Bulgarian (Bulgaria)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (bg-BG, KalinaNeural)",
+ "ShortName": "bg-BG-KalinaNeural",
+ "Gender": "Female",
+ "Locale": "bg-BG",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Kalina Online (Natural) - Bulgarian (Bulgaria)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (my-MM, NilarNeural)",
+ "ShortName": "my-MM-NilarNeural",
+ "Gender": "Female",
+ "Locale": "my-MM",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Nilar Online (Natural) - Burmese (Myanmar)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (my-MM, ThihaNeural)",
+ "ShortName": "my-MM-ThihaNeural",
+ "Gender": "Male",
+ "Locale": "my-MM",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Thiha Online (Natural) - Burmese (Myanmar)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ca-ES, EnricNeural)",
+ "ShortName": "ca-ES-EnricNeural",
+ "Gender": "Male",
+ "Locale": "ca-ES",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Enric Online (Natural) - Catalan (Spain)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ca-ES, JoanaNeural)",
+ "ShortName": "ca-ES-JoanaNeural",
+ "Gender": "Female",
+ "Locale": "ca-ES",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Joana Online (Natural) - Catalan (Spain)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (zh-HK, HiuGaaiNeural)",
+ "ShortName": "zh-HK-HiuGaaiNeural",
+ "Gender": "Female",
+ "Locale": "zh-HK",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft HiuGaai Online (Natural) - Chinese (Cantonese Traditional)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (zh-HK, HiuMaanNeural)",
+ "ShortName": "zh-HK-HiuMaanNeural",
+ "Gender": "Female",
+ "Locale": "zh-HK",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft HiuMaan Online (Natural) - Chinese (Hong Kong)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (zh-HK, WanLungNeural)",
+ "ShortName": "zh-HK-WanLungNeural",
+ "Gender": "Male",
+ "Locale": "zh-HK",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft WanLung Online (Natural) - Chinese (Hong Kong)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (zh-CN, XiaoxiaoNeural)",
+ "ShortName": "zh-CN-XiaoxiaoNeural",
+ "Gender": "Female",
+ "Locale": "zh-CN",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Xiaoxiao Online (Natural) - Chinese (Mainland)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "News",
+ "Novel"
+ ],
+ "VoicePersonalities": [
+ "Warm"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (zh-CN, XiaoyiNeural)",
+ "ShortName": "zh-CN-XiaoyiNeural",
+ "Gender": "Female",
+ "Locale": "zh-CN",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Xiaoyi Online (Natural) - Chinese (Mainland)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "Cartoon",
+ "Novel"
+ ],
+ "VoicePersonalities": [
+ "Lively"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (zh-CN, YunjianNeural)",
+ "ShortName": "zh-CN-YunjianNeural",
+ "Gender": "Male",
+ "Locale": "zh-CN",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Yunjian Online (Natural) - Chinese (Mainland)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "Sports",
+ " Novel"
+ ],
+ "VoicePersonalities": [
+ "Passion"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (zh-CN, YunxiNeural)",
+ "ShortName": "zh-CN-YunxiNeural",
+ "Gender": "Male",
+ "Locale": "zh-CN",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Yunxi Online (Natural) - Chinese (Mainland)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "Novel"
+ ],
+ "VoicePersonalities": [
+ "Lively",
+ "Sunshine"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (zh-CN, YunxiaNeural)",
+ "ShortName": "zh-CN-YunxiaNeural",
+ "Gender": "Male",
+ "Locale": "zh-CN",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Yunxia Online (Natural) - Chinese (Mainland)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "Cartoon",
+ "Novel"
+ ],
+ "VoicePersonalities": [
+ "Cute"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (zh-CN, YunyangNeural)",
+ "ShortName": "zh-CN-YunyangNeural",
+ "Gender": "Male",
+ "Locale": "zh-CN",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Yunyang Online (Natural) - Chinese (Mainland)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "News"
+ ],
+ "VoicePersonalities": [
+ "Professional",
+ "Reliable"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (zh-CN-liaoning, XiaobeiNeural)",
+ "ShortName": "zh-CN-liaoning-XiaobeiNeural",
+ "Gender": "Female",
+ "Locale": "zh-CN-liaoning",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Xiaobei Online (Natural) - Chinese (Northeastern Mandarin)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "Dialect"
+ ],
+ "VoicePersonalities": [
+ "Humorous"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (zh-TW, HsiaoChenNeural)",
+ "ShortName": "zh-TW-HsiaoChenNeural",
+ "Gender": "Female",
+ "Locale": "zh-TW",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft HsiaoChen Online (Natural) - Chinese (Taiwan)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (zh-TW, YunJheNeural)",
+ "ShortName": "zh-TW-YunJheNeural",
+ "Gender": "Male",
+ "Locale": "zh-TW",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft YunJhe Online (Natural) - Chinese (Taiwan)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (zh-TW, HsiaoYuNeural)",
+ "ShortName": "zh-TW-HsiaoYuNeural",
+ "Gender": "Female",
+ "Locale": "zh-TW",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft HsiaoYu Online (Natural) - Chinese (Taiwanese Mandarin)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (zh-CN-shaanxi, XiaoniNeural)",
+ "ShortName": "zh-CN-shaanxi-XiaoniNeural",
+ "Gender": "Female",
+ "Locale": "zh-CN-shaanxi",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Xiaoni Online (Natural) - Chinese (Zhongyuan Mandarin Shaanxi)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "Dialect"
+ ],
+ "VoicePersonalities": [
+ "Bright"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (hr-HR, GabrijelaNeural)",
+ "ShortName": "hr-HR-GabrijelaNeural",
+ "Gender": "Female",
+ "Locale": "hr-HR",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Gabrijela Online (Natural) - Croatian (Croatia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (hr-HR, SreckoNeural)",
+ "ShortName": "hr-HR-SreckoNeural",
+ "Gender": "Male",
+ "Locale": "hr-HR",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Srecko Online (Natural) - Croatian (Croatia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (cs-CZ, AntoninNeural)",
+ "ShortName": "cs-CZ-AntoninNeural",
+ "Gender": "Male",
+ "Locale": "cs-CZ",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Antonin Online (Natural) - Czech (Czech)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (cs-CZ, VlastaNeural)",
+ "ShortName": "cs-CZ-VlastaNeural",
+ "Gender": "Female",
+ "Locale": "cs-CZ",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Vlasta Online (Natural) - Czech (Czech)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (da-DK, ChristelNeural)",
+ "ShortName": "da-DK-ChristelNeural",
+ "Gender": "Female",
+ "Locale": "da-DK",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Christel Online (Natural) - Danish (Denmark)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (da-DK, JeppeNeural)",
+ "ShortName": "da-DK-JeppeNeural",
+ "Gender": "Male",
+ "Locale": "da-DK",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Jeppe Online (Natural) - Danish (Denmark)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (nl-BE, ArnaudNeural)",
+ "ShortName": "nl-BE-ArnaudNeural",
+ "Gender": "Male",
+ "Locale": "nl-BE",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Arnaud Online (Natural) - Dutch (Belgium)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (nl-BE, DenaNeural)",
+ "ShortName": "nl-BE-DenaNeural",
+ "Gender": "Female",
+ "Locale": "nl-BE",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Dena Online (Natural) - Dutch (Belgium)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (nl-NL, ColetteNeural)",
+ "ShortName": "nl-NL-ColetteNeural",
+ "Gender": "Female",
+ "Locale": "nl-NL",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Colette Online (Natural) - Dutch (Netherlands)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (nl-NL, FennaNeural)",
+ "ShortName": "nl-NL-FennaNeural",
+ "Gender": "Female",
+ "Locale": "nl-NL",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Fenna Online (Natural) - Dutch (Netherlands)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (nl-NL, MaartenNeural)",
+ "ShortName": "nl-NL-MaartenNeural",
+ "Gender": "Male",
+ "Locale": "nl-NL",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Maarten Online (Natural) - Dutch (Netherlands)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-AU, NatashaNeural)",
+ "ShortName": "en-AU-NatashaNeural",
+ "Gender": "Female",
+ "Locale": "en-AU",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Natasha Online (Natural) - English (Australia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-AU, WilliamNeural)",
+ "ShortName": "en-AU-WilliamNeural",
+ "Gender": "Male",
+ "Locale": "en-AU",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft William Online (Natural) - English (Australia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-CA, ClaraNeural)",
+ "ShortName": "en-CA-ClaraNeural",
+ "Gender": "Female",
+ "Locale": "en-CA",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Clara Online (Natural) - English (Canada)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-CA, LiamNeural)",
+ "ShortName": "en-CA-LiamNeural",
+ "Gender": "Male",
+ "Locale": "en-CA",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Liam Online (Natural) - English (Canada)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-HK, SamNeural)",
+ "ShortName": "en-HK-SamNeural",
+ "Gender": "Male",
+ "Locale": "en-HK",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Sam Online (Natural) - English (Hongkong)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-HK, YanNeural)",
+ "ShortName": "en-HK-YanNeural",
+ "Gender": "Female",
+ "Locale": "en-HK",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Yan Online (Natural) - English (Hongkong)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-IN, NeerjaExpressiveNeural)",
+ "ShortName": "en-IN-NeerjaExpressiveNeural",
+ "Gender": "Female",
+ "Locale": "en-IN",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Neerja Online (Natural) - English (India) (Preview)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-IN, NeerjaNeural)",
+ "ShortName": "en-IN-NeerjaNeural",
+ "Gender": "Female",
+ "Locale": "en-IN",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Neerja Online (Natural) - English (India)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-IN, PrabhatNeural)",
+ "ShortName": "en-IN-PrabhatNeural",
+ "Gender": "Male",
+ "Locale": "en-IN",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Prabhat Online (Natural) - English (India)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-IE, ConnorNeural)",
+ "ShortName": "en-IE-ConnorNeural",
+ "Gender": "Male",
+ "Locale": "en-IE",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Connor Online (Natural) - English (Ireland)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-IE, EmilyNeural)",
+ "ShortName": "en-IE-EmilyNeural",
+ "Gender": "Female",
+ "Locale": "en-IE",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Emily Online (Natural) - English (Ireland)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-KE, AsiliaNeural)",
+ "ShortName": "en-KE-AsiliaNeural",
+ "Gender": "Female",
+ "Locale": "en-KE",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Asilia Online (Natural) - English (Kenya)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-KE, ChilembaNeural)",
+ "ShortName": "en-KE-ChilembaNeural",
+ "Gender": "Male",
+ "Locale": "en-KE",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Chilemba Online (Natural) - English (Kenya)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-NZ, MitchellNeural)",
+ "ShortName": "en-NZ-MitchellNeural",
+ "Gender": "Male",
+ "Locale": "en-NZ",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Mitchell Online (Natural) - English (New Zealand)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-NZ, MollyNeural)",
+ "ShortName": "en-NZ-MollyNeural",
+ "Gender": "Female",
+ "Locale": "en-NZ",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Molly Online (Natural) - English (New Zealand)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-NG, AbeoNeural)",
+ "ShortName": "en-NG-AbeoNeural",
+ "Gender": "Male",
+ "Locale": "en-NG",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Abeo Online (Natural) - English (Nigeria)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-NG, EzinneNeural)",
+ "ShortName": "en-NG-EzinneNeural",
+ "Gender": "Female",
+ "Locale": "en-NG",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Ezinne Online (Natural) - English (Nigeria)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-PH, JamesNeural)",
+ "ShortName": "en-PH-JamesNeural",
+ "Gender": "Male",
+ "Locale": "en-PH",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft James Online (Natural) - English (Philippines)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-PH, RosaNeural)",
+ "ShortName": "en-PH-RosaNeural",
+ "Gender": "Female",
+ "Locale": "en-PH",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Rosa Online (Natural) - English (Philippines)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-SG, LunaNeural)",
+ "ShortName": "en-SG-LunaNeural",
+ "Gender": "Female",
+ "Locale": "en-SG",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Luna Online (Natural) - English (Singapore)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-SG, WayneNeural)",
+ "ShortName": "en-SG-WayneNeural",
+ "Gender": "Male",
+ "Locale": "en-SG",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Wayne Online (Natural) - English (Singapore)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-ZA, LeahNeural)",
+ "ShortName": "en-ZA-LeahNeural",
+ "Gender": "Female",
+ "Locale": "en-ZA",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Leah Online (Natural) - English (South Africa)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-ZA, LukeNeural)",
+ "ShortName": "en-ZA-LukeNeural",
+ "Gender": "Male",
+ "Locale": "en-ZA",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Luke Online (Natural) - English (South Africa)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-TZ, ElimuNeural)",
+ "ShortName": "en-TZ-ElimuNeural",
+ "Gender": "Male",
+ "Locale": "en-TZ",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Elimu Online (Natural) - English (Tanzania)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-TZ, ImaniNeural)",
+ "ShortName": "en-TZ-ImaniNeural",
+ "Gender": "Female",
+ "Locale": "en-TZ",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Imani Online (Natural) - English (Tanzania)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-GB, LibbyNeural)",
+ "ShortName": "en-GB-LibbyNeural",
+ "Gender": "Female",
+ "Locale": "en-GB",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Libby Online (Natural) - English (United Kingdom)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-GB, MaisieNeural)",
+ "ShortName": "en-GB-MaisieNeural",
+ "Gender": "Female",
+ "Locale": "en-GB",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Maisie Online (Natural) - English (United Kingdom)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-GB, RyanNeural)",
+ "ShortName": "en-GB-RyanNeural",
+ "Gender": "Male",
+ "Locale": "en-GB",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Ryan Online (Natural) - English (United Kingdom)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-GB, SoniaNeural)",
+ "ShortName": "en-GB-SoniaNeural",
+ "Gender": "Female",
+ "Locale": "en-GB",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Sonia Online (Natural) - English (United Kingdom)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-GB, ThomasNeural)",
+ "ShortName": "en-GB-ThomasNeural",
+ "Gender": "Male",
+ "Locale": "en-GB",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Thomas Online (Natural) - English (United Kingdom)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-US, AvaMultilingualNeural)",
+ "ShortName": "en-US-AvaMultilingualNeural",
+ "Gender": "Female",
+ "Locale": "en-US",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft AvaMultilingual Online (Natural) - English (United States)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "Conversation",
+ "Copilot"
+ ],
+ "VoicePersonalities": [
+ "Expressive",
+ "Caring",
+ "Pleasant",
+ "Friendly"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-US, AndrewMultilingualNeural)",
+ "ShortName": "en-US-AndrewMultilingualNeural",
+ "Gender": "Male",
+ "Locale": "en-US",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft AndrewMultilingual Online (Natural) - English (United States)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "Conversation",
+ "Copilot"
+ ],
+ "VoicePersonalities": [
+ "Warm",
+ "Confident",
+ "Authentic",
+ "Honest"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-US, EmmaMultilingualNeural)",
+ "ShortName": "en-US-EmmaMultilingualNeural",
+ "Gender": "Female",
+ "Locale": "en-US",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft EmmaMultilingual Online (Natural) - English (United States)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "Conversation",
+ "Copilot"
+ ],
+ "VoicePersonalities": [
+ "Cheerful",
+ "Clear",
+ "Conversational"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-US, BrianMultilingualNeural)",
+ "ShortName": "en-US-BrianMultilingualNeural",
+ "Gender": "Male",
+ "Locale": "en-US",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft BrianMultilingual Online (Natural) - English (United States)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "Conversation",
+ "Copilot"
+ ],
+ "VoicePersonalities": [
+ "Approachable",
+ "Casual",
+ "Sincere"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-US, AvaNeural)",
+ "ShortName": "en-US-AvaNeural",
+ "Gender": "Female",
+ "Locale": "en-US",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Ava Online (Natural) - English (United States)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "Conversation",
+ "Copilot"
+ ],
+ "VoicePersonalities": [
+ "Expressive",
+ "Caring",
+ "Pleasant",
+ "Friendly"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-US, AndrewNeural)",
+ "ShortName": "en-US-AndrewNeural",
+ "Gender": "Male",
+ "Locale": "en-US",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Andrew Online (Natural) - English (United States)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "Conversation",
+ "Copilot"
+ ],
+ "VoicePersonalities": [
+ "Warm",
+ "Confident",
+ "Authentic",
+ "Honest"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-US, EmmaNeural)",
+ "ShortName": "en-US-EmmaNeural",
+ "Gender": "Female",
+ "Locale": "en-US",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Emma Online (Natural) - English (United States)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "Conversation",
+ "Copilot"
+ ],
+ "VoicePersonalities": [
+ "Cheerful",
+ "Clear",
+ "Conversational"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-US, BrianNeural)",
+ "ShortName": "en-US-BrianNeural",
+ "Gender": "Male",
+ "Locale": "en-US",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Brian Online (Natural) - English (United States)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "Conversation",
+ "Copilot"
+ ],
+ "VoicePersonalities": [
+ "Approachable",
+ "Casual",
+ "Sincere"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-US, AnaNeural)",
+ "ShortName": "en-US-AnaNeural",
+ "Gender": "Female",
+ "Locale": "en-US",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Ana Online (Natural) - English (United States)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "Cartoon",
+ "Conversation"
+ ],
+ "VoicePersonalities": [
+ "Cute"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-US, AriaNeural)",
+ "ShortName": "en-US-AriaNeural",
+ "Gender": "Female",
+ "Locale": "en-US",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Aria Online (Natural) - English (United States)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "News",
+ "Novel"
+ ],
+ "VoicePersonalities": [
+ "Positive",
+ "Confident"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-US, ChristopherNeural)",
+ "ShortName": "en-US-ChristopherNeural",
+ "Gender": "Male",
+ "Locale": "en-US",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Christopher Online (Natural) - English (United States)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "News",
+ "Novel"
+ ],
+ "VoicePersonalities": [
+ "Reliable",
+ "Authority"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-US, EricNeural)",
+ "ShortName": "en-US-EricNeural",
+ "Gender": "Male",
+ "Locale": "en-US",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Eric Online (Natural) - English (United States)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "News",
+ "Novel"
+ ],
+ "VoicePersonalities": [
+ "Rational"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-US, GuyNeural)",
+ "ShortName": "en-US-GuyNeural",
+ "Gender": "Male",
+ "Locale": "en-US",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Guy Online (Natural) - English (United States)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "News",
+ "Novel"
+ ],
+ "VoicePersonalities": [
+ "Passion"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-US, JennyNeural)",
+ "ShortName": "en-US-JennyNeural",
+ "Gender": "Female",
+ "Locale": "en-US",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Jenny Online (Natural) - English (United States)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Considerate",
+ "Comfort"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-US, MichelleNeural)",
+ "ShortName": "en-US-MichelleNeural",
+ "Gender": "Female",
+ "Locale": "en-US",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Michelle Online (Natural) - English (United States)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "News",
+ "Novel"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Pleasant"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-US, RogerNeural)",
+ "ShortName": "en-US-RogerNeural",
+ "Gender": "Male",
+ "Locale": "en-US",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Roger Online (Natural) - English (United States)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "News",
+ "Novel"
+ ],
+ "VoicePersonalities": [
+ "Lively"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (en-US, SteffanNeural)",
+ "ShortName": "en-US-SteffanNeural",
+ "Gender": "Male",
+ "Locale": "en-US",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Steffan Online (Natural) - English (United States)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "News",
+ "Novel"
+ ],
+ "VoicePersonalities": [
+ "Rational"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (et-EE, AnuNeural)",
+ "ShortName": "et-EE-AnuNeural",
+ "Gender": "Female",
+ "Locale": "et-EE",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Anu Online (Natural) - Estonian (Estonia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (et-EE, KertNeural)",
+ "ShortName": "et-EE-KertNeural",
+ "Gender": "Male",
+ "Locale": "et-EE",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Kert Online (Natural) - Estonian (Estonia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (fil-PH, AngeloNeural)",
+ "ShortName": "fil-PH-AngeloNeural",
+ "Gender": "Male",
+ "Locale": "fil-PH",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Angelo Online (Natural) - Filipino (Philippines)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (fil-PH, BlessicaNeural)",
+ "ShortName": "fil-PH-BlessicaNeural",
+ "Gender": "Female",
+ "Locale": "fil-PH",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Blessica Online (Natural) - Filipino (Philippines)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (fi-FI, HarriNeural)",
+ "ShortName": "fi-FI-HarriNeural",
+ "Gender": "Male",
+ "Locale": "fi-FI",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Harri Online (Natural) - Finnish (Finland)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (fi-FI, NooraNeural)",
+ "ShortName": "fi-FI-NooraNeural",
+ "Gender": "Female",
+ "Locale": "fi-FI",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Noora Online (Natural) - Finnish (Finland)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (fr-BE, CharlineNeural)",
+ "ShortName": "fr-BE-CharlineNeural",
+ "Gender": "Female",
+ "Locale": "fr-BE",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Charline Online (Natural) - French (Belgium)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (fr-BE, GerardNeural)",
+ "ShortName": "fr-BE-GerardNeural",
+ "Gender": "Male",
+ "Locale": "fr-BE",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Gerard Online (Natural) - French (Belgium)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (fr-CA, ThierryNeural)",
+ "ShortName": "fr-CA-ThierryNeural",
+ "Gender": "Male",
+ "Locale": "fr-CA",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Thierry Online (Natural) - French (Canada)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (fr-CA, AntoineNeural)",
+ "ShortName": "fr-CA-AntoineNeural",
+ "Gender": "Male",
+ "Locale": "fr-CA",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Antoine Online (Natural) - French (Canada)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (fr-CA, JeanNeural)",
+ "ShortName": "fr-CA-JeanNeural",
+ "Gender": "Male",
+ "Locale": "fr-CA",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Jean Online (Natural) - French (Canada)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (fr-CA, SylvieNeural)",
+ "ShortName": "fr-CA-SylvieNeural",
+ "Gender": "Female",
+ "Locale": "fr-CA",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Sylvie Online (Natural) - French (Canada)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (fr-FR, VivienneMultilingualNeural)",
+ "ShortName": "fr-FR-VivienneMultilingualNeural",
+ "Gender": "Female",
+ "Locale": "fr-FR",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft VivienneMultilingual Online (Natural) - French (France)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (fr-FR, RemyMultilingualNeural)",
+ "ShortName": "fr-FR-RemyMultilingualNeural",
+ "Gender": "Male",
+ "Locale": "fr-FR",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft RemyMultilingual Online (Natural) - French (France)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (fr-FR, DeniseNeural)",
+ "ShortName": "fr-FR-DeniseNeural",
+ "Gender": "Female",
+ "Locale": "fr-FR",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Denise Online (Natural) - French (France)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (fr-FR, EloiseNeural)",
+ "ShortName": "fr-FR-EloiseNeural",
+ "Gender": "Female",
+ "Locale": "fr-FR",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Eloise Online (Natural) - French (France)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (fr-FR, HenriNeural)",
+ "ShortName": "fr-FR-HenriNeural",
+ "Gender": "Male",
+ "Locale": "fr-FR",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Henri Online (Natural) - French (France)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (fr-CH, ArianeNeural)",
+ "ShortName": "fr-CH-ArianeNeural",
+ "Gender": "Female",
+ "Locale": "fr-CH",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Ariane Online (Natural) - French (Switzerland)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (fr-CH, FabriceNeural)",
+ "ShortName": "fr-CH-FabriceNeural",
+ "Gender": "Male",
+ "Locale": "fr-CH",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Fabrice Online (Natural) - French (Switzerland)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (gl-ES, RoiNeural)",
+ "ShortName": "gl-ES-RoiNeural",
+ "Gender": "Male",
+ "Locale": "gl-ES",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Roi Online (Natural) - Galician (Spain)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (gl-ES, SabelaNeural)",
+ "ShortName": "gl-ES-SabelaNeural",
+ "Gender": "Female",
+ "Locale": "gl-ES",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Sabela Online (Natural) - Galician (Spain)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ka-GE, EkaNeural)",
+ "ShortName": "ka-GE-EkaNeural",
+ "Gender": "Female",
+ "Locale": "ka-GE",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Eka Online (Natural) - Georgian (Georgia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ka-GE, GiorgiNeural)",
+ "ShortName": "ka-GE-GiorgiNeural",
+ "Gender": "Male",
+ "Locale": "ka-GE",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Giorgi Online (Natural) - Georgian (Georgia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (de-AT, IngridNeural)",
+ "ShortName": "de-AT-IngridNeural",
+ "Gender": "Female",
+ "Locale": "de-AT",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Ingrid Online (Natural) - German (Austria)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (de-AT, JonasNeural)",
+ "ShortName": "de-AT-JonasNeural",
+ "Gender": "Male",
+ "Locale": "de-AT",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Jonas Online (Natural) - German (Austria)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (de-DE, SeraphinaMultilingualNeural)",
+ "ShortName": "de-DE-SeraphinaMultilingualNeural",
+ "Gender": "Female",
+ "Locale": "de-DE",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft SeraphinaMultilingual Online (Natural) - German (Germany)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (de-DE, FlorianMultilingualNeural)",
+ "ShortName": "de-DE-FlorianMultilingualNeural",
+ "Gender": "Male",
+ "Locale": "de-DE",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft FlorianMultilingual Online (Natural) - German (Germany)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (de-DE, AmalaNeural)",
+ "ShortName": "de-DE-AmalaNeural",
+ "Gender": "Female",
+ "Locale": "de-DE",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Amala Online (Natural) - German (Germany)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (de-DE, ConradNeural)",
+ "ShortName": "de-DE-ConradNeural",
+ "Gender": "Male",
+ "Locale": "de-DE",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Conrad Online (Natural) - German (Germany)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (de-DE, KatjaNeural)",
+ "ShortName": "de-DE-KatjaNeural",
+ "Gender": "Female",
+ "Locale": "de-DE",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Katja Online (Natural) - German (Germany)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (de-DE, KillianNeural)",
+ "ShortName": "de-DE-KillianNeural",
+ "Gender": "Male",
+ "Locale": "de-DE",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Killian Online (Natural) - German (Germany)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (de-CH, JanNeural)",
+ "ShortName": "de-CH-JanNeural",
+ "Gender": "Male",
+ "Locale": "de-CH",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Jan Online (Natural) - German (Switzerland)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (de-CH, LeniNeural)",
+ "ShortName": "de-CH-LeniNeural",
+ "Gender": "Female",
+ "Locale": "de-CH",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Leni Online (Natural) - German (Switzerland)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (el-GR, AthinaNeural)",
+ "ShortName": "el-GR-AthinaNeural",
+ "Gender": "Female",
+ "Locale": "el-GR",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Athina Online (Natural) - Greek (Greece)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (el-GR, NestorasNeural)",
+ "ShortName": "el-GR-NestorasNeural",
+ "Gender": "Male",
+ "Locale": "el-GR",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Nestoras Online (Natural) - Greek (Greece)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (gu-IN, DhwaniNeural)",
+ "ShortName": "gu-IN-DhwaniNeural",
+ "Gender": "Female",
+ "Locale": "gu-IN",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Dhwani Online (Natural) - Gujarati (India)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (gu-IN, NiranjanNeural)",
+ "ShortName": "gu-IN-NiranjanNeural",
+ "Gender": "Male",
+ "Locale": "gu-IN",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Niranjan Online (Natural) - Gujarati (India)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (he-IL, AvriNeural)",
+ "ShortName": "he-IL-AvriNeural",
+ "Gender": "Male",
+ "Locale": "he-IL",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Avri Online (Natural) - Hebrew (Israel)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (he-IL, HilaNeural)",
+ "ShortName": "he-IL-HilaNeural",
+ "Gender": "Female",
+ "Locale": "he-IL",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Hila Online (Natural) - Hebrew (Israel)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (hi-IN, MadhurNeural)",
+ "ShortName": "hi-IN-MadhurNeural",
+ "Gender": "Male",
+ "Locale": "hi-IN",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Madhur Online (Natural) - Hindi (India)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (hi-IN, SwaraNeural)",
+ "ShortName": "hi-IN-SwaraNeural",
+ "Gender": "Female",
+ "Locale": "hi-IN",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Swara Online (Natural) - Hindi (India)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (hu-HU, NoemiNeural)",
+ "ShortName": "hu-HU-NoemiNeural",
+ "Gender": "Female",
+ "Locale": "hu-HU",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Noemi Online (Natural) - Hungarian (Hungary)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (hu-HU, TamasNeural)",
+ "ShortName": "hu-HU-TamasNeural",
+ "Gender": "Male",
+ "Locale": "hu-HU",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Tamas Online (Natural) - Hungarian (Hungary)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (is-IS, GudrunNeural)",
+ "ShortName": "is-IS-GudrunNeural",
+ "Gender": "Female",
+ "Locale": "is-IS",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Gudrun Online (Natural) - Icelandic (Iceland)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (is-IS, GunnarNeural)",
+ "ShortName": "is-IS-GunnarNeural",
+ "Gender": "Male",
+ "Locale": "is-IS",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Gunnar Online (Natural) - Icelandic (Iceland)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (id-ID, ArdiNeural)",
+ "ShortName": "id-ID-ArdiNeural",
+ "Gender": "Male",
+ "Locale": "id-ID",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Ardi Online (Natural) - Indonesian (Indonesia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (id-ID, GadisNeural)",
+ "ShortName": "id-ID-GadisNeural",
+ "Gender": "Female",
+ "Locale": "id-ID",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Gadis Online (Natural) - Indonesian (Indonesia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ga-IE, ColmNeural)",
+ "ShortName": "ga-IE-ColmNeural",
+ "Gender": "Male",
+ "Locale": "ga-IE",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Colm Online (Natural) - Irish (Ireland)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ga-IE, OrlaNeural)",
+ "ShortName": "ga-IE-OrlaNeural",
+ "Gender": "Female",
+ "Locale": "ga-IE",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Orla Online (Natural) - Irish (Ireland)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (it-IT, GiuseppeNeural)",
+ "ShortName": "it-IT-GiuseppeNeural",
+ "Gender": "Male",
+ "Locale": "it-IT",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Giuseppe Online (Natural) - Italian (Italy)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (it-IT, DiegoNeural)",
+ "ShortName": "it-IT-DiegoNeural",
+ "Gender": "Male",
+ "Locale": "it-IT",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Diego Online (Natural) - Italian (Italy)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (it-IT, ElsaNeural)",
+ "ShortName": "it-IT-ElsaNeural",
+ "Gender": "Female",
+ "Locale": "it-IT",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Elsa Online (Natural) - Italian (Italy)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (it-IT, IsabellaNeural)",
+ "ShortName": "it-IT-IsabellaNeural",
+ "Gender": "Female",
+ "Locale": "it-IT",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Isabella Online (Natural) - Italian (Italy)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ja-JP, KeitaNeural)",
+ "ShortName": "ja-JP-KeitaNeural",
+ "Gender": "Male",
+ "Locale": "ja-JP",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Keita Online (Natural) - Japanese (Japan)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ja-JP, NanamiNeural)",
+ "ShortName": "ja-JP-NanamiNeural",
+ "Gender": "Female",
+ "Locale": "ja-JP",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Nanami Online (Natural) - Japanese (Japan)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (jv-ID, DimasNeural)",
+ "ShortName": "jv-ID-DimasNeural",
+ "Gender": "Male",
+ "Locale": "jv-ID",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Dimas Online (Natural) - Javanese (Indonesia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (jv-ID, SitiNeural)",
+ "ShortName": "jv-ID-SitiNeural",
+ "Gender": "Female",
+ "Locale": "jv-ID",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Siti Online (Natural) - Javanese (Indonesia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (kn-IN, GaganNeural)",
+ "ShortName": "kn-IN-GaganNeural",
+ "Gender": "Male",
+ "Locale": "kn-IN",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Gagan Online (Natural) - Kannada (India)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (kn-IN, SapnaNeural)",
+ "ShortName": "kn-IN-SapnaNeural",
+ "Gender": "Female",
+ "Locale": "kn-IN",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Sapna Online (Natural) - Kannada (India)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (kk-KZ, AigulNeural)",
+ "ShortName": "kk-KZ-AigulNeural",
+ "Gender": "Female",
+ "Locale": "kk-KZ",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Aigul Online (Natural) - Kazakh (Kazakhstan)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (kk-KZ, DauletNeural)",
+ "ShortName": "kk-KZ-DauletNeural",
+ "Gender": "Male",
+ "Locale": "kk-KZ",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Daulet Online (Natural) - Kazakh (Kazakhstan)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (km-KH, PisethNeural)",
+ "ShortName": "km-KH-PisethNeural",
+ "Gender": "Male",
+ "Locale": "km-KH",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Piseth Online (Natural) - Khmer (Cambodia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (km-KH, SreymomNeural)",
+ "ShortName": "km-KH-SreymomNeural",
+ "Gender": "Female",
+ "Locale": "km-KH",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Sreymom Online (Natural) - Khmer (Cambodia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ko-KR, HyunsuNeural)",
+ "ShortName": "ko-KR-HyunsuNeural",
+ "Gender": "Male",
+ "Locale": "ko-KR",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Hyunsu Online (Natural) - Korean (Korea)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ko-KR, InJoonNeural)",
+ "ShortName": "ko-KR-InJoonNeural",
+ "Gender": "Male",
+ "Locale": "ko-KR",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft InJoon Online (Natural) - Korean (Korea)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ko-KR, SunHiNeural)",
+ "ShortName": "ko-KR-SunHiNeural",
+ "Gender": "Female",
+ "Locale": "ko-KR",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft SunHi Online (Natural) - Korean (Korea)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (lo-LA, ChanthavongNeural)",
+ "ShortName": "lo-LA-ChanthavongNeural",
+ "Gender": "Male",
+ "Locale": "lo-LA",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Chanthavong Online (Natural) - Lao (Laos)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (lo-LA, KeomanyNeural)",
+ "ShortName": "lo-LA-KeomanyNeural",
+ "Gender": "Female",
+ "Locale": "lo-LA",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Keomany Online (Natural) - Lao (Laos)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (lv-LV, EveritaNeural)",
+ "ShortName": "lv-LV-EveritaNeural",
+ "Gender": "Female",
+ "Locale": "lv-LV",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Everita Online (Natural) - Latvian (Latvia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (lv-LV, NilsNeural)",
+ "ShortName": "lv-LV-NilsNeural",
+ "Gender": "Male",
+ "Locale": "lv-LV",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Nils Online (Natural) - Latvian (Latvia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (lt-LT, LeonasNeural)",
+ "ShortName": "lt-LT-LeonasNeural",
+ "Gender": "Male",
+ "Locale": "lt-LT",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Leonas Online (Natural) - Lithuanian (Lithuania)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (lt-LT, OnaNeural)",
+ "ShortName": "lt-LT-OnaNeural",
+ "Gender": "Female",
+ "Locale": "lt-LT",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Ona Online (Natural) - Lithuanian (Lithuania)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (mk-MK, AleksandarNeural)",
+ "ShortName": "mk-MK-AleksandarNeural",
+ "Gender": "Male",
+ "Locale": "mk-MK",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Aleksandar Online (Natural) - Macedonian (Republic of North Macedonia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (mk-MK, MarijaNeural)",
+ "ShortName": "mk-MK-MarijaNeural",
+ "Gender": "Female",
+ "Locale": "mk-MK",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Marija Online (Natural) - Macedonian (Republic of North Macedonia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ms-MY, OsmanNeural)",
+ "ShortName": "ms-MY-OsmanNeural",
+ "Gender": "Male",
+ "Locale": "ms-MY",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Osman Online (Natural) - Malay (Malaysia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ms-MY, YasminNeural)",
+ "ShortName": "ms-MY-YasminNeural",
+ "Gender": "Female",
+ "Locale": "ms-MY",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Yasmin Online (Natural) - Malay (Malaysia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ml-IN, MidhunNeural)",
+ "ShortName": "ml-IN-MidhunNeural",
+ "Gender": "Male",
+ "Locale": "ml-IN",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Midhun Online (Natural) - Malayalam (India)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ml-IN, SobhanaNeural)",
+ "ShortName": "ml-IN-SobhanaNeural",
+ "Gender": "Female",
+ "Locale": "ml-IN",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Sobhana Online (Natural) - Malayalam (India)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (mt-MT, GraceNeural)",
+ "ShortName": "mt-MT-GraceNeural",
+ "Gender": "Female",
+ "Locale": "mt-MT",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Grace Online (Natural) - Maltese (Malta)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (mt-MT, JosephNeural)",
+ "ShortName": "mt-MT-JosephNeural",
+ "Gender": "Male",
+ "Locale": "mt-MT",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Joseph Online (Natural) - Maltese (Malta)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (mr-IN, AarohiNeural)",
+ "ShortName": "mr-IN-AarohiNeural",
+ "Gender": "Female",
+ "Locale": "mr-IN",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Aarohi Online (Natural) - Marathi (India)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (mr-IN, ManoharNeural)",
+ "ShortName": "mr-IN-ManoharNeural",
+ "Gender": "Male",
+ "Locale": "mr-IN",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Manohar Online (Natural) - Marathi (India)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (mn-MN, BataaNeural)",
+ "ShortName": "mn-MN-BataaNeural",
+ "Gender": "Male",
+ "Locale": "mn-MN",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Bataa Online (Natural) - Mongolian (Mongolia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (mn-MN, YesuiNeural)",
+ "ShortName": "mn-MN-YesuiNeural",
+ "Gender": "Female",
+ "Locale": "mn-MN",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Yesui Online (Natural) - Mongolian (Mongolia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ne-NP, HemkalaNeural)",
+ "ShortName": "ne-NP-HemkalaNeural",
+ "Gender": "Female",
+ "Locale": "ne-NP",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Hemkala Online (Natural) - Nepali (Nepal)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ne-NP, SagarNeural)",
+ "ShortName": "ne-NP-SagarNeural",
+ "Gender": "Male",
+ "Locale": "ne-NP",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Sagar Online (Natural) - Nepali (Nepal)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (nb-NO, FinnNeural)",
+ "ShortName": "nb-NO-FinnNeural",
+ "Gender": "Male",
+ "Locale": "nb-NO",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Finn Online (Natural) - Norwegian (Bokmål Norway)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (nb-NO, PernilleNeural)",
+ "ShortName": "nb-NO-PernilleNeural",
+ "Gender": "Female",
+ "Locale": "nb-NO",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Pernille Online (Natural) - Norwegian (Bokmål, Norway)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ps-AF, GulNawazNeural)",
+ "ShortName": "ps-AF-GulNawazNeural",
+ "Gender": "Male",
+ "Locale": "ps-AF",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft GulNawaz Online (Natural) - Pashto (Afghanistan)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ps-AF, LatifaNeural)",
+ "ShortName": "ps-AF-LatifaNeural",
+ "Gender": "Female",
+ "Locale": "ps-AF",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Latifa Online (Natural) - Pashto (Afghanistan)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (fa-IR, DilaraNeural)",
+ "ShortName": "fa-IR-DilaraNeural",
+ "Gender": "Female",
+ "Locale": "fa-IR",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Dilara Online (Natural) - Persian (Iran)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (fa-IR, FaridNeural)",
+ "ShortName": "fa-IR-FaridNeural",
+ "Gender": "Male",
+ "Locale": "fa-IR",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Farid Online (Natural) - Persian (Iran)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (pl-PL, MarekNeural)",
+ "ShortName": "pl-PL-MarekNeural",
+ "Gender": "Male",
+ "Locale": "pl-PL",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Marek Online (Natural) - Polish (Poland)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (pl-PL, ZofiaNeural)",
+ "ShortName": "pl-PL-ZofiaNeural",
+ "Gender": "Female",
+ "Locale": "pl-PL",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Zofia Online (Natural) - Polish (Poland)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (pt-BR, ThalitaNeural)",
+ "ShortName": "pt-BR-ThalitaNeural",
+ "Gender": "Female",
+ "Locale": "pt-BR",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Thalita Online (Natural) - Portuguese (Brazil)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (pt-BR, AntonioNeural)",
+ "ShortName": "pt-BR-AntonioNeural",
+ "Gender": "Male",
+ "Locale": "pt-BR",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Antonio Online (Natural) - Portuguese (Brazil)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (pt-BR, FranciscaNeural)",
+ "ShortName": "pt-BR-FranciscaNeural",
+ "Gender": "Female",
+ "Locale": "pt-BR",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Francisca Online (Natural) - Portuguese (Brazil)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (pt-PT, DuarteNeural)",
+ "ShortName": "pt-PT-DuarteNeural",
+ "Gender": "Male",
+ "Locale": "pt-PT",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Duarte Online (Natural) - Portuguese (Portugal)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (pt-PT, RaquelNeural)",
+ "ShortName": "pt-PT-RaquelNeural",
+ "Gender": "Female",
+ "Locale": "pt-PT",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Raquel Online (Natural) - Portuguese (Portugal)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ro-RO, AlinaNeural)",
+ "ShortName": "ro-RO-AlinaNeural",
+ "Gender": "Female",
+ "Locale": "ro-RO",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Alina Online (Natural) - Romanian (Romania)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ro-RO, EmilNeural)",
+ "ShortName": "ro-RO-EmilNeural",
+ "Gender": "Male",
+ "Locale": "ro-RO",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Emil Online (Natural) - Romanian (Romania)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ru-RU, DmitryNeural)",
+ "ShortName": "ru-RU-DmitryNeural",
+ "Gender": "Male",
+ "Locale": "ru-RU",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Dmitry Online (Natural) - Russian (Russia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ru-RU, SvetlanaNeural)",
+ "ShortName": "ru-RU-SvetlanaNeural",
+ "Gender": "Female",
+ "Locale": "ru-RU",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Svetlana Online (Natural) - Russian (Russia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (sr-RS, NicholasNeural)",
+ "ShortName": "sr-RS-NicholasNeural",
+ "Gender": "Male",
+ "Locale": "sr-RS",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Nicholas Online (Natural) - Serbian (Serbia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (sr-RS, SophieNeural)",
+ "ShortName": "sr-RS-SophieNeural",
+ "Gender": "Female",
+ "Locale": "sr-RS",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Sophie Online (Natural) - Serbian (Serbia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (si-LK, SameeraNeural)",
+ "ShortName": "si-LK-SameeraNeural",
+ "Gender": "Male",
+ "Locale": "si-LK",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Sameera Online (Natural) - Sinhala (Sri Lanka)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (si-LK, ThiliniNeural)",
+ "ShortName": "si-LK-ThiliniNeural",
+ "Gender": "Female",
+ "Locale": "si-LK",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Thilini Online (Natural) - Sinhala (Sri Lanka)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (sk-SK, LukasNeural)",
+ "ShortName": "sk-SK-LukasNeural",
+ "Gender": "Male",
+ "Locale": "sk-SK",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Lukas Online (Natural) - Slovak (Slovakia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (sk-SK, ViktoriaNeural)",
+ "ShortName": "sk-SK-ViktoriaNeural",
+ "Gender": "Female",
+ "Locale": "sk-SK",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Viktoria Online (Natural) - Slovak (Slovakia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (sl-SI, PetraNeural)",
+ "ShortName": "sl-SI-PetraNeural",
+ "Gender": "Female",
+ "Locale": "sl-SI",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Petra Online (Natural) - Slovenian (Slovenia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (sl-SI, RokNeural)",
+ "ShortName": "sl-SI-RokNeural",
+ "Gender": "Male",
+ "Locale": "sl-SI",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Rok Online (Natural) - Slovenian (Slovenia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (so-SO, MuuseNeural)",
+ "ShortName": "so-SO-MuuseNeural",
+ "Gender": "Male",
+ "Locale": "so-SO",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Muuse Online (Natural) - Somali (Somalia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (so-SO, UbaxNeural)",
+ "ShortName": "so-SO-UbaxNeural",
+ "Gender": "Female",
+ "Locale": "so-SO",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Ubax Online (Natural) - Somali (Somalia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-AR, ElenaNeural)",
+ "ShortName": "es-AR-ElenaNeural",
+ "Gender": "Female",
+ "Locale": "es-AR",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Elena Online (Natural) - Spanish (Argentina)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-AR, TomasNeural)",
+ "ShortName": "es-AR-TomasNeural",
+ "Gender": "Male",
+ "Locale": "es-AR",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Tomas Online (Natural) - Spanish (Argentina)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-BO, MarceloNeural)",
+ "ShortName": "es-BO-MarceloNeural",
+ "Gender": "Male",
+ "Locale": "es-BO",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Marcelo Online (Natural) - Spanish (Bolivia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-BO, SofiaNeural)",
+ "ShortName": "es-BO-SofiaNeural",
+ "Gender": "Female",
+ "Locale": "es-BO",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Sofia Online (Natural) - Spanish (Bolivia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-CL, CatalinaNeural)",
+ "ShortName": "es-CL-CatalinaNeural",
+ "Gender": "Female",
+ "Locale": "es-CL",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Catalina Online (Natural) - Spanish (Chile)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-CL, LorenzoNeural)",
+ "ShortName": "es-CL-LorenzoNeural",
+ "Gender": "Male",
+ "Locale": "es-CL",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Lorenzo Online (Natural) - Spanish (Chile)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-ES, XimenaNeural)",
+ "ShortName": "es-ES-XimenaNeural",
+ "Gender": "Female",
+ "Locale": "es-ES",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Ximena Online (Natural) - Spanish (Colombia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-CO, GonzaloNeural)",
+ "ShortName": "es-CO-GonzaloNeural",
+ "Gender": "Male",
+ "Locale": "es-CO",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Gonzalo Online (Natural) - Spanish (Colombia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-CO, SalomeNeural)",
+ "ShortName": "es-CO-SalomeNeural",
+ "Gender": "Female",
+ "Locale": "es-CO",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Salome Online (Natural) - Spanish (Colombia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-CR, JuanNeural)",
+ "ShortName": "es-CR-JuanNeural",
+ "Gender": "Male",
+ "Locale": "es-CR",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Juan Online (Natural) - Spanish (Costa Rica)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-CR, MariaNeural)",
+ "ShortName": "es-CR-MariaNeural",
+ "Gender": "Female",
+ "Locale": "es-CR",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Maria Online (Natural) - Spanish (Costa Rica)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-CU, BelkysNeural)",
+ "ShortName": "es-CU-BelkysNeural",
+ "Gender": "Female",
+ "Locale": "es-CU",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Belkys Online (Natural) - Spanish (Cuba)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-CU, ManuelNeural)",
+ "ShortName": "es-CU-ManuelNeural",
+ "Gender": "Male",
+ "Locale": "es-CU",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Manuel Online (Natural) - Spanish (Cuba)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-DO, EmilioNeural)",
+ "ShortName": "es-DO-EmilioNeural",
+ "Gender": "Male",
+ "Locale": "es-DO",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Emilio Online (Natural) - Spanish (Dominican Republic)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-DO, RamonaNeural)",
+ "ShortName": "es-DO-RamonaNeural",
+ "Gender": "Female",
+ "Locale": "es-DO",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Ramona Online (Natural) - Spanish (Dominican Republic)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-EC, AndreaNeural)",
+ "ShortName": "es-EC-AndreaNeural",
+ "Gender": "Female",
+ "Locale": "es-EC",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Andrea Online (Natural) - Spanish (Ecuador)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-EC, LuisNeural)",
+ "ShortName": "es-EC-LuisNeural",
+ "Gender": "Male",
+ "Locale": "es-EC",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Luis Online (Natural) - Spanish (Ecuador)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-SV, LorenaNeural)",
+ "ShortName": "es-SV-LorenaNeural",
+ "Gender": "Female",
+ "Locale": "es-SV",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Lorena Online (Natural) - Spanish (El Salvador)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-SV, RodrigoNeural)",
+ "ShortName": "es-SV-RodrigoNeural",
+ "Gender": "Male",
+ "Locale": "es-SV",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Rodrigo Online (Natural) - Spanish (El Salvador)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-GQ, JavierNeural)",
+ "ShortName": "es-GQ-JavierNeural",
+ "Gender": "Male",
+ "Locale": "es-GQ",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Javier Online (Natural) - Spanish (Equatorial Guinea)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-GQ, TeresaNeural)",
+ "ShortName": "es-GQ-TeresaNeural",
+ "Gender": "Female",
+ "Locale": "es-GQ",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Teresa Online (Natural) - Spanish (Equatorial Guinea)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-GT, AndresNeural)",
+ "ShortName": "es-GT-AndresNeural",
+ "Gender": "Male",
+ "Locale": "es-GT",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Andres Online (Natural) - Spanish (Guatemala)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-GT, MartaNeural)",
+ "ShortName": "es-GT-MartaNeural",
+ "Gender": "Female",
+ "Locale": "es-GT",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Marta Online (Natural) - Spanish (Guatemala)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-HN, CarlosNeural)",
+ "ShortName": "es-HN-CarlosNeural",
+ "Gender": "Male",
+ "Locale": "es-HN",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Carlos Online (Natural) - Spanish (Honduras)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-HN, KarlaNeural)",
+ "ShortName": "es-HN-KarlaNeural",
+ "Gender": "Female",
+ "Locale": "es-HN",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Karla Online (Natural) - Spanish (Honduras)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-MX, DaliaNeural)",
+ "ShortName": "es-MX-DaliaNeural",
+ "Gender": "Female",
+ "Locale": "es-MX",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Dalia Online (Natural) - Spanish (Mexico)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-MX, JorgeNeural)",
+ "ShortName": "es-MX-JorgeNeural",
+ "Gender": "Male",
+ "Locale": "es-MX",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Jorge Online (Natural) - Spanish (Mexico)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-NI, FedericoNeural)",
+ "ShortName": "es-NI-FedericoNeural",
+ "Gender": "Male",
+ "Locale": "es-NI",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Federico Online (Natural) - Spanish (Nicaragua)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-NI, YolandaNeural)",
+ "ShortName": "es-NI-YolandaNeural",
+ "Gender": "Female",
+ "Locale": "es-NI",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Yolanda Online (Natural) - Spanish (Nicaragua)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-PA, MargaritaNeural)",
+ "ShortName": "es-PA-MargaritaNeural",
+ "Gender": "Female",
+ "Locale": "es-PA",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Margarita Online (Natural) - Spanish (Panama)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-PA, RobertoNeural)",
+ "ShortName": "es-PA-RobertoNeural",
+ "Gender": "Male",
+ "Locale": "es-PA",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Roberto Online (Natural) - Spanish (Panama)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-PY, MarioNeural)",
+ "ShortName": "es-PY-MarioNeural",
+ "Gender": "Male",
+ "Locale": "es-PY",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Mario Online (Natural) - Spanish (Paraguay)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-PY, TaniaNeural)",
+ "ShortName": "es-PY-TaniaNeural",
+ "Gender": "Female",
+ "Locale": "es-PY",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Tania Online (Natural) - Spanish (Paraguay)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-PE, AlexNeural)",
+ "ShortName": "es-PE-AlexNeural",
+ "Gender": "Male",
+ "Locale": "es-PE",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Alex Online (Natural) - Spanish (Peru)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-PE, CamilaNeural)",
+ "ShortName": "es-PE-CamilaNeural",
+ "Gender": "Female",
+ "Locale": "es-PE",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Camila Online (Natural) - Spanish (Peru)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-PR, KarinaNeural)",
+ "ShortName": "es-PR-KarinaNeural",
+ "Gender": "Female",
+ "Locale": "es-PR",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Karina Online (Natural) - Spanish (Puerto Rico)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-PR, VictorNeural)",
+ "ShortName": "es-PR-VictorNeural",
+ "Gender": "Male",
+ "Locale": "es-PR",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Victor Online (Natural) - Spanish (Puerto Rico)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-ES, AlvaroNeural)",
+ "ShortName": "es-ES-AlvaroNeural",
+ "Gender": "Male",
+ "Locale": "es-ES",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Alvaro Online (Natural) - Spanish (Spain)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-ES, ElviraNeural)",
+ "ShortName": "es-ES-ElviraNeural",
+ "Gender": "Female",
+ "Locale": "es-ES",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Elvira Online (Natural) - Spanish (Spain)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-US, AlonsoNeural)",
+ "ShortName": "es-US-AlonsoNeural",
+ "Gender": "Male",
+ "Locale": "es-US",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Alonso Online (Natural) - Spanish (United States)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-US, PalomaNeural)",
+ "ShortName": "es-US-PalomaNeural",
+ "Gender": "Female",
+ "Locale": "es-US",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Paloma Online (Natural) - Spanish (United States)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-UY, MateoNeural)",
+ "ShortName": "es-UY-MateoNeural",
+ "Gender": "Male",
+ "Locale": "es-UY",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Mateo Online (Natural) - Spanish (Uruguay)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-UY, ValentinaNeural)",
+ "ShortName": "es-UY-ValentinaNeural",
+ "Gender": "Female",
+ "Locale": "es-UY",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Valentina Online (Natural) - Spanish (Uruguay)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-VE, PaolaNeural)",
+ "ShortName": "es-VE-PaolaNeural",
+ "Gender": "Female",
+ "Locale": "es-VE",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Paola Online (Natural) - Spanish (Venezuela)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (es-VE, SebastianNeural)",
+ "ShortName": "es-VE-SebastianNeural",
+ "Gender": "Male",
+ "Locale": "es-VE",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Sebastian Online (Natural) - Spanish (Venezuela)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (su-ID, JajangNeural)",
+ "ShortName": "su-ID-JajangNeural",
+ "Gender": "Male",
+ "Locale": "su-ID",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Jajang Online (Natural) - Sundanese (Indonesia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (su-ID, TutiNeural)",
+ "ShortName": "su-ID-TutiNeural",
+ "Gender": "Female",
+ "Locale": "su-ID",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Tuti Online (Natural) - Sundanese (Indonesia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (sw-KE, RafikiNeural)",
+ "ShortName": "sw-KE-RafikiNeural",
+ "Gender": "Male",
+ "Locale": "sw-KE",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Rafiki Online (Natural) - Swahili (Kenya)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (sw-KE, ZuriNeural)",
+ "ShortName": "sw-KE-ZuriNeural",
+ "Gender": "Female",
+ "Locale": "sw-KE",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Zuri Online (Natural) - Swahili (Kenya)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (sw-TZ, DaudiNeural)",
+ "ShortName": "sw-TZ-DaudiNeural",
+ "Gender": "Male",
+ "Locale": "sw-TZ",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Daudi Online (Natural) - Swahili (Tanzania)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (sw-TZ, RehemaNeural)",
+ "ShortName": "sw-TZ-RehemaNeural",
+ "Gender": "Female",
+ "Locale": "sw-TZ",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Rehema Online (Natural) - Swahili (Tanzania)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (sv-SE, MattiasNeural)",
+ "ShortName": "sv-SE-MattiasNeural",
+ "Gender": "Male",
+ "Locale": "sv-SE",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Mattias Online (Natural) - Swedish (Sweden)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (sv-SE, SofieNeural)",
+ "ShortName": "sv-SE-SofieNeural",
+ "Gender": "Female",
+ "Locale": "sv-SE",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Sofie Online (Natural) - Swedish (Sweden)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ta-IN, PallaviNeural)",
+ "ShortName": "ta-IN-PallaviNeural",
+ "Gender": "Female",
+ "Locale": "ta-IN",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Pallavi Online (Natural) - Tamil (India)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ta-IN, ValluvarNeural)",
+ "ShortName": "ta-IN-ValluvarNeural",
+ "Gender": "Male",
+ "Locale": "ta-IN",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Valluvar Online (Natural) - Tamil (India)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ta-MY, KaniNeural)",
+ "ShortName": "ta-MY-KaniNeural",
+ "Gender": "Female",
+ "Locale": "ta-MY",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Kani Online (Natural) - Tamil (Malaysia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ta-MY, SuryaNeural)",
+ "ShortName": "ta-MY-SuryaNeural",
+ "Gender": "Male",
+ "Locale": "ta-MY",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Surya Online (Natural) - Tamil (Malaysia)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ta-SG, AnbuNeural)",
+ "ShortName": "ta-SG-AnbuNeural",
+ "Gender": "Male",
+ "Locale": "ta-SG",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Anbu Online (Natural) - Tamil (Singapore)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ta-SG, VenbaNeural)",
+ "ShortName": "ta-SG-VenbaNeural",
+ "Gender": "Female",
+ "Locale": "ta-SG",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Venba Online (Natural) - Tamil (Singapore)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ta-LK, KumarNeural)",
+ "ShortName": "ta-LK-KumarNeural",
+ "Gender": "Male",
+ "Locale": "ta-LK",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Kumar Online (Natural) - Tamil (Sri Lanka)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ta-LK, SaranyaNeural)",
+ "ShortName": "ta-LK-SaranyaNeural",
+ "Gender": "Female",
+ "Locale": "ta-LK",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Saranya Online (Natural) - Tamil (Sri Lanka)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (te-IN, MohanNeural)",
+ "ShortName": "te-IN-MohanNeural",
+ "Gender": "Male",
+ "Locale": "te-IN",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Mohan Online (Natural) - Telugu (India)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (te-IN, ShrutiNeural)",
+ "ShortName": "te-IN-ShrutiNeural",
+ "Gender": "Female",
+ "Locale": "te-IN",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Shruti Online (Natural) - Telugu (India)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (th-TH, NiwatNeural)",
+ "ShortName": "th-TH-NiwatNeural",
+ "Gender": "Male",
+ "Locale": "th-TH",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Niwat Online (Natural) - Thai (Thailand)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (th-TH, PremwadeeNeural)",
+ "ShortName": "th-TH-PremwadeeNeural",
+ "Gender": "Female",
+ "Locale": "th-TH",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Premwadee Online (Natural) - Thai (Thailand)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (tr-TR, AhmetNeural)",
+ "ShortName": "tr-TR-AhmetNeural",
+ "Gender": "Male",
+ "Locale": "tr-TR",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Ahmet Online (Natural) - Turkish (Turkey)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (tr-TR, EmelNeural)",
+ "ShortName": "tr-TR-EmelNeural",
+ "Gender": "Female",
+ "Locale": "tr-TR",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Emel Online (Natural) - Turkish (Turkey)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (uk-UA, OstapNeural)",
+ "ShortName": "uk-UA-OstapNeural",
+ "Gender": "Male",
+ "Locale": "uk-UA",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Ostap Online (Natural) - Ukrainian (Ukraine)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (uk-UA, PolinaNeural)",
+ "ShortName": "uk-UA-PolinaNeural",
+ "Gender": "Female",
+ "Locale": "uk-UA",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Polina Online (Natural) - Ukrainian (Ukraine)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ur-IN, GulNeural)",
+ "ShortName": "ur-IN-GulNeural",
+ "Gender": "Female",
+ "Locale": "ur-IN",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Gul Online (Natural) - Urdu (India)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ur-IN, SalmanNeural)",
+ "ShortName": "ur-IN-SalmanNeural",
+ "Gender": "Male",
+ "Locale": "ur-IN",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Salman Online (Natural) - Urdu (India)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ur-PK, AsadNeural)",
+ "ShortName": "ur-PK-AsadNeural",
+ "Gender": "Male",
+ "Locale": "ur-PK",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Asad Online (Natural) - Urdu (Pakistan)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (ur-PK, UzmaNeural)",
+ "ShortName": "ur-PK-UzmaNeural",
+ "Gender": "Female",
+ "Locale": "ur-PK",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Uzma Online (Natural) - Urdu (Pakistan)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (uz-UZ, MadinaNeural)",
+ "ShortName": "uz-UZ-MadinaNeural",
+ "Gender": "Female",
+ "Locale": "uz-UZ",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Madina Online (Natural) - Uzbek (Uzbekistan)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (uz-UZ, SardorNeural)",
+ "ShortName": "uz-UZ-SardorNeural",
+ "Gender": "Male",
+ "Locale": "uz-UZ",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Sardor Online (Natural) - Uzbek (Uzbekistan)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (vi-VN, HoaiMyNeural)",
+ "ShortName": "vi-VN-HoaiMyNeural",
+ "Gender": "Female",
+ "Locale": "vi-VN",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft HoaiMy Online (Natural) - Vietnamese (Vietnam)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (vi-VN, NamMinhNeural)",
+ "ShortName": "vi-VN-NamMinhNeural",
+ "Gender": "Male",
+ "Locale": "vi-VN",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft NamMinh Online (Natural) - Vietnamese (Vietnam)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (cy-GB, AledNeural)",
+ "ShortName": "cy-GB-AledNeural",
+ "Gender": "Male",
+ "Locale": "cy-GB",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Aled Online (Natural) - Welsh (United Kingdom)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (cy-GB, NiaNeural)",
+ "ShortName": "cy-GB-NiaNeural",
+ "Gender": "Female",
+ "Locale": "cy-GB",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Nia Online (Natural) - Welsh (United Kingdom)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (zu-ZA, ThandoNeural)",
+ "ShortName": "zu-ZA-ThandoNeural",
+ "Gender": "Female",
+ "Locale": "zu-ZA",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Thando Online (Natural) - Zulu (South Africa)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ },
+ {
+ "Name": "Microsoft Server Speech Text to Speech Voice (zu-ZA, ThembaNeural)",
+ "ShortName": "zu-ZA-ThembaNeural",
+ "Gender": "Male",
+ "Locale": "zu-ZA",
+ "SuggestedCodec": "audio-24khz-48kbitrate-mono-mp3",
+ "FriendlyName": "Microsoft Themba Online (Natural) - Zulu (South Africa)",
+ "Status": "GA",
+ "VoiceTag": {
+ "ContentCategories": [
+ "General"
+ ],
+ "VoicePersonalities": [
+ "Friendly",
+ "Positive"
+ ]
+ }
+ }
+]
\ No newline at end of file
diff --git a/rvc/lib/utils.py b/rvc/lib/utils.py
new file mode 100644
index 0000000000000000000000000000000000000000..dcda88eba316acadb906e3ffd34ae66266e2be34
--- /dev/null
+++ b/rvc/lib/utils.py
@@ -0,0 +1,139 @@
+import os, sys
+import librosa
+import soundfile as sf
+import numpy as np
+import re
+import unicodedata
+import wget
+import subprocess
+from pydub import AudioSegment
+import tempfile
+from torch import nn
+
+import logging
+from transformers import HubertModel
+import warnings
+
+# Remove this to see warnings about transformers models
+warnings.filterwarnings("ignore")
+
+logging.getLogger("fairseq").setLevel(logging.ERROR)
+logging.getLogger("faiss.loader").setLevel(logging.ERROR)
+logging.getLogger("transformers").setLevel(logging.ERROR)
+logging.getLogger("torch").setLevel(logging.ERROR)
+
+now_dir = os.getcwd()
+sys.path.append(now_dir)
+
+base_path = os.path.join(now_dir, "rvc", "models", "formant", "stftpitchshift")
+stft = base_path + ".exe" if sys.platform == "win32" else base_path
+
+
+class HubertModelWithFinalProj(HubertModel):
+ def __init__(self, config):
+ super().__init__(config)
+ self.final_proj = nn.Linear(config.hidden_size, config.classifier_proj_size)
+
+
+def load_audio(file, sample_rate):
+ try:
+ file = file.strip(" ").strip('"').strip("\n").strip('"').strip(" ")
+ audio, sr = sf.read(file)
+ if len(audio.shape) > 1:
+ audio = librosa.to_mono(audio.T)
+ if sr != sample_rate:
+ audio = librosa.resample(audio, orig_sr=sr, target_sr=sample_rate)
+ except Exception as error:
+ raise RuntimeError(f"An error occurred loading the audio: {error}")
+
+ return audio.flatten()
+
+
+def load_audio_infer(
+ file,
+ sample_rate,
+ **kwargs,
+):
+ formant_shifting = kwargs.get("formant_shifting", False)
+ try:
+ file = file.strip(" ").strip('"').strip("\n").strip('"').strip(" ")
+ if not os.path.isfile(file):
+ raise FileNotFoundError(f"File not found: {file}")
+ audio, sr = sf.read(file)
+ if len(audio.shape) > 1:
+ audio = librosa.to_mono(audio.T)
+ if sr != sample_rate:
+ audio = librosa.resample(audio, orig_sr=sr, target_sr=sample_rate)
+ if formant_shifting:
+ formant_qfrency = kwargs.get("formant_qfrency", 0.8)
+ formant_timbre = kwargs.get("formant_timbre", 0.8)
+
+ from stftpitchshift import StftPitchShift
+
+ pitchshifter = StftPitchShift(1024, 32, sample_rate)
+ audio = pitchshifter.shiftpitch(
+ audio,
+ factors=1,
+ quefrency=formant_qfrency * 1e-3,
+ distortion=formant_timbre,
+ )
+ except Exception as error:
+ raise RuntimeError(f"An error occurred loading the audio: {error}")
+ return np.array(audio).flatten()
+
+
+def format_title(title):
+ formatted_title = (
+ unicodedata.normalize("NFKD", title).encode("ascii", "ignore").decode("utf-8")
+ )
+ formatted_title = re.sub(r"[\u2500-\u257F]+", "", formatted_title)
+ formatted_title = re.sub(r"[^\w\s.-]", "", formatted_title)
+ formatted_title = re.sub(r"\s+", "_", formatted_title)
+ return formatted_title
+
+
+def load_embedding(embedder_model, custom_embedder=None):
+ embedder_root = os.path.join(now_dir, "rvc", "models", "embedders")
+ embedding_list = {
+ "contentvec": os.path.join(embedder_root, "contentvec"),
+ "chinese-hubert-base": os.path.join(embedder_root, "chinese_hubert_base"),
+ "japanese-hubert-base": os.path.join(embedder_root, "japanese_hubert_base"),
+ "korean-hubert-base": os.path.join(embedder_root, "korean_hubert_base"),
+ }
+
+ online_embedders = {
+ "contentvec": "https://huggingface.co/IAHispano/Applio/resolve/main/Resources/embedders/contentvec/pytorch_model.bin",
+ "chinese-hubert-base": "https://huggingface.co/IAHispano/Applio/resolve/main/Resources/embedders/chinese_hubert_base/pytorch_model.bin",
+ "japanese-hubert-base": "https://huggingface.co/IAHispano/Applio/resolve/main/Resources/embedders/japanese_hubert_base/pytorch_model.bin",
+ "korean-hubert-base": "https://huggingface.co/IAHispano/Applio/resolve/main/Resources/embedders/korean_hubert_base/pytorch_model.bin",
+ }
+
+ config_files = {
+ "contentvec": "https://huggingface.co/IAHispano/Applio/resolve/main/Resources/embedders/contentvec/config.json",
+ "chinese-hubert-base": "https://huggingface.co/IAHispano/Applio/resolve/main/Resources/embedders/chinese_hubert_base/config.json",
+ "japanese-hubert-base": "https://huggingface.co/IAHispano/Applio/resolve/main/Resources/embedders/japanese_hubert_base/config.json",
+ "korean-hubert-base": "https://huggingface.co/IAHispano/Applio/resolve/main/Resources/embedders/korean_hubert_base/config.json",
+ }
+
+ if embedder_model == "custom":
+ if os.path.exists(custom_embedder):
+ model_path = custom_embedder
+ else:
+ print(f"Custom embedder not found: {custom_embedder}, using contentvec")
+ model_path = embedding_list["contentvec"]
+ else:
+ model_path = embedding_list[embedder_model]
+ bin_file = os.path.join(model_path, "pytorch_model.bin")
+ json_file = os.path.join(model_path, "config.json")
+ os.makedirs(model_path, exist_ok=True)
+ if not os.path.exists(bin_file):
+ url = online_embedders[embedder_model]
+ print(f"Downloading {url} to {model_path}...")
+ wget.download(url, out=bin_file)
+ if not os.path.exists(json_file):
+ url = config_files[embedder_model]
+ print(f"Downloading {url} to {model_path}...")
+ wget.download(url, out=json_file)
+
+ models = HubertModelWithFinalProj.from_pretrained(model_path)
+ return models
diff --git a/rvc/lib/zluda.py b/rvc/lib/zluda.py
new file mode 100644
index 0000000000000000000000000000000000000000..482009cc40ad6d40e97521e6af06716e6895ceea
--- /dev/null
+++ b/rvc/lib/zluda.py
@@ -0,0 +1,43 @@
+import torch
+
+if torch.cuda.is_available() and torch.cuda.get_device_name().endswith("[ZLUDA]"):
+ _torch_stft = torch.stft
+
+ def z_stft(
+ audio: torch.Tensor,
+ n_fft: int,
+ hop_length: int = None,
+ win_length: int = None,
+ window: torch.Tensor = None,
+ center: bool = True,
+ pad_mode: str = "reflect",
+ normalized: bool = False,
+ onesided: bool = None,
+ return_complex: bool = None,
+ ):
+ sd = audio.device
+ return _torch_stft(
+ audio.to("cpu"),
+ n_fft=n_fft,
+ hop_length=hop_length,
+ win_length=win_length,
+ window=window.to("cpu"),
+ center=center,
+ pad_mode=pad_mode,
+ normalized=normalized,
+ onesided=onesided,
+ return_complex=return_complex,
+ ).to(sd)
+
+ def z_jit(f, *_, **__):
+ f.graph = torch._C.Graph()
+ return f
+
+ # hijacks
+ torch.stft = z_stft
+ torch.jit.script = z_jit
+ # disabling unsupported cudnn
+ torch.backends.cudnn.enabled = False
+ torch.backends.cuda.enable_flash_sdp(False)
+ torch.backends.cuda.enable_math_sdp(True)
+ torch.backends.cuda.enable_mem_efficient_sdp(False)
diff --git a/rvc/train/data_utils.py b/rvc/train/data_utils.py
new file mode 100644
index 0000000000000000000000000000000000000000..b6c3d64442df4f03e4d77cfb8d4ecf721959e4ad
--- /dev/null
+++ b/rvc/train/data_utils.py
@@ -0,0 +1,379 @@
+import os
+import numpy as np
+import torch
+import torch.utils.data
+
+from mel_processing import spectrogram_torch
+from utils import load_filepaths_and_text, load_wav_to_torch
+
+
+class TextAudioLoaderMultiNSFsid(torch.utils.data.Dataset):
+ """
+ Dataset that loads text and audio pairs.
+
+ Args:
+ hparams: Hyperparameters.
+ """
+
+ def __init__(self, hparams):
+ self.audiopaths_and_text = load_filepaths_and_text(hparams.training_files)
+ self.max_wav_value = hparams.max_wav_value
+ self.sample_rate = hparams.sample_rate
+ self.filter_length = hparams.filter_length
+ self.hop_length = hparams.hop_length
+ self.win_length = hparams.win_length
+ self.sample_rate = hparams.sample_rate
+ self.min_text_len = getattr(hparams, "min_text_len", 1)
+ self.max_text_len = getattr(hparams, "max_text_len", 5000)
+ self._filter()
+
+ def _filter(self):
+ """
+ Filters audio paths and text pairs based on text length.
+ """
+ audiopaths_and_text_new = []
+ lengths = []
+ for audiopath, text, pitch, pitchf, dv in self.audiopaths_and_text:
+ if self.min_text_len <= len(text) and len(text) <= self.max_text_len:
+ audiopaths_and_text_new.append([audiopath, text, pitch, pitchf, dv])
+ lengths.append(os.path.getsize(audiopath) // (3 * self.hop_length))
+ self.audiopaths_and_text = audiopaths_and_text_new
+ self.lengths = lengths
+
+ def get_sid(self, sid):
+ """
+ Converts speaker ID to a LongTensor.
+
+ Args:
+ sid (str): Speaker ID.
+ """
+ try:
+ sid = torch.LongTensor([int(sid)])
+ except ValueError as error:
+ print(f"Error converting speaker ID '{sid}' to integer. Exception: {error}")
+ sid = torch.LongTensor([0])
+ return sid
+
+ def get_audio_text_pair(self, audiopath_and_text):
+ """
+ Loads and processes audio and text data for a single pair.
+
+ Args:
+ audiopath_and_text (list): List containing audio path, text, pitch, pitchf, and speaker ID.
+ """
+ file = audiopath_and_text[0]
+ phone = audiopath_and_text[1]
+ pitch = audiopath_and_text[2]
+ pitchf = audiopath_and_text[3]
+ dv = audiopath_and_text[4]
+
+ phone, pitch, pitchf = self.get_labels(phone, pitch, pitchf)
+ spec, wav = self.get_audio(file)
+ dv = self.get_sid(dv)
+
+ len_phone = phone.size()[0]
+ len_spec = spec.size()[-1]
+ if len_phone != len_spec:
+ len_min = min(len_phone, len_spec)
+ len_wav = len_min * self.hop_length
+
+ spec = spec[:, :len_min]
+ wav = wav[:, :len_wav]
+
+ phone = phone[:len_min, :]
+ pitch = pitch[:len_min]
+ pitchf = pitchf[:len_min]
+
+ return (spec, wav, phone, pitch, pitchf, dv)
+
+ def get_labels(self, phone, pitch, pitchf):
+ """
+ Loads and processes phoneme, pitch, and pitchf labels.
+
+ Args:
+ phone (str): Path to phoneme label file.
+ pitch (str): Path to pitch label file.
+ pitchf (str): Path to pitchf label file.
+ """
+ phone = np.load(phone)
+ phone = np.repeat(phone, 2, axis=0)
+ pitch = np.load(pitch)
+ pitchf = np.load(pitchf)
+ n_num = min(phone.shape[0], 900)
+ phone = phone[:n_num, :]
+ pitch = pitch[:n_num]
+ pitchf = pitchf[:n_num]
+ phone = torch.FloatTensor(phone)
+ pitch = torch.LongTensor(pitch)
+ pitchf = torch.FloatTensor(pitchf)
+ return phone, pitch, pitchf
+
+ def get_audio(self, filename):
+ """
+ Loads and processes audio data.
+
+ Args:
+ filename (str): Path to audio file.
+ """
+ audio, sample_rate = load_wav_to_torch(filename)
+ if sample_rate != self.sample_rate:
+ raise ValueError(
+ f"{sample_rate} SR doesn't match target {self.sample_rate} SR"
+ )
+ audio_norm = audio
+ audio_norm = audio_norm.unsqueeze(0)
+ spec_filename = filename.replace(".wav", ".spec.pt")
+ if os.path.exists(spec_filename):
+ try:
+ spec = torch.load(spec_filename)
+ except Exception as error:
+ print(f"An error occurred getting spec from {spec_filename}: {error}")
+ spec = spectrogram_torch(
+ audio_norm,
+ self.filter_length,
+ self.hop_length,
+ self.win_length,
+ center=False,
+ )
+ spec = torch.squeeze(spec, 0)
+ torch.save(spec, spec_filename, _use_new_zipfile_serialization=False)
+ else:
+ spec = spectrogram_torch(
+ audio_norm,
+ self.filter_length,
+ self.hop_length,
+ self.win_length,
+ center=False,
+ )
+ spec = torch.squeeze(spec, 0)
+ torch.save(spec, spec_filename, _use_new_zipfile_serialization=False)
+ return spec, audio_norm
+
+ def __getitem__(self, index):
+ """
+ Returns a single audio-text pair.
+
+ Args:
+ index (int): Index of the data sample.
+ """
+ return self.get_audio_text_pair(self.audiopaths_and_text[index])
+
+ def __len__(self):
+ """
+ Returns the length of the dataset.
+ """
+ return len(self.audiopaths_and_text)
+
+
+class TextAudioCollateMultiNSFsid:
+ """
+ Collates text and audio data for training.
+
+ Args:
+ return_ids (bool, optional): Whether to return sample IDs. Defaults to False.
+ """
+
+ def __init__(self, return_ids=False):
+ self.return_ids = return_ids
+
+ def __call__(self, batch):
+ """
+ Collates a batch of data samples.
+
+ Args:
+ batch (list): List of data samples.
+ """
+ _, ids_sorted_decreasing = torch.sort(
+ torch.LongTensor([x[0].size(1) for x in batch]), dim=0, descending=True
+ )
+
+ max_spec_len = max([x[0].size(1) for x in batch])
+ max_wave_len = max([x[1].size(1) for x in batch])
+ spec_lengths = torch.LongTensor(len(batch))
+ wave_lengths = torch.LongTensor(len(batch))
+ spec_padded = torch.FloatTensor(len(batch), batch[0][0].size(0), max_spec_len)
+ wave_padded = torch.FloatTensor(len(batch), 1, max_wave_len)
+ spec_padded.zero_()
+ wave_padded.zero_()
+
+ max_phone_len = max([x[2].size(0) for x in batch])
+ phone_lengths = torch.LongTensor(len(batch))
+ phone_padded = torch.FloatTensor(
+ len(batch), max_phone_len, batch[0][2].shape[1]
+ )
+ pitch_padded = torch.LongTensor(len(batch), max_phone_len)
+ pitchf_padded = torch.FloatTensor(len(batch), max_phone_len)
+ phone_padded.zero_()
+ pitch_padded.zero_()
+ pitchf_padded.zero_()
+ sid = torch.LongTensor(len(batch))
+
+ for i in range(len(ids_sorted_decreasing)):
+ row = batch[ids_sorted_decreasing[i]]
+
+ spec = row[0]
+ spec_padded[i, :, : spec.size(1)] = spec
+ spec_lengths[i] = spec.size(1)
+
+ wave = row[1]
+ wave_padded[i, :, : wave.size(1)] = wave
+ wave_lengths[i] = wave.size(1)
+
+ phone = row[2]
+ phone_padded[i, : phone.size(0), :] = phone
+ phone_lengths[i] = phone.size(0)
+
+ pitch = row[3]
+ pitch_padded[i, : pitch.size(0)] = pitch
+ pitchf = row[4]
+ pitchf_padded[i, : pitchf.size(0)] = pitchf
+
+ sid[i] = row[5]
+
+ return (
+ phone_padded,
+ phone_lengths,
+ pitch_padded,
+ pitchf_padded,
+ spec_padded,
+ spec_lengths,
+ wave_padded,
+ wave_lengths,
+ sid,
+ )
+
+
+class DistributedBucketSampler(torch.utils.data.distributed.DistributedSampler):
+ """
+ Distributed sampler that groups data into buckets based on length.
+
+ Args:
+ dataset (torch.utils.data.Dataset): Dataset to sample from.
+ batch_size (int): Batch size.
+ boundaries (list): List of length boundaries for buckets.
+ num_replicas (int, optional): Number of processes participating in distributed training. Defaults to None.
+ rank (int, optional): Rank of the current process. Defaults to None.
+ shuffle (bool, optional): Whether to shuffle the data. Defaults to True.
+ """
+
+ def __init__(
+ self,
+ dataset,
+ batch_size,
+ boundaries,
+ num_replicas=None,
+ rank=None,
+ shuffle=True,
+ ):
+ super().__init__(dataset, num_replicas=num_replicas, rank=rank, shuffle=shuffle)
+ self.lengths = dataset.lengths
+ self.batch_size = batch_size
+ self.boundaries = boundaries
+
+ self.buckets, self.num_samples_per_bucket = self._create_buckets()
+ self.total_size = sum(self.num_samples_per_bucket)
+ self.num_samples = self.total_size // self.num_replicas
+
+ def _create_buckets(self):
+ """
+ Creates buckets of data samples based on length.
+ """
+ buckets = [[] for _ in range(len(self.boundaries) - 1)]
+ for i in range(len(self.lengths)):
+ length = self.lengths[i]
+ idx_bucket = self._bisect(length)
+ if idx_bucket != -1:
+ buckets[idx_bucket].append(i)
+
+ for i in range(len(buckets) - 1, -1, -1): #
+ if len(buckets[i]) == 0:
+ buckets.pop(i)
+ self.boundaries.pop(i + 1)
+
+ num_samples_per_bucket = []
+ for i in range(len(buckets)):
+ len_bucket = len(buckets[i])
+ total_batch_size = self.num_replicas * self.batch_size
+ rem = (
+ total_batch_size - (len_bucket % total_batch_size)
+ ) % total_batch_size
+ num_samples_per_bucket.append(len_bucket + rem)
+ return buckets, num_samples_per_bucket
+
+ def __iter__(self):
+ """
+ Iterates over batches of data samples.
+ """
+ g = torch.Generator()
+ g.manual_seed(self.epoch)
+
+ indices = []
+ if self.shuffle:
+ for bucket in self.buckets:
+ indices.append(torch.randperm(len(bucket), generator=g).tolist())
+ else:
+ for bucket in self.buckets:
+ indices.append(list(range(len(bucket))))
+
+ batches = []
+ for i in range(len(self.buckets)):
+ bucket = self.buckets[i]
+ len_bucket = len(bucket)
+ ids_bucket = indices[i]
+ num_samples_bucket = self.num_samples_per_bucket[i]
+
+ rem = num_samples_bucket - len_bucket
+ ids_bucket = (
+ ids_bucket
+ + ids_bucket * (rem // len_bucket)
+ + ids_bucket[: (rem % len_bucket)]
+ )
+
+ ids_bucket = ids_bucket[self.rank :: self.num_replicas]
+
+ # batching
+ for j in range(len(ids_bucket) // self.batch_size):
+ batch = [
+ bucket[idx]
+ for idx in ids_bucket[
+ j * self.batch_size : (j + 1) * self.batch_size
+ ]
+ ]
+ batches.append(batch)
+
+ if self.shuffle:
+ batch_ids = torch.randperm(len(batches), generator=g).tolist()
+ batches = [batches[i] for i in batch_ids]
+ self.batches = batches
+
+ assert len(self.batches) * self.batch_size == self.num_samples
+ return iter(self.batches)
+
+ def _bisect(self, x, lo=0, hi=None):
+ """
+ Performs binary search to find the bucket index for a given length.
+
+ Args:
+ x (int): Length to find the bucket for.
+ lo (int, optional): Lower bound of the search range. Defaults to 0.
+ hi (int, optional): Upper bound of the search range. Defaults to None.
+ """
+ if hi is None:
+ hi = len(self.boundaries) - 1
+
+ if hi > lo:
+ mid = (hi + lo) // 2
+ if self.boundaries[mid] < x and x <= self.boundaries[mid + 1]:
+ return mid
+ elif x <= self.boundaries[mid]:
+ return self._bisect(x, lo, mid)
+ else:
+ return self._bisect(x, mid + 1, hi)
+ else:
+ return -1
+
+ def __len__(self):
+ """
+ Returns the length of the sampler.
+ """
+ return self.num_samples // self.batch_size
diff --git a/rvc/train/extract/extract.py b/rvc/train/extract/extract.py
new file mode 100644
index 0000000000000000000000000000000000000000..17a092427b7e6edf9cb493f670cd13fe864a5d1d
--- /dev/null
+++ b/rvc/train/extract/extract.py
@@ -0,0 +1,302 @@
+import os
+import sys
+import glob
+import time
+import tqdm
+import torch
+import torchcrepe
+import numpy as np
+import concurrent.futures
+import multiprocessing as mp
+import json
+import shutil
+from distutils.util import strtobool
+
+now_dir = os.getcwd()
+sys.path.append(os.path.join(now_dir))
+
+# Zluda hijack
+import rvc.lib.zluda
+
+from rvc.lib.utils import load_audio, load_embedding
+from rvc.train.extract.preparing_files import generate_config, generate_filelist
+from rvc.lib.predictors.RMVPE import RMVPE0Predictor
+from rvc.configs.config import Config
+
+# Load config
+config = Config()
+
+mp.set_start_method("spawn", force=True)
+
+
+class FeatureInput:
+ """Class for F0 extraction."""
+
+ def __init__(self, sample_rate=16000, hop_size=160, device="cpu"):
+ self.fs = sample_rate
+ self.hop = hop_size
+ self.f0_bin = 256
+ self.f0_max = 1100.0
+ self.f0_min = 50.0
+ self.f0_mel_min = 1127 * np.log(1 + self.f0_min / 700)
+ self.f0_mel_max = 1127 * np.log(1 + self.f0_max / 700)
+ self.device = device
+ self.model_rmvpe = None
+
+ def compute_f0(self, np_arr, f0_method, hop_length):
+ """Extract F0 using the specified method."""
+ if f0_method == "crepe":
+ return self.get_crepe(np_arr, hop_length)
+ elif f0_method == "rmvpe":
+ return self.model_rmvpe.infer_from_audio(np_arr, thred=0.03)
+ else:
+ raise ValueError(f"Unknown F0 method: {f0_method}")
+
+ def get_crepe(self, x, hop_length):
+ """Extract F0 using CREPE."""
+ audio = torch.from_numpy(x.astype(np.float32)).to(self.device)
+ audio /= torch.quantile(torch.abs(audio), 0.999)
+ audio = audio.unsqueeze(0)
+ pitch = torchcrepe.predict(
+ audio,
+ self.fs,
+ hop_length,
+ self.f0_min,
+ self.f0_max,
+ "full",
+ batch_size=hop_length * 2,
+ device=audio.device,
+ pad=True,
+ )
+ source = pitch.squeeze(0).cpu().float().numpy()
+ source[source < 0.001] = np.nan
+ target = np.interp(
+ np.arange(0, len(source) * (x.size // self.hop), len(source))
+ / (x.size // self.hop),
+ np.arange(0, len(source)),
+ source,
+ )
+ return np.nan_to_num(target)
+
+ def coarse_f0(self, f0):
+ """Convert F0 to coarse F0."""
+ f0_mel = 1127 * np.log(1 + f0 / 700)
+ f0_mel = np.clip(
+ (f0_mel - self.f0_mel_min)
+ * (self.f0_bin - 2)
+ / (self.f0_mel_max - self.f0_mel_min)
+ + 1,
+ 1,
+ self.f0_bin - 1,
+ )
+ return np.rint(f0_mel).astype(int)
+
+ def process_file(self, file_info, f0_method, hop_length):
+ """Process a single audio file for F0 extraction."""
+ inp_path, opt_path1, opt_path2, _ = file_info
+
+ if os.path.exists(opt_path1) and os.path.exists(opt_path2):
+ return
+
+ try:
+ np_arr = load_audio(inp_path, 16000)
+ feature_pit = self.compute_f0(np_arr, f0_method, hop_length)
+ np.save(opt_path2, feature_pit, allow_pickle=False)
+ coarse_pit = self.coarse_f0(feature_pit)
+ np.save(opt_path1, coarse_pit, allow_pickle=False)
+ except Exception as error:
+ print(
+ f"An error occurred extracting file {inp_path} on {self.device}: {error}"
+ )
+
+ def process_files(
+ self, files, f0_method, hop_length, device_num, device, n_threads
+ ):
+ """Process multiple files."""
+ self.device = device
+ if f0_method == "rmvpe":
+ self.model_rmvpe = RMVPE0Predictor(
+ os.path.join("rvc", "models", "predictors", "rmvpe.pt"),
+ is_half=False,
+ device=device,
+ )
+ else:
+ n_threads = 1
+
+ n_threads = 1 if n_threads == 0 else n_threads
+
+ def process_file_wrapper(file_info):
+ self.process_file(file_info, f0_method, hop_length)
+
+ with tqdm.tqdm(total=len(files), leave=True, position=device_num) as pbar:
+ # using multi-threading
+ with concurrent.futures.ThreadPoolExecutor(
+ max_workers=n_threads
+ ) as executor:
+ futures = [
+ executor.submit(process_file_wrapper, file_info)
+ for file_info in files
+ ]
+ for future in concurrent.futures.as_completed(futures):
+ pbar.update(1)
+
+
+def run_pitch_extraction(files, devices, f0_method, hop_length, num_processes):
+ devices_str = ", ".join(devices)
+ print(
+ f"Starting pitch extraction with {num_processes} cores on {devices_str} using {f0_method}..."
+ )
+ start_time = time.time()
+ fe = FeatureInput()
+ # split the task between devices
+ ps = []
+ num_devices = len(devices)
+ for i, device in enumerate(devices):
+ p = mp.Process(
+ target=fe.process_files,
+ args=(
+ files[i::num_devices],
+ f0_method,
+ hop_length,
+ i,
+ device,
+ num_processes // num_devices,
+ ),
+ )
+ ps.append(p)
+ p.start()
+ for i, device in enumerate(devices):
+ ps[i].join()
+
+ elapsed_time = time.time() - start_time
+ print(f"Pitch extraction completed in {elapsed_time:.2f} seconds.")
+
+
+def process_file_embedding(
+ files, version, embedder_model, embedder_model_custom, device_num, device, n_threads
+):
+ dtype = torch.float16 if config.is_half and "cuda" in device else torch.float32
+ model = load_embedding(embedder_model, embedder_model_custom).to(dtype).to(device)
+ n_threads = 1 if n_threads == 0 else n_threads
+
+ def process_file_embedding_wrapper(file_info):
+ wav_file_path, _, _, out_file_path = file_info
+ if os.path.exists(out_file_path):
+ return
+ feats = torch.from_numpy(load_audio(wav_file_path, 16000)).to(dtype).to(device)
+ feats = feats.view(1, -1)
+ with torch.no_grad():
+ feats = model(feats)["last_hidden_state"]
+ feats = (
+ model.final_proj(feats[0]).unsqueeze(0) if version == "v1" else feats
+ )
+ feats = feats.squeeze(0).float().cpu().numpy()
+ if not np.isnan(feats).any():
+ np.save(out_file_path, feats, allow_pickle=False)
+ else:
+ print(f"{file} contains NaN values and will be skipped.")
+
+ with tqdm.tqdm(total=len(files), leave=True, position=device_num) as pbar:
+ # using multi-threading
+ with concurrent.futures.ThreadPoolExecutor(max_workers=n_threads) as executor:
+ futures = [
+ executor.submit(process_file_embedding_wrapper, file_info)
+ for file_info in files
+ ]
+ for future in concurrent.futures.as_completed(futures):
+ pbar.update(1)
+
+
+def run_embedding_extraction(
+ files, devices, version, embedder_model, embedder_model_custom
+):
+ start_time = time.time()
+ devices_str = ", ".join(devices)
+ print(
+ f"Starting embedding extraction with {num_processes} cores on {devices_str}..."
+ )
+ # split the task between devices
+ ps = []
+ num_devices = len(devices)
+ for i, device in enumerate(devices):
+ p = mp.Process(
+ target=process_file_embedding,
+ args=(
+ files[i::num_devices],
+ version,
+ embedder_model,
+ embedder_model_custom,
+ i,
+ device,
+ num_processes // num_devices,
+ ),
+ )
+ ps.append(p)
+ p.start()
+ for i, device in enumerate(devices):
+ ps[i].join()
+ elapsed_time = time.time() - start_time
+ print(f"Embedding extraction completed in {elapsed_time:.2f} seconds.")
+
+
+if __name__ == "__main__":
+
+ exp_dir = sys.argv[1]
+ f0_method = sys.argv[2]
+ hop_length = int(sys.argv[3])
+ num_processes = int(sys.argv[4])
+ gpus = sys.argv[5]
+ version = sys.argv[6]
+ sample_rate = sys.argv[7]
+ embedder_model = sys.argv[8]
+ embedder_model_custom = sys.argv[9] if len(sys.argv) > 10 else None
+
+ # prep
+ wav_path = os.path.join(exp_dir, "sliced_audios_16k")
+ os.makedirs(os.path.join(exp_dir, "f0"), exist_ok=True)
+ os.makedirs(os.path.join(exp_dir, "f0_voiced"), exist_ok=True)
+ os.makedirs(os.path.join(exp_dir, version + "_extracted"), exist_ok=True)
+ # write to model_info.json
+ chosen_embedder_model = (
+ embedder_model_custom if embedder_model == "custom" else embedder_model
+ )
+
+ file_path = os.path.join(exp_dir, "model_info.json")
+ if os.path.exists(file_path):
+ with open(file_path, "r") as f:
+ data = json.load(f)
+ else:
+ data = {}
+ data.update(
+ {
+ "embedder_model": chosen_embedder_model,
+ }
+ )
+ with open(file_path, "w") as f:
+ json.dump(data, f, indent=4)
+
+ files = []
+ for file in glob.glob(os.path.join(wav_path, "*.wav")):
+ file_name = os.path.basename(file)
+ file_info = [
+ file, # full path to sliced 16k wav
+ os.path.join(exp_dir, "f0", file_name + ".npy"),
+ os.path.join(exp_dir, "f0_voiced", file_name + ".npy"),
+ os.path.join(
+ exp_dir, version + "_extracted", file_name.replace("wav", "npy")
+ ),
+ ]
+ files.append(file_info)
+
+ devices = ["cpu"] if gpus == "-" else [f"cuda:{idx}" for idx in gpus.split("-")]
+ # Run Pitch Extraction
+ run_pitch_extraction(files, devices, f0_method, hop_length, num_processes)
+
+ # Run Embedding Extraction
+ run_embedding_extraction(
+ files, devices, version, embedder_model, embedder_model_custom
+ )
+
+ # Run Preparing Files
+ generate_config(version, sample_rate, exp_dir)
+ generate_filelist(exp_dir, version, sample_rate)
diff --git a/rvc/train/extract/preparing_files.py b/rvc/train/extract/preparing_files.py
new file mode 100644
index 0000000000000000000000000000000000000000..e0c6e2f6b6913aed847d3952b1268bdfa28d086d
--- /dev/null
+++ b/rvc/train/extract/preparing_files.py
@@ -0,0 +1,79 @@
+import os
+import shutil
+from random import shuffle
+from rvc.configs.config import Config
+import json
+
+config = Config()
+current_directory = os.getcwd()
+
+
+def generate_config(rvc_version: str, sample_rate: int, model_path: str):
+ config_path = os.path.join("rvc", "configs", rvc_version, f"{sample_rate}.json")
+ config_save_path = os.path.join(model_path, "config.json")
+ if not os.path.exists(config_save_path):
+ shutil.copyfile(config_path, config_save_path)
+
+
+def generate_filelist(model_path: str, rvc_version: str, sample_rate: int):
+ gt_wavs_dir = os.path.join(model_path, "sliced_audios")
+ feature_dir = os.path.join(model_path, f"{rvc_version}_extracted")
+
+ f0_dir, f0nsf_dir = None, None
+ f0_dir = os.path.join(model_path, "f0")
+ f0nsf_dir = os.path.join(model_path, "f0_voiced")
+
+ gt_wavs_files = set(name.split(".")[0] for name in os.listdir(gt_wavs_dir))
+ feature_files = set(name.split(".")[0] for name in os.listdir(feature_dir))
+
+ f0_files = set(name.split(".")[0] for name in os.listdir(f0_dir))
+ f0nsf_files = set(name.split(".")[0] for name in os.listdir(f0nsf_dir))
+ names = gt_wavs_files & feature_files & f0_files & f0nsf_files
+
+ options = []
+ mute_base_path = os.path.join(current_directory, "logs", "mute")
+ sids = []
+ for name in names:
+ sid = name.split("_")[0]
+ if sid not in sids:
+ sids.append(sid)
+ options.append(
+ f"{gt_wavs_dir}/{name}.wav|{feature_dir}/{name}.npy|{f0_dir}/{name}.wav.npy|{f0nsf_dir}/{name}.wav.npy|{sid}"
+ )
+
+ mute_audio_path = os.path.join(
+ mute_base_path, "sliced_audios", f"mute{sample_rate}.wav"
+ )
+ mute_feature_path = os.path.join(
+ mute_base_path, f"{rvc_version}_extracted", "mute.npy"
+ )
+ mute_f0_path = os.path.join(mute_base_path, "f0", "mute.wav.npy")
+ mute_f0nsf_path = os.path.join(mute_base_path, "f0_voiced", "mute.wav.npy")
+
+ # always adding two files
+ for sid in sids:
+ options.append(
+ f"{mute_audio_path}|{mute_feature_path}|{mute_f0_path}|{mute_f0nsf_path}|{sid}"
+ )
+ options.append(
+ f"{mute_audio_path}|{mute_feature_path}|{mute_f0_path}|{mute_f0nsf_path}|{sid}"
+ )
+
+ file_path = os.path.join(model_path, "model_info.json")
+ if os.path.exists(file_path):
+ with open(file_path, "r") as f:
+ data = json.load(f)
+ else:
+ data = {}
+ data.update(
+ {
+ "speakers_id": len(sids),
+ }
+ )
+ with open(file_path, "w") as f:
+ json.dump(data, f, indent=4)
+
+ shuffle(options)
+
+ with open(os.path.join(model_path, "filelist.txt"), "w") as f:
+ f.write("\n".join(options))
diff --git a/rvc/train/losses.py b/rvc/train/losses.py
new file mode 100644
index 0000000000000000000000000000000000000000..5d6642a66ef3e66445e1608ac2bcfa4dd333ca59
--- /dev/null
+++ b/rvc/train/losses.py
@@ -0,0 +1,84 @@
+import torch
+
+
+def feature_loss(fmap_r, fmap_g):
+ """
+ Compute the feature loss between reference and generated feature maps.
+
+ Args:
+ fmap_r (list of torch.Tensor): List of reference feature maps.
+ fmap_g (list of torch.Tensor): List of generated feature maps.
+ """
+ loss = 0
+ for dr, dg in zip(fmap_r, fmap_g):
+ for rl, gl in zip(dr, dg):
+ rl = rl.float().detach()
+ gl = gl.float()
+ loss += torch.mean(torch.abs(rl - gl))
+
+ return loss * 2
+
+
+def discriminator_loss(disc_real_outputs, disc_generated_outputs):
+ """
+ Compute the discriminator loss for real and generated outputs.
+
+ Args:
+ disc_real_outputs (list of torch.Tensor): List of discriminator outputs for real samples.
+ disc_generated_outputs (list of torch.Tensor): List of discriminator outputs for generated samples.
+ """
+ loss = 0
+ r_losses = []
+ g_losses = []
+ for dr, dg in zip(disc_real_outputs, disc_generated_outputs):
+ dr = dr.float()
+ dg = dg.float()
+ r_loss = torch.mean((1 - dr) ** 2)
+ g_loss = torch.mean(dg**2)
+ loss += r_loss + g_loss
+ r_losses.append(r_loss.item())
+ g_losses.append(g_loss.item())
+
+ return loss, r_losses, g_losses
+
+
+def generator_loss(disc_outputs):
+ """
+ Compute the generator loss based on discriminator outputs.
+
+ Args:
+ disc_outputs (list of torch.Tensor): List of discriminator outputs for generated samples.
+ """
+ loss = 0
+ gen_losses = []
+ for dg in disc_outputs:
+ dg = dg.float()
+ l = torch.mean((1 - dg) ** 2)
+ gen_losses.append(l)
+ loss += l
+
+ return loss, gen_losses
+
+
+def kl_loss(z_p, logs_q, m_p, logs_p, z_mask):
+ """
+ Compute the Kullback-Leibler divergence loss.
+
+ Args:
+ z_p (torch.Tensor): Latent variable z_p [b, h, t_t].
+ logs_q (torch.Tensor): Log variance of q [b, h, t_t].
+ m_p (torch.Tensor): Mean of p [b, h, t_t].
+ logs_p (torch.Tensor): Log variance of p [b, h, t_t].
+ z_mask (torch.Tensor): Mask for the latent variables [b, h, t_t].
+ """
+ z_p = z_p.float()
+ logs_q = logs_q.float()
+ m_p = m_p.float()
+ logs_p = logs_p.float()
+ z_mask = z_mask.float()
+
+ kl = logs_p - logs_q - 0.5
+ kl += 0.5 * ((z_p - m_p) ** 2) * torch.exp(-2.0 * logs_p)
+ kl = torch.sum(kl * z_mask)
+ l = kl / torch.sum(z_mask)
+ return l
diff --git a/rvc/train/mel_processing.py b/rvc/train/mel_processing.py
new file mode 100644
index 0000000000000000000000000000000000000000..ecad64896e9a858524bafcee60c8bae930b71622
--- /dev/null
+++ b/rvc/train/mel_processing.py
@@ -0,0 +1,146 @@
+import torch
+import torch.utils.data
+from librosa.filters import mel as librosa_mel_fn
+
+
+def dynamic_range_compression_torch(x, C=1, clip_val=1e-5):
+ """
+ Dynamic range compression using log10.
+
+ Args:
+ x (torch.Tensor): Input tensor.
+ C (float, optional): Scaling factor. Defaults to 1.
+ clip_val (float, optional): Minimum value for clamping. Defaults to 1e-5.
+ """
+ return torch.log(torch.clamp(x, min=clip_val) * C)
+
+
+def dynamic_range_decompression_torch(x, C=1):
+ """
+ Dynamic range decompression using exp.
+
+ Args:
+ x (torch.Tensor): Input tensor.
+ C (float, optional): Scaling factor. Defaults to 1.
+ """
+ return torch.exp(x) / C
+
+
+def spectral_normalize_torch(magnitudes):
+ """
+ Spectral normalization using dynamic range compression.
+
+ Args:
+ magnitudes (torch.Tensor): Magnitude spectrogram.
+ """
+ return dynamic_range_compression_torch(magnitudes)
+
+
+def spectral_de_normalize_torch(magnitudes):
+ """
+ Spectral de-normalization using dynamic range decompression.
+
+ Args:
+ magnitudes (torch.Tensor): Normalized spectrogram.
+ """
+ return dynamic_range_decompression_torch(magnitudes)
+
+
+mel_basis = {}
+hann_window = {}
+
+
+def spectrogram_torch(y, n_fft, hop_size, win_size, center=False):
+ """
+ Compute the spectrogram of a signal using STFT.
+
+ Args:
+ y (torch.Tensor): Input signal.
+ n_fft (int): FFT window size.
+ hop_size (int): Hop size between frames.
+ win_size (int): Window size.
+ center (bool, optional): Whether to center the window. Defaults to False.
+ """
+ global hann_window
+ dtype_device = str(y.dtype) + "_" + str(y.device)
+ wnsize_dtype_device = str(win_size) + "_" + dtype_device
+ if wnsize_dtype_device not in hann_window:
+ hann_window[wnsize_dtype_device] = torch.hann_window(win_size).to(
+ dtype=y.dtype, device=y.device
+ )
+
+ y = torch.nn.functional.pad(
+ y.unsqueeze(1),
+ (int((n_fft - hop_size) / 2), int((n_fft - hop_size) / 2)),
+ mode="reflect",
+ )
+ y = y.squeeze(1)
+
+ spec = torch.stft(
+ y,
+ n_fft,
+ hop_length=hop_size,
+ win_length=win_size,
+ window=hann_window[wnsize_dtype_device],
+ center=center,
+ pad_mode="reflect",
+ normalized=False,
+ onesided=True,
+ return_complex=True,
+ )
+
+ spec = torch.sqrt(spec.real.pow(2) + spec.imag.pow(2) + 1e-6)
+
+ return spec
+
+
+def spec_to_mel_torch(spec, n_fft, num_mels, sample_rate, fmin, fmax):
+ """
+ Convert a spectrogram to a mel-spectrogram.
+
+ Args:
+ spec (torch.Tensor): Magnitude spectrogram.
+ n_fft (int): FFT window size.
+ num_mels (int): Number of mel frequency bins.
+ sample_rate (int): Sampling rate of the audio signal.
+ fmin (float): Minimum frequency.
+ fmax (float): Maximum frequency.
+ """
+ global mel_basis
+ dtype_device = str(spec.dtype) + "_" + str(spec.device)
+ fmax_dtype_device = str(fmax) + "_" + dtype_device
+ if fmax_dtype_device not in mel_basis:
+ mel = librosa_mel_fn(
+ sr=sample_rate, n_fft=n_fft, n_mels=num_mels, fmin=fmin, fmax=fmax
+ )
+ mel_basis[fmax_dtype_device] = torch.from_numpy(mel).to(
+ dtype=spec.dtype, device=spec.device
+ )
+
+ melspec = torch.matmul(mel_basis[fmax_dtype_device], spec)
+ melspec = spectral_normalize_torch(melspec)
+ return melspec
+
+
+def mel_spectrogram_torch(
+ y, n_fft, num_mels, sample_rate, hop_size, win_size, fmin, fmax, center=False
+):
+ """
+ Compute the mel-spectrogram of a signal.
+
+ Args:
+ y (torch.Tensor): Input signal.
+ n_fft (int): FFT window size.
+ num_mels (int): Number of mel frequency bins.
+ sample_rate (int): Sampling rate of the audio signal.
+ hop_size (int): Hop size between frames.
+ win_size (int): Window size.
+ fmin (float): Minimum frequency.
+ fmax (float): Maximum frequency.
+ center (bool, optional): Whether to center the window. Defaults to False.
+ """
+ spec = spectrogram_torch(y, n_fft, hop_size, win_size, center)
+
+ melspec = spec_to_mel_torch(spec, n_fft, num_mels, sample_rate, fmin, fmax)
+
+ return melspec
diff --git a/rvc/train/preprocess/preprocess.py b/rvc/train/preprocess/preprocess.py
new file mode 100644
index 0000000000000000000000000000000000000000..ef80a28c358f9da08215478d07cd6b50b97f3929
--- /dev/null
+++ b/rvc/train/preprocess/preprocess.py
@@ -0,0 +1,279 @@
+import os
+import sys
+import time
+from scipy import signal
+from scipy.io import wavfile
+import numpy as np
+import concurrent.futures
+from tqdm import tqdm
+import json
+from distutils.util import strtobool
+import librosa
+import multiprocessing
+import noisereduce as nr
+
+now_directory = os.getcwd()
+sys.path.append(now_directory)
+
+from rvc.lib.utils import load_audio
+from rvc.train.preprocess.slicer import Slicer
+
+# Remove colab logs
+import logging
+
+logging.getLogger("numba.core.byteflow").setLevel(logging.WARNING)
+logging.getLogger("numba.core.ssa").setLevel(logging.WARNING)
+logging.getLogger("numba.core.interpreter").setLevel(logging.WARNING)
+
+# Constants
+OVERLAP = 0.3
+MAX_AMPLITUDE = 0.9
+ALPHA = 0.75
+HIGH_PASS_CUTOFF = 48
+SAMPLE_RATE_16K = 16000
+
+
+class PreProcess:
+ def __init__(self, sr: int, exp_dir: str, per: float):
+ self.slicer = Slicer(
+ sr=sr,
+ threshold=-42,
+ min_length=1500,
+ min_interval=400,
+ hop_size=15,
+ max_sil_kept=500,
+ )
+ self.sr = sr
+ self.b_high, self.a_high = signal.butter(
+ N=5, Wn=HIGH_PASS_CUTOFF, btype="high", fs=self.sr
+ )
+ self.per = per
+ self.exp_dir = exp_dir
+ self.device = "cpu"
+ self.gt_wavs_dir = os.path.join(exp_dir, "sliced_audios")
+ self.wavs16k_dir = os.path.join(exp_dir, "sliced_audios_16k")
+ os.makedirs(self.gt_wavs_dir, exist_ok=True)
+ os.makedirs(self.wavs16k_dir, exist_ok=True)
+
+ def _normalize_audio(self, audio: np.ndarray):
+ tmp_max = np.abs(audio).max()
+ if tmp_max > 2.5:
+ return None
+ return (audio / tmp_max * (MAX_AMPLITUDE * ALPHA)) + (1 - ALPHA) * audio
+
+ def process_audio_segment(
+ self,
+ normalized_audio: np.ndarray,
+ sid: int,
+ idx0: int,
+ idx1: int,
+ ):
+ if normalized_audio is None:
+ print(f"{sid}-{idx0}-{idx1}-filtered")
+ return
+ wavfile.write(
+ os.path.join(self.gt_wavs_dir, f"{sid}_{idx0}_{idx1}.wav"),
+ self.sr,
+ normalized_audio.astype(np.float32),
+ )
+ audio_16k = librosa.resample(
+ normalized_audio, orig_sr=self.sr, target_sr=SAMPLE_RATE_16K
+ )
+ wavfile.write(
+ os.path.join(self.wavs16k_dir, f"{sid}_{idx0}_{idx1}.wav"),
+ SAMPLE_RATE_16K,
+ audio_16k.astype(np.float32),
+ )
+
+ def process_audio(
+ self,
+ path: str,
+ idx0: int,
+ sid: int,
+ cut_preprocess: bool,
+ process_effects: bool,
+ noise_reduction: bool,
+ reduction_strength: float,
+ ):
+ audio_length = 0
+ try:
+ audio = load_audio(path, self.sr)
+ audio_length = librosa.get_duration(y=audio, sr=self.sr)
+ if process_effects:
+ audio = signal.lfilter(self.b_high, self.a_high, audio)
+ audio = self._normalize_audio(audio)
+ if noise_reduction:
+ audio = nr.reduce_noise(
+ y=audio, sr=self.sr, prop_decrease=reduction_strength
+ )
+ idx1 = 0
+ if cut_preprocess:
+ for audio_segment in self.slicer.slice(audio):
+ i = 0
+ while True:
+ start = int(self.sr * (self.per - OVERLAP) * i)
+ i += 1
+ if len(audio_segment[start:]) > (self.per + OVERLAP) * self.sr:
+ tmp_audio = audio_segment[
+ start : start + int(self.per * self.sr)
+ ]
+ self.process_audio_segment(
+ tmp_audio,
+ sid,
+ idx0,
+ idx1,
+ )
+ idx1 += 1
+ else:
+ tmp_audio = audio_segment[start:]
+ self.process_audio_segment(
+ tmp_audio,
+ sid,
+ idx0,
+ idx1,
+ )
+ idx1 += 1
+ break
+ else:
+ self.process_audio_segment(
+ audio,
+ sid,
+ idx0,
+ idx1,
+ )
+ except Exception as error:
+ print(f"Error processing audio: {error}")
+ return audio_length
+
+
+def format_duration(seconds):
+ hours = int(seconds // 3600)
+ minutes = int((seconds % 3600) // 60)
+ seconds = int(seconds % 60)
+ return f"{hours:02}:{minutes:02}:{seconds:02}"
+
+
+def save_dataset_duration(file_path, dataset_duration):
+ try:
+ with open(file_path, "r") as f:
+ data = json.load(f)
+ except FileNotFoundError:
+ data = {}
+
+ formatted_duration = format_duration(dataset_duration)
+ new_data = {
+ "total_dataset_duration": formatted_duration,
+ "total_seconds": dataset_duration,
+ }
+ data.update(new_data)
+
+ with open(file_path, "w") as f:
+ json.dump(data, f, indent=4)
+
+
+def process_audio_wrapper(args):
+ pp, file, cut_preprocess, process_effects, noise_reduction, reduction_strength = (
+ args
+ )
+ file_path, idx0, sid = file
+ return pp.process_audio(
+ file_path,
+ idx0,
+ sid,
+ cut_preprocess,
+ process_effects,
+ noise_reduction,
+ reduction_strength,
+ )
+
+
+def preprocess_training_set(
+ input_root: str,
+ sr: int,
+ num_processes: int,
+ exp_dir: str,
+ per: float,
+ cut_preprocess: bool,
+ process_effects: bool,
+ noise_reduction: bool,
+ reduction_strength: float,
+):
+ start_time = time.time()
+ pp = PreProcess(sr, exp_dir, per)
+ print(f"Starting preprocess with {num_processes} processes...")
+
+ files = []
+ idx = 0
+
+ for root, _, filenames in os.walk(input_root):
+ try:
+ sid = 0 if root == input_root else int(os.path.basename(root))
+ for f in filenames:
+ if f.lower().endswith((".wav", ".mp3", ".flac", ".ogg")):
+ files.append((os.path.join(root, f), idx, sid))
+ idx += 1
+ except ValueError:
+ print(
+ f'Speaker ID folder is expected to be integer, got "{os.path.basename(root)}" instead.'
+ )
+
+ # print(f"Number of files: {len(files)}")
+ audio_length = []
+ with tqdm(total=len(files)) as pbar:
+ with concurrent.futures.ProcessPoolExecutor(
+ max_workers=num_processes
+ ) as executor:
+ futures = [
+ executor.submit(
+ process_audio_wrapper,
+ (
+ pp,
+ file,
+ cut_preprocess,
+ process_effects,
+ noise_reduction,
+ reduction_strength,
+ ),
+ )
+ for file in files
+ ]
+ for future in concurrent.futures.as_completed(futures):
+ audio_length.append(future.result())
+ pbar.update(1)
+
+ audio_length = sum(audio_length)
+ save_dataset_duration(
+ os.path.join(exp_dir, "model_info.json"), dataset_duration=audio_length
+ )
+ elapsed_time = time.time() - start_time
+ print(
+ f"Preprocess completed in {elapsed_time:.2f} seconds on {format_duration(audio_length)} seconds of audio."
+ )
+
+
+if __name__ == "__main__":
+ experiment_directory = str(sys.argv[1])
+ input_root = str(sys.argv[2])
+ sample_rate = int(sys.argv[3])
+ percentage = float(sys.argv[4])
+ num_processes = sys.argv[5]
+ if num_processes.lower() == "none":
+ num_processes = multiprocessing.cpu_count()
+ else:
+ num_processes = int(num_processes)
+ cut_preprocess = strtobool(sys.argv[6])
+ process_effects = strtobool(sys.argv[7])
+ noise_reduction = strtobool(sys.argv[8])
+ reduction_strength = float(sys.argv[9])
+
+ preprocess_training_set(
+ input_root,
+ sample_rate,
+ num_processes,
+ experiment_directory,
+ percentage,
+ cut_preprocess,
+ process_effects,
+ noise_reduction,
+ reduction_strength,
+ )
diff --git a/rvc/train/preprocess/slicer.py b/rvc/train/preprocess/slicer.py
new file mode 100644
index 0000000000000000000000000000000000000000..09c4f9a556dee5e8ef506115ccf3ace328ffaaa6
--- /dev/null
+++ b/rvc/train/preprocess/slicer.py
@@ -0,0 +1,235 @@
+import numpy as np
+
+
+class Slicer:
+ """
+ A class for slicing audio waveforms into segments based on silence detection.
+
+ Attributes:
+ sr (int): Sampling rate of the audio waveform.
+ threshold (float): RMS threshold for silence detection, in dB.
+ min_length (int): Minimum length of a segment, in milliseconds.
+ min_interval (int): Minimum interval between segments, in milliseconds.
+ hop_size (int): Hop size for RMS calculation, in milliseconds.
+ max_sil_kept (int): Maximum length of silence to keep at the beginning or end of a segment, in milliseconds.
+
+ Methods:
+ slice(waveform): Slices the given waveform into segments.
+ """
+
+ def __init__(
+ self,
+ sr: int,
+ threshold: float = -40.0,
+ min_length: int = 5000,
+ min_interval: int = 300,
+ hop_size: int = 20,
+ max_sil_kept: int = 5000,
+ ):
+ """
+ Initializes a Slicer object.
+
+ Args:
+ sr (int): Sampling rate of the audio waveform.
+ threshold (float, optional): RMS threshold for silence detection, in dB. Defaults to -40.0.
+ min_length (int, optional): Minimum length of a segment, in milliseconds. Defaults to 5000.
+ min_interval (int, optional): Minimum interval between segments, in milliseconds. Defaults to 300.
+ hop_size (int, optional): Hop size for RMS calculation, in milliseconds. Defaults to 20.
+ max_sil_kept (int, optional): Maximum length of silence to keep at the beginning or end of a segment, in milliseconds. Defaults to 5000.
+
+ Raises:
+ ValueError: If the input parameters are not valid.
+ """
+ if not min_length >= min_interval >= hop_size:
+ raise ValueError("min_length >= min_interval >= hop_size is required")
+ if not max_sil_kept >= hop_size:
+ raise ValueError("max_sil_kept >= hop_size is required")
+
+ # Convert time-based parameters to sample-based parameters
+ min_interval = sr * min_interval / 1000
+ self.threshold = 10 ** (threshold / 20.0)
+ self.hop_size = round(sr * hop_size / 1000)
+ self.win_size = min(round(min_interval), 4 * self.hop_size)
+ self.min_length = round(sr * min_length / 1000 / self.hop_size)
+ self.min_interval = round(min_interval / self.hop_size)
+ self.max_sil_kept = round(sr * max_sil_kept / 1000 / self.hop_size)
+
+ def _apply_slice(self, waveform, begin, end):
+ """
+ Applies a slice to the waveform.
+
+ Args:
+ waveform (numpy.ndarray): The waveform to slice.
+ begin (int): Start frame index.
+ end (int): End frame index.
+ """
+ start_idx = begin * self.hop_size
+ if len(waveform.shape) > 1:
+ end_idx = min(waveform.shape[1], end * self.hop_size)
+ return waveform[:, start_idx:end_idx]
+ else:
+ end_idx = min(waveform.shape[0], end * self.hop_size)
+ return waveform[start_idx:end_idx]
+
+ def slice(self, waveform):
+ """
+ Slices the given waveform into segments.
+
+ Args:
+ waveform (numpy.ndarray): The waveform to slice.
+ """
+ # Calculate RMS for each frame
+ samples = waveform.mean(axis=0) if len(waveform.shape) > 1 else waveform
+ if samples.shape[0] <= self.min_length:
+ return [waveform]
+
+ rms_list = get_rms(
+ y=samples, frame_length=self.win_size, hop_length=self.hop_size
+ ).squeeze(0)
+
+ # Detect silence segments and mark them
+ sil_tags = []
+ silence_start, clip_start = None, 0
+ for i, rms in enumerate(rms_list):
+ # If current frame is silent
+ if rms < self.threshold:
+ if silence_start is None:
+ silence_start = i
+ continue
+
+ # If current frame is not silent
+ if silence_start is None:
+ continue
+
+ # Check if current silence segment is leading silence or need to slice
+ is_leading_silence = silence_start == 0 and i > self.max_sil_kept
+ need_slice_middle = (
+ i - silence_start >= self.min_interval
+ and i - clip_start >= self.min_length
+ )
+
+ # If not leading silence and not need to slice middle
+ if not is_leading_silence and not need_slice_middle:
+ silence_start = None
+ continue
+
+ # Handle different cases of silence segments
+ if i - silence_start <= self.max_sil_kept:
+ # Short silence
+ pos = rms_list[silence_start : i + 1].argmin() + silence_start
+ if silence_start == 0:
+ sil_tags.append((0, pos))
+ else:
+ sil_tags.append((pos, pos))
+ clip_start = pos
+ elif i - silence_start <= self.max_sil_kept * 2:
+ # Medium silence
+ pos = rms_list[
+ i - self.max_sil_kept : silence_start + self.max_sil_kept + 1
+ ].argmin()
+ pos += i - self.max_sil_kept
+ pos_l = (
+ rms_list[
+ silence_start : silence_start + self.max_sil_kept + 1
+ ].argmin()
+ + silence_start
+ )
+ pos_r = (
+ rms_list[i - self.max_sil_kept : i + 1].argmin()
+ + i
+ - self.max_sil_kept
+ )
+ if silence_start == 0:
+ sil_tags.append((0, pos_r))
+ clip_start = pos_r
+ else:
+ sil_tags.append((min(pos_l, pos), max(pos_r, pos)))
+ clip_start = max(pos_r, pos)
+ else:
+ # Long silence
+ pos_l = (
+ rms_list[
+ silence_start : silence_start + self.max_sil_kept + 1
+ ].argmin()
+ + silence_start
+ )
+ pos_r = (
+ rms_list[i - self.max_sil_kept : i + 1].argmin()
+ + i
+ - self.max_sil_kept
+ )
+ if silence_start == 0:
+ sil_tags.append((0, pos_r))
+ else:
+ sil_tags.append((pos_l, pos_r))
+ clip_start = pos_r
+ silence_start = None
+
+ # Handle trailing silence
+ total_frames = rms_list.shape[0]
+ if (
+ silence_start is not None
+ and total_frames - silence_start >= self.min_interval
+ ):
+ silence_end = min(total_frames, silence_start + self.max_sil_kept)
+ pos = rms_list[silence_start : silence_end + 1].argmin() + silence_start
+ sil_tags.append((pos, total_frames + 1))
+
+ # Extract segments based on silence tags
+ if not sil_tags:
+ return [waveform]
+ else:
+ chunks = []
+ if sil_tags[0][0] > 0:
+ chunks.append(self._apply_slice(waveform, 0, sil_tags[0][0]))
+
+ for i in range(len(sil_tags) - 1):
+ chunks.append(
+ self._apply_slice(waveform, sil_tags[i][1], sil_tags[i + 1][0])
+ )
+
+ if sil_tags[-1][1] < total_frames:
+ chunks.append(
+ self._apply_slice(waveform, sil_tags[-1][1], total_frames)
+ )
+
+ return chunks
+
+
+def get_rms(
+ y,
+ frame_length=2048,
+ hop_length=512,
+ pad_mode="constant",
+):
+ """
+ Calculates the root mean square (RMS) of a waveform.
+
+ Args:
+ y (numpy.ndarray): The waveform.
+ frame_length (int, optional): The length of the frame in samples. Defaults to 2048.
+ hop_length (int, optional): The hop length between frames in samples. Defaults to 512.
+ pad_mode (str, optional): The padding mode used for the waveform. Defaults to "constant".
+ """
+ padding = (int(frame_length // 2), int(frame_length // 2))
+ y = np.pad(y, padding, mode=pad_mode)
+
+ axis = -1
+ out_strides = y.strides + tuple([y.strides[axis]])
+ x_shape_trimmed = list(y.shape)
+ x_shape_trimmed[axis] -= frame_length - 1
+ out_shape = tuple(x_shape_trimmed) + tuple([frame_length])
+ xw = np.lib.stride_tricks.as_strided(y, shape=out_shape, strides=out_strides)
+
+ if axis < 0:
+ target_axis = axis - 1
+ else:
+ target_axis = axis + 1
+
+ xw = np.moveaxis(xw, -1, target_axis)
+ slices = [slice(None)] * xw.ndim
+ slices[axis] = slice(0, None, hop_length)
+ x = xw[tuple(slices)]
+
+ power = np.mean(np.abs(x) ** 2, axis=-2, keepdims=True)
+ return np.sqrt(power)
diff --git a/rvc/train/process/change_info.py b/rvc/train/process/change_info.py
new file mode 100644
index 0000000000000000000000000000000000000000..6e5f680b33eec70388744dbc1e58fbd24e2a02d8
--- /dev/null
+++ b/rvc/train/process/change_info.py
@@ -0,0 +1,14 @@
+import os
+import torch
+
+
+def change_info(path, info, name):
+ try:
+ ckpt = torch.load(path, map_location="cpu")
+ ckpt["info"] = info
+ if name == "":
+ name = os.path.basename(path)
+ torch.save(ckpt, f"logs/{name}/{name}")
+ return "Success."
+ except Exception as error:
+ print(f"An error occurred changing the info: {error}")
diff --git a/rvc/train/process/extract_index.py b/rvc/train/process/extract_index.py
new file mode 100644
index 0000000000000000000000000000000000000000..fba16d6a43d1580cf50422443849238cdc476e3d
--- /dev/null
+++ b/rvc/train/process/extract_index.py
@@ -0,0 +1,90 @@
+import os
+import sys
+import faiss
+import numpy as np
+from sklearn.cluster import MiniBatchKMeans
+from multiprocessing import cpu_count
+
+# Parse command line arguments
+exp_dir = str(sys.argv[1])
+version = str(sys.argv[2])
+index_algorithm = str(sys.argv[3])
+
+try:
+ feature_dir = os.path.join(exp_dir, f"{version}_extracted")
+ model_name = os.path.basename(exp_dir)
+
+ index_filename_added = f"added_{model_name}_{version}.index"
+ index_filepath_added = os.path.join(exp_dir, index_filename_added)
+
+ # index_filename_trained = f"trained_{model_name}_{version}.index"
+ # index_filepath_trained = os.path.join(exp_dir, index_filename_trained)
+
+ if os.path.exists(index_filepath_added):
+ pass
+ else:
+ npys = []
+ listdir_res = sorted(os.listdir(feature_dir))
+
+ for name in listdir_res:
+ file_path = os.path.join(feature_dir, name)
+ phone = np.load(file_path)
+ npys.append(phone)
+
+ big_npy = np.concatenate(npys, axis=0)
+
+ big_npy_idx = np.arange(big_npy.shape[0])
+ np.random.shuffle(big_npy_idx)
+ big_npy = big_npy[big_npy_idx]
+
+ if big_npy.shape[0] > 2e5 and (
+ index_algorithm == "Auto" or index_algorithm == "KMeans"
+ ):
+ big_npy = (
+ MiniBatchKMeans(
+ n_clusters=10000,
+ verbose=True,
+ batch_size=256 * cpu_count(),
+ compute_labels=False,
+ init="random",
+ )
+ .fit(big_npy)
+ .cluster_centers_
+ )
+
+ # np.save(os.path.join(exp_dir, "total_fea.npy"), big_npy)
+
+ n_ivf = min(int(16 * np.sqrt(big_npy.shape[0])), big_npy.shape[0] // 39)
+
+ """
+ # index_trained
+ index_trained = faiss.index_factory(
+ 256 if version == "v1" else 768, f"IVF{n_ivf},Flat"
+ )
+ index_ivf_trained = faiss.extract_index_ivf(index_trained)
+ index_ivf_trained.nprobe = 1
+ index_trained.train(big_npy)
+
+ faiss.write_index(index_trained, index_filepath_trained)
+ """
+
+ # index_added
+ index_added = faiss.index_factory(
+ 256 if version == "v1" else 768, f"IVF{n_ivf},Flat"
+ )
+ index_ivf_added = faiss.extract_index_ivf(index_added)
+ index_ivf_added.nprobe = 1
+ index_added.train(big_npy)
+
+ batch_size_add = 8192
+ for i in range(0, big_npy.shape[0], batch_size_add):
+ index_added.add(big_npy[i : i + batch_size_add])
+
+ faiss.write_index(index_added, index_filepath_added)
+ print(f"Saved index file '{index_filepath_added}'")
+
+except Exception as error:
+ print(f"An error occurred extracting the index: {error}")
+ print(
+ "If you are running this code in a virtual environment, make sure you have enough GPU available to generate the Index file."
+ )
diff --git a/rvc/train/process/extract_model.py b/rvc/train/process/extract_model.py
new file mode 100644
index 0000000000000000000000000000000000000000..864765cb0194b350d9be860d16dc7485faed9363
--- /dev/null
+++ b/rvc/train/process/extract_model.py
@@ -0,0 +1,126 @@
+import os, sys
+import torch
+import hashlib
+import datetime
+from collections import OrderedDict
+import json
+
+now_dir = os.getcwd()
+sys.path.append(now_dir)
+
+
+def replace_keys_in_dict(d, old_key_part, new_key_part):
+ if isinstance(d, OrderedDict):
+ updated_dict = OrderedDict()
+ else:
+ updated_dict = {}
+ for key, value in d.items():
+ new_key = key.replace(old_key_part, new_key_part)
+ if isinstance(value, dict):
+ value = replace_keys_in_dict(value, old_key_part, new_key_part)
+ updated_dict[new_key] = value
+ return updated_dict
+
+
+def extract_model(
+ ckpt,
+ sr,
+ pitch_guidance,
+ name,
+ model_dir,
+ epoch,
+ step,
+ version,
+ hps,
+ overtrain_info,
+):
+ try:
+ print(f"Saved model '{model_dir}' (epoch {epoch} and step {step})")
+
+ model_dir_path = os.path.dirname(model_dir)
+ os.makedirs(model_dir_path, exist_ok=True)
+
+ if "best_epoch" in model_dir:
+ pth_file = f"{name}_{epoch}e_{step}s_best_epoch.pth"
+ else:
+ pth_file = f"{name}_{epoch}e_{step}s.pth"
+
+ pth_file_old_version_path = os.path.join(
+ model_dir_path, f"{pth_file}_old_version.pth"
+ )
+
+ model_dir_path = os.path.dirname(model_dir)
+ if os.path.exists(os.path.join(model_dir_path, "model_info.json")):
+ with open(os.path.join(model_dir_path, "model_info.json"), "r") as f:
+ data = json.load(f)
+ dataset_lenght = data.get("total_dataset_duration", None)
+ embedder_model = data.get("embedder_model", None)
+ speakers_id = data.get("speakers_id", 1)
+ else:
+ dataset_lenght = None
+
+ with open(os.path.join(now_dir, "assets", "config.json"), "r") as f:
+ data = json.load(f)
+ model_author = data.get("model_author", None)
+
+ opt = OrderedDict(
+ weight={
+ key: value.half() for key, value in ckpt.items() if "enc_q" not in key
+ }
+ )
+ opt["config"] = [
+ hps.data.filter_length // 2 + 1,
+ 32,
+ hps.model.inter_channels,
+ hps.model.hidden_channels,
+ hps.model.filter_channels,
+ hps.model.n_heads,
+ hps.model.n_layers,
+ hps.model.kernel_size,
+ hps.model.p_dropout,
+ hps.model.resblock,
+ hps.model.resblock_kernel_sizes,
+ hps.model.resblock_dilation_sizes,
+ hps.model.upsample_rates,
+ hps.model.upsample_initial_channel,
+ hps.model.upsample_kernel_sizes,
+ hps.model.spk_embed_dim,
+ hps.model.gin_channels,
+ hps.data.sample_rate,
+ ]
+
+ opt["epoch"] = epoch
+ opt["step"] = step
+ opt["sr"] = sr
+ opt["f0"] = pitch_guidance
+ opt["version"] = version
+ opt["creation_date"] = datetime.datetime.now().isoformat()
+
+ hash_input = f"{str(ckpt)} {epoch} {step} {datetime.datetime.now().isoformat()}"
+ model_hash = hashlib.sha256(hash_input.encode()).hexdigest()
+ opt["model_hash"] = model_hash
+ opt["overtrain_info"] = overtrain_info
+ opt["dataset_lenght"] = dataset_lenght
+ opt["model_name"] = name
+ opt["author"] = model_author
+ opt["embedder_model"] = embedder_model
+ opt["speakers_id"] = speakers_id
+
+ torch.save(opt, os.path.join(model_dir_path, pth_file))
+
+ model = torch.load(model_dir, map_location=torch.device("cpu"))
+ torch.save(
+ replace_keys_in_dict(
+ replace_keys_in_dict(
+ model, ".parametrizations.weight.original1", ".weight_v"
+ ),
+ ".parametrizations.weight.original0",
+ ".weight_g",
+ ),
+ pth_file_old_version_path,
+ )
+ os.remove(model_dir)
+ os.rename(pth_file_old_version_path, model_dir)
+
+ except Exception as error:
+ print(f"An error occurred extracting the model: {error}")
diff --git a/rvc/train/process/extract_small_model.py b/rvc/train/process/extract_small_model.py
new file mode 100644
index 0000000000000000000000000000000000000000..7b0f484d795a283dde0cb8b50d6b5e9317ff9e7a
--- /dev/null
+++ b/rvc/train/process/extract_small_model.py
@@ -0,0 +1,183 @@
+import os
+import torch
+import hashlib
+import datetime
+from collections import OrderedDict
+
+
+def replace_keys_in_dict(d, old_key_part, new_key_part):
+ # Use OrderedDict if the original is an OrderedDict
+ if isinstance(d, OrderedDict):
+ updated_dict = OrderedDict()
+ else:
+ updated_dict = {}
+ for key, value in d.items():
+ # Replace the key part if found
+ new_key = key.replace(old_key_part, new_key_part)
+ # If the value is a dictionary, apply the function recursively
+ if isinstance(value, dict):
+ value = replace_keys_in_dict(value, old_key_part, new_key_part)
+ updated_dict[new_key] = value
+ return updated_dict
+
+
+def extract_small_model(
+ path: str,
+ name: str,
+ sr: int,
+ pitch_guidance: bool,
+ version: str,
+ epoch: int,
+ step: int,
+):
+ try:
+ ckpt = torch.load(path, map_location="cpu")
+ pth_file = f"{name}.pth"
+ pth_file_old_version_path = os.path.join("logs", f"{pth_file}_old_version.pth")
+ opt = OrderedDict(
+ weight={
+ key: value.half() for key, value in ckpt.items() if "enc_q" not in key
+ }
+ )
+ if "model" in ckpt:
+ ckpt = ckpt["model"]
+ opt = OrderedDict()
+ opt["weight"] = {}
+ for key in ckpt.keys():
+ if "enc_q" in key:
+ continue
+ opt["weight"][key] = ckpt[key].half()
+ if sr == "40000":
+ opt["config"] = [
+ 1025,
+ 32,
+ 192,
+ 192,
+ 768,
+ 2,
+ 6,
+ 3,
+ 0,
+ "1",
+ [3, 7, 11],
+ [[1, 3, 5], [1, 3, 5], [1, 3, 5]],
+ [10, 10, 2, 2],
+ 512,
+ [16, 16, 4, 4],
+ 109,
+ 256,
+ 40000,
+ ]
+ elif sr == "48000":
+ if version == "v1":
+ opt["config"] = [
+ 1025,
+ 32,
+ 192,
+ 192,
+ 768,
+ 2,
+ 6,
+ 3,
+ 0,
+ "1",
+ [3, 7, 11],
+ [[1, 3, 5], [1, 3, 5], [1, 3, 5]],
+ [10, 6, 2, 2, 2],
+ 512,
+ [16, 16, 4, 4, 4],
+ 109,
+ 256,
+ 48000,
+ ]
+ else:
+ opt["config"] = [
+ 1025,
+ 32,
+ 192,
+ 192,
+ 768,
+ 2,
+ 6,
+ 3,
+ 0,
+ "1",
+ [3, 7, 11],
+ [[1, 3, 5], [1, 3, 5], [1, 3, 5]],
+ [12, 10, 2, 2],
+ 512,
+ [24, 20, 4, 4],
+ 109,
+ 256,
+ 48000,
+ ]
+ elif sr == "32000":
+ if version == "v1":
+ opt["config"] = [
+ 513,
+ 32,
+ 192,
+ 192,
+ 768,
+ 2,
+ 6,
+ 3,
+ 0,
+ "1",
+ [3, 7, 11],
+ [[1, 3, 5], [1, 3, 5], [1, 3, 5]],
+ [10, 4, 2, 2, 2],
+ 512,
+ [16, 16, 4, 4, 4],
+ 109,
+ 256,
+ 32000,
+ ]
+ else:
+ opt["config"] = [
+ 513,
+ 32,
+ 192,
+ 192,
+ 768,
+ 2,
+ 6,
+ 3,
+ 0,
+ "1",
+ [3, 7, 11],
+ [[1, 3, 5], [1, 3, 5], [1, 3, 5]],
+ [10, 8, 2, 2],
+ 512,
+ [20, 16, 4, 4],
+ 109,
+ 256,
+ 32000,
+ ]
+
+ opt["epoch"] = epoch
+ opt["step"] = step
+ opt["sr"] = sr
+ opt["f0"] = int(pitch_guidance)
+ opt["version"] = version
+ opt["creation_date"] = datetime.datetime.now().isoformat()
+
+ hash_input = f"{str(ckpt)} {epoch} {step} {datetime.datetime.now().isoformat()}"
+ model_hash = hashlib.sha256(hash_input.encode()).hexdigest()
+ opt["model_hash"] = model_hash
+
+ model = torch.load(pth_file_old_version_path, map_location=torch.device("cpu"))
+ torch.save(
+ replace_keys_in_dict(
+ replace_keys_in_dict(
+ model, ".parametrizations.weight.original1", ".weight_v"
+ ),
+ ".parametrizations.weight.original0",
+ ".weight_g",
+ ),
+ pth_file_old_version_path,
+ )
+ os.remove(pth_file_old_version_path)
+ os.rename(pth_file_old_version_path, pth_file)
+ except Exception as error:
+ print(f"An error occurred extracting the model: {error}")
diff --git a/rvc/train/process/model_blender.py b/rvc/train/process/model_blender.py
new file mode 100644
index 0000000000000000000000000000000000000000..e08105d5f597269f8f1e44f4099d20c4d33bd1df
--- /dev/null
+++ b/rvc/train/process/model_blender.py
@@ -0,0 +1,68 @@
+import os
+import torch
+from collections import OrderedDict
+
+
+def extract(ckpt):
+ a = ckpt["model"]
+ opt = OrderedDict()
+ opt["weight"] = {}
+ for key in a.keys():
+ if "enc_q" in key:
+ continue
+ opt["weight"][key] = a[key]
+ return opt
+
+
+def model_blender(name, path1, path2, ratio):
+ try:
+ message = f"Model {path1} and {path2} are merged with alpha {ratio}."
+ ckpt1 = torch.load(path1, map_location="cpu")
+ ckpt2 = torch.load(path2, map_location="cpu")
+
+ if ckpt1["sr"] != ckpt2["sr"]:
+ return "The sample rates of the two models are not the same."
+
+ cfg = ckpt1["config"]
+ cfg_f0 = ckpt1["f0"]
+ cfg_version = ckpt1["version"]
+ cfg_sr = ckpt1["sr"]
+
+ if "model" in ckpt1:
+ ckpt1 = extract(ckpt1)
+ else:
+ ckpt1 = ckpt1["weight"]
+ if "model" in ckpt2:
+ ckpt2 = extract(ckpt2)
+ else:
+ ckpt2 = ckpt2["weight"]
+
+ if sorted(list(ckpt1.keys())) != sorted(list(ckpt2.keys())):
+ return "Fail to merge the models. The model architectures are not the same."
+
+ opt = OrderedDict()
+ opt["weight"] = {}
+ for key in ckpt1.keys():
+ if key == "emb_g.weight" and ckpt1[key].shape != ckpt2[key].shape:
+ min_shape0 = min(ckpt1[key].shape[0], ckpt2[key].shape[0])
+ opt["weight"][key] = (
+ ratio * (ckpt1[key][:min_shape0].float())
+ + (1 - ratio) * (ckpt2[key][:min_shape0].float())
+ ).half()
+ else:
+ opt["weight"][key] = (
+ ratio * (ckpt1[key].float()) + (1 - ratio) * (ckpt2[key].float())
+ ).half()
+
+ opt["config"] = cfg
+ opt["sr"] = cfg_sr
+ opt["f0"] = cfg_f0
+ opt["version"] = cfg_version
+ opt["info"] = message
+
+ torch.save(opt, os.path.join("logs", f"{name}.pth"))
+ print(message)
+ return message, os.path.join("logs", f"{name}.pth")
+ except Exception as error:
+ print(f"An error occurred blending the models: {error}")
+ return error
diff --git a/rvc/train/process/model_information.py b/rvc/train/process/model_information.py
new file mode 100644
index 0000000000000000000000000000000000000000..a518cde5987bc726ff656e06c910e377d877a5ff
--- /dev/null
+++ b/rvc/train/process/model_information.py
@@ -0,0 +1,52 @@
+import torch
+from datetime import datetime
+
+
+def prettify_date(date_str):
+ if date_str is None:
+ return "None"
+ try:
+ date_time_obj = datetime.strptime(date_str, "%Y-%m-%dT%H:%M:%S.%f")
+ return date_time_obj.strftime("%Y-%m-%d %H:%M:%S")
+ except ValueError:
+ return "Invalid date format"
+
+
+def model_information(path):
+ model_data = torch.load(path, map_location="cpu")
+
+ print(f"Loaded model from {path}")
+
+ model_name = model_data.get("model_name", "None")
+ epochs = model_data.get("epoch", "None")
+ steps = model_data.get("step", "None")
+ sr = model_data.get("sr", "None")
+ f0 = model_data.get("f0", "None")
+ dataset_lenght = model_data.get("dataset_lenght", "None")
+ version = model_data.get("version", "None")
+ creation_date = model_data.get("creation_date", "None")
+ model_hash = model_data.get("model_hash", None)
+ overtrain_info = model_data.get("overtrain_info", "None")
+ model_author = model_data.get("author", "None")
+ embedder_model = model_data.get("embedder_model", "None")
+ speakers_id = model_data.get("speakers_id", 0)
+
+ pitch_guidance = "True" if f0 == 1 else "False"
+
+ creation_date_str = prettify_date(creation_date) if creation_date else "None"
+
+ return (
+ f"Model Name: {model_name}\n"
+ f"Model Creator: {model_author}\n"
+ f"Epochs: {epochs}\n"
+ f"Steps: {steps}\n"
+ f"Model Architecture: {version}\n"
+ f"Sampling Rate: {sr}\n"
+ f"Pitch Guidance: {pitch_guidance}\n"
+ f"Dataset Length: {dataset_lenght}\n"
+ f"Creation Date: {creation_date_str}\n"
+ f"Hash (ID): {model_hash}\n"
+ f"Overtrain Info: {overtrain_info}"
+ f"Embedder Model: {embedder_model}"
+ f"Max Speakers ID: {speakers_id}"
+ )
diff --git a/rvc/train/train.py b/rvc/train/train.py
new file mode 100644
index 0000000000000000000000000000000000000000..4a2d3fa62de030fbeab43e31029155fe75fac598
--- /dev/null
+++ b/rvc/train/train.py
@@ -0,0 +1,960 @@
+import os
+import re
+import sys
+import glob
+import json
+import torch
+import datetime
+
+from distutils.util import strtobool
+from random import randint, shuffle
+from time import time as ttime
+from time import sleep
+from tqdm import tqdm
+
+from torch.nn.parallel import DistributedDataParallel as DDP
+from torch.utils.tensorboard import SummaryWriter
+from torch.cuda.amp import GradScaler, autocast
+from torch.utils.data import DataLoader
+from torch.nn import functional as F
+
+import torch.distributed as dist
+import torch.multiprocessing as mp
+
+now_dir = os.getcwd()
+sys.path.append(os.path.join(now_dir))
+
+# Zluda hijack
+import rvc.lib.zluda
+
+from utils import (
+ HParams,
+ plot_spectrogram_to_numpy,
+ summarize,
+ load_checkpoint,
+ save_checkpoint,
+ latest_checkpoint_path,
+ load_wav_to_torch,
+)
+
+from losses import (
+ discriminator_loss,
+ feature_loss,
+ generator_loss,
+ kl_loss,
+)
+from mel_processing import mel_spectrogram_torch, spec_to_mel_torch
+
+from rvc.train.process.extract_model import extract_model
+
+from rvc.lib.algorithm import commons
+
+# Parse command line arguments
+model_name = sys.argv[1]
+save_every_epoch = int(sys.argv[2])
+total_epoch = int(sys.argv[3])
+pretrainG = sys.argv[4]
+pretrainD = sys.argv[5]
+version = sys.argv[6]
+gpus = sys.argv[7]
+batch_size = int(sys.argv[8])
+sample_rate = int(sys.argv[9])
+pitch_guidance = strtobool(sys.argv[10])
+save_only_latest = strtobool(sys.argv[11])
+save_every_weights = strtobool(sys.argv[12])
+cache_data_in_gpu = strtobool(sys.argv[13])
+overtraining_detector = strtobool(sys.argv[14])
+overtraining_threshold = int(sys.argv[15])
+cleanup = strtobool(sys.argv[16])
+
+current_dir = os.getcwd()
+experiment_dir = os.path.join(current_dir, "logs", model_name)
+config_save_path = os.path.join(experiment_dir, "config.json")
+dataset_path = os.path.join(experiment_dir, "sliced_audios")
+
+with open(config_save_path, "r") as f:
+ config = json.load(f)
+config = HParams(**config)
+config.data.training_files = os.path.join(experiment_dir, "filelist.txt")
+
+torch.backends.cudnn.deterministic = False
+torch.backends.cudnn.benchmark = False
+
+global_step = 0
+last_loss_gen_all = 0
+overtrain_save_epoch = 0
+loss_gen_history = []
+smoothed_loss_gen_history = []
+loss_disc_history = []
+smoothed_loss_disc_history = []
+lowest_value = {"step": 0, "value": float("inf"), "epoch": 0}
+training_file_path = os.path.join(experiment_dir, "training_data.json")
+
+import logging
+
+logging.getLogger("torch").setLevel(logging.ERROR)
+
+
+class EpochRecorder:
+ """
+ Records the time elapsed per epoch.
+ """
+
+ def __init__(self):
+ self.last_time = ttime()
+
+ def record(self):
+ """
+ Records the elapsed time and returns a formatted string.
+ """
+ now_time = ttime()
+ elapsed_time = now_time - self.last_time
+ self.last_time = now_time
+ elapsed_time = round(elapsed_time, 1)
+ elapsed_time_str = str(datetime.timedelta(seconds=int(elapsed_time)))
+ current_time = datetime.datetime.now().strftime("%H:%M:%S")
+ return f"time={current_time} | training_speed={elapsed_time_str}"
+
+
+def verify_checkpoint_shapes(checkpoint_path, model):
+ checkpoint = torch.load(checkpoint_path, map_location="cpu")
+ checkpoint_state_dict = checkpoint["model"]
+ try:
+ if hasattr(model, "module"):
+ model_state_dict = model.module.load_state_dict(checkpoint_state_dict)
+ else:
+ model_state_dict = model.load_state_dict(checkpoint_state_dict)
+ except RuntimeError:
+ print(
+ "The parameters of the pretrain model such as the sample rate or architecture do not match the selected model."
+ )
+ sys.exit(1)
+ else:
+ del checkpoint
+ del checkpoint_state_dict
+ del model_state_dict
+
+
+def main():
+ """
+ Main function to start the training process.
+ """
+ global training_file_path, last_loss_gen_all, smoothed_loss_gen_history, loss_gen_history, loss_disc_history, smoothed_loss_disc_history, overtrain_save_epoch
+
+ os.environ["MASTER_ADDR"] = "localhost"
+ os.environ["MASTER_PORT"] = str(randint(20000, 55555))
+ # Check sample rate
+ wavs = glob.glob(
+ os.path.join(os.path.join(experiment_dir, "sliced_audios"), "*.wav")
+ )
+ if wavs:
+ _, sr = load_wav_to_torch(wavs[0])
+ if sr != sample_rate:
+ print(
+ f"Error: Pretrained model sample rate ({sample_rate} Hz) does not match dataset audio sample rate ({sr} Hz)."
+ )
+ os._exit(1)
+ else:
+ print("No wav file found.")
+
+ if torch.cuda.is_available():
+ device = torch.device("cuda")
+ n_gpus = torch.cuda.device_count()
+ elif torch.backends.mps.is_available():
+ device = torch.device("mps")
+ n_gpus = 1
+ else:
+ device = torch.device("cpu")
+ n_gpus = 1
+ print("Training with CPU, this will take a long time.")
+
+ def start():
+ """
+ Starts the training process with multi-GPU support or CPU.
+ """
+ children = []
+ pid_data = {"process_pids": []}
+ with open(config_save_path, "r") as pid_file:
+ try:
+ existing_data = json.load(pid_file)
+ pid_data.update(existing_data)
+ except json.JSONDecodeError:
+ pass
+ with open(config_save_path, "w") as pid_file:
+ for i in range(n_gpus):
+ subproc = mp.Process(
+ target=run,
+ args=(
+ i,
+ n_gpus,
+ experiment_dir,
+ pretrainG,
+ pretrainD,
+ pitch_guidance,
+ total_epoch,
+ save_every_weights,
+ config,
+ device,
+ ),
+ )
+ children.append(subproc)
+ subproc.start()
+ pid_data["process_pids"].append(subproc.pid)
+ json.dump(pid_data, pid_file, indent=4)
+
+ for i in range(n_gpus):
+ children[i].join()
+
+ def load_from_json(file_path):
+ """
+ Load data from a JSON file.
+
+ Args:
+ file_path (str): The path to the JSON file.
+ """
+ if os.path.exists(file_path):
+ with open(file_path, "r") as f:
+ data = json.load(f)
+ return (
+ data.get("loss_disc_history", []),
+ data.get("smoothed_loss_disc_history", []),
+ data.get("loss_gen_history", []),
+ data.get("smoothed_loss_gen_history", []),
+ )
+ return [], [], [], []
+
+ def continue_overtrain_detector(training_file_path):
+ """
+ Continues the overtrain detector by loading the training history from a JSON file.
+
+ Args:
+ training_file_path (str): The file path of the JSON file containing the training history.
+ """
+ if overtraining_detector:
+ if os.path.exists(training_file_path):
+ (
+ loss_disc_history,
+ smoothed_loss_disc_history,
+ loss_gen_history,
+ smoothed_loss_gen_history,
+ ) = load_from_json(training_file_path)
+
+ if cleanup:
+ print("Removing files from the prior training attempt...")
+
+ # Clean up unnecessary files
+ for root, dirs, files in os.walk(
+ os.path.join(now_dir, "logs", model_name), topdown=False
+ ):
+ for name in files:
+ file_path = os.path.join(root, name)
+ file_name, file_extension = os.path.splitext(name)
+ if (
+ file_extension == ".0"
+ or (file_name.startswith("D_") and file_extension == ".pth")
+ or (file_name.startswith("G_") and file_extension == ".pth")
+ or (file_name.startswith("added") and file_extension == ".index")
+ ):
+ os.remove(file_path)
+ for name in dirs:
+ if name == "eval":
+ folder_path = os.path.join(root, name)
+ for item in os.listdir(folder_path):
+ item_path = os.path.join(folder_path, item)
+ if os.path.isfile(item_path):
+ os.remove(item_path)
+ os.rmdir(folder_path)
+
+ print("Cleanup done!")
+
+ continue_overtrain_detector(training_file_path)
+ start()
+
+
+def run(
+ rank,
+ n_gpus,
+ experiment_dir,
+ pretrainG,
+ pretrainD,
+ pitch_guidance,
+ custom_total_epoch,
+ custom_save_every_weights,
+ config,
+ device,
+):
+ """
+ Runs the training loop on a specific GPU or CPU.
+
+ Args:
+ rank (int): The rank of the current process within the distributed training setup.
+ n_gpus (int): The total number of GPUs available for training.
+ experiment_dir (str): The directory where experiment logs and checkpoints will be saved.
+ pretrainG (str): Path to the pre-trained generator model.
+ pretrainD (str): Path to the pre-trained discriminator model.
+ pitch_guidance (bool): Flag indicating whether to use pitch guidance during training.
+ custom_total_epoch (int): The total number of epochs for training.
+ custom_save_every_weights (int): The interval (in epochs) at which to save model weights.
+ config (object): Configuration object containing training parameters.
+ device (torch.device): The device to use for training (CPU or GPU).
+ """
+ global global_step, smoothed_value_gen, smoothed_value_disc
+
+ smoothed_value_gen = 0
+ smoothed_value_disc = 0
+
+ if rank == 0:
+ writer = SummaryWriter(log_dir=experiment_dir)
+ writer_eval = SummaryWriter(log_dir=os.path.join(experiment_dir, "eval"))
+ else:
+ writer, writer_eval = None, None
+
+ dist.init_process_group(
+ backend="gloo",
+ init_method="env://",
+ world_size=n_gpus if device.type == "cuda" else 1,
+ rank=rank if device.type == "cuda" else 0,
+ )
+
+ torch.manual_seed(config.train.seed)
+
+ if torch.cuda.is_available():
+ torch.cuda.set_device(rank)
+
+ # Create datasets and dataloaders
+ from data_utils import (
+ DistributedBucketSampler,
+ TextAudioCollateMultiNSFsid,
+ TextAudioLoaderMultiNSFsid,
+ )
+
+ train_dataset = TextAudioLoaderMultiNSFsid(config.data)
+ collate_fn = TextAudioCollateMultiNSFsid()
+ train_sampler = DistributedBucketSampler(
+ train_dataset,
+ batch_size * n_gpus,
+ [100, 200, 300, 400, 500, 600, 700, 800, 900],
+ num_replicas=n_gpus,
+ rank=rank,
+ shuffle=True,
+ )
+
+ train_loader = DataLoader(
+ train_dataset,
+ num_workers=4,
+ shuffle=False,
+ pin_memory=True,
+ collate_fn=collate_fn,
+ batch_sampler=train_sampler,
+ persistent_workers=True,
+ prefetch_factor=8,
+ )
+
+ # Initialize models and optimizers
+ from rvc.lib.algorithm.discriminators import MultiPeriodDiscriminator
+ from rvc.lib.algorithm.discriminators import MultiPeriodDiscriminatorV2
+ from rvc.lib.algorithm.synthesizers import Synthesizer
+
+ net_g = Synthesizer(
+ config.data.filter_length // 2 + 1,
+ config.train.segment_size // config.data.hop_length,
+ **config.model,
+ use_f0=pitch_guidance == True, # converting 1/0 to True/False
+ is_half=config.train.fp16_run and device.type == "cuda",
+ sr=sample_rate,
+ ).to(device)
+
+ if version == "v1":
+ net_d = MultiPeriodDiscriminator(config.model.use_spectral_norm).to(device)
+ else:
+ net_d = MultiPeriodDiscriminatorV2(config.model.use_spectral_norm).to(device)
+
+ optim_g = torch.optim.AdamW(
+ net_g.parameters(),
+ config.train.learning_rate,
+ betas=config.train.betas,
+ eps=config.train.eps,
+ )
+ optim_d = torch.optim.AdamW(
+ net_d.parameters(),
+ config.train.learning_rate,
+ betas=config.train.betas,
+ eps=config.train.eps,
+ )
+
+ # Wrap models with DDP for multi-gpu processing
+ if n_gpus > 1 and device.type == "cuda":
+ net_g = DDP(net_g, device_ids=[rank])
+ net_d = DDP(net_d, device_ids=[rank])
+
+ # Load checkpoint if available
+ try:
+ print("Starting training...")
+ _, _, _, epoch_str = load_checkpoint(
+ latest_checkpoint_path(experiment_dir, "D_*.pth"), net_d, optim_d
+ )
+ _, _, _, epoch_str = load_checkpoint(
+ latest_checkpoint_path(experiment_dir, "G_*.pth"), net_g, optim_g
+ )
+ epoch_str += 1
+ global_step = (epoch_str - 1) * len(train_loader)
+
+ except:
+ epoch_str = 1
+ global_step = 0
+ if pretrainG != "":
+ if rank == 0:
+ verify_checkpoint_shapes(pretrainG, net_g)
+ print(f"Loaded pretrained (G) '{pretrainG}'")
+ if hasattr(net_g, "module"):
+ net_g.module.load_state_dict(
+ torch.load(pretrainG, map_location="cpu")["model"]
+ )
+ else:
+ net_g.load_state_dict(
+ torch.load(pretrainG, map_location="cpu")["model"]
+ )
+
+ if pretrainD != "":
+ if rank == 0:
+ print(f"Loaded pretrained (D) '{pretrainD}'")
+ if hasattr(net_d, "module"):
+ net_d.module.load_state_dict(
+ torch.load(pretrainD, map_location="cpu")["model"]
+ )
+ else:
+ net_d.load_state_dict(
+ torch.load(pretrainD, map_location="cpu")["model"]
+ )
+
+ # Initialize schedulers and scaler
+ scheduler_g = torch.optim.lr_scheduler.ExponentialLR(
+ optim_g, gamma=config.train.lr_decay, last_epoch=epoch_str - 2
+ )
+ scheduler_d = torch.optim.lr_scheduler.ExponentialLR(
+ optim_d, gamma=config.train.lr_decay, last_epoch=epoch_str - 2
+ )
+
+ scaler = GradScaler(enabled=config.train.fp16_run and device.type == "cuda")
+
+ cache = []
+ # get the first sample as reference for tensorboard evaluation
+ # custom reference temporarily disabled
+ if True == False and os.path.isfile(
+ os.path.join("logs", "reference", f"ref{sample_rate}.wav")
+ ):
+ import numpy as np
+
+ phone = np.load(
+ os.path.join("logs", "reference", f"ref{sample_rate}_feats.npy")
+ )
+ # expanding x2 to match pitch size
+ phone = np.repeat(phone, 2, axis=0)
+ phone = torch.FloatTensor(phone).unsqueeze(0).to(device)
+ phone_lengths = torch.LongTensor(phone.size(0)).to(device)
+ pitch = np.load(os.path.join("logs", "reference", f"ref{sample_rate}_f0c.npy"))
+ # removed last frame to match features
+ pitch = torch.LongTensor(pitch[:-1]).unsqueeze(0).to(device)
+ pitchf = np.load(os.path.join("logs", "reference", f"ref{sample_rate}_f0f.npy"))
+ # removed last frame to match features
+ pitchf = torch.FloatTensor(pitchf[:-1]).unsqueeze(0).to(device)
+ sid = torch.LongTensor([0]).to(device)
+ reference = (
+ phone,
+ phone_lengths,
+ pitch if pitch_guidance else None,
+ pitchf if pitch_guidance else None,
+ sid,
+ )
+ else:
+ for info in train_loader:
+ phone, phone_lengths, pitch, pitchf, _, _, _, _, sid = info
+ reference = (
+ phone.to(device),
+ phone_lengths.to(device),
+ pitch.to(device) if pitch_guidance else None,
+ pitchf.to(device) if pitch_guidance else None,
+ sid.to(device),
+ )
+ break
+
+ for epoch in range(epoch_str, total_epoch + 1):
+ train_and_evaluate(
+ rank,
+ epoch,
+ config,
+ [net_g, net_d],
+ [optim_g, optim_d],
+ scaler,
+ [train_loader, None],
+ [writer, writer_eval],
+ cache,
+ custom_save_every_weights,
+ custom_total_epoch,
+ device,
+ reference,
+ )
+
+ scheduler_g.step()
+ scheduler_d.step()
+
+
+def train_and_evaluate(
+ rank,
+ epoch,
+ hps,
+ nets,
+ optims,
+ scaler,
+ loaders,
+ writers,
+ cache,
+ custom_save_every_weights,
+ custom_total_epoch,
+ device,
+ reference,
+):
+ """
+ Trains and evaluates the model for one epoch.
+
+ Args:
+ rank (int): Rank of the current process.
+ epoch (int): Current epoch number.
+ hps (Namespace): Hyperparameters.
+ nets (list): List of models [net_g, net_d].
+ optims (list): List of optimizers [optim_g, optim_d].
+ scaler (GradScaler): Gradient scaler for mixed precision training.
+ loaders (list): List of dataloaders [train_loader, eval_loader].
+ writers (list): List of TensorBoard writers [writer, writer_eval].
+ cache (list): List to cache data in GPU memory.
+ use_cpu (bool): Whether to use CPU for training.
+ """
+ global global_step, lowest_value, loss_disc, consecutive_increases_gen, consecutive_increases_disc, smoothed_value_gen, smoothed_value_disc
+
+ if epoch == 1:
+ lowest_value = {"step": 0, "value": float("inf"), "epoch": 0}
+ last_loss_gen_all = 0.0
+ consecutive_increases_gen = 0
+ consecutive_increases_disc = 0
+
+ net_g, net_d = nets
+ optim_g, optim_d = optims
+ train_loader = loaders[0] if loaders is not None else None
+ if writers is not None:
+ writer = writers[0]
+
+ train_loader.batch_sampler.set_epoch(epoch)
+
+ net_g.train()
+ net_d.train()
+
+ # Data caching
+ if device.type == "cuda" and cache_data_in_gpu:
+ data_iterator = cache
+ if cache == []:
+ for batch_idx, info in enumerate(train_loader):
+ # phone, phone_lengths, pitch, pitchf, spec, spec_lengths, wave, wave_lengths, sid
+ info = [tensor.cuda(rank, non_blocking=True) for tensor in info]
+ cache.append((batch_idx, info))
+ else:
+ shuffle(cache)
+ else:
+ data_iterator = enumerate(train_loader)
+
+ epoch_recorder = EpochRecorder()
+ with tqdm(total=len(train_loader), leave=False) as pbar:
+ for batch_idx, info in data_iterator:
+ if device.type == "cuda" and not cache_data_in_gpu:
+ info = [tensor.cuda(rank, non_blocking=True) for tensor in info]
+ elif device.type != "cuda":
+ info = [tensor.to(device) for tensor in info]
+ # else iterator is going thru a cached list with a device already assigned
+
+ (
+ phone,
+ phone_lengths,
+ pitch,
+ pitchf,
+ spec,
+ spec_lengths,
+ wave,
+ wave_lengths,
+ sid,
+ ) = info
+ pitch = pitch if pitch_guidance else None
+ pitchf = pitchf if pitch_guidance else None
+
+ # Forward pass
+ use_amp = config.train.fp16_run and device.type == "cuda"
+ with autocast(enabled=use_amp):
+ model_output = net_g(
+ phone, phone_lengths, pitch, pitchf, spec, spec_lengths, sid
+ )
+ y_hat, ids_slice, x_mask, z_mask, (z, z_p, m_p, logs_p, m_q, logs_q) = (
+ model_output
+ )
+ # used for tensorboard chart - all/mel
+ mel = spec_to_mel_torch(
+ spec,
+ config.data.filter_length,
+ config.data.n_mel_channels,
+ config.data.sample_rate,
+ config.data.mel_fmin,
+ config.data.mel_fmax,
+ )
+ # used for tensorboard chart - slice/mel_org
+ y_mel = commons.slice_segments(
+ mel,
+ ids_slice,
+ config.train.segment_size // config.data.hop_length,
+ dim=3,
+ )
+ # used for tensorboard chart - slice/mel_gen
+ with autocast(enabled=False):
+ y_hat_mel = mel_spectrogram_torch(
+ y_hat.float().squeeze(1),
+ config.data.filter_length,
+ config.data.n_mel_channels,
+ config.data.sample_rate,
+ config.data.hop_length,
+ config.data.win_length,
+ config.data.mel_fmin,
+ config.data.mel_fmax,
+ )
+ if use_amp:
+ y_hat_mel = y_hat_mel.half()
+ # slice of the original waveform to match a generate slice
+ wave = commons.slice_segments(
+ wave,
+ ids_slice * config.data.hop_length,
+ config.train.segment_size,
+ dim=3,
+ )
+ y_d_hat_r, y_d_hat_g, _, _ = net_d(wave, y_hat.detach())
+ with autocast(enabled=False):
+ loss_disc, losses_disc_r, losses_disc_g = discriminator_loss(
+ y_d_hat_r, y_d_hat_g
+ )
+ # Discriminator backward and update
+ optim_d.zero_grad()
+ scaler.scale(loss_disc).backward()
+ scaler.unscale_(optim_d)
+ grad_norm_d = commons.clip_grad_value(net_d.parameters(), None)
+ scaler.step(optim_d)
+
+ # Generator backward and update
+ with autocast(enabled=use_amp):
+ y_d_hat_r, y_d_hat_g, fmap_r, fmap_g = net_d(wave, y_hat)
+ with autocast(enabled=False):
+ loss_mel = F.l1_loss(y_mel, y_hat_mel) * config.train.c_mel
+ loss_kl = (
+ kl_loss(z_p, logs_q, m_p, logs_p, z_mask) * config.train.c_kl
+ )
+ loss_fm = feature_loss(fmap_r, fmap_g)
+ loss_gen, losses_gen = generator_loss(y_d_hat_g)
+ loss_gen_all = loss_gen + loss_fm + loss_mel + loss_kl
+
+ if loss_gen_all < lowest_value["value"]:
+ lowest_value["value"] = loss_gen_all
+ lowest_value["step"] = global_step
+ lowest_value["epoch"] = epoch
+ # print(f'Lowest generator loss updated: {lowest_value["value"]} at epoch {epoch}, step {global_step}')
+ if epoch > lowest_value["epoch"]:
+ print(
+ "Alert: The lower generating loss has been exceeded by a lower loss in a subsequent epoch."
+ )
+
+ optim_g.zero_grad()
+ scaler.scale(loss_gen_all).backward()
+ scaler.unscale_(optim_g)
+ grad_norm_g = commons.clip_grad_value(net_g.parameters(), None)
+ scaler.step(optim_g)
+ scaler.update()
+
+ global_step += 1
+ pbar.update(1)
+
+ # Logging and checkpointing
+ if rank == 0:
+ lr = optim_g.param_groups[0]["lr"]
+ if loss_mel > 75:
+ loss_mel = 75
+ if loss_kl > 9:
+ loss_kl = 9
+ scalar_dict = {
+ "loss/g/total": loss_gen_all,
+ "loss/d/total": loss_disc,
+ "learning_rate": lr,
+ "grad/norm_d": grad_norm_d,
+ "grad/norm_g": grad_norm_g,
+ "loss/g/fm": loss_fm,
+ "loss/g/mel": loss_mel,
+ "loss/g/kl": loss_kl,
+ }
+ # commented out
+ # scalar_dict.update({f"loss/g/{i}": v for i, v in enumerate(losses_gen)})
+ # scalar_dict.update({f"loss/d_r/{i}": v for i, v in enumerate(losses_disc_r)})
+ # scalar_dict.update({f"loss/d_g/{i}": v for i, v in enumerate(losses_disc_g)})
+
+ image_dict = {
+ "slice/mel_org": plot_spectrogram_to_numpy(y_mel[0].data.cpu().numpy()),
+ "slice/mel_gen": plot_spectrogram_to_numpy(y_hat_mel[0].data.cpu().numpy()),
+ "all/mel": plot_spectrogram_to_numpy(mel[0].data.cpu().numpy()),
+ }
+
+ with torch.no_grad():
+ if hasattr(net_g, "module"):
+ o, *_ = net_g.module.infer(*reference)
+ else:
+ o, *_ = net_g.infer(*reference)
+ audio_dict = {f"gen/audio_{global_step:07d}": o[0, :, :]}
+
+ summarize(
+ writer=writer,
+ global_step=global_step,
+ images=image_dict,
+ scalars=scalar_dict,
+ audios=audio_dict,
+ audio_sample_rate=config.data.sample_rate,
+ )
+
+ # Save checkpoint
+ model_add = []
+ model_del = []
+ done = False
+
+ if rank == 0:
+ # Save weights every N epochs
+ if epoch % save_every_epoch == 0:
+ checkpoint_suffix = f"{2333333 if save_only_latest else global_step}.pth"
+ save_checkpoint(
+ net_g,
+ optim_g,
+ config.train.learning_rate,
+ epoch,
+ os.path.join(experiment_dir, "G_" + checkpoint_suffix),
+ )
+ save_checkpoint(
+ net_d,
+ optim_d,
+ config.train.learning_rate,
+ epoch,
+ os.path.join(experiment_dir, "D_" + checkpoint_suffix),
+ )
+ if custom_save_every_weights:
+ model_add.append(
+ os.path.join(
+ experiment_dir, f"{model_name}_{epoch}e_{global_step}s.pth"
+ )
+ )
+ overtrain_info = ""
+ # Check overtraining
+ if overtraining_detector and rank == 0 and epoch > 1:
+ # Add the current loss to the history
+ current_loss_disc = float(loss_disc)
+ loss_disc_history.append(current_loss_disc)
+ # Update smoothed loss history with loss_disc
+ smoothed_value_disc = update_exponential_moving_average(
+ smoothed_loss_disc_history, current_loss_disc
+ )
+ # Check overtraining with smoothed loss_disc
+ is_overtraining_disc = check_overtraining(
+ smoothed_loss_disc_history, overtraining_threshold * 2
+ )
+ if is_overtraining_disc:
+ consecutive_increases_disc += 1
+ else:
+ consecutive_increases_disc = 0
+ # Add the current loss_gen to the history
+ current_loss_gen = float(lowest_value["value"])
+ loss_gen_history.append(current_loss_gen)
+ # Update the smoothed loss_gen history
+ smoothed_value_gen = update_exponential_moving_average(
+ smoothed_loss_gen_history, current_loss_gen
+ )
+ # Check for overtraining with the smoothed loss_gen
+ is_overtraining_gen = check_overtraining(
+ smoothed_loss_gen_history, overtraining_threshold, 0.01
+ )
+ if is_overtraining_gen:
+ consecutive_increases_gen += 1
+ else:
+ consecutive_increases_gen = 0
+ overtrain_info = f"Smoothed loss_g {smoothed_value_gen:.3f} and loss_d {smoothed_value_disc:.3f}"
+ # Save the data in the JSON file if the epoch is divisible by save_every_epoch
+ if epoch % save_every_epoch == 0:
+ save_to_json(
+ training_file_path,
+ loss_disc_history,
+ smoothed_loss_disc_history,
+ loss_gen_history,
+ smoothed_loss_gen_history,
+ )
+
+ if (
+ is_overtraining_gen
+ and consecutive_increases_gen == overtraining_threshold
+ or is_overtraining_disc
+ and consecutive_increases_disc == overtraining_threshold * 2
+ ):
+ print(
+ f"Overtraining detected at epoch {epoch} with smoothed loss_g {smoothed_value_gen:.3f} and loss_d {smoothed_value_disc:.3f}"
+ )
+ done = True
+ else:
+ print(
+ f"New best epoch {epoch} with smoothed loss_g {smoothed_value_gen:.3f} and loss_d {smoothed_value_disc:.3f}"
+ )
+ old_model_files = glob.glob(
+ os.path.join(experiment_dir, f"{model_name}_*e_*s_best_epoch.pth")
+ )
+ for file in old_model_files:
+ model_del.append(file)
+ model_add.append(
+ os.path.join(
+ experiment_dir,
+ f"{model_name}_{epoch}e_{global_step}s_best_epoch.pth",
+ )
+ )
+
+ # Check completion
+ if epoch >= custom_total_epoch:
+ lowest_value_rounded = float(lowest_value["value"])
+ lowest_value_rounded = round(lowest_value_rounded, 3)
+ print(
+ f"Training has been successfully completed with {epoch} epoch, {global_step} steps and {round(loss_gen_all.item(), 3)} loss gen."
+ )
+ print(
+ f"Lowest generator loss: {lowest_value_rounded} at epoch {lowest_value['epoch']}, step {lowest_value['step']}"
+ )
+
+ pid_file_path = os.path.join(experiment_dir, "config.json")
+ with open(pid_file_path, "r") as pid_file:
+ pid_data = json.load(pid_file)
+ with open(pid_file_path, "w") as pid_file:
+ pid_data.pop("process_pids", None)
+ json.dump(pid_data, pid_file, indent=4)
+ # Final model
+ model_add.append(
+ os.path.join(
+ experiment_dir, f"{model_name}_{epoch}e_{global_step}s.pth"
+ )
+ )
+ done = True
+
+ if model_add:
+ ckpt = (
+ net_g.module.state_dict()
+ if hasattr(net_g, "module")
+ else net_g.state_dict()
+ )
+ for m in model_add:
+ if not os.path.exists(m):
+ extract_model(
+ ckpt=ckpt,
+ sr=sample_rate,
+ pitch_guidance=pitch_guidance
+ == True, # converting 1/0 to True/False,
+ name=model_name,
+ model_dir=m,
+ epoch=epoch,
+ step=global_step,
+ version=version,
+ hps=hps,
+ overtrain_info=overtrain_info,
+ )
+ # Clean-up old best epochs
+ for m in model_del:
+ os.remove(m)
+
+ # Print training progress
+ lowest_value_rounded = float(lowest_value["value"])
+ lowest_value_rounded = round(lowest_value_rounded, 3)
+
+ record = f"{model_name} | epoch={epoch} | step={global_step} | {epoch_recorder.record()}"
+ if epoch > 1:
+ record = (
+ record
+ + f" | lowest_value={lowest_value_rounded} (epoch {lowest_value['epoch']} and step {lowest_value['step']})"
+ )
+
+ if overtraining_detector:
+ remaining_epochs_gen = overtraining_threshold - consecutive_increases_gen
+ remaining_epochs_disc = (
+ overtraining_threshold * 2 - consecutive_increases_disc
+ )
+ record = (
+ record
+ + f" | Number of epochs remaining for overtraining: g/total: {remaining_epochs_gen} d/total: {remaining_epochs_disc} | smoothed_loss_gen={smoothed_value_gen:.3f} | smoothed_loss_disc={smoothed_value_disc:.3f}"
+ )
+ print(record)
+ last_loss_gen_all = loss_gen_all
+
+ if done:
+ os._exit(2333333)
+
+
+def check_overtraining(smoothed_loss_history, threshold, epsilon=0.004):
+ """
+ Checks for overtraining based on the smoothed loss history.
+
+ Args:
+ smoothed_loss_history (list): List of smoothed losses for each epoch.
+ threshold (int): Number of consecutive epochs with insignificant changes or increases to consider overtraining.
+ epsilon (float): The maximum change considered insignificant.
+ """
+ if len(smoothed_loss_history) < threshold + 1:
+ return False
+
+ for i in range(-threshold, -1):
+ if smoothed_loss_history[i + 1] > smoothed_loss_history[i]:
+ return True
+ if abs(smoothed_loss_history[i + 1] - smoothed_loss_history[i]) >= epsilon:
+ return False
+ return True
+
+
+def update_exponential_moving_average(
+ smoothed_loss_history, new_value, smoothing=0.987
+):
+ """
+ Updates the exponential moving average with a new value.
+
+ Args:
+ smoothed_loss_history (list): List of smoothed values.
+ new_value (float): New value to be added.
+ smoothing (float): Smoothing factor.
+ """
+ if smoothed_loss_history:
+ smoothed_value = (
+ smoothing * smoothed_loss_history[-1] + (1 - smoothing) * new_value
+ )
+ else:
+ smoothed_value = new_value
+ smoothed_loss_history.append(smoothed_value)
+ return smoothed_value
+
+
+def save_to_json(
+ file_path,
+ loss_disc_history,
+ smoothed_loss_disc_history,
+ loss_gen_history,
+ smoothed_loss_gen_history,
+):
+ """
+ Save the training history to a JSON file.
+ """
+ data = {
+ "loss_disc_history": loss_disc_history,
+ "smoothed_loss_disc_history": smoothed_loss_disc_history,
+ "loss_gen_history": loss_gen_history,
+ "smoothed_loss_gen_history": smoothed_loss_gen_history,
+ }
+ with open(file_path, "w") as f:
+ json.dump(data, f)
+
+
+if __name__ == "__main__":
+ torch.multiprocessing.set_start_method("spawn")
+ main()
diff --git a/rvc/train/utils.py b/rvc/train/utils.py
new file mode 100644
index 0000000000000000000000000000000000000000..cd4051630a5e8597156a67a42ff6ab9576504bdc
--- /dev/null
+++ b/rvc/train/utils.py
@@ -0,0 +1,248 @@
+import os
+import glob
+import torch
+import numpy as np
+from scipy.io.wavfile import read
+from collections import OrderedDict
+import matplotlib.pyplot as plt
+
+MATPLOTLIB_FLAG = False
+
+
+def replace_keys_in_dict(d, old_key_part, new_key_part):
+ """
+ Recursively replace parts of the keys in a dictionary.
+
+ Args:
+ d (dict or OrderedDict): The dictionary to update.
+ old_key_part (str): The part of the key to replace.
+ new_key_part (str): The new part of the key.
+ """
+ updated_dict = OrderedDict() if isinstance(d, OrderedDict) else {}
+ for key, value in d.items():
+ new_key = (
+ key.replace(old_key_part, new_key_part) if isinstance(key, str) else key
+ )
+ updated_dict[new_key] = (
+ replace_keys_in_dict(value, old_key_part, new_key_part)
+ if isinstance(value, dict)
+ else value
+ )
+ return updated_dict
+
+
+def load_checkpoint(checkpoint_path, model, optimizer=None, load_opt=1):
+ """
+ Load a checkpoint into a model and optionally the optimizer.
+
+ Args:
+ checkpoint_path (str): Path to the checkpoint file.
+ model (torch.nn.Module): The model to load the checkpoint into.
+ optimizer (torch.optim.Optimizer, optional): The optimizer to load the state from. Defaults to None.
+ load_opt (int, optional): Whether to load the optimizer state. Defaults to 1.
+ """
+ assert os.path.isfile(
+ checkpoint_path
+ ), f"Checkpoint file not found: {checkpoint_path}"
+
+ checkpoint_dict = torch.load(checkpoint_path, map_location="cpu")
+ checkpoint_dict = replace_keys_in_dict(
+ replace_keys_in_dict(
+ checkpoint_dict, ".weight_v", ".parametrizations.weight.original1"
+ ),
+ ".weight_g",
+ ".parametrizations.weight.original0",
+ )
+
+ # Update model state_dict
+ model_state_dict = (
+ model.module.state_dict() if hasattr(model, "module") else model.state_dict()
+ )
+ new_state_dict = {
+ k: checkpoint_dict["model"].get(k, v) for k, v in model_state_dict.items()
+ }
+
+ # Load state_dict into model
+ if hasattr(model, "module"):
+ model.module.load_state_dict(new_state_dict, strict=False)
+ else:
+ model.load_state_dict(new_state_dict, strict=False)
+
+ if optimizer and load_opt == 1:
+ optimizer.load_state_dict(checkpoint_dict.get("optimizer", {}))
+
+ print(
+ f"Loaded checkpoint '{checkpoint_path}' (epoch {checkpoint_dict['iteration']})"
+ )
+ return (
+ model,
+ optimizer,
+ checkpoint_dict.get("learning_rate", 0),
+ checkpoint_dict["iteration"],
+ )
+
+
+def save_checkpoint(model, optimizer, learning_rate, iteration, checkpoint_path):
+ """
+ Save the model and optimizer state to a checkpoint file.
+
+ Args:
+ model (torch.nn.Module): The model to save.
+ optimizer (torch.optim.Optimizer): The optimizer to save the state of.
+ learning_rate (float): The current learning rate.
+ iteration (int): The current iteration.
+ checkpoint_path (str): The path to save the checkpoint to.
+ """
+ state_dict = (
+ model.module.state_dict() if hasattr(model, "module") else model.state_dict()
+ )
+ checkpoint_data = {
+ "model": state_dict,
+ "iteration": iteration,
+ "optimizer": optimizer.state_dict(),
+ "learning_rate": learning_rate,
+ }
+ torch.save(checkpoint_data, checkpoint_path)
+
+ # Create a backwards-compatible checkpoint
+ old_version_path = checkpoint_path.replace(".pth", "_old_version.pth")
+ checkpoint_data = replace_keys_in_dict(
+ replace_keys_in_dict(
+ checkpoint_data, ".parametrizations.weight.original1", ".weight_v"
+ ),
+ ".parametrizations.weight.original0",
+ ".weight_g",
+ )
+ torch.save(checkpoint_data, old_version_path)
+
+ os.replace(old_version_path, checkpoint_path)
+ print(f"Saved model '{checkpoint_path}' (epoch {iteration})")
+
+
+def summarize(
+ writer,
+ global_step,
+ scalars={},
+ histograms={},
+ images={},
+ audios={},
+ audio_sample_rate=22050,
+):
+ """
+ Log various summaries to a TensorBoard writer.
+
+ Args:
+ writer (SummaryWriter): The TensorBoard writer.
+ global_step (int): The current global step.
+ scalars (dict, optional): Dictionary of scalar values to log.
+ histograms (dict, optional): Dictionary of histogram values to log.
+ images (dict, optional): Dictionary of image values to log.
+ audios (dict, optional): Dictionary of audio values to log.
+ audio_sample_rate (int, optional): Sampling rate of the audio data.
+ """
+ for k, v in scalars.items():
+ writer.add_scalar(k, v, global_step)
+ for k, v in histograms.items():
+ writer.add_histogram(k, v, global_step)
+ for k, v in images.items():
+ writer.add_image(k, v, global_step, dataformats="HWC")
+ for k, v in audios.items():
+ writer.add_audio(k, v, global_step, audio_sample_rate)
+
+
+def latest_checkpoint_path(dir_path, regex="G_*.pth"):
+ """
+ Get the latest checkpoint file in a directory.
+
+ Args:
+ dir_path (str): The directory to search for checkpoints.
+ regex (str, optional): The regular expression to match checkpoint files.
+ """
+ checkpoints = sorted(
+ glob.glob(os.path.join(dir_path, regex)),
+ key=lambda f: int("".join(filter(str.isdigit, f))),
+ )
+ return checkpoints[-1] if checkpoints else None
+
+
+def plot_spectrogram_to_numpy(spectrogram):
+ """
+ Convert a spectrogram to a NumPy array for visualization.
+
+ Args:
+ spectrogram (numpy.ndarray): The spectrogram to plot.
+ """
+ global MATPLOTLIB_FLAG
+ if not MATPLOTLIB_FLAG:
+ plt.switch_backend("Agg")
+ MATPLOTLIB_FLAG = True
+
+ fig, ax = plt.subplots(figsize=(10, 2))
+ im = ax.imshow(spectrogram, aspect="auto", origin="lower", interpolation="none")
+ plt.colorbar(im, ax=ax)
+ plt.xlabel("Frames")
+ plt.ylabel("Channels")
+ plt.tight_layout()
+
+ fig.canvas.draw()
+ data = np.frombuffer(fig.canvas.tostring_rgb(), dtype=np.uint8)
+ data = data.reshape(fig.canvas.get_width_height()[::-1] + (3,))
+ plt.close(fig)
+ return data
+
+
+def load_wav_to_torch(full_path):
+ """
+ Load a WAV file into a PyTorch tensor.
+
+ Args:
+ full_path (str): The path to the WAV file.
+ """
+ sample_rate, data = read(full_path)
+ return torch.FloatTensor(data.astype(np.float32)), sample_rate
+
+
+def load_filepaths_and_text(filename, split="|"):
+ """
+ Load filepaths and associated text from a file.
+
+ Args:
+ filename (str): The path to the file.
+ split (str, optional): The delimiter used to split the lines.
+ """
+ with open(filename, encoding="utf-8") as f:
+ return [line.strip().split(split) for line in f]
+
+
+class HParams:
+ """
+ A class for storing and accessing hyperparameters.
+ """
+
+ def __init__(self, **kwargs):
+ for k, v in kwargs.items():
+ self[k] = HParams(**v) if isinstance(v, dict) else v
+
+ def keys(self):
+ return self.__dict__.keys()
+
+ def items(self):
+ return self.__dict__.items()
+
+ def values(self):
+ return self.__dict__.values()
+
+ def __len__(self):
+ return len(self.__dict__)
+
+ def __getitem__(self, key):
+ return self.__dict__[key]
+
+ def __setitem__(self, key, value):
+ self.__dict__[key] = value
+
+ def __contains__(self, key):
+ return key in self.__dict__
+
+ def __repr__(self):
+ return repr(self.__dict__)
diff --git a/tabs/download/download.py b/tabs/download/download.py
new file mode 100644
index 0000000000000000000000000000000000000000..fe9d5c32210230a3835261f5050b1a79ef075482
--- /dev/null
+++ b/tabs/download/download.py
@@ -0,0 +1,263 @@
+import os
+import sys
+import json
+import shutil
+import requests
+import tempfile
+import gradio as gr
+import pandas as pd
+
+from concurrent.futures import ThreadPoolExecutor
+from tqdm import tqdm
+
+
+now_dir = os.getcwd()
+sys.path.append(now_dir)
+
+from core import run_download_script
+from rvc.lib.utils import format_title
+
+from assets.i18n.i18n import I18nAuto
+
+i18n = I18nAuto()
+
+gradio_temp_dir = os.path.join(tempfile.gettempdir(), "gradio")
+
+if os.path.exists(gradio_temp_dir):
+ shutil.rmtree(gradio_temp_dir)
+
+
+def save_drop_model(dropbox):
+ if "pth" not in dropbox and "index" not in dropbox:
+ raise gr.Error(
+ message="The file you dropped is not a valid model file. Please try again."
+ )
+ else:
+ file_name = format_title(os.path.basename(dropbox))
+ if ".pth" in dropbox:
+ model_name = format_title(file_name.split(".pth")[0])
+ else:
+ if "v2" not in dropbox:
+ model_name = format_title(
+ file_name.split("_nprobe_1_")[1].split("_v1")[0]
+ )
+ else:
+ model_name = format_title(
+ file_name.split("_nprobe_1_")[1].split("_v2")[0]
+ )
+ model_path = os.path.join(now_dir, "logs", model_name)
+ if not os.path.exists(model_path):
+ os.makedirs(model_path)
+ if os.path.exists(os.path.join(model_path, file_name)):
+ os.remove(os.path.join(model_path, file_name))
+ shutil.move(dropbox, os.path.join(model_path, file_name))
+ print(f"{file_name} saved in {model_path}")
+ gr.Info(f"{file_name} saved in {model_path}")
+ return None
+
+
+def search_models(name):
+ url = f"https://cjtfqzjfdimgpvpwhzlv.supabase.co/rest/v1/models?name=ilike.%25{name}%25&order=created_at.desc&limit=15"
+ headers = {
+ "apikey": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImNqdGZxempmZGltZ3B2cHdoemx2Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3MjY5MjYxMzQsImV4cCI6MjA0MjUwMjEzNH0.OyDXlhvH6D-IsHiWhPAGUtsPGGUvWQynfxUeQwfYToE"
+ }
+ response = requests.get(url, headers=headers)
+ data = response.json()
+ if len(data) == 0:
+ gr.Info(i18n("We couldn't find models by that name."))
+ return None
+ else:
+ df = pd.DataFrame(data)[["name", "link", "epochs", "type"]]
+ df["link"] = df["link"].apply(
+ lambda x: f'{x}'
+ )
+ return df
+
+
+json_url = "https://huggingface.co/IAHispano/Applio/raw/main/pretrains.json"
+
+
+def fetch_pretrained_data():
+ pretraineds_custom_path = os.path.join(
+ "rvc", "models", "pretraineds", "pretraineds_custom"
+ )
+ os.makedirs(pretraineds_custom_path, exist_ok=True)
+ try:
+ with open(
+ os.path.join(pretraineds_custom_path, json_url.split("/")[-1]), "r"
+ ) as f:
+ data = json.load(f)
+ except:
+ try:
+ response = requests.get(json_url)
+ response.raise_for_status()
+ data = response.json()
+ with open(
+ os.path.join(pretraineds_custom_path, json_url.split("/")[-1]),
+ "w",
+ encoding="utf-8",
+ ) as f:
+ json.dump(
+ data,
+ f,
+ indent=2,
+ separators=(",", ": "),
+ ensure_ascii=False,
+ )
+ except:
+ data = {
+ "Titan": {
+ "32k": {"D": "null", "G": "null"},
+ },
+ }
+ return data
+
+
+def get_pretrained_list():
+ data = fetch_pretrained_data()
+ return list(data.keys())
+
+
+def get_pretrained_sample_rates(model):
+ data = fetch_pretrained_data()
+ return list(data[model].keys())
+
+
+def get_file_size(url):
+ response = requests.head(url)
+ return int(response.headers.get("content-length", 0))
+
+
+def download_file(url, destination_path, progress_bar):
+ os.makedirs(os.path.dirname(destination_path), exist_ok=True)
+ response = requests.get(url, stream=True)
+ block_size = 1024
+ with open(destination_path, "wb") as file:
+ for data in response.iter_content(block_size):
+ file.write(data)
+ progress_bar.update(len(data))
+
+
+def download_pretrained_model(model, sample_rate):
+ data = fetch_pretrained_data()
+ paths = data[model][sample_rate]
+ pretraineds_custom_path = os.path.join(
+ "rvc", "models", "pretraineds", "pretraineds_custom"
+ )
+ os.makedirs(pretraineds_custom_path, exist_ok=True)
+
+ d_url = f"https://huggingface.co/{paths['D']}"
+ g_url = f"https://huggingface.co/{paths['G']}"
+
+ total_size = get_file_size(d_url) + get_file_size(g_url)
+
+ gr.Info("Downloading pretrained model...")
+
+ with tqdm(
+ total=total_size, unit="iB", unit_scale=True, desc="Downloading files"
+ ) as progress_bar:
+ with ThreadPoolExecutor(max_workers=2) as executor:
+ futures = [
+ executor.submit(
+ download_file,
+ d_url,
+ os.path.join(pretraineds_custom_path, os.path.basename(paths["D"])),
+ progress_bar,
+ ),
+ executor.submit(
+ download_file,
+ g_url,
+ os.path.join(pretraineds_custom_path, os.path.basename(paths["G"])),
+ progress_bar,
+ ),
+ ]
+ for future in futures:
+ future.result()
+
+ gr.Info("Pretrained model downloaded successfully!")
+ print("Pretrained model downloaded successfully!")
+
+
+def update_sample_rate_dropdown(model):
+ return {
+ "choices": get_pretrained_sample_rates(model),
+ "value": get_pretrained_sample_rates(model)[0],
+ "__type__": "update",
+ }
+
+
+def download_tab():
+ with gr.Column():
+ gr.Markdown(value=i18n("## Download Model"))
+ model_link = gr.Textbox(
+ label=i18n("Model Link"),
+ placeholder=i18n("Introduce the model link"),
+ interactive=True,
+ )
+ model_download_output_info = gr.Textbox(
+ label=i18n("Output Information"),
+ info=i18n("The output information will be displayed here."),
+ value="",
+ max_lines=8,
+ interactive=False,
+ )
+ model_download_button = gr.Button(i18n("Download Model"))
+ model_download_button.click(
+ fn=run_download_script,
+ inputs=[model_link],
+ outputs=[model_download_output_info],
+ )
+ gr.Markdown(value=i18n("## Drop files"))
+ dropbox = gr.File(
+ label=i18n(
+ "Drag your .pth file and .index file into this space. Drag one and then the other."
+ ),
+ type="filepath",
+ )
+
+ dropbox.upload(
+ fn=save_drop_model,
+ inputs=[dropbox],
+ outputs=[dropbox],
+ )
+ gr.Markdown(value=i18n("## Search Model"))
+ search_name = gr.Textbox(
+ label=i18n("Model Name"),
+ placeholder=i18n("Introduce the model name to search."),
+ interactive=True,
+ )
+ search_table = gr.Dataframe(datatype="markdown")
+ search = gr.Button(i18n("Search"))
+ search.click(
+ fn=search_models,
+ inputs=[search_name],
+ outputs=[search_table],
+ )
+ search_name.submit(search_models, [search_name], search_table)
+ gr.Markdown(value=i18n("## Download Pretrained Models"))
+ pretrained_model = gr.Dropdown(
+ label=i18n("Pretrained"),
+ info=i18n("Select the pretrained model you want to download."),
+ choices=get_pretrained_list(),
+ value="Titan",
+ interactive=True,
+ )
+ pretrained_sample_rate = gr.Dropdown(
+ label=i18n("Sampling Rate"),
+ info=i18n("And select the sampling rate."),
+ choices=get_pretrained_sample_rates(pretrained_model.value),
+ value="40k",
+ interactive=True,
+ allow_custom_value=True,
+ )
+ pretrained_model.change(
+ update_sample_rate_dropdown,
+ inputs=[pretrained_model],
+ outputs=[pretrained_sample_rate],
+ )
+ download_pretrained = gr.Button(i18n("Download"))
+ download_pretrained.click(
+ fn=download_pretrained_model,
+ inputs=[pretrained_model, pretrained_sample_rate],
+ outputs=[],
+ )
diff --git a/tabs/extra/analyzer/analyzer.py b/tabs/extra/analyzer/analyzer.py
new file mode 100644
index 0000000000000000000000000000000000000000..7b05653c0b0ecd3c03f83f9a4b4321e23472f727
--- /dev/null
+++ b/tabs/extra/analyzer/analyzer.py
@@ -0,0 +1,32 @@
+import os, sys
+import gradio as gr
+
+now_dir = os.getcwd()
+sys.path.append(now_dir)
+
+from core import run_audio_analyzer_script
+from assets.i18n.i18n import I18nAuto
+
+i18n = I18nAuto()
+
+
+def analyzer_tab():
+ with gr.Column():
+ audio_input = gr.Audio(type="filepath")
+ output_info = gr.Textbox(
+ label=i18n("Output Information"),
+ info=i18n("The output information will be displayed here."),
+ value="",
+ max_lines=8,
+ interactive=False,
+ )
+ get_info_button = gr.Button(
+ value=i18n("Get information about the audio"), variant="primary"
+ )
+ image_output = gr.Image(type="filepath", interactive=False)
+
+ get_info_button.click(
+ fn=run_audio_analyzer_script,
+ inputs=[audio_input],
+ outputs=[output_info, image_output],
+ )
diff --git a/tabs/extra/extra.py b/tabs/extra/extra.py
new file mode 100644
index 0000000000000000000000000000000000000000..eeb25649d5f34d321dc33b1535250d1a0569101f
--- /dev/null
+++ b/tabs/extra/extra.py
@@ -0,0 +1,31 @@
+import gradio as gr
+
+import os
+import sys
+
+now_dir = os.getcwd()
+sys.path.append(now_dir)
+
+from tabs.extra.processing.processing import processing_tab
+from tabs.extra.analyzer.analyzer import analyzer_tab
+from tabs.extra.f0_extractor.f0_extractor import f0_extractor_tab
+
+from assets.i18n.i18n import I18nAuto
+
+i18n = I18nAuto()
+
+
+def extra_tab():
+ gr.Markdown(
+ value=i18n(
+ "This section contains some extra utilities that often may be in experimental phases."
+ )
+ )
+ with gr.TabItem(i18n("Model information")):
+ processing_tab()
+
+ with gr.TabItem(i18n("F0 Curve")):
+ f0_extractor_tab()
+
+ with gr.TabItem(i18n("Audio Analyzer")):
+ analyzer_tab()
diff --git a/tabs/extra/f0_extractor/f0_extractor.py b/tabs/extra/f0_extractor/f0_extractor.py
new file mode 100644
index 0000000000000000000000000000000000000000..9b4884b5b0b961191ce2c4c4865ad725d66d384a
--- /dev/null
+++ b/tabs/extra/f0_extractor/f0_extractor.py
@@ -0,0 +1,68 @@
+import librosa
+import gradio as gr
+import os
+from matplotlib import pyplot as plt
+
+from rvc.lib.predictors.F0Extractor import F0Extractor
+
+from assets.i18n.i18n import I18nAuto
+
+i18n = I18nAuto()
+
+
+def extract_f0_curve(audio_path: str, method: str) -> tuple:
+ print("Extracting F0 Curve...")
+ image_path = os.path.join("logs", "f0_plot.png")
+ txt_path = os.path.join("logs", "f0_curve.txt")
+ y, sr = librosa.load(audio_path, sr=None)
+ hop_length = 160
+
+ librosa.note_to_hz("C1")
+ librosa.note_to_hz("C8")
+
+ f0_extractor = F0Extractor(audio_path, sample_rate=sr, method=method)
+ f0 = f0_extractor.extract_f0()
+
+ plt.figure(figsize=(10, 4))
+ plt.plot(f0)
+ plt.title(method)
+ plt.xlabel("Time (frames)")
+ plt.ylabel("Frequency (Hz)")
+ plt.savefig(image_path)
+ plt.close()
+
+ with open(txt_path, "w") as txtfile:
+ for i, f0_value in enumerate(f0):
+ frequency = i * sr / hop_length
+ txtfile.write(f"{frequency},{f0_value}\n")
+
+ print("F0 Curve extracted successfully!")
+ return image_path, txt_path
+
+
+def f0_extractor_tab():
+ with gr.Accordion(label=i18n("Extract F0 Curve")):
+ with gr.Row():
+ audio = gr.Audio(label=i18n("Upload Audio"), type="filepath")
+ f0_method = gr.Radio(
+ label=i18n("Pitch extraction algorithm"),
+ info=i18n(
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases."
+ ),
+ choices=["crepe", "fcpe", "rmvpe"],
+ value="rmvpe",
+ )
+ button = gr.Button(i18n("Extract F0 Curve"), variant="primary")
+
+ with gr.Accordion(label=i18n("Output Information")):
+ txt_output = gr.File(label="F0 Curve", type="filepath")
+ image_output = gr.Image(type="filepath", interactive=False)
+
+ button.click(
+ fn=extract_f0_curve,
+ inputs=[
+ audio,
+ f0_method,
+ ],
+ outputs=[image_output, txt_output],
+ )
diff --git a/tabs/extra/model_information.py b/tabs/extra/model_information.py
new file mode 100644
index 0000000000000000000000000000000000000000..bd39110c5288cb2d49c2ad999fa8e06519168688
--- /dev/null
+++ b/tabs/extra/model_information.py
@@ -0,0 +1,29 @@
+import gradio as gr
+from core import run_model_information_script
+
+from assets.i18n.i18n import I18nAuto
+
+i18n = I18nAuto()
+
+
+def model_information_tab():
+ with gr.Column():
+ model_name = gr.Textbox(
+ label=i18n("Path to Model"),
+ info=i18n("Introduce the model pth path"),
+ placeholder=i18n("Introduce the model pth path"),
+ interactive=True,
+ )
+ model_information_output_info = gr.Textbox(
+ label=i18n("Output Information"),
+ info=i18n("The output information will be displayed here."),
+ value="",
+ max_lines=12,
+ interactive=False,
+ )
+ model_information_button = gr.Button(i18n("See Model Information"))
+ model_information_button.click(
+ fn=run_model_information_script,
+ inputs=[model_name],
+ outputs=[model_information_output_info],
+ )
diff --git a/tabs/extra/processing/processing.py b/tabs/extra/processing/processing.py
new file mode 100644
index 0000000000000000000000000000000000000000..aec998006d244cc6db31f9be5339debe47fc8c07
--- /dev/null
+++ b/tabs/extra/processing/processing.py
@@ -0,0 +1,37 @@
+import os, sys
+
+now_dir = os.getcwd()
+sys.path.append(now_dir)
+
+from core import run_model_information_script
+from assets.i18n.i18n import I18nAuto
+
+i18n = I18nAuto()
+
+import gradio as gr
+
+
+def processing_tab():
+ with gr.Accordion(label=i18n("View model information")):
+ with gr.Row():
+ with gr.Column():
+ model_view_model_path = gr.Textbox(
+ label=i18n("Path to Model"),
+ info=i18n("Introduce the model pth path"),
+ value="",
+ interactive=True,
+ placeholder=i18n("Enter path to model"),
+ )
+
+ model_view_output_info = gr.Textbox(
+ label=i18n("Output Information"),
+ info=i18n("The output information will be displayed here."),
+ value="",
+ max_lines=11,
+ )
+ model_view_button = gr.Button(i18n("View"), variant="primary")
+ model_view_button.click(
+ fn=run_model_information_script,
+ inputs=[model_view_model_path],
+ outputs=[model_view_output_info],
+ )
diff --git a/tabs/inference/inference.py b/tabs/inference/inference.py
new file mode 100644
index 0000000000000000000000000000000000000000..8bb4c51232ea4ff48f21740c32e03c38c6f1b8a4
--- /dev/null
+++ b/tabs/inference/inference.py
@@ -0,0 +1,2191 @@
+import os, sys
+import gradio as gr
+import regex as re
+import shutil
+import datetime
+import json
+import torch
+
+from core import (
+ run_infer_script,
+ run_batch_infer_script,
+)
+
+from assets.i18n.i18n import I18nAuto
+
+from rvc.lib.utils import format_title
+from tabs.settings.sections.restart import stop_infer
+
+i18n = I18nAuto()
+
+now_dir = os.getcwd()
+sys.path.append(now_dir)
+
+model_root = os.path.join(now_dir, "logs")
+audio_root = os.path.join(now_dir, "assets", "audios")
+custom_embedder_root = os.path.join(
+ now_dir, "rvc", "models", "embedders", "embedders_custom"
+)
+
+PRESETS_DIR = os.path.join(now_dir, "assets", "presets")
+FORMANTSHIFT_DIR = os.path.join(now_dir, "assets", "formant_shift")
+
+os.makedirs(custom_embedder_root, exist_ok=True)
+
+custom_embedder_root_relative = os.path.relpath(custom_embedder_root, now_dir)
+model_root_relative = os.path.relpath(model_root, now_dir)
+audio_root_relative = os.path.relpath(audio_root, now_dir)
+
+sup_audioext = {
+ "wav",
+ "mp3",
+ "flac",
+ "ogg",
+ "opus",
+ "m4a",
+ "mp4",
+ "aac",
+ "alac",
+ "wma",
+ "aiff",
+ "webm",
+ "ac3",
+}
+
+names = [
+ os.path.join(root, file)
+ for root, _, files in os.walk(model_root_relative, topdown=False)
+ for file in files
+ if (
+ file.endswith((".pth", ".onnx"))
+ and not (file.startswith("G_") or file.startswith("D_"))
+ )
+]
+
+indexes_list = [
+ os.path.join(root, name)
+ for root, _, files in os.walk(model_root_relative, topdown=False)
+ for name in files
+ if name.endswith(".index") and "trained" not in name
+]
+
+audio_paths = [
+ os.path.join(root, name)
+ for root, _, files in os.walk(audio_root_relative, topdown=False)
+ for name in files
+ if name.endswith(tuple(sup_audioext))
+ and root == audio_root_relative
+ and "_output" not in name
+]
+
+custom_embedders = [
+ os.path.join(dirpath, dirname)
+ for dirpath, dirnames, _ in os.walk(custom_embedder_root_relative)
+ for dirname in dirnames
+]
+
+
+def update_sliders(preset):
+ with open(
+ os.path.join(PRESETS_DIR, f"{preset}.json"), "r", encoding="utf-8"
+ ) as json_file:
+ values = json.load(json_file)
+ return (
+ values["pitch"],
+ values["filter_radius"],
+ values["index_rate"],
+ values["rms_mix_rate"],
+ values["protect"],
+ )
+
+
+def update_sliders_formant(preset):
+ with open(
+ os.path.join(FORMANTSHIFT_DIR, f"{preset}.json"), "r", encoding="utf-8"
+ ) as json_file:
+ values = json.load(json_file)
+ return (
+ values["formant_qfrency"],
+ values["formant_timbre"],
+ )
+
+
+def export_presets(presets, file_path):
+ with open(file_path, "w", encoding="utf-8") as json_file:
+ json.dump(presets, json_file, ensure_ascii=False, indent=4)
+
+
+def import_presets(file_path):
+ with open(file_path, "r", encoding="utf-8") as json_file:
+ presets = json.load(json_file)
+ return presets
+
+
+def get_presets_data(pitch, filter_radius, index_rate, rms_mix_rate, protect):
+ return {
+ "pitch": pitch,
+ "filter_radius": filter_radius,
+ "index_rate": index_rate,
+ "rms_mix_rate": rms_mix_rate,
+ "protect": protect,
+ }
+
+
+def export_presets_button(
+ preset_name, pitch, filter_radius, index_rate, rms_mix_rate, protect
+):
+ if preset_name:
+ file_path = os.path.join(PRESETS_DIR, f"{preset_name}.json")
+ presets_data = get_presets_data(
+ pitch, filter_radius, index_rate, rms_mix_rate, protect
+ )
+ with open(file_path, "w", encoding="utf-8") as json_file:
+ json.dump(presets_data, json_file, ensure_ascii=False, indent=4)
+ return "Export successful"
+ return "Export cancelled"
+
+
+def import_presets_button(file_path):
+ if file_path:
+ imported_presets = import_presets(file_path.name)
+ return (
+ list(imported_presets.keys()),
+ imported_presets,
+ "Presets imported successfully!",
+ )
+ return [], {}, "No file selected for import."
+
+
+def list_json_files(directory):
+ return [f.rsplit(".", 1)[0] for f in os.listdir(directory) if f.endswith(".json")]
+
+
+def refresh_presets():
+ json_files = list_json_files(PRESETS_DIR)
+ return gr.update(choices=json_files)
+
+
+def output_path_fn(input_audio_path):
+ original_name_without_extension = os.path.basename(input_audio_path).rsplit(".", 1)[
+ 0
+ ]
+ new_name = original_name_without_extension + "_output.wav"
+ output_path = os.path.join(os.path.dirname(input_audio_path), new_name)
+ return output_path
+
+
+def change_choices(model):
+ if model:
+ speakers = get_speakers_id(model)
+ else:
+ speakers = 0
+ names = [
+ os.path.join(root, file)
+ for root, _, files in os.walk(model_root_relative, topdown=False)
+ for file in files
+ if (
+ file.endswith((".pth", ".onnx"))
+ and not (file.startswith("G_") or file.startswith("D_"))
+ )
+ ]
+
+ indexes_list = [
+ os.path.join(root, name)
+ for root, _, files in os.walk(model_root_relative, topdown=False)
+ for name in files
+ if name.endswith(".index") and "trained" not in name
+ ]
+
+ audio_paths = [
+ os.path.join(root, name)
+ for root, _, files in os.walk(audio_root_relative, topdown=False)
+ for name in files
+ if name.endswith(tuple(sup_audioext))
+ and root == audio_root_relative
+ and "_output" not in name
+ ]
+
+ return (
+ {"choices": sorted(names), "__type__": "update"},
+ {"choices": sorted(indexes_list), "__type__": "update"},
+ {"choices": sorted(audio_paths), "__type__": "update"},
+ {
+ "choices": (
+ sorted(speakers)
+ if speakers is not None and isinstance(speakers, (list, tuple))
+ else []
+ ),
+ "__type__": "update",
+ },
+ {
+ "choices": (
+ sorted(speakers)
+ if speakers is not None and isinstance(speakers, (list, tuple))
+ else []
+ ),
+ "__type__": "update",
+ },
+ )
+
+
+def get_indexes():
+ indexes_list = [
+ os.path.join(dirpath, filename)
+ for dirpath, _, filenames in os.walk(model_root_relative)
+ for filename in filenames
+ if filename.endswith(".index") and "trained" not in filename
+ ]
+
+ return indexes_list if indexes_list else ""
+
+
+def save_to_wav(record_button):
+ if record_button is None:
+ pass
+ else:
+ path_to_file = record_button
+ new_name = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S") + ".wav"
+ target_path = os.path.join(audio_root_relative, os.path.basename(new_name))
+
+ shutil.move(path_to_file, target_path)
+ return target_path, output_path_fn(target_path)
+
+
+def save_to_wav2(upload_audio):
+ file_path = upload_audio
+ formated_name = format_title(os.path.basename(file_path))
+ target_path = os.path.join(audio_root_relative, formated_name)
+
+ if os.path.exists(target_path):
+ os.remove(target_path)
+
+ shutil.copy(file_path, target_path)
+ return target_path, output_path_fn(target_path)
+
+
+def delete_outputs():
+ gr.Info(f"Outputs cleared!")
+ for root, _, files in os.walk(audio_root_relative, topdown=False):
+ for name in files:
+ if name.endswith(tuple(sup_audioext)) and name.__contains__("_output"):
+ os.remove(os.path.join(root, name))
+
+
+def match_index(model_file_value):
+ if model_file_value:
+ model_folder = os.path.dirname(model_file_value)
+ model_name = os.path.basename(model_file_value)
+ index_files = get_indexes()
+ pattern = r"^(.*?)_"
+ match = re.match(pattern, model_name)
+ for index_file in index_files:
+ if os.path.dirname(index_file) == model_folder:
+ return index_file
+ elif match and match.group(1) in os.path.basename(index_file):
+ return index_file
+ elif model_name in os.path.basename(index_file):
+ return index_file
+ return ""
+
+
+def create_folder_and_move_files(folder_name, bin_file, config_file):
+ if not folder_name:
+ return "Folder name must not be empty."
+
+ folder_name = os.path.join(custom_embedder_root, folder_name)
+ os.makedirs(folder_name, exist_ok=True)
+
+ if bin_file:
+ bin_file_path = os.path.join(folder_name, os.path.basename(bin_file))
+ shutil.copy(bin_file, bin_file_path)
+
+ if config_file:
+ config_file_path = os.path.join(folder_name, os.path.basename(config_file))
+ shutil.copy(config_file, config_file_path)
+
+ return f"Files moved to folder {folder_name}"
+
+
+def refresh_formant():
+ json_files = list_json_files(FORMANTSHIFT_DIR)
+ return gr.update(choices=json_files)
+
+
+def refresh_embedders_folders():
+ custom_embedders = [
+ os.path.join(dirpath, dirname)
+ for dirpath, dirnames, _ in os.walk(custom_embedder_root_relative)
+ for dirname in dirnames
+ ]
+ return custom_embedders
+
+
+def get_speakers_id(model):
+ if model:
+ model_data = torch.load(model, map_location="cpu")
+ speakers_id = model_data.get("speakers_id", 0)
+ if speakers_id:
+ return list(range(speakers_id))
+ else:
+ return [0]
+
+
+# Inference tab
+def inference_tab():
+ default_weight = names[0] if names else None
+ with gr.Column():
+ with gr.Row():
+ model_file = gr.Dropdown(
+ label=i18n("Voice Model"),
+ info=i18n("Select the voice model to use for the conversion."),
+ choices=sorted(names, key=lambda path: os.path.getsize(path)),
+ interactive=True,
+ value=default_weight,
+ allow_custom_value=True,
+ )
+
+ index_file = gr.Dropdown(
+ label=i18n("Index File"),
+ info=i18n("Select the index file to use for the conversion."),
+ choices=get_indexes(),
+ value=match_index(default_weight) if default_weight else "",
+ interactive=True,
+ allow_custom_value=True,
+ )
+ with gr.Row():
+ unload_button = gr.Button(i18n("Unload Voice"))
+ refresh_button = gr.Button(i18n("Refresh"))
+
+ unload_button.click(
+ fn=lambda: (
+ {"value": "", "__type__": "update"},
+ {"value": "", "__type__": "update"},
+ ),
+ inputs=[],
+ outputs=[model_file, index_file],
+ )
+
+ model_file.select(
+ fn=lambda model_file_value: match_index(model_file_value),
+ inputs=[model_file],
+ outputs=[index_file],
+ )
+
+ # Single inference tab
+ with gr.Tab(i18n("Single")):
+ with gr.Column():
+ upload_audio = gr.Audio(
+ label=i18n("Upload Audio"), type="filepath", editable=False
+ )
+ with gr.Row():
+ audio = gr.Dropdown(
+ label=i18n("Select Audio"),
+ info=i18n("Select the audio to convert."),
+ choices=sorted(audio_paths),
+ value=audio_paths[0] if audio_paths else "",
+ interactive=True,
+ allow_custom_value=True,
+ )
+
+ with gr.Accordion(i18n("Advanced Settings"), open=False):
+ with gr.Column():
+ clear_outputs_infer = gr.Button(
+ i18n("Clear Outputs (Deletes all audios in assets/audios)")
+ )
+ output_path = gr.Textbox(
+ label=i18n("Output Path"),
+ placeholder=i18n("Enter output path"),
+ info=i18n(
+ "The path where the output audio will be saved, by default in assets/audios/output.wav"
+ ),
+ value=(
+ output_path_fn(audio_paths[0])
+ if audio_paths
+ else os.path.join(now_dir, "assets", "audios", "output.wav")
+ ),
+ interactive=True,
+ )
+ export_format = gr.Radio(
+ label=i18n("Export Format"),
+ info=i18n("Select the format to export the audio."),
+ choices=["WAV", "MP3", "FLAC", "OGG", "M4A"],
+ value="WAV",
+ interactive=True,
+ )
+ sid = gr.Dropdown(
+ label=i18n("Speaker ID"),
+ info=i18n("Select the speaker ID to use for the conversion."),
+ choices=get_speakers_id(model_file.value),
+ value=0,
+ interactive=True,
+ )
+ split_audio = gr.Checkbox(
+ label=i18n("Split Audio"),
+ info=i18n(
+ "Split the audio into chunks for inference to obtain better results in some cases."
+ ),
+ visible=True,
+ value=False,
+ interactive=True,
+ )
+ autotune = gr.Checkbox(
+ label=i18n("Autotune"),
+ info=i18n(
+ "Apply a soft autotune to your inferences, recommended for singing conversions."
+ ),
+ visible=True,
+ value=False,
+ interactive=True,
+ )
+ autotune_strength = gr.Slider(
+ minimum=0,
+ maximum=1,
+ label=i18n("Autotune Strength"),
+ info=i18n(
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid."
+ ),
+ visible=False,
+ value=1,
+ interactive=True,
+ )
+ clean_audio = gr.Checkbox(
+ label=i18n("Clean Audio"),
+ info=i18n(
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios."
+ ),
+ visible=True,
+ value=False,
+ interactive=True,
+ )
+ clean_strength = gr.Slider(
+ minimum=0,
+ maximum=1,
+ label=i18n("Clean Strength"),
+ info=i18n(
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed."
+ ),
+ visible=False,
+ value=0.5,
+ interactive=True,
+ )
+ upscale_audio = gr.Checkbox(
+ label=i18n("Upscale Audio"),
+ info=i18n(
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)"
+ ),
+ visible=True,
+ value=False,
+ interactive=True,
+ )
+ formant_shifting = gr.Checkbox(
+ label=i18n("Formant Shifting"),
+ info=i18n(
+ "Enable formant shifting. Used for male to female and vice-versa convertions."
+ ),
+ value=False,
+ visible=True,
+ interactive=True,
+ )
+ with gr.Row(visible=False) as formant_row:
+ formant_preset = gr.Dropdown(
+ label=i18n("Browse presets for formanting"),
+ info=i18n(
+ "Presets are located in /assets/formant_shift folder"
+ ),
+ choices=list_json_files(FORMANTSHIFT_DIR),
+ visible=False,
+ interactive=True,
+ )
+ formant_refresh_button = gr.Button(
+ value="Refresh",
+ visible=False,
+ )
+ formant_qfrency = gr.Slider(
+ value=1.0,
+ info=i18n("Default value is 1.0"),
+ label=i18n("Quefrency for formant shifting"),
+ minimum=0.0,
+ maximum=16.0,
+ step=0.1,
+ visible=False,
+ interactive=True,
+ )
+ formant_timbre = gr.Slider(
+ value=1.0,
+ info=i18n("Default value is 1.0"),
+ label=i18n("Timbre for formant shifting"),
+ minimum=0.0,
+ maximum=16.0,
+ step=0.1,
+ visible=False,
+ interactive=True,
+ )
+ post_process = gr.Checkbox(
+ label=i18n("Post-Process"),
+ info=i18n("Post-process the audio to apply effects to the output."),
+ value=False,
+ interactive=True,
+ )
+ reverb = gr.Checkbox(
+ label=i18n("Reverb"),
+ info=i18n("Apply reverb to the audio."),
+ value=False,
+ interactive=True,
+ visible=False,
+ )
+ reverb_room_size = gr.Slider(
+ minimum=0,
+ maximum=1,
+ label=i18n("Reverb Room Size"),
+ info=i18n("Set the room size of the reverb."),
+ value=0.5,
+ interactive=True,
+ visible=False,
+ )
+
+ reverb_damping = gr.Slider(
+ minimum=0,
+ maximum=1,
+ label=i18n("Reverb Damping"),
+ info=i18n("Set the damping of the reverb."),
+ value=0.5,
+ interactive=True,
+ visible=False,
+ )
+
+ reverb_wet_gain = gr.Slider(
+ minimum=0,
+ maximum=1,
+ label=i18n("Reverb Wet Gain"),
+ info=i18n("Set the wet gain of the reverb."),
+ value=0.33,
+ interactive=True,
+ visible=False,
+ )
+
+ reverb_dry_gain = gr.Slider(
+ minimum=0,
+ maximum=1,
+ label=i18n("Reverb Dry Gain"),
+ info=i18n("Set the dry gain of the reverb."),
+ value=0.4,
+ interactive=True,
+ visible=False,
+ )
+
+ reverb_width = gr.Slider(
+ minimum=0,
+ maximum=1,
+ label=i18n("Reverb Width"),
+ info=i18n("Set the width of the reverb."),
+ value=1.0,
+ interactive=True,
+ visible=False,
+ )
+
+ reverb_freeze_mode = gr.Slider(
+ minimum=0,
+ maximum=1,
+ label=i18n("Reverb Freeze Mode"),
+ info=i18n("Set the freeze mode of the reverb."),
+ value=0.0,
+ interactive=True,
+ visible=False,
+ )
+ pitch_shift = gr.Checkbox(
+ label=i18n("Pitch Shift"),
+ info=i18n("Apply pitch shift to the audio."),
+ value=False,
+ interactive=True,
+ visible=False,
+ )
+ pitch_shift_semitones = gr.Slider(
+ minimum=-12,
+ maximum=12,
+ label=i18n("Pitch Shift Semitones"),
+ info=i18n("Set the pitch shift semitones."),
+ value=0,
+ interactive=True,
+ visible=False,
+ )
+ limiter = gr.Checkbox(
+ label=i18n("Limiter"),
+ info=i18n("Apply limiter to the audio."),
+ value=False,
+ interactive=True,
+ visible=False,
+ )
+ limiter_threshold = gr.Slider(
+ minimum=-60,
+ maximum=0,
+ label=i18n("Limiter Threshold dB"),
+ info=i18n("Set the limiter threshold dB."),
+ value=-6,
+ interactive=True,
+ visible=False,
+ )
+
+ limiter_release_time = gr.Slider(
+ minimum=0.01,
+ maximum=1,
+ label=i18n("Limiter Release Time"),
+ info=i18n("Set the limiter release time."),
+ value=0.05,
+ interactive=True,
+ visible=False,
+ )
+ gain = gr.Checkbox(
+ label=i18n("Gain"),
+ info=i18n("Apply gain to the audio."),
+ value=False,
+ interactive=True,
+ visible=False,
+ )
+ gain_db = gr.Slider(
+ minimum=-60,
+ maximum=60,
+ label=i18n("Gain dB"),
+ info=i18n("Set the gain dB."),
+ value=0,
+ interactive=True,
+ visible=False,
+ )
+ distortion = gr.Checkbox(
+ label=i18n("Distortion"),
+ info=i18n("Apply distortion to the audio."),
+ value=False,
+ interactive=True,
+ visible=False,
+ )
+ distortion_gain = gr.Slider(
+ minimum=-60,
+ maximum=60,
+ label=i18n("Distortion Gain"),
+ info=i18n("Set the distortion gain."),
+ value=25,
+ interactive=True,
+ visible=False,
+ )
+ chorus = gr.Checkbox(
+ label=i18n("chorus"),
+ info=i18n("Apply chorus to the audio."),
+ value=False,
+ interactive=True,
+ visible=False,
+ )
+ chorus_rate = gr.Slider(
+ minimum=0,
+ maximum=100,
+ label=i18n("Chorus Rate Hz"),
+ info=i18n("Set the chorus rate Hz."),
+ value=1.0,
+ interactive=True,
+ visible=False,
+ )
+
+ chorus_depth = gr.Slider(
+ minimum=0,
+ maximum=1,
+ label=i18n("chorus Depth"),
+ info=i18n("Set the chorus depth."),
+ value=0.25,
+ interactive=True,
+ visible=False,
+ )
+
+ chorus_center_delay = gr.Slider(
+ minimum=7,
+ maximum=8,
+ label=i18n("chorus Center Delay ms"),
+ info=i18n("Set the chorus center delay ms."),
+ value=7,
+ interactive=True,
+ visible=False,
+ )
+
+ chorus_feedback = gr.Slider(
+ minimum=0,
+ maximum=1,
+ label=i18n("chorus Feedback"),
+ info=i18n("Set the chorus feedback."),
+ value=0.0,
+ interactive=True,
+ visible=False,
+ )
+
+ chorus_mix = gr.Slider(
+ minimum=0,
+ maximum=1,
+ label=i18n("Chorus Mix"),
+ info=i18n("Set the chorus mix."),
+ value=0.5,
+ interactive=True,
+ visible=False,
+ )
+ bitcrush = gr.Checkbox(
+ label=i18n("Bitcrush"),
+ info=i18n("Apply bitcrush to the audio."),
+ value=False,
+ interactive=True,
+ visible=False,
+ )
+ bitcrush_bit_depth = gr.Slider(
+ minimum=1,
+ maximum=32,
+ label=i18n("Bitcrush Bit Depth"),
+ info=i18n("Set the bitcrush bit depth."),
+ value=8,
+ interactive=True,
+ visible=False,
+ )
+ clipping = gr.Checkbox(
+ label=i18n("Clipping"),
+ info=i18n("Apply clipping to the audio."),
+ value=False,
+ interactive=True,
+ visible=False,
+ )
+ clipping_threshold = gr.Slider(
+ minimum=-60,
+ maximum=0,
+ label=i18n("Clipping Threshold"),
+ info=i18n("Set the clipping threshold."),
+ value=-6,
+ interactive=True,
+ visible=False,
+ )
+ compressor = gr.Checkbox(
+ label=i18n("Compressor"),
+ info=i18n("Apply compressor to the audio."),
+ value=False,
+ interactive=True,
+ visible=False,
+ )
+ compressor_threshold = gr.Slider(
+ minimum=-60,
+ maximum=0,
+ label=i18n("Compressor Threshold dB"),
+ info=i18n("Set the compressor threshold dB."),
+ value=0,
+ interactive=True,
+ visible=False,
+ )
+
+ compressor_ratio = gr.Slider(
+ minimum=1,
+ maximum=20,
+ label=i18n("Compressor Ratio"),
+ info=i18n("Set the compressor ratio."),
+ value=1,
+ interactive=True,
+ visible=False,
+ )
+
+ compressor_attack = gr.Slider(
+ minimum=0.0,
+ maximum=100,
+ label=i18n("Compressor Attack ms"),
+ info=i18n("Set the compressor attack ms."),
+ value=1.0,
+ interactive=True,
+ visible=False,
+ )
+
+ compressor_release = gr.Slider(
+ minimum=0.01,
+ maximum=100,
+ label=i18n("Compressor Release ms"),
+ info=i18n("Set the compressor release ms."),
+ value=100,
+ interactive=True,
+ visible=False,
+ )
+ delay = gr.Checkbox(
+ label=i18n("Delay"),
+ info=i18n("Apply delay to the audio."),
+ value=False,
+ interactive=True,
+ visible=False,
+ )
+ delay_seconds = gr.Slider(
+ minimum=0.0,
+ maximum=5.0,
+ label=i18n("Delay Seconds"),
+ info=i18n("Set the delay seconds."),
+ value=0.5,
+ interactive=True,
+ visible=False,
+ )
+
+ delay_feedback = gr.Slider(
+ minimum=0.0,
+ maximum=1.0,
+ label=i18n("Delay Feedback"),
+ info=i18n("Set the delay feedback."),
+ value=0.0,
+ interactive=True,
+ visible=False,
+ )
+
+ delay_mix = gr.Slider(
+ minimum=0.0,
+ maximum=1.0,
+ label=i18n("Delay Mix"),
+ info=i18n("Set the delay mix."),
+ value=0.5,
+ interactive=True,
+ visible=False,
+ )
+ with gr.Accordion(i18n("Preset Settings"), open=False):
+ with gr.Row():
+ preset_dropdown = gr.Dropdown(
+ label=i18n("Select Custom Preset"),
+ choices=list_json_files(PRESETS_DIR),
+ interactive=True,
+ )
+ presets_refresh_button = gr.Button(i18n("Refresh Presets"))
+ import_file = gr.File(
+ label=i18n("Select file to import"),
+ file_count="single",
+ type="filepath",
+ interactive=True,
+ )
+ import_file.change(
+ import_presets_button,
+ inputs=import_file,
+ outputs=[preset_dropdown],
+ )
+ presets_refresh_button.click(
+ refresh_presets, outputs=preset_dropdown
+ )
+ with gr.Row():
+ preset_name_input = gr.Textbox(
+ label=i18n("Preset Name"),
+ placeholder=i18n("Enter preset name"),
+ )
+ export_button = gr.Button(i18n("Export Preset"))
+ pitch = gr.Slider(
+ minimum=-24,
+ maximum=24,
+ step=1,
+ label=i18n("Pitch"),
+ info=i18n(
+ "Set the pitch of the audio, the higher the value, the higher the pitch."
+ ),
+ value=0,
+ interactive=True,
+ )
+ filter_radius = gr.Slider(
+ minimum=0,
+ maximum=7,
+ label=i18n("Filter Radius"),
+ info=i18n(
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration."
+ ),
+ value=3,
+ step=1,
+ interactive=True,
+ )
+ index_rate = gr.Slider(
+ minimum=0,
+ maximum=1,
+ label=i18n("Search Feature Ratio"),
+ info=i18n(
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio."
+ ),
+ value=0.75,
+ interactive=True,
+ )
+ rms_mix_rate = gr.Slider(
+ minimum=0,
+ maximum=1,
+ label=i18n("Volume Envelope"),
+ info=i18n(
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed."
+ ),
+ value=1,
+ interactive=True,
+ )
+ protect = gr.Slider(
+ minimum=0,
+ maximum=0.5,
+ label=i18n("Protect Voiceless Consonants"),
+ info=i18n(
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect."
+ ),
+ value=0.5,
+ interactive=True,
+ )
+ preset_dropdown.change(
+ update_sliders,
+ inputs=preset_dropdown,
+ outputs=[
+ pitch,
+ filter_radius,
+ index_rate,
+ rms_mix_rate,
+ protect,
+ ],
+ )
+ export_button.click(
+ export_presets_button,
+ inputs=[
+ preset_name_input,
+ pitch,
+ filter_radius,
+ index_rate,
+ rms_mix_rate,
+ protect,
+ ],
+ )
+ hop_length = gr.Slider(
+ minimum=1,
+ maximum=512,
+ step=1,
+ label=i18n("Hop Length"),
+ info=i18n(
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy."
+ ),
+ visible=False,
+ value=128,
+ interactive=True,
+ )
+ f0_method = gr.Radio(
+ label=i18n("Pitch extraction algorithm"),
+ info=i18n(
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases."
+ ),
+ choices=[
+ "crepe",
+ "crepe-tiny",
+ "rmvpe",
+ "fcpe",
+ "hybrid[rmvpe+fcpe]",
+ ],
+ value="rmvpe",
+ interactive=True,
+ )
+ embedder_model = gr.Radio(
+ label=i18n("Embedder Model"),
+ info=i18n("Model used for learning speaker embedding."),
+ choices=[
+ "contentvec",
+ "chinese-hubert-base",
+ "japanese-hubert-base",
+ "korean-hubert-base",
+ "custom",
+ ],
+ value="contentvec",
+ interactive=True,
+ )
+ with gr.Column(visible=False) as embedder_custom:
+ with gr.Accordion(i18n("Custom Embedder"), open=True):
+ with gr.Row():
+ embedder_model_custom = gr.Dropdown(
+ label=i18n("Select Custom Embedder"),
+ choices=refresh_embedders_folders(),
+ interactive=True,
+ allow_custom_value=True,
+ )
+ refresh_embedders_button = gr.Button(
+ i18n("Refresh embedders")
+ )
+ folder_name_input = gr.Textbox(
+ label=i18n("Folder Name"), interactive=True
+ )
+ with gr.Row():
+ bin_file_upload = gr.File(
+ label=i18n("Upload .bin"),
+ type="filepath",
+ interactive=True,
+ )
+ config_file_upload = gr.File(
+ label=i18n("Upload .json"),
+ type="filepath",
+ interactive=True,
+ )
+ move_files_button = gr.Button(
+ i18n("Move files to custom embedder folder")
+ )
+
+ f0_file = gr.File(
+ label=i18n(
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls."
+ ),
+ visible=True,
+ )
+
+ convert_button1 = gr.Button(i18n("Convert"))
+
+ with gr.Row():
+ vc_output1 = gr.Textbox(
+ label=i18n("Output Information"),
+ info=i18n("The output information will be displayed here."),
+ )
+ vc_output2 = gr.Audio(label=i18n("Export Audio"))
+
+ # Batch inference tab
+ with gr.Tab(i18n("Batch")):
+ with gr.Row():
+ with gr.Column():
+ input_folder_batch = gr.Textbox(
+ label=i18n("Input Folder"),
+ info=i18n("Select the folder containing the audios to convert."),
+ placeholder=i18n("Enter input path"),
+ value=os.path.join(now_dir, "assets", "audios"),
+ interactive=True,
+ )
+ output_folder_batch = gr.Textbox(
+ label=i18n("Output Folder"),
+ info=i18n(
+ "Select the folder where the output audios will be saved."
+ ),
+ placeholder=i18n("Enter output path"),
+ value=os.path.join(now_dir, "assets", "audios"),
+ interactive=True,
+ )
+ with gr.Accordion(i18n("Advanced Settings"), open=False):
+ with gr.Column():
+ clear_outputs_batch = gr.Button(
+ i18n("Clear Outputs (Deletes all audios in assets/audios)")
+ )
+ export_format_batch = gr.Radio(
+ label=i18n("Export Format"),
+ info=i18n("Select the format to export the audio."),
+ choices=["WAV", "MP3", "FLAC", "OGG", "M4A"],
+ value="WAV",
+ interactive=True,
+ )
+ sid_batch = gr.Dropdown(
+ label=i18n("Speaker ID"),
+ info=i18n("Select the speaker ID to use for the conversion."),
+ choices=get_speakers_id(model_file.value),
+ value=0,
+ interactive=True,
+ )
+ split_audio_batch = gr.Checkbox(
+ label=i18n("Split Audio"),
+ info=i18n(
+ "Split the audio into chunks for inference to obtain better results in some cases."
+ ),
+ visible=True,
+ value=False,
+ interactive=True,
+ )
+ autotune_batch = gr.Checkbox(
+ label=i18n("Autotune"),
+ info=i18n(
+ "Apply a soft autotune to your inferences, recommended for singing conversions."
+ ),
+ visible=True,
+ value=False,
+ interactive=True,
+ )
+ autotune_strength_batch = gr.Slider(
+ minimum=0,
+ maximum=1,
+ label=i18n("Autotune Strength"),
+ info=i18n(
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid."
+ ),
+ visible=False,
+ value=1,
+ interactive=True,
+ )
+ clean_audio_batch = gr.Checkbox(
+ label=i18n("Clean Audio"),
+ info=i18n(
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios."
+ ),
+ visible=True,
+ value=False,
+ interactive=True,
+ )
+ clean_strength_batch = gr.Slider(
+ minimum=0,
+ maximum=1,
+ label=i18n("Clean Strength"),
+ info=i18n(
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed."
+ ),
+ visible=False,
+ value=0.5,
+ interactive=True,
+ )
+ upscale_audio_batch = gr.Checkbox(
+ label=i18n("Upscale Audio"),
+ info=i18n(
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)"
+ ),
+ visible=True,
+ value=False,
+ interactive=True,
+ )
+ formant_shifting_batch = gr.Checkbox(
+ label=i18n("Formant Shifting"),
+ info=i18n(
+ "Enable formant shifting. Used for male to female and vice-versa convertions."
+ ),
+ value=False,
+ visible=True,
+ interactive=True,
+ )
+ with gr.Row(visible=False) as formant_row_batch:
+ formant_preset_batch = gr.Dropdown(
+ label=i18n("Browse presets for formanting"),
+ info=i18n(
+ "Presets are located in /assets/formant_shift folder"
+ ),
+ choices=list_json_files(FORMANTSHIFT_DIR),
+ visible=False,
+ interactive=True,
+ )
+ formant_refresh_button_batch = gr.Button(
+ value="Refresh",
+ visible=False,
+ variant="primary",
+ )
+ formant_qfrency_batch = gr.Slider(
+ value=1.0,
+ info=i18n("Default value is 1.0"),
+ label=i18n("Quefrency for formant shifting"),
+ minimum=0.0,
+ maximum=16.0,
+ step=0.1,
+ visible=False,
+ interactive=True,
+ )
+ formant_timbre_batch = gr.Slider(
+ value=1.0,
+ info=i18n("Default value is 1.0"),
+ label=i18n("Timbre for formant shifting"),
+ minimum=0.0,
+ maximum=16.0,
+ step=0.1,
+ visible=False,
+ interactive=True,
+ )
+ post_process_batch = gr.Checkbox(
+ label=i18n("Post-Process"),
+ info=i18n("Post-process the audio to apply effects to the output."),
+ value=False,
+ interactive=True,
+ )
+ reverb_batch = gr.Checkbox(
+ label=i18n("Reverb"),
+ info=i18n("Apply reverb to the audio."),
+ value=False,
+ interactive=True,
+ visible=False,
+ )
+ reverb_room_size_batch = gr.Slider(
+ minimum=0,
+ maximum=1,
+ label=i18n("Reverb Room Size"),
+ info=i18n("Set the room size of the reverb."),
+ value=0.5,
+ interactive=True,
+ visible=False,
+ )
+
+ reverb_damping_batch = gr.Slider(
+ minimum=0,
+ maximum=1,
+ label=i18n("Reverb Damping"),
+ info=i18n("Set the damping of the reverb."),
+ value=0.5,
+ interactive=True,
+ visible=False,
+ )
+
+ reverb_wet_gain_batch = gr.Slider(
+ minimum=0,
+ maximum=1,
+ label=i18n("Reverb Wet Gain"),
+ info=i18n("Set the wet gain of the reverb."),
+ value=0.33,
+ interactive=True,
+ visible=False,
+ )
+
+ reverb_dry_gain_batch = gr.Slider(
+ minimum=0,
+ maximum=1,
+ label=i18n("Reverb Dry Gain"),
+ info=i18n("Set the dry gain of the reverb."),
+ value=0.4,
+ interactive=True,
+ visible=False,
+ )
+
+ reverb_width_batch = gr.Slider(
+ minimum=0,
+ maximum=1,
+ label=i18n("Reverb Width"),
+ info=i18n("Set the width of the reverb."),
+ value=1.0,
+ interactive=True,
+ visible=False,
+ )
+
+ reverb_freeze_mode_batch = gr.Slider(
+ minimum=0,
+ maximum=1,
+ label=i18n("Reverb Freeze Mode"),
+ info=i18n("Set the freeze mode of the reverb."),
+ value=0.0,
+ interactive=True,
+ visible=False,
+ )
+ pitch_shift_batch = gr.Checkbox(
+ label=i18n("Pitch Shift"),
+ info=i18n("Apply pitch shift to the audio."),
+ value=False,
+ interactive=True,
+ visible=False,
+ )
+ pitch_shift_semitones_batch = gr.Slider(
+ minimum=-12,
+ maximum=12,
+ label=i18n("Pitch Shift Semitones"),
+ info=i18n("Set the pitch shift semitones."),
+ value=0,
+ interactive=True,
+ visible=False,
+ )
+ limiter_batch = gr.Checkbox(
+ label=i18n("Limiter"),
+ info=i18n("Apply limiter to the audio."),
+ value=False,
+ interactive=True,
+ visible=False,
+ )
+ limiter_threshold_batch = gr.Slider(
+ minimum=-60,
+ maximum=0,
+ label=i18n("Limiter Threshold dB"),
+ info=i18n("Set the limiter threshold dB."),
+ value=-6,
+ interactive=True,
+ visible=False,
+ )
+
+ limiter_release_time_batch = gr.Slider(
+ minimum=0.01,
+ maximum=1,
+ label=i18n("Limiter Release Time"),
+ info=i18n("Set the limiter release time."),
+ value=0.05,
+ interactive=True,
+ visible=False,
+ )
+ gain_batch = gr.Checkbox(
+ label=i18n("Gain"),
+ info=i18n("Apply gain to the audio."),
+ value=False,
+ interactive=True,
+ visible=False,
+ )
+ gain_db_batch = gr.Slider(
+ minimum=-60,
+ maximum=60,
+ label=i18n("Gain dB"),
+ info=i18n("Set the gain dB."),
+ value=0,
+ interactive=True,
+ visible=False,
+ )
+ distortion_batch = gr.Checkbox(
+ label=i18n("Distortion"),
+ info=i18n("Apply distortion to the audio."),
+ value=False,
+ interactive=True,
+ visible=False,
+ )
+ distortion_gain_batch = gr.Slider(
+ minimum=-60,
+ maximum=60,
+ label=i18n("Distortion Gain"),
+ info=i18n("Set the distortion gain."),
+ value=25,
+ interactive=True,
+ visible=False,
+ )
+ chorus_batch = gr.Checkbox(
+ label=i18n("chorus"),
+ info=i18n("Apply chorus to the audio."),
+ value=False,
+ interactive=True,
+ visible=False,
+ )
+ chorus_rate_batch = gr.Slider(
+ minimum=0,
+ maximum=100,
+ label=i18n("Chorus Rate Hz"),
+ info=i18n("Set the chorus rate Hz."),
+ value=1.0,
+ interactive=True,
+ visible=False,
+ )
+
+ chorus_depth_batch = gr.Slider(
+ minimum=0,
+ maximum=1,
+ label=i18n("chorus Depth"),
+ info=i18n("Set the chorus depth."),
+ value=0.25,
+ interactive=True,
+ visible=False,
+ )
+
+ chorus_center_delay_batch = gr.Slider(
+ minimum=7,
+ maximum=8,
+ label=i18n("chorus Center Delay ms"),
+ info=i18n("Set the chorus center delay ms."),
+ value=7,
+ interactive=True,
+ visible=False,
+ )
+
+ chorus_feedback_batch = gr.Slider(
+ minimum=0,
+ maximum=1,
+ label=i18n("chorus Feedback"),
+ info=i18n("Set the chorus feedback."),
+ value=0.0,
+ interactive=True,
+ visible=False,
+ )
+
+ chorus_mix_batch = gr.Slider(
+ minimum=0,
+ maximum=1,
+ label=i18n("Chorus Mix"),
+ info=i18n("Set the chorus mix."),
+ value=0.5,
+ interactive=True,
+ visible=False,
+ )
+ bitcrush_batch = gr.Checkbox(
+ label=i18n("Bitcrush"),
+ info=i18n("Apply bitcrush to the audio."),
+ value=False,
+ interactive=True,
+ visible=False,
+ )
+ bitcrush_bit_depth_batch = gr.Slider(
+ minimum=1,
+ maximum=32,
+ label=i18n("Bitcrush Bit Depth"),
+ info=i18n("Set the bitcrush bit depth."),
+ value=8,
+ interactive=True,
+ visible=False,
+ )
+ clipping_batch = gr.Checkbox(
+ label=i18n("Clipping"),
+ info=i18n("Apply clipping to the audio."),
+ value=False,
+ interactive=True,
+ visible=False,
+ )
+ clipping_threshold_batch = gr.Slider(
+ minimum=-60,
+ maximum=0,
+ label=i18n("Clipping Threshold"),
+ info=i18n("Set the clipping threshold."),
+ value=-6,
+ interactive=True,
+ visible=False,
+ )
+ compressor_batch = gr.Checkbox(
+ label=i18n("Compressor"),
+ info=i18n("Apply compressor to the audio."),
+ value=False,
+ interactive=True,
+ visible=False,
+ )
+ compressor_threshold_batch = gr.Slider(
+ minimum=-60,
+ maximum=0,
+ label=i18n("Compressor Threshold dB"),
+ info=i18n("Set the compressor threshold dB."),
+ value=0,
+ interactive=True,
+ visible=False,
+ )
+
+ compressor_ratio_batch = gr.Slider(
+ minimum=1,
+ maximum=20,
+ label=i18n("Compressor Ratio"),
+ info=i18n("Set the compressor ratio."),
+ value=1,
+ interactive=True,
+ visible=False,
+ )
+
+ compressor_attack_batch = gr.Slider(
+ minimum=0.0,
+ maximum=100,
+ label=i18n("Compressor Attack ms"),
+ info=i18n("Set the compressor attack ms."),
+ value=1.0,
+ interactive=True,
+ visible=False,
+ )
+
+ compressor_release_batch = gr.Slider(
+ minimum=0.01,
+ maximum=100,
+ label=i18n("Compressor Release ms"),
+ info=i18n("Set the compressor release ms."),
+ value=100,
+ interactive=True,
+ visible=False,
+ )
+ delay_batch = gr.Checkbox(
+ label=i18n("Delay"),
+ info=i18n("Apply delay to the audio."),
+ value=False,
+ interactive=True,
+ visible=False,
+ )
+ delay_seconds_batch = gr.Slider(
+ minimum=0.0,
+ maximum=5.0,
+ label=i18n("Delay Seconds"),
+ info=i18n("Set the delay seconds."),
+ value=0.5,
+ interactive=True,
+ visible=False,
+ )
+
+ delay_feedback_batch = gr.Slider(
+ minimum=0.0,
+ maximum=1.0,
+ label=i18n("Delay Feedback"),
+ info=i18n("Set the delay feedback."),
+ value=0.0,
+ interactive=True,
+ visible=False,
+ )
+
+ delay_mix_batch = gr.Slider(
+ minimum=0.0,
+ maximum=1.0,
+ label=i18n("Delay Mix"),
+ info=i18n("Set the delay mix."),
+ value=0.5,
+ interactive=True,
+ visible=False,
+ )
+ with gr.Accordion(i18n("Preset Settings"), open=False):
+ with gr.Row():
+ preset_dropdown = gr.Dropdown(
+ label=i18n("Select Custom Preset"),
+ interactive=True,
+ )
+ presets_batch_refresh_button = gr.Button(
+ i18n("Refresh Presets")
+ )
+ import_file = gr.File(
+ label=i18n("Select file to import"),
+ file_count="single",
+ type="filepath",
+ interactive=True,
+ )
+ import_file.change(
+ import_presets_button,
+ inputs=import_file,
+ outputs=[preset_dropdown],
+ )
+ presets_batch_refresh_button.click(
+ refresh_presets, outputs=preset_dropdown
+ )
+ with gr.Row():
+ preset_name_input = gr.Textbox(
+ label=i18n("Preset Name"),
+ placeholder=i18n("Enter preset name"),
+ )
+ export_button = gr.Button(i18n("Export Preset"))
+ pitch_batch = gr.Slider(
+ minimum=-24,
+ maximum=24,
+ step=1,
+ label=i18n("Pitch"),
+ info=i18n(
+ "Set the pitch of the audio, the higher the value, the higher the pitch."
+ ),
+ value=0,
+ interactive=True,
+ )
+ filter_radius_batch = gr.Slider(
+ minimum=0,
+ maximum=7,
+ label=i18n("Filter Radius"),
+ info=i18n(
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration."
+ ),
+ value=3,
+ step=1,
+ interactive=True,
+ )
+ index_rate_batch = gr.Slider(
+ minimum=0,
+ maximum=1,
+ label=i18n("Search Feature Ratio"),
+ info=i18n(
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio."
+ ),
+ value=0.75,
+ interactive=True,
+ )
+ rms_mix_rate_batch = gr.Slider(
+ minimum=0,
+ maximum=1,
+ label=i18n("Volume Envelope"),
+ info=i18n(
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed."
+ ),
+ value=1,
+ interactive=True,
+ )
+ protect_batch = gr.Slider(
+ minimum=0,
+ maximum=0.5,
+ label=i18n("Protect Voiceless Consonants"),
+ info=i18n(
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect."
+ ),
+ value=0.5,
+ interactive=True,
+ )
+ preset_dropdown.change(
+ update_sliders,
+ inputs=preset_dropdown,
+ outputs=[
+ pitch_batch,
+ filter_radius_batch,
+ index_rate_batch,
+ rms_mix_rate_batch,
+ protect_batch,
+ ],
+ )
+ export_button.click(
+ export_presets_button,
+ inputs=[
+ preset_name_input,
+ pitch,
+ filter_radius,
+ index_rate,
+ rms_mix_rate,
+ protect,
+ ],
+ outputs=[],
+ )
+ hop_length_batch = gr.Slider(
+ minimum=1,
+ maximum=512,
+ step=1,
+ label=i18n("Hop Length"),
+ info=i18n(
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy."
+ ),
+ visible=False,
+ value=128,
+ interactive=True,
+ )
+ f0_method_batch = gr.Radio(
+ label=i18n("Pitch extraction algorithm"),
+ info=i18n(
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases."
+ ),
+ choices=[
+ "crepe",
+ "crepe-tiny",
+ "rmvpe",
+ "fcpe",
+ "hybrid[rmvpe+fcpe]",
+ ],
+ value="rmvpe",
+ interactive=True,
+ )
+ embedder_model_batch = gr.Radio(
+ label=i18n("Embedder Model"),
+ info=i18n("Model used for learning speaker embedding."),
+ choices=[
+ "contentvec",
+ "chinese-hubert-base",
+ "japanese-hubert-base",
+ "korean-hubert-base",
+ "custom",
+ ],
+ value="contentvec",
+ interactive=True,
+ )
+ f0_file_batch = gr.File(
+ label=i18n(
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls."
+ ),
+ visible=True,
+ )
+ with gr.Column(visible=False) as embedder_custom_batch:
+ with gr.Accordion(i18n("Custom Embedder"), open=True):
+ with gr.Row():
+ embedder_model_custom_batch = gr.Dropdown(
+ label=i18n("Select Custom Embedder"),
+ choices=refresh_embedders_folders(),
+ interactive=True,
+ allow_custom_value=True,
+ )
+ refresh_embedders_button_batch = gr.Button(
+ i18n("Refresh embedders")
+ )
+ folder_name_input_batch = gr.Textbox(
+ label=i18n("Folder Name"), interactive=True
+ )
+ with gr.Row():
+ bin_file_upload_batch = gr.File(
+ label=i18n("Upload .bin"),
+ type="filepath",
+ interactive=True,
+ )
+ config_file_upload_batch = gr.File(
+ label=i18n("Upload .json"),
+ type="filepath",
+ interactive=True,
+ )
+ move_files_button_batch = gr.Button(
+ i18n("Move files to custom embedder folder")
+ )
+
+ convert_button2 = gr.Button(i18n("Convert"))
+ stop_button = gr.Button(i18n("Stop convert"), visible=False)
+ stop_button.click(fn=stop_infer, inputs=[], outputs=[])
+
+ with gr.Row():
+ vc_output3 = gr.Textbox(
+ label=i18n("Output Information"),
+ info=i18n("The output information will be displayed here."),
+ )
+
+ def toggle_visible(checkbox):
+ return {"visible": checkbox, "__type__": "update"}
+
+ def toggle_visible_hop_length(f0_method):
+ if f0_method == "crepe" or f0_method == "crepe-tiny":
+ return {"visible": True, "__type__": "update"}
+ return {"visible": False, "__type__": "update"}
+
+ def toggle_visible_embedder_custom(embedder_model):
+ if embedder_model == "custom":
+ return {"visible": True, "__type__": "update"}
+ return {"visible": False, "__type__": "update"}
+
+ def enable_stop_convert_button():
+ return {"visible": False, "__type__": "update"}, {
+ "visible": True,
+ "__type__": "update",
+ }
+
+ def disable_stop_convert_button():
+ return {"visible": True, "__type__": "update"}, {
+ "visible": False,
+ "__type__": "update",
+ }
+
+ def toggle_visible_formant_shifting(checkbox):
+ if checkbox:
+ return (
+ gr.update(visible=True),
+ gr.update(visible=True),
+ gr.update(visible=True),
+ gr.update(visible=True),
+ gr.update(visible=True),
+ )
+ else:
+ return (
+ gr.update(visible=False),
+ gr.update(visible=False),
+ gr.update(visible=False),
+ gr.update(visible=False),
+ gr.update(visible=False),
+ )
+
+ def update_visibility(checkbox, count):
+ return [gr.update(visible=checkbox) for _ in range(count)]
+
+ def post_process_visible(checkbox):
+ return update_visibility(checkbox, 10)
+
+ def reverb_visible(checkbox):
+ return update_visibility(checkbox, 6)
+
+ def limiter_visible(checkbox):
+ return update_visibility(checkbox, 2)
+
+ def chorus_visible(checkbox):
+ return update_visibility(checkbox, 6)
+
+ def bitcrush_visible(checkbox):
+ return update_visibility(checkbox, 1)
+
+ def compress_visible(checkbox):
+ return update_visibility(checkbox, 4)
+
+ def delay_visible(checkbox):
+ return update_visibility(checkbox, 3)
+
+ autotune.change(
+ fn=toggle_visible,
+ inputs=[autotune],
+ outputs=[autotune_strength],
+ )
+ clean_audio.change(
+ fn=toggle_visible,
+ inputs=[clean_audio],
+ outputs=[clean_strength],
+ )
+ formant_shifting.change(
+ fn=toggle_visible_formant_shifting,
+ inputs=[formant_shifting],
+ outputs=[
+ formant_row,
+ formant_preset,
+ formant_refresh_button,
+ formant_qfrency,
+ formant_timbre,
+ ],
+ )
+ formant_shifting_batch.change(
+ fn=toggle_visible_formant_shifting,
+ inputs=[formant_shifting],
+ outputs=[
+ formant_row_batch,
+ formant_preset_batch,
+ formant_refresh_button_batch,
+ formant_qfrency_batch,
+ formant_timbre_batch,
+ ],
+ )
+ formant_refresh_button.click(
+ fn=refresh_formant,
+ inputs=[],
+ outputs=[formant_preset],
+ )
+ formant_preset.change(
+ fn=update_sliders_formant,
+ inputs=[formant_preset],
+ outputs=[
+ formant_qfrency,
+ formant_timbre,
+ ],
+ )
+ formant_preset_batch.change(
+ fn=update_sliders_formant,
+ inputs=[formant_preset_batch],
+ outputs=[
+ formant_qfrency,
+ formant_timbre,
+ ],
+ )
+ post_process.change(
+ fn=post_process_visible,
+ inputs=[post_process],
+ outputs=[
+ reverb,
+ pitch_shift,
+ limiter,
+ gain,
+ distortion,
+ chorus,
+ bitcrush,
+ clipping,
+ compressor,
+ delay,
+ ],
+ )
+
+ reverb.change(
+ fn=reverb_visible,
+ inputs=[reverb],
+ outputs=[
+ reverb_room_size,
+ reverb_damping,
+ reverb_wet_gain,
+ reverb_dry_gain,
+ reverb_width,
+ reverb_freeze_mode,
+ ],
+ )
+ pitch_shift.change(
+ fn=toggle_visible,
+ inputs=[pitch_shift],
+ outputs=[pitch_shift_semitones],
+ )
+ limiter.change(
+ fn=limiter_visible,
+ inputs=[limiter],
+ outputs=[limiter_threshold, limiter_release_time],
+ )
+ gain.change(
+ fn=toggle_visible,
+ inputs=[gain],
+ outputs=[gain_db],
+ )
+ distortion.change(
+ fn=toggle_visible,
+ inputs=[distortion],
+ outputs=[distortion_gain],
+ )
+ chorus.change(
+ fn=chorus_visible,
+ inputs=[chorus],
+ outputs=[
+ chorus_rate,
+ chorus_depth,
+ chorus_center_delay,
+ chorus_feedback,
+ chorus_mix,
+ ],
+ )
+ bitcrush.change(
+ fn=bitcrush_visible,
+ inputs=[bitcrush],
+ outputs=[bitcrush_bit_depth],
+ )
+ clipping.change(
+ fn=toggle_visible,
+ inputs=[clipping],
+ outputs=[clipping_threshold],
+ )
+ compressor.change(
+ fn=compress_visible,
+ inputs=[compressor],
+ outputs=[
+ compressor_threshold,
+ compressor_ratio,
+ compressor_attack,
+ compressor_release,
+ ],
+ )
+ delay.change(
+ fn=delay_visible,
+ inputs=[delay],
+ outputs=[delay_seconds, delay_feedback, delay_mix],
+ )
+ post_process_batch.change(
+ fn=post_process_visible,
+ inputs=[post_process_batch],
+ outputs=[
+ reverb_batch,
+ pitch_shift_batch,
+ limiter_batch,
+ gain_batch,
+ distortion_batch,
+ chorus_batch,
+ bitcrush_batch,
+ clipping_batch,
+ compressor_batch,
+ delay_batch,
+ ],
+ )
+
+ reverb_batch.change(
+ fn=reverb_visible,
+ inputs=[reverb_batch],
+ outputs=[
+ reverb_room_size_batch,
+ reverb_damping_batch,
+ reverb_wet_gain_batch,
+ reverb_dry_gain_batch,
+ reverb_width_batch,
+ reverb_freeze_mode_batch,
+ ],
+ )
+ pitch_shift_batch.change(
+ fn=toggle_visible,
+ inputs=[pitch_shift_batch],
+ outputs=[pitch_shift_semitones_batch],
+ )
+ limiter_batch.change(
+ fn=limiter_visible,
+ inputs=[limiter_batch],
+ outputs=[limiter_threshold_batch, limiter_release_time_batch],
+ )
+ gain_batch.change(
+ fn=toggle_visible,
+ inputs=[gain_batch],
+ outputs=[gain_db_batch],
+ )
+ distortion_batch.change(
+ fn=toggle_visible,
+ inputs=[distortion_batch],
+ outputs=[distortion_gain_batch],
+ )
+ chorus_batch.change(
+ fn=chorus_visible,
+ inputs=[chorus_batch],
+ outputs=[
+ chorus_rate_batch,
+ chorus_depth_batch,
+ chorus_center_delay_batch,
+ chorus_feedback_batch,
+ chorus_mix_batch,
+ ],
+ )
+ bitcrush_batch.change(
+ fn=bitcrush_visible,
+ inputs=[bitcrush_batch],
+ outputs=[bitcrush_bit_depth_batch],
+ )
+ clipping_batch.change(
+ fn=toggle_visible,
+ inputs=[clipping_batch],
+ outputs=[clipping_threshold_batch],
+ )
+ compressor_batch.change(
+ fn=compress_visible,
+ inputs=[compressor_batch],
+ outputs=[
+ compressor_threshold_batch,
+ compressor_ratio_batch,
+ compressor_attack_batch,
+ compressor_release_batch,
+ ],
+ )
+ delay_batch.change(
+ fn=delay_visible,
+ inputs=[delay_batch],
+ outputs=[delay_seconds_batch, delay_feedback_batch, delay_mix_batch],
+ )
+ autotune_batch.change(
+ fn=toggle_visible,
+ inputs=[autotune_batch],
+ outputs=[autotune_strength_batch],
+ )
+ clean_audio_batch.change(
+ fn=toggle_visible,
+ inputs=[clean_audio_batch],
+ outputs=[clean_strength_batch],
+ )
+ f0_method.change(
+ fn=toggle_visible_hop_length,
+ inputs=[f0_method],
+ outputs=[hop_length],
+ )
+ f0_method_batch.change(
+ fn=toggle_visible_hop_length,
+ inputs=[f0_method_batch],
+ outputs=[hop_length_batch],
+ )
+ refresh_button.click(
+ fn=change_choices,
+ inputs=[model_file],
+ outputs=[model_file, index_file, audio, sid, sid_batch],
+ )
+ audio.change(
+ fn=output_path_fn,
+ inputs=[audio],
+ outputs=[output_path],
+ )
+ upload_audio.upload(
+ fn=save_to_wav2,
+ inputs=[upload_audio],
+ outputs=[audio, output_path],
+ )
+ upload_audio.stop_recording(
+ fn=save_to_wav,
+ inputs=[upload_audio],
+ outputs=[audio, output_path],
+ )
+ clear_outputs_infer.click(
+ fn=delete_outputs,
+ inputs=[],
+ outputs=[],
+ )
+ clear_outputs_batch.click(
+ fn=delete_outputs,
+ inputs=[],
+ outputs=[],
+ )
+ embedder_model.change(
+ fn=toggle_visible_embedder_custom,
+ inputs=[embedder_model],
+ outputs=[embedder_custom],
+ )
+ embedder_model_batch.change(
+ fn=toggle_visible_embedder_custom,
+ inputs=[embedder_model_batch],
+ outputs=[embedder_custom_batch],
+ )
+ move_files_button.click(
+ fn=create_folder_and_move_files,
+ inputs=[folder_name_input, bin_file_upload, config_file_upload],
+ outputs=[],
+ )
+ refresh_embedders_button.click(
+ fn=lambda: gr.update(choices=refresh_embedders_folders()),
+ inputs=[],
+ outputs=[embedder_model_custom],
+ )
+ move_files_button_batch.click(
+ fn=create_folder_and_move_files,
+ inputs=[
+ folder_name_input_batch,
+ bin_file_upload_batch,
+ config_file_upload_batch,
+ ],
+ outputs=[],
+ )
+ refresh_embedders_button_batch.click(
+ fn=lambda: gr.update(choices=refresh_embedders_folders()),
+ inputs=[],
+ outputs=[embedder_model_custom_batch],
+ )
+ convert_button1.click(
+ fn=run_infer_script,
+ inputs=[
+ pitch,
+ filter_radius,
+ index_rate,
+ rms_mix_rate,
+ protect,
+ hop_length,
+ f0_method,
+ audio,
+ output_path,
+ model_file,
+ index_file,
+ split_audio,
+ autotune,
+ autotune_strength,
+ clean_audio,
+ clean_strength,
+ export_format,
+ upscale_audio,
+ f0_file,
+ embedder_model,
+ embedder_model_custom,
+ formant_shifting,
+ formant_qfrency,
+ formant_timbre,
+ post_process,
+ reverb,
+ pitch_shift,
+ limiter,
+ gain,
+ distortion,
+ chorus,
+ bitcrush,
+ clipping,
+ compressor,
+ delay,
+ reverb_room_size,
+ reverb_damping,
+ reverb_wet_gain,
+ reverb_dry_gain,
+ reverb_width,
+ reverb_freeze_mode,
+ pitch_shift_semitones,
+ limiter_threshold,
+ limiter_release_time,
+ gain_db,
+ distortion_gain,
+ chorus_rate,
+ chorus_depth,
+ chorus_center_delay,
+ chorus_feedback,
+ chorus_mix,
+ bitcrush_bit_depth,
+ clipping_threshold,
+ compressor_threshold,
+ compressor_ratio,
+ compressor_attack,
+ compressor_release,
+ delay_seconds,
+ delay_feedback,
+ delay_mix,
+ sid,
+ ],
+ outputs=[vc_output1, vc_output2],
+ )
+ convert_button2.click(
+ fn=run_batch_infer_script,
+ inputs=[
+ pitch_batch,
+ filter_radius_batch,
+ index_rate_batch,
+ rms_mix_rate_batch,
+ protect_batch,
+ hop_length_batch,
+ f0_method_batch,
+ input_folder_batch,
+ output_folder_batch,
+ model_file,
+ index_file,
+ split_audio_batch,
+ autotune_batch,
+ autotune_strength_batch,
+ clean_audio_batch,
+ clean_strength_batch,
+ export_format_batch,
+ upscale_audio_batch,
+ f0_file_batch,
+ embedder_model_batch,
+ embedder_model_custom_batch,
+ formant_shifting_batch,
+ formant_qfrency_batch,
+ formant_timbre_batch,
+ post_process_batch,
+ reverb_batch,
+ pitch_shift_batch,
+ limiter_batch,
+ gain_batch,
+ distortion_batch,
+ chorus_batch,
+ bitcrush_batch,
+ clipping_batch,
+ compressor_batch,
+ delay_batch,
+ reverb_room_size_batch,
+ reverb_damping_batch,
+ reverb_wet_gain_batch,
+ reverb_dry_gain_batch,
+ reverb_width_batch,
+ reverb_freeze_mode_batch,
+ pitch_shift_semitones_batch,
+ limiter_threshold_batch,
+ limiter_release_time_batch,
+ gain_db_batch,
+ distortion_gain_batch,
+ chorus_rate_batch,
+ chorus_depth_batch,
+ chorus_center_delay_batch,
+ chorus_feedback_batch,
+ chorus_mix_batch,
+ bitcrush_bit_depth_batch,
+ clipping_threshold_batch,
+ compressor_threshold_batch,
+ compressor_ratio_batch,
+ compressor_attack_batch,
+ compressor_release_batch,
+ delay_seconds_batch,
+ delay_feedback_batch,
+ delay_mix_batch,
+ sid_batch,
+ ],
+ outputs=[vc_output3],
+ )
+ convert_button2.click(
+ fn=enable_stop_convert_button,
+ inputs=[],
+ outputs=[convert_button2, stop_button],
+ )
+ stop_button.click(
+ fn=disable_stop_convert_button,
+ inputs=[],
+ outputs=[convert_button2, stop_button],
+ )
diff --git a/tabs/plugins/plugins.py b/tabs/plugins/plugins.py
new file mode 100644
index 0000000000000000000000000000000000000000..afa1d5c92a7fda40405bb219307751ed8f2fc45b
--- /dev/null
+++ b/tabs/plugins/plugins.py
@@ -0,0 +1,34 @@
+import os, sys
+import gradio as gr
+import importlib.util
+import tabs.plugins.plugins_core as plugins_core
+
+from assets.i18n.i18n import I18nAuto
+
+i18n = I18nAuto()
+
+now_dir = os.getcwd()
+sys.path.append(now_dir)
+
+plugins_core.check_new_folders()
+
+
+def plugins_tab():
+ with gr.TabItem(i18n("Plugin Installer")):
+ dropbox = gr.File(
+ label=i18n("Drag your plugin.zip to install it"),
+ type="filepath",
+ )
+
+ dropbox.upload(
+ fn=plugins_core.save_plugin_dropbox,
+ inputs=[dropbox],
+ outputs=[dropbox],
+ )
+
+ for plugin in os.listdir(os.path.join(now_dir, "tabs", "plugins", "installed")):
+ plugin_main = f"tabs.plugins.installed.{plugin}.plugin"
+ plugin_import = importlib.import_module(plugin_main)
+
+ with gr.TabItem(plugin):
+ plugin_import.applio_plugin()
diff --git a/tabs/plugins/plugins_core.py b/tabs/plugins/plugins_core.py
new file mode 100644
index 0000000000000000000000000000000000000000..51f133789f7efeab1a2ef42b581c1e560a8c93b3
--- /dev/null
+++ b/tabs/plugins/plugins_core.py
@@ -0,0 +1,134 @@
+import os, sys, shutil
+import json
+import gradio as gr
+import zipfile
+import subprocess
+
+from assets.i18n.i18n import I18nAuto
+
+i18n = I18nAuto()
+
+now_dir = os.getcwd()
+sys.path.append(now_dir)
+
+from tabs.settings.sections.restart import restart_applio
+
+plugins_path = os.path.join(now_dir, "tabs", "plugins", "installed")
+if not os.path.exists(plugins_path):
+ os.makedirs(plugins_path)
+json_file_path = os.path.join(now_dir, "assets", "config.json")
+current_folders = os.listdir(plugins_path)
+
+
+def get_existing_folders():
+ if os.path.exists(json_file_path):
+ with open(json_file_path, "r") as file:
+ config = json.load(file)
+ return config["plugins"]
+ else:
+ return []
+
+
+def save_existing_folders(existing_folders):
+ with open(json_file_path, "r") as file:
+ config = json.load(file)
+ config["plugins"] = existing_folders
+ with open(json_file_path, "w") as file:
+ json.dump(config, file, indent=2)
+
+
+def save_plugin_dropbox(dropbox):
+ if "zip" not in dropbox:
+ raise gr.Error(
+ message="The file you dropped is not a valid plugin.zip. Please try again."
+ )
+ else:
+ file_name = os.path.basename(dropbox)
+ folder_name = file_name.split(".zip")[0]
+ folder_path = os.path.join(plugins_path, folder_name)
+ zip_file_path = os.path.join(plugins_path, file_name)
+
+ if os.path.exists(folder_name):
+ os.remove(folder_name)
+
+ shutil.move(dropbox, os.path.join(plugins_path, file_name))
+ print("Proceeding with the extraction...")
+
+ with zipfile.ZipFile(zip_file_path, "r") as zip_ref:
+ zip_ref.extractall(plugins_path)
+ os.remove(zip_file_path)
+
+ if os.path.exists(os.path.join(folder_path, "requirements.txt")):
+ if os.name == "nt":
+ subprocess.run(
+ [
+ os.path.join("env", "python.exe"),
+ "-m",
+ "pip",
+ "install",
+ "-r",
+ os.path.join(folder_path, "requirements.txt"),
+ ]
+ )
+ else:
+ subprocess.run(
+ [
+ "python",
+ "-m",
+ "pip",
+ "install",
+ "-r",
+ os.path.join(folder_path, "requirements.txt"),
+ ]
+ )
+ else:
+ print("No requirements.txt file found in the plugin folder.")
+
+ save_existing_folders(get_existing_folders() + [folder_name])
+
+ print(
+ f"{folder_name} plugin installed in {plugins_path}! Restarting applio to apply the changes."
+ )
+ gr.Info(
+ f"{folder_name} plugin installed in {plugins_path}! Restarting applio to apply the changes."
+ )
+ restart_applio()
+ return None
+
+
+def check_new_folders():
+ existing_folders = get_existing_folders()
+ new_folders = set(current_folders) - set(existing_folders)
+ save_existing_folders(current_folders)
+ if new_folders:
+ for new_folder in new_folders:
+ complete_path = os.path.join(plugins_path, new_folder)
+ print(f"New plugin {new_folder} found, installing it...")
+
+ if os.path.exists(os.path.join(complete_path, "requirements.txt")):
+ if os.name == "nt":
+ subprocess.run(
+ [
+ os.path.join("env", "python.exe"),
+ "-m",
+ "pip",
+ "install",
+ "-r",
+ os.path.join(complete_path, "requirements.txt"),
+ ]
+ )
+ else:
+ subprocess.run(
+ [
+ "python",
+ "-m",
+ "pip",
+ "install",
+ "-r",
+ os.path.join(complete_path, "requirements.txt"),
+ ]
+ )
+ else:
+ print("No requirements.txt file found in the plugin folder.")
+ print("Plugins checked and installed! Restarting applio to apply the changes.")
+ restart_applio()
diff --git a/tabs/report/main.js b/tabs/report/main.js
new file mode 100644
index 0000000000000000000000000000000000000000..755cb9ab442c247cab0ab647e1599481bff491aa
--- /dev/null
+++ b/tabs/report/main.js
@@ -0,0 +1,74 @@
+// main.js
+if (!ScreenCastRecorder.isSupportedBrowser()) {
+ console.error("Screen Recording not supported in this browser");
+}
+let recorder;
+let outputBlob;
+const stopRecording = () => __awaiter(void 0, void 0, void 0, function* () {
+ let currentState = "RECORDING";
+ // We should do nothing if the user try to stop recording when it is not started
+ if (currentState === "OFF" || recorder == null) {
+ return;
+ }
+ // if (currentState === "COUNTDOWN") {
+ // this.setState({
+ // currentState: "OFF",
+ // })
+ // }
+ if (currentState === "RECORDING") {
+ if (recorder.getState() === "inactive") {
+ // this.setState({
+ // currentState: "OFF",
+ // })
+ console.log("Inactive");
+ }
+ else {
+ outputBlob = yield recorder.stop();
+ console.log("Done recording");
+ // this.setState({
+ // outputBlob,
+ // currentState: "PREVIEW_FILE",
+ // })
+ window.currentState = "PREVIEW_FILE";
+ const videoSource = URL.createObjectURL(outputBlob);
+ window.videoSource = videoSource;
+ const fileName = "recording";
+ const link = document.createElement("a");
+ link.setAttribute("href", videoSource);
+ link.setAttribute("download", `${fileName}.webm`);
+ link.click();
+ }
+ }
+});
+const startRecording = () => __awaiter(void 0, void 0, void 0, function* () {
+ const recordAudio = false;
+ recorder = new ScreenCastRecorder({
+ recordAudio,
+ onErrorOrStop: () => stopRecording(),
+ });
+ try {
+ yield recorder.initialize();
+ }
+ catch (e) {
+ console.warn(`ScreenCastRecorder.initialize error: ${e}`);
+ // this.setState({ currentState: "UNSUPPORTED" })
+ window.currentState = "UNSUPPORTED";
+ return;
+ }
+ // this.setState({ currentState: "COUNTDOWN" })
+ const hasStarted = recorder.start();
+ if (hasStarted) {
+ // this.setState({
+ // currentState: "RECORDING",
+ // })
+ console.log("Started recording");
+ window.currentState = "RECORDING";
+ }
+ else {
+ stopRecording().catch(err => console.warn(`withScreencast.stopRecording threw an error: ${err}`));
+ }
+});
+
+// Set global functions to window.
+window.startRecording = startRecording;
+window.stopRecording = stopRecording;
\ No newline at end of file
diff --git a/tabs/report/record_button.js b/tabs/report/record_button.js
new file mode 100644
index 0000000000000000000000000000000000000000..aa4fbf33fdaee2635cefc931ef0a786d5b06824a
--- /dev/null
+++ b/tabs/report/record_button.js
@@ -0,0 +1,40 @@
+// Setup if needed and start recording.
+async () => {
+ // Set up recording functions if not already initialized
+ if (!window.startRecording) {
+ let recorder_js = null;
+ let main_js = null;
+ }
+
+ // Function to fetch and convert video blob to base64 using async/await without explicit Promise
+ async function getVideoBlobAsBase64(objectURL) {
+ const response = await fetch(objectURL);
+ if (!response.ok) {
+ throw new Error('Failed to fetch video blob.');
+ }
+
+ const blob = await response.blob();
+
+ const reader = new FileReader();
+ reader.readAsDataURL(blob);
+
+ return new Promise((resolve, reject) => {
+ reader.onloadend = () => {
+ if (reader.result) {
+ resolve(reader.result.split(',')[1]); // Return the base64 string (without data URI prefix)
+ } else {
+ reject('Failed to convert blob to base64.');
+ }
+ };
+ });
+ }
+
+ if (window.currentState === "RECORDING") {
+ await window.stopRecording();
+ const base64String = await getVideoBlobAsBase64(window.videoSource);
+ return base64String;
+ } else {
+ window.startRecording();
+ return "Record";
+ }
+}
diff --git a/tabs/report/recorder.js b/tabs/report/recorder.js
new file mode 100644
index 0000000000000000000000000000000000000000..d054437c04bacb705425f9cd7c6783e3895fade1
--- /dev/null
+++ b/tabs/report/recorder.js
@@ -0,0 +1,112 @@
+// recorder.js
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+const BLOB_TYPE = "video/webm";
+class ScreenCastRecorder {
+ /** True if the current browser likely supports screencasts. */
+ static isSupportedBrowser() {
+ return (navigator.mediaDevices != null &&
+ navigator.mediaDevices.getUserMedia != null &&
+ navigator.mediaDevices.getDisplayMedia != null &&
+ MediaRecorder.isTypeSupported(BLOB_TYPE));
+ }
+ constructor({ recordAudio, onErrorOrStop }) {
+ this.recordAudio = recordAudio;
+ this.onErrorOrStopCallback = onErrorOrStop;
+ this.inputStream = null;
+ this.recordedChunks = [];
+ this.mediaRecorder = null;
+ }
+ /**
+ * This asynchronous method will initialize the screen recording object asking
+ * for permissions to the user which are needed to start recording.
+ */
+ initialize() {
+ return __awaiter(this, void 0, void 0, function* () {
+ const desktopStream = yield navigator.mediaDevices.getDisplayMedia({
+ video: true,
+ });
+ let tracks = desktopStream.getTracks();
+ if (this.recordAudio) {
+ const voiceStream = yield navigator.mediaDevices.getUserMedia({
+ video: false,
+ audio: true,
+ });
+ tracks = tracks.concat(voiceStream.getAudioTracks());
+ }
+ this.recordedChunks = [];
+ this.inputStream = new MediaStream(tracks);
+ this.mediaRecorder = new MediaRecorder(this.inputStream, {
+ mimeType: BLOB_TYPE,
+ });
+ this.mediaRecorder.ondataavailable = e => this.recordedChunks.push(e.data);
+ });
+ }
+ getState() {
+ if (this.mediaRecorder) {
+ return this.mediaRecorder.state;
+ }
+ return "inactive";
+ }
+ /**
+ * This method will start the screen recording if the user has granted permissions
+ * and the mediaRecorder has been initialized
+ *
+ * @returns {boolean}
+ */
+ start() {
+ if (!this.mediaRecorder) {
+ console.warn(`ScreenCastRecorder.start: mediaRecorder is null`);
+ return false;
+ }
+ const logRecorderError = (e) => {
+ console.warn(`mediaRecorder.start threw an error: ${e}`);
+ };
+ this.mediaRecorder.onerror = (e) => {
+ logRecorderError(e);
+ this.onErrorOrStopCallback();
+ };
+ this.mediaRecorder.onstop = () => this.onErrorOrStopCallback();
+ try {
+ this.mediaRecorder.start();
+ }
+ catch (e) {
+ logRecorderError(e);
+ return false;
+ }
+ return true;
+ }
+ /**
+ * This method will stop recording and then return the generated Blob
+ *
+ * @returns {(Promise|undefined)}
+ * A Promise which will return the generated Blob
+ * Undefined if the MediaRecorder could not initialize
+ */
+ stop() {
+ if (!this.mediaRecorder) {
+ return undefined;
+ }
+ let resolver;
+ const promise = new Promise(r => {
+ resolver = r;
+ });
+ this.mediaRecorder.onstop = () => resolver();
+ this.mediaRecorder.stop();
+ if (this.inputStream) {
+ this.inputStream.getTracks().forEach(s => s.stop());
+ this.inputStream = null;
+ }
+ return promise.then(() => this.buildOutputBlob());
+ }
+ buildOutputBlob() {
+ return new Blob(this.recordedChunks, { type: BLOB_TYPE });
+ }
+}
\ No newline at end of file
diff --git a/tabs/report/report.py b/tabs/report/report.py
new file mode 100644
index 0000000000000000000000000000000000000000..0f13e14c487fe45e739bd92495fb96572af001c7
--- /dev/null
+++ b/tabs/report/report.py
@@ -0,0 +1,80 @@
+import os
+import sys
+import base64
+import pathlib
+import tempfile
+import gradio as gr
+
+from assets.i18n.i18n import I18nAuto
+
+now_dir = os.getcwd()
+sys.path.append(now_dir)
+
+i18n = I18nAuto()
+
+recorder_js_path = os.path.join(now_dir, "tabs", "report", "recorder.js")
+main_js_path = os.path.join(now_dir, "tabs", "report", "main.js")
+record_button_js_path = os.path.join(now_dir, "tabs", "report", "record_button.js")
+
+recorder_js = pathlib.Path(recorder_js_path).read_text()
+main_js = pathlib.Path(main_js_path).read_text()
+record_button_js = (
+ pathlib.Path(record_button_js_path)
+ .read_text()
+ .replace("let recorder_js = null;", recorder_js)
+ .replace("let main_js = null;", main_js)
+)
+
+
+def save_base64_video(base64_string):
+ base64_video = base64_string
+ video_data = base64.b64decode(base64_video)
+ with tempfile.NamedTemporaryFile(suffix=".mp4", delete=False) as temp_file:
+ temp_filename = temp_file.name
+ temp_file.write(video_data)
+ print(f"Temporary MP4 file saved as: {temp_filename}")
+ return temp_filename
+
+
+def report_tab():
+ instructions = [
+ i18n("# How to Report an Issue on GitHub"),
+ i18n(
+ "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing."
+ ),
+ i18n(
+ "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not)."
+ ),
+ i18n(
+ "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button."
+ ),
+ i18n(
+ "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step."
+ ),
+ ]
+ components = [gr.Markdown(value=instruction) for instruction in instructions]
+
+ start_button = gr.Button("Record Screen")
+ video_component = gr.Video(interactive=False)
+
+ def toggle_button_label(returned_string):
+ if returned_string.startswith("Record"):
+ return gr.Button(value="Stop Recording"), None
+ else:
+ try:
+ temp_filename = save_base64_video(returned_string)
+ except Exception as error:
+ print(f"An error occurred converting video to mp4: {error}")
+ return gr.Button(value="Record Screen"), gr.Warning(
+ f"Failed to convert video to mp4:\n{error}"
+ )
+ return gr.Button(value="Record Screen"), gr.Video(
+ value=temp_filename, interactive=False
+ )
+
+ start_button.click(
+ fn=toggle_button_label,
+ inputs=[start_button],
+ outputs=[start_button, video_component],
+ js=record_button_js,
+ )
diff --git a/tabs/settings/sections/flask_server.py b/tabs/settings/sections/flask_server.py
new file mode 100644
index 0000000000000000000000000000000000000000..40e3edfd0b85d0ede49985946c37f3c9be093329
--- /dev/null
+++ b/tabs/settings/sections/flask_server.py
@@ -0,0 +1,43 @@
+import os
+import sys
+import gradio as gr
+from assets.i18n.i18n import I18nAuto
+import requests
+
+now_dir = os.getcwd()
+sys.path.append(now_dir)
+
+from assets.flask.server import start_flask, load_config_flask, save_config
+
+i18n = I18nAuto()
+
+
+def flask_server_tab():
+ with gr.Row():
+ with gr.Column():
+ flask_checkbox = gr.Checkbox(
+ label=i18n(
+ "Enable Applio integration with applio.org/models using flask"
+ ),
+ info=i18n(
+ "It will activate the possibility of downloading models with a click from the website."
+ ),
+ interactive=True,
+ value=load_config_flask(),
+ )
+ flask_checkbox.change(
+ fn=toggle,
+ inputs=[flask_checkbox],
+ outputs=[],
+ )
+
+
+def toggle(checkbox):
+ save_config(bool(checkbox))
+ if load_config_flask() == True:
+ start_flask()
+ else:
+ try:
+ requests.post("http://localhost:8000/shutdown")
+ except requests.exceptions.ConnectionError:
+ pass
diff --git a/tabs/settings/sections/lang.py b/tabs/settings/sections/lang.py
new file mode 100644
index 0000000000000000000000000000000000000000..3dc8d7b8b4f2423a709d53f2ef90ebe1577f08b4
--- /dev/null
+++ b/tabs/settings/sections/lang.py
@@ -0,0 +1,57 @@
+import os, sys
+import json
+import gradio as gr
+from assets.i18n.i18n import I18nAuto
+
+now_dir = os.getcwd()
+sys.path.append(now_dir)
+
+i18n = I18nAuto()
+
+config_file = os.path.join(now_dir, "assets", "config.json")
+
+
+def get_language_settings():
+ with open(config_file, "r", encoding="utf8") as file:
+ config = json.load(file)
+
+ if config["lang"]["override"] == False:
+ return "Language automatically detected in the system"
+ else:
+ return config["lang"]["selected_lang"]
+
+
+def save_lang_settings(selected_language):
+ with open(config_file, "r", encoding="utf8") as file:
+ config = json.load(file)
+
+ if selected_language == "Language automatically detected in the system":
+ config["lang"]["override"] = False
+ else:
+ config["lang"]["override"] = True
+ config["lang"]["selected_lang"] = selected_language
+
+ gr.Info("Language have been saved. Restart Applio to apply the changes.")
+
+ with open(config_file, "w", encoding="utf8") as file:
+ json.dump(config, file, indent=2)
+
+
+def lang_tab():
+ with gr.Column():
+ selected_language = gr.Dropdown(
+ label=i18n("Language"),
+ info=i18n(
+ "Select the language you want to use. (Requires restarting Applio)"
+ ),
+ value=get_language_settings(),
+ choices=["Language automatically detected in the system"]
+ + i18n._get_available_languages(),
+ interactive=True,
+ )
+
+ selected_language.change(
+ fn=save_lang_settings,
+ inputs=[selected_language],
+ outputs=[],
+ )
diff --git a/tabs/settings/sections/model_author.py b/tabs/settings/sections/model_author.py
new file mode 100644
index 0000000000000000000000000000000000000000..4d527803cb881becd12bf522dbb6fa1d64dda703
--- /dev/null
+++ b/tabs/settings/sections/model_author.py
@@ -0,0 +1,54 @@
+import os
+import sys
+import json
+
+now_dir = os.getcwd()
+sys.path.append(now_dir)
+
+import gradio as gr
+from assets.i18n.i18n import I18nAuto
+
+i18n = I18nAuto()
+
+
+def set_model_author(model_author: str):
+ with open(os.path.join(now_dir, "assets", "config.json"), "r") as f:
+ config = json.load(f)
+
+ config["model_author"] = model_author
+
+ with open(os.path.join(now_dir, "assets", "config.json"), "w") as f:
+ json.dump(config, f, indent=4)
+
+ print(f"Model author set to {model_author}.")
+ return f"Model author set to {model_author}."
+
+
+def get_model_author():
+ with open(os.path.join(now_dir, "assets", "config.json"), "r") as f:
+ config = json.load(f)
+
+ return config["model_author"] if "model_author" in config else None
+
+
+def model_author_tab():
+ model_author_name = gr.Textbox(
+ label=i18n("Model Author Name"),
+ info=i18n("The name that will appear in the model information."),
+ value=get_model_author(),
+ placeholder=i18n("Enter your nickname"),
+ interactive=True,
+ )
+ model_author_output_info = gr.Textbox(
+ label=i18n("Output Information"),
+ info=i18n("The output information will be displayed here."),
+ value="",
+ max_lines=1,
+ )
+ button = gr.Button(i18n("Set name"))
+
+ button.click(
+ fn=set_model_author,
+ inputs=[model_author_name],
+ outputs=[model_author_output_info],
+ )
diff --git a/tabs/settings/sections/precision.py b/tabs/settings/sections/precision.py
new file mode 100644
index 0000000000000000000000000000000000000000..23e41d13395881277e76a77d64b82d64cd8b6dc5
--- /dev/null
+++ b/tabs/settings/sections/precision.py
@@ -0,0 +1,41 @@
+import gradio as gr
+
+from rvc.configs.config import Config
+
+config = Config()
+
+from assets.i18n.i18n import I18nAuto
+
+i18n = I18nAuto()
+
+
+def precision_tab():
+ with gr.Row():
+ with gr.Column():
+
+ precision = gr.Radio(
+ label=i18n("Precision"),
+ info=i18n(
+ "Select the precision you want to use for training and inference."
+ ),
+ choices=[
+ "fp16",
+ "fp32",
+ ],
+ value=config.get_precision(),
+ interactive=True,
+ )
+ precision_output = gr.Textbox(
+ label=i18n("Output Information"),
+ info=i18n("The output information will be displayed here."),
+ value="",
+ max_lines=8,
+ interactive=False,
+ )
+
+ update_button = gr.Button(i18n("Update precision"))
+ update_button.click(
+ fn=config.set_precision,
+ inputs=[precision],
+ outputs=[precision_output],
+ )
diff --git a/tabs/settings/sections/presence.py b/tabs/settings/sections/presence.py
new file mode 100644
index 0000000000000000000000000000000000000000..a4dc2e6a0f6aad731194c30c1a79cdd46544579f
--- /dev/null
+++ b/tabs/settings/sections/presence.py
@@ -0,0 +1,55 @@
+import os
+import sys
+import gradio as gr
+import json
+from assets.i18n.i18n import I18nAuto
+from assets.discord_presence import RPCManager
+
+now_dir = os.getcwd()
+sys.path.append(now_dir)
+
+i18n = I18nAuto()
+config_file = os.path.join(now_dir, "assets", "config.json")
+
+
+def load_config_presence():
+ with open(config_file, "r", encoding="utf8") as file:
+ config = json.load(file)
+ return config["discord_presence"]
+
+
+def save_config(value):
+ with open(config_file, "r", encoding="utf8") as file:
+ config = json.load(file)
+ config["discord_presence"] = value
+ with open(config_file, "w", encoding="utf8") as file:
+ json.dump(config, file, indent=2)
+
+
+def presence_tab():
+ with gr.Row():
+ with gr.Column():
+ presence = gr.Checkbox(
+ label=i18n("Enable Applio integration with Discord presence"),
+ info=i18n(
+ "It will activate the possibility of displaying the current Applio activity in Discord."
+ ),
+ interactive=True,
+ value=load_config_presence(),
+ )
+ presence.change(
+ fn=toggle,
+ inputs=[presence],
+ outputs=[],
+ )
+
+
+def toggle(checkbox):
+ save_config(bool(checkbox))
+ if load_config_presence() == True:
+ try:
+ RPCManager.start_presence()
+ except KeyboardInterrupt:
+ RPCManager.stop_presence()
+ else:
+ RPCManager.stop_presence()
diff --git a/tabs/settings/sections/restart.py b/tabs/settings/sections/restart.py
new file mode 100644
index 0000000000000000000000000000000000000000..50c3bce5850fe9dac6c11255f58cfb2f1f77951f
--- /dev/null
+++ b/tabs/settings/sections/restart.py
@@ -0,0 +1,58 @@
+import gradio as gr
+import os
+import sys
+import json
+
+now_dir = os.getcwd()
+
+
+def stop_train(model_name: str):
+ pid_file_path = os.path.join(now_dir, "logs", model_name, "config.json")
+ try:
+ with open(pid_file_path, "r") as pid_file:
+ pid_data = json.load(pid_file)
+ pids = pid_data.get("process_pids", [])
+ with open(pid_file_path, "w") as pid_file:
+ pid_data.pop("process_pids", None)
+ json.dump(pid_data, pid_file, indent=4)
+ for pid in pids:
+ os.kill(pid, 9)
+ except:
+ pass
+
+
+def stop_infer():
+ pid_file_path = os.path.join(now_dir, "assets", "infer_pid.txt")
+ try:
+ with open(pid_file_path, "r") as pid_file:
+ pids = [int(pid) for pid in pid_file.readlines()]
+ for pid in pids:
+ os.kill(pid, 9)
+ os.remove(pid_file_path)
+ except:
+ pass
+
+
+def restart_applio():
+ if os.name != "nt":
+ os.system("clear")
+ else:
+ os.system("cls")
+ python = sys.executable
+ os.execl(python, python, *sys.argv)
+
+
+from assets.i18n.i18n import I18nAuto
+
+i18n = I18nAuto()
+
+
+def restart_tab():
+ with gr.Row():
+ with gr.Column():
+ restart_button = gr.Button(i18n("Restart Applio"))
+ restart_button.click(
+ fn=restart_applio,
+ inputs=[],
+ outputs=[],
+ )
diff --git a/tabs/settings/sections/themes.py b/tabs/settings/sections/themes.py
new file mode 100644
index 0000000000000000000000000000000000000000..33ca373d0e0a7dd11269a22c46ac33e60ced1cec
--- /dev/null
+++ b/tabs/settings/sections/themes.py
@@ -0,0 +1,30 @@
+import os
+import sys
+import gradio as gr
+
+from assets.i18n.i18n import I18nAuto
+import assets.themes.loadThemes as loadThemes
+
+now_dir = os.getcwd()
+sys.path.append(now_dir)
+
+i18n = I18nAuto()
+
+
+def theme_tab():
+ with gr.Row():
+ with gr.Column():
+ themes_select = gr.Dropdown(
+ loadThemes.get_theme_list(),
+ value=loadThemes.load_theme(),
+ label=i18n("Theme"),
+ info=i18n(
+ "Select the theme you want to use. (Requires restarting Applio)"
+ ),
+ visible=True,
+ )
+ themes_select.change(
+ fn=loadThemes.select_theme,
+ inputs=themes_select,
+ outputs=[],
+ )
diff --git a/tabs/settings/sections/version.py b/tabs/settings/sections/version.py
new file mode 100644
index 0000000000000000000000000000000000000000..6bd83884c11e878923627c56d61a58e4b4d8cecf
--- /dev/null
+++ b/tabs/settings/sections/version.py
@@ -0,0 +1,24 @@
+import gradio as gr
+
+from assets.version_checker import compare_version
+from assets.i18n.i18n import I18nAuto
+
+i18n = I18nAuto()
+
+
+def version_tab():
+ with gr.Row():
+ with gr.Column():
+ version_check = gr.Textbox(
+ label=i18n("Version Checker"),
+ info=i18n(
+ "Check which version of Applio is the latest to see if you need to update."
+ ),
+ interactive=False,
+ )
+ version_button = gr.Button(i18n("Check for updates"))
+ version_button.click(
+ fn=compare_version,
+ inputs=[],
+ outputs=[version_check],
+ )
diff --git a/tabs/settings/settings.py b/tabs/settings/settings.py
new file mode 100644
index 0000000000000000000000000000000000000000..02cefebe87f15de46f7a8954801937476e22ed08
--- /dev/null
+++ b/tabs/settings/settings.py
@@ -0,0 +1,25 @@
+import os
+import sys
+
+now_dir = os.getcwd()
+sys.path.append(now_dir)
+
+from tabs.settings.sections.presence import presence_tab
+from tabs.settings.sections.flask_server import flask_server_tab
+from tabs.settings.sections.precision import precision_tab
+from tabs.settings.sections.themes import theme_tab
+from tabs.settings.sections.version import version_tab
+from tabs.settings.sections.lang import lang_tab
+from tabs.settings.sections.restart import restart_tab
+from tabs.settings.sections.model_author import model_author_tab
+
+
+def settings_tab():
+ presence_tab()
+ flask_server_tab()
+ precision_tab()
+ theme_tab()
+ version_tab()
+ lang_tab()
+ restart_tab()
+ model_author_tab()
diff --git a/tabs/train/train.py b/tabs/train/train.py
new file mode 100644
index 0000000000000000000000000000000000000000..a728e155da50453bb17a1fbd83a024468e44d9e9
--- /dev/null
+++ b/tabs/train/train.py
@@ -0,0 +1,1053 @@
+import os
+import shutil
+import sys
+from multiprocessing import cpu_count
+
+import gradio as gr
+
+from assets.i18n.i18n import I18nAuto
+from core import (
+ run_extract_script,
+ run_index_script,
+ run_preprocess_script,
+ run_prerequisites_script,
+ run_train_script,
+)
+from rvc.configs.config import get_gpu_info, get_number_of_gpus, max_vram_gpu
+from rvc.lib.utils import format_title
+from tabs.settings.sections.restart import stop_train
+
+i18n = I18nAuto()
+now_dir = os.getcwd()
+sys.path.append(now_dir)
+
+pretraineds_v1 = [
+ (
+ "pretrained_v1/",
+ [
+ "D32k.pth",
+ "D40k.pth",
+ "D48k.pth",
+ "G32k.pth",
+ "G40k.pth",
+ "G48k.pth",
+ "f0D32k.pth",
+ "f0D40k.pth",
+ "f0D48k.pth",
+ "f0G32k.pth",
+ "f0G40k.pth",
+ "f0G48k.pth",
+ ],
+ ),
+]
+
+folder_mapping = {
+ "pretrained_v1/": "rvc/models/pretraineds/pretrained_v1/",
+}
+
+sup_audioext = {
+ "wav",
+ "mp3",
+ "flac",
+ "ogg",
+ "opus",
+ "m4a",
+ "mp4",
+ "aac",
+ "alac",
+ "wma",
+ "aiff",
+ "webm",
+ "ac3",
+}
+
+# Custom Pretraineds
+pretraineds_custom_path = os.path.join(
+ now_dir, "rvc", "models", "pretraineds", "pretraineds_custom"
+)
+
+pretraineds_custom_path_relative = os.path.relpath(pretraineds_custom_path, now_dir)
+
+custom_embedder_root = os.path.join(
+ now_dir, "rvc", "models", "embedders", "embedders_custom"
+)
+custom_embedder_root_relative = os.path.relpath(custom_embedder_root, now_dir)
+
+os.makedirs(custom_embedder_root, exist_ok=True)
+os.makedirs(pretraineds_custom_path_relative, exist_ok=True)
+
+
+def get_pretrained_list(suffix):
+ return [
+ os.path.join(dirpath, filename)
+ for dirpath, _, filenames in os.walk(pretraineds_custom_path_relative)
+ for filename in filenames
+ if filename.endswith(".pth") and suffix in filename
+ ]
+
+
+pretraineds_list_d = get_pretrained_list("D")
+pretraineds_list_g = get_pretrained_list("G")
+
+
+def refresh_custom_pretraineds():
+ return (
+ {"choices": sorted(get_pretrained_list("G")), "__type__": "update"},
+ {"choices": sorted(get_pretrained_list("D")), "__type__": "update"},
+ )
+
+
+# Dataset Creator
+datasets_path = os.path.join(now_dir, "assets", "datasets")
+
+if not os.path.exists(datasets_path):
+ os.makedirs(datasets_path)
+
+datasets_path_relative = os.path.relpath(datasets_path, now_dir)
+
+
+def get_datasets_list():
+ return [
+ dirpath
+ for dirpath, _, filenames in os.walk(datasets_path_relative)
+ if any(filename.endswith(tuple(sup_audioext)) for filename in filenames)
+ ]
+
+
+def refresh_datasets():
+ return {"choices": sorted(get_datasets_list()), "__type__": "update"}
+
+
+# Model Names
+models_path = os.path.join(now_dir, "logs")
+
+
+def get_models_list():
+ return [
+ os.path.basename(dirpath)
+ for dirpath in os.listdir(models_path)
+ if os.path.isdir(os.path.join(models_path, dirpath))
+ and all(excluded not in dirpath for excluded in ["zips", "mute", "reference"])
+ ]
+
+
+def refresh_models():
+ return {"choices": sorted(get_models_list()), "__type__": "update"}
+
+
+# Refresh Models and Datasets
+def refresh_models_and_datasets():
+ return (
+ {"choices": sorted(get_models_list()), "__type__": "update"},
+ {"choices": sorted(get_datasets_list()), "__type__": "update"},
+ )
+
+
+# Refresh Custom Embedders
+def get_embedder_custom_list():
+ return [
+ os.path.join(dirpath, dirname)
+ for dirpath, dirnames, _ in os.walk(custom_embedder_root_relative)
+ for dirname in dirnames
+ ]
+
+
+def refresh_custom_embedder_list():
+ return {"choices": sorted(get_embedder_custom_list()), "__type__": "update"}
+
+
+# Drop Model
+def save_drop_model(dropbox):
+ if ".pth" not in dropbox:
+ gr.Info(
+ i18n(
+ "The file you dropped is not a valid pretrained file. Please try again."
+ )
+ )
+ else:
+ file_name = os.path.basename(dropbox)
+ pretrained_path = os.path.join(pretraineds_custom_path_relative, file_name)
+ if os.path.exists(pretrained_path):
+ os.remove(pretrained_path)
+ shutil.copy(dropbox, pretrained_path)
+ gr.Info(
+ i18n(
+ "Click the refresh button to see the pretrained file in the dropdown menu."
+ )
+ )
+ return None
+
+
+# Drop Dataset
+def save_drop_dataset_audio(dropbox, dataset_name):
+ if not dataset_name:
+ gr.Info("Please enter a valid dataset name. Please try again.")
+ return None, None
+ else:
+ file_extension = os.path.splitext(dropbox)[1][1:].lower()
+ if file_extension not in sup_audioext:
+ gr.Info("The file you dropped is not a valid audio file. Please try again.")
+ else:
+ dataset_name = format_title(dataset_name)
+ audio_file = format_title(os.path.basename(dropbox))
+ dataset_path = os.path.join(now_dir, "assets", "datasets", dataset_name)
+ if not os.path.exists(dataset_path):
+ os.makedirs(dataset_path)
+ destination_path = os.path.join(dataset_path, audio_file)
+ if os.path.exists(destination_path):
+ os.remove(destination_path)
+ shutil.copy(dropbox, destination_path)
+ gr.Info(
+ i18n(
+ "The audio file has been successfully added to the dataset. Please click the preprocess button."
+ )
+ )
+ dataset_path = os.path.dirname(destination_path)
+ relative_dataset_path = os.path.relpath(dataset_path, now_dir)
+
+ return None, relative_dataset_path
+
+
+# Drop Custom Embedder
+def create_folder_and_move_files(folder_name, bin_file, config_file):
+ if not folder_name:
+ return "Folder name must not be empty."
+
+ folder_name = os.path.join(custom_embedder_root, folder_name)
+ os.makedirs(folder_name, exist_ok=True)
+
+ if bin_file:
+ bin_file_path = os.path.join(folder_name, os.path.basename(bin_file))
+ shutil.copy(bin_file, bin_file_path)
+
+ if config_file:
+ config_file_path = os.path.join(folder_name, os.path.basename(config_file))
+ shutil.copy(config_file, config_file_path)
+
+ return f"Files moved to folder {folder_name}"
+
+
+def refresh_embedders_folders():
+ custom_embedders = [
+ os.path.join(dirpath, dirname)
+ for dirpath, dirnames, _ in os.walk(custom_embedder_root_relative)
+ for dirname in dirnames
+ ]
+ return custom_embedders
+
+
+# Export
+## Get Pth and Index Files
+def get_pth_list():
+ return [
+ os.path.relpath(os.path.join(dirpath, filename), now_dir)
+ for dirpath, _, filenames in os.walk(models_path)
+ for filename in filenames
+ if filename.endswith(".pth")
+ ]
+
+
+def get_index_list():
+ return [
+ os.path.relpath(os.path.join(dirpath, filename), now_dir)
+ for dirpath, _, filenames in os.walk(models_path)
+ for filename in filenames
+ if filename.endswith(".index") and "trained" not in filename
+ ]
+
+
+def refresh_pth_and_index_list():
+ return (
+ {"choices": sorted(get_pth_list()), "__type__": "update"},
+ {"choices": sorted(get_index_list()), "__type__": "update"},
+ )
+
+
+## Export Pth and Index Files
+def export_pth(pth_path):
+ if pth_path and os.path.exists(pth_path):
+ return pth_path
+ return None
+
+
+def export_index(index_path):
+ if index_path and os.path.exists(index_path):
+ return index_path
+ return None
+
+
+## Upload to Google Drive
+def upload_to_google_drive(pth_path, index_path):
+ def upload_file(file_path):
+ if file_path:
+ try:
+ gr.Info(f"Uploading {pth_path} to Google Drive...")
+ google_drive_folder = "/content/drive/MyDrive/ApplioExported"
+ if not os.path.exists(google_drive_folder):
+ os.makedirs(google_drive_folder)
+ google_drive_file_path = os.path.join(
+ google_drive_folder, os.path.basename(file_path)
+ )
+ if os.path.exists(google_drive_file_path):
+ os.remove(google_drive_file_path)
+ shutil.copy2(file_path, google_drive_file_path)
+ gr.Info("File uploaded successfully.")
+ except Exception as error:
+ print(f"An error occurred uploading to Google Drive: {error}")
+ gr.Info("Error uploading to Google Drive")
+
+ upload_file(pth_path)
+ upload_file(index_path)
+
+
+# Train Tab
+def train_tab():
+ with gr.Row():
+ model_name = gr.Dropdown(
+ label=i18n("Model Name"),
+ info=i18n("Name of the new model."),
+ choices=get_models_list(),
+ value="my-project",
+ interactive=True,
+ allow_custom_value=True,
+ )
+ sampling_rate = gr.Radio(
+ label=i18n("Sampling Rate"),
+ info=i18n("The sampling rate of the audio files."),
+ choices=["32000", "40000", "48000"],
+ value="40000",
+ interactive=True,
+ )
+ rvc_version = gr.Radio(
+ label=i18n("Model Architecture"),
+ info=i18n("Version of the model architecture."),
+ choices=["v1", "v2"],
+ value="v2",
+ interactive=True,
+ visible=False,
+ )
+ with gr.Accordion(i18n("Preprocess")):
+ dataset_path = gr.Dropdown(
+ label=i18n("Dataset Path"),
+ info=i18n("Path to the dataset folder."),
+ # placeholder=i18n("Enter dataset path"),
+ choices=get_datasets_list(),
+ allow_custom_value=True,
+ interactive=True,
+ )
+ dataset_creator = gr.Checkbox(
+ label=i18n("Dataset Creator"),
+ value=False,
+ interactive=True,
+ visible=True,
+ )
+ with gr.Column(visible=False) as dataset_creator_settings:
+ with gr.Accordion(i18n("Dataset Creator")):
+ dataset_name = gr.Textbox(
+ label=i18n("Dataset Name"),
+ info=i18n("Name of the new dataset."),
+ placeholder=i18n("Enter dataset name"),
+ interactive=True,
+ )
+ upload_audio_dataset = gr.File(
+ label=i18n("Upload Audio Dataset"),
+ type="filepath",
+ interactive=True,
+ )
+ refresh = gr.Button(i18n("Refresh"))
+
+ with gr.Accordion(i18n("Advanced Settings"), open=False):
+ cpu_cores_preprocess = gr.Slider(
+ 1,
+ min(cpu_count(), 32), # max 32 parallel processes
+ min(cpu_count(), 32),
+ step=1,
+ label=i18n("CPU Cores"),
+ info=i18n(
+ "The number of CPU cores to use in the preprocess. The default setting are your cpu cores, which is recommended for most cases."
+ ),
+ interactive=True,
+ )
+ with gr.Row():
+ cut_preprocess = gr.Checkbox(
+ label=i18n("Audio cutting"),
+ info=i18n(
+ "It's recommended to deactivate this option if your dataset has already been processed."
+ ),
+ value=True,
+ interactive=True,
+ visible=True,
+ )
+ process_effects = gr.Checkbox(
+ label=i18n("Process effects"),
+ info=i18n(
+ "It's recommended to deactivate this option if your dataset has already been processed."
+ ),
+ value=True,
+ interactive=True,
+ visible=True,
+ )
+ with gr.Row():
+ noise_reduction = gr.Checkbox(
+ label=i18n("Noise Reduction"),
+ info=i18n(
+ "It's recommended keep deactivate this option if your dataset has already been processed."
+ ),
+ value=False,
+ interactive=True,
+ visible=True,
+ )
+ clean_strength = gr.Slider(
+ minimum=0,
+ maximum=1,
+ label=i18n("Noise Reduction Strength"),
+ info=i18n(
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed."
+ ),
+ visible=False,
+ value=0.5,
+ interactive=True,
+ )
+ preprocess_output_info = gr.Textbox(
+ label=i18n("Output Information"),
+ info=i18n("The output information will be displayed here."),
+ value="",
+ max_lines=8,
+ interactive=False,
+ )
+
+ with gr.Row():
+ preprocess_button = gr.Button(i18n("Preprocess Dataset"))
+ preprocess_button.click(
+ fn=run_preprocess_script,
+ inputs=[
+ model_name,
+ dataset_path,
+ sampling_rate,
+ cpu_cores_preprocess,
+ cut_preprocess,
+ process_effects,
+ noise_reduction,
+ clean_strength,
+ ],
+ outputs=[preprocess_output_info],
+ )
+
+ with gr.Accordion(i18n("Extract")):
+ with gr.Row():
+ f0_method = gr.Radio(
+ label=i18n("Pitch extraction algorithm"),
+ info=i18n(
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases."
+ ),
+ choices=["crepe", "crepe-tiny", "rmvpe"],
+ value="rmvpe",
+ interactive=True,
+ )
+
+ embedder_model = gr.Radio(
+ label=i18n("Embedder Model"),
+ info=i18n("Model used for learning speaker embedding."),
+ choices=[
+ "contentvec",
+ "chinese-hubert-base",
+ "japanese-hubert-base",
+ "korean-hubert-base",
+ "custom",
+ ],
+ value="contentvec",
+ interactive=True,
+ )
+
+ hop_length = gr.Slider(
+ 1,
+ 512,
+ 128,
+ step=1,
+ label=i18n("Hop Length"),
+ info=i18n(
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy."
+ ),
+ visible=False,
+ interactive=True,
+ )
+ with gr.Row(visible=False) as embedder_custom:
+ with gr.Accordion("Custom Embedder", open=True):
+ with gr.Row():
+ embedder_model_custom = gr.Dropdown(
+ label="Select Custom Embedder",
+ choices=refresh_embedders_folders(),
+ interactive=True,
+ allow_custom_value=True,
+ )
+ refresh_embedders_button = gr.Button("Refresh embedders")
+ folder_name_input = gr.Textbox(label="Folder Name", interactive=True)
+ with gr.Row():
+ bin_file_upload = gr.File(
+ label="Upload .bin", type="filepath", interactive=True
+ )
+ config_file_upload = gr.File(
+ label="Upload .json", type="filepath", interactive=True
+ )
+ move_files_button = gr.Button("Move files to custom embedder folder")
+
+ with gr.Accordion(
+ i18n(
+ "We prioritize running the model extraction on the GPU for faster performance. If you prefer to use the CPU, simply leave the GPU field blank."
+ ),
+ open=False,
+ ):
+ with gr.Row():
+ with gr.Column():
+ cpu_cores_extract = gr.Slider(
+ 1,
+ min(cpu_count(), 32), # max 32 parallel processes
+ min(cpu_count(), 32),
+ step=1,
+ label=i18n("CPU Cores"),
+ info=i18n(
+ "The number of CPU cores to use in the extraction process. The default setting are your cpu cores, which is recommended for most cases."
+ ),
+ interactive=True,
+ )
+
+ with gr.Column():
+ gpu_extract = gr.Textbox(
+ label=i18n("GPU Number"),
+ info=i18n(
+ "Specify the number of GPUs you wish to utilize for extracting by entering them separated by hyphens (-)."
+ ),
+ placeholder=i18n("0 to ∞ separated by -"),
+ value=str(get_number_of_gpus()),
+ interactive=True,
+ )
+ gr.Textbox(
+ label=i18n("GPU Information"),
+ info=i18n("The GPU information will be displayed here."),
+ value=get_gpu_info(),
+ interactive=False,
+ )
+
+ extract_output_info = gr.Textbox(
+ label=i18n("Output Information"),
+ info=i18n("The output information will be displayed here."),
+ value="",
+ max_lines=8,
+ interactive=False,
+ )
+ extract_button = gr.Button(i18n("Extract Features"))
+ extract_button.click(
+ fn=run_extract_script,
+ inputs=[
+ model_name,
+ rvc_version,
+ f0_method,
+ hop_length,
+ cpu_cores_extract,
+ gpu_extract,
+ sampling_rate,
+ embedder_model,
+ embedder_model_custom,
+ ],
+ outputs=[extract_output_info],
+ )
+
+ with gr.Accordion(i18n("Training")):
+ with gr.Row():
+ batch_size = gr.Slider(
+ 1,
+ 50,
+ max_vram_gpu(0),
+ step=1,
+ label=i18n("Batch Size"),
+ info=i18n(
+ "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results."
+ ),
+ interactive=True,
+ )
+ save_every_epoch = gr.Slider(
+ 1,
+ 100,
+ 10,
+ step=1,
+ label=i18n("Save Every Epoch"),
+ info=i18n("Determine at how many epochs the model will saved at."),
+ interactive=True,
+ )
+ total_epoch = gr.Slider(
+ 1,
+ 10000,
+ 500,
+ step=1,
+ label=i18n("Total Epoch"),
+ info=i18n(
+ "Specifies the overall quantity of epochs for the model training process."
+ ),
+ interactive=True,
+ )
+ with gr.Accordion(i18n("Advanced Settings"), open=False):
+ with gr.Row():
+ with gr.Column():
+ save_only_latest = gr.Checkbox(
+ label=i18n("Save Only Latest"),
+ info=i18n(
+ "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space."
+ ),
+ value=True,
+ interactive=True,
+ )
+ save_every_weights = gr.Checkbox(
+ label=i18n("Save Every Weights"),
+ info=i18n(
+ "This setting enables you to save the weights of the model at the conclusion of each epoch."
+ ),
+ value=True,
+ interactive=True,
+ )
+ pretrained = gr.Checkbox(
+ label=i18n("Pretrained"),
+ info=i18n(
+ "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality."
+ ),
+ value=True,
+ interactive=True,
+ )
+ with gr.Column():
+ cleanup = gr.Checkbox(
+ label=i18n("Fresh Training"),
+ info=i18n(
+ "Enable this setting only if you are training a new model from scratch or restarting the training. Deletes all previously generated weights and tensorboard logs."
+ ),
+ value=False,
+ interactive=True,
+ )
+ cache_dataset_in_gpu = gr.Checkbox(
+ label=i18n("Cache Dataset in GPU"),
+ info=i18n(
+ "Cache the dataset in GPU memory to speed up the training process."
+ ),
+ value=False,
+ interactive=True,
+ )
+ pitch_guidance = gr.Checkbox(
+ label=i18n("Pitch Guidance"),
+ info=i18n(
+ "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential."
+ ),
+ value=True,
+ interactive=True,
+ )
+ with gr.Column():
+ custom_pretrained = gr.Checkbox(
+ label=i18n("Custom Pretrained"),
+ info=i18n(
+ "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance."
+ ),
+ value=False,
+ interactive=True,
+ )
+ with gr.Column(visible=False) as pretrained_custom_settings:
+ with gr.Accordion(i18n("Pretrained Custom Settings")):
+ upload_pretrained = gr.File(
+ label=i18n("Upload Pretrained Model"),
+ type="filepath",
+ interactive=True,
+ )
+ refresh_custom_pretaineds_button = gr.Button(
+ i18n("Refresh Custom Pretraineds")
+ )
+ g_pretrained_path = gr.Dropdown(
+ label=i18n("Custom Pretrained G"),
+ info=i18n(
+ "Select the custom pretrained model for the generator."
+ ),
+ choices=sorted(pretraineds_list_g),
+ interactive=True,
+ allow_custom_value=True,
+ )
+ d_pretrained_path = gr.Dropdown(
+ label=i18n("Custom Pretrained D"),
+ info=i18n(
+ "Select the custom pretrained model for the discriminator."
+ ),
+ choices=sorted(pretraineds_list_d),
+ interactive=True,
+ allow_custom_value=True,
+ )
+ multiple_gpu = gr.Checkbox(
+ label=i18n("GPU Settings"),
+ info=(
+ i18n(
+ "Sets advanced GPU settings, recommended for users with better GPU architecture."
+ )
+ ),
+ value=False,
+ interactive=True,
+ )
+ with gr.Column(visible=False) as gpu_custom_settings:
+ with gr.Accordion(i18n("GPU Settings")):
+ gpu = gr.Textbox(
+ label=i18n("GPU Number"),
+ info=i18n(
+ "Specify the number of GPUs you wish to utilize for training by entering them separated by hyphens (-)."
+ ),
+ placeholder=i18n("0 to ∞ separated by -"),
+ value=str(get_number_of_gpus()),
+ interactive=True,
+ )
+ gr.Textbox(
+ label=i18n("GPU Information"),
+ info=i18n("The GPU information will be displayed here."),
+ value=get_gpu_info(),
+ interactive=False,
+ )
+ overtraining_detector = gr.Checkbox(
+ label=i18n("Overtraining Detector"),
+ info=i18n(
+ "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data."
+ ),
+ value=False,
+ interactive=True,
+ )
+ with gr.Column(visible=False) as overtraining_settings:
+ with gr.Accordion(i18n("Overtraining Detector Settings")):
+ overtraining_threshold = gr.Slider(
+ 1,
+ 100,
+ 50,
+ step=1,
+ label=i18n("Overtraining Threshold"),
+ info=i18n(
+ "Set the maximum number of epochs you want your model to stop training if no improvement is detected."
+ ),
+ interactive=True,
+ )
+ index_algorithm = gr.Radio(
+ label=i18n("Index Algorithm"),
+ info=i18n(
+ "KMeans is a clustering algorithm that divides the dataset into K clusters. This setting is particularly useful for large datasets."
+ ),
+ choices=["Auto", "Faiss", "KMeans"],
+ value="Auto",
+ interactive=True,
+ )
+
+ with gr.Row():
+ train_output_info = gr.Textbox(
+ label=i18n("Output Information"),
+ info=i18n("The output information will be displayed here."),
+ value="",
+ max_lines=8,
+ interactive=False,
+ )
+
+ with gr.Row():
+ train_button = gr.Button(i18n("Start Training"))
+ train_button.click(
+ fn=run_train_script,
+ inputs=[
+ model_name,
+ rvc_version,
+ save_every_epoch,
+ save_only_latest,
+ save_every_weights,
+ total_epoch,
+ sampling_rate,
+ batch_size,
+ gpu,
+ pitch_guidance,
+ overtraining_detector,
+ overtraining_threshold,
+ pretrained,
+ cleanup,
+ index_algorithm,
+ cache_dataset_in_gpu,
+ custom_pretrained,
+ g_pretrained_path,
+ d_pretrained_path,
+ ],
+ outputs=[train_output_info],
+ )
+
+ stop_train_button = gr.Button(i18n("Stop Training"), visible=False)
+ stop_train_button.click(
+ fn=stop_train,
+ inputs=[model_name],
+ outputs=[],
+ )
+
+ index_button = gr.Button(i18n("Generate Index"))
+ index_button.click(
+ fn=run_index_script,
+ inputs=[model_name, rvc_version, index_algorithm],
+ outputs=[train_output_info],
+ )
+
+ with gr.Accordion(i18n("Export Model"), open=False):
+ if not os.name == "nt":
+ gr.Markdown(
+ i18n(
+ "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive."
+ )
+ )
+ with gr.Row():
+ with gr.Column():
+ pth_file_export = gr.File(
+ label=i18n("Exported Pth file"),
+ type="filepath",
+ value=None,
+ interactive=False,
+ )
+ pth_dropdown_export = gr.Dropdown(
+ label=i18n("Pth file"),
+ info=i18n("Select the pth file to be exported"),
+ choices=get_pth_list(),
+ value=None,
+ interactive=True,
+ allow_custom_value=True,
+ )
+ with gr.Column():
+ index_file_export = gr.File(
+ label=i18n("Exported Index File"),
+ type="filepath",
+ value=None,
+ interactive=False,
+ )
+ index_dropdown_export = gr.Dropdown(
+ label=i18n("Index File"),
+ info=i18n("Select the index file to be exported"),
+ choices=get_index_list(),
+ value=None,
+ interactive=True,
+ allow_custom_value=True,
+ )
+ with gr.Row():
+ with gr.Column():
+ refresh_export = gr.Button(i18n("Refresh"))
+ if not os.name == "nt":
+ upload_exported = gr.Button(i18n("Upload"), variant="primary")
+ upload_exported.click(
+ fn=upload_to_google_drive,
+ inputs=[pth_dropdown_export, index_dropdown_export],
+ outputs=[],
+ )
+
+ def toggle_visible(checkbox):
+ return {"visible": checkbox, "__type__": "update"}
+
+ def toggle_visible_hop_length(f0_method):
+ if f0_method == "crepe" or f0_method == "crepe-tiny":
+ return {"visible": True, "__type__": "update"}
+ return {"visible": False, "__type__": "update"}
+
+ def toggle_pretrained(pretrained, custom_pretrained):
+ if custom_pretrained == False:
+ return {"visible": pretrained, "__type__": "update"}, {
+ "visible": False,
+ "__type__": "update",
+ }
+ else:
+ return {"visible": pretrained, "__type__": "update"}, {
+ "visible": pretrained,
+ "__type__": "update",
+ }
+
+ def enable_stop_train_button():
+ return {"visible": False, "__type__": "update"}, {
+ "visible": True,
+ "__type__": "update",
+ }
+
+ def disable_stop_train_button():
+ return {"visible": True, "__type__": "update"}, {
+ "visible": False,
+ "__type__": "update",
+ }
+
+ def download_prerequisites(version, pitch_guidance):
+ if version == "v1":
+ if pitch_guidance:
+ gr.Info(
+ "Checking for v1 prerequisites with pitch guidance... Missing files will be downloaded. If you already have them, this step will be skipped."
+ )
+ run_prerequisites_script(
+ pretraineds_v1_f0=True,
+ pretraineds_v1_nof0=False,
+ pretraineds_v2_f0=False,
+ pretraineds_v2_nof0=False,
+ models=False,
+ exe=False,
+ )
+ else:
+ gr.Info(
+ "Checking for v1 prerequisites without pitch guidance... Missing files will be downloaded. If you already have them, this step will be skipped."
+ )
+ run_prerequisites_script(
+ pretraineds_v1_f0=False,
+ pretraineds_v1_nof0=True,
+ pretraineds_v2_f0=False,
+ pretraineds_v2_nof0=False,
+ models=False,
+ exe=False,
+ )
+ elif version == "v2":
+ if pitch_guidance:
+ gr.Info(
+ "Checking for v2 prerequisites with pitch guidance... Missing files will be downloaded. If you already have them, this step will be skipped."
+ )
+ run_prerequisites_script(
+ pretraineds_v1_f0=False,
+ pretraineds_v1_nof0=False,
+ pretraineds_v2_f0=True,
+ pretraineds_v2_nof0=False,
+ models=False,
+ exe=False,
+ )
+ else:
+ gr.Info(
+ "Checking for v2 prerequisites without pitch guidance... Missing files will be downloaded. If you already have them, this step will be skipped."
+ )
+ run_prerequisites_script(
+ pretraineds_v1_f0=False,
+ pretraineds_v1_nof0=False,
+ pretraineds_v2_f0=False,
+ pretraineds_v2_nof0=True,
+ models=False,
+ exe=False,
+ )
+ gr.Info(
+ "Prerequisites check complete. Missing files were downloaded, and you may now start preprocessing."
+ )
+
+ def toggle_visible_embedder_custom(embedder_model):
+ if embedder_model == "custom":
+ return {"visible": True, "__type__": "update"}
+ return {"visible": False, "__type__": "update"}
+
+ def update_slider_visibility(noise_reduction):
+ return gr.update(visible=noise_reduction)
+
+ noise_reduction.change(
+ fn=update_slider_visibility,
+ inputs=noise_reduction,
+ outputs=clean_strength,
+ )
+ rvc_version.change(
+ fn=download_prerequisites,
+ inputs=[rvc_version, pitch_guidance],
+ outputs=[],
+ )
+
+ pitch_guidance.change(
+ fn=download_prerequisites,
+ inputs=[rvc_version, pitch_guidance],
+ outputs=[],
+ )
+
+ refresh.click(
+ fn=refresh_models_and_datasets,
+ inputs=[],
+ outputs=[model_name, dataset_path],
+ )
+
+ dataset_creator.change(
+ fn=toggle_visible,
+ inputs=[dataset_creator],
+ outputs=[dataset_creator_settings],
+ )
+
+ upload_audio_dataset.upload(
+ fn=save_drop_dataset_audio,
+ inputs=[upload_audio_dataset, dataset_name],
+ outputs=[upload_audio_dataset, dataset_path],
+ )
+
+ f0_method.change(
+ fn=toggle_visible_hop_length,
+ inputs=[f0_method],
+ outputs=[hop_length],
+ )
+
+ embedder_model.change(
+ fn=toggle_visible_embedder_custom,
+ inputs=[embedder_model],
+ outputs=[embedder_custom],
+ )
+ embedder_model.change(
+ fn=toggle_visible_embedder_custom,
+ inputs=[embedder_model],
+ outputs=[embedder_custom],
+ )
+ move_files_button.click(
+ fn=create_folder_and_move_files,
+ inputs=[folder_name_input, bin_file_upload, config_file_upload],
+ outputs=[],
+ )
+ refresh_embedders_button.click(
+ fn=refresh_embedders_folders, inputs=[], outputs=[embedder_model_custom]
+ )
+ pretrained.change(
+ fn=toggle_pretrained,
+ inputs=[pretrained, custom_pretrained],
+ outputs=[custom_pretrained, pretrained_custom_settings],
+ )
+
+ custom_pretrained.change(
+ fn=toggle_visible,
+ inputs=[custom_pretrained],
+ outputs=[pretrained_custom_settings],
+ )
+
+ refresh_custom_pretaineds_button.click(
+ fn=refresh_custom_pretraineds,
+ inputs=[],
+ outputs=[g_pretrained_path, d_pretrained_path],
+ )
+
+ upload_pretrained.upload(
+ fn=save_drop_model,
+ inputs=[upload_pretrained],
+ outputs=[upload_pretrained],
+ )
+
+ overtraining_detector.change(
+ fn=toggle_visible,
+ inputs=[overtraining_detector],
+ outputs=[overtraining_settings],
+ )
+
+ multiple_gpu.change(
+ fn=toggle_visible,
+ inputs=[multiple_gpu],
+ outputs=[gpu_custom_settings],
+ )
+
+ train_button.click(
+ fn=enable_stop_train_button,
+ inputs=[],
+ outputs=[train_button, stop_train_button],
+ )
+
+ train_output_info.change(
+ fn=disable_stop_train_button,
+ inputs=[],
+ outputs=[train_button, stop_train_button],
+ )
+
+ pth_dropdown_export.change(
+ fn=export_pth,
+ inputs=[pth_dropdown_export],
+ outputs=[pth_file_export],
+ )
+
+ index_dropdown_export.change(
+ fn=export_index,
+ inputs=[index_dropdown_export],
+ outputs=[index_file_export],
+ )
+
+ refresh_export.click(
+ fn=refresh_pth_and_index_list,
+ inputs=[],
+ outputs=[pth_dropdown_export, index_dropdown_export],
+ )
diff --git a/tabs/tts/tts.py b/tabs/tts/tts.py
new file mode 100644
index 0000000000000000000000000000000000000000..49291567410dc8db81ffe0e80f21da6ad0af0a52
--- /dev/null
+++ b/tabs/tts/tts.py
@@ -0,0 +1,425 @@
+import json
+import os
+import random
+import sys
+
+import gradio as gr
+
+now_dir = os.getcwd()
+sys.path.append(now_dir)
+
+from assets.i18n.i18n import I18nAuto
+from core import run_tts_script
+from tabs.inference.inference import (
+ change_choices,
+ create_folder_and_move_files,
+ get_indexes,
+ get_speakers_id,
+ match_index,
+ names,
+ refresh_embedders_folders,
+)
+
+i18n = I18nAuto()
+
+default_weight = random.choice(names) if names else ""
+
+with open(
+ os.path.join("rvc", "lib", "tools", "tts_voices.json"), "r", encoding="utf-8"
+) as file:
+ tts_voices_data = json.load(file)
+
+short_names = [voice.get("ShortName", "") for voice in tts_voices_data]
+
+
+def process_input(file_path):
+ try:
+ with open(file_path, "r", encoding="utf-8") as file:
+ file.read()
+ gr.Info(f"The file has been loaded!")
+ return file_path, file_path
+ except UnicodeDecodeError:
+ gr.Info(f"The file has to be in UTF-8 encoding.")
+ return None, None
+
+
+# TTS tab
+def tts_tab():
+ with gr.Column():
+ with gr.Row():
+ model_file = gr.Dropdown(
+ label=i18n("Voice Model"),
+ info=i18n("Select the voice model to use for the conversion."),
+ choices=sorted(names, key=lambda path: os.path.getsize(path)),
+ interactive=True,
+ value=default_weight,
+ allow_custom_value=True,
+ )
+ best_default_index_path = match_index(model_file.value)
+ index_file = gr.Dropdown(
+ label=i18n("Index File"),
+ info=i18n("Select the index file to use for the conversion."),
+ choices=get_indexes(),
+ value=best_default_index_path,
+ interactive=True,
+ allow_custom_value=True,
+ )
+ with gr.Row():
+ unload_button = gr.Button(i18n("Unload Voice"))
+ refresh_button = gr.Button(i18n("Refresh"))
+
+ unload_button.click(
+ fn=lambda: (
+ {"value": "", "__type__": "update"},
+ {"value": "", "__type__": "update"},
+ ),
+ inputs=[],
+ outputs=[model_file, index_file],
+ )
+
+ model_file.select(
+ fn=lambda model_file_value: match_index(model_file_value),
+ inputs=[model_file],
+ outputs=[index_file],
+ )
+
+ gr.Markdown(
+ i18n(
+ f"Applio is a Speech-to-Speech conversion software, utilizing EdgeTTS as middleware for running the Text-to-Speech (TTS) component. Read more about it [here!](https://docs.applio.org/getting-started/tts#disclaimer)"
+ )
+ )
+ tts_voice = gr.Dropdown(
+ label=i18n("TTS Voices"),
+ info=i18n("Select the TTS voice to use for the conversion."),
+ choices=short_names,
+ interactive=True,
+ value=None,
+ )
+
+ tts_rate = gr.Slider(
+ minimum=-100,
+ maximum=100,
+ step=1,
+ label=i18n("TTS Speed"),
+ info=i18n("Increase or decrease TTS speed."),
+ value=0,
+ interactive=True,
+ )
+
+ with gr.Tabs():
+ with gr.Tab(label="Text to Speech"):
+ tts_text = gr.Textbox(
+ label=i18n("Text to Synthesize"),
+ info=i18n("Enter the text to synthesize."),
+ placeholder=i18n("Enter text to synthesize"),
+ lines=3,
+ )
+ with gr.Tab(label="File to Speech"):
+ txt_file = gr.File(
+ label=i18n("Upload a .txt file"),
+ type="filepath",
+ )
+ input_tts_path = gr.Textbox(
+ label=i18n("Input path for text file"),
+ placeholder=i18n(
+ "The path to the text file that contains content for text to speech."
+ ),
+ value="",
+ interactive=True,
+ )
+
+ with gr.Accordion(i18n("Advanced Settings"), open=False):
+ with gr.Column():
+ output_tts_path = gr.Textbox(
+ label=i18n("Output Path for TTS Audio"),
+ placeholder=i18n("Enter output path"),
+ value=os.path.join(now_dir, "assets", "audios", "tts_output.wav"),
+ interactive=True,
+ )
+ output_rvc_path = gr.Textbox(
+ label=i18n("Output Path for RVC Audio"),
+ placeholder=i18n("Enter output path"),
+ value=os.path.join(now_dir, "assets", "audios", "tts_rvc_output.wav"),
+ interactive=True,
+ )
+ export_format = gr.Radio(
+ label=i18n("Export Format"),
+ info=i18n("Select the format to export the audio."),
+ choices=["WAV", "MP3", "FLAC", "OGG", "M4A"],
+ value="WAV",
+ interactive=True,
+ )
+ sid = gr.Dropdown(
+ label=i18n("Speaker ID"),
+ info=i18n("Select the speaker ID to use for the conversion."),
+ choices=get_speakers_id(model_file.value),
+ value=0,
+ interactive=True,
+ )
+ split_audio = gr.Checkbox(
+ label=i18n("Split Audio"),
+ info=i18n(
+ "Split the audio into chunks for inference to obtain better results in some cases."
+ ),
+ visible=True,
+ value=False,
+ interactive=True,
+ )
+ autotune = gr.Checkbox(
+ label=i18n("Autotune"),
+ info=i18n(
+ "Apply a soft autotune to your inferences, recommended for singing conversions."
+ ),
+ visible=True,
+ value=False,
+ interactive=True,
+ )
+ autotune_strength = gr.Slider(
+ minimum=0,
+ maximum=1,
+ label=i18n("Autotune Strength"),
+ info=i18n(
+ "Set the autotune strength - the more you increase it the more it will snap to the chromatic grid."
+ ),
+ visible=False,
+ value=1,
+ interactive=True,
+ )
+ clean_audio = gr.Checkbox(
+ label=i18n("Clean Audio"),
+ info=i18n(
+ "Clean your audio output using noise detection algorithms, recommended for speaking audios."
+ ),
+ visible=True,
+ value=True,
+ interactive=True,
+ )
+ clean_strength = gr.Slider(
+ minimum=0,
+ maximum=1,
+ label=i18n("Clean Strength"),
+ info=i18n(
+ "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed."
+ ),
+ visible=True,
+ value=0.5,
+ interactive=True,
+ )
+ upscale_audio = gr.Checkbox(
+ label=i18n("Upscale Audio"),
+ info=i18n(
+ "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)"
+ ),
+ visible=True,
+ value=False,
+ interactive=True,
+ )
+ pitch = gr.Slider(
+ minimum=-24,
+ maximum=24,
+ step=1,
+ label=i18n("Pitch"),
+ info=i18n(
+ "Set the pitch of the audio, the higher the value, the higher the pitch."
+ ),
+ value=0,
+ interactive=True,
+ )
+ filter_radius = gr.Slider(
+ minimum=0,
+ maximum=7,
+ label=i18n("Filter Radius"),
+ info=i18n(
+ "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration."
+ ),
+ value=3,
+ step=1,
+ interactive=True,
+ )
+ index_rate = gr.Slider(
+ minimum=0,
+ maximum=1,
+ label=i18n("Search Feature Ratio"),
+ info=i18n(
+ "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio."
+ ),
+ value=0.75,
+ interactive=True,
+ )
+ rms_mix_rate = gr.Slider(
+ minimum=0,
+ maximum=1,
+ label=i18n("Volume Envelope"),
+ info=i18n(
+ "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed."
+ ),
+ value=1,
+ interactive=True,
+ )
+ protect = gr.Slider(
+ minimum=0,
+ maximum=0.5,
+ label=i18n("Protect Voiceless Consonants"),
+ info=i18n(
+ "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect."
+ ),
+ value=0.5,
+ interactive=True,
+ )
+ hop_length = gr.Slider(
+ minimum=1,
+ maximum=512,
+ step=1,
+ label=i18n("Hop Length"),
+ info=i18n(
+ "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy."
+ ),
+ value=128,
+ interactive=True,
+ )
+ f0_method = gr.Radio(
+ label=i18n("Pitch extraction algorithm"),
+ info=i18n(
+ "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases."
+ ),
+ choices=[
+ "crepe",
+ "crepe-tiny",
+ "rmvpe",
+ "fcpe",
+ "hybrid[rmvpe+fcpe]",
+ ],
+ value="rmvpe",
+ interactive=True,
+ )
+ embedder_model = gr.Radio(
+ label=i18n("Embedder Model"),
+ info=i18n("Model used for learning speaker embedding."),
+ choices=[
+ "contentvec",
+ "chinese-hubert-base",
+ "japanese-hubert-base",
+ "korean-hubert-base",
+ "custom",
+ ],
+ value="contentvec",
+ interactive=True,
+ )
+ with gr.Column(visible=False) as embedder_custom:
+ with gr.Accordion(i18n("Custom Embedder"), open=True):
+ with gr.Row():
+ embedder_model_custom = gr.Dropdown(
+ label=i18n("Select Custom Embedder"),
+ choices=refresh_embedders_folders(),
+ interactive=True,
+ allow_custom_value=True,
+ )
+ refresh_embedders_button = gr.Button(i18n("Refresh embedders"))
+ folder_name_input = gr.Textbox(
+ label=i18n("Folder Name"), interactive=True
+ )
+ with gr.Row():
+ bin_file_upload = gr.File(
+ label=i18n("Upload .bin"),
+ type="filepath",
+ interactive=True,
+ )
+ config_file_upload = gr.File(
+ label=i18n("Upload .json"),
+ type="filepath",
+ interactive=True,
+ )
+ move_files_button = gr.Button(
+ i18n("Move files to custom embedder folder")
+ )
+ f0_file = gr.File(
+ label=i18n(
+ "The f0 curve represents the variations in the base frequency of a voice over time, showing how pitch rises and falls."
+ ),
+ visible=True,
+ )
+
+ convert_button = gr.Button(i18n("Convert"))
+
+ with gr.Row():
+ vc_output1 = gr.Textbox(
+ label=i18n("Output Information"),
+ info=i18n("The output information will be displayed here."),
+ )
+ vc_output2 = gr.Audio(label=i18n("Export Audio"))
+
+ def toggle_visible(checkbox):
+ return {"visible": checkbox, "__type__": "update"}
+
+ def toggle_visible_embedder_custom(embedder_model):
+ if embedder_model == "custom":
+ return {"visible": True, "__type__": "update"}
+ return {"visible": False, "__type__": "update"}
+
+ autotune.change(
+ fn=toggle_visible,
+ inputs=[autotune],
+ outputs=[autotune_strength],
+ )
+ clean_audio.change(
+ fn=toggle_visible,
+ inputs=[clean_audio],
+ outputs=[clean_strength],
+ )
+ refresh_button.click(
+ fn=change_choices,
+ inputs=[model_file],
+ outputs=[model_file, index_file, sid],
+ )
+ txt_file.upload(
+ fn=process_input,
+ inputs=[txt_file],
+ outputs=[input_tts_path, txt_file],
+ )
+ embedder_model.change(
+ fn=toggle_visible_embedder_custom,
+ inputs=[embedder_model],
+ outputs=[embedder_custom],
+ )
+ move_files_button.click(
+ fn=create_folder_and_move_files,
+ inputs=[folder_name_input, bin_file_upload, config_file_upload],
+ outputs=[],
+ )
+ refresh_embedders_button.click(
+ fn=lambda: gr.update(choices=refresh_embedders_folders()),
+ inputs=[],
+ outputs=[embedder_model_custom],
+ )
+ convert_button.click(
+ fn=run_tts_script,
+ inputs=[
+ input_tts_path,
+ tts_text,
+ tts_voice,
+ tts_rate,
+ pitch,
+ filter_radius,
+ index_rate,
+ rms_mix_rate,
+ protect,
+ hop_length,
+ f0_method,
+ output_tts_path,
+ output_rvc_path,
+ model_file,
+ index_file,
+ split_audio,
+ autotune,
+ autotune_strength,
+ clean_audio,
+ clean_strength,
+ export_format,
+ upscale_audio,
+ f0_file,
+ embedder_model,
+ embedder_model_custom,
+ sid,
+ ],
+ outputs=[vc_output1, vc_output2],
+ )
diff --git a/tabs/voice_blender/voice_blender.py b/tabs/voice_blender/voice_blender.py
new file mode 100644
index 0000000000000000000000000000000000000000..8b740d2a68331d3228139f1d8b19ed25d7a9abd4
--- /dev/null
+++ b/tabs/voice_blender/voice_blender.py
@@ -0,0 +1,99 @@
+import os, sys
+import gradio as gr
+import shutil
+
+now_dir = os.getcwd()
+sys.path.append(now_dir)
+
+from assets.i18n.i18n import I18nAuto
+from core import run_model_blender_script
+
+i18n = I18nAuto()
+
+
+def update_model_fusion(dropbox):
+ return dropbox, None
+
+
+def voice_blender_tab():
+ gr.Markdown(i18n("## Voice Blender"))
+ gr.Markdown(
+ i18n(
+ "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice."
+ )
+ )
+ with gr.Column():
+ model_fusion_name = gr.Textbox(
+ label=i18n("Model Name"),
+ info=i18n("Name of the new model."),
+ value="",
+ max_lines=1,
+ interactive=True,
+ placeholder=i18n("Enter model name"),
+ )
+ with gr.Row():
+ with gr.Column():
+ model_fusion_a_dropbox = gr.File(
+ label=i18n("Drag and drop your model here"), type="filepath"
+ )
+ model_fusion_a = gr.Textbox(
+ label=i18n("Path to Model"),
+ value="",
+ interactive=True,
+ placeholder=i18n("Enter path to model"),
+ info=i18n("You can also use a custom path."),
+ )
+ with gr.Column():
+ model_fusion_b_dropbox = gr.File(
+ label=i18n("Drag and drop your model here"), type="filepath"
+ )
+ model_fusion_b = gr.Textbox(
+ label=i18n("Path to Model"),
+ value="",
+ interactive=True,
+ placeholder=i18n("Enter path to model"),
+ info=i18n("You can also use a custom path."),
+ )
+ alpha_a = gr.Slider(
+ minimum=0,
+ maximum=1,
+ label=i18n("Blend Ratio"),
+ value=0.5,
+ interactive=True,
+ info=i18n(
+ "Adjusting the position more towards one side or the other will make the model more similar to the first or second."
+ ),
+ )
+ model_fusion_button = gr.Button(i18n("Fusion"), variant="primary")
+ with gr.Row():
+ model_fusion_output_info = gr.Textbox(
+ label=i18n("Output Information"),
+ info=i18n("The output information will be displayed here."),
+ value="",
+ )
+ model_fusion_pth_output = gr.File(
+ label=i18n("Download Model"), type="filepath", interactive=False
+ )
+
+ model_fusion_button.click(
+ fn=run_model_blender_script,
+ inputs=[
+ model_fusion_name,
+ model_fusion_a,
+ model_fusion_b,
+ alpha_a,
+ ],
+ outputs=[model_fusion_output_info, model_fusion_pth_output],
+ )
+
+ model_fusion_a_dropbox.upload(
+ fn=update_model_fusion,
+ inputs=model_fusion_a_dropbox,
+ outputs=[model_fusion_a, model_fusion_a_dropbox],
+ )
+
+ model_fusion_b_dropbox.upload(
+ fn=update_model_fusion,
+ inputs=model_fusion_b_dropbox,
+ outputs=[model_fusion_b, model_fusion_b_dropbox],
+ )
diff --git a/tts_service/app.py b/tts_service/app.py
index d3af4a13365b72704c118a2210cd3b8a68dbdc32..b19ad50b05dfc89c0e4e4e002365c9af6be35a09 100644
--- a/tts_service/app.py
+++ b/tts_service/app.py
@@ -1,12 +1,139 @@
import gradio as gr
+import sys
+import os
+import logging
-def greet(name: str) -> str:
- return "Hello " + name + "!"
+# Constants
+DEFAULT_PORT = 6969
+MAX_PORT_ATTEMPTS = 10
+
+# Set up logging
+logging.getLogger("uvicorn").setLevel(logging.WARNING)
+logging.getLogger("httpx").setLevel(logging.WARNING)
+
+# Add current directory to sys.path
+now_dir = os.getcwd()
+sys.path.append(now_dir)
+
+# Zluda hijack
+import rvc.lib.zluda
+
+# Import Tabs
+from tabs.inference.inference import inference_tab
+from tabs.train.train import train_tab
+from tabs.extra.extra import extra_tab
+from tabs.report.report import report_tab
+from tabs.download.download import download_tab
+from tabs.tts.tts import tts_tab
+from tabs.voice_blender.voice_blender import voice_blender_tab
+from tabs.plugins.plugins import plugins_tab
+from tabs.settings.settings import settings_tab
+
+# Run prerequisites
+from core import run_prerequisites_script
+
+run_prerequisites_script(
+ pretraineds_v1_f0=False,
+ pretraineds_v1_nof0=False,
+ pretraineds_v2_f0=True,
+ pretraineds_v2_nof0=False,
+ models=True,
+ exe=True,
+)
+
+# Initialize i18n
+from assets.i18n.i18n import I18nAuto
+
+i18n = I18nAuto()
+
+# Start Discord presence if enabled
+from tabs.settings.sections.presence import load_config_presence
+
+if load_config_presence():
+ from assets.discord_presence import RPCManager
+
+ RPCManager.start_presence()
+
+# Check installation
+import assets.installation_checker as installation_checker
+
+installation_checker.check_installation()
+
+# Start Flask server if enabled
+from assets.flask.server import start_flask, load_config_flask
+
+if load_config_flask():
+ print("Starting Flask server")
+ start_flask()
+
+# Load theme
+import assets.themes.loadThemes as loadThemes
+
+my_applio = loadThemes.load_theme() or "ParityError/Interstellar"
+
+# Define Gradio interface
+with gr.Blocks(theme=my_applio, title="Applio", css="footer{display:none !important}") as Applio:
+ gr.Markdown("# Applio")
+ gr.Markdown(i18n("A simple, high-quality voice conversion tool focused on ease of use and performance."))
+ gr.Markdown(
+ i18n(
+ "[Support](https://discord.gg/urxFjYmYYh) — [Discord Bot](https://discord.com/oauth2/authorize?client_id=1144714449563955302&permissions=1376674695271&scope=bot%20applications.commands) — [Find Voices](https://applio.org/models) — [GitHub](https://github.com/IAHispano/Applio)"
+ )
+ )
+ with gr.Tab(i18n("Inference")):
+ inference_tab()
+
+ with gr.Tab(i18n("Training")):
+ train_tab()
+
+ with gr.Tab(i18n("TTS")):
+ tts_tab()
+
+ with gr.Tab(i18n("Voice Blender")):
+ voice_blender_tab()
+
+ with gr.Tab(i18n("Plugins")):
+ plugins_tab()
+
+ with gr.Tab(i18n("Download")):
+ download_tab()
+
+ with gr.Tab(i18n("Report a Bug")):
+ report_tab()
+
+ with gr.Tab(i18n("Extra")):
+ extra_tab()
+
+ with gr.Tab(i18n("Settings")):
+ settings_tab()
+
+
+def launch_gradio(port):
+ Applio.launch(
+ favicon_path="assets/ICON.ico",
+ share="--share" in sys.argv,
+ inbrowser="--open" in sys.argv,
+ server_port=port,
+ )
+
+
+def get_port_from_args():
+ if "--port" in sys.argv:
+ port_index = sys.argv.index("--port") + 1
+ if port_index < len(sys.argv):
+ return int(sys.argv[port_index])
+ return DEFAULT_PORT
-app = gr.Interface(fn=greet, inputs="textbox", outputs="textbox")
if __name__ == "__main__":
- # HF space entry point
- # https://discuss.huggingface.co/t/python-gradio-web-pages-suddenly-dont-render-properly-on-ipad-browsers/126669
- # Once this is fixed, remove ssr_mode=False
- app.launch(ssr_mode=False)
+ port = get_port_from_args()
+ for _ in range(MAX_PORT_ATTEMPTS):
+ try:
+ launch_gradio(port)
+ break
+ except OSError:
+ print(f"Failed to launch on port {port}, trying again on port {port - 1}...")
+ port -= 1
+ except Exception as error:
+ print(f"An error occurred launching Gradio: {error}")
+ break
diff --git a/tts_service/cli.py b/tts_service/cli.py
index cdf9d502a34efd9732bec6b77ddde6ee60b7b9fa..3e0621800332ed2b55fec51be5ceb55737c5b00f 100644
--- a/tts_service/cli.py
+++ b/tts_service/cli.py
@@ -15,8 +15,8 @@ def main() -> None:
@click.option("--share", is_flag=True, help="Share the service")
def serve(share: bool) -> None:
"""Start the TTS Service"""
- from tts_service.app import app
- app.launch(share=share)
+ from tts_service.app import Applio
+ Applio.launch(share=share)
if __name__ == "__main__":