Files

8.7 KiB

🎙️ ONNX VC - Standalone Real-Time Voice Changer

🌐 Idiomas: English | Bahasa Indonesia | Español | 日本語 | 简体中文

Un sistema de conversión de voz por IA en tiempo real, de alto rendimiento y baja latencia, impulsado por ONNX Runtime y Retrieval-based Voice Conversion (RVC). Cuenta con un panel de control premium desarrollado con Next.js App Router, TypeScript y Tailwind CSS, con soporte para internacionalización completa.


Características Clave

  • 🚀 Canal de Audio WebSocket (Audio Pipeline): Transferencia de audio en tiempo real mediante conexiones WebSocket binarias (PCM float32 sin procesar) para una latencia mínima.
  • Aceleración ONNX Multi-Backend: Soporta proveedores de ejecución que incluyen NVIDIA CUDA, AMD/Intel DirectML y CPU como respaldo.
  • 🌐 Localización Universal: Interfaz completamente traducible que soporta inglés, indonesio, japonés, chino y español.
  • 🎨 Panel de Control Premium: Entorno de trabajo responsivo construido con React 19, Radix UI, Framer Motion y Tailwind CSS.
  • 🎼 Canal DSP de Alta Fidelidad:
    • Filtro de Corte Bajo (Low-Cut Filter): Filtro de paso alto Butterworth activo de primer orden a 80 Hz para eliminar el zumbido de CA y los ruidos de fondo.
    • Puerta de Ruido (Noise Gate): Supresión de ruido basada en umbral para omitir la inferencia durante el silencio (ahorrando ciclos de CPU/GPU).
    • Controles de Ganancia: Control de ganancia digital independiente de entrada y salida.
  • 🧠 Extracción Avanzada de Tono: Predicción de tono optimizada a 16 kHz utilizando el modelo RMVPE (Retrieval-based Minimum Vocal Pitch Estimation).
  • 🌐 Arquitectura de Enrutamiento Dual: Permite enrutar el audio a través del navegador web (Web Audio API) o directamente mediante el hardware de audio local del servidor (utilizando sounddevice).

🛠️ Arquitectura del Sistema

graph TD
    A[Micrófono / Navegador Web] -->|Web Audio API| B(Conexión WebSocket)
    B -->|Fragmento de PCM Float32 sin procesar| C[Backend de server.py]
    C -->|1. Filtro de paso alto 80Hz| D[Tahap DSP]
    D -->|2. Ganancia y puerta de ruido| D
    D -->|3. Remuestreo a 16kHz| E[Hubert/ContentVec ONNX]
    D -->|4. Estimación de tono RMVPE| F[Predictor de tono]
    E --> G[Inferencia del modelo RVC ONNX]
    F --> G
    G -->|Fragmentos de audio de destino| H(Conexión WebSocket)
    H -->|Reproducir audio| I[Altavoces del navegador / Dispositivo de audio]

📁 Estructura del Repositorio

  • server.py — El servidor backend WebSocket principal que gestiona los bucles de conexión, el remuestreo de audio y la ejecución del modelo.
  • start.bat — Archivo por lotes ejecutable para Windows que inicializa automáticamente el entorno virtual de Python y ejecuta el servidor.
  • requirements.txt — Lista de dependencias de Python.
  • frontend/ — El espacio de trabajo del cliente frontend construido con Next.js (TypeScript, Tailwind CSS).
  • frontend-deprecated/ — Código frontend antiguo ya en desuso.
  • lib/ — Paquete central que contiene los modelos de inferencia, scripts de conversión a ONNX y herramientas de predicción.
  • weights/ — Directorio para los archivos de peso de los modelos de voz de personajes (ej. weights/HuTao/).
  • pretrained/ — Directorio que contiene los modelos base preentrenados.

🚀 Instalación y Configuración

📋 Requisitos Previos

  • Python 3.10+
  • FFmpeg instalado y agregado al PATH del sistema (necesario para las utilidades de procesamiento de audio).
  • Node.js 18+ y npm (necesario para ejecutar el cliente frontend Next.js).
  • (Opcional) NVIDIA CUDA Toolkit (v11.x/12.x) y cuDNN para aceleración de ejecución en GPU.

