Qwen3-TTS

Qwen3-TTS نموذج لغوي يعتمد على كوديك 12Hz مع مفكّك Mimi لتركيب كلام عالي الجودة من النص. النموذج مكمَّم بـ 4-bit ويعمل أسرع من الزمن الحقيقي على Apple Silicon.

خط المعالجة

يتبع تركيب الكلام خط معالجة من ثلاث مراحل:

  1. Talker — محوّل بـ 28 طبقة يحوّل نص الإدخال إلى رموز codebook الأول بمعدّل 12.5 Hz
  2. Code Predictor — محوّل بـ 5 طبقات يتنبّأ بالـ 15 codebook المتبقية انطلاقًا من الحالات المخفية للـ codebook الأول
  3. مفكّك كوديك Mimi — يحوّل رموز الـ 16 codebook إلى موجة صوتية بمعدّل 24 kHz

البنية

Talker

Talker هو النموذج الانحداري الذاتي الأساسي الذي يولّد رموز الكوديك من نص الإدخال.

المعاملالقيمة
الطبقات28
البعد المخفي1024
رؤوس الاستعلام16
رؤوس المفتاح/القيمة8 (GQA)
MLPSwiGLU
الترميز الموضعيRoPE

Code Predictor

محوّل خفيف بـ 5 طبقات يأخذ الحالات المخفية من الـ codebook الأول ويتنبّأ بالـ 15 codebook المتبقية بالتوازي. هذا يتجنّب تشغيل Talker الكامل 16 مرة لكل خطوة.

مفكّك كوديك Mimi

يحوّل مفكّك Mimi رموز الكوديك المكمَّمة مجدّدًا إلى صوت:

  1. فكّ ترميز RVQ (16 codebook)
  2. التفاف مسبق (512 إلى 1024 قناة)
  3. محوّل مسبق (عنق زجاجة من 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

الواجهة الخلفية CoreML

تشغّل الواجهة الخلفية CoreML خط معالجة Qwen3-TTS بأكمله على وحدة GPU عبر Core ML، ما يتيح النشر على iOS وmacOS دون اعتماديات MLX. يُقسَّم النموذج إلى 6 نماذج فرعية متخصّصة محسَّنة لمكدّس حوسبة Apple:

  1. TextProjector — يُسقط تضمينات رموز النص إلى الفضاء المخفي المشترك
  2. CodeEmbedder — يُضمّن رموز الـ codebook الأول ورموز التحكّم
  3. MultiCodeEmbedder — يُضمّن رموز الـ codebooks من 1 إلى 15
  4. CodeDecoder — محوّل انحداري ذاتي بـ 28 طبقة بذاكرة KV مؤقّتة عديمة الحالة (بحدّ أقصى 256 موقعًا)
  5. MultiCodeDecoder — مُتنبّئ كود بـ 5 طبقات للـ codebooks من 1 إلى 15
  6. SpeechDecoder — مفكّك كوديك Mimi، يحوّل رموز الـ 16 codebook إلى صوت بمعدّل 24 kHz
# تركيب CoreML
.build/release/speech speak "Hello, world!" --engine coreml -o hello.wav

# CoreML يستخدم درجة حرارة 0.8 افتراضيًا (مطلوبة للحصول على جودة عالية)
.build/release/speech speak "Long text here." --engine coreml --temperature 0.9 -o out.wav
حد ذاكرة KV في CoreML

يستخدم CodeDecoder في CoreML ذاكرة KV ثابتة بحجم 256 موقعًا. يجب تقسيم الفقرات الأطول إلى جمل منفردة. تُحدّ رموز فكّ الترميز تلقائيًا لتتسع داخل خانات الذاكرة المتبقّية بعد prefill.

استخدام CLI

توليد كلام من النص:

.build/release/speech 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درجة حرارة العيّنة (افتراضي: 0.3)
--top-kمعامل عيّنة top-k
--max-tokensالحدّ الأقصى لعدد الرموز المولَّدة (افتراضي: 500)
--streamتفعيل البثّ — يُصدر مقاطع صوتية أثناء التوليد
--first-chunk-framesعدد الإطارات في أوّل مقطع مُبثّ
--chunk-framesعدد الإطارات في كل مقطع لاحق مُبثّ
--batch-fileمسار ملف نصّي يحتوي على ملفوظ واحد لكل سطر للتركيب بالدفعات
--batch-sizeعدد الملفوظات المعالَجة بالتوازي في وضع batch

أمثلة

# تركيب أساسي
.build/release/speech speak "The quick brown fox." -o fox.wav

# إخراج بالبثّ
.build/release/speech speak "Long passage of text..." --stream -o stream.wav

# تركيب بالدفعات من ملف
.build/release/speech speak --batch-file sentences.txt --batch-size 4 -o output_dir/

البثّ

تتيح الراية --stream إخراج الصوت في مقاطع أثناء التوليد. بدلًا من انتظار اكتمال الملفوظ بأكمله، يُصدَر الصوت في مقاطع مع توليد الرموز. استخدم --first-chunk-frames و--chunk-frames للتحكّم بحجم كل مقطع.

وضع batch

لتركيب عدّة ملفوظات، استخدم --batch-file مع ملف نصّي يحتوي على سطر واحد لكل ملفوظ. تتحكّم الراية --batch-size بعدد الملفوظات المعالَجة بالتوازي.

الأداء

على M2 Max، يحقّق Qwen3-TTS RTF (عامل الزمن الحقيقي) يقارب 0.55، أي أنه يولّد الكلام أسرع من الزمن الحقيقي. مع warmup الخاصّ بـ compile()، تستغرق كل خطوة نحو 37 ms.

حد الأمان

الحدّ الأقصى الافتراضي هو 500 رمز، ما يُنتج نحو 40 ثانية من الصوت بمعدّل 12.5 Hz. وضع قيم أعلى يُخاطر بتجاوز مهلة watchdog لوحدة Metal GPU، ما قد يتسبّب بإعادة تشغيل النظام على Apple Silicon لأن GPU يتشاركها مع compositor.

اللغات

يدعم Qwen3-TTS تركيب كلام متعدّد اللغات من النص. يكتشف النموذج لغة الإدخال تلقائيًا ويولّد الكلام تبعًا لذلك.

واجهة Swift

import Qwen3TTS

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