Inicio / Artículos / audio.cpp: reconocimiento de voz y TTS multiplataforma en C++ puro

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.

833 palabras

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: vad detecta actividad de voz, spk se ocupa de los embeddings y el reconocimiento de hablantes, align hace alineación forzada y diar separa a los hablantes.
  • Voz básica: asr transcribe, tts sintetiza, clon clona voces y vdes las diseña.
  • Transformación: vc convierte voces, s2s pasa de voz a voz, svc convierte voces cantadas y sep separa fuentes.
  • Generación y transcripción: gen produce música o sonido a partir de texto o audio de referencia, y midi convierte 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.