audio.cpp: reconocimiento de voz y TTS multiplataforma en C++ puro
Compila audio.cpp con Metal, Vulkan o CUDA, instala modelos y ejecuta la transcripción con Parakeet y la clonación de voz con VoxCPM2 sin entorno de Python.
Las librerías de Python para trabajar con voz en un Mac funcionan bien hasta que necesitas que el mismo código corra en otro sitio. mlx-audio es un buen ejemplo. Se apoya en el framework MLX de Apple, hace que la inferencia en Apple Silicon sea rápida y trae soporte listo para decenas de modelos de voz a texto y de texto a voz. Su límite es la portabilidad: está hecha para el Mac. audio.cpp toma el camino contrario. Es un motor de inferencia de voz de código abierto escrito en C++ sencillo sobre el runtime ggml, con backends de Metal, Vulkan y CUDA para una inferencia rápida en la GPU.
Qué ofrece
- Ejecuta una larga lista de modelos populares de ASR y TTS de código abierto.
- Funciona en Windows, macOS y Linux.
- Usa la pila de ggml, así que puedes elegir CUDA, HIP/ROCm, Vulkan, Metal o simplemente la CPU.
- Admite pipelines en JSON para encadenar pasos en flujos más grandes.
- Incluye utilidades para reducción de ruido, mejora del audio, remuestreo y STFT/ISTFT.
Modelos que puedes ejecutar
En texto a voz están, entre otros, Qwen3-TTS, VibeVoice, VoxCPM2, Fun-CosyVoice3, la familia IndexTTS-2, Higgs Audio v3, Fish Audio S2 Pro, Kokoro 82M, OmniVoice, Chatterbox, BreezeTTS 2 y Supertonic 3.
El reconocimiento de voz incluye dos tamaños de Qwen3-ASR (0.6B y 1.7B), Fun-ASR-Nano, Higgs Audio v3 STT, VibeVoice ASR en versión normal y en streaming, Nemotron 3.5 ASR Streaming y Voxtral-Mini-4B-Realtime.
Para generar música están MiniMax Music 3, ACE-Step 1.5 Turbo, las versiones Small y Medium de Stable Audio 3 y algunos más.
Compilarlo en local
Empieza por descargar el código:
git clone https://github.com/0xShug0/audio.cpp.git
cd audio.cpp
Después compila para el backend que corresponda a tu hardware. En Linux con Vulkan:
scripts/build_linux.sh --backend vulkan --target audiocpp_cli --target audiocpp_server
En Linux con una GPU de NVIDIA usarías CUDA, dejando que detecte la arquitectura o indicando unas concretas:
scripts/build_linux.sh --backend cuda --cuda-arch native --target audiocpp_cli --target audiocpp_server
scripts/build_linux.sh --backend cuda --cuda-arch "86;89" --target audiocpp_cli --target audiocpp_server
En un Mac, usa el script de Metal:
scripts/build_metal.sh --target audiocpp_cli
Cuando termina la compilación con Metal, el binario audiocpp_cli queda en build/macos-metal-release/bin. Esa única CLI se encarga de un amplio conjunto de tareas, que se eligen por nombre:
- Detección y análisis:
vaddetecta actividad de voz,spkse ocupa de los embeddings y el reconocimiento de hablantes,alignhace alineación forzada ydiarsepara a los hablantes. - Voz básica:
asrtranscribe,ttssintetiza,clonclona voces yvdeslas diseña. - Transformación:
vcconvierte voces,s2spasa de voz a voz,svcconvierte voces cantadas ysepsepara fuentes. - Generación y transcripción:
genproduce música o sonido a partir de texto o audio de referencia, ymidiconvierte el audio en eventos MIDI simbólicos.
Cómo conseguir los modelos
Las descargas las gestiona un Model Manager incluido, que entiende estos comandos:
list list installable packages
info show one package or family default
sizes check package download sizes without downloading files
installed report locally installed packages without network access
uninstall remove only the files belonging to one installed package
clean-partial remove abandoned staging downloads for one package
install install one Hugging Face or ModelScope snapshot package
Empieza por ver la lista de lo que hay disponible:
python3 tools/model_manager_v2.py list
La consola muestra los paquetes que se pueden instalar. Para probar la voz en ambos sentidos, instala Parakeet-TDT-0.6B-v3 para el reconocimiento y VoxCPM2 para la síntesis:
# ASR
python3 tools/model_manager_v2.py install parakeet_tdt_q8_0
# TTS
python3 tools/model_manager_v2.py install voxcpm2_q8_0
Probándolo
Para el reconocimiento, pasa a la CLI el archivo GGUF de Parakeet y un archivo WAV:
build/macos-metal-release/bin/audiocpp_cli \
--task asr \
--model models/Parakeet-TDT-0.6B-v3-GGUF/parakeet-tdt-0.6b-v3-q8_0.gguf \
--audio lisa.wav
La consola responde con la familia del modelo, la tarea, el modo, marcas de tiempo por palabra con posiciones de muestra y nivel de confianza, y el texto final de la transcripción:
family=parakeet_tdt
task=asr
mode=offline
word_timestamps=[{"start_sample":0,"end_sample":14080,"word":"Breeze","confidence":0}, ...]
text_output=Breeze TTS2 is an open-weight text-to-speech model built for real-time interaction.
Para la síntesis con VoxCPM2, una clonación de voz básica necesita una cadena de texto y una grabación de referencia:
build/macos-metal-release/bin/audiocpp_cli \
--task tts \
--model models/VoxCPM2-GGUF \
--text "audio.cpp is running VoxCPM2 locally." \
--voice-ref lisa.wav \
--out voxcpm2.wav
Una clonación "ultimate" más precisa añade también la transcripción del clip de referencia, lo que ayuda al modelo a acercarse más a la voz:
build/macos-metal-release/bin/audiocpp_cli \
--task tts \
--model models/VoxCPM2-GGUF \
--text "audio.cpp is running VoxCPM2 locally." \
--voice-ref lisa.wav \
--reference-text "Breeze TTS 2 is an open-weight text-to-speech model built for real-time interaction." \
--out voxcpm2.wav
¿Merece la pena?
Comparado con mlx-audio, audio.cpp es más ligero. No necesita un entorno de Python ni un montón de paquetes de terceros. Si estás creando funciones de IA multiplataforma que dependen del reconocimiento o la síntesis de voz, pruébalo. Si lo único que necesitas es transcribir, echa un vistazo a transcribe.cpp, un proyecto hermano que cubre 16 modelos de ASR de código abierto populares y más de 60 variantes.