Maskinoversettelse · Engelsk original
Qwen3-TTS
Native Apple Runtime · PocketTTS
PocketTTS legger til opprinnelig CoreML talesyntese til speech-swift. Alle stadier er standard til CPU-beskyttelse. Den engelske Alba-forhåndsinnstilte strømmer 1.920-prøverammer ved 24 kHz (80 ms per ramme).
Voxtral TTS forhåndsinnstilte nedlastinger
Voxtral TTS laster ned modellvekter, tokenizer, config og alle 20 forhåndsdefinerte talefiler ved første bruk. Frakoblet lasting krever den komplette cachede bundten, inkludert hver fil i voice_embedding/.
Qwen3-TTS er en 12Hz kodekspråkmodell med en Mimi dekoder for tekst-til-speech-syntese av høy kvalitet. Standard MLX -stien bruker nå 1,7B-basen bf16 -pakken; 8-bits bundter er fortsatt tilgjengelige for mindre nedlastinger. int4 ble frakommført for TTS
VoxCPM2 vs Qwen3-TTS · Full femspråklig stemmekloning sammenligning og metode.
Pipeline
Talsyntese følger en tretrinns rørledning:
- Talker - 28-lags transformator som konverterer inngangstekst til første kodeboktegn på 12,5 Hz
- Code Prediktor - 5-lags transformator som forutsi de resterende 15 kodebøkene fra den første kodeboken skjulte tilstander
- Mimi CodecDescription - Konverterer alle 16 kodeboktegn til en 24 kHz lydbølgeform
Arkitektur
Talker
Talkeren er kjernen autoregressiv modell som genererer kodek tokens fra tekstinngang.
| Parameter | Verdi |
|---|---|
| Lag | 28 |
| Skjult dimensjon | 1024 |
| Forespørselshoder | 16 |
| Nøkkel/verdihoder | 8 (GQA) |
| MLP | Swiglu |
| Posisjonskoding | RoPE |
Kodeprediktor
En lett 5-lags transformator som tar de skjulte tilstandene fra den første kodeboken og forutsier de gjenværende 15 kodebøkene automatisk regressivt. For enkel-element syntese, den faste 15-gruppe sløyfe kjører som én kompilert graf.
Mimi Kodedekode
Den Mimi dekoderen konverterer kvantiserte kodekene tilbake til lyd:
- RVQ dekode (16 kodebøker)
- Førkonvolusjon (512 til 1024 kanaler)
- Pre-transformer (1024 til 512 flaskehals, 8 lag, Swiglu + LayerScale)
- Oppprøve (2x, 2x)
- SEANet dekoder (8x, 5x, 4x, 3x upsample-stadier)
- 24 kHz bølgeform utgang
Modell Varianter
| Modell | Størrelse | HuggingFace |
|---|---|---|
| Qwen3-TTS-0.6B Base (8-bit) | 1.3 GB | aufklarer/Qwen3-TTS-12Hz-0.6B-Base-MLX-8bit |
| Qwen3-TTS-1.7B Base (8-bit) | 2,4 GB | aufklarer/Qwen3-TTS-12Hz-1.7B-Base-MLX-8bit |
| Qwen3-TTS-1.7B Base (bf16, standard) | 3.9 GB | aufklarer/Qwen3-TTS-12Hz-1.7B-Base-MLX-bf16 |
| Qwen3-TTS-0.6B CustomVoice (bf16) | 1.8 GB | aufklarer/Qwen3-TTS-12Hz-0.6B-CustomVoice-MLX-bf16 |
| Qwen3-TTS CoreML (FP16) | 2.1 GB | aufklarer/Qwen3-TTS-CoreML |
CoreML Motor
CoreML kjører seks kompilerte komponenter. Beregn plassering avhenger av den valgte pakke.
- TextProjector - Prosjekter tekst token inneslutter til delt skjult plass
- CodeEmbedder - Embeds førstekodebok token og kontrollsymboler
- MultiCodeEmbedder — Embeds tokens fra kodebøker 1-15
- CodeDecoder — 28 lag autoregressiv transformator med ustabil KV-buffer (maks 256 posisjoner)
- MultiCodeDecoder — 5-lags kodeprediktor for kodebøker 1-15
- SpeechDecoder — Mimi codecode dekoder, konverterer 16 kodeboktegn til 24 kHz-lyd
# CoreML synthesis
.build/release/speech speak "Hello, world!" --engine coreml -o hello.wav
# CoreML uses temperature 0.8 by default (required for quality output)
.build/release/speech speak "Long text here." --engine coreml --temperature 0.9 -o out.wav
0.6B: CoreML CodeDecoder bruker en fast 256-posisjon KV-cache. Lengre passasjer bør deles inn i individuelle setninger. Decode-token er automatisk dekket for å passe innenfor de gjenværende cache-sporene etter forhåndsfylling.
Eksperimentell 1,7B CoreML eksport
Dekoderen bruker FP32-beregning fordi FP16 mislyktes kontrollpunktvalidering; cache tensors forblir FP16.
Den sekskomponentomformeren støtter 1,7B Base og en 1024-stillings stateful CodeDecoder. Taleren og høyttalerinnbyggingen har 2048 kanaler; 1024-kanals kodeprediktor inkluderer dens utdannede inngangsprojeksjon.
Swift støtter 0.6B/256 og 1.7B/1024 bundter; 0.6b forblir standard. Den eksperimentelle 1,7B bunt standard til CPU og krever en forberedt 2048-kanal Float32 .npy høyttaler inneslutting via --speaker-embedding. GPU/ANE og iOS validering forblir separat.
Cacheen inkluderer hurtig- og lydposisjoner. SpeechDecoder har en egen standardgrense på 125 rammer (10 sekunder); en større CodeDecoder cache forstørrer den ikke.
Konverteringskilde og valideringsguide
speech qwen3-tts-coreml "Hello world" \
--model aufklarer/Qwen3-TTS-1.7B-CoreML \
--speaker-embedding speaker-17b.npy --output hello-17b.wav
CLI bruk
Opprett tale fra tekst:
.build/release/speech speak "Hello, world!" --output hello.wav
Alternativer
| Flag | Beskrivelse |
|---|---|
--engine | TTS motor: qwen3 (MLX, standard), coreml (CoreML/GPU), eller cosyvoice |
--output, -o | Utgang WAV filsti |
--language | Språk (standard: engelsk). Om å bruke høyttalerens innfødte dialekt. |
--model | Modellvariant: base eller customVoice |
--speaker | Høyttaler (krever --model customVoice) |
--temperature | Prøvetemperatur (standard: 0.3) |
--top-k | Top-k prøvetaking parameter |
--max-tokens | Maksimalt antall polletter som skal genereres (standard: 500) |
--stream | Aktivere streaming - sender ut lydbiter under generasjon |
--first-chunk-frames | Antall rammer i den første streamede delen |
--chunk-frames | Antall rammer per påfølgende streamed bit |
--batch-file | Sti til en tekstfil med én uttalelse per linje for batchsyntese |
--batch-size | Antall parallelle uttalelser i batchmodus |
Eksempler
# Basic synthesis
.build/release/speech speak "The quick brown fox." -o fox.wav
# Streaming output
.build/release/speech speak "Long passage of text..." --stream -o stream.wav
# Batch synthesis from file
.build/release/speech speak --batch-file sentences.txt --batch-size 4 -o output_dir/
Streaming
--stream flagget gjør det mulig å dele lydutgang i løpet av generasjonen. I stedet for å vente på at hele uttalelsen skal fullføres, blir lyden sendt i biter som polletter produsert. Bruk --first-chunk-frames og --chunk-frames for å kontrollere størrelsen på hver bit.
Batchmodus
For å syntetisere flere uttalelser, bruk --batch-file med en tekstfil som inneholder én linje per uttalelse. --batch-size flagget kontrollerer hvor mange uttalelser som behandles parallellt.
Ytelse
På en M2 Max, Qwen3-TTS oppnår en RTF (realtime factor) på ca. 0,55, noe som betyr at det genererer tale raskere enn sanntid. Med compile() oppvarming, tar hvert trinn ca. 37 ms.
Standardmaksimum er 500 polletter som produserer omtrent 40 sekunders lyd ved 12,5 Hz. Setting av høyere verdier risikoer som overstiger Metal GPU watchdog timeout, noe som kan forårsake et system omstart på Apple Silicon siden GPU er delt med kompositoren.
Språk
Qwen3-TTS støtter flerspråklig tekst-til-speech syntese. Modellen registrerer automatisk inngangsspråket og genererer tale tilsvarende.
Swift API
import Qwen3TTS
import AudioCommon
let model = try await Qwen3TTSModel.fromPretrained()
let audio = model.synthesize(text: "Hello, world!", language: "english")
try WAVWriter.write(samples: audio, sampleRate: 24000, to: URL(filePath: "hello.wav"))
Lokale pakker
Bruk fromLocal når appen din eier modelloppkjøp og lagring. Send hovedenheten TTS modell og tale-tokenizer kataloger separat. Oppkallet løser aldri en cache eller kontakter nettverket, og leser hovedbuntens config.json før deling MLX moduler.
let model = try Qwen3TTSModel.fromLocal(
modelDirectory: ttsDirectory,
tokenizerDirectory: speechTokenizerDirectory
)
fromLocal standard til .none, så det endrer ikke prosessen-vidt Metal wired-hukommelsesgrense. fromPretrained holder sin .pin(fraction: 0.9) standard. Begge forhåndsutdannede lasere aksepterer en egen tokenizerCacheDir.
Diagnostikere
Qwen3-TTS sender modell-lasting og inferensdiagnosikk til AudioLog.modelLoading og AudioLog.inference i stedet for stderr eller stderr. Taller, former og timinger forblir synlige; caller-levert språk og høyttalerverdier er private, og inngangstekst er aldri logget.
Voxtral TTS
Voxtral 4B TTS 2603 kjører lokalt på Apple Silicon gjennom Voxtral TTS-modulen: 20 forhåndsinnstilte stemmer, ni språk og 24 kHz mono tale.
speech speak "Hello, welcome to Voxtral." --engine voxtral --voxtral-voice casual_male --stream --voxtral-chunk-frames 3 -o hello.wav
speech speak --engine voxtral --list-speakers
speech speak "Bonjour." --engine voxtral --voxtral-voice fr_female --voxtral-max-frames 500 --voxtral-seed 0 -o bonjour.wavBare forhåndsinnstillinger; referanse-audio kloning er utilgjengelig. Lydutgangsstrømmer gjennom SDK, CLI, WebSocket og HTTP PCM. Gi den komplette inngangsteksten opp foran. Modellvekter bruker CC BY-NC 4.0.