Kursus
Pengenalan ucapan otomatis berkembang pesat dalam beberapa tahun terakhir. Model speech-to-text yang dulu membutuhkan GPU bertenaga dan menghasilkan hasil yang tidak konsisten kini dapat memberikan transkripsi akurat di komputer sehari-hari.
Pada saat yang sama, ukuran model menjadi lebih kecil, inferensi CPU menjadi lebih cepat, dan dukungan multibahasa meluas, sehingga pengguna mendapatkan kombinasi yang lebih baik antara kualitas transkripsi, kecepatan, aksesibilitas, dan privasi.
VibeVoice-ASR-BitNet dari Microsoft adalah contoh bagus dari kemajuan ini.
Runtime VibeASR.cpp yang dioptimalkan memungkinan menjalankan speech-to-text multibahasa secara lokal pada komputer Windows, Linux, atau macOS tanpa bergantung pada GPU khusus atau mengirim rekaman ke layanan cloud.
Dalam panduan ini, Anda akan mempelajari cara menginstal dan membangun VibeASR.cpp, mengunduh model terkuantisasi, mentranskripsikan file audio dari command line, menjalankan server streaming persisten, dan menggunakan antarmuka web Gradio untuk mengunggah atau merekam ucapan.
Apa itu Microsoft VibeASR.cpp?
VibeASR.cpp adalah runtime inferensi C++ resmi Microsoft untuk VibeVoice-ASR-BitNet, model pengenalan ucapan otomatis multibahasa terkompresi yang dirancang untuk inferensi lokal yang efisien di CPU.
Alih-alih menjadi model ucapan terpisah, VibeASR.cpp menyediakan mesin yang dioptimalkan untuk menjalankan model tersebut, memungkinkan transkripsi waktu nyata tanpa GPU khusus atau layanan ucapan berbasis cloud.
Ini cocok untuk laptop, desktop, perangkat edge, dan sistem lain dengan sumber daya komputasi terbatas.

Sumber: microsoft/VibeVoice-ASR-BitNet
Agar deployment di CPU menjadi praktis, Microsoft mengganti komponen model bahasa Qwen2.5-7B yang digunakan arsitektur VibeVoice-ASR asli dengan model Qwen2.5-1.5B yang jauh lebih kecil.
Mereka juga menerapkan metode kuantisasi berbeda pada dua komponen utama:
I8_Suntuk encoder audio VAEI2_Suntuk model bahasa, dengan embedding presisi lebih tinggi
Optimasi ini mengurangi total ukuran model dari sekitar 4,62 GB menjadi 1,58 GB, sehingga praktis dijalankan di laptop dan komputer desktop.
Meski terjadi pengurangan ukuran yang signifikan, model terkompresi hanya menunjukkan peningkatan relatif kecil sekitar 1–4 poin persentase dalam word error rate dibandingkan dengan arsitektur yang lebih besar.
VibeASR.cpp menggunakan kerangka ggml, instruksi CPU kustom, dan operator fusion untuk meningkatkan kecepatan inferensi.
Menurut benchmark Microsoft, runtime ini dapat berjalan 1,6–2,3 kali lebih cepat daripada Whisper.cpp pada ukuran model yang sebanding dan dapat mencapai transkripsi lebih cepat dari waktu nyata pada CPU yang didukung ketika cukup banyak thread digunakan.
Dalam benchmark CPU Microsoft, model mencapai RTF 0,63 dengan empat thread dan 0,42 dengan delapan thread, setara dengan kira-kira 1,59× dan 2,38× kecepatan waktu nyata.
WER yang dilaporkan mencakup 8,25% pada MLC English, 21,36% pada audio headset AMI, 25,87% pada audio mikrofon-jauh AMI, dan 2,41% pada LibriSpeech clean, menunjukkan keseimbangan kuat antara akurasi transkripsi, ukuran model, dan performa CPU.
1. Instal Alat Build yang Diperlukan
VibeASR.cpp berjalan sepenuhnya di CPU, jadi Anda tidak memerlukan GPU khusus. Anda hanya memerlukan komputer Windows, Linux, atau macOS yang didukung, Python 3.9 atau lebih baru, Git, kompiler C++, dan sekitar 4 GB ruang disk kosong untuk kode sumber, file build, dan model.
Proses build juga memerlukan CMake dan Ninja.
Di Windows, opsi termudah adalah menggunakan w64devkit, yang menyediakan kompiler dan alat build dalam terminal yang telah dikonfigurasi sebelumnya.
Di Linux, paket yang diperlukan dapat diinstal langsung melalui manajer paket sistem.
Windows
Unduh berkas .exe x64 terbaru dari halaman rilis w64devkit.

