Qwen3-TTS
Qwen3-TTS उच्च-गुणवत्ता वाले टेक्स्ट-टू-स्पीच सिंथेसिस के लिए Mimi decoder के साथ 12Hz कोडेक भाषा मॉडल है। मॉडल 4-bit क्वांटाइज़्ड है और Apple Silicon पर रियल-टाइम से तेज़ चलता है।
पाइपलाइन
स्पीच सिंथेसिस तीन-चरण पाइपलाइन का पालन करता है:
- Talker — 28-लेयर transformer जो इनपुट टेक्स्ट को 12.5 Hz पर पहले codebook टोकन में बदलता है
- Code Predictor — 5-लेयर transformer जो पहले codebook hidden states से शेष 15 codebooks की भविष्यवाणी करता है
- Mimi Codec Decoder — सभी 16 codebook टोकन को 24 kHz ऑडियो वेवफ़ॉर्म में बदलता है
आर्किटेक्चर
Talker
Talker मुख्य ऑटोरिग्रेसिव मॉडल है जो टेक्स्ट इनपुट से कोडेक टोकन जेनरेट करता है।
| पैरामीटर | मान |
|---|---|
| लेयर | 28 |
| Hidden dimension | 1024 |
| Query heads | 16 |
| Key/Value heads | 8 (GQA) |
| MLP | SwiGLU |
| Position encoding | RoPE |
Code Predictor
एक हल्का 5-लेयर transformer जो पहले codebook से hidden states लेता है और शेष 15 codebooks की समानांतर भविष्यवाणी करता है। यह प्रति चरण पूरे Talker को 16 बार चलाने से बचाता है।
Mimi Codec Decoder
Mimi decoder क्वांटाइज़्ड कोडेक टोकन को वापस ऑडियो में बदलता है:
- RVQ decode (16 codebooks)
- Pre-convolution (512 से 1024 चैनल)
- Pre-transformer (1024 से 512 bottleneck, 8 लेयर, SwiGLU + LayerScale)
- Upsample (2x, 2x)
- SEANet decoder (8x, 5x, 4x, 3x upsample चरण)
- 24 kHz वेवफ़ॉर्म आउटपुट
मॉडल वेरिएंट
| मॉडल | आकार | 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 बैकएंड
CoreML बैकएंड पूरी Qwen3-TTS पाइपलाइन को Core ML के माध्यम से GPU पर चलाता है, MLX निर्भरताओं के बिना iOS और macOS पर डिप्लॉयमेंट सक्षम करता है। मॉडल को Apple के कंप्यूट स्टैक के लिए अनुकूलित 6 विशेष उप-मॉडलों में विभाजित किया गया है:
- TextProjector — टेक्स्ट टोकन एम्बेडिंग को साझा hidden space में प्रोजेक्ट करता है
- CodeEmbedder — पहले-codebook टोकन और कंट्रोल टोकन को एम्बेड करता है
- MultiCodeEmbedder — codebooks 1–15 से टोकन एम्बेड करता है
- CodeDecoder — stateless KV cache (अधिकतम 256 positions) के साथ 28-लेयर ऑटोरिग्रेसिव transformer
- MultiCodeDecoder — codebooks 1–15 के लिए 5-लेयर code predictor
- SpeechDecoder — Mimi कोडेक decoder, 16 codebook टोकन को 24 kHz ऑडियो में बदलता है
# CoreML सिंथेसिस
.build/release/audio speak "Hello, world!" --engine coreml -o hello.wav
# CoreML डिफ़ॉल्ट रूप से temperature 0.8 का उपयोग करता है (गुणवत्ता आउटपुट के लिए आवश्यक)
.build/release/audio speak "Long text here." --engine coreml --temperature 0.9 -o out.wav
CoreML CodeDecoder एक निश्चित 256-position KV cache का उपयोग करता है। लंबे अनुच्छेदों को व्यक्तिगत वाक्यों में विभाजित किया जाना चाहिए। Decode टोकन स्वचालित रूप से prefill के बाद शेष cache स्लॉट में फ़िट होने के लिए सीमित किए जाते हैं।
CLI उपयोग
टेक्स्ट से स्पीच जेनरेट करें:
.build/release/audio speak "Hello, world!" --output hello.wav
विकल्प
| फ़्लैग | विवरण |
|---|---|
--engine | TTS इंजन: qwen3 (MLX, डिफ़ॉल्ट), coreml (CoreML/GPU), या cosyvoice |
--output, -o | आउटपुट WAV फ़ाइल पथ |
--language | भाषा (डिफ़ॉल्ट: english)। स्पीकर की मूल बोली का उपयोग करने के लिए छोड़ें। |
--model | मॉडल वेरिएंट: base या customVoice |
--speaker | स्पीकर वॉयस (--model customVoice आवश्यक) |
--temperature | सैंपलिंग temperature (डिफ़ॉल्ट: 0.3) |
--top-k | Top-k सैंपलिंग पैरामीटर |
--max-tokens | जेनरेट करने के लिए टोकन की अधिकतम संख्या (डिफ़ॉल्ट: 500) |
--stream | स्ट्रीमिंग सक्षम करें — जेनरेशन के दौरान ऑडियो चंक्स एमिट करता है |
--first-chunk-frames | पहले स्ट्रीम किए गए चंक में फ़्रेम की संख्या |
--chunk-frames | प्रत्येक बाद के स्ट्रीम किए गए चंक में फ़्रेम की संख्या |
--batch-file | बैच सिंथेसिस के लिए प्रति पंक्ति एक उच्चारण वाली टेक्स्ट फ़ाइल का पथ |
--batch-size | बैच मोड में समानांतर उच्चारणों की संख्या |
उदाहरण
# बेसिक सिंथेसिस
.build/release/audio speak "The quick brown fox." -o fox.wav
# स्ट्रीमिंग आउटपुट
.build/release/audio speak "Long passage of text..." --stream -o stream.wav
# फ़ाइल से बैच सिंथेसिस
.build/release/audio speak --batch-file sentences.txt --batch-size 4 -o output_dir/
स्ट्रीमिंग
--stream फ़्लैग जेनरेशन के दौरान चंक्ड ऑडियो आउटपुट सक्षम करता है। पूरे उच्चारण के पूरा होने का इंतज़ार करने के बजाय, टोकन उत्पन्न होते ही ऑडियो चंक्स में एमिट किया जाता है। प्रत्येक चंक के आकार को नियंत्रित करने के लिए --first-chunk-frames और --chunk-frames का उपयोग करें।
बैच मोड
कई उच्चारणों को सिंथेसाइज़ करने के लिए, प्रति उच्चारण एक पंक्ति वाली टेक्स्ट फ़ाइल के साथ --batch-file का उपयोग करें। --batch-size फ़्लैग नियंत्रित करता है कि कितने उच्चारण समानांतर में प्रोसेस किए जाते हैं।
प्रदर्शन
M2 Max पर, Qwen3-TTS लगभग 0.55 का RTF (रियल-टाइम फ़ैक्टर) प्राप्त करता है, जिसका अर्थ है कि यह रियल-टाइम से तेज़ स्पीच जेनरेट करता है। compile() वार्मअप के साथ, प्रत्येक चरण में लगभग 37 ms लगता है।
डिफ़ॉल्ट अधिकतम 500 टोकन है, जो 12.5 Hz पर लगभग 40 सेकंड का ऑडियो उत्पन्न करता है। उच्च मान सेट करने से Metal GPU watchdog timeout से अधिक होने का जोखिम है, जो Apple Silicon पर सिस्टम रिबूट का कारण बन सकता है क्योंकि GPU कम्पोज़िटर के साथ साझा है।
भाषाएँ
Qwen3-TTS बहुभाषी टेक्स्ट-टू-स्पीच सिंथेसिस का समर्थन करता है। मॉडल स्वचालित रूप से इनपुट भाषा का पता लगाता है और तदनुसार स्पीच जेनरेट करता है।
Swift API
import Qwen3TTS
let model = try await Qwen3TTSModel.loadFromHub()
let audio = try await model.speak("Hello, world!")
try audio.write(to: "hello.wav")