
الفارسي TTS هو محرك تصنيع من النص إلى النص والتطبيق الذي قمت بتطويره في البداية كمشروع التخرج من درجة البكالوريوس.
ومع ذلك ، يهدف المشروع إلى الحصول على تحسينات تدريجية بمرور الوقت.


![]()
![]()
![]()
يتم تشغيل تطبيقات TTS الفارسية بواسطة React Native ، لذا ستحتاج إليها لتجميع التطبيقات بشكل صحيح. لتجميع إصدار Android ، فإن وجود SDK مناسبة على جهاز Android على جهازك أمر لا بد منه ، ومن الواضح أنه يحتاج إلى متغير iOS للحصول على نسخة Xcode تعمل وأداة إدارة تبعية Cocoapods الوظيفية على جهاز تعمل بنظام التشغيل MacOS.
ستحتاج أيضًا إلى أداة إدارة التبعية للوصول إلى NPM وتنزيل تبعيات Project. يتم استخدام الغزل في هذا المشروع ولكن يمكن أيضًا استخدام NPM أو أدوات أخرى.
أولاً ، يمكنك الحصول على الرمز المصدر عن طريق استنساخه
git clone [email protected]:amfolio/persian-tts.git cd ios
pod install ثم انتقل إلى دليل الحزمة وقم بتثبيت تبعياته باستخدام yarn install أو npm install
لإطلاق تطبيقات في محاكيات أنظمة التشغيل Android و/أو iOS ، يمكنك استخدام الأوامر التالية:
react-native run-androidreact-native run-iosبنية هذا المشروع مطابق للعديد من هياكل المشروع الإبلاغ الأخرى. فيما يلي مجرد صورة كبيرة للهيكل الرئيسي:
بعد فترة وجيزة ، يستخدم المشروع "توليفًا متسلسلًا" لتحقيق هدفه. في اللغة الفارسية ، يمكن بناء مجموعة غير محدودة من الكلمات عن طريق تسليط أزواج "Contonant+حرف علة". للشجاعة هنا نسمي هذه الأزواج ببساطة "المقاطع".
لجعل العمل التجليدي ، يحتوي المشروع في البداية على مجموعة من 169 صوتًا مقطعًا ، تم إعادة ترميزه من صوتي (لذلك ليس سردًا مهنيًا؟). هذا الرقم مُحرّم على النحو المرفق:
| نوع الصوت | عدد الملفات المقابلة |
|---|---|
| حروف العلة | 6 |
| الحروف الساكنة الصامتة | 23 |
| مقطع لفظي (متحرك+حرف علة) | 138 |
| المساحات | 2 |
| المجموع | 169 |
يتم بعد ذلك أن تكون عملية التوليف قابلة للتخلي عن المقاطع المقطوعة باستخدام مكتبة FFMPEG وغلاف FFMPEG للتفاعل. هنا مخطط سريع لما يحدث.
في الخطوة الأولى ، يتم إنشاء الصوتية المقابلة للإدخال الفارسي باستخدام وظيفة الأداة المساعدة TextTePhonems.
const input = "سلام" ; // means "Hello" in persian
const output = textToPhonems ( input ) ; // ["sa", "lā", "m"];تمر نتيجة الخطوة 1 من خلال وظيفة الأداة المساعدة phonemstoffmpeg وتحصل على أمر concatnation ffmpeg صالح:
const ffmpeg = phonemsToFFMpeg ( output ) ;وستكون النتيجة:
ffmpeg
-I sa.wav -I lā.wav -I m.wav
-filter_complex ‘[0:0][1:0][2:0]concat=n=3:v=0:a=1[out]’
-map ‘[out]’ output.wavيقوم التطبيق باستدعاء FFMPEG باستخدام React-Native-FFMPEG والخطوات التالية يتم القيام به وراء الكواليس:
| قبل التسلس | ||
![]() | ![]() | ![]() |
| SA.WAV | Lā.Wav | M.Wav |
| بعد التسلس | ||
![]() | ||
| الإخراج | ||
يتم تشغيل ملف الصوت الإخراج على كل من منصات iOS و Android بفضل مكتبة React-Native-Sound. من الممكن أيضًا قراءة موارد الحزمة ونقلها إلى موقع Sandbox/SD-Card بفضل React-Native-Fs
الشكر الخاص يذهبون إلى مدير مشروعي ، الدكتور محمد تحيري الذي أعطاني ثقة في الاقتراب من هذا الموضوع وقادني من خلال أفضل الخطوات لجعله ممكنًا. بدونه ، ربما لم أكن لأدخل في مثل هذه الأبحاث الأكاديمية.
الشكر الكبير التالي يذهب إلى مجتمع المطورين الذين يشاركون بسخاء التكنولوجيا المتطورة مع الآخرين. بفضل هذا المجتمع فقط أن إعادة اختراع العجلات لم يعد ضروريًا.
فيما يلي قائمة قصيرة من المكتبات التي ساعدتني بلا حدود في مسار التطوير الخاص بي:
يتم بناء هذا المستودع في البداية كجهد أدنى لحل نص إلى اللغة الفارسية مفتوحة المصدر. سأكون ممتنًا للغاية لأي مساهمة من القضايا التي تقارن عن الإبلاغ عن عمليات التحسينات والتحسينات.
المساهمة عن طريق إضافة المزيد من الأصوات إلى المشروع موضع ترحيب للغاية ويمكنك أيضًا ذكر اسمك في Voices.json.
لا تتردد في إرسال طلبات السحب في حالة الشعور بأي ضرورة.