Berkas yang diunduh adalah arsip self-extracting. Jalankan dan ekstrak foldernya ke lokasi yang sederhana, misalnya:
C:\w64devkit
Lalu buka:
C:\w64devkit\w64devkit.exe
Ini akan meluncurkan terminal siap pakai yang berisi GCC, CMake, Make, dan Ninja. Anda dapat menggunakan terminal ini untuk langkah-langkah Windows berikutnya tanpa mengonfigurasi variabel lingkungan secara manual.
Linux
Di Ubuntu, Debian, dan distro Linux terkait, kompiler dan alat build yang diperlukan dapat diinstal dengan satu perintah:
sudo apt update
sudo apt install build-essential cmake ninja-build git python3 python3-venv
Ini akan menginstal kompiler GCC, CMake, Ninja, Git, Python, dan paket yang diperlukan untuk membuat virtual environment Python.
macOS
Di macOS, instal alat pengembangan baris perintah Apple:
xcode-select --install
Anda juga memerlukan Git, Python 3.9 atau lebih baru, CMake, dan Ninja. Cara termudah untuk menginstal alat yang tersisa adalah melalui Homebrew:
brew install git python cmake ninja
2. Clone VibeASR.cpp dan Siapkan Lingkungan Python
Proses penyiapan berikut sama untuk Windows, Linux, dan macOS.
Satu-satunya langkah spesifik OS adalah perintah yang digunakan untuk mengaktifkan virtual environment Python.
Buka terminal Anda, pindah ke folder tempat Anda ingin menyimpan proyek, dan clone repositori VibeASR.cpp:
git clone --recursive https://github.com/microsoft/VibeASR.cpp.git
cd VibeASR.cpp

--recursive juga mengunduh submodul llama.cpp yang diperlukan. Tanpanya, beberapa file yang dibutuhkan untuk membangun runtime inferensi akan hilang.
Buat virtual environment Python di dalam folder proyek.
python -m venv .venv
Aktifkan dengan perintah sesuai sistem operasi Anda.
Windows menggunakan terminal w64devkit:
. .venv/Scripts/activate
Linux dan macOS:
source .venv/bin/activate
Setelah diaktifkan, terminal akan menampilkan (.venv) sebelum prompt perintah. Pastikan Python tersedia:
python --version
Tingkatkan pip dan instal dependensi proyek:
python -m pip install --upgrade pip
pip install -r requirements.txt
Dependensi ini mencakup paket Python yang digunakan oleh skrip penyiapan, proses pengunduhan model, dan antarmuka web Gradio lokal.
3. Build VibeASR.cpp dan Unduh Model
VibeASR.cpp menyertakan skrip penyiapan yang menangani proses build C++ dan pengunduhan model.
Skrip ini mengompilasi executable command-line dan streaming, memasang paket GGUF yang diperlukan, dan mengunduh file model yang sudah dikuantisasi ke dalam direktori proyek.
Pastikan virtual environment Python aktif sebelum menjalankan skrip penyiapan.
Di Linux dan macOS, jalankan:
python setup_env.py
Di Windows, jalankan perintah berikut di dalam terminal w64devkit:
CMAKE_GENERATOR=Ninja python setup_env.py
Mengatur CMAKE_GENERATOR=Ninja memastikan CMake menggunakan sistem build Ninja alih-alih mencoba menggunakan Microsoft Visual C++, yang tidak tersedia di lingkungan w64devkit.
Skrip penyiapan akan:
- Memasang paket Python
ggufyang diperlukan. - Mengonfigurasi dan mengompilasi VibeASR.cpp.
- Membangun executable inferensi dan streaming.
- Mengunduh file model VibeASR yang sudah dikuantisasi.
- Menyimpan model yang diunduh di dalam
models/vibeasr.
Setelah proses selesai, executable inferensi utama akan tersedia di lokasi berikut.
Di Windows:
build/bin/asr_infer.exe
Di Linux dan macOS:
build/bin/asr_infer
Verifikasi bahwa executable berhasil dibangun dengan menampilkan opsi command-line yang tersedia.
Di Windows:
./build/bin/asr_infer.exe --help
Di Linux dan macOS:
./build/bin/asr_infer --help

