Ir al contenido principal

Cómo ejecutar reconocimiento de voz a texto local en CPU con VibeASR.cpp

Aprende a convertir voz a texto de forma rápida, precisa y multilingüe en local con CPU usando Microsoft VibeASR.cpp, con transcripción de archivos, streaming en tiempo real y una interfaz web con Gradio en Windows, Linux y macOS.
Actualizado 10 ago 2026  · 9 min leer

Explorar con IA

Abrir en ChatGPTAbrir en ClaudeAbrir en Perplexity

El reconocimiento automático del habla ha mejorado muchísimo en los últimos años. Los modelos de voz a texto que antes necesitaban potentes GPU y ofrecían resultados irregulares ahora pueden generar transcripciones precisas en ordenadores de uso diario. 

Al mismo tiempo, los modelos son más pequeños, la inferencia en CPU es más rápida y el soporte multilingüe se ha ampliado, ofreciendo una mejor combinación de calidad de transcripción, velocidad, accesibilidad y privacidad.

VibeVoice-ASR-BitNet de Microsoft es un buen ejemplo de este avance. 

Su runtime optimizado VibeASR.cpp permite ejecutar voz a texto multilingüe en local en un ordenador con Windows, Linux o macOS sin depender de una GPU dedicada ni enviar grabaciones a la nube.

En esta guía aprenderás a instalar y compilar VibeASR.cpp, descargar el modelo cuantizado, transcribir archivos de audio desde la línea de comandos, ejecutar su servidor de streaming persistente y usar la interfaz web de Gradio para subir o grabar audio. 

¿Qué es Microsoft VibeASR.cpp? 

VibeASR.cpp es el runtime oficial de inferencia en C++ de Microsoft para VibeVoice-ASR-BitNet, un modelo multilingüe de reconocimiento automático del habla comprimido y diseñado para una inferencia eficiente en local sobre CPU. 

Más que un modelo de voz independiente, VibeASR.cpp proporciona el motor optimizado necesario para ejecutarlo, habilitando la transcripción en tiempo real sin una GPU dedicada ni un servicio de voz en la nube. 

Esto lo hace adecuado para portátiles, sobremesas, dispositivos edge y otros sistemas con recursos de cómputo limitados. 

Diagrama de arquitectura de VibeVoice-ASR-BitNet

Fuente: microsoft/VibeVoice-ASR-BitNet

Para hacer viable el despliegue en CPU, Microsoft sustituyó el componente de modelo de lenguaje Qwen2.5-7B usado en la arquitectura original de VibeVoice-ASR por el mucho más pequeño Qwen2.5-1.5B. 

También aplica distintos métodos de cuantización a los dos componentes principales:

  • I8_S para el codificador de audio VAE
  • I2_S para el modelo de lenguaje, con embeddings de mayor precisión

Estas optimizaciones reducen el tamaño total del modelo de aproximadamente 4,62 GB a 1,58 GB, lo que permite ejecutarlo de forma práctica en portátiles y equipos de sobremesa. 

A pesar de la reducción considerable de tamaño, el modelo comprimido muestra solo un aumento relativamente pequeño de alrededor del 1–4% en la tasa de error de palabra respecto a la arquitectura mayor. 

VibeASR.cpp utiliza el framework ggml, instrucciones personalizadas de CPU y fusión de operadores para acelerar la inferencia. 

Según las pruebas de Microsoft, puede ejecutarse entre 1,6 y 2,3 veces más rápido que Whisper.cpp con tamaños de modelo comparables y lograr transcripción más rápida que en tiempo real en CPUs compatibles cuando se usan suficientes hilos.

En los benchmarks de CPU de Microsoft, el modelo alcanzó un RTF de 0,63 con cuatro hilos y de 0,42 con ocho hilos, equivalente a aproximadamente 1,59× y 2,38× la velocidad en tiempo real

Su WER reportado incluye 8,25% en MLC English, 21,36% en audio AMI con diadema, 25,87% en audio AMI con micrófono distante y 2,41% en LibriSpeech clean, mostrando un equilibrio sólido entre precisión de transcripción, tamaño de modelo y rendimiento en CPU. 

