Maskinöversättning · Engelskt original

Arkitektur

Native instruktion TTS

Bygg infödda SDK stöd från huvudkälla. Homebrew och andra förbyggda CLI-utgåvor kanske inte inkluderar dessa motorer ännu.

Implementering (PR #541): main

Publicerad MLX buntar: aufklarer/FireRedTTS3-Instruct-MLX-fp32 aufklarer/MOSS-VoiceGenerator-MLX-bf16

FireRedTTS3-Instruct — FireRedTTS3TTSFireRedTTS3-Instruct behåller Float32-modellen och avkodningsvikterna. Den returnerar bufferterat ljud: Omit --stream. Engelska och kinesiska --language alias accepteras. En generationsgräns höjer ett fel istället för att returnera truncated framgång.

MOSS-VoiceGenerator — MossVoiceGeneratorTTSMOSS-VoiceGenerator behåller BF16 språkvikter och FP32 syntes codec. Använd --stream för steg PCM. Omit --language och sätter språkkrav i --instruct. Slutförande dränerar alla sexton kodböcker.

Varje text- och instruktionsfält är begränsat till 32.768 UTF-8 byte. Den fullständiga ingångsprompten, inklusive dess mall, måste passa inom 4.096 tokens. Ingångar som överstiger gränsen avvisas.

Instruktionsföljande kvalitet är oscored. Kortskriftsmätningar beskriver den testade inställningen; befintlig-modell latens certifiering förblir oavslutande.

Breeze TTS 2 · Breeze TTS

Engelska/kinesiska TTS med röstdesign, referenskloning och riktning och strömmande ljud (MLX BF16/8-bit, 24 kHz; forskning/icke-kommersiell licens).

BreezeTTS · CLI Swift API

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

Native Apple runtime · PocketTTS

PocketTTS lägger till infödd CoreML talsyntes till speech-swift. Alla steg som standard för CPU-bara avrättning. Den engelska Alba förinställda strömmar 1,920-provramarna vid 24 kHz (80 ms per ram).

Swift och CLI-användning

speech-swift är organiserad som ett modulärt Swift-paket med delade protokoll, oberoende modellmoduler och en enhetlig CLI. All inference körs på-enhet med MLX (Metal GPU) eller CoreML(Neural Engine).

Modulberoende Graf

                    ┌──────────┐
                    │ 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 buffert cache budget

MLX modell runtimes delar en standard återanvändbar buffert cap av min(2 GiB, physical RAM / 4) från viktbelastning genom modellens livstid. Lägre uppringningsbudgetar, inklusive MLX.Memory.cacheLimit = 0, och befintliga modellspecifika budgetar bevaras. Kapselgränserna tomgångsbuffertar; aktiva vikter, KV-kakor och total processminne kan överstiga det. MLX trims på tilldelning, så den sista frigjorda bufferten kan tillfälligt sätta cache över sin budget till nästa tilldelning.

unload() släpper modellens registrering; runtimes utan den metoden släpper den på förstörelse. Den sista ägaren återställer uppringarens budget, medan tidigare lossningar bevarar de återstående modellernas tak. CoreML-bara vägar förvärvar inte MLX registreringar.

MOSS Transcribe Diarize

MossTranscribe returnerar högtalar-attribuerade tidsstämpel segment genom två inhemska backends. CoreML Använder en fast 1,024-token MLState för korta inspelningar. MLX Använder en dynamiskt växande 131,072Token kontext, affin INT5/INT8 Decoder vikter och valfria FP16/INT8 KV cachar för globalt kontextualiserad långformad transkription. Båda är offline, autoregressiva runtimes snarare än streaming modeller.

VoiceChat 11B

Uppgifter och referens: duplex tal-till-tal; SALM-Duplex: Effektiv och direkt duplex modellering för tal-till-tal språkmodell (Interspeech 2025), citerad av NVIDIA uppströms VoiceChat modellkort.

Complete runtime, M5 Pro 48 GB, Release, 80 ms live cadence: skyddad huvud INT5 topp RSS är ca 8,69 GB; tre kontrollerade helpipeline RTF resultat var 0,96, 0,96 och 0,99. Optimized INT8 prestanda har ännu inte blivit mätt.

VoiceChat implementerar den fullständiga infödda MLX ljud-till-audio-väg: orsakssamband FastConformer perception, Nemotron-H duplex text/funktionskanaler, den fristående text-konditionerade EAR-TTS-avkodaren med åtta MaskGIT- iterationer och en 22.05 kHz neural codec. Streaming behåller bunden per lager uppmärksamhet och kausal-konvolution caches, medan den stadiga åtta-ram levande codec fönster använder en sammanställd graf. Varje 80 ms ingångsram ger ett språkbeslut, 31 RVQ-koder och exakt 1,764 Utgångsprover. Lastaren kräver en komplett encoder/ + llm/ + tts/ bunt och avvisar äldre förståelse-bara export. INT5 nu upprätthåller aggregerad RTF under 1 på den testade M5 Pro, även om per-frame p95 huvudrum förblir smal.

Inference Backends

BackendHårdvaraModeller
MLX Metal GPU Qwen3-ASR, Qwen3-TTS, Breeze TTS 2, CosyVoice3, IndexTTS2, Qwen3.5-Chat, PersonaPlex, VoiceChat 11B, Omnilingual ASR (300M/ 1B / 3B / 7B), Cohere Transcribe 2B, B, Voxtral Mini Mini 3B, B, MOSS Transkribera diarize Pyannote, Silero VAD, WeSpeakerSpeechBrain ECAPA LID, Nemotron 3 Diarization, FireRedTTS3-InstructMOSS-VoiceGenerator
CoreML CPU / GPU/Neural Engine (ANE) Qwen3-ASR Encoder (hybrid), Parakeet TDT, Parakeet EOU streaming, Omnilingual ASR 300M, Kokoro-82M, M, Qwen3.5-Chat (valfritt), Sortformer diarization, DeepFilterNet3, Silero VAD (valfritt), WeSpeaker (valfritt), MOSS Transcribe Diarize, SpeechBrain ECAPA LID, Nemotron 3 Diarization
Accelerera CPU (SIMD) Audio preprocessing (STFT, mel, FFT), signalbehandling

Modellvikt Format

MLX modeller använder safetensors format med 4-bitars eller 8-bits kvantisering (gruppstorlek 64). CoreML modeller använda .mlmodelc sammanställt format. Konverteringskript i scripts/ konverterar från PyTorch-kontrollpunkter.

Cohere och Voxtral använder också MLX affine INT5 buntar. MLX stöder inte affin INT7; INT8 är det stödda alternativet med högre kvalitet.

ModellParamsKvantiseringStorlek på Disk
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 ljud + 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)~120MINT8120 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)~500M4-bitars LLM~1.2 GB
IndexTTS2 expanderad bunt (MLX)1.5B-klassFP16 + hjälpmodeller~4.8 GB
Kokoro-82M (CoreML)82MINT8 (1 hink)~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)
p99 turn-1-mini5.3MFloat3222 MB (CoreML)
VAP (otoSpeech)5.8MFloat3239 MB (CoreML) / 40 MB ( ONNX)
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 + infödd VBx~32 MB
Nemotron 3 Diarization (CoreML/MLX)100MINT8~ 100 MB per backend
Sortformer (CoreML)—float16~50 MB
DeepFilterNet3 (CoreML)~2.1MFP16~4.2 MB
LocalVQE v1.4-AEC (CoreML + C++)200K + 2,742FP16 + FP32~732 KB

