Traducere automată · Originalul în engleză
Arhitectură
Instruire nativă TTS
Construiește nativ SDK suport din sursa principală. Homebrew și alte prebuilt CLI nu pot include încă aceste motoare.
Implementation (PR #541): main
Publicat MLX pachete: aufklarer/FireRedTTS3-Instruct-MLX-fp32 · aufklarer/MOSS-VoiceGenerator-MLX-bf16
FireRedTTS3-Instruct — FireRedTTS3TTS: FireRedTTS3-Instruct păstrează Float32 model și greutăți de decodor. Se întoarce audio tamponat: omite --stream Engleză şi chineză. --language Sunt acceptate pseudonimele. O limită de generaţie ridică o eroare în loc să se întoarcă succesul trunchiat.
MOSS-VoiceGenerator MossVoiceGeneratorTTS: MOSS-VoiceGenerator păstrează BF16 greutăți lingvistice și codul de sinteză FP32. Utilizarea --stream pentru PCM incremental. Omit --language și cerințele lingvistice puse în --instruct
Fiecare câmp de text și de instruire este limitat la octeți 32,768 UTF-8. Impexul complet de intrare, inclusiv șablonul său, trebuie să se potrivească în jetoane 4,096 . Intrările care depășesc oricare dintre limite sunt respinse.
Calitatea de instruire-urmărire este nemarcată. Măsurătorile pe scurt descrie configurarea testată; certificarea latență model existent rămâne neconcludentă.
Breeze TTS 2 · Breeze TTTS
Engleză/Chineză TTS cu design vocal, clonare de referință și direcție și audio transmis (MLX BF16/8-bit, 24 kHz; licență de cercetare/necomercială).
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
Nativ Apple runtime · PocketTTS
PocketTTS adaugă sinteze native CoreML sinteze de vorbire la speech-swift. Toate etapele sunt implicite pentru executarea exclusivă a procesorului. Fluxurile de prefixe engleze Alba sunt 1,920-frame de probe la 24 kHz (80 ms per cadru).
speech-swift este organizat ca un modular Swift pachet cu protocoale partajate, module de model independent și un CLI unificat. Toate infergențele se execută pe dispozitiv utilizând MLX (Metal GPU) sau CoreML (Neural Engine).
Graficul modulului de dependență
┌──────────┐
│ 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 bugetul cache-ului tampon
MLX modelele de rulare au un plafon reutilizabil implicit de min(2 GiB, physical RAM / 4) de la încărcarea în greutate pe durata de viață a modelului. Bugetele inferioare ale apelantului, inclusiv MLX.Memory.cacheLimit = 0, iar bugetele specifice modelului existente se păstrează. Capacul limitează tamponele inactive; greutățile active, cachele KV și memoria totală a procesului pot depăși acest plafon. MLX tăieturi la alocare, astfel încât ultimul tampon eliberat poate pune temporar cache-ul peste bugetul său până la următoarea alocare.
unload() eliberează modelul de înregistrare; runtimes fără această metodă de eliberare-l pe distrugere. Ultimul proprietar restabilește bugetul apelantului, în timp ce descărca mai devreme păstrează modelele rămase de tavane. CoreML-numai căi nu achiziţionează MLX înregistrări.
MOSS Transcribe diarize
MossTranscribe returnează segmentele de timp atribuite difuzorului prin intermediul a două platforme native. CoreML folosește un fix 1,024-Atenţie la ML State pentru înregistrări scurte. MLX folosește o creștere dinamică 131,072-context simbolic, afină INT5/INT8 greutăți de decodor și opțional FP16/INT8 Cache-uri KV pentru transcrierea globală contextualizată de lungă formă. Ambele sunt offline, automatiste runtimes mai degrabă decât streaming modele.
VoiceChat 11B
Task and reference: duplex speech-to-speech; SALM-Duplex: Efficient and Direct Duplex Modeling for Speech- to-Speech Language Model (Interspection 2025), citat de NVIDIA's farming VoiceChat model card.
Timpul complet de funcționare, M5 Pro 48 GB, eliberare, 80 Ms cadence live: INT5 maxim RSS este de aproximativ 8.69 GB; trei controlat întreg-pipeline RTF rezultatele au fost 0.96, 0.96 și 0.99. Performanță optimizată INT8 nu a fost încă remăsurată.
VoiceChat implementează complet nativ MLX calea audio-to-audio: percepție cauzală FastConform, canalele de text/funcție Nemotron-H duplex, decodorul EAR-TTS cu opt iterații MaskGIT și un decodor EAR-TTS condiționat de text 22.05 Clemele neuronale de tip kHz. Streamingul păstrează o atenţie limitată perstrat şi cache-convoluţie cauzală, în timp ce fereastra de opt cadre live codec foloseşte un grafic compilat. 80 ms cadru de intrare produce o decizie lingvistică; 31 Coduri RVQ, și exact 1,764 probe de ieșire. Încărcătorul necesită un complet encoder/ + llm/ + tts/ grupează și respinge exporturile mai vechi de înțelegere-doar. INT5 Acum susţine agregatul RTF mai jos 1 privind testul M5 Pro, deși per-cadru p95 Camera din faţă rămâne îngustă.
Backend-uri de inferență
| Platformă | hardware-ul | Modele |
|---|---|---|
| MLX | Metal GPU | Qwen3-ASR, Qwen3-TTS, Breeze TTS 2, CosyVoice3, IndexTTS2, Qwen3.5-Chat, PersonaPlex, VoiceChat 11B, Omnilingual ASR (300M / 1B / 3B / 7 Regulamentul (CE) nr. Cohere Transcriere 2B, Voxtral Mini 3B, MOSS Transcrierea diarizează, Pyannote, Silero VAD, WeSpeaker, SpeechBrain ECAPA LID, Nemotron 3 Diarizare, FireRedTTS3-Instruct, MOSS-VoiceGenerator |
| CoreML | CPU / GPU/Neural Engine (ANE) | Qwen3-ASR codor (hibrid); Parakeet TDT; Parakeet EOU streaming, Omnilingual ASR 300M, Kokoro-82M, Qwen3.5-Chat (opțional), diarizare Sortare; DeepFilterNet3, Silero VAD (opțional), WeSpeaker (opțional), MOSS Transcribe Diarize, SpeechBrain ECAPA LID, Nemotron 3 Diarizare |
| Accelerare | CPU (SIMD) | Preprocesare audio (STFT, mel, FFT), procesarea semnalelor |
Format de greutate model
MLX modelele utilizează safetensors format cu 4 biți sau 8 biți cuantizare (dimensiunea 64). CoreML modele utilizate .mlmodelc format compilat.Scripturi de conversie în scripts/ convertiți de la punctele de control PyTorch.
Cohere și Voxtral utilizează, de asemenea, MLX afină INT5 pachete. MLX nu suportă afina INT7; INT8 este opțiunea de calitate superioară susținută.
| Model | Paramele | Cuantificare | Dimensiune pe disc |
|---|---|---|---|
| Qwen3-ASR 0,6B (MLX) | ~600M | 4 biți / 8 biți | 680 MB / 1.0 GB |
| Qwen3-ASR 0,6B (CoreML) | ~186M (codor) | INT8 | ~180 MO |
| Qwen3-ASR 1.7B (MLX) | ~1,7B | 4 biți / 8 biți | 2.1 GB / 3.2 G |
| Parakeet- TDT 0,6B (CoreML) | ~600M | INT8 | 500 MO |
| Whisper Large-v3 Turbo (CoreML) | 809M | FP16 | 1,6 GB |
| MOSS Transcribe diarize 0,9B (MLX) | 908.5M | FP16 audio + INT5 / INT8 decodor | 987.0 MiB / 1,200.1 MIB |
| MOSS Transcribe diarize 0,9B (CoreML) | ~900M | FP16 / INT8 block-32 | 1.7 GB / 1.2 G |
| Parakeet-EOU 120M (CoreML) | ~120M | INT8 | ~120 MO |
| Omnilingv-ASR-CTC 300M (CoreML) | 326M | INT8 | 312 MO |
| Omnilingual-ASR-CTC 300M (MLX) | 326M | 4 biți / 8 biți | 193 MO / 342 MO |
| Omnilingv-ASR-CTC 1B (MLX) | 1,01B | 4 biți / 8 biți | 549 MO / 1006 MO |
| Omnilingual-ASR-CTC 3B (MLX) | ~3B | 4 biți / 8 biți | 1,71 GB / 3,16 GB |
| Omnilingual-ASR-CTC 7B (MLX) | ~7B | 4 biți / 8 biți | 3.55 GB / 6.63 G |
| 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 biți / 8 biți | 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 biți / 8 biți | 1.7 GB / 2.4 G |
| Qwen3-TTS 1.7B (MLX) | ~1,7B | 4 biți / 8 biți | 3.2 GB / 4.8 G |
| CosyVoice3 0,5B (MLX) | ~500M | 4-bit LLM | ~1.2 GB |
| IndexTTS2 pachet extins (MLX) | Clasa 1.5B | FP16 + modele auxiliare | ~4.8 GB |
| Kokoro-82M (CoreML) | 82M | INT8 (1 găleată) | ~89 MO |
| Qwen3.5-Chat 0.8B (MLX) | ~800M | INT4 | 418 MO |
| Qwen3.5-Chat 0.8B (CoreML) | ~800M | INT8 | 981 MO |
| PersonaPlex 7B (MLX) | ~7B | 4 biți / 8 biți | 4,9 GB / 9,1 GB |
| VoiceChat 11B (MLX) | ~11B | INT5 / INT8 | 8.56 GB / 12.11 G |
| Pyannote VAD (MLX) | ~1,49M | float32 | ~5,7 MO |
| 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 + VBx nativ | ~32 MO |
| Nemotron 3 Diarizare (CoreML / MLX) | 100M | INT8 | ~100 MB per suport |
| Sortare (CoreML) | — | float16 | ~50 MO |
| DeepFilterNet3 (CoreML) | ~2.1M | FP16 | ~4.2 MO |
| LocalVQE v1.4-AEC (CoreML + C++) | 200K + 2,742 | FP16 + FP32 | ~732 KB |
MLX iniţializare model
QuantizedLinear.preQuantized creează substituenți cu valori zero pentru straturile liniare cuantizate încărcate din checkpoint, evitând ponderile aleatorii și grafurile lor temporare de cuantizare. withThrowawayRandomState păstrează inițializarea în virgulă mobilă eliminată în afara lanțului de chei aleatorii al apelantului. Încărcătoarele compozite delimitează fiecare componentă: T5 și EnCodec din MAGNeT, T5Gemma și SAME-L din Stable Audio 3 și codecul Mimi din CSM. Embeddingurile cuantizate din CSM folosesc în continuare inițializatorul upstream și păstrează limitarea sa cunoscută a grafului de inițializare.
Optimizări de performanță
- compilare MLX Qwen3-TTS compilează Talker peste cache-ul său valid-prefix în creștere și compilează cadrul fix 15-group Cod Predictor ca un grafic pentru sinteza unui singur punct.
- Biblioteca de umbrare Metal Metal lib pre-compilat evită ~5x JIT compilare aeriană. Construit prin
scripts/build_mlx_metallib.sh. - Decodare codec încrucișată ا TTS decodor process speech in 25-frame chunks with 10-frame context suprapuse to evit GPU timeout.
- CFG dublată în serie CosyVoice3 DiT jumătățile fluxului de potrivire trece prin loting condiționat + necondiționat împreună.
- Fuzet RoPE bază
MLXNN.RoPEsusținut de nucleul Metal în loc de rotație manuală. - Fuziunea BN WeSpeaker normalizarea lotului s-a topit în Conv2d greutăți în timpul conversiei.
Procesare audio
Toate audio I/O folosește Float32 PCM. Conversia internă a formatului resamplere:
| Model | Rata preconizată | Format |
|---|---|---|
| Qwen3-ASR | 16 kHz | Mono Float32 |
| Cohere Transcribe 2B | 16 kHz | Mono Float32 |
| Voxtral Mini 3B | 16 kHz | Mono Float32 |
| Qwen3-TTS | Ieșire 24 kHz | Mono Float32 |
| CosyVoice3 | Ieșire 24 kHz | Mono Float32 |
| Kokoro-82M | Ieșire 24 kHz | Mono Float32 |
| PersonaPlex | 24 kHz I/O | Mono Float32 |
| Pyannote VAD | 16 kHz | Mono Float32 |
| Silero VAD | 16 kHz | Mono Float32 |
| WeSpeaker | 16 kHz | Mono Float32 |
| DIU-ul pentru vorbireBrain ECAPA | 16 kHz | Mono Float32 |
| ReDimNet2-B6 | 16 kHz | Mono Float32 |
| DeepFilterNet3 | 48 kHz | Mono Float32 |
Structura sursei
Sources/
AudioCommon/ Shared protocols, audio I/O, system-output capture
(SystemAudioTap), HuggingFace downloader,
SentencePieceModel (protobuf reader)
MLXCommon/ MLX utilities: weight loading, QuantizedLinear helpers,
SDPA multi-head attention helper, metal budget
Qwen3Common/ Shared model components (KV cache, RoPE, quantization)
Qwen3ASR/ Qwen3-ASR speech-to-text
ParakeetASR/ Parakeet TDT speech-to-text (CoreML)
ParakeetStreamingASR/ Parakeet EOU 120M streaming dictation (CoreML)
OmnilingualASR/ Meta wav2vec2 + CTC, 1,672 languages
(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 text-to-speech
FireRedTTS3TTS/ FireRedTTS3-Instruct (MLX, Float32)
MossVoiceGeneratorTTS/ MOSS-VoiceGenerator (MLX, BF16 + FP32)
CosyVoiceTTS/ CosyVoice3 text-to-speech
KokoroTTS/ Kokoro-82M text-to-speech (CoreML)
Qwen3Chat/ Qwen3.5-0.8B on-device LLM chat (MLX + CoreML)
PersonaPlex/ PersonaPlex speech-to-speech
SpeechVAD/ VAD (Silero + Pyannote), diarization, speaker embeddings
SpeechLanguageID/ Spoken language identification (SpeechBrain ECAPA, MLX + CoreML, 107 labels)
SpeechEnhancement/ DeepFilterNet3 noise suppression (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)
GLiNER/ GLiNER2.5-Decide classification + entity spans (MLX, INT8/FP16/FP32)
AudioCLILib/ CLI command implementations
AudioCLI/ CLI entry point
scripts/ Model conversion (PyTorch → MLX/CoreML), benchmarking
Tests/ Unit and integration tests
Examples/ Demo apps (PersonaPlexDemo, SpeechDemo)GLiNER2.5-Decide : nativ MLX clasificarea și întinderile entității (INT8, FP16 sau FP32 greutăți); nu Python la momentul de referință.
Clef-flash: previzualizare de dezvoltare a deciziilor de text locale (9B, affine 4-bit MLX), cu un cap schema comun și un corp separat de ieșire înainte.
MOSS-TTS-Nano
Streaming speech sinteze and voice cloning with CoreML, 48 kHz stereo audio and 80 ms chunks.
MossTTSNanoModel serializeaza cererile si creeaza stare proaspata CoreML pentru fiecare declaratie. sintetizeaza si sintetizeazaStream pastrare stereo; SpeechGenerationModel returneaza un monodownmix. Pass language: nil. Streams se termina cu un marker final gol.
macOS 15+ / iOS 18+; patru grafice compilate total 367.6 MB. Prompt, referinţă şi cadre solicitate împărtăşesc un context de 1,024-rând. Runtime-ul respinge şi ridică o eroare în cazul în care MaxFrames este atins înainte de sfârşitul natural al discursului. CPU este implicit; gpu permite CPU+GPU execuţie. PCG64 eşantionarea utilizează seminţe compatibile cu NumPy; diferenţele numerice de fundal pot schimba încă producţia.
Inference locală nativă
Agent opţionalÎncarcă un model de text în etape Gemma 4 12B Unificat INT4 alături de E4B. Utilizaţi modelul: "gemma4-12b-it" pentru chat cu instrumente native, istorie a rezultatelor şi anulare. E4B rămâne disponibil pentru alte cereri. Gemma4UnifiedChat utilizează termenul de apelare cu ajutorul unui dispozitiv cu clapetă MLX text implementat şi eliberat fiecare cerere de tip KV cache.Răspunsul elimină delimitatorii canalului de la textul returnat.
Serviciul nativ serializează chat-ul, sinteza și transcrierea; ușor VAD are o stare de flux separată. Gemma prefill folosește 256-token loturi, cerere KV stat este eliberat, iar cache-ul MLX este limitat la 128 MiB cu o limită de 20 GiB allocator.
Proprietate opțională a modelului
SpeechRuntime oferă încărcare comună, admitere FIFO canelabilă și execuție serializată. Qwen3ASRRuntime selectează MLX sau complet CoreML prin descriptori expliciti; API-urile native și steagurile CLI rămân disponibile.
Serverul audio deţine un permis de execuţie prin fiecare cerere completă, inclusiv fluxul de ieşire, cu până la 32 de cereri de aşteptare. ASR eşecuri produc erori HTTP sau WebSocket evenimente de eroare; transcrieri goale valabile rămân de succes. Playback păstrează mostrele de supraîncărcare. Modele cache şi audio în curs de redare ocupa încă memorie.
Voxtral TTS
Voxtral 4B TTS 2603 ruleaza local pe Apple Silicon prin modulul VotralTTSS: 20 voci prestabilite, nouă limbi, și 24 kHz mono speech.
VoxtralTTS → 26-layer LM → 3-layer acoustic transformer → 24 kHz PCMDoar vocile presetate; clonarea de referință-audio nu este disponibilă. Fluxuri de ieșire audio prin SDK, CLI, WebSocket și HTTP PCM. Furnizarea textului complet de intrare în față. Greutate model de utilizare CC BY-NC 4.0.
Fish Audio Drama 3
Suport experimental nativ MLX pentru Drama 3 este disponibil prin FishAudioDrama3Model. A 35B hibrid-attention MoE coloana vertebrală, turn audio temporal și codec DAC de pește produce 44.1 kHz mono audio. Punctul de control 4-bit a trecut forma de undă și controale independente ASR pentru generarea numai text, clonarea de referință și CLI pe M5 Pro. 8 și BF16 rămân nevalidate.
Implicit balanced mode tamps inactiv MLX tampoane peste 512 MiB la limitele de etapă. Modelul comun-viață cache capac se aplică, de asemenea,, păstrarea bugete mai mici apelant; nici controlul limitează memoria totală proces. --fish-drama3-memory-mode unrestricted sau memoryOptions: .unrestricted sarcini greutăți cu nerăbdare și sări de tăiere etapă, păstrând în același timp capacul de viață.
Generaţia unică de text amână 794.4 MiB de greutăţi de codor de referinţă. Primele sarcini de codare de referinţă şi le păstrează, astfel încât să păstreze codec.safetensors disponibile până atunci. Codurile de referinţă precomputate nu au nevoie de codor.
FishAudioTTS: FishAudioDrama3Model · backbone.model.* · semantic_head.* · tower.* · codec.safetensors
Construit cu Fish Audio. Bundles păstrează licenţa comunitară şi NOTACE.
PCM streaming este disponibil prin generateStreaming, generateStream și --stream. Bucata implicită conține 3 cadre codec, aproximativ 139 ms de audio. Intrarea automată de text de lungă durată și streamed text rămâne indisponibilă.
Fiecare carte de coduri turn utilizează valorile jetoanelor 4,096. Buffered și streaming Fish DAC decodarea ambelor coduri reziduale de clemă la codec. 1,024-intrare codebook-uri reziduale. Codebook-urile returnate păstrează valorile turn originale.
Dimensiunile rotative nevalabile sunt respinse înainte de încărcarea greutăților modelului.