Maskinöversättning · Engelskt original
Qwen3-TTS
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).
Voxtral TTS förinställda nedladdningar
Voxtral TTS laddar ner modellvikterna, tokenizer, config och alla 20 förinställda röstfiler vid första användningen. Offline loading kräver den fullständiga cachade bunten, inklusive varje fil i voice_embedding/.
Qwen3-TTS är en 12Hz codec språkmodell med en Mimi Decoder för högkvalitativ text-till-tal syntes. Standard MLX Vägen använder nu 1.7B Base bf16 bunt; 8-bit buntar finns tillgängliga för mindre nedladdningar. int4 avvecklades för TTS Kvalitet.
VoxCPM2 vs Qwen3-TTS Full 5-språkig röstkloningsjämförelse och metodologi.
Pipeline
Talsyntesen följer en trestegs pipeline:
- Talker - 28-lagers transformator som omvandlar inmatningstext till första kodbokstokens vid 12,5 Hz
- Code Predictor - 5-lagers transformator som förutspår de återstående 15 kodböckerna från de första kodbok dolda staterna
- Mimi Codec Decoder - Konverterar alla 16 kodbokstokens till en 24 kHz ljudvågform
Arkitektur
Talker
Talker är den centrala autoregressiva modellen som genererar codec-tokens från textinmatning.
| Parameter | Värde |
|---|---|
| Layers | 28 |
| Dold dimension | 1024 |
| Query Heads | 16 |
| Nyckel/Value Heads | 8 (GQA) |
| MLP | SwiGLU |
| Position kodning | Rope |
Kodpredictor
En lätt 5-skiktstransformator som tar de dolda staterna från den första kodboken och förutspår de återstående 15 kodböckerna autoregressivt. För single-item syntesen körs den fasta 15-gruppsloopen som en sammanställd graf.
Mimi Codec Decoder
Mimi decoder konverterar kvantiserade codec-tokens tillbaka till ljud:
- RVQ decode (16 kodböcker)
- Pre-convolution (512 till 1024 kanaler)
- Pre-transformator (1024 till 512 flaskhals, 8 lager, SwiGLU + LayerScale)
- Upsample (2x, 2x)
- SEANet decoder (8x, 5x, 4x, 3x uppsamla steg)
- 24 kHz vågform output
Modellvarianter
| Modell | Storlek | HuggingFace |
|---|---|---|
| Qwen3-TTS-0.6B Bas (8-bit) | 1.3 GB | aufklarer/Qwen3-TTS-12Hz-0.6B-Base-MLX-8bit |
| Qwen3-TTS-1.7B Bas (8-bit) | 2.4 GB | aufklarer/Qwen3-TTS-12Hz-1.7B-Base-MLX-8bit |
| Qwen3-TTS-1.7B Bas (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 Backend
CoreML kör sex sammanställda komponenter. Beräkningsplacering beror på det valda buntet.
- TextProjector — Projekt texttoken inbäddningar till det delade dolda utrymmet
- CodeEmbedder - Inbäddar första koden-tokens och kontrolltokens
- MultiCodeEmbedder - Embeds tokens from codebooks 1–15
- CodeDecoder - 28-lagers autoregressiv transformator med statslös KV-cache (max 256 positioner)
- MultiCodeDecoder — 5-lagers kodsprediktor för kodböcker 1–15
- SpeechDecoder -- Mimi codec decoder, konverterar 16 kodbokstokens till 24 kHz ljud
# 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: De CoreML CodeDecoder använder en fast 256-position KV cache. Längre passager bör delas in i enskilda meningar. Decode tokens är automatiskt capped för att passa in i återstående cache slots efter prefill.
Experimentell 1.7B CoreML export
Avkodaren använder FP32 beräkning eftersom FP16 misslyckad kontrollpunkt validering; cache tensors förblir FP16.
Den sex-komponent konverter stöder 1.7B Base och en 1024-position statlig CodeDecoder. Talaren och högtalaren inbäddning har 2048 kanaler; 1024-kanalskodsprediktorn innehåller sin utbildade ingångsprojektion.
Swift stöd 0.6B/256 och 1.7B/1024 buntar; 0.6B förblir standarden. experimentell 1.7B bunt standarder för CPU och kräver en förberedd 2048Kanal Float32 .npy högtalare inbäddning via --speaker-embeddingGPU/ANE och iOS validering förblir separat.
Cache inkluderar snabb och ljudpositioner. SpeechDecoder har en separat standardgräns på 125 ramar (10 sekunder); en större CodeDecoder cache förstorar inte den.
Konverteringskälla och valideringsguide
speech qwen3-tts-coreml "Hello world" \
--model aufklarer/Qwen3-TTS-1.7B-CoreML \
--speaker-embedding speaker-17b.npy --output hello-17b.wav
CLI Användning
Generera tal från text:
.build/release/speech speak "Hello, world!" --output hello.wav
Alternativ
| Flaggan | Beskrivning |
|---|---|
--engine | TTS motor: qwen3 (MLX, standard), coreml (CoreML/GPU), eller cosyvoice |
--output, -o | Utgång WAV filväg |
--language | Språk (standard: engelska) Omit för att använda talarens inhemska dialekt. |
--model | Modell variant: base eller customVoice |
--speaker | Högtalarröst (kräver --model customVoice) |
--temperature | Provtagningstemperatur (standard: 0,3) |
--top-k | Top-k sampling parameter |
--max-tokens | Maximalt antal tokens att generera (standard: 500) |
--stream | Möjlig streaming - avger ljudbitar under generation |
--first-chunk-frames | Antal ramar i den första strömmade biten |
--chunk-frames | Antal ramar per efterföljande strömmande chunk |
--batch-file | Vägen till en textfil med ett yttrande per rad för batch syntes |
--batch-size | Antal parallella uttalanden i batchläge |
Exempel
# 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
Den --stream flaggan möjliggör chunked ljudutgång under generationen. Istället för att vänta på hela yttrandet att slutföra, ljudet släpps i bitar som tokens produceras. Använd --first-chunk-frames och --chunk-frames för att styra storleken på varje chunk.
Batch Mode
För att syntetisera flera yttranden, använd --batch-file med en textfil som innehåller en rad per yttrande. --batch-size flaggan kontrollerar hur många uttalanden som behandlas parallellt.
Prestanda
På en M2 Max, Qwen3-TTS uppnår en RTF (realtidsfaktor) på cirka 0,55, vilket betyder att den genererar tal snabbare än realtid. Med compile() uppvärmning tar varje steg cirka 37 ms.
Standard maximum är 500 tokens, som producerar ungefär 40 sekunder av ljud vid 12,5 Hz. Ställa högre värden risker överstiger Metal GPU watchdog timeout, vilket kan orsaka ett system omstart på Apple Silicon eftersom GPU delas med kompositorn.
Språk
Qwen3-TTS stöder flerspråkig text-till-talsyntes. Modellen upptäcker automatiskt ingångsspråket och genererar tal därefter.
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"))
Lokal-bara buntar
Använd fromLocal när din app äger modellförvärv och lagring. Passera de viktigaste TTS modell och tal-tokenizer kataloger separat. Samtalet löser aldrig en cache eller kontaktar nätverket, och läser huvudpaketets config.json innan fördelningen av MLX moduler.
let model = try Qwen3TTSModel.fromLocal(
modelDirectory: ttsDirectory,
tokenizerDirectory: speechTokenizerDirectory
)
fromLocal standarder till .none, så det ändrar inte process-wide Metal trådbunden minnesgräns. fromPretrained håller sin .pin(fraction: 0.9) standard. Båda pretrained lastare accepterar en separat tokenizerCacheDir
Diagnostik
Qwen3-TTS skickar modellbelastning och inferensdiagnostik till AudioLog.modelLoading och AudioLog.inference istället för stdout eller stderr. Räknar, former och tidpunkter är fortfarande synliga; kallare-förutsatta språk och högtalarvärden är privata, och inmatningstexten är aldrig inloggad.
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.
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.wavFö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.