MLX modellinitiering

QuantizedLinear.preQuantized skapar nollfyllda platshållare för kvantiserade linjära lager som läses från kontrollpunkter och undviker därmed slumpmässiga vikter och deras tillfälliga kvantiseringsgrafer. withThrowawayRandomState håller den kasserade flyttalsinitieringen utanför anroparens kedja av slumpnycklar. Sammansatta laddare avgränsar varje komponent: MAGNeT med T5 och EnCodec, Stable Audio 3 med T5Gemma och SAME-L samt CSM med Mimi-kodeken. CSM:s kvantiserade inbäddningar använder fortfarande uppströmsinitieraren och behåller dess kända begränsning i initieringsgrafen.

Performance Optimizations

Audio Processing

Alla ljud I/O använder Float32 PCM. Internal återförsäljning hanterar format konvertering:

ModellFörväntad RateFormat
Qwen3-ASR16 kHzMono Float32
Cohere Transcribe 2B16 kHzMono Float32
Voxtral Mini 3B16 kHzMono Float32
Qwen3-TTS24 kHz-utgångMono Float32
CosyVoice324 kHz-utgångMono Float32
Kokoro-82M24 kHz-utgångMono 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

Källa Struktur

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: infödd MLX klassificering och entitetsspannor (INT8, FP16 eller FP32 vikter); ingen Python vid inferenstid.

Clef-flash: utvecklingsförhandsgranskning av lokala textbeslut (9B, affin 4-bit MLX), med ett gemensamt schema huvud och en separat utmatning innan.

MOSS-TTS-Nano

Streaming talsyntes och röst kloning med CoreML, 48 kHz stereo ljud och 80 ms bitar.

