أنس عبد الله كتب:===============================================طبعا أريد أن أنوه بأن الهدف الأساسي لهذا البرنامج ليس الأغاني فالعمل على نشر وتطوير الأغاني حرام وأنا لم أستمر بهذا المشروع للنهاية وأخرجه للنور بسبب الحرام والحلال ولكن أرجو أن يتم استخدامه من
أجل استخدامات أخرى وأنا بريء أمام الله من أي استخدام غير شرعي له.
===============================================
السلام عليكم ... :)
العقرب يريد برنامج لمطابقة الصوت مع النصوص
أي أنه يريد برنامج يتم تحميل ملف text وملف wave أو mp3 ومن ثم يتم تشغيل الملف الصوتي ونقوم نحن بالضغط على الجملة التي نسمعها وبذلك يتم حقظ بداية الموقع الخاص بها
وبعدها وعندما نستمع إلى الأغنية كلها نقوم بتسجيل ملف من نوع خاص يحتوي على النص الذي أدخلناه بالإضافة إلى قيم الأزمنة التي عيناها ضمن نقرات الماوس
حسنا :
كل ذلك يتوفر في البرنامج التالي:
حيث نرى ضمن هذه الصورة المتواضعة كلمات النص الذي نريد أن نواقت بينه وبين الأغنية التي يتم الاستماع لها الآن
خطوات استخدام البرنامج هي:
1- الضغط على زر تحميل وتحميل ملف الـ text العادي الذي يحتوي على النص التالي:
موسيقى من دون قصد كتاب فتحته .. كتاب رفيقي مش معقول هايدا خطك دغري عرفته .. مكتوب بحبك على طول من دون قصد كتاب فتحته .. كتاب رفيقي مش معقول هايدا خطك دغري عرفته .. مكتوب بحبك على طول ....... حتى نهاية الأغنية2- ثم يطلب منا البرنامج أن نعطيه مسار الأغنية الصوتية التي تقابل هذه الكلمات، أعطيه ملف الـ mp3 الذي يوافق هذه الكلمات
بعدها يتم تفعيل أزرار معينة ضمن البرنامج وتظهر لدينا شاشة مشابهة للشاشة السابقة
الآن نقوم بتشغيل الأغنية وذلك بالنقر على الزر الموجود على المسجل أسفل الناقذة على اليسار
حسنا الآن نحن نسمع الأغنية ولكن حالما نسمع الجملة الأولى من الأغنية (من دون قصد كتاب فتحته .. كتاب رفيقي مش معقول) وحالما نسمع بداية حرف الميم في بداية الجملة نقوم
بالضغط عليها على الفورم السابق فنرى أن البرنامج قد وضع لنا قيمتين على الشكل التالي
101 ثانية وهي قيمة الوقت الذي انتهت عنده الموسيقى
101 وهي قيمة بداية جملة (من دون قصد كتاب فتحته .. كتاب رفيقي مش معقول)
الآن نتوقف قليلا وننتظر حتى تأتي الجملة التي بعدها: (هايدا خطك دغري عرفته .. مكتوب بحبك على طول)
وحالما نستمع إلى حرف الهاء الخاص ببداية الجملة نضغط على تلك الجملة فورا فنرى أن البرنامج وضع لنا القيمتين
108 وهي نهاية لجملة (من دون قصد كتاب فتحته .. كتاب رفيقي مش معقول)
108 وهي بداية جملة (هايدا خطك دغري عرفته .. مكتوب بحبك على طول)
ونستمر هكذا إلى النهاية حتى ننتهي من الأغنية
ولكن مالذي حدث من الناحية البرمجية
أريد أن تعرفو شي بدائي وهو أن عبارات الأغنية التي ضمن الـ Labels والـ Scroll bar تعمل وكأنها كائن واحد أي أن الأغنية مرتبطة بالـ ScrollBar وذلك بواسطة تعليمات برمجية بسيطة
الشيء الثاني وهو أنه عندما فتحنا الأغنية فإن البرنامج قد قام بحجز مصفوفة مؤلفة من 200 عنصر كحد أعظمي (عدد عبارات الأغنية) وكل سجل من سجلات المصفوفة يتم حجزه بالشكل
التالي:
Private Type Rec Words As String Duration As Double End Typeأي أن كل سجل هو عبارة عن قيمتين الأولى هي للنص الخاص بالسجل والثانية هي لتوقيت السجل ضمن الأغنية
ولكن في البداية يتم تحميل كل الـ Duration بالقيمة صفر وذلك لأن الكمبيوتر لم يغرف بعد أين تتوضع هذه السجلات بالنسبة للملف الصوتي ولكنك عمدما نقرت بالماوس على كل عنصر من
عناصر الأغنية فإنك بذلك تقوم بإملاء الـ Duration سجل بعد سجل
الآن وبعدما أنتهينا من مرحلة المواقتة واستطعنا أن نربط كل عبارة ببدايتها الزمنية لا بد من أن نقوم بحفظ التعديلات التي أدخلناها وذلك عن طريق الأمر حفظ
وسيقوم البرنامج بحفظ النص والمدة الزمنية بملف ذو امتداد tim وذلك للاستخدامات المستقبلية
أي أن البرنامج يفتح ملفات من نوعين
ملفات txt وهي ملفات نصوص فقط من دون مدة زمنية مع كل نص
ملفات tim وهي عبارة عن ملفات text أيضا ولكن يفصل بين كل سطر وسطر آخر قيمة زمنية تعبر عن إزاحة العبارة الزمنيو عن بداية الملف الصوتي المرفق
ويقوم البرنامج بالتسجيل بصيغة tim فقط ولكن لن يتم التسجيل إلا إذا كانت العبارات كلها وراء بعضها البعض من ناحية الوقت
الآن بقيت فكرة واحدة فقط وهي فكرة المعاينة
يتعتمد فكرة المعاينة على خاصية ربط المصفوفة السابقة مع خاصية الـ Current Position الخاصة بعنصر الـ Active Movie وذلك عن طريق متحول عام اسمه pop حيث يلاحق هذا المتحول
الخاصية Current Position ويحرص دائما على أن يأخذ قيمة معقولة له حسب الكود التالي:
If cmdLoad.Enabled = False Then If (sndMP3.CurrentPosition > SongWords(pop).Duration) And (sndMP3.CurrentPosition > SongWords(pop + 1).Duration) Then pop = pop + 1 End If If (sndMP3.CurrentPosition < SongWords(pop).Duration) And (sndMP3.CurrentPosition < SongWords(pop + 1).Duration) Then pop = pop - 1 End If If (sndMP3.CurrentPosition > SongWords(pop).Duration) And (sndMP3.CurrentPosition < SongWords(pop + 1).Duration) Then lblPrev.Caption = SongWords(pop).Words End If End Ifبالإمكان تحميل المشروع من هنا وتطويره:
http://mypage.ayna.com/anaskurdy/Final-Audio.rar
ملاحظة:
إذا صادفتكم مشاكل في فتح المشروع ضمن بيئة فيجوال بيسك فالرجاء تنزيل الإضافة Active Movie من موقع ميكروسوفت
إذا استمرت المشاكل حتى من بعد تنزيل تلك الإضافة فالرجاء إضافة الكائن Active Movie إلى المشروع بشكل يدوي ومن ثم تنزيله على الفورم باسم sndMP3 وبعدها سيعمل كل شيء
بنجاح بإذن الله :)
أحتاج الى هذا البرنامج لان الرابط لا يعمل أرجووووووووووووووا المساعدة جازاكم الله خيرا
hicham_ksouri@hotmail.com
