Speech Core
Motor de voz C++17 open source para agentes de voz — detección de actividad vocal, voz a texto por lotes y en streaming en tiempo real, diarización de hablantes y texto a voz, todo ejecutándose en el dispositivo en Linux, Windows y Android. Apache 2.0.
Qué es
Speech Core es un pequeño núcleo de orquestación — máquina de estados, detección de turnos, gestión de interrupciones, utilidades de audio, sin dependencias de ML — más un conjunto de interfaces abstractas para modelos de voz. La inferencia se ejecuta localmente en la CPU; el audio nunca sale de la máquina y no hay Python en tiempo de inferencia. La inferencia de modelos es opcional (opt-in) mediante dos backends intercambiables que puedes activar de forma independiente, o puedes aportar tus propias implementaciones de las interfaces.
- Orquestación de agentes de voz —
VoicePipelinecompone VAD, STT en streaming, un LLM y TTS en un bucle de agente full-duplex con barge-in, detección de turnos y un bucle de tool-calls. Consulta docs/pipeline.md y la visión general de agentes de voz. - Diarización de hablantes en C++ puro —
DiarizationPipelinecompone un segmentador y un generador de embeddings para producir segmentos etiquetados por hablante, sin dependencia propia de ningún runtime de ML. - Impulsa el resto del stack — speech-android es un SDK Kotlin + puente JNI sobre Speech Core, y Speech Studio usa su motor LiteRT VoxCPM2 en Windows y Linux. En las plataformas Apple, la librería hermana es speech-swift.
Plataformas y backends
| Backend | Plataformas | Aceleración por hardware |
|---|---|---|
ONNX Runtime (SPEECH_CORE_WITH_ONNX) | Linux, macOS, Windows, Android | NNAPI en Android, QNN en Linux Qualcomm, NVIDIA CUDA / TensorRT opcional (-DSPEECH_CORE_WITH_CUDA=ON) |
LiteRT (SPEECH_CORE_WITH_LITERT) | Linux x86_64, Windows x86_64, Android, macOS arm64 | CPU por ahora |
Activa un backend, los dos o ninguno — el núcleo de orquestación compila sin ningún runtime de ML.
Modelos compatibles
| Modelo | Tarea | ONNX | LiteRT |
|---|---|---|---|
| Silero VAD v5 | Detección de actividad vocal | ✓ | ✓ |
| Parakeet TDT v3 (0.6B) | Voz a texto (114 idiomas) | ✓ | ✓ |
| Nemotron Speech Streaming (0.6B) | Voz a texto en streaming (inglés) | ✓ | ✓ |
| Nemotron-3.5 ASR Streaming Multilingual (0.6B) | Voz a texto en streaming (multilingüe, condicionado por prompt) | ✓ | ✓ |
| Omnilingual ASR CTC (300M) | Voz a texto (multilingüe) | — | ✓ |
| Pyannote Segmentation 3.0 | Diarización (segmentación) | — | ✓ |
| WeSpeaker ResNet34-LM | Embedding de hablante | — | ✓ |
| VoxCPM2 (2B) | Texto a voz (48 kHz, clonación de voz) | — | ✓ |
| Kokoro 82M | Texto a voz | ✓ | — |
| DeepFilterNet3 | Mejora de voz | ✓ | — |
| PersonaPlex 7B | Voz a voz full-duplex (CUDA) | ✓ | — |
Inicio rápido
Compila el núcleo más el backend LiteRT (la librería del runtime se extrae del wheel ai-edge-litert — sin compilar TensorFlow):
git clone https://github.com/soniqo/speech-core && cd speech-core
scripts/fetch_litert.sh build/litert
cmake -B build -DCMAKE_BUILD_TYPE=Release \
-DSPEECH_CORE_WITH_LITERT=ON -DLITERT_DIR=$PWD/build/litert
cmake --build build
Después enlaza los targets que necesites:
target_link_libraries(my_app PRIVATE speech_core) # orchestration only
target_link_libraries(my_app PRIVATE speech_core speech_core_models) # + ONNX models
target_link_libraries(my_app PRIVATE speech_core speech_core_models_litert) # + LiteRT models
Transcribir un búfer de audio son unas pocas líneas:
#include <speech_core/models/litert_parakeet_stt.h>
speech_core::LiteRTParakeetStt stt(
"parakeet-encoder.tflite", "parakeet-decoder-joint.tflite", "vocab.json");
auto r = stt.transcribe(audio, n_samples, 16000); // r.text / r.language / r.confidence
Un build de referencia para Linux — libspeech.so con una pequeña ABI en C, una CLI de demo con ALSA y herramientas de transcripción/síntesis/fonemización — vive en examples/linux. Está orientado a ARM64 embebido (Yocto, Qualcomm SA8295P / SA8255P) y a cualquier máquina de desarrollo Linux. Los pasos de configuración están en la guía Empezar — Linux.
En Android, usa speech-android — un SDK Kotlin que empaqueta Speech Core tras un puente JNI (implementation("audio.soniqo:speech:0.0.9")). En macOS e iOS, usa speech-swift, que ejecuta los modelos en CoreML, MLX y el Apple Neural Engine.
Documentación
- docs/ — documentación completa dentro del repositorio
- docs/pipeline.md — la máquina de estados de
VoicePipeline, la integración de AEC y el bucle de tool-calls - docs/models.md — inventario completo de modelos
- huggingface.co/soniqo — pesos de modelos convertidos (ONNX, LiteRT)
Feedback
Abre un issue en github.com/soniqo/speech-core/issues o únete al Discord.