Kokoro TTS

Kokoro-82M نموذج خفيف وغير انحداري لتحويل النص إلى كلام، مبني على StyleTTS 2 مع مفكّك صوتي ISTFTNet. يعمل بالكامل على Neural Engine عبر CoreML، وينتج كلاماً طبيعياً بمعدل 24 kHz من دخل نصي في تمريرة أمامية واحدة.

جاهز لـ iOS

صُمّم Kokoro-82M للنشر على الجهاز في iOS. وبحجم 82M معامل (~80 MB مع 1 bucket وINT8)، فإنه يندرج بمرونة على iPhone وiPad. يعمل CoreML على Neural Engine، تاركاً GPU متاحاً لمهام أخرى.

اللغات المدعومة

اللغةالرمزأمثلة على الأصوات
الإنجليزية (الولايات المتحدة)enaf_heart, am_adam, af_sky
الإنجليزية (المملكة المتحدة)enbf_emma, bm_george
الإسبانيةesef_dora
الفرنسيةfrff_siwis
الهنديةhihf_alpha, hm_omega
الإيطاليةitif_sara
اليابانيةjajf_alpha, jm_omega
البرتغاليةptpf_dora
الصينيةzhzf_xiaobei, zm_yunjian
الكوريةkokf_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

سلال الفونيمات (نموذج المدّة)

يستخدم نموذج المدّة أشكال دخل مُعدّدة. تُحشى المدخلات إلى أصغر سلّة تتّسع لها:

السلّةأقصى عدد فونيماتحالة الاستخدام
p1616عبارات قصيرة
p3232جمل قصيرة
p6464جمل متوسّطة
p128128جمل طويلة

سلال المفكّك

نماذج مفكّك بشكل ثابت لأطوال صوت قصوى مختلفة (كل إطار = 600 عيّنة بمعدل 24 kHz):

السلّةأقصى عدد إطاراتأقصى مدّة صوت
decoder_5s2005.0s
decoder_10s40010.0s
decoder_15s60015.0s

يتطلّب iOS 18+ / macOS 15+.

مُفَوْنِم النص

يُحوَّل النص إلى رموز فونيمات عبر خط أنابيب ثلاثي المستويات — كله بترخيص Apache-2.0 ودون أي اعتماديات GPL:

  1. بحث في قاموس — قواميس نطق للإنجليزية الأمريكية والبريطانية مع دعم الهيتيرونيم (المفردات المتعدّدة النطق)
  2. تجذير اللواحق — تفكيك صرفي للّواحق المعروفة (مثل "-ing" و"-tion")
  3. BART G2P — نسخة احتياطية عصبية لتحويل الحرف إلى فونيم باستخدام نموذج CoreML منفصل من نوع مُرمِّز-مفكِّك للكلمات خارج المفردات

أوزان النموذج

المكوّنالحجمالصيغة
نموذج المدّة~39 MB.mlmodelc
نموذج التنغيم~17 MB.mlmodelc
نماذج المفكّك (3 سلال)~107 MB لكل واحد.mlmodelc
تضمينات الأصوات (54 صوتاً)~0.3 MBJSON (Float32 بـ 256 بُعداً)
مُرمِّز + مفكِّك G2P~1.5 MB.mlmodelc
قواميس + مفردات~6 MBJSON
الإجمالي (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>النص المراد تركيبه
--voiceaf_heartاسم نمط الصوت المعرّف مسبقاً
--languageenرمز اللغة: en، es، fr، hi، it، ja، pt، zh، ko، de
--output, -okokoro_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)

الترخيص