4. Uji Transkripsi File dan Streaming
Sekarang runtime dan model sudah siap, Anda dapat menguji dua metode transkripsi.
Executable inferensi standar memproses satu file audio dan mengembalikan transkrip lengkap, sedangkan server streaming tetap memuat model dan menampilkan transkripsi secara progresif saat token dihasilkan.
Pertama, unduh rekaman sampel pendek dari dalam folder proyek VibeASR.cpp:
curl -L "https://homepages.inf.ed.ac.uk/htang2/notes/speech-samples/103-1240-0000.wav" -o recording.wav
File audio akan disimpan sebagai recording.wav di direktori proyek saat ini.
Transkripsikan file audio
Perintah inferensi standar memuat encoder audio dan model bahasa, memproses rekaman, dan mencetak transkripsi yang sudah selesai.
Di Windows, jalankan:
./build/bin/asr_infer.exe \
--vae-model models/vibeasr/vibeasr-vae-encoder-i8_s.gguf \
--lm-model models/vibeasr/vibeasr-lm-i2_s-embed-q6_k.gguf \
--audio recording.wav \
-t 6 \
--greedy
Di Linux dan macOS, gunakan perintah yang sama tanpa ekstensi .exe:
./build/bin/asr_infer \
--vae-model models/vibeasr/vibeasr-vae-encoder-i8_s.gguf \
--lm-model models/vibeasr/vibeasr-lm-i2_s-embed-q6_k.gguf \
--audio recording.wav \
-t 6 \
--greedy

Opsi -t 6 menetapkan enam thread CPU untuk inferensi. Anda dapat menambah atau mengurangi angka ini sesuai prosesor Anda.
Opsi --greedy memilih token yang paling mungkin pada setiap langkah decoding, menghasilkan hasil transkripsi yang konsisten.
Di komputer saya, rekaman 14,085 detik membutuhkan sekitar 13,7 detik untuk diproses:
RTF: 0.9726
Speed: approximately 1.03× real time
Real-time factor, atau RTF, membandingkan waktu pemrosesan dengan durasi audio.
RTF di bawah 1.0 berarti rekaman ditranskripsikan lebih cepat daripada panjang pemutaran aslinya. Performa akan bervariasi tergantung pada prosesor, sistem operasi, jumlah thread, dan panjang rekaman.
Uji streaming token demi token
VibeASR.cpp juga menyertakan server streaming persisten. Server ini memuat dua file model sekali dan tetap aktif, memungkinkan Anda mengirim beberapa rekaman tanpa harus memulai ulang dan memuat ulang model setiap kali.
Outputnya mirip dengan streaming dari model bahasa besar.
Alih-alih menunggu seluruh transkripsi selesai, Anda mulai melihat teks saat decoder menghasilkan setiap token.
Beberapa token dapat mewakili kata lengkap, sementara yang lain mewakili bagian kata atau tanda baca, namun semuanya ditampilkan secara progresif hingga transkrip selesai.
Di Windows, mulai server dengan:
./build/bin/asr_stream_server.exe \
--vae-model models/vibeasr/vibeasr-vae-encoder-i8_s.gguf \
--lm-model models/vibeasr/vibeasr-lm-i2_s-embed-q6_k.gguf \
-t 6 \
--greedy
Di Linux dan macOS, jalankan:
./build/bin/asr_stream_server \
--vae-model models/vibeasr/vibeasr-vae-encoder-i8_s.gguf \
--lm-model models/vibeasr/vibeasr-lm-i2_s-embed-q6_k.gguf \
-t 6 \
--greedy

