Qwen3-TTS
Qwen3-TTS, yüksek kaliteli metinden konuşmaya sentezi için Mimi kod çözücüye sahip 12 Hz codec dil modelidir. Model 4-bit kuantize edilmiştir ve Apple Silicon üzerinde gerçek zamandan daha hızlı çalışır.
Pipeline
Konuşma sentezi üç aşamalı bir pipeline izler:
- Talker — giriş metnini 12,5 Hz hızında ilk codebook token'larına dönüştüren 28 katmanlı transformer
- Code Predictor — ilk codebook gizli durumlarından kalan 15 codebook'u tahmin eden 5 katmanlı transformer
- Mimi codec kod çözücü — 16 codebook token'ının tamamını 24 kHz ses dalga formuna dönüştürür
Mimari
Talker
Talker, metin girişinden codec token üreten temel otoregresif modeldir.
| Parametre | Değer |
|---|---|
| Katman sayısı | 28 |
| Gizli boyut | 1024 |
| Query başlıkları | 16 |
| Key/Value başlıkları | 8 (GQA) |
| MLP | SwiGLU |
| Konum kodlaması | RoPE |
Code Predictor
İlk codebook'tan gizli durumları alan ve kalan 15 codebook'u paralel olarak tahmin eden hafif, 5 katmanlı bir transformer. Bu sayede tam Talker'ı her adımda 16 kez çalıştırmaktan kaçınılır.
Mimi codec kod çözücü
Mimi kod çözücü, kuantize edilmiş codec token'larını tekrar sese dönüştürür:
- RVQ kod çözme (16 codebook)
- Pre-convolution (512'den 1024 kanala)
- Pre-transformer (1024'ten 512 bottleneck'e, 8 katman, SwiGLU + LayerScale)
- Upsample (2x, 2x)
- SEANet kod çözücü (8x, 5x, 4x, 3x upsample aşamaları)
- 24 kHz dalga formu çıkışı
Model varyantları
| Model | Boyut | HuggingFace |
|---|---|---|
| Qwen3-TTS-0.6B Base (4-bit) | 1.7 GB | aufklarer/Qwen3-TTS-12Hz-0.6B-Base-MLX-4bit |
| Qwen3-TTS-0.6B Base (8-bit) | 2.4 GB | aufklarer/Qwen3-TTS-12Hz-0.6B-Base-MLX-8bit |
| Qwen3-TTS-0.6B CustomVoice (4-bit) | 1.7 GB | aufklarer/Qwen3-TTS-12Hz-0.6B-CustomVoice-MLX-4bit |
| Qwen3-TTS-1.7B Base (4-bit) | 3.2 GB | aufklarer/Qwen3-TTS-12Hz-1.7B-Base-MLX-4bit |
| Qwen3-TTS-1.7B Base (8-bit) | 4.8 GB | aufklarer/Qwen3-TTS-12Hz-1.7B-Base-MLX-8bit |
| Qwen3-TTS CoreML (FP16) | 2.1 GB | aufklarer/Qwen3-TTS-CoreML |
CoreML arka ucu
CoreML arka ucu, Qwen3-TTS pipeline'ının tamamını Core ML üzerinden GPU'da çalıştırır ve MLX bağımlılıkları olmadan iOS ile macOS dağıtımını mümkün kılar. Model, Apple’ın hesaplama yığınına göre optimize edilmiş 6 özel alt modele bölünmüştür:
- TextProjector — Metin token embedding'lerini ortak gizli uzaya projekte eder
- CodeEmbedder — İlk codebook token'larını ve kontrol token'larını embed eder
- MultiCodeEmbedder — 1–15 numaralı codebook'lardan token'ları embed eder
- CodeDecoder — Durumsuz KV cache (maks. 256 pozisyon) ile 28 katmanlı otoregresif transformer
- MultiCodeDecoder — 1–15 numaralı codebook'lar için 5 katmanlı code predictor
- SpeechDecoder — Mimi codec kod çözücü, 16 codebook token'ını 24 kHz sese dönüştürür
# CoreML sentezi
.build/release/speech speak "Hello, world!" --engine coreml -o hello.wav
# CoreML varsayılan olarak temperature 0.8 kullanır (kaliteli çıkış için gereklidir)
.build/release/speech speak "Long text here." --engine coreml --temperature 0.9 -o out.wav
CoreML CodeDecoder sabit 256 pozisyonluk bir KV cache kullanır. Daha uzun pasajların ayrı cümlelere bölünmesi gerekir. Kod çözme token'ları, prefill sonrasında kalan cache yuvalarına sığacak şekilde otomatik olarak sınırlandırılır.
CLI kullanımı
Metinden konuşma üretin:
.build/release/speech speak "Hello, world!" --output hello.wav
Seçenekler
| Flag | Açıklama |
|---|---|
--engine | TTS motoru: qwen3 (MLX, varsayılan), coreml (CoreML/GPU) veya cosyvoice |
--output, -o | Çıkış WAV dosyası yolu |
--language | Dil (varsayılan: english). Konuşmacının ana lehçesini kullanmak için boş bırakın. |
--model | Model varyantı: base veya customVoice |
--speaker | Konuşmacı sesi (--model customVoice gerekir) |
--temperature | Örnekleme sıcaklığı (varsayılan: 0.3) |
--top-k | Top-k örnekleme parametresi |
--max-tokens | Üretilecek maksimum token sayısı (varsayılan: 500) |
--stream | Streaming'i etkinleştirir — üretim sırasında ses parçaları yayınlar |
--first-chunk-frames | Streaming ile gönderilen ilk parçadaki frame sayısı |
--chunk-frames | Sonraki streaming parçalarındaki frame sayısı |
--batch-file | Toplu sentez için her satırda bir ifade içeren metin dosyasının yolu |
--batch-size | Toplu modda paralel işlenen ifade sayısı |
Örnekler
# Temel sentez
.build/release/speech speak "The quick brown fox." -o fox.wav
# Streaming çıkış
.build/release/speech speak "Long passage of text..." --stream -o stream.wav
# Dosyadan toplu sentez
.build/release/speech speak --batch-file sentences.txt --batch-size 4 -o output_dir/
Streaming
--stream flag'i, üretim sırasında parçalı ses çıkışını etkinleştirir. Tüm ifadenin tamamlanmasını beklemek yerine, token üretildikçe ses parçalar halinde yayınlanır. Her parçanın boyutunu kontrol etmek için --first-chunk-frames ve --chunk-frames kullanın.
Toplu mod
Birden fazla ifadeyi sentezlemek için her satırda bir ifade içeren bir metin dosyasıyla --batch-file kullanın. --batch-size flag'i kaç ifadenin paralel olarak işleneceğini kontrol eder.
Performans
M2 Max üzerinde Qwen3-TTS yaklaşık 0,55 RTF (gerçek zaman faktörü) elde eder; bu da konuşmayı gerçek zamandan daha hızlı ürettiği anlamına gelir. compile() ısınmasıyla her adım yaklaşık 37 ms sürer.
Varsayılan üst sınır 500 token'dır; bu da 12,5 Hz'de yaklaşık 40 saniye sese karşılık gelir. Daha yüksek değerler Metal GPU watchdog zaman aşımını aşma riski taşır ve Apple Silicon üzerinde GPU compositor ile paylaşıldığı için sistem yeniden başlatılmasına yol açabilir.
Diller
Qwen3-TTS çok dilli metinden konuşma sentezini destekler. Model giriş dilini otomatik olarak algılar ve buna göre konuşma üretir.
Swift API
import Qwen3TTS
let model = try await Qwen3TTSModel.loadFromHub()
let audio = try await model.speak("Hello, world!")
try audio.write(to: "hello.wav")