Qwen3-TTS

Qwen3-TTS เป็นโมเดลภาษา codec 12Hz พร้อมตัวถอดรหัส Mimi สำหรับการสังเคราะห์เสียงพูดคุณภาพสูงจากข้อความ โมเดลถูก quantize เป็น 4-bit และทำงานได้เร็วกว่าเวลาจริงบน Apple Silicon

Pipeline

การสังเคราะห์เสียงพูดดำเนินตาม pipeline สามขั้นตอน:

  1. Talker — transformer 28 ชั้นที่แปลงข้อความอินพุตเป็นโทเค็น codebook แรกที่ความถี่ 12.5 Hz
  2. Code Predictor — transformer 5 ชั้นที่ทำนาย codebook อีก 15 ตัวที่เหลือจาก hidden state ของ codebook แรก
  3. ตัวถอดรหัส codec Mimi — แปลงโทเค็น codebook ทั้ง 16 ตัวเป็นรูปคลื่นเสียง 24 kHz

สถาปัตยกรรม

Talker

Talker คือโมเดล autoregressive หลักที่สร้างโทเค็น codec จากข้อความอินพุต

พารามิเตอร์ค่า
จำนวนชั้น28
มิติ hidden1024
หัว query16
หัว key/value8 (GQA)
MLPSwiGLU
การเข้ารหัสตำแหน่งRoPE

Code Predictor

transformer ขนาดเบา 5 ชั้นที่รับ hidden state จาก codebook แรกและทำนาย codebook อีก 15 ตัวที่เหลือแบบขนาน วิธีนี้ช่วยหลีกเลี่ยงการรัน Talker เต็มรูปแบบ 16 ครั้งต่อขั้นตอน

ตัวถอดรหัส codec Mimi

ตัวถอดรหัส Mimi แปลงโทเค็น codec ที่ quantize แล้วกลับเป็นเสียง:

  1. ถอดรหัส RVQ (16 codebook)
  2. Pre-convolution (512 ถึง 1024 ช่อง)
  3. Pre-transformer (bottleneck จาก 1024 เหลือ 512, 8 ชั้น, SwiGLU + LayerScale)
  4. Upsample (2x, 2x)
  5. ตัวถอดรหัส SEANet (ขั้น upsample 8x, 5x, 4x, 3x)
  6. เอาต์พุตรูปคลื่น 24 kHz

รุ่นของโมเดล

โมเดลขนาดHuggingFace
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

Backend CoreML

Backend CoreML รัน pipeline Qwen3-TTS ทั้งหมดบน GPU ผ่าน Core ML ทำให้สามารถ deploy บน iOS และ macOS โดยไม่ต้องพึ่ง MLX โมเดลถูกแบ่งเป็น 6 submodel เฉพาะทางที่ปรับให้เหมาะกับสแต็กการประมวลผลของ Apple:

  1. TextProjector — ฉาย embedding ของโทเค็นข้อความไปยังพื้นที่ hidden ที่ใช้ร่วมกัน
  2. CodeEmbedder — ทำ embedding โทเค็น codebook แรกและโทเค็นควบคุม
  3. MultiCodeEmbedder — ทำ embedding โทเค็นจาก codebook 1–15
  4. CodeDecoder — transformer autoregressive 28 ชั้นพร้อม KV cache แบบไร้สถานะ (สูงสุด 256 ตำแหน่ง)
  5. MultiCodeDecoder — code predictor 5 ชั้นสำหรับ codebook 1–15
  6. SpeechDecoder — ตัวถอดรหัส codec Mimi แปลงโทเค็น codebook 16 ตัวเป็นเสียง 24 kHz
# การสังเคราะห์ด้วย CoreML
.build/release/speech speak "Hello, world!" --engine coreml -o hello.wav

# CoreML ใช้ temperature 0.8 เป็นค่าเริ่มต้น (จำเป็นเพื่อคุณภาพเอาต์พุต)
.build/release/speech speak "Long text here." --engine coreml --temperature 0.9 -o out.wav
ขีดจำกัด KV cache ของ CoreML

