สถาปัตยกรรม

speech-swift จัดเป็นแพ็กเกจ Swift แบบโมดูลาร์ พร้อมโปรโตคอลที่ใช้ร่วมกัน โมดูลโมเดลที่เป็นอิสระ และ CLI แบบรวม การอนุมานทั้งหมดทำงานบนอุปกรณ์โดยใช้ MLX (GPU Metal) หรือ CoreML (Neural Engine)

กราฟการพึ่งพาของโมดูล

                    ┌──────────┐
                    │ AudioCLI │  (จุดเข้า)
                    └────┬─────┘
                         │
                  ┌──────┴──────┐
                  │ AudioCLILib │  (คำสั่ง)
                  └──────┬──────┘
                         │
       ┌─────────┬───────┼───────┬──────────┬──────────────┐
       │         │       │       │          │              │
  ┌────┴───┐ ┌──┴──┐ ┌──┴──┐ ┌─┴────┐ ┌───┴────┐ ┌──────┴───────┐
  │Qwen3ASR│ │Qwen3│ │Cosy │ │Perso-│ │Speech- │ │  Speech-     │
  │Parakeet│ │ TTS │ │Voice│ │naPlex│ │  VAD   │ │Enhancement   │
  └────┬───┘ └──┬──┘ └──┬──┘ └──┬───┘ └───┬───┘ └──────┬───────┘
       │        │       │       │         │             │
       └────────┴───────┼───────┴─────────┘             │
                        │                               │
                 ┌──────┴──────┐                        │
                 │ Qwen3Common │  (เลเยอร์ใช้ร่วมกัน)    │
                 └──────┬──────┘                        │
                        │                               │
                 ┌──────┴──────┐                        │
                 │ AudioCommon │ ◄──────────────────────┘
                 └─────────────┘  (โปรโตคอล, I/O เสียง)

MOSS Transcribe Diarize

MossTranscribe ส่งคืนช่วงเวลาที่ระบุผู้พูดผ่าน backend CoreML และ MLX แบบเนทีฟ CoreML ใช้สถานะคงที่ 1,024 token สำหรับไฟล์สั้น ส่วน MLX ใช้ context แบบไดนามิก 131,072 token, น้ำหนัก decoder affine INT5/INT8 และ KV cache FP16/INT8 ที่เลือกได้ ทั้งสองเป็น runtime แบบ autoregressive ออฟไลน์ ไม่ใช่ streaming

VoiceChat 11B

งานและเอกสารอ้างอิง: duplex speech-to-speech; SALM-Duplex: Efficient and Direct Duplex Modeling for Speech-to-Speech Language Model (Interspeech 2025) ซึ่ง model card VoiceChat ต้นทางของ NVIDIA อ้างอิง

runtime ครบถ้วน, M5 Pro 48 GB, Release, จังหวะ live 80 ms: INT5 แบบ protected-head มี RSS สูงสุดประมาณ 8.69 GB; ผล whole-pipeline RTF แบบควบคุมสามครั้งคือ 0.96, 0.96 และ 0.99 ยังไม่ได้วัด performance ของ INT8 หลัง optimize ซ้ำ

VoiceChat ใช้เส้นทางเสียงสู่เสียงแบบ native MLX อย่างครบถ้วน: การรับรู้ FastConformer แบบ causal, ช่องข้อความ/ฟังก์ชัน duplex ของ Nemotron-H, EAR-TTS decoder แบบกำหนดเงื่อนไขด้วยข้อความที่แยกอิสระพร้อม MaskGIT แปดรอบ และ neural codec 22.05 kHz Streaming เก็บ cache ของ attention และ causal convolution แบบจำกัดต่อ layer ขณะที่หน้าต่าง live codec แปด frame แบบ steady ใช้ graph ที่ compile แล้ว ทุก input frame 80 ms จะสร้างการตัดสินใจภาษา รหัส RVQ 31 รหัส และ output sample 1,764 ตัวอย่างพอดี Loader ต้องใช้ bundle ที่มี encoder/ + llm/ + tts/ ครบ และปฏิเสธ export รุ่นเก่าที่มีเฉพาะความเข้าใจ INT5 รักษา average RTF ต่ำกว่า 1 บน M5 Pro ที่ทดสอบได้แล้ว แม้ per-frame p95 headroom ยังแคบ

แบ็กเอนด์การอนุมาน

