Architektur

speech-swift ist als modulares Swift-Paket organisiert mit gemeinsamen Protokollen, unabhängigen Modellmodulen und einer einheitlichen CLI. Die gesamte Inferenz läuft auf dem Gerät über MLX (Metal-GPU) oder CoreML (Neural Engine).

Modul-Abhängigkeitsgraph

                    ┌──────────┐
                    │ AudioCLI │  (Einstiegspunkt)
                    └────┬─────┘
                         │
                  ┌──────┴──────┐
                  │ AudioCLILib │  (Befehle)
                  └──────┬──────┘
                         │
       ┌─────────┬───────┼───────┬──────────┬──────────────┐
       │         │       │       │          │              │
  ┌────┴───┐ ┌──┴──┐ ┌──┴──┐ ┌─┴────┐ ┌───┴────┐ ┌──────┴───────┐
  │Qwen3ASR│ │Qwen3│ │Cosy │ │Perso-│ │Speech- │ │  Speech-     │
  │Parakeet│ │ TTS │ │Voice│ │naPlex│ │  VAD   │ │Enhancement   │
  └────┬───┘ └──┬──┘ └──┬──┘ └──┬───┘ └───┬───┘ └──────┬───────┘
       │        │       │       │         │             │
       └────────┴───────┼───────┴─────────┘             │
                        │                               │
                 ┌──────┴──────┐                        │
                 │ Qwen3Common │  (gemeinsame Schichten)│
                 └──────┬──────┘                        │
                        │                               │
                 ┌──────┴──────┐                        │
                 │ AudioCommon │ ◄──────────────────────┘
                 └─────────────┘  (Protokolle, Audio-I/O)

MOSS Transcribe Diarize

MossTranscribe liefert Segmente mit Sprecherzuordnung und Zeitstempeln über native CoreML- und MLX-Backends. CoreML nutzt für kurze Aufnahmen einen festen Zustand mit 1.024 Tokens. MLX verwendet einen dynamischen Kontext mit 131.072 Tokens, affine INT5/INT8-Decodergewichte und optionale FP16/INT8-KV-Caches. Beide Laufzeiten arbeiten offline und autoregressiv, nicht als Streaming-Modell.

VoiceChat 11B

Aufgabe und Referenz: Duplex-Speech-to-Speech; SALM-Duplex: Efficient and Direct Duplex Modeling for Speech-to-Speech Language Model (Interspeech 2025), zitiert in NVIDIAs Upstream-VoiceChat-Modellkarte.

Vollständige Laufzeit, M5 Pro 48 GB, Release, 80-ms-Live-Takt: INT5 mit geschützten Heads erreicht etwa 8.69 GB Peak-RSS; drei kontrollierte Gesamtpfad-RTF-Ergebnisse waren 0.96, 0.96 und 0.99. Die optimierte INT8-Leistung wurde noch nicht neu gemessen.

VoiceChat implementiert den vollständigen nativen MLX-Audio-zu-Audio-Pfad: kausale FastConformer-Wahrnehmung, Nemotron-H-Duplex-Text-/Funktionskanäle, einen eigenständigen textkonditionierten EAR-TTS-Decoder mit acht MaskGIT-Iterationen und einen neuronalen 22,05-kHz-Codec. Das Streaming hält begrenzte Attention- und kausale Faltungs-Caches pro Schicht; das stabile Acht-Frame-Live-Codec-Fenster nutzt einen kompilierten Graphen. Jeder 80-ms-Eingangsframe erzeugt eine Sprachentscheidung, 31 RVQ-Codes und genau 1.764 Ausgabesamples. Der Loader verlangt ein vollständiges encoder/ + llm/ + tts/-Bundle und lehnt ältere reine Verständnis-Exporte ab. INT5 hält auf dem getesteten M5 Pro nun den durchschnittlichen RTF unter 1, obwohl der p95-Spielraum pro Frame knapp bleibt.

Inferenz-Backends

BackendHardwareModelle
MLX Metal-GPU Qwen3-ASR, Qwen3-TTS, CosyVoice3, IndexTTS2, Qwen3.5-Chat, PersonaPlex, VoiceChat 11B, Omnilingual ASR (300M / 1B / 3B / 7B), Cohere Transcribe 2B, Voxtral Mini 3B, Pyannote, Silero VAD, WeSpeaker, MOSS Transcribe Diarize, SpeechBrain ECAPA LID
CoreML Neural Engine Qwen3-ASR-Encoder (Hybrid), Parakeet TDT, Parakeet EOU Streaming, Omnilingual ASR 300M, Kokoro-82M, Qwen3.5-Chat (optional), Sortformer-Diarisierung, DeepFilterNet3, Silero VAD (optional), WeSpeaker (optional), MOSS Transcribe Diarize, SpeechBrain ECAPA LID
Accelerate CPU (SIMD) Audio-Vorverarbeitung (STFT, Mel, FFT), Signalverarbeitung

Modell-Gewichtsformat

MLX-Modelle verwenden das Format safetensors mit 4-Bit- oder 8-Bit-Quantisierung (Gruppengröße 64). CoreML-Modelle verwenden das kompilierte Format .mlmodelc. Konvertierungsskripte in scripts/ konvertieren aus PyTorch-Checkpoints.

Cohere und Voxtral bieten zusätzlich affine MLX-INT5-Pakete. MLX unterstützt kein affines INT7; INT8 ist die unterstützte Option mit höherer Qualität.

