아키텍처

speech-swift는 공유 프로토콜, 독립적인 모델 모듈, 통합 CLI를 갖춘 모듈식 Swift 패키지로 구성되어 있습니다. 모든 추론은 MLX (Metal GPU) 또는 CoreML (Neural Engine)을 사용해 온디바이스에서 실행됩니다.

모듈 종속성 그래프

                    ┌──────────┐
                    │ AudioCLI │  (entry point)
                    └────┬─────┘
                         │
                  ┌──────┴──────┐
                  │ AudioCLILib │  (commands)
                  └──────┬──────┘
                         │
       ┌─────────┬───────┼───────┬──────────┬──────────────┐
       │         │       │       │          │              │
  ┌────┴───┐ ┌──┴──┐ ┌──┴──┐ ┌─┴────┐ ┌───┴────┐ ┌──────┴───────┐
  │Qwen3ASR│ │Qwen3│ │Cosy │ │Perso-│ │Speech- │ │  Speech-     │
  │Parakeet│ │ TTS │ │Voice│ │naPlex│ │  VAD   │ │Enhancement   │
  └────┬───┘ └──┬──┘ └──┬──┘ └──┬───┘ └───┬───┘ └──────┬───────┘
       │        │       │       │         │             │
       └────────┴───────┼───────┴─────────┘             │
                        │                               │
                 ┌──────┴──────┐                        │
                 │ Qwen3Common │  (shared layers)       │
                 └──────┬──────┘                        │
                        │                               │
                 ┌──────┴──────┐                        │
                 │ AudioCommon │ ◄──────────────────────┘
                 └─────────────┘  (protocols, audio I/O)

추론 백엔드

백엔드하드웨어모델
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 인코더 (하이브리드), Parakeet TDT, Parakeet EOU 스트리밍, Omnilingual ASR 300M, Kokoro-82M, Qwen3.5-Chat (옵션), Sortformer 화자 분리, DeepFilterNet3, Silero VAD (옵션), WeSpeaker (옵션)
Accelerate CPU (SIMD) 오디오 전처리 (STFT, 멜, FFT), 신호 처리

모델 웨이트 포맷

MLX 모델은 4비트 또는 8비트 양자화 (그룹 크기 64)를 적용한 safetensors 포맷을 사용합니다. CoreML 모델은 컴파일된 .mlmodelc 포맷을 사용합니다. scripts/의 변환 스크립트가 PyTorch 체크포인트로부터 변환합니다.

모델파라미터양자화디스크 크기
Qwen3-ASR 0.6B (MLX)약 600M4비트 / 8비트680 MB / 1.0 GB
Qwen3-ASR 0.6B (CoreML)약 186M (인코더)INT8약 180 MB
Qwen3-ASR 1.7B (MLX)약 1.7B4비트 / 8비트2.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비트 / 8비트193 MB / 342 MB
Omnilingual-ASR-CTC 1B (MLX)1.01B4비트 / 8비트549 MB / 1006 MB
Omnilingual-ASR-CTC 3B (MLX)약 3B4비트 / 8비트1.71 GB / 3.16 GB
Omnilingual-ASR-CTC 7B (MLX)약 7B4비트 / 8비트3.55 GB / 6.63 GB
Qwen3-ForcedAligner 0.6B (MLX)약 600M4비트 / 8비트979 MB / 1.4 GB
Qwen3-ForcedAligner 0.6B (CoreML)약 600MINT4 / INT8630 MB / 1.0 GB
Qwen3-TTS 0.6B (MLX)약 600M4비트 / 8비트1.7 GB / 2.4 GB
Qwen3-TTS 1.7B (MLX)약 1.7B4비트 / 8비트3.2 GB / 4.8 GB
CosyVoice3 0.5B (MLX)약 500M4비트 LLM약 1.2 GB
Kokoro-82M (CoreML)82MINT8 (1 버킷)약 89 MB
Qwen3.5-Chat 0.8B (MLX)약 800MINT4418 MB
Qwen3.5-Chat 0.8B (CoreML)약 800MINT8981 MB
PersonaPlex 7B (MLX)약 7B4비트 / 8비트4.9 GB / 9.1 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)
Sortformer (CoreML)float16약 50 MB
DeepFilterNet3 (CoreML)약 2.1MFP16약 4.2 MB

성능 최적화

오디오 처리

모든 오디오 I/O는 Float32 PCM을 사용합니다. 내부 리샘플링이 포맷 변환을 처리합니다:

모델요구 샘플레이트포맷
Qwen3-ASR16 kHz모노 Float32
Qwen3-TTS24 kHz 출력모노 Float32
CosyVoice324 kHz 출력모노 Float32
Kokoro-82M24 kHz 출력모노 Float32
PersonaPlex24 kHz I/O모노 Float32
Pyannote VAD16 kHz모노 Float32
Silero VAD16 kHz모노 Float32
WeSpeaker16 kHz모노 Float32
DeepFilterNet348 kHz모노 Float32

소스 구조

Sources/
  AudioCommon/            공유 프로토콜, 오디오 I/O, HuggingFace 다운로더,
                          SentencePieceModel (protobuf 리더)
  MLXCommon/              MLX 유틸리티: 웨이트 로딩, QuantizedLinear 헬퍼,
                          SDPA 멀티헤드 어텐션 헬퍼, metal budget
  Qwen3Common/            공유 모델 컴포넌트 (KV 캐시, RoPE, 양자화)
  Qwen3ASR/               Qwen3-ASR 음성-텍스트 변환
  ParakeetASR/            Parakeet TDT 음성-텍스트 변환 (CoreML)
  ParakeetStreamingASR/   Parakeet EOU 120M 스트리밍 받아쓰기 (CoreML)
  OmnilingualASR/         Meta wav2vec2 + CTC, 1,672개 언어
                          (CoreML 300M + MLX 300M / 1B / 3B / 7B)
  Qwen3TTS/               Qwen3-TTS 텍스트-음성 변환
  CosyVoiceTTS/           CosyVoice3 텍스트-음성 변환
  KokoroTTS/              Kokoro-82M 텍스트-음성 변환 (CoreML)
  Qwen3Chat/              Qwen3.5-0.8B 온디바이스 LLM 채팅 (MLX + CoreML)
  PersonaPlex/            PersonaPlex 음성-음성 변환
  SpeechVAD/              VAD (Silero + Pyannote), 화자 분리, 화자 임베딩
  SpeechEnhancement/      DeepFilterNet3 노이즈 억제 (CoreML)
  AudioCLILib/            CLI 명령 구현
  AudioCLI/               CLI 진입점

scripts/              모델 변환 (PyTorch → MLX/CoreML), 벤치마킹
Tests/                단위 및 통합 테스트
Examples/             데모 앱 (PersonaPlexDemo, SpeechDemo)