Tunggu hingga server selesai memuat model dan menampilkan:
---READY---
Masukkan path ke file audio dan tekan Enter:
recording.wav
Transkripsi akan mulai muncul token demi token. Saat rekaman selesai diproses, server menampilkan:
---END---

Anda kemudian dapat memasukkan path file audio lain tanpa memuat ulang model. Untuk menghentikan server, ketik:
exit
Alur kerja persisten ini sangat berguna saat mentranskripsikan banyak rekaman atau menghubungkan VibeASR.cpp ke aplikasi lain yang membutuhkan output transkripsi progresif.
5. Jalankan dan Uji Antarmuka Web
VibeASR.cpp menyertakan antarmuka web Gradio lokal untuk mengunggah file audio atau merekam ucapan dengan mikrofon Anda. Prosesnya sama di Windows, Linux, dan macOS, meskipun Windows menggunakan file executable yang diakhiri dengan .exe.
Dependensi yang dibutuhkan untuk antarmuka, termasuk Gradio, SoundFile, dan NumPy, sudah dipasang melalui requirements.txt.
Pertama, pastikan virtual environment aktif.
Windows menggunakan terminal w64devkit:
. .venv/Scripts/activate
Linux dan macOS:
source .venv/bin/activate
Di Windows, jalankan antarmuka dengan:
python demo/gradio_asr_demo.py \
--port 7860 \
--bin build/bin/asr_infer.exe \
--server-bin build/bin/asr_stream_server.exe
Di Linux dan macOS, path executable default terdeteksi otomatis:
python demo/gradio_asr_demo.py --port 7860
Path model sudah dikonfigurasi di dalam skrip Gradio untuk semua sistem operasi, jadi Anda tidak perlu menyertakannya di perintah.
Skrip juga mendukung path terpisah untuk executable inferensi standar dan server streaming.
Buka alamat berikut di peramban Anda:
http://127.0.0.1:7860
Jelajahi Antarmuka
Antarmuka memungkinkan Anda:
- Memilih model CPU.
- Menentukan jumlah thread CPU.
- Beralih antara pemrosesan Online dan Offline.
- Mengaktifkan greedy decoding atau menyesuaikan temperature dan Top-p.
- Mengunggah file audio atau merekam langsung dari mikrofon Anda.
- Menambahkan hotword opsional, seperti nama atau istilah teknis.
- Melihat transkripsi, durasi audio, dan real-time factor.
Di sini, mode Online tidak berarti audio Anda dikirim ke layanan online.
Mode ini memproses rekaman lebih panjang secara progresif dalam potongan dan menggunakan asr_stream_server bila tersedia.
Mode Offline memproses seluruh file audio sebelum menampilkan hasil.

Uji rekaman pendek
Untuk uji pertama, saya merekam kalimat pendek langsung melalui mikrofon dan memilih mode Offline dengan empat thread CPU.

RTF sebesar 0,9584 berarti model membutuhkan sekitar 0,96 detik untuk memproses setiap detik audio.
Ini kira-kira 1,04× waktu nyata, sehingga transkripsi selesai sedikit lebih cepat daripada durasi rekaman sebenarnya.
Uji rekaman lebih panjang
Saya juga menguji antarmuka dengan rekaman lebih panjang berisi sekitar 109,7 detik ucapan. Model berhasil menghasilkan transkripsi lengkap dan melaporkan:
RTF: 0.5305
Audio: 109.7s

