Automatische vertaling · Engels origineel

Architectuur

Inheemse instructie TTS

Native SDK ondersteuning van de hoofdbron bouwen. Homebrew en andere vooraf gebouwde CLI releases kunnen deze motoren nog niet bevatten.

Implementatie (PR #541): main

Gepubliceerd MLX bundels: aufklarer/FireRedTTS3-Instruct-MLX-fp32 · aufklarer/MOSS-VoiceGenerator-MLX-bf16

FireRedTTS3-Instruct — FireRedTTS3TTS: FireRedTTS3-Instruct behoudt Float32 model en decodergewichten. Het geeft gebufferde audio terug: laat --stream weg. Engels en Chinees --language aliassen worden geaccepteerd. Een generatie limiet verhoogt een fout in plaats van terug te keren afgeknot succes.

MOSS-VoiceGenerator — MossVoiceGeneratorTTS: MOSS-VoiceGenerator behoudt BF16 taalgewichten en de FP32 synthesecodec. Gebruik --stream voor incrementele PCM. Zet --language uit en zet taalvereisten in --instruct. Compleet maken draineert alle zestien codeboeken.

Elke tekst- en instructieveld is beperkt tot 32.768 UTF-8 bytes. De volledige weergegeven invoerprompt, inclusief de sjabloon, moet binnen 4.096 tokens passen. Invoeren die beide grenzen overschrijden worden afgewezen.

De kwaliteit van de instructie volgt niet. Short-script metingen beschrijven de geteste setup; bestaande model latency certificering blijft niet overtuigend.

Breeze TTS 2 · Breeze TTS

Engels/Chinees TTS met spraakontwerp, referentieklonen en richting, en gestreamde audio (MLX BF16/8-bit, 24 kHz; onderzoek/niet-commerciële licentie).

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

Inheemse Apple runtime · PocketTTS

PocketTTS voegt native CoreML spraaksynthese toe aan speech-swift. Alle fasen zijn standaard voor CPU-uitvoering. De Engelse Alba-voorinstelling streamt 1.920-sample frames op 24 kHz (80 ms per frame).

Swift en CLI-gebruik

speech-swift is georganiseerd als een modulair Swift pakket met gedeelde protocollen, onafhankelijke modelmodules en een uniforme CLI. Alle gevolgtrekkingen draaien op het apparaat met MLX (Metal GPU) of CoreML (Neural Engine).

Moduleafhankelijkheidsgrafiek

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

MLX model runtimes delen een standaard herbruikbare bufferkap van min(2 GiB, physical RAM / 4) vanaf het laden van het gewicht door de levensduur van het model. Lagere budgetten voor beller, inclusief MLX.Memory.cacheLimit = 0, en bestaande modelspecifieke budgetten worden bewaard. De limiet voor stationaire buffers; actieve gewichten, KV-caches en totaal procesgeheugen kunnen deze overschrijden. MLX trimt bij toewijzing, zodat de laatste vrije buffer de cache tijdelijk boven zijn budget kan plaatsen tot de volgende toewijzing.

unload() geeft de registratie van het model uit; runtimes zonder die methode geven het vrij bij vernietiging. De laatste eigenaar herstelt het budget van de beller, terwijl eerdere uitladingen de resterende plafonds behouden. CoreML-alleen paden verwerven geen MLX registraties.

MOSS Transcriberen Diarize

MossTranscribe geeft speaker-toegeschreven tijdstempel segmenten via twee native backends terug. CoreML gebruikt een vaste 1,024-token MLState voor korte opnames. MLX maakt gebruik van een dynamisch groeiende 131,072-getoken context, affine INT5/INT8 decodergewichten en facultatief FP16/INT8 KV caches voor wereldwijd gecontextualiseerde lange-vorm transcriptie. Beide zijn offline, autoregressieve runtimes in plaats van streaming modellen.

VoiceChat 11B

Taak en referentie: duplex speech-to-speech; SALM-Duplex: efficiënte en directe duplexmodellering voor spraak-tot-spraaktaalmodel (Interspeech 2025), geciteerd door NVIDIA is upstream VoiceChat modelkaart.

Voltooi runtime, M5 Pro 48 GB, Release, 80 ms live cadans: protected-head INT5 peak RSS is ongeveer 8,69 GB; drie gecontroleerde pipeline RTF resultaten waren 0,96, 0,96 en 0,99. Geoptimaliseerd INT8 prestaties zijn nog niet opnieuw gemeten.

VoiceChat implementeert de complete native MLX audio-naar-audio pad: causaal FastConformer waarneming, de Nemotron-H duplex tekst/functionele kanalen, de standalone tekst-conditioned EAR-TTS decoder met acht MaskGIT iteraties, en een 22.05 kHz neurale codec. Streaming behoudt begrensde per-layer aandacht en causale-evolutie caches, terwijl het stabiele acht-frame live codec venster een gecompileerde grafiek gebruikt. Elk 80 ms invoerframe produceert een taalbeslissing, 31 RVQ codes, en precies 1,764 uitvoer samples. De lader vereist een complete encoder/ + llm/ + tts/ INT5 ondersteunt nu de totale RTF onder 1 op de geteste M5 Pro, hoewel de hoofdruimte per frame p95 smal blijft.

Backends voor gevolg

BackendHardheidModellen
MLX Metal GPU Qwen3-ASR, Qwen3-TTS, Breeze TTS 2, CosyVoice3, IndexTTS2, Qwen3.5-Chat, PersonaPlex, VoiceChat 11B, Niet-linguaal ASR (300M / 1B / 3B / 7B), Cohere Overschrijven 2B, Voxtral Mini 3B, MOSS Diarize, Pyannote, Silero VAD, WeSpeaker, SpeechBrain ECAPA LID, Nemotron 3 Diarisatie, FireRedTTS3-InstructMOSS-VoiceGenerator
CoreML CPU / GPU/Neural Engine (ANE) Qwen3-ASR encoder (hybride), Parakeet TDT, Parakeet EOU streaming, Omnilingual ASR 300M, Kokoro-82M, Qwen3.5-Chat (facultatief), sortformerdiarisatie, DeepFilterNet3, Silero VAD (facultatief), WeSpeaker (facultatief), MOSS Diarize, SpeechBrain ECAPA LID, Nemotron 3 Diarisatie
Versnel CPU (SIMD) Audio voorbewerking (STFT, mel, Fiat), signaalverwerking

Model gewichtsformaat

MLX modellen gebruiken safetensors formaat met 4-bits of 8-bits quantization (groepsgrootte 64). CoreML modellen maken gebruik van .mlmodelc gecompileerd formaat. Conversiescripts in scripts/ converteren van PyTorch controlepunten.

Cohere en Voxtral gebruiken ook MLX affine INT5 bundels. MLX ondersteunt geen affiene INT7; INT8 is de ondersteunde optie van hogere kwaliteit.

ModelParamsKwantisering Grootte op schijf
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 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)~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-bit 1,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-bit LLM~1,2 GB
IndexTTS2 uitgebreide bundel (MLX)1.5B-klasseFP16 + hulpmodellen~4,8 GB
Kokoro-82M (CoreML)82MINT8 (1 emmer)~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 VoxLingua107 21,25MFP16~40.6 MiB (MLX) / ~40.8 MiB (CoreML)
ReDimNet2-B6 12,3Mfloat16~25 MiB (CoreML)
Pyannote Community-1 (CoreML)8,35Mfloat32 + native VBx~32 MB
Nemotron 3 Diarisatie (CoreML / MLX)100MINT8100 MB per backend
Sortvormer (CoreML)—float1650 MB
DeepFilterNet3 (CoreML)~2.1MFP16~4.2 MB
LocalVQE v1.4-AEC (CoreML + C++)200K + 2,742FP16 + FP32~732 KB