CodeDecoder ของ CoreML ใช้ KV cache คงที่ 256 ตำแหน่ง ข้อความที่ยาวกว่านี้ควรถูกแบ่งเป็นประโยคย่อย โทเค็นที่ถอดรหัสจะถูกจำกัดอัตโนมัติให้พอดีกับสล็อต cache ที่เหลือหลังจาก prefill

การใช้งาน CLI

สร้างเสียงพูดจากข้อความ:

.build/release/speech speak "Hello, world!" --output hello.wav

ตัวเลือก

Flagคำอธิบาย
--engineEngine TTS: qwen3 (MLX, ค่าเริ่มต้น), coreml (CoreML/GPU) หรือ cosyvoice
--output, -oเส้นทางไฟล์ WAV เอาต์พุต
--languageภาษา (ค่าเริ่มต้น: english) ละไว้เพื่อใช้สำเนียงพื้นเมืองของผู้พูด
--modelรุ่นของโมเดล: base หรือ customVoice
--speakerเสียงของผู้พูด (ต้องใช้ --model customVoice)
--temperatureอุณหภูมิในการสุ่ม (ค่าเริ่มต้น: 0.3)
--top-kพารามิเตอร์การสุ่มแบบ top-k
--max-tokensจำนวนโทเค็นสูงสุดที่จะสร้าง (ค่าเริ่มต้น: 500)
--streamเปิดใช้งาน streaming — ส่งชิ้นเสียงระหว่างการสร้าง
--first-chunk-framesจำนวน frame ในชิ้น streaming แรก
--chunk-framesจำนวน frame ต่อชิ้น streaming ถัดไป
--batch-fileเส้นทางไปยังไฟล์ข้อความที่มีหนึ่งประโยคต่อบรรทัดสำหรับการสังเคราะห์แบบ batch
--batch-sizeจำนวนประโยคที่ประมวลผลขนานในโหมด batch

ตัวอย่าง

# การสังเคราะห์พื้นฐาน
.build/release/speech speak "The quick brown fox." -o fox.wav

# เอาต์พุต streaming
.build/release/speech speak "Long passage of text..." --stream -o stream.wav

# การสังเคราะห์แบบ batch จากไฟล์
.build/release/speech speak --batch-file sentences.txt --batch-size 4 -o output_dir/

Streaming

Flag --stream เปิดใช้งานเอาต์พุตเสียงแบบเป็นชิ้นระหว่างการสร้าง แทนที่จะรอให้ประโยคทั้งหมดเสร็จสิ้น เสียงจะถูกส่งออกเป็นชิ้นๆ ขณะที่โทเค็นถูกสร้างขึ้น ใช้ --first-chunk-frames และ --chunk-frames เพื่อควบคุมขนาดของแต่ละชิ้น

โหมด batch

สำหรับการสังเคราะห์หลายประโยค ให้ใช้ --batch-file กับไฟล์ข้อความที่มีหนึ่งประโยคต่อบรรทัด Flag --batch-size ควบคุมจำนวนประโยคที่ประมวลผลขนาน

ประสิทธิภาพ

บน M2 Max, Qwen3-TTS ทำ RTF (real-time factor) ได้ประมาณ 0.55 หมายความว่าสร้างเสียงพูดได้เร็วกว่าเวลาจริง ด้วย warmup ผ่าน compile() แต่ละขั้นใช้เวลาประมาณ 37 ms

ขีดจำกัดความปลอดภัย

ค่าสูงสุดเริ่มต้นคือ 500 โทเค็น ซึ่งผลิตเสียงประมาณ 40 วินาทีที่ 12.5 Hz การตั้งค่าที่สูงกว่านี้เสี่ยงต่อการเกิน timeout watchdog ของ Metal GPU ซึ่งอาจทำให้ระบบรีบูตบน Apple Silicon เนื่องจาก GPU ถูกใช้ร่วมกับ compositor

ภาษา

Qwen3-TTS รองรับการสังเคราะห์เสียงพูดหลายภาษา โมเดลจะตรวจจับภาษาของอินพุตโดยอัตโนมัติและสร้างเสียงพูดที่เหมาะสม

API Swift

import Qwen3TTS

let model = try await Qwen3TTSModel.loadFromHub()
let audio = try await model.speak("Hello, world!")
try audio.write(to: "hello.wav")