# 🎙️ ONNX VC - Standalone Real-Time Voice Changer 🌐 **Bahasa:** [English](../README.md) | [Bahasa Indonesia](README.id.md) | [Español](README.es.md) | [日本語](README.ja.md) | [简体中文](README.zh.md) 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 ```mermaid 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](file:///M:/Users/ahmad/project/onnx-voice-changer/server.py) — Server backend WebSocket utama yang mengelola loop koneksi, resampling audio, dan eksekusi model. * [start.bat](file:///M:/Users/ahmad/project/onnx-voice-changer/start.bat) — File batch peluncur Windows yang secara otomatis menyiapkan environment virtual Python dan menjalankan server. * [requirements.txt](file:///M:/Users/ahmad/project/onnx-voice-changer/requirements.txt) — Daftar dependensi Python. * [frontend/](file:///M:/Users/ahmad/project/onnx-voice-changer/frontend) — Ruang kerja klien frontend yang dibangun dengan Next.js (TypeScript, Tailwind CSS). * [frontend-deprecated/](file:///M:/Users/ahmad/project/onnx-voice-changer/frontend-deprecated) — Kode frontend lama yang sudah usang. * [lib/](file:///M:/Users/ahmad/project/onnx-voice-changer/lib) — Paket inti yang berisi model inferensi, skrip konversi ONNX, dan alat prediksi. * [weights/](file:///M:/Users/ahmad/project/onnx-voice-changer/weights) — Direktori untuk bobot model suara karakter (contoh: `weights/HuTao/`). * [pretrained/](file:///M:/Users/ahmad/project/onnx-voice-changer/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: ```bash python -m venv venv # Di Windows: .\venv\Scripts\activate # Di Linux/macOS: source venv/bin/activate ``` 3. Instal dependensi yang diperlukan: ```bash 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](https://huggingface.co/DogManTC/test-rvc-onnx/blob/main/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: ```bash 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: ```bash cd frontend ``` 2. Instal dependensi npm: ```bash npm install ``` 3. Jalankan server pengembangan: ```bash npm run dev ``` Buka browser Anda dan arahkan ke **`http://localhost:3000`**. Atau, untuk membuat build dan menjalankan server produksi: ```bash npm run build npm run start ``` --- ## 🏃 Menjalankan Pengubah Suara ### Langkah 1: Mulai Backend WebSocket Python Jalankan server menggunakan terminal Anda (default ke port `8765`): ```bash 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. --- ## 🤝 Kredit & Penghargaan * **Dibuat dengan ❤️ oleh [Kanara Technology](https://github.com/kanaratechnologyindonesia)** (Mirror: [git.kanara.tech](https://git.kanara.tech/kanara)) * Ditenagai oleh [ONNX Runtime](https://onnxruntime.ai/) dan [Retrieval-based Voice Conversion (RVC)](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI) --- ## 📄 Lisensi Proyek ini dilisensikan di bawah Apache License 2.0. Lihat file [LICENSE](file:///M:/Users/ahmad/project/onnx-voice-changer/LICENSE) untuk informasi lebih lanjut.