1. Instala las herramientas de compilación necesarias

VibeASR.cpp se ejecuta íntegramente en la CPU, así que no necesitas una GPU dedicada. Solo te hace falta un ordenador compatible con Windows, Linux o macOS, Python 3.9 o superior, Git, un compilador C++ y aproximadamente 4 GB de espacio libre para el código fuente, los archivos de compilación y el modelo.

El proceso de compilación también requiere CMake y Ninja. 

En Windows, la opción más sencilla es usar w64devkit, que proporciona el compilador y las herramientas de build en una terminal preconfigurada. 

En Linux, los paquetes necesarios pueden instalarse directamente con el gestor de paquetes del sistema.

Windows

Descarga el último archivo .exe x64 desde la página de lanzamientos de w64devkit.

página de lanzamientos más reciente de w64devkit

El archivo descargado es un ejecutable autoextraíble. Ejecútalo y extrae la carpeta en una ruta sencilla, por ejemplo:

C:\w64devkit

Luego abre:

C:\w64devkit\w64devkit.exe

Esto lanza una terminal lista para usar con GCC, CMake, Make y Ninja. Puedes usar esta terminal para el resto de pasos en Windows sin configurar variables de entorno manualmente.

Linux

En Ubuntu, Debian y distribuciones relacionadas, el compilador y las herramientas necesarias se instalan con un único comando:

sudo apt update
sudo apt install build-essential cmake ninja-build git python3 python3-venv

Esto instala el compilador GCC, CMake, Ninja, Git, Python y el paquete necesario para crear un entorno virtual de Python.

macOS

En macOS, instala las herramientas de desarrollo de línea de comandos de Apple:

xcode-select --install

También necesitarás Git, Python 3.9 o superior, CMake y Ninja. La forma más sencilla de instalar el resto de herramientas es con Homebrew:

brew install git python cmake ninja

2. Clona VibeASR.cpp y prepara el entorno de Python

El siguiente proceso de configuración es el mismo en Windows, Linux y macOS

El único paso específico del sistema operativo es el comando para activar el entorno virtual de Python.

Abre tu terminal, ve a la carpeta donde quieras guardar el proyecto y clona el repositorio de VibeASR.cpp:

git clone --recursive https://github.com/microsoft/VibeASR.cpp.git
cd VibeASR.cpp

Clonando microsoft/VibeASR.cpp

La opción --recursive también descarga el submódulo requerido llama.cpp. Sin él, faltarían algunos archivos necesarios para compilar el runtime de inferencia.

Crea un entorno virtual de Python dentro de la carpeta del proyecto. 

python -m venv .venv

Actívalo con el comando correspondiente a tu sistema operativo.

Windows usando la terminal de w64devkit:

. .venv/Scripts/activate

Linux y macOS:

source .venv/bin/activate

Tras la activación, la terminal debería mostrar (.venv) antes del prompt. Comprueba que Python está disponible: 

python --version

Actualiza pip e instala las dependencias del proyecto: 

python -m pip install --upgrade pip

pip install -r requirements.txt

Estas dependencias incluyen los paquetes de Python usados por el script de configuración, la descarga del modelo y la interfaz web local de Gradio. 

3. Compila VibeASR.cpp y descarga el modelo

VibeASR.cpp incluye un script de configuración que gestiona tanto la compilación en C++ como la descarga del modelo.

Compila los ejecutables de línea de comandos y de streaming, instala el paquete GGUF necesario y descarga los archivos del modelo pre-cuantizado en el directorio del proyecto.

Asegúrate de que el entorno virtual de Python esté activo antes de ejecutar el script.

En Linux y macOS, ejecuta:

python setup_env.py

En Windows, ejecuta el siguiente comando dentro de la terminal w64devkit:

CMAKE_GENERATOR=Ninja python setup_env.py

Establecer CMAKE_GENERATOR=Ninja garantiza que CMake use el sistema de compilación Ninja en lugar de intentar usar Microsoft Visual C++, que no está disponible en el entorno w64devkit.