ModellParameterQuantisierungGröße auf Disk
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
Whisper Large-v3 Turbo (CoreML)809MFP161.6 GB
MOSS Transcribe Diarize 0.9B (MLX)908.5MFP16 audio + INT5 / INT8 decoder987.0 MiB / 1,200.1 MiB
MOSS Transcribe Diarize 0.9B (CoreML)~900MFP16 / INT8 block-321.7 GB / 1.2 GB
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
Cohere Transcribe 2B (MLX)2BFP16 / INT5 / INT83.85 / 1.62 / 2.25 GiB
Voxtral Mini 3B 2507 (MLX)3BFP16 / INT5 / INT88.71 / 3.77 / 5.18 GiB
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)~500M4-Bit-LLM~1,2 GB
IndexTTS2 expanded bundle (MLX)1.5B-classFP16 + auxiliary models~4.8 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
VoiceChat 11B (MLX)~11BINT5 / INT88.56 GB / 12.11 GB
Pyannote VAD (MLX)~1,49Mfloat32~5,7 MB
Silero VAD v5~309Kfloat32~1,2 MB (MLX & CoreML)
WeSpeaker ResNet34~6,6Mfloat32~25 MB (MLX & CoreML)
SpeechBrain ECAPA VoxLingua10721.25MFP16~40.6 MiB (MLX) / ~40.8 MiB (CoreML)
ReDimNet2-B612,3Mfloat16~25 MiB (CoreML)
Pyannote Community-1 (CoreML)8.35Mfloat32 + native VBx~32 MB
Sortformer (CoreML)float16~50 MB
DeepFilterNet3 (CoreML)~2,1MFP16~4,2 MB
LocalVQE v1.4-AEC (CoreML + C++)200K + 2.742FP16 + FP32~732 KB

Leistungsoptimierungen

Audio-Verarbeitung

Alle Audio-I/O verwenden Float32-PCM. Internes Resampling übernimmt die Formatkonvertierung:

ModellErwartete RateFormat
Qwen3-ASR16 kHzMono Float32
Cohere Transcribe 2B16 kHzMono Float32
Voxtral Mini 3B16 kHzMono Float32
Qwen3-TTS24 kHz AusgabeMono Float32
CosyVoice324 kHz AusgabeMono Float32
Kokoro-82M24 kHz AusgabeMono Float32
PersonaPlex24 kHz I/OMono Float32
Pyannote VAD16 kHzMono Float32
Silero VAD16 kHzMono Float32
WeSpeaker16 kHzMono Float32
SpeechBrain ECAPA LID16 kHzMono Float32
ReDimNet2-B616 kHzMono Float32
DeepFilterNet348 kHzMono Float32

Quellstruktur

Sources/
  AudioCommon/            Gemeinsame Protokolle, Audio-I/O, Systemausgabe-
                          Erfassung (SystemAudioTap), HuggingFace-
                          Downloader, SentencePieceModel (Protobuf-Reader)
  MLXCommon/              MLX-Hilfsprogramme: Gewichtsladen, QuantizedLinear-Helfer,
                          SDPA-Multi-Head-Attention-Helfer, Metal-Budget
  Qwen3Common/            Gemeinsame Modellkomponenten (KV-Cache, RoPE, Quantisierung)
  Qwen3ASR/               Qwen3-ASR Sprache-zu-Text
  ParakeetASR/            Parakeet TDT Sprache-zu-Text (CoreML)
  ParakeetStreamingASR/   Parakeet EOU 120M Streaming-Diktat (CoreML)
  OmnilingualASR/         Meta wav2vec2 + CTC, 1.672 Sprachen
                          (CoreML 300M + MLX 300M / 1B / 3B / 7B)
  CohereTranscribeASR/  Cohere Transcribe 2B speech-to-text (MLX)
  VoxtralASR/            Voxtral Mini 3B speech-to-text (MLX)
  Qwen3TTS/               Qwen3-TTS Text-zu-Sprache
  CosyVoiceTTS/           CosyVoice3 Text-zu-Sprache
  KokoroTTS/              Kokoro-82M Text-zu-Sprache (CoreML)
  Qwen3Chat/              Qwen3.5-0.8B LLM-Chat auf dem Gerät (MLX + CoreML)
  PersonaPlex/            PersonaPlex Sprache-zu-Sprache
  SpeechVAD/              VAD (Silero + Pyannote), Diarisierung, Sprechereinbettungen
  SpeechLanguageID/       Identifikation der gesprochenen Sprache (SpeechBrain ECAPA, MLX + CoreML, 107 Labels)
  SpeechEnhancement/      DeepFilterNet3 Rauschunterdrückung (CoreML)
  SourceSeparation/       Open-Unmix HQ / UMX-L + HTDemucs (Demucs v4) music source separation (MLX, 4 stems)
  MAGNeTMusicGen/         MAGNeT text-to-music generation (MLX, 30 s @ 32 kHz, INT4/INT8)
  VoxCPM2TTS/             VoxCPM2 text-to-speech (MLX, 48 kHz, voice cloning + voice design)
  IndexTTS2TTS/           IndexTTS2 voice cloning (MLX, semantic GPT + emotion/tempo/pause control + S2Mel + BigVGAN)
  VibeVoiceTTS/           VibeVoice long-form / multi-speaker TTS (MLX, EN/ZH)
  MADLADTranslation/      MADLAD-400 many-to-many translation (MLX, 400+ languages)
  AudioCLILib/            CLI-Befehlsimplementierungen
  AudioCLI/               CLI-Einstiegspunkt

scripts/              Modellkonvertierung (PyTorch → MLX/CoreML), Benchmarking
Tests/                Unit- und Integrationstests
Examples/             Demo-Apps (PersonaPlexDemo, SpeechDemo)