Speech Swift: Kit de herramientas de voz en el dispositivo para Apple Silicon
Explora Speech Swift, un kit de herramientas de código abierto para ASR, TTS, voz a voz, VAD y diarización en Apple Silicon usando MLX y CoreML.
¿Qué es Speech Swift?
Speech Swift es un kit de herramientas de voz de IA de código abierto diseñado específicamente para Apple Silicon (chips de la serie M y Neural Engine). Ofrece un conjunto completo de capacidades de voz—reconocimiento automático del habla (ASR), texto a voz (TTS), traducción de voz a voz, detección de actividad de voz (VAD), diarización de hablantes y más—directamente en tu Mac o dispositivo iOS. Todo el procesamiento ocurre localmente, sin dependencias en la nube, sin claves API y sin que los datos salgan de tu dispositivo.
Por qué es importante la voz en el dispositivo
Ejecutar modelos de voz en el dispositivo ofrece varias ventajas críticas:
- Privacidad: Los datos de audio nunca salen de tu dispositivo, eliminando preocupaciones sobre grabación o transcripción basada en la nube.
- Latencia: La inferencia local elimina los viajes de ida y vuelta de la red, permitiendo transmisión en tiempo real y agentes de voz interactivos.
- Capacidad sin conexión: Funciona sin conexión a internet, ideal para viajes, áreas remotas o entornos seguros.
- Costo: Sin tarifas de uso de API ni costos de computación en la nube.
Capacidades clave y modelos
Speech Swift está organizado en objetivos modulares de Swift Package Manager (SPM), por lo que importas solo lo que necesitas. Aquí hay un desglose de los principales grupos de capacidades:
Voz a texto (ASR)
- Qwen3-ASR: Voz a texto compatible con 52 idiomas, con backends híbridos MLX y CoreML. Disponible en tamaños de parámetros 0.6B y 1.7B.
- WhisperASR: Implementación nativa de CoreML de OpenAI Whisper Large-v3 Turbo, optimizada para el Neural Engine.
- Parakeet TDT: FastConformer de NVIDIA con decodificador TDT, compatible con 25 idiomas europeos a través de CoreML.
- Omnilingual ASR: Modelo basado en wav2vec2 de Meta que cubre 1,672 idiomas en 32 escrituras, con variantes CoreML (300M) y MLX (300M/1B/3B/7B). Logra 0.28 RTF en iPhone 16 Pro.
- Streaming Dictation: Dictado en tiempo real con resultados parciales y detección de final de enunciado (Parakeet-EOU-120M), logrando 0.04 RTF en iPhone 16 Pro.
- Nemotron Streaming: ASR de transmisión de baja latencia de NVIDIA con puntuación y capitalización nativas, disponible en variantes multilingüe (40 configuraciones regionales de idioma) y solo inglés.
Texto a voz (TTS)
- Qwen3-TTS: TTS de transmisión de alta calidad con soporte para altavoces personalizados, 10 idiomas.
- CosyVoice TTS: TTS de transmisión con clonación de voz, diálogo multi-altavoz y etiquetas de emoción (9 idiomas).
- VoxCPM2: TTS de calidad de estudio a 48 kHz con clonación de voz y diseño de voz guiado por instrucciones (2B parámetros, MLX bf16/int8, 30 idiomas).
- IndexTTS2: Clonación de voz nativa MLX a partir de una voz de referencia (clase 1.5B, inglés y mandarín).
- F5-TTS: Clonación de voz zero-shot a partir de un clip de referencia corto (DiT flow matching + Vocos, MLX fp16, 24 kHz).
- Higgs TTS 3: TTS conversacional con clonación de voz zero-shot y etiquetas integradas de emoción/estilo/EFX/prosodia (Boson Higgs TTS 3, backbone Qwen3-4B, MLX bf16, más de 100 idiomas).
- Kokoro TTS: TTS ligero en el dispositivo (82M parámetros, CoreML/Neural Engine, 54 voces, listo para iOS, 10 idiomas) con 0.08 RTF en iPhone 16 Pro.
- VibeVoice TTS: TTS de formato largo/multi-altavoz para síntesis de podcasts/audiolibros de hasta 90 minutos (Microsoft VibeVoice Realtime-0.5B + 1.5B, MLX, inglés y chino).
- Magpie TTS: TTS multilingüe de NVIDIA (357M parámetros, MLX INT8 o CoreML INT8, 9 idiomas, 5 altavoces integrados).
- Supertonic TTS: TTS de flow-matching en el dispositivo (99M parámetros, CoreML/Neural Engine, 31 idiomas, 10 voces, 44.1 kHz) con 0.15 RTF en iPhone 16 Pro.
- Chatterbox TTS: TTS multilingüe con clonación de voz zero-shot (Resemble AI, MLX fp16, 23 idiomas en tiempo de ejecución).
- OmniVoice TTS: TTS de difusión no autorregresiva con clonación de voz zero-shot (k2-fsa, backbone Qwen3, MLX, más de 600 idiomas, Apache-2.0).
- Indic-Mio: TTS en hindi/indic con marcadores de emoción integrados y clonación de voz de referencia opcional (MLX, 24 kHz).
LLMs y traducción
- Qwen3Chat: Chat LLM en el dispositivo con tokens de transmisión (Qwen3.5-0.8B MLX/CoreML, más backends MLX Qwen3 4B y Gemma 4 E2B/E4B).
- FunctionGemma: LLM en el dispositivo para llamadas estructuradas de funciones/herramientas (Gemma 3 270M, CoreML 8-bit paletizado, Neural Engine, ~252 tok/s en M5 Pro, 128 tok/s en iPhone 16 Pro).
- MADLAD-400: Traducción de muchos a muchos en más de 400 idiomas (3B, MLX INT4 + INT8, T5 v1.1, Apache 2.0).
Voz a voz y agentes de voz
- Hibiki Zero-3B: Traducción de voz a voz en transmisión (francés/español/portugués/alemán a inglés, MLX INT4 + INT8, pila Kyutai Moshi/Mimi).
- PersonaPlex: Voz a voz full-duplex (7B parámetros, audio de entrada → audio de salida, 18 preajustes de voz).
- Audio2Face-3D: Animación facial impulsada por voz para avatares (NVIDIA Audio2Face-3D v2.3 Mark, 301 coeficientes faciales, MLX).
Mejora, separación y generación de audio
- DeepFilterNet3: Supresión de ruido en tiempo real (2.1M parámetros, 48 kHz).
- Source Separation: Separación de fuentes musicales mediante HTDemucs (Demucs v4) y Open-Unmix (4 pistas: voces, batería, bajo, otros).
- MAGNeT: Generación de texto a música (Meta MAGNeT Small 300M / Medium 1.5B, MLX INT8, clips de 30 segundos a 32 kHz).
- Stable Audio 3: Generación de texto a audio/música (Stable Audio 3 Medium, MLX INT8/INT4, 44.1 kHz estéreo, duración variable).
- FlashSR: Superresolución de audio (FlashSR ICASSP 2025, MLX, 48 kHz mono, difusión destilada de 1 paso).
Detección de turnos, diarización e identidad del hablante
- Wake-word: Detección de palabras clave en el dispositivo (KWS Zipformer 3M, CoreML, 26× tiempo real, lista de palabras clave configurable).
- VAD: Detección de actividad de voz (Silero streaming, Pyannote offline, FireRedVAD más de 100 idiomas).
- Speaker Diarization: Quién habló cuándo (pipeline Pyannote, Sortformer de extremo a extremo en Neural Engine).
- Speaker Embeddings: WeSpeaker ResNet34 (256-dim), CAM++ (192-dim).
Primeros pasos
Instalación a través de Swift Package Manager
Agrega el paquete a tu Package.swift:
.package(url: "https://github.com/soniqo/speech-swift", branch: "main")
Luego importa solo los módulos que necesitas:
.product(name: "ParakeetStreamingASR", package: "speech-swift"),
.product(name: "SpeechUI", package: "speech-swift"), // vistas SwiftUI opcionales
Transcribir audio en 3 líneas
import ParakeetStreamingASR
let model = try await ParakeetStreamingASRModel.fromPretrained()
let text = try model.transcribeAudio(audioSamples, sampleRate: 16000)
Transmisión en vivo con parciales
for await partial in model.transcribeStream(audio: samples, sampleRate: 16000) {
print(partial.isFinal ? "FINAL: \(partial.text)" : "... \(partial.text)")
}
Vista de dictado SwiftUI
import SwiftUI
import ParakeetStreamingASR
import SpeechUI
@MainActor
struct DictateView: View {
@State private var store = TranscriptionStore()
var body: some View {
TranscriptionView(finals: store.finalLines, currentPartial: store.currentPartial)
.task {
let model = try? await ParakeetStreamingASRModel.fromPretrained()
guard let model else { return }
for await p in model.transcribeStream(audio: samples, sampleRate: 16000) {
store.apply(text: p.text, isFinal: p.isFinal)
}
}
}
}
Texto a voz
import Qwen3TTS
import AudioCommon
let model = try await Qwen3TTSModel.fromPretrained()
let audio = model.synthesize(text: "Hello world", language: "english")
try WAVWriter.write(samples: audio, sampleRate: 24000, to: outputURL)
Detección de actividad de voz
import SpeechVAD
let vad = try await SileroVADModel.fromPretrained()
let segments = vad.detectSpeech(audio: samples, sampleRate: 16000)
for s in segments { print("\(s.startTime)s → \(s.endTime)s") }
Diarización de hablantes
import SpeechVAD
let diarizer = try await DiarizationPipeline.fromPretrained()
let segments = diarizer.diarize(audio: samples, sampleRate: 16000)
for s in segments { print("Speaker \(s.speakerId): \(s.startTime)s - \(s.endTime)s") }
Arquitectura y diseño
Speech Swift se divide en un objetivo SPM por modelo, por lo que los consumidores solo pagan por lo que importan. La infraestructura compartida reside en AudioCommon (protocolos, E/S de audio, descargador de HuggingFace, SentencePieceModel) y MLXCommon (carga de pesos, ayudantes QuantizedLinear, ayudante de atención multi-cabeza SDPA).
Pesos del modelo y almacenamiento en caché
Los pesos del modelo se descargan de HuggingFace en el primer uso y se almacenan en caché en ~/Library/Caches/qwen3-speech/. Puedes anular esto con QWEN3_CACHE_DIR (CLI) o cacheDir: (API Swift). Todos los puntos de entrada fromPretrained() también aceptan offlineMode: true para omitir la red cuando los pesos ya están en caché.
Para usuarios en China continental (o en cualquier lugar donde huggingface.co sea lento o esté bloqueado), puedes obtener desde un espejo configurando HF_ENDPOINT, por ejemplo, export HF_ENDPOINT=https://hf-mirror.com.
Requisitos
- Swift 6+, Xcode 16+ (con Metal Toolchain)
- macOS 15+ (Sequoia) o iOS 18+
- Apple Silicon (M1/M2/M3/M4)
El requisito mínimo de macOS 15 / iOS 18 proviene de MLState—la API de estado ANE persistente de Apple utilizada por los pipelines de CoreML (Qwen3-ASR, Qwen3-Chat, Qwen3-TTS) para mantener los cachés KV residentes en el Neural Engine a través de pasos de token.
Benchmarks de rendimiento
Speech Swift incluye benchmarks de CoreML en iPhone 16 Pro en el dispositivo (RTF, tokens/s, memoria máxima) en docs/benchmarks/ios-coreml.md. Aspectos destacados clave:
- Parakeet-EOU-120M: 0.04 RTF en iPhone 16 Pro (dictado en transmisión)
- Omnilingual ASR (300M): 0.28 RTF en iPhone 16 Pro
- Kokoro-82M: 0.08 RTF en iPhone 16 Pro (TTS)
- Supertonic-3 (99M): 0.15 RTF en iPhone 16 Pro (TTS)
- FunctionGemma (270M): ~252 tok/s en M5 Pro, 128 tok/s en iPhone 16 Pro
Casos de uso
- Agentes de voz: Construye asistentes de IA conversacionales que se ejecutan completamente en el dispositivo con capacidades de voz a voz en tiempo real.
- Transcripción: Transcripción multilingüe de alta precisión para reuniones, conferencias o contenido multimedia.
- Generación de voz: Genera voz de sonido natural para accesibilidad, creación de contenido o aplicaciones de clonación de voz.
- Mejora de audio: Limpia grabaciones ruidosas, separa fuentes de audio o restaura voz degradada.
Comunidad y recursos
- Documentación completa: soniqo.audio
- Modelos HuggingFace: soniqo en HuggingFace
- Blog: Inmersiones técnicas profundas sobre arquitectura y benchmarks
- Discord: Discusión comunitaria y soporte
Licencia
Apache 2.0
Conclusión
Speech Swift representa un hito significativo para el procesamiento de voz de IA en el dispositivo en Apple Silicon. Al combinar el poder de MLX y CoreML con un paquete Swift modular y amigable para desarrolladores, permite una nueva clase de aplicaciones de voz que preservan la privacidad y tienen baja latencia. Ya sea que estés construyendo un asistente de voz, una herramienta de transcripción o una aplicación de audio creativa, Speech Swift proporciona los componentes básicos que necesitas—todo ejecutándose localmente en tu Mac o iPhone.