لاحظت أن الكثير من مطوري تطبيقات التلاوات الصوتية والتحفيظ يحتاجون إلى ميزة لم أجدها موجودة في أي برنامج جاهز أو مكتبة، وهي إمكانية تحديد الطوابع الزمنية للتلاوات عند وقفات القارئ، بحيث يخبرك البرنامج بالأماكن التي توقف فيها القارئ لأخذ نفس ثم متابعة القراءة.
فمثلًا عندما كنت أطور تطبيقًا للحفظ يعمل بطريقة التكرار الدائري المتقاطع وفرت خيارًا للحافظ بحيث يمكنه أن يقطع مقاطع الحفظ حسب الآية أو حسب علامات الوقف، وهذا أدى إلى مشاكل في بعض الأحيان، لأن القارئ قد لا يتوقف عند علامة الوقف فيظهر كما لو أن الصوت قد قطع قسرًا.
كيف يساعد وقف في مثل هذه الحالة؟
يأخذ وقف الملف الصوتي الخاص بالتلاوة ويحدد الأماكن التي توقف عندها القارئ ويعرض كل قسم تلاه في نفس واحد ضمن قسم واحد، وذلك سواء كان آية كاملة أو جزءًا من آية أو حتى آيتين معًا.
استخدام برنامج وقف
لاستخدام أو تجريب البرنامج نختار أولًا الرواية، ثم نشغل خادم جوجل كولاب (GPU) من خلال الأكواد التي تظهر عند النقر على زر أكواد التشغيل (Colab) بالطريقة نفسها تمامًا المشروحة في هذا الموضوع الذي يشرح ميقات. وبعد ذلك نضع رابط خادم جوجل كولاب في حقل رابط خادم كولاب،

ثم نختار السورة ونضبط إعدادات اكتشاف الوقف على الشكل التالي. وللتجريب السريع يمكن ترك جميع الخيارات كما هي لأنها مضبوطة بأفضل شكل تلقائيًا، (فقط قد تحتاج لتعديل خيار حساسية الصوت).
محرك الصمت
يمكن استخدام مكتبة Librosa المتخصصة بتحليل الإشارات الصوتية لمعرفة أماكن الوقف، أو يمكن استخدام نموذج Silero VAD الذي يكشف النشاط الصوتي البشري بالذكاء الاصطناعي، والمفاجأة هنا أنه بحسب تجربتي مكتبة Librosa أفضل بكثير، فإذا كان أحد يعرف السبب، فأرجو مشاركته لأنني مهتم بمعرفة ذلك.

طريقة اكتشاف الوقف
يمكن اكتشاف الوقف إما باستخدام محرك الصمت المختار في الإعداد السابق أو بالاعتماد على المسافات الزمنية بين التوقيتات الزمنية للكلمات المتعرف عليها بحسب مكتبة WhisperX أو بالاعتماد على كلتا الطريقتين معًا. وبحسب تجربتي محرك الصمت (Librosa) أفضل بكثير من WhisperX.

مصدر توقيتات ويسبر
هذا الخيار يعمل عند اختيار طريقة WhisperX حيث يحدد فيما إذا كان سيتم اختيار التوقيتات الزمنية الأصلية التي يرجعها WhisperX أم التوقيتات بعد أن تم عمل تعديلات برمجية عليها، مثل تطويل نهايات الآيات وما إلى ذلك.

صمت ويسبر وصمت المكتبة
يحدد هذان الخياران مقدار الفجوة الزمنية الدنيا لكي يتم اعتبار وجود وقف أم لا، واستخدام 0.15 لصمت المكتبة هو الأنسب حسب تجربتي.

حساسية الصمت
هذا هو الخيار الأكثر أهمية وبحسب تغييره تتغير الدقة، وللأسف لم أجد نسبة أفضل من أخرى بشكل دائم، فلبعض الملفات الصوتية أعطت النسبة 15% دقة ممتازة، بينما لبعضها الآخر كانت سيئة جدًا.

وقد حاولت جعل البرنامج يحدد النسبة الأفضل عند اختيار الملف الصوتي، لكن النسبة التي يحددها البرنامج ليست بالضرورة هي الأفضل دائمًا فقد تحتاج للتجريب حولها، مثلًا إذا كانت النسبة التلقائية هي 25% تجربها أولًا وإذا لم تنجح تجرب أقل بـ 5 وأكثر بـ 5 ثم تجرب أقل بـ 10 وأكثر بـ 10 وهكذا.
الملاحظة المهمة هنا أنه عند تجريب نسبة معينة إذا كانت النتيجة تظهر وقفات في أماكن لم يتوقف فيها القارئ فعليًا فيجب إنقاص النسبة، وإذا كانت النتيجة تظهر في بعض الأماكن أن القارئ وصل لكنه توقف فعليًا فيجب زيادتها.
كيفية عمل البرنامج
يستخدم البرنامج مكتبة WhisperX للتعرف على الكلمات ومزامنتها بطريقة مطابقة لما يفعله برنامج ميقات، ثم يستخدم محرك الصمت (المكتبة البرمجية Librosa أو الذكاء الاصطناعي Silero VAD) لتحديد توقيتات الصمت ثم يقطع التلاوات بصريًا بناء على هذه التوقيتات.
روابط البرنامج ودعوة للمساهمة
يمكن تجريب البرنامج من خلال الرابط التالي:
https://alinice1998.github.io/waqf_frontend/
ويمكن المساهمة في التطوير من خلال الرابط التالي للواجهة الأمامية:
https://github.com/alinice1998/waqf_frontend
ومن خلال الرابط التالي للواجهة الخلفية:
https://github.com/alinice1998/waqf_backend
علمًا أن المشروع مفتوح المصدر بالكامل.
وختامًا، ما رأيكم بدقة البرنامج وهل تقترحون أي تعديلات أو مكتبات يمكنها أن تعطي نتائج أفضل، وهل لديكم تجارب مشابهة؟ وإذا كان لديكم أي أسئلة عن التطوير، يمكنكم طرحها.