MLX modelinitialisatie

QuantizedLinear.preQuantized maakt nulwaarden als tijdelijke invulling voor gekwantiseerde lineaire lagen die uit checkpoints worden geladen. Zo worden willekeurige gewichten en hun tijdelijke kwantisatiegrafen vermeden. withThrowawayRandomState houdt de verworpen floating-point-initialisatie buiten de keten van willekeurige sleutels van de aanroeper. Samengestelde loaders passen dit bereik toe op elke component: MAGNeT met T5 en EnCodec, Stable Audio 3 met T5Gemma en SAME-L, en CSM met de Mimi-codec. De gekwantiseerde embeddings van CSM gebruiken nog steeds de upstream-initialisator en behouden diens bekende beperking in de initialisatiegraaf.

Prestatieoptimalisaties

Audioverwerking

Alle audio I/O gebruikt Float32 PCM. Interne herampling handgrepen formaatconversie:

Model Verwacht percentageFormaat
Qwen3-ASR16 kHzMono Float32
Cohere Transcribe 2B16 kHzMono Float32
Voxtral Mini 3B16 kHzMono Float32
Qwen3-TTS24 kHz uitgangMono Float32
CosyVoice324 kHz uitgangMono Float32
Kokoro-82M24 kHz uitgangMono 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

Bronstructuur

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: native MLX classificatie en entiteitslengtes (INT8, FP16 of FP32 gewichten); geen Python bij het bepalen van de tijd.

Clef-flash: ontwikkelingsvoorbeeld van lokale tekstbeslissingen (9B, affine 4-bit MLX), met een gezamenlijke schemakop en een aparte output-ingangsvooraf.

MOSS-TTS-Nano

Streaming spraaksynthese en stemklonen met CoreML, 48 kHz stereo audio en 80 ms brokken.

