アーキテクチャ

speech-swiftは、共有プロトコル、独立したモデルモジュール、統一されたCLIを備えたモジュール化されたSwiftパッケージとして構成されています。すべての推論はMLX(Metal GPU)または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 はネイティブ CoreML と MLX の両バックエンドで話者付きタイムスタンプ区間を返します。CoreML は短い録音向けの固定 1,024-token 状態、MLX は動的 131,072-token コンテキスト、アフィン INT5/INT8 デコーダー重み、任意の FP16/INT8 KV キャッシュを使用します。どちらもストリーミングではなく、オフラインの自己回帰ランタイムです。

VoiceChat 11B

タスクと参照:全二重 speech-to-speech。SALM-Duplex: Efficient and Direct Duplex Modeling for Speech-to-Speech Language Model(Interspeech 2025)を NVIDIA の上流 VoiceChat モデルカードが引用しています。

完全ランタイム、M5 Pro 48 GB、Release、80 ms ライブ周期:保護ヘッド INT5 のピーク RSS は約 8.69 GB、3 回の制御済みパイプライン全体 RTF は 0.96、0.96、0.99 でした。最適化後の INT8 性能はまだ再測定していません。

VoiceChat は、因果 FastConformer 知覚、Nemotron-H の全二重テキスト/関数チャンネル、8 回の MaskGIT 反復を行う独立したテキスト条件付き EAR-TTS デコーダー、22.05 kHz ニューラルコーデックからなる完全なネイティブ MLX 音声間パスを実装します。ストリーミングは層ごとの有界な注意機構と因果畳み込みキャッシュを保持し、定常状態の 8 フレームライブコーデックウィンドウはコンパイル済みグラフを使います。各 80 ms 入力フレームから言語判断、31 個の RVQ コード、正確に 1,764 個の出力サンプルを生成します。ローダーは完全な encoder/ + llm/ + tts/ bundle を要求し、旧来の理解専用エクスポートを拒否します。INT5 はテストした M5 Pro で平均 RTF 1 未満を維持しますが、フレームごとの p95 余裕はまだ小さいです。

推論バックエンド

バックエンドハードウェアモデル
MLX Metal GPU Qwen3-ASR、Qwen3-TTS、CosyVoice3、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ストリーミング、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モデルは4ビットまたは8ビット量子化(グループサイズ64)のsafetensors形式を使用します。CoreMLモデルは.mlmodelcコンパイル済み形式を使用します。scripts/内の変換スクリプトがPyTorchチェックポイントから変換します。

Cohere と Voxtral では MLX のアフィン INT5 バンドルも使用できます。MLX はアフィン INT7 をサポートしていないため、より高品質な選択肢は INT8 です。

モデルパラメーター量子化ディスク上のサイズ
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
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ビット / 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
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ビット / 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
IndexTTS2 expanded bundle (MLX)1.5B-classFP16 + auxiliary models~4.8 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
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はFloat32 PCMを使用します。内部リサンプリングによって形式変換が処理されます。

モデル想定サンプリングレート形式
Qwen3-ASR16 kHzモノラル Float32
Cohere Transcribe 2B16 kHzMono Float32
Voxtral Mini 3B16 kHzMono 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
SpeechBrain ECAPA LID16 kHzMono Float32
ReDimNet2-B616 kHzモノラル Float32
DeepFilterNet348 kHzモノラル Float32

ソース構造

Sources/
  AudioCommon/            共有プロトコル、オーディオ
                          I/O、システム出力キャプチャ(SystemAudioTap)、HuggingFace
                          ダウンローダー、SentencePieceModel(protobuf リーダー)
  MLXCommon/              MLXユーティリティ:ウェイトローディング、QuantizedLinearヘルパー、
                          SDPAマルチヘッドアテンションヘルパー、metalバジェット
  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)
  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チャット (MLX + CoreML)
  PersonaPlex/            PersonaPlex 音声間変換
  SpeechVAD/              VAD (Silero + Pyannote)、ダイアライゼーション、話者embedding
  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)
  MADLADTranslation/      MADLAD-400 many-to-many translation (MLX, 400+ languages)
  AudioCLILib/            CLIコマンド実装
  AudioCLI/               CLIエントリポイント

scripts/              モデル変換 (PyTorch → MLX/CoreML)、ベンチマーク
Tests/                ユニットと統合テスト
Examples/             デモアプリ (PersonaPlexDemo, SpeechDemo)