Files
onnx-voice-changer/README.id.md
T

7.4 KiB

🎙️ ONNX VC - Standalone Real-Time Voice Changer

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

Sistem konversi suara AI real-time berkinerja tinggi dan latensi rendah yang ditenagai oleh ONNX Runtime dan Retrieval-based Voice Conversion (RVC). Dilengkapi dengan dashboard premium yang dibuat menggunakan Next.js App Router, TypeScript, dan Tailwind CSS, serta mendukung internasionalisasi penuh.


Fitur Utama

  • 🚀 WebSocket Audio Pipeline: Pengiriman audio streaming menggunakan koneksi WebSocket biner (raw PCM float32) untuk overhead minimal.
  • Akselerasi ONNX Multi-Backend: Mendukung execution providers termasuk NVIDIA CUDA, AMD/Intel DirectML, dan fallback CPU.
  • 🌐 Universal Localisation: Antarmuka yang dapat diterjemahkan sepenuhnya, mendukung Bahasa Inggris, Indonesia, Jepang, Mandarin, dan Spanyol.
  • 🎨 Dashboard Premium: Halaman kerja responsif yang dibangun menggunakan React 19, Radix UI, Framer Motion, dan Tailwind CSS.
  • 🎼 DSP Pipeline dengan Kualitas Tinggi:
    • Low-Cut Filter: Butterworth high-pass filter orde pertama aktif pada frekuensi 80Hz untuk menghilangkan hum AC dan gemuruh.
    • Noise Gate: Penekanan derau berbasis ambang batas (threshold) untuk melewati inferensi saat hening (menghemat siklus CPU/GPU).
    • Gain Controls: Pengaturan gain digital input/output independen.
  • 🧠 Ekstraksi Pitch Canggih: Prediksi pitch 16kHz yang dioptimalkan menggunakan model RMVPE (Retrieval-based Minimum Vocal Pitch Estimation).
  • 🌐 Arsitektur Dual Routing: Mendukung perutean audio melalui browser web (Web Audio API) atau langsung melalui perangkat keras audio lokal server (menggunakan sounddevice).

🛠️ Arsitektur Sistem

graph TD
    A[Mikrofon / Browser Web] -->|Web Audio API| B(Koneksi WebSocket)
    B -->|Chunk PCM Float32 Mentah| C[Backend server.py]
    C -->|1. High-Pass Filter 80Hz| D[Tahap DSP]
    D -->|2. Gain & Noise Gate| D
    D -->|3. Resample ke 16kHz| E[Hubert/ContentVec ONNX]
    D -->|4. Estimasi Pitch RMVPE| F[Prediktor Pitch]
    E --> G[Inferensi Model ONNX RVC]
    F --> G
    G -->|Chunk Audio Target| H(Koneksi WebSocket)
    H -->|Putar Audio| I[Speaker Browser / Perangkat Audio]

📁 Struktur Repositori

  • server.py — Server backend WebSocket utama yang mengelola loop koneksi, resampling audio, dan eksekusi model.
  • start.bat — File batch peluncur Windows yang secara otomatis menyiapkan environment virtual Python dan menjalankan server.
  • requirements.txt — Daftar dependensi Python.
  • frontend/ — Ruang kerja klien frontend yang dibangun dengan Next.js (TypeScript, Tailwind CSS).
  • frontend-deprecated/ — Kode frontend lama yang sudah usang.
  • lib/ — Paket inti yang berisi model inferensi, skrip konversi ONNX, dan alat prediksi.
  • weights/ — Direktori untuk bobot model suara karakter (contoh: weights/HuTao/).
  • pretrained/ — Direktori yang berisi model dasar pra-terlatih.

🚀 Instalasi & Pengaturan