MossTTSNanoModel serialiserar förfrågningar och skapar färska CoreML tillstånd för varje yttrande. syntetisera och synthesizeStream bevara stereo; SpeechGenerationModel returnerar en mono downmix. Pass språk: nil. Streams slut med en tom slutmarkör.

macOS 15+ / iOS 18+4 sammanställda grafer totalt 367.6 MB. Prompt, referens och begärda ramar delar en 1,024-row kontext. Runtiden avvisar överflödet och höjer ett fel om maxFrames uppnås före naturlig slut-of-tal. CPU är standarden; gpu tillåter CPU+GPU avrättning. PCG64 provtagning använder NumPy-kompatibla frön; backend numeriska skillnader kan fortfarande ändra utgång.

MOSS-TTS-Nano

Lokal inhemsk slutsats

Valfria agentDirectory laddar en iscensatt Gemma 4 12B Unified INT4 textmodell tillsammans med E4B. Använd modell: "gemma4-12b-it" för chatt med inhemska verktyg, resultathistorik och avbokning. E4B förblir tillgänglig för andra förfrågningar. Gemma4UnifiedChat använder den höjda MLX text implementering och släpper varje förfrågan KV cache. Responseponselimsing

Den infödda tjänsten serialiserar chatt, syntes och transkription; lätt VAD har separat strömtillstånd. Gemma prefill använder 256-token-satser, begär KV-tillståndet släpps, och MLX cache är capped på 128 MiB med en 20 GiB-allokatorgräns.

API detaljer

Valfri modell ägande

SpeechRuntime tillhandahåller delad lastning, avbokningsbar FIFO-antagning och serialiserad avrättning. Qwen3ASRRuntime väljer MLX eller full CoreML genom explicita deskriptorer; inhemska API och CLI-flaggor finns tillgängliga.

Ljudservern har ett genomförandetillstånd genom varje fullständig förfrågan, inklusive strömmat utgång, med upp till 32 förfrågningar som väntar. ASR fel ger HTTP-fel eller WebSocket felhändelser; giltiga tomma utskrifter förblir framgångsrika. Playback bevarar överflödesprover. Cachade modeller och pending uppspelningsljud upptar fortfarande minne.

Voxtral TTS

Voxtral 4B TTS 2603 körs lokalt på Apple Silicon genom Voxtral TTS-modulen: 20 förinställda röster, nio språk och 24 kHz monotal.

VoxtralTTS → 26-layer LM → 3-layer acoustic transformer → 24 kHz PCM

Förinställda röster endast; referens-audio kloning är otillgänglig. Audio utgångsströmmar genom SDK, CLI, WebSocket och HTTP PCM. Supply the fullständig input text up front. Model vikter använder CC BY-NC 4.0.

Läs Voxtral TTS guide

Fish Audio Drama 3

Experimentell infödd MLX stöd för Drama 3 är tillgänglig via FishAudioDrama3ModelA. A. 35B hybrid-uppmärksamhet MoE ryggraden, temporalt ljudtorn och Fish DAC codec producerar 44.1 kHz mono ljud. 4-bit checkpoint passerade vågform och oberoende ASR kontroller för text-bara generationen, referenskloning och CLI-utgång på Apple M5 Pro. 8-bit och BF16 förblir ovärderlig.

Standarden balanced läge trims idle MLX buffertar över 512 MiB vid scen gränser. Den delade modell-livstid cache cap gäller också, bevara lägre uppringningsbudgetar; varken kontroll begränsar total processminne. --fish-drama3-memory-mode unrestricted eller memoryOptions: .unrestricted loads vikts eagerly and skips

Text-bara generationen skjuter upp 794.4 MiB av referenskodare vikter. Den första referenskodningsbelastningen och behåller dem, så håll codec.safetensors tillgängliga tills dess. Precomputed referenskoder behöver inte kodaren.

FishAudioTTS: FishAudioDrama3Model · backbone.model.* · semantic_head.* · tower.* · codec.safetensors

Byggd med Fish Audio. Bundles behåller gemenskapslicensen och NOTICE.

4-bitars benchmark

PCM streaming är tillgänglig via generateStreaming, generateStream och --stream. Standardkanalen innehåller 3 codec-ramar, cirka 139 ms ljud. Automatisk långa text chunking och streamad texting är fortfarande otillgänglig.

Varje tornkodbok använder 4,096 tokenvärden. Buffered och streaming Fish DAC avkodar både klampresterande koder till codecs 1,024-entry residual codebooks. Returnerade kodböcker behåller de ursprungliga tornvärdena.

Ogiltiga roterande dimensioner avvisas innan lastning modell vikter.