Architecture

speech-swift est organisé comme un package Swift modulaire avec des protocoles partagés, des modules de modèles indépendants et une CLI unifiée. Toute l'inférence s'exécute sur l'appareil en utilisant MLX (GPU Metal) ou CoreML (Neural Engine).

Graphe de dépendances des modules

                    ┌──────────┐
                    │ AudioCLI │  (point d'entrée)
                    └────┬─────┘
                         │
                  ┌──────┴──────┐
                  │ AudioCLILib │  (commandes)
                  └──────┬──────┘
                         │
       ┌─────────┬───────┼───────┬──────────┬──────────────┐
       │         │       │       │          │              │
  ┌────┴───┐ ┌──┴──┐ ┌──┴──┐ ┌─┴────┐ ┌───┴────┐ ┌──────┴───────┐
  │Qwen3ASR│ │Qwen3│ │Cosy │ │Perso-│ │Speech- │ │  Speech-     │
  │Parakeet│ │ TTS │ │Voice│ │naPlex│ │  VAD   │ │Enhancement   │
  └────┬───┘ └──┬──┘ └──┬──┘ └──┬───┘ └───┬───┘ └──────┬───────┘
       │        │       │       │         │             │
       └────────┴───────┼───────┴─────────┘             │
                        │                               │
                 ┌──────┴──────┐                        │
                 │ Qwen3Common │  (couches partagées)   │
                 └──────┬──────┘                        │
                        │                               │
                 ┌──────┴──────┐                        │
                 │ AudioCommon │ ◄──────────────────────┘
                 └─────────────┘  (protocoles, E/S audio)

Backends d'inférence

BackendMatérielModèles
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 Encodeur Qwen3-ASR (hybride), Parakeet TDT, Parakeet EOU streaming, Omnilingual ASR 300M, Kokoro-82M, Qwen3.5-Chat (optionnel), diarisation Sortformer, DeepFilterNet3, Silero VAD (optionnel), WeSpeaker (optionnel)
Accelerate CPU (SIMD) Prétraitement audio (STFT, mel, FFT), traitement du signal

Format des poids de modèles

Les modèles MLX utilisent le format safetensors avec une quantification 4 bits ou 8 bits (taille de groupe 64). Les modèles CoreML utilisent le format compilé .mlmodelc. Les scripts de conversion dans scripts/ convertissent depuis des checkpoints PyTorch.

ModèleParamètresQuantificationTaille sur disque
Qwen3-ASR 0.6B (MLX)~600M4 bits / 8 bits680 Mo / 1,0 Go
Qwen3-ASR 0.6B (CoreML)~186M (encodeur)INT8~180 Mo
Qwen3-ASR 1.7B (MLX)~1,7B4 bits / 8 bits2,1 Go / 3,2 Go
Parakeet-TDT 0.6B (CoreML)~600MINT8500 Mo
Parakeet-EOU 120M (CoreML)~120MINT8~120 Mo
Omnilingual-ASR-CTC 300M (CoreML)326MINT8312 Mo
Omnilingual-ASR-CTC 300M (MLX)326M4 bits / 8 bits193 Mo / 342 Mo
Omnilingual-ASR-CTC 1B (MLX)1,01B4 bits / 8 bits549 Mo / 1006 Mo
Omnilingual-ASR-CTC 3B (MLX)~3B4 bits / 8 bits1,71 Go / 3,16 Go
Omnilingual-ASR-CTC 7B (MLX)~7B4 bits / 8 bits3,55 Go / 6,63 Go
Qwen3-ForcedAligner 0.6B (MLX)~600M4 bits / 8 bits979 Mo / 1,4 Go
Qwen3-ForcedAligner 0.6B (CoreML)~600MINT4 / INT8630 Mo / 1,0 Go
Qwen3-TTS 0.6B (MLX)~600M4 bits / 8 bits1,7 Go / 2,4 Go
Qwen3-TTS 1.7B (MLX)~1,7B4 bits / 8 bits3,2 Go / 4,8 Go
CosyVoice3 0.5B (MLX)~500MLLM 4 bits~1,2 Go
Kokoro-82M (CoreML)82MINT8 (1 bucket)~89 Mo
Qwen3.5-Chat 0.8B (MLX)~800MINT4418 Mo
Qwen3.5-Chat 0.8B (CoreML)~800MINT8981 Mo
PersonaPlex 7B (MLX)~7B4 bits / 8 bits4,9 Go / 9,1 Go
Pyannote VAD (MLX)~1,49Mfloat32~5,7 Mo
Silero VAD v5~309Kfloat32~1,2 Mo (MLX et CoreML)
WeSpeaker ResNet34~6,6Mfloat32~25 Mo (MLX et CoreML)
Sortformer (CoreML)float16~50 Mo
DeepFilterNet3 (CoreML)~2,1MFP16~4,2 Mo

Optimisations de performance

Traitement audio

Toutes les E/S audio utilisent du PCM Float32. Le rééchantillonnage interne gère la conversion de format :

ModèleTaux attenduFormat
Qwen3-ASR16 kHzMono Float32
Qwen3-TTS24 kHz en sortieMono Float32
CosyVoice324 kHz en sortieMono Float32
Kokoro-82M24 kHz en sortieMono Float32
PersonaPlex24 kHz E/SMono Float32
Pyannote VAD16 kHzMono Float32
Silero VAD16 kHzMono Float32
WeSpeaker16 kHzMono Float32
DeepFilterNet348 kHzMono Float32

Structure des sources

Sources/
  AudioCommon/            Protocoles partagés, E/S audio, téléchargeur HuggingFace,
                          SentencePieceModel (lecteur protobuf)
  MLXCommon/              Utilitaires MLX : chargement des poids, aides QuantizedLinear,
                          aide d'attention multi-tête SDPA, budget Metal
  Qwen3Common/            Composants de modèle partagés (cache KV, RoPE, quantification)
  Qwen3ASR/               Qwen3-ASR parole vers texte
  ParakeetASR/            Parakeet TDT parole vers texte (CoreML)
  ParakeetStreamingASR/   Dictée streaming Parakeet EOU 120M (CoreML)
  OmnilingualASR/         Meta wav2vec2 + CTC, 1 672 langues
                          (CoreML 300M + MLX 300M / 1B / 3B / 7B)
  Qwen3TTS/               Qwen3-TTS texte vers parole
  CosyVoiceTTS/           CosyVoice3 texte vers parole
  KokoroTTS/              Kokoro-82M texte vers parole (CoreML)
  Qwen3Chat/              Chat LLM embarqué Qwen3.5-0.8B (MLX + CoreML)
  PersonaPlex/            PersonaPlex parole-à-parole
  SpeechVAD/              VAD (Silero + Pyannote), diarisation, empreintes de locuteur
  SpeechEnhancement/      Suppression de bruit DeepFilterNet3 (CoreML)
  AudioCLILib/            Implémentations des commandes CLI
  AudioCLI/               Point d'entrée CLI

scripts/              Conversion de modèles (PyTorch → MLX/CoreML), benchmarking
Tests/                Tests unitaires et d'intégration
Examples/             Applications de démonstration (PersonaPlexDemo, SpeechDemo)