📦 1. Instalación del Backend de Python

  1. Clone este repositorio en su directorio local.
  2. Inicialice y active un entorno virtual:
    python -m venv venv
    # En Windows:
    .\venv\Scripts\activate
    # En Linux/macOS:
    source venv/bin/activate
    
  3. Instale las dependencias requeridas:
    pip install -r requirements.txt
    

📥 2. Descargar ContentVec Preentrenado (Requerido)

El modelo requiere un modelo base ContentVec para generar las características del hablante a partir de los fragmentos de voz.

  1. Descargue el modelo vec-768-layer-12.onnx desde Hugging Face: 👉 Descargar vec-768-layer-12.onnx
  2. Guarde el archivo descargado dentro del directorio pretrained/:
    pretrained/
    └── vec-768-layer-12.onnx
    

🔄 3. Configuración y Exportación de Modelos RVC a ONNX

Para ejecutar modelos de personajes en ONNX Runtime, debe colocar sus modelos RVC estándar de PyTorch (.pth) bajo el directorio weights/ y convertirlos.

  1. Cree una subcarpeta bajo weights/ con el nombre de su personaje (ej. HuTao):
    weights/
    └── HuTao/
        └── HuTao.pth
    
  2. Ejecute el script de conversión a ONNX pasando el nombre de la carpeta del modelo:
    python lib/export_onnx.py --model_name HuTao
    
  3. El script buscará automáticamente el archivo .pth dentro de weights/HuTao/ y exportará el archivo HuTao.onnx correspondiente en el mismo directorio:
    weights/
    └── HuTao/
        ├── HuTao.pth
        └── HuTao.onnx
    

🖥️ 4. Ejecución del Cliente Frontend

El cliente frontend se ejecuta como un servidor de desarrollo independiente de Next.js o como un servidor de producción compilado.

  1. Navegue al directorio frontend:
    cd frontend
    
  2. Instale las dependencias de npm:
    npm install
    
  3. Inicie el servidor de desarrollo:
    npm run dev
    
    Abra su navegador y acceda a http://localhost:3000.

Alternativamente, para compilar y ejecutar el servidor de producción:

npm run build
npm run start

🏃 Funcionamiento del Cambiador de Voz

Paso 1: Iniciar el Backend WebSocket de Python

Ejecute el servidor desde su terminal (puerto predeterminado 8765):

python server.py --host 127.0.0.1 --port 8765 --device cuda

⚙️ Argumentos de Línea de Comandos

Argumento Descripción Predeterminado
--host La dirección a la que se enlaza el servidor WebSocket. 127.0.0.1
--port Puerto de comunicación WebSocket. 8765
--device El dispositivo de ejecución de ONNX Runtime (cpu, cuda, dml). cuda
--model Nombre de la carpeta de destino en weights/ para cargar directamente al inicio. None

Paso 2: Abrir el Panel de Control Frontend

Asegúrese de que su cliente frontend esté ejecutándose (a través de npm run dev o npm run start en http://localhost:3000), ábralo en su navegador y este se conectará automáticamente al backend de la API WebSocket.


🔊 Detalles de DSP de Audio

Para lograr una latencia baja sin artefactos de salida, el procesamiento de audio utiliza:

  1. Búfer de Contexto de Ventana Deslizante: Mantiene un búfer histórico corto de audio para alimentar al modelo con los fragmentos de contexto necesarios, minimizando el retraso de la salida de audio.
  2. Desvanecimiento por Relleno de Convolución: Se añade temporalmente un relleno silencioso de 120 ms al final de los segmentos de entrada para evitar anomalías de desvanecimiento en los bordes, inherentes a los pasos de convolución RVC.
  3. Remuestreo Lineal: Interpolación lineal de bajo costo computacional para una rápida adaptación de la frecuencia de muestreo.

🤝 Créditos y Agradecimientos


📄 Licencia

Este proyecto está licenciado bajo la Apache License 2.0. Consulte el archivo LICENSE para más detalles.