Log in to leave a comment
No posts yet
تجعلك فواتير ElevenLabs أو OpenAI TTS التي تُدفع شهريًا تتنهد بعمق. بالنسبة لمطور ألعاب مستقل، تُعد تكلفة استدعاء واجهة برمجة التطبيقات (API) نفقات ثابتة تخنق المشروع. إن Kokoro 82M هو نموذج مفتوح المصدر بترخيص Apache 2.0، يستخرج أصواتًا بمستوى تجاري في بيئة محلية. من خلال وضع هذا النموذج الخفيف المكون من 82 مليون معلمة (parameters) على جهاز الكمبيوتر الخاص بك، لم تعد بحاجة إلى الارتهان لتغيرات سياسات الخادم الخارجي.
أكبر قلق عند تشغيل النماذج المحلية هو ظاهرة تقطع إطارات اللعبة. لمنع حمل المعالج الناتج عن توليف الصوت، يجب التحكم قسريًا في خيوط العمليات (threads). يتبع Kokoro 82M بنية StyleTTS 2، لذا فهو يعمل بكفاءة قصوى عند تشغيله باستخدام ONNX Runtime.
SessionOptions الخاصة بـ ONNX، قم بتقييد intra_op_num_threads إلى أقل من نصف إجمالي النوى. إذا كان لديك معالج بـ 8 نوى، فإن تخصيص 2 إلى 4 منها كافٍ تمامًا.enable_cpu_mem_arena لمنع تجزئة الذاكرة. هذا يساعد في القضاء على التأخيرات البسيطة (micro-lags) التي تحدث أثناء توليد الصوت في الخلفية.asyncio لإرسال أول كتلة بيانات تخرج فورًا إلى جهاز الصوت.من خلال هذه الإعدادات، يمكنك تقليل الوقت المستغرق لظهور أول صوت (TTFA) إلى أقل من 0.5 ثانية.
مهما كان نموذج Kokoro 82M رائعًا، فإن قراءته لـ "API" كـ "أبي" أو فشله في معالجة "10%" بشكل صحيح يكسر الاندماج. نظرًا لأن هذا النموذج تم تدريبه بناءً على الأبجدية الصوتية الدولية (IPA)، فإن عملية تسوية النص المدخل (Normalization) أمر ضروري.
بدلاً من إدخال النص ببساطة، قم بإنشاء قاموس خرائط للتعبيرات النمطية (Regex). يجب تحويل r'\bAPI\b' إلى "에이피아이" (اي بي اي)، والأرقام يجب أن تُمرر مفصلة باللغة الكورية حسب السياق مثل "한 개" (قطعة واحدة) أو "일 퍼센트" (واحد بالمائة). خاصة وأن قوانين الوصل الصوتي الفريدة في اللغة الكورية يمكن حلها باستخدام مكتبات مساعدة مثل korean-text-normalizer. يمكنك توفير 5 ساعات أسبوعيًا من الوقت الذي كنت تقضيه في تحرير الملفات الصوتية يدويًا.
لست بحاجة إلى إعادة كتابة كل كود OpenAI SDK الذي كنت تستخدمه. من خلال إنشاء خادم خفيف باستخدام FastAPI على المضيف المحلي (localhost)، يمكنك استبدال واجهة برمجة التطبيقات المدفوعة بمجرد تعديل سطر واحد لعنوان نقطة النهاية (Endpoint).
/v1/audio/speech وصممه لاستقبال بيانات JSON بمعايير OpenAI.INT8 بحجم 92.4 ميجابايت. سرعة الاستنتاج فيه أسرع بـ 3 مرات من النموذج العادي، بينما الفرق في جودة الصوت التي تسمعها الأذن ضئيل جدًا.pydub وإعادتها فورًا بصيغة .mp3 أو .wav.بهذه الطريقة، يمكنك الحفاظ على قاعدة الكود التي كانت تعتمد على الخدمات المدفوعة مع إزالة رسوم الاشتراك الشهرية تمامًا.
النماذج الخفيفة لها حدود عند معالجة الجمل الطويلة التي تزيد عن 500 حرف دفعة واحدة، حيث قد يتشابك النطق في النهاية أو تختلط أصوات ميكانيكية. لحل هذه المشكلة، يجب تقسيم الجمل بذكاء.
قم بتقسيم الجمل بناءً على النقاط والفواصل، ثم استخدم AudioSegment.silent لإدراج صمت يتراوح بين 200 إلى 500 ميلي ثانية قسريًا بين الجمل. مجرد محاكاة دورة التنفس البشري يجعل غرابة النموذج تختفي. السر لا يكمن فقط في تقسيم النص، بل في منطق التشغيل السلس (Seamless) الذي يربط قطع الصوت بشكل طبيعي. أتمتة هذه العملية تتيح تمثيلاً طبيعيًا حتى في الحوارات الطويلة دون انقطاع.