Mimari
speech-swift, ortak protokoller, bağımsız model modülleri ve birleşik bir CLI ile modüler bir Swift paketi olarak düzenlenmiştir. Tüm çıkarım MLX (Metal GPU) veya CoreML (Neural Engine) kullanılarak cihaz üstünde çalışır.
Modül bağımlılık grafiği
┌──────────┐
│ AudioCLI │ (giriş noktası)
└────┬─────┘
│
┌──────┴──────┐
│ AudioCLILib │ (komutlar)
└──────┬──────┘
│
┌─────────┬───────┼───────┬──────────┬──────────────┐
│ │ │ │ │ │
┌────┴───┐ ┌──┴──┐ ┌──┴──┐ ┌─┴────┐ ┌───┴────┐ ┌──────┴───────┐
│Qwen3ASR│ │Qwen3│ │Cosy │ │Perso-│ │Speech- │ │ Speech- │
│Parakeet│ │ TTS │ │Voice│ │naPlex│ │ VAD │ │Enhancement │
└────┬───┘ └──┬──┘ └──┬──┘ └──┬───┘ └───┬───┘ └──────┬───────┘
│ │ │ │ │ │
└────────┴───────┼───────┴─────────┘ │
│ │
┌──────┴──────┐ │
│ Qwen3Common │ (paylaşılan katmanlar)│
└──────┬──────┘ │
│ │
┌──────┴──────┐ │
│ AudioCommon │ ◄──────────────────────┘
└─────────────┘ (protokoller, ses G/Ç)Çıkarım backend'leri
| Backend | Donanım | Modeller |
|---|---|---|
| MLX | Metal GPU | Qwen3-ASR, Qwen3-TTS, CosyVoice3, Qwen3.5-Chat, PersonaPlex, Omnilingual ASR (300M / 1B / 3B / 7B), Pyannote, Silero VAD, WeSpeaker |
| CoreML | Neural Engine | Qwen3-ASR encoder (hibrit), Parakeet TDT, Parakeet EOU streaming, Omnilingual ASR 300M, Kokoro-82M, Qwen3.5-Chat (isteğe bağlı), Sortformer konuşmacı ayrıştırması, DeepFilterNet3, Silero VAD (isteğe bağlı), WeSpeaker (isteğe bağlı) |
| Accelerate | CPU (SIMD) | Ses ön işleme (STFT, mel, FFT), sinyal işleme |
Model ağırlık formatı
MLX modelleri safetensors formatını 4-bit veya 8-bit nicemleme (grup boyutu 64) ile kullanır. CoreML modelleri derlenmiş .mlmodelc formatını kullanır. scripts/ dizinindeki dönüştürme komut dosyaları PyTorch checkpoint'lerinden dönüşüm yapar.
| Model | Parametre | Nicemleme | Diskteki boyut |
|---|---|---|---|
| Qwen3-ASR 0.6B (MLX) | ~600M | 4-bit / 8-bit | 680 MB / 1.0 GB |
| Qwen3-ASR 0.6B (CoreML) | ~186M (encoder) | INT8 | ~180 MB |
| Qwen3-ASR 1.7B (MLX) | ~1.7B | 4-bit / 8-bit | 2.1 GB / 3.2 GB |
| Parakeet-TDT 0.6B (CoreML) | ~600M | INT8 | 500 MB |
| Parakeet-EOU 120M (CoreML) | ~120M | INT8 | ~120 MB |
| Omnilingual-ASR-CTC 300M (CoreML) | 326M | INT8 | 312 MB |
| Omnilingual-ASR-CTC 300M (MLX) | 326M | 4-bit / 8-bit | 193 MB / 342 MB |
| Omnilingual-ASR-CTC 1B (MLX) | 1.01B | 4-bit / 8-bit | 549 MB / 1006 MB |
| Omnilingual-ASR-CTC 3B (MLX) | ~3B | 4-bit / 8-bit | 1.71 GB / 3.16 GB |
| Omnilingual-ASR-CTC 7B (MLX) | ~7B | 4-bit / 8-bit | 3.55 GB / 6.63 GB |
| Qwen3-ForcedAligner 0.6B (MLX) | ~600M | 4-bit / 8-bit | 979 MB / 1.4 GB |
| Qwen3-ForcedAligner 0.6B (CoreML) | ~600M | INT4 / INT8 | 630 MB / 1.0 GB |
| Qwen3-TTS 0.6B (MLX) | ~600M | 4-bit / 8-bit | 1.7 GB / 2.4 GB |
| Qwen3-TTS 1.7B (MLX) | ~1.7B | 4-bit / 8-bit | 3.2 GB / 4.8 GB |
| CosyVoice3 0.5B (MLX) | ~500M | 4-bit LLM | ~1.2 GB |
| Kokoro-82M (CoreML) | 82M | INT8 (1 bucket) | ~89 MB |
| Qwen3.5-Chat 0.8B (MLX) | ~800M | INT4 | 418 MB |
| Qwen3.5-Chat 0.8B (CoreML) | ~800M | INT8 | 981 MB |
| PersonaPlex 7B (MLX) | ~7B | 4-bit / 8-bit | 4.9 GB / 9.1 GB |
| Pyannote VAD (MLX) | ~1.49M | float32 | ~5.7 MB |
| Silero VAD v5 | ~309K | float32 | ~1.2 MB (MLX ve CoreML) |
| WeSpeaker ResNet34 | ~6.6M | float32 | ~25 MB (MLX ve CoreML) |
| Sortformer (CoreML) | — | float16 | ~50 MB |
| DeepFilterNet3 (CoreML) | ~2.1M | FP16 | ~4.2 MB |
Performans optimizasyonları
- MLX compile() — Otoregresif döngüler için çekirdek füzyonu. Talker
compile(shapeless: true), Code Predictor sabit önbellek boyutlarıylacompile(shapeless: false)kullanır. - Metal shader kütüphanesi — Önceden derlenmiş metallib, ~5x JIT derleme yükünden kaçınır.
scripts/build_mlx_metallib.shile derlenir. - Parçalanmış codec çözümü — TTS decoder, GPU zaman aşımını önlemek için konuşmayı 10 frame bağlam örtüşmesiyle 25 frame'lik parçalar halinde işler.
- Batch çiftli CFG — CosyVoice3 DiT, koşullu + koşulsuzu birlikte batch'leyerek flow matching geçişlerini yarıya indirir.
- Birleştirilmiş RoPE — Manuel döndürme yerine Metal çekirdeği destekli
MLXNN.RoPEkullanır. - BN füzyonu — WeSpeaker batch normalizasyonu, dönüştürme sırasında Conv2d ağırlıklarına birleştirilir.
Ses işleme
Tüm ses G/Ç'si Float32 PCM kullanır. Dahili yeniden örnekleme, format dönüşümünü ele alır:
| Model | Beklenen oran | Format |
|---|---|---|
| Qwen3-ASR | 16 kHz | Mono Float32 |
| Qwen3-TTS | 24 kHz çıkış | Mono Float32 |
| CosyVoice3 | 24 kHz çıkış | Mono Float32 |
| Kokoro-82M | 24 kHz çıkış | Mono Float32 |
| PersonaPlex | 24 kHz G/Ç | Mono Float32 |
| Pyannote VAD | 16 kHz | Mono Float32 |
| Silero VAD | 16 kHz | Mono Float32 |
| WeSpeaker | 16 kHz | Mono Float32 |
| DeepFilterNet3 | 48 kHz | Mono Float32 |
Kaynak yapısı
Sources/
AudioCommon/ Ortak protokoller, ses G/Ç, HuggingFace indirici,
SentencePieceModel (protobuf okuyucu)
MLXCommon/ MLX yardımcıları: ağırlık yükleme, QuantizedLinear yardımcıları,
SDPA çok başlı dikkat yardımcısı, metal bütçesi
Qwen3Common/ Paylaşılan model bileşenleri (KV önbelleği, RoPE, nicemleme)
Qwen3ASR/ Qwen3-ASR konuşmadan metne
ParakeetASR/ Parakeet TDT konuşmadan metne (CoreML)
ParakeetStreamingASR/ Parakeet EOU 120M streaming dikte (CoreML)
OmnilingualASR/ Meta wav2vec2 + CTC, 1.672 dil
(CoreML 300M + MLX 300M / 1B / 3B / 7B)
Qwen3TTS/ Qwen3-TTS metinden konuşmaya
CosyVoiceTTS/ CosyVoice3 metinden konuşmaya
KokoroTTS/ Kokoro-82M metinden konuşmaya (CoreML)
Qwen3Chat/ Qwen3.5-0.8B cihaz üstü LLM sohbet (MLX + CoreML)
PersonaPlex/ PersonaPlex konuşmadan konuşmaya
SpeechVAD/ VAD (Silero + Pyannote), konuşmacı ayrıştırma, konuşmacı gömmeleri
SpeechEnhancement/ DeepFilterNet3 gürültü bastırma (CoreML)
SourceSeparation/ Open-Unmix HQ / UMX-L 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)
VibeVoiceTTS/ VibeVoice long-form / multi-speaker TTS (MLX, EN/ZH)
MagpieTTS/ NVIDIA Magpie-TTS Multilingual 357M (MLX INT4/INT8,
9 languages, 5 baked speakers, streaming)
MagpieTTSCoreML/ Magpie CoreML backend (4 .mlmodelc + Swift-side
FSQ inverse; 8 languages, batch-only; hybrid
with MagpieTTS for LocalTransformer + audio
embeddings)
MADLADTranslation/ MADLAD-400 many-to-many translation (MLX, 400+ languages)
AudioCLILib/ CLI komut uygulamaları
AudioCLI/ CLI giriş noktası
scripts/ Model dönüşümü (PyTorch → MLX/CoreML), kıyaslama
Tests/ Birim ve entegrasyon testleri
Examples/ Demo uygulamalar (PersonaPlexDemo, SpeechDemo)