El script de configuración:

  • Instala el paquete de Python gguf requerido.
  • Configura y compila VibeASR.cpp.
  • Genera los ejecutables de inferencia y streaming.
  • Descarga los archivos del modelo VibeASR pre-cuantizados.
  • Guarda los modelos descargados en models/vibeasr.

Al finalizar, el ejecutable principal de inferencia estará disponible en la siguiente ubicación.

Windows:

build/bin/asr_infer.exe

Linux y macOS:

build/bin/asr_infer

Verifica que el ejecutable se haya generado correctamente mostrando sus opciones disponibles.

Windows:

./build/bin/asr_infer.exe --help

Linux y macOS:

./build/bin/asr_infer --help

Menú de ayuda de VibeASR.cpp

4. Prueba la transcripción por archivo y en streaming

Ahora que el runtime y el modelo están listos, puedes probar dos métodos de transcripción. 

El ejecutable estándar procesa un archivo de audio y devuelve la transcripción completa, mientras que el servidor de streaming mantiene el modelo cargado y va mostrando la transcripción de forma progresiva a medida que se generan los tokens.

Primero, descarga una grabación de ejemplo corta desde la carpeta del proyecto VibeASR.cpp:

curl -L "https://homepages.inf.ed.ac.uk/htang2/notes/speech-samples/103-1240-0000.wav" -o recording.wav

El archivo de audio se guardará como recording.wav en el directorio actual del proyecto.

Transcribe un archivo de audio

El comando estándar de inferencia carga el codificador de audio y el modelo de lenguaje, procesa la grabación e imprime la transcripción completa.

Windows:

./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

Linux y macOS: usa el mismo comando sin la extensión .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

Transcribir un archivo de audio con VibeASR.cpp

La opción -t 6 asigna seis hilos de CPU a la inferencia. Puedes aumentar o reducir este número según tu procesador. 

La opción --greedy selecciona el token más probable en cada paso de decodificación, produciendo resultados consistentes.

En mi equipo, la grabación de 14,085 segundos tardó unos 13,7 segundos en procesarse:

RTF: 0.9726
Speed: approximately 1.03× real time

El factor de tiempo real, o RTF, compara el tiempo de proceso con la duración del audio. 

Un RTF por debajo de 1,0 significa que la transcripción fue más rápida que la reproducción real. El rendimiento variará según el procesador, el sistema operativo, el número de hilos y la duración de la grabación.

Prueba el streaming token a token

VibeASR.cpp también incluye un servidor de streaming persistente. Carga los dos archivos de modelo una vez y permanece activo, permitiéndote enviar varias grabaciones sin reiniciar ni recargar el modelo cada vez.

La salida funciona de forma similar al streaming de un modelo de lenguaje grande. 

En lugar de esperar a que termine toda la transcripción, empiezas a ver el texto a medida que el decodificador genera cada token. 

Algunos tokens representan palabras completas, otros partes de palabras o signos de puntuación, pero se muestran progresivamente hasta completar la transcripción.

Windows, inicia el servidor con:

./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

Linux y macOS, ejecuta:

./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

El modelo de streaming token a token está listo.

Espera a que el servidor termine de cargar los modelos y muestre:

---READY---

Introduce la ruta del archivo de audio y pulsa Intro:

recording.wav

La transcripción empezará a aparecer token a token. Cuando termine de procesarse, el servidor mostrará:

---END---

Streaming token a token con VibeASR.cpp

A continuación, puedes introducir otra ruta de archivo sin recargar los modelos. Para detener el servidor, escribe:

exit

Este flujo persistente es especialmente útil al transcribir varias grabaciones o al conectar VibeASR.cpp a otra aplicación que necesite salida de transcripción progresiva.

5. Inicia y prueba la interfaz web

VibeASR.cpp incluye una interfaz web local con Gradio para subir archivos de audio o grabar voz con tu micrófono. El proceso es el mismo en Windows, Linux y macOS, aunque en Windows los ejecutables terminan en .exe.

