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ă).

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

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).

Swift și utilizarea CLI

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-ulModele
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ă.

ModelParameleCuantificareDimensiune pe disc
Qwen3-ASR 0,6B (MLX)~600M4 biți / 8 biți680 MB / 1.0 GB
Qwen3-ASR 0,6B (CoreML)~186M (codor)INT8~180 MO
Qwen3-ASR 1.7B (MLX)~1,7B4 biți / 8 biți2.1 GB / 3.2 G
Parakeet- TDT 0,6B (CoreML)~600MINT8500 MO
Whisper Large-v3 Turbo (CoreML)809MFP161,6 GB
MOSS Transcribe diarize 0,9B (MLX)908.5MFP16 audio + INT5 / INT8 decodor987.0 MiB / 1,200.1 MIB
MOSS Transcribe diarize 0,9B (CoreML)~900MFP16 / INT8 block-321.7 GB / 1.2 G
Parakeet-EOU 120M (CoreML)~120MINT8~120 MO
Omnilingv-ASR-CTC 300M (CoreML)326MINT8312 MO
Omnilingual-ASR-CTC 300M (MLX)326M4 biți / 8 biți193 MO / 342 MO
Omnilingv-ASR-CTC 1B (MLX)1,01B4 biți / 8 biți549 MO / 1006 MO
Omnilingual-ASR-CTC 3B (MLX)~3B4 biți / 8 biți1,71 GB / 3,16 GB
Omnilingual-ASR-CTC 7B (MLX)~7B4 biți / 8 biți3.55 GB / 6.63 G
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 biți / 8 biți979 MB / 1,4 GB
Qwen3-ForcedAligner 0,6B (CoreML)~600MINT4 / INT8630 MB / 1,0 GB
Qwen3-TTS 0,6B (MLX)~600M4 biți / 8 biți1.7 GB / 2.4 G
Qwen3-TTS 1.7B (MLX)~1,7B4 biți / 8 biți3.2 GB / 4.8 G
CosyVoice3 0,5B (MLX)~500M4-bit LLM~1.2 GB
IndexTTS2 pachet extins (MLX) Clasa 1.5BFP16 + modele auxiliare~4.8 GB
Kokoro-82M (CoreML)82MINT8 (1 găleată)~89 MO
Qwen3.5-Chat 0.8B (MLX)~800MINT4418 MO
Qwen3.5-Chat 0.8B (CoreML)~800MINT8981 MO
PersonaPlex 7B (MLX)~7B4 biți / 8 biți4,9 GB / 9,1 GB
VoiceChat 11B (MLX)~11BINT5 / INT88.56 GB / 12.11 G
Pyannote VAD (MLX)~1,49Mfloat32~5,7 MO
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 + VBx nativ~32 MO
Nemotron 3 Diarizare (CoreML / MLX) 100MINT8~100 MB per suport
Sortare (CoreML)—float16~50 MO
DeepFilterNet3 (CoreML)~2.1MFP16~4.2 MO
LocalVQE v1.4-AEC (CoreML + C++)200K + 2,742FP16 + 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ță

Procesare audio

Toate audio I/O folosește Float32 PCM. Conversia internă a formatului resamplere:

Model Rata preconizatăFormat
Qwen3-ASR16 kHzMono Float32
Cohere Transcribe 2B16 kHzMono Float32
Voxtral Mini 3B16 kHzMono Float32
Qwen3-TTSIeșire 24 kHzMono Float32
CosyVoice3Ieșire 24 kHzMono Float32
Kokoro-82MIeșire 24 kHzMono Float32
PersonaPlex24 kHz I/OMono Float32
Pyannote VAD16 kHzMono Float32
Silero VAD16 kHzMono Float32
WeSpeaker16 kHzMono Float32
DIU-ul pentru vorbireBrain ECAPA16 kHzMono Float32
ReDimNet2-B616 kHzMono Float32
DeepFilterNet348 kHzMono 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.

MOSS-TTS-Nano

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.

API detalii

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 PCM

Doar 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.

Citeşte ghidul Voxtral TTS

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.

4-biți de referință

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.