Ini berarti model membutuhkan sekitar 0,53 detik untuk memproses setiap detik audio. Rekaman penuh memerlukan sekitar 58 detik untuk ditranskripsikan, memberikan kecepatan sekitar 1,88× waktu nyata.
Penutup
Saya terkesan dengan betapa praktisnya pengenalan ucapan lokal saat ini.
Bahkan di CPU lama, VibeASR.cpp dapat mentranskripsikan audio mendekati atau lebih cepat dari waktu nyata tanpa memerlukan GPU, memori besar, atau ruang penyimpanan banyak.
Executable yang dikompilasi juga dapat diintegrasikan ke dalam aplikasi Python, dibungkus dalam endpoint FastAPI, atau digunakan sebagai mesin transkripsi untuk alat lokal yang lebih besar.
Pengaturan utama yang perlu dipertimbangkan adalah jumlah thread CPU yang ditetapkan ke proses.
Anda juga perlu memilih antara mode online, yang melakukan streaming transkrip secara progresif, dan mode offline, yang mengembalikan transkripsi lengkap setelah memproses audio.
Proses penyiapan masih bisa dibuat lebih mudah, terutama di Windows, Linux, dan macOS.
Karena proyek ini masih berkembang, saya berharap instalasi dan dukungan binary siap pakai akan meningkat seiring waktu. Setelah binary mandiri yang stabil tersedia, saya bisa melihat diri saya menggunakan model ini dalam lebih banyak proyek speech-to-text lokal.
Saya juga merekomendasikan untuk melihat tutorial GPT Live Transcribe API kami.
FAQs
Bahasa apa saja yang sebenarnya didukung model VibeASR?
Model VibeVoice-ASR secara native mendukung lebih dari 50 bahasa. Ini termasuk bahasa Inggris, Tionghoa, Prancis, Italia, Korea, Portugis, dan Vietnam. Model ini tidak memerlukan pengaturan bahasa eksplisit dan dapat secara otomatis menangani "code-switching" (ketika penutur secara alami mencampur beberapa bahasa dalam satu kalimat).
Apakah saya perlu mengonversi file MP3 atau video saya sebelum ditranskripsikan?
Jika Anda menggunakan executable command-line asr_infer secara langsung, executable ini mengharapkan file .wav (biasanya 16kHz, 16-bit mono). Jika Anda memiliki audio dalam format lain seperti MP3, M4A, atau FLAC, Anda perlu mengonversinya ke WAV terlebih dahulu menggunakan alat seperti FFmpeg sebelum diberikan ke CLI.
Bisakah model mengidentifikasi pembicara yang berbeda atau menghasilkan cap waktu tingkat kata?
Arsitektur dasar VibeVoice-ASR dirancang secara eksplisit untuk menghasilkan output terstruktur yang berisi "Siapa" (diarisasi pembicara), "Kapan" (cap waktu), dan "Apa" (konten) dalam satu kali proses. Namun, executable inferensi C++ yang ringan (VibeASR.cpp) saat ini berfokus pada transkripsi teks mentah progresif. Untuk mendapatkan output JSON terstruktur lengkap dengan ID pembicara dan cap waktu, Anda biasanya perlu menjalankan model menggunakan pustaka Python transformers.
Sebagai data scientist tersertifikasi, saya bersemangat memanfaatkan teknologi mutakhir untuk menciptakan aplikasi machine learning yang inovatif. Dengan latar belakang kuat di pengenalan ucapan, analisis dan pelaporan data, MLOps, conversational AI, dan NLP, saya mengasah keterampilan dalam mengembangkan sistem cerdas yang berdampak nyata. Selain keahlian teknis, saya juga komunikator andal yang mampu menyederhanakan konsep kompleks menjadi bahasa yang jelas dan ringkas. Karena itu, saya menjadi blogger yang dicari di bidang data science, membagikan wawasan dan pengalaman kepada komunitas profesional data yang terus berkembang. Saat ini, saya berfokus pada pembuatan dan penyuntingan konten, bekerja dengan large language model untuk mengembangkan konten yang kuat dan menarik agar membantu bisnis dan individu memaksimalkan data mereka.

