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:

  1. Talker — giriş metnini 12,5 Hz hızında ilk codebook token'larına dönüştüren 28 katmanlı transformer
  2. Code Predictor — ilk codebook gizli durumlarından kalan 15 codebook'u tahmin eden 5 katmanlı transformer
  3. 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.

ParametreDeğer
Katman sayısı28
Gizli boyut1024
Query başlıkları16
Key/Value başlıkları8 (GQA)
MLPSwiGLU
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:

  1. RVQ kod çözme (16 codebook)
  2. Pre-convolution (512'den 1024 kanala)
  3. Pre-transformer (1024'ten 512 bottleneck'e, 8 katman, SwiGLU + LayerScale)
  4. Upsample (2x, 2x)
  5. SEANet kod çözücü (8x, 5x, 4x, 3x upsample aşamaları)
  6. 24 kHz dalga formu çıkışı

Model varyantları

ModelBoyutHuggingFace
Qwen3-TTS-0.6B Base (4-bit)1.7 GBaufklarer/Qwen3-TTS-12Hz-0.6B-Base-MLX-4bit
Qwen3-TTS-0.6B Base (8-bit)2.4 GBaufklarer/Qwen3-TTS-12Hz-0.6B-Base-MLX-8bit
Qwen3-TTS-0.6B CustomVoice (4-bit)1.7 GBaufklarer/Qwen3-TTS-12Hz-0.6B-CustomVoice-MLX-4bit
Qwen3-TTS-1.7B Base (4-bit)3.2 GBaufklarer/Qwen3-TTS-12Hz-1.7B-Base-MLX-4bit
Qwen3-TTS-1.7B Base (8-bit)4.8 GBaufklarer/Qwen3-TTS-12Hz-1.7B-Base-MLX-8bit
Qwen3-TTS CoreML (FP16)2.1 GBaufklarer/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:

  1. TextProjector — Metin token embedding'lerini ortak gizli uzaya projekte eder
  2. CodeEmbedder — İlk codebook token'larını ve kontrol token'larını embed eder
  3. MultiCodeEmbedder — 1–15 numaralı codebook'lardan token'ları embed eder
  4. CodeDecoder — Durumsuz KV cache (maks. 256 pozisyon) ile 28 katmanlı otoregresif transformer
  5. MultiCodeDecoder — 1–15 numaralı codebook'lar için 5 katmanlı code predictor
  6. 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 KV cache sınırı

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

FlagAçıklama
--engineTTS motoru: qwen3 (MLX, varsayılan), coreml (CoreML/GPU) veya cosyvoice
--output, -oÇıkış WAV dosyası yolu
--languageDil (varsayılan: english). Konuşmacının ana lehçesini kullanmak için boş bırakın.
--modelModel varyantı: base veya customVoice
--speakerKonuşmacı sesi (--model customVoice gerekir)
--temperatureÖrnekleme sıcaklığı (varsayılan: 0.3)
--top-kTop-k örnekleme parametresi
--max-tokensÜretilecek maksimum token sayısı (varsayılan: 500)
--streamStreaming'i etkinleştirir — üretim sırasında ses parçaları yayınlar
--first-chunk-framesStreaming ile gönderilen ilk parçadaki frame sayısı
--chunk-framesSonraki streaming parçalarındaki frame sayısı
--batch-fileToplu sentez için her satırda bir ifade içeren metin dosyasının yolu
--batch-sizeToplu 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.

Güvenlik sınırı

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