MossTTSNanoModel serialiseert verzoeken en creëert nieuwe CoreML status voor elke uitdrukking. synthesizer en synthesizeStream behoudt stereo; SpeechGenerationModel geeft een mono downmix terug. Pass language: nul. Streams eindigen met een lege laatste marker.

macOS 15+ / iOS 18+; vier gecompileerde grafieken totaal 367.6 MB. Waarschuwing, referentie en gevraagde frames delen een 1.024-rij context. De runtime wijst overflow af en verhoogt een fout als maxFrames wordt bereikt voordat natuurlijke einde-van-spraak. CPU is de standaard; gpu-vergunningen CPU+GPU uitvoering. PCG64 sampling maakt gebruik van NumPy-compatibele zaden; backend numerieke verschillen kunnen nog steeds de output wijzigen.

MOSS-TTS-Nano

Lokale lokale gevolgtrekking

Facultatief agentDirectory laadt een geënsceneerd Gemma 4 12B Unified INT4 tekstmodel naast E4B. Gebruik model: "gemma4-12b-it" voor chat met inheemse hulpmiddelen, resultaatgeschiedenis en annulering. E4B blijft beschikbaar voor andere verzoeken. Gemma4UnifiedChat gebruikt de gepinde MLX tekstimplementatie en geeft elk verzoek uit de KV-cache. Response parsing verwijdert kanaaldelimiters uit de geretourneerde tekst. Onderwezen tool-call terminators worden afgewezen als misvormde reacties.

De native service serialiseert chat, synthese en transcriptie; lichtgewicht VAD heeft een aparte streamstatus. Gemma prefill gebruikt 256-getoken batches, de KV-status wordt vrijgegeven en de MLX cache is beperkt tot 128 MiB met een 20 GiB-allocatielimiet.

API details

Facultatief modelbezit

SpeechRuntime biedt gedeelde laden, opzegbare FIFO-toegang en seriematige uitvoering. Qwen3ASRRuntime selecteert MLX of volledige CoreML via expliciete descriptoren; de oorspronkelijke API's en CLI-vlaggen blijven beschikbaar.

De audioserver heeft één uitvoervergunning door elke volledige aanvraag, inclusief gestreamde uitvoer, met maximaal 32 verzoeken die wachten. ASR storingen veroorzaken HTTP-fouten of WebSocket error events; geldige lege transcripten blijven succesvol. Afspelen behoudt overflowsamples. Gecachede modellen en in afwachting van afspeelaudio blijft het geheugen bezet.

Voxtral TTS

Voxtral 4B TTS 2603 draait lokaal op Apple Silicon via de Voxtral tTS module: 20 vooraf ingestelde stemmen, negen talen en 24 kHz mono speech.

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

Uitsluitend stemmen vooraf instellen; referentie-audio klonen is niet beschikbaar. Audiouitvoer stroomt door de SDK, CLI, WebSocket en HTTP PCM. Geef de volledige invoertekst vooraf. Modelgewichten gebruiken CC BY-NC 4.0.

Lees de Voxtral TTS gids

Fish Audio Drama 3

Experimentele native MLX ondersteuning voor Drama 3 is beschikbaar via FishAudioDrama3Model. Een 35B hybride-aandacht MoE backbone, temporal audio tower en Fish DAC codec produceren 44,1 kHz mono audio. De 4-bits controlepunt doorgegeven golfvorm en onafhankelijke ASR controles voor tekst alleen genereren, referentie klonen en CLI output op Apple M5 Pro. 8-bit en BF16 blijven ongeldig.

De standaard balanced modus trimt inactief MLX buffers boven 512 MiB op fasegrenzen. De gedeelde model-levensduur cache cap is ook van toepassing, waarbij lagere beller budgetten behouden blijven; noch de controle beperkt het totale procesgeheugen. --fish-drama3-memory-mode unrestricted of memoryOptions: .unrestricted laadt gewichten gretig over en slaat fase-trimmen over, met behoud van de levensduur cap.

Tekst-only generatie stelt 794.4 MiB referentie-encodergewichten uit. De eerste referentie-encoding ladingen en behoudt ze, dus houd codec.safetensors tot dan beschikbaar. Voorgecomponeerde referentiecodes hebben de encoder niet nodig.

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

Gebouwd met Fish Audio. Bundels behouden de Community License and Notice.

4-bit benchmark

PCM-streaming is beschikbaar via generateStreaming, generateStream en --stream. De standaard brok bevat 3 codec frames, ongeveer 139 ms audio. Automatische lang-tekst chunking en gestreamde tekstinvoer blijven niet beschikbaar.

Elke toren codebook maakt gebruik van 4.096 token waarden. Gebufferd en streaming Vis DAC decoderen zowel klem restcodes naar de codec... 1.024-entry rest codebooks. Returned codebooks behouden de oorspronkelijke toren waarden.

Ongeldige roterende afmetingen worden geweigerd voordat de gewichten van het laadmodel worden geladen.