Kokoro TTS
Kokoro-82M نموذج خفيف وغير انحداري لتحويل النص إلى كلام، مبني على StyleTTS 2 مع مفكّك صوتي ISTFTNet. يعمل بالكامل على Neural Engine عبر CoreML، وينتج كلاماً طبيعياً بمعدل 24 kHz من دخل نصي في تمريرة أمامية واحدة.
صُمّم Kokoro-82M للنشر على الجهاز في iOS. وبحجم 82M معامل (~80 MB مع 1 bucket وINT8)، فإنه يندرج بمرونة على iPhone وiPad. يعمل CoreML على Neural Engine، تاركاً GPU متاحاً لمهام أخرى.
اللغات المدعومة
| اللغة | الرمز | أمثلة على الأصوات |
|---|---|---|
| الإنجليزية (الولايات المتحدة) | en | af_heart, am_adam, af_sky |
| الإنجليزية (المملكة المتحدة) | en | bf_emma, bm_george |
| الإسبانية | es | ef_dora |
| الفرنسية | fr | ff_siwis |
| الهندية | hi | hf_alpha, hm_omega |
| الإيطالية | it | if_sara |
| اليابانية | ja | jf_alpha, jm_omega |
| البرتغالية | pt | pf_dora |
| الصينية | zh | zf_xiaobei, zm_yunjian |
| الكورية | ko | kf_somi |
50 صوتاً جاهزاً بالمجمل. اصطلاح تسمية الأصوات: [language_prefix][gender]_[name] — مثلاً af_heart = أنثى أمريكية "Heart"، وif_sara = أنثى إيطالية "Sara".
مرجع رموز الأصوات
يتبع كل معرّف صوت في Kokoro النمط نفسه: بادئة لغة من حرف واحد، ثم رمز جنس من حرف واحد، ثم شرطة سفلية واسم الصوت. استخدم الجدول التالي لربط اللغة المطلوبة بالبادئة الصحيحة.
جدول بادئات اللغات
| البادئة | اللغة | الموقع | الجنس |
|---|---|---|---|
a | الإنجليزية | أمريكية (en-US) | af_, am_ |
b | الإنجليزية | بريطانية (en-GB) | bf_, bm_ |
e | الإسبانية | (es) | ef_, em_ |
f | الفرنسية | (fr-FR) | ff_ |
h | الهندية | (hi) | hf_, hm_ |
i | الإيطالية | (it) | if_, im_ |
j | اليابانية | (ja) | jf_, jm_ |
k | الكورية | (ko) | kf_ |
p | البرتغالية | برازيلية (pt-BR) | pf_, pm_ |
z | الصينية | الماندرين (zh) | zf_, zm_ |
جميع الأصوات حسب اللغة
الإنجليزية — الأمريكية (af_*, am_*)
أنثى: af_alloy, af_aoede, af_bella, af_heart (افتراضي), af_jessica, af_kore, af_nicole, af_nova, af_river, af_sarah, af_sky
ذكر: am_adam, am_echo, am_eric, am_fenrir, am_liam, am_michael, am_onyx, am_puck, am_santa
الإنجليزية — البريطانية (bf_*, bm_*)
أنثى: bf_alice, bf_emma, bf_isabella, bf_lily
ذكر: bm_daniel, bm_fable, bm_george, bm_lewis
الإسبانية (ef_*, em_*)
أنثى: ef_dora
ذكر: em_alex, em_santa
الفرنسية (ff_*)
أنثى: ff_siwis
الهندية (hf_*, hm_*)
أنثى: hf_alpha, hf_beta
ذكر: hm_omega, hm_psi
الإيطالية (if_*, im_*)
أنثى: if_sara
ذكر: im_nicola
اليابانية (jf_*, jm_*)
أنثى: jf_alpha, jf_gongitsune, jf_nezumi, jf_tebukuro
ذكر: jm_kumo
الكورية (kf_*)
أنثى: kf_somi
البرتغالية — البرازيلية (pf_*, pm_*)
أنثى: pf_dora
ذكر: pm_alex, pm_santa
الصينية — الماندرين (zf_*, zm_*)
أنثى: zf_xiaobei, zf_xiaoni, zf_xiaoxiao, zf_xiaoyi
ذكر: zm_yunjian, zm_yunxi, zm_yunxia, zm_yunyang
شغّل speech kokoro --list-voices لطباعة كل صوت مُضمَّن حالياً مع النموذج. معرّفات الأصوات مستقرّة عبر الإصدارات — استخدم السلسلة بحرفيتها (مثل if_sara) عند استدعاء --voice من سطر الأوامر أو تمرير voice: إلى واجهة Swift.
البنية
يستخدم Kokoro خط أنابيب CoreML من 3 مراحل. لا توجد حلقة عيّنات (sampling loop) — جميع المراحل تمريرات أمامية غير انحدارية، مع خطوة محاذاة في Swift بين المرحلتين 1 و2.
خط أنابيب من 3 مراحل
| المرحلة | النموذج | الدخل | الخرج |
|---|---|---|---|
| 1. المدّة | duration.mlmodelc | رموز الفونيمات + تضمين الصوت + السرعة | المدّات وميزات التنغيم وترميز النص |
| — | محاذاة في Swift | المدّات + ميزات المرحلة 1 | ميزات تنغيم ونص مُحاذاة |
| 2. التنغيم | prosody.mlmodelc | ميزات تنغيم مُحاذاة + النمط | توقّعات F0 (الطبقة الصوتية) + الضوضاء |
| 3. المفكّك | decoder_*.mlmodelc | نص مُحاذى + F0 + ضوضاء + نمط | موجة صوتية بمعدل 24 kHz |
سلال الفونيمات (نموذج المدّة)
يستخدم نموذج المدّة أشكال دخل مُعدّدة. تُحشى المدخلات إلى أصغر سلّة تتّسع لها:
| السلّة | أقصى عدد فونيمات | حالة الاستخدام |
|---|---|---|
| p16 | 16 | عبارات قصيرة |
| p32 | 32 | جمل قصيرة |
| p64 | 64 | جمل متوسّطة |
| p128 | 128 | جمل طويلة |
سلال المفكّك
نماذج مفكّك بشكل ثابت لأطوال صوت قصوى مختلفة (كل إطار = 600 عيّنة بمعدل 24 kHz):
| السلّة | أقصى عدد إطارات | أقصى مدّة صوت |
|---|---|---|
decoder_5s | 200 | 5.0s |
decoder_10s | 400 | 10.0s |
decoder_15s | 600 | 15.0s |
يتطلّب iOS 18+ / macOS 15+.
مُفَوْنِم النص
يُحوَّل النص إلى رموز فونيمات عبر خط أنابيب ثلاثي المستويات — كله بترخيص Apache-2.0 ودون أي اعتماديات GPL:
- بحث في قاموس — قواميس نطق للإنجليزية الأمريكية والبريطانية مع دعم الهيتيرونيم (المفردات المتعدّدة النطق)
- تجذير اللواحق — تفكيك صرفي للّواحق المعروفة (مثل "-ing" و"-tion")
- BART G2P — نسخة احتياطية عصبية لتحويل الحرف إلى فونيم باستخدام نموذج CoreML منفصل من نوع مُرمِّز-مفكِّك للكلمات خارج المفردات
أوزان النموذج
| المكوّن | الحجم | الصيغة |
|---|---|---|
| نموذج المدّة | ~39 MB | .mlmodelc |
| نموذج التنغيم | ~17 MB | .mlmodelc |
| نماذج المفكّك (3 سلال) | ~107 MB لكل واحد | .mlmodelc |
| تضمينات الأصوات (54 صوتاً) | ~0.3 MB | JSON (Float32 بـ 256 بُعداً) |
| مُرمِّز + مفكِّك G2P | ~1.5 MB | .mlmodelc |
| قواميس + مفردات | ~6 MB | JSON |
| الإجمالي (1 مفكّك) | ~170 MB |
الأداء
| المقياس | القيمة |
|---|---|
| المعاملات | 82M |
| خلفية الاستنتاج | CoreML (Neural Engine) |
| RTFx للاستنتاج | ~0.7 (أسرع من الزمن الحقيقي) |
| معدل أخذ عيّنات الخرج | 24 kHz |
| ذاكرة الأوزان | ~170 MB (سلّة مفكّك واحدة) |
على خلاف Qwen3-TTS وCosyVoice3 اللذين يولّدان الرموز خطوة بخطوة، يستخدم Kokoro خط أنابيب من 3 مراحل دون حلقة عيّنات. جميع المراحل تمريرات أمامية حتمية.
استخدام سطر الأوامر
speech kokoro "Hello, world!" --voice af_heart --output hello.wav
الخيارات
| الخيار | الافتراضي | الوصف |
|---|---|---|
<text> | النص المراد تركيبه | |
--voice | af_heart | اسم نمط الصوت المعرّف مسبقاً |
--language | en | رمز اللغة: en، es، fr، hi، it، ja، pt، zh، ko، de |
--output, -o | kokoro_output.wav | مسار ملف WAV للخرج |
--list-voices | سرد جميع الأصوات المتاحة ثم الخروج | |
--model, -m | معرّف النموذج في HuggingFace |
أمثلة
# English with default voice
speech kokoro "Hello, how are you today?" --output hello.wav
# French
speech kokoro "Bonjour le monde" --voice ff_siwis --language fr --output bonjour.wav
# Japanese
speech kokoro "こんにちは世界" --voice jf_alpha --language ja --output konnichiwa.wav
# List all 50 voices
speech kokoro --list-voices
واجهة Swift
import KokoroTTS
import AudioCommon
let tts = try await KokoroTTSModel.fromPretrained()
// Downloads ~170 MB on first run
let audio = try tts.synthesize(text: "Hello world", voice: "af_heart")
// audio: [Float] — 24 kHz mono PCM
try WAVWriter.write(samples: audio, sampleRate: 24000, to: outputURL)
تجاوز وحدة الحوسبة
تختار fromPretrained(computeUnits:) العتاد الذي يشغّل نموذج CoreML الأساسي. القيمة الافتراضية (.all) تتيح لـ Core ML تفضيل Neural Engine، وهو المسار الأسرع على كل جهاز مدعوم. مرّر .cpuAndGPU لتجاوز ANE كحلّ احتياطي على المنصّات التي يُنتج فيها مُصرِّف ANE خرجاً غير صحيح لهذا النموذج.
import CoreML
import KokoroTTS
// Default: ANE preferred
let tts = try await KokoroTTSModel.fromPretrained()
// Fallback: bypass the Neural Engine
let tts = try await KokoroTTSModel.fromPretrained(computeUnits: .cpuAndGPU)
متى تستخدم Kokoro
| حالة الاستخدام | نموذج TTS الموصى به |
|---|---|
| تطبيق iOS خفيف وموفّر للبطارية | Kokoro (CoreML، 82M معامل، ~170 MB) |
| أعلى جودة، بثّ، استنساخ صوت | Qwen3-TTS (MLX، 600M معامل، ~1.7 GB) |
| بثّ متعدّد اللغات، 9 لغات | CosyVoice3 (MLX، 500M معامل، ~1.2 GB) |
| حوار منطوق ثنائي الاتجاه بالكامل | PersonaPlex (MLX، 7B معامل، ~5.5 GB) |
الترخيص
- أوزان النموذج: Apache-2.0 (hexgrad/Kokoro-82M)
- التحويل إلى CoreML: Apache-2.0 (aufklarer/Kokoro-82M-CoreML)
- القواميس وG2P: Apache-2.0