แบ็กเอนด์ฮาร์ดแวร์โมเดล
MLX GPU Metal 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 (ไฮบริด), Parakeet TDT, Parakeet EOU streaming, Omnilingual ASR 300M, Kokoro-82M, Qwen3.5-Chat (ตัวเลือก), การแยกผู้พูด Sortformer, DeepFilterNet3, Silero VAD (ตัวเลือก), WeSpeaker (ตัวเลือก), MOSS Transcribe Diarize, SpeechBrain ECAPA LID
Accelerate CPU (SIMD) การประมวลผลเสียงเบื้องต้น (STFT, mel, FFT), การประมวลผลสัญญาณ

รูปแบบน้ำหนักโมเดล

โมเดล MLX ใช้รูปแบบ safetensors พร้อมการควอนไทเซชัน 4-bit หรือ 8-bit (ขนาดกลุ่ม 64) โมเดล CoreML ใช้รูปแบบที่คอมไพล์แล้ว .mlmodelc สคริปต์การแปลงใน scripts/ แปลงจากเช็คพอยต์ PyTorch

Cohere และ Voxtral มีบันเดิล MLX affine INT5 ด้วย MLX ไม่รองรับ affine INT7 โดย INT8 คือตัวเลือกคุณภาพสูงกว่าที่รองรับ

โมเดลพารามิเตอร์การควอนไทเซชันขนาดบนดิสก์
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)~500MLLM 4-bit~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

การปรับปรุงประสิทธิภาพ

การประมวลผลเสียง

I/O เสียงทั้งหมดใช้ PCM Float32 การสุ่มซ้ำภายในจัดการการแปลงรูปแบบ:

โมเดลอัตราที่คาดหวังรูปแบบ
Qwen3-ASR16 kHzMono Float32
Cohere Transcribe 2B16 kHzMono Float32
Voxtral Mini 3B16 kHzMono Float32
Qwen3-TTSเอาต์พุต 24 kHzMono Float32
CosyVoice3เอาต์พุต 24 kHzMono Float32
Kokoro-82Mเอาต์พุต 24 kHzMono 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

โครงสร้างซอร์สโค้ด

Sources/
  AudioCommon/            โปรโตคอลที่ใช้ร่วมกัน, ออดิโอ I/O,
                          การจับเอาต์พุตของระบบ (SystemAudioTap),
                          ตัวดาวน์โหลด HuggingFace, SentencePieceModel
                          (ตัวอ่าน protobuf)
  MLXCommon/              ยูทิลิตี MLX: การโหลดน้ำหนัก, ตัวช่วย QuantizedLinear,
                          ตัวช่วย attention หลายหัว SDPA, งบประมาณ metal
  Qwen3Common/            องค์ประกอบโมเดลที่ใช้ร่วมกัน (แคช KV, RoPE, การควอนไทเซชัน)
  Qwen3ASR/               Qwen3-ASR การถอดเสียงเป็นข้อความ
  ParakeetASR/            Parakeet TDT การถอดเสียงเป็นข้อความ (CoreML)
  ParakeetStreamingASR/   Parakeet EOU 120M การพิมพ์ตามคำบอก streaming (CoreML)
  OmnilingualASR/         Meta wav2vec2 + CTC, 1,672 ภาษา
                          (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 การสังเคราะห์เสียงพูด
  CosyVoiceTTS/           CosyVoice3 การสังเคราะห์เสียงพูด
  KokoroTTS/              Kokoro-82M การสังเคราะห์เสียงพูด (CoreML)
  Qwen3Chat/              Qwen3.5-0.8B LLM chat บนอุปกรณ์ (MLX + CoreML)
  PersonaPlex/            PersonaPlex เสียงพูดเป็นเสียงพูด
  SpeechVAD/              VAD (Silero + Pyannote), การแยกผู้พูด, เอ็มเบดดิงผู้พูด
  SpeechLanguageID/       การระบุภาษาพูด (SpeechBrain ECAPA, MLX + CoreML, 107 ป้าย)
  SpeechEnhancement/      การลดเสียงรบกวน DeepFilterNet3 (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)
  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
  AudioCLI/               จุดเข้า CLI

scripts/              การแปลงโมเดล (PyTorch → MLX/CoreML), การทำเบนช์มาร์ก
Tests/                การทดสอบหน่วยและการทดสอบรวม
Examples/             แอปเดโม (PersonaPlexDemo, SpeechDemo)