Arquitectura

speech-swift está organizado como un paquete Swift modular con protocolos compartidos, módulos de modelo independientes y una CLI unificada. Toda la inferencia se ejecuta en el dispositivo usando MLX (GPU Metal) o CoreML (Neural Engine).

Grafo de dependencias de módulos

                    ┌──────────┐
                    │ AudioCLI │  (punto de entrada)
                    └────┬─────┘
                         │
                  ┌──────┴──────┐
                  │ AudioCLILib │  (comandos)
                  └──────┬──────┘
                         │
       ┌─────────┬───────┼───────┬──────────┬──────────────┐
       │         │       │       │          │              │
  ┌────┴───┐ ┌──┴──┐ ┌──┴──┐ ┌─┴────┐ ┌───┴────┐ ┌──────┴───────┐
  │Qwen3ASR│ │Qwen3│ │Cosy │ │Perso-│ │Speech- │ │  Speech-     │
  │Parakeet│ │ TTS │ │Voice│ │naPlex│ │  VAD   │ │Enhancement   │
  └────┬───┘ └──┬──┘ └──┬──┘ └──┬───┘ └───┬───┘ └──────┬───────┘
       │        │       │       │         │             │
       └────────┴───────┼───────┴─────────┘             │
                        │                               │
                 ┌──────┴──────┐                        │
                 │ Qwen3Common │  (capas compartidas)   │
                 └──────┬──────┘                        │
                        │                               │
                 ┌──────┴──────┐                        │
                 │ AudioCommon │ ◄──────────────────────┘
                 └─────────────┘  (protocolos, E/S de audio)

Backends de inferencia

BackendHardwareModelos
MLX GPU Metal Qwen3-ASR, Qwen3-TTS, CosyVoice3, Qwen3.5-Chat, PersonaPlex, Omnilingual ASR (300M / 1B / 3B / 7B), Pyannote, Silero VAD, WeSpeaker
CoreML Neural Engine Encoder de Qwen3-ASR (híbrido), Parakeet TDT, Parakeet EOU streaming, Omnilingual ASR 300M, Kokoro-82M, Qwen3.5-Chat (opcional), diarización Sortformer, DeepFilterNet3, Silero VAD (opcional), WeSpeaker (opcional)
Accelerate CPU (SIMD) Preprocesamiento de audio (STFT, mel, FFT), procesamiento de señales

Formato de pesos de los modelos

Los modelos MLX usan el formato safetensors con cuantización de 4 bits u 8 bits (tamaño de grupo 64). Los modelos CoreML usan el formato compilado .mlmodelc. Los scripts de conversión en scripts/ convierten desde checkpoints de PyTorch.

ModeloParámetrosCuantizaciónTamaño en disco
Qwen3-ASR 0.6B (MLX)~600M4-bit / 8-bit680 MB / 1.0 GB
Qwen3-ASR 0.6B (CoreML)~186M (encoder)INT8~180 MB
Qwen3-ASR 1.7B (MLX)~1.7B4-bit / 8-bit2.1 GB / 3.2 GB
Parakeet-TDT 0.6B (CoreML)~600MINT8500 MB
Parakeet-EOU 120M (CoreML)~120MINT8~120 MB
Omnilingual-ASR-CTC 300M (CoreML)326MINT8312 MB
Omnilingual-ASR-CTC 300M (MLX)326M4-bit / 8-bit193 MB / 342 MB
Omnilingual-ASR-CTC 1B (MLX)1.01B4-bit / 8-bit549 MB / 1006 MB
Omnilingual-ASR-CTC 3B (MLX)~3B4-bit / 8-bit1.71 GB / 3.16 GB
Omnilingual-ASR-CTC 7B (MLX)~7B4-bit / 8-bit3.55 GB / 6.63 GB
Qwen3-ForcedAligner 0.6B (MLX)~600M4-bit / 8-bit979 MB / 1.4 GB
Qwen3-ForcedAligner 0.6B (CoreML)~600MINT4 / INT8630 MB / 1.0 GB
Qwen3-TTS 0.6B (MLX)~600M4-bit / 8-bit1.7 GB / 2.4 GB
Qwen3-TTS 1.7B (MLX)~1.7B4-bit / 8-bit3.2 GB / 4.8 GB
CosyVoice3 0.5B (MLX)~500MLLM en 4-bit~1.2 GB
Kokoro-82M (CoreML)82MINT8 (1 bucket)~89 MB
Qwen3.5-Chat 0.8B (MLX)~800MINT4418 MB
Qwen3.5-Chat 0.8B (CoreML)~800MINT8981 MB
PersonaPlex 7B (MLX)~7B4-bit / 8-bit4.9 GB / 9.1 GB
Pyannote VAD (MLX)~1.49Mfloat32~5.7 MB
Silero VAD v5~309Kfloat32~1.2 MB (MLX y CoreML)
WeSpeaker ResNet34~6.6Mfloat32~25 MB (MLX y CoreML)
Sortformer (CoreML)float16~50 MB
DeepFilterNet3 (CoreML)~2.1MFP16~4.2 MB

Optimizaciones de rendimiento

Procesamiento de audio

Toda la E/S de audio usa PCM Float32. El remuestreo interno gestiona la conversión de formato:

ModeloTasa esperadaFormato
Qwen3-ASR16 kHzMono Float32
Qwen3-TTS24 kHz de salidaMono Float32
CosyVoice324 kHz de salidaMono Float32
Kokoro-82M24 kHz de salidaMono Float32
PersonaPlex24 kHz E/SMono Float32
Pyannote VAD16 kHzMono Float32
Silero VAD16 kHzMono Float32
WeSpeaker16 kHzMono Float32
DeepFilterNet348 kHzMono Float32

Estructura del código fuente

Sources/
  AudioCommon/            Protocolos compartidos, E/S de audio, descargador
                          de HuggingFace, SentencePieceModel (lector protobuf)
  MLXCommon/              Utilidades MLX: carga de pesos, helpers QuantizedLinear,
                          helper de atención multi-head SDPA, presupuesto metal
  Qwen3Common/            Componentes de modelo compartidos (caché KV, RoPE, cuantización)
  Qwen3ASR/               Qwen3-ASR voz a texto
  ParakeetASR/            Parakeet TDT voz a texto (CoreML)
  ParakeetStreamingASR/   Dictado en streaming Parakeet EOU 120M (CoreML)
  OmnilingualASR/         Meta wav2vec2 + CTC, 1.672 idiomas
                          (CoreML 300M + MLX 300M / 1B / 3B / 7B)
  Qwen3TTS/               Qwen3-TTS texto a voz
  CosyVoiceTTS/           CosyVoice3 texto a voz
  KokoroTTS/              Kokoro-82M texto a voz (CoreML)
  Qwen3Chat/              Chat LLM en el dispositivo Qwen3.5-0.8B (MLX + CoreML)
  PersonaPlex/            PersonaPlex voz a voz
  SpeechVAD/              VAD (Silero + Pyannote), diarización, embeddings de hablante
  SpeechEnhancement/      Supresión de ruido DeepFilterNet3 (CoreML)
  AudioCLILib/            Implementaciones de comandos de la CLI
  AudioCLI/               Punto de entrada de la CLI

scripts/              Conversión de modelos (PyTorch → MLX/CoreML), benchmarking
Tests/                Pruebas unitarias y de integración
Examples/             Apps de demostración (PersonaPlexDemo, SpeechDemo)