📋 Prasyarat

  • Python 3.10+
  • FFmpeg terinstal dan ditambahkan ke PATH sistem (Diperlukan untuk pemrosesan audio).
  • Node.js 18+ & npm (Diperlukan untuk menjalankan klien frontend Next.js).
  • (Opsional) NVIDIA CUDA Toolkit (v11.x/12.x) dan cuDNN untuk akselerasi eksekusi GPU.

📦 1. Instalasi Backend Python

  1. Klon repositori ini ke direktori lokal Anda.
  2. Inisialisasi dan aktifkan virtual environment:
    python -m venv venv
    # Di Windows:
    .\venv\Scripts\activate
    # Di Linux/macOS:
    source venv/bin/activate
    
  3. Instal dependensi yang diperlukan:
    pip install -r requirements.txt
    

📥 2. Unduh Pre-trained ContentVec (Diperlukan)

Model ini memerlukan model dasar ContentVec untuk menghasilkan fitur pembicara dari potongan suara.

  1. Unduh model vec-768-layer-12.onnx dari Hugging Face: 👉 Unduh vec-768-layer-12.onnx
  2. Simpan file yang diunduh di dalam direktori pretrained/:
    pretrained/
    └── vec-768-layer-12.onnx
    

🔄 3. Siapkan & Ekspor Model RVC ke ONNX

Untuk menjalankan model karakter pada ONNX Runtime, Anda harus menempatkan model RVC PyTorch standar Anda (.pth) di bawah direktori weights/ dan mengonversinya.

  1. Buat sub-folder di bawah weights/ yang dinamai sesuai karakter Anda (contoh: HuTao):
    weights/
    └── HuTao/
        └── HuTao.pth
    
  2. Jalankan skrip konversi ONNX dengan memasukkan nama folder model:
    python lib/export_onnx.py --model_name HuTao
    
  3. Skrip akan secara otomatis mencari file .pth di dalam weights/HuTao/ dan mengekspor file HuTao.onnx yang sesuai di dalam direktori yang sama:
    weights/
    └── HuTao/
        ├── HuTao.pth
        └── HuTao.onnx
    

🖥️ 4. Menjalankan Klien Frontend

Klien frontend berjalan sebagai server pengembangan Next.js mandiri atau server produksi yang telah di-build.

  1. Navigasi ke direktori frontend:
    cd frontend
    
  2. Instal dependensi npm:
    npm install
    
  3. Jalankan server pengembangan:
    npm run dev
    
    Buka browser Anda dan arahkan ke http://localhost:3000.

Atau, untuk membuat build dan menjalankan server produksi:

npm run build
npm run start

🏃 Menjalankan Pengubah Suara

Langkah 1: Mulai Backend WebSocket Python

Jalankan server menggunakan terminal Anda (default ke port 8765):

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

⚙️ Argumen Baris Perintah

Argumen Deskripsi Default
--host Alamat yang diikat oleh server WebSocket. 127.0.0.1
--port Port komunikasi WebSocket. 8765
--device Perangkat eksekusi ONNX Runtime (cpu, cuda, dml). cuda
--model Nama folder target di weights/ untuk dimuat langsung saat memulai. None

Langkah 2: Buka Dashboard Frontend

Pastikan klien frontend Anda berjalan (via npm run dev atau npm run start pada http://localhost:3000), buka di browser Anda, dan klien akan terhubung secara otomatis ke backend WebSocket API.


🔊 Detail DSP Audio

Untuk mencapai latensi rendah tanpa artifak output, pemrosesan audio menggunakan:

  1. Buffer Konteks Sliding Window: Mempertahankan buffer historis pendek dari audio untuk memberikan frame konteks yang diperlukan ke model sambil meminimalkan penundaan audio output.
  2. Fadeout Padding Konvolusi: Padding senyap trailing sebesar 120ms ditambahkan sementara ke segmen input untuk menghindari anomali memudar di tepi yang melekat pada langkah konvolusional RVC.
  3. Resampling Linear: Penggunaan overhead rendah resampling linear untuk adaptasi laju sampel yang cepat.