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

Swift och CLI-användning

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

Swift användning och buntkrav

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:

  1. Talker - 28-lagers transformator som omvandlar inmatningstext till första kodbokstokens vid 12,5 Hz
  2. Code Predictor - 5-lagers transformator som förutspår de återstående 15 kodböckerna från de första kodbok dolda staterna
  3. 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.

ParameterVärde
Layers28
Dold dimension1024
Query Heads16
Nyckel/Value Heads8 (GQA)
MLPSwiGLU
Position kodningRope

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:

  1. RVQ decode (16 kodböcker)
  2. Pre-convolution (512 till 1024 kanaler)
  3. Pre-transformator (1024 till 512 flaskhals, 8 lager, SwiGLU + LayerScale)
  4. Upsample (2x, 2x)
  5. SEANet decoder (8x, 5x, 4x, 3x uppsamla steg)
  6. 24 kHz vågform output

Modellvarianter

ModellStorlekHuggingFace
Qwen3-TTS-0.6B Bas (8-bit)1.3 GBaufklarer/Qwen3-TTS-12Hz-0.6B-Base-MLX-8bit
Qwen3-TTS-1.7B Bas (8-bit)2.4 GBaufklarer/Qwen3-TTS-12Hz-1.7B-Base-MLX-8bit
Qwen3-TTS-1.7B Bas (bf16, standard)3,9 GBaufklarer/Qwen3-TTS-12Hz-1.7B-Base-MLX-bf16
Qwen3-TTS-0.6B CustomVoice (bf16)1.8 GBaufklarer/Qwen3-TTS-12Hz-0.6B-CustomVoice-MLX-bf16
Qwen3-TTS CoreML (FP16)2.1 GBaufklarer/Qwen3-TTS-CoreML

CoreML Backend

CoreML kör sex sammanställda komponenter. Beräkningsplacering beror på det valda buntet.

  1. TextProjector — Projekt texttoken inbäddningar till det delade dolda utrymmet
  2. CodeEmbedder - Inbäddar första koden-tokens och kontrolltokens
  3. MultiCodeEmbedder - Embeds tokens from codebooks 1–15
  4. CodeDecoder - 28-lagers autoregressiv transformator med statslös KV-cache (max 256 positioner)
  5. MultiCodeDecoder — 5-lagers kodsprediktor för kodböcker 1–15
  6. 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
CoreML KV Cache Limit

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

FlagganBeskrivning
--engineTTS motor: qwen3 (MLX, standard), coreml (CoreML/GPU), eller cosyvoice
--output, -oUtgång WAV filväg
--languageSpråk (standard: engelska) Omit för att använda talarens inhemska dialekt.
--modelModell variant: base eller customVoice
--speakerHögtalarröst (kräver --model customVoice)
--temperatureProvtagningstemperatur (standard: 0,3)
--top-kTop-k sampling parameter
--max-tokensMaximalt antal tokens att generera (standard: 500)
--streamMöjlig streaming - avger ljudbitar under generation
--first-chunk-framesAntal ramar i den första strömmade biten
--chunk-framesAntal ramar per efterföljande strömmande chunk
--batch-fileVägen till en textfil med ett yttrande per rad för batch syntes
--batch-sizeAntal 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.

Säkerhetsgräns

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

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

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