アーキテクチャ
ネイティブ指示付き TTS
ネイティブ SDK は main のソースからビルドしてください。Homebrew などのビルド済み CLI には、これらのエンジンがまだ含まれていない場合があります。
公開済み MLX バンドル: aufklarer/FireRedTTS3-Instruct-MLX-fp32 · aufklarer/MOSS-VoiceGenerator-MLX-bf16
FireRedTTS3-Instruct — FireRedTTS3TTS: FireRedTTS3-Instruct はモデルとデコーダーの Float32 重みを保持します。音声は一括で返るため --stream は省略してください。--language は英語・中国語の別名を受け付けます。生成上限に達した場合は、途切れた音声を成功として返さずエラーになります。
MOSS-VoiceGenerator — MossVoiceGeneratorTTS: MOSS-VoiceGenerator は BF16 言語重みと FP32 合成コーデックを保持します。逐次 PCM には --stream を使います。--language は省略し、言語要件を --instruct に含めてください。終了時には全十六コードブックを出力し切ります。
テキストと指示の各フィールドは 32,768 UTF-8 バイトまでです。テンプレートを含むレンダリング済み入力プロンプト全体は 4,096 トークン以内である必要があります。いずれかを超える入力は拒否されます。
指示追従の品質は未採点です。短文の測定は試験した構成のみを示し、既存モデルの遅延回帰の認定は未確定です。
Breeze TTS 2 · BreezeTTS
英語・中国語の音声合成。声のデザイン、参照音声のクローンと演出、ストリーミングに対応(MLX BF16/8-bit、24 kHz、研究・非商用ライセンス).
speech speak "The quick brown fox jumps over the lazy dog." --engine breeze \
--instruct "A clear, calm English narrator." --stream -o design.wav--breeze-model-id:aufklarer/Breeze-TTS-2-MLX-8bit--breeze-bundle-dir--breeze-cache-limit-mib--breeze-reference-text--breeze-temperature:0.9--breeze-top-k:50--breeze-top-p:1--breeze-cfg-scale:4--breeze-max-frames:750--breeze-seed:42--first-chunk-frames:3--chunk-frames:25
Apple ネイティブランタイム · PocketTTS
PocketTTS は speech-swift に CoreML のネイティブ音声合成を追加します。全段階の既定値は CPU のみです。英語の Alba プリセットは 24 kHz、1,920 サンプル(80 ミリ秒)ずつ音声を配信します。
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)MLX バッファキャッシュの予算
MLX モデルのランタイムは、重みの読み込みからモデルの破棄まで、再利用可能なバッファの既定上限 min(2 GiB, physical RAM / 4) を共有します。呼び出し側のより低い予算(MLX.Memory.cacheLimit = 0 を含む)と既存のモデル固有の予算は維持されます。この上限は未使用バッファに適用され、使用中の重み、KV キャッシュ、プロセス全体のメモリは上限を超える場合があります。 MLX は割り当て時にキャッシュを削減するため、最後に解放されたバッファにより、次の割り当てまで一時的に予算を超える場合があります。
unload() はモデルの登録を解放し、このメソッドを持たないランタイムは破棄時に解放します。最後の所有者が解放すると呼び出し側の予算を復元し、それ以前のアンロードでは残りのモデルの上限を維持します。CoreML のみの経路では MLX の登録を行いません。
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、Breeze TTS 2、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, Nemotron 3 Diarization, FireRedTTS3-Instruct, MOSS-VoiceGenerator |
| CoreML | CPU / GPU / Neural Engine (ANE) | 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, Nemotron 3 Diarization |
| 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) | 約600M | 4ビット / 8ビット | 680 MB / 1.0 GB |
| Qwen3-ASR 0.6B (CoreML) | 約186M(エンコーダー) | INT8 | 約180 MB |
| Qwen3-ASR 1.7B (MLX) | 約1.7B | 4ビット / 8ビット | 2.1 GB / 3.2 GB |
| Parakeet-TDT 0.6B (CoreML) | 約600M | INT8 | 500 MB |
| Whisper Large-v3 Turbo (CoreML) | 809M | FP16 | 1.6 GB |
| MOSS Transcribe Diarize 0.9B (MLX) | 908.5M | FP16 audio + INT5 / INT8 decoder | 987.0 MiB / 1,200.1 MiB |
| MOSS Transcribe Diarize 0.9B (CoreML) | ~900M | FP16 / INT8 block-32 | 1.7 GB / 1.2 GB |
| Parakeet-EOU 120M (CoreML) | 約120M | INT8 | 約120 MB |
| Omnilingual-ASR-CTC 300M (CoreML) | 326M | INT8 | 312 MB |
| Omnilingual-ASR-CTC 300M (MLX) | 326M | 4ビット / 8ビット | 193 MB / 342 MB |
| Omnilingual-ASR-CTC 1B (MLX) | 1.01B | 4ビット / 8ビット | 549 MB / 1006 MB |
| Omnilingual-ASR-CTC 3B (MLX) | 約3B | 4ビット / 8ビット | 1.71 GB / 3.16 GB |
| Omnilingual-ASR-CTC 7B (MLX) | 約7B | 4ビット / 8ビット | 3.55 GB / 6.63 GB |
| Cohere Transcribe 2B (MLX) | 2B | FP16 / INT5 / INT8 | 3.85 / 1.62 / 2.25 GiB |
| Voxtral Mini 3B 2507 (MLX) | 3B | FP16 / INT5 / INT8 | 8.71 / 3.77 / 5.18 GiB |
| Qwen3-ForcedAligner 0.6B (MLX) | 約600M | 4ビット / 8ビット | 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ビット / 8ビット | 1.7 GB / 2.4 GB |
| Qwen3-TTS 1.7B (MLX) | 約1.7B | 4ビット / 8ビット | 3.2 GB / 4.8 GB |
| CosyVoice3 0.5B (MLX) | 約500M | 4ビットLLM | 約1.2 GB |
| IndexTTS2 expanded bundle (MLX) | 1.5B-class | FP16 + auxiliary models | ~4.8 GB |
| Kokoro-82M (CoreML) | 82M | INT8(1バケット) | 約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ビット / 8ビット | 4.9 GB / 9.1 GB |
| VoiceChat 11B (MLX) | ~11B | INT5 / INT8 | 8.56 GB / 12.11 GB |
| Pyannote VAD (MLX) | 約1.49M | float32 | 約5.7 MB |
| Silero VAD v5 | 約309K | float32 | 約1.2 MB (MLX & CoreML) |
| p99 turn-1-mini | 5.3M | Float32 | 22 MB (CoreML) |
| VAP (otoSpeech) | 5.8M | Float32 | 39 MB (CoreML) / 40 MB (ONNX) |
| WeSpeaker ResNet34 | 約6.6M | float32 | 約25 MB (MLX & CoreML) |
| SpeechBrain ECAPA VoxLingua107 | 21.25M | FP16 | ~40.6 MiB (MLX) / ~40.8 MiB (CoreML) |
| ReDimNet2-B6 | 12.3M | float16 | 約25 MiB (CoreML) |
| Pyannote Community-1 (CoreML) | 8.35M | float32 + native VBx | ~32 MB |
| Nemotron 3 Diarization (CoreML / MLX) | 100M | INT8 | ~100 MB per backend |
| Sortformer (CoreML) | — | float16 | 約50 MB |
| DeepFilterNet3 (CoreML) | 約2.1M | FP16 | 約4.2 MB |
| LocalVQE v1.4-AEC (CoreML + C++) | 200K + 2,742 | FP16 + FP32 | 約732 KB |
MLX モデルの初期化
QuantizedLinear.preQuantized は、チェックポイントから読み込む量子化線形層にゼロのプレースホルダーを用意し、ランダムな重みと一時的な量子化グラフの生成を避けます。withThrowawayRandomState は、破棄される浮動小数点の初期化を呼び出し元の乱数キーチェーンから切り離します。複合モデルのローダーは各コンポーネントを個別にスコープ化します。対象は MAGNeT の T5 と EnCodec、Stable Audio 3 の T5Gemma と SAME-L、CSM の Mimi コーデックです。CSM の量子化埋め込みは引き続き上流の初期化処理を使用するため、初期化グラフの寿命に関する既知の制限が残ります。
パフォーマンス最適化
- MLX compile() — 自己回帰ループでのカーネル融合。Talkerは
compile(shapeless: true)、Code Predictorは固定キャッシュサイズのcompile(shapeless: false)を使用します。 - Metalシェーダーライブラリ — プリコンパイルされたmetallibにより、約5倍のJITコンパイルオーバーヘッドを回避します。
scripts/build_mlx_metallib.shでビルドします。 - チャンク化コーデックデコード — TTSデコーダーは、GPUタイムアウトを回避するために、10フレームのコンテキストオーバーラップで25フレームのチャンクで音声を処理します。
- バッチ倍増CFG — CosyVoice3 DiTは、条件付きと非条件付きを一緒にバッチ化することで、フローマッチングのパス数を半減します。
- 融合RoPE — 手動回転の代わりに、Metalカーネルに支えられた
MLXNN.RoPEを使用します。 - BN融合 — WeSpeakerのバッチ正規化は、変換時にConv2dの重みに融合されます。
音声処理
すべての音声I/OはFloat32 PCMを使用します。内部リサンプリングによって形式変換が処理されます。
| モデル | 想定サンプリングレート | 形式 |
|---|---|---|
| Qwen3-ASR | 16 kHz | モノラル Float32 |
| Cohere Transcribe 2B | 16 kHz | Mono Float32 |
| Voxtral Mini 3B | 16 kHz | Mono Float32 |
| Qwen3-TTS | 24 kHz出力 | モノラル Float32 |
| CosyVoice3 | 24 kHz出力 | モノラル Float32 |
| Kokoro-82M | 24 kHz出力 | モノラル Float32 |
| PersonaPlex | 24 kHz I/O | モノラル Float32 |
| Pyannote VAD | 16 kHz | モノラル Float32 |
| Silero VAD | 16 kHz | モノラル Float32 |
| WeSpeaker | 16 kHz | モノラル Float32 |
| SpeechBrain ECAPA LID | 16 kHz | Mono Float32 |
| ReDimNet2-B6 | 16 kHz | モノラル Float32 |
| DeepFilterNet3 | 48 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 音声合成
FireRedTTS3TTS/ FireRedTTS3-Instruct (MLX, Float32)
MossVoiceGeneratorTTS/ MOSS-VoiceGenerator (MLX, BF16 + FP32)
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)
GLiNER/ GLiNER2.5-Decide classification + entity spans (MLX, INT8/FP16/FP32)
AudioCLILib/ CLIコマンド実装
AudioCLI/ CLIエントリポイント
scripts/ モデル変換 (PyTorch → MLX/CoreML)、ベンチマーク
Tests/ ユニットと統合テスト
Examples/ デモアプリ (PersonaPlexDemo, SpeechDemo)GLiNER2.5-Decide:MLX ネイティブの分類とエンティティのスパン(INT8・FP16・FP32 の重み)。推論に Python は不要です。
⚠ Translation out of date — English guide. The new Clef section below awaits translation.
Clef-flash: development preview of local text decisions (9B, affine 4-bit MLX), with a joint schema head and a separate output-embedding prior.
MOSS-TTS-Nano
CoreML によるストリーミング音声合成と音声クローン。48 kHz ステレオ、80 ms チャンクで出力します。
MossTTSNanoModel はリクエストを直列化し、発話ごとに新しい CoreML 状態を作成します。synthesize と synthesizeStream はステレオを保持し、SpeechGenerationModel はモノラルにミックスします。language: nil を指定してください。ストリームは空の最終マーカーで終了します。
macOS 15+ / iOS 18+ が必要です。コンパイル済みの 4 モデルは計 367.6 MB。プロンプト、参照、要求フレームは 1,024 行のコンテキストを共有します。超過時や自然終了前に maxFrames に達した場合はエラーになります。既定は CPU、gpu は CPU+GPU を許可します。PCG64 のシードは NumPy と互換ですが、バックエンドの数値差で出力が変わる場合があります。
任意のモデル管理
SpeechRuntime は共有ロード、キャンセル可能な FIFO 受付、直列実行を提供します。Qwen3ASRRuntime は明示的な記述子で MLX または完全な CoreML を選択し、既存の API と CLI フラグも利用できます。
サーバーはストリーミング出力を含む要求全体で実行許可を保持し、最大 32 件を待機させます。ASR の失敗は HTTP エラーまたは WebSocket エラーイベントになり、有効な空の文字起こしは成功です。再生ではあふれたサンプルを保持します。キャッシュ済みモデルと再生待ち音声はメモリを使用します。
Voxtral TTS
Voxtral 4B TTS 2603 は VoxtralTTS モジュールを通じて Apple Silicon 上でローカルに動作し、20 のプリセット音声、9 言語、24 kHz のモノラル音声に対応します。
VoxtralTTS → 26-layer LM → 3-layer acoustic transformer → 24 kHz PCMプリセット音声のみ対応し、参照音声からのクローンには対応していません。SDK、CLI、WebSocket、HTTP PCM で生成中の音声を出力できます。入力テキストは最初に全文を渡します。モデル重みのライセンスは CC BY-NC 4.0 です。
Fish Audio Drama 3
Drama 3 の実験的なネイティブ MLX 対応を FishAudioDrama3Model で利用できます。350 億パラメータのハイブリッド注意 MoE、時系列音声タワー、Fish DAC コーデックで 44.1 kHz モノラル音声を生成します。4 ビットのチェックポイントは Apple M5 Pro で、テキストのみの生成、参照音声のクローン、CLI 出力の波形と独立した ASR 検証に合格しました。8 ビットと BF16 は未検証です。
既定の balanced モードは、各段階の境界で 512 MiB を超える未使用 MLX バッファを解放します。モデルの有効期間中は共有キャッシュ上限も適用され、呼び出し側のより低い予算を維持します。どちらもプロセス全体のメモリ上限ではありません。--fish-drama3-memory-mode unrestricted または memoryOptions: .unrestricted は重みを事前に読み込み、段階ごとの解放を省略しますが、有効期間の上限は維持します。
テキストのみの生成では参照音声エンコーダーの重み 794.4 MiB の読み込みを遅延します。最初の参照音声エンコード時に読み込み、その後は保持するため、それまでは codec.safetensors を利用可能にしてください。計算済みの参照コードにはエンコーダーは不要です。
FishAudioTTS: FishAudioDrama3Model · backbone.model.* · semantic_head.* · tower.* · codec.safetensors
Fish Audio を使用しています。バンドルには Community License と NOTICE が含まれます。
generateStreaming、generateStream、--stream で PCM ストリーミングに対応します。既定のチャンクは 3 コーデックフレームで、約 139 ms の音声です。長文の自動分割とテキストの逐次入力は未対応です。
音声タワーの各コードブックは 4,096 個のトークン値を使用します。Fish DAC は一括デコードとストリーミングデコードの両方で、残差コードをコーデックの 1,024 エントリーの残差コードブックの範囲に制限します。返されるコードブックにはタワーの元の値が保持されます。
不正な回転位置埋め込みの次元は、モデルの重みを読み込む前に拒否されます。