Las dependencias necesarias para la interfaz, incluidas Gradio, SoundFile y NumPy, ya se instalaron a través de requirements.txt.

Primero, asegúrate de que el entorno virtual esté activo.

Windows usando la terminal de w64devkit:

. .venv/Scripts/activate

Linux y macOS:

source .venv/bin/activate

En Windows, inicia la interfaz con:

python demo/gradio_asr_demo.py \
  --port 7860 \
  --bin build/bin/asr_infer.exe \
  --server-bin build/bin/asr_stream_server.exe

En Linux y macOS, las rutas por defecto de los ejecutables se detectan automáticamente:

python demo/gradio_asr_demo.py --port 7860

Las rutas de los modelos ya están configuradas dentro del script de Gradio para todos los sistemas operativos, así que no necesitas incluirlas en el comando. 

El script también permite indicar rutas separadas para el ejecutable estándar y el servidor de streaming.

Abre la siguiente dirección en tu navegador:

http://127.0.0.1:7860

Explora la interfaz

La interfaz te permite:

  • Seleccionar el modelo para CPU.
  • Elegir el número de hilos de CPU.
  • Cambiar entre procesamiento online y offline.
  • Activar decodificación greedy o ajustar temperature y Top-p.
  • Subir un archivo de audio o grabar directamente con tu micrófono.
  • Añadir hotwords opcionales, como nombres o términos técnicos.
  • Ver la transcripción, la duración del audio y el factor en tiempo real.

Aquí, modo online no significa que tu audio se envíe a un servicio externo.

Procesa grabaciones largas por partes de forma progresiva y usa asr_stream_server cuando está disponible. 

El modo offline procesa el archivo completo antes de mostrar el resultado.

Interfaz WebUI de VibASR.cpp

Prueba con una grabación corta

Para la primera prueba, grabé una frase corta directamente con el micrófono y seleccioné el modo Offline con cuatro hilos de CPU.

WebUI de VibASR.cpp probando una grabación pequeña en modo offline

Un RTF de 0,9584 significa que el modelo necesitó unos 0,96 segundos para procesar cada segundo de audio. 

Esto es aproximadamente 1,04× en tiempo real, por lo que la transcripción se completó ligeramente más rápido que la duración real de la grabación.

Prueba con una grabación más larga

También probé la interfaz con una grabación más larga de unos 109,7 segundos de voz. El modelo generó la transcripción completa y mostró:

RTF: 0.5305
Audio: 109.7s

WebUI de VibASR.cpp transcribiendo audio largo en modo offline

Esto significa que el modelo necesitó aproximadamente 0,53 segundos para procesar cada segundo de audio. La transcripción completa tardó alrededor de 58 segundos, con una velocidad aproximada de 1,88× en tiempo real.

Conclusiones

Me ha sorprendido lo práctico que se ha vuelto el reconocimiento de voz en local. 

Incluso en una CPU antigua, VibeASR.cpp puede transcribir audio cerca de o más rápido que en tiempo real sin exigir una GPU, mucha memoria ni gran almacenamiento. 

El ejecutable compilado también puede integrarse en una aplicación de Python, envolverse en un endpoint de FastAPI o usarse como motor de transcripción en una herramienta local más amplia.

El ajuste principal a considerar es el número de hilos de CPU asignados al proceso. 

También debes elegir entre el modo online, que muestra la transcripción progresivamente, y el modo offline, que devuelve el texto completo tras procesar el audio.

La configuración aún podría simplificarse, especialmente en Windows, Linux y macOS. 

Como el proyecto sigue evolucionando, espero que la instalación y el soporte de binarios precompilados mejoren con el tiempo. Cuando haya un binario autónomo estable, me veo usando este modelo en muchos más proyectos locales de voz a texto.

También te recomiendo echar un vistazo a nuestro tutorial de la API GPT Live Transcribe.

Preguntas frecuentes

¿Con qué idiomas es realmente compatible el modelo VibeASR?

El modelo VibeVoice-ASR es compatible de forma nativa con más de 50 idiomas. Incluye inglés, chino, francés, italiano, coreano, portugués y vietnamita, entre otros. No requiere seleccionar el idioma explícitamente y puede gestionar automáticamente el "code-switching" (cuando se mezclan varios idiomas en una misma frase).

¿Necesito convertir mis archivos MP3 o de vídeo antes de transcribir?

Si usas directamente el ejecutable de línea de comandos asr_infer, espera archivos .wav (normalmente 16 kHz, 16 bits mono). Si tienes audio en otros formatos como MP3, M4A o FLAC, tendrás que convertirlos a WAV primero con una herramienta como FFmpeg antes de pasarlos a la CLI.

¿El modelo puede identificar distintos hablantes o generar marcas de tiempo por palabra?

La arquitectura base de VibeVoice-ASR se diseñó expresamente para generar salidas estructuradas con "Quién" (diarización de hablantes), "Cuándo" (marcas de tiempo) y "Qué" (contenido) en una sola pasada. Sin embargo, el ejecutable ligero de inferencia en C++ (VibeASR.cpp) actualmente se centra en la transcripción de texto en bruto de forma progresiva. Para obtener la salida JSON estructurada completa con IDs de hablante y marcas temporales, normalmente necesitas ejecutar el modelo usando la librería de Python transformers.


Abid Ali Awan's photo
Author
Abid Ali Awan
LinkedIn
Twitter

Soy un científico de datos certificado que disfruta creando aplicaciones de aprendizaje automático y escribiendo blogs sobre ciencia de datos. Actualmente me centro en la creación de contenidos, la edición y el trabajo con grandes modelos lingüísticos.

Temas

Los mejores cursos de DataCamp

Curso

Procesamiento del lenguaje hablado en Python

4 h
9.1K
Aprende a cargar, transformar y transcribir voz a partir de archivos de audio sin procesar en Python.
Ver detallesRight Arrow
Iniciar Curso
Ver másRight Arrow
Relacionado
An AI juggles tasks

blog

Cinco proyectos que puedes crear con modelos de IA generativa (con ejemplos)

Aprende a utilizar modelos de IA generativa para crear un editor de imágenes, un chatbot similar a ChatGPT con pocos recursos y una aplicación clasificadora de aprobación de préstamos y a automatizar interacciones PDF y un asistente de voz con GPT.
Abid Ali Awan's photo

Abid Ali Awan

10 min

An AI transcribes audio to text

Tutorial

Convertir voz en texto con la API Whisper de OpenAI

Descubra las potentes funciones de la API Python de OpenAI Whisper para transcripción y traducción. Dispone de soporte multilingüe y mejora rápida para una transcripción precisa.
Abid Ali Awan's photo

Abid Ali Awan

Tutorial

Cómo utilizar la API de conversión de texto a voz de OpenAI

La API TTS de OpenAI es un punto final que permite a los usuarios interactuar con su modelo de inteligencia artificial TTS, que convierte el texto en lenguaje hablado con sonido natural.
Kurtis Pykes 's photo

Kurtis Pykes

Tutorial

Tutorial de DeepSeek-Coder-V2: Ejemplos, instalación, puntos de referencia

DeepSeek-Coder-V2 es un modelo de lenguaje de código de código abierto que rivaliza con el rendimiento de GPT-4, Gemini 1.5 Pro, Claude 3 Opus, Llama 3 70B o Codestral.
Dimitri Didmanidze's photo

Dimitri Didmanidze

cursor ai code editor

Tutorial

Cursor AI: Una guía con 10 ejemplos prácticos

Aprende a instalar Cursor AI en Windows, macOS y Linux, y descubre cómo utilizarlo a través de 10 casos de uso diferentes.

Tutorial

Visión GPT-4: Guía completa para principiantes

Este tutorial le presentará todo lo que necesita saber sobre GPT-4 Vision, desde cómo acceder a él hasta ejemplos prácticos del mundo real y sus limitaciones.
Arunn Thevapalan's photo

Arunn Thevapalan

Ver MásVer Más