الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مدخل للشات الصوتي بالديركت بلاي

مثبّت
بدأه DreamNet في 17 مايو 2007 · 15 رد · 11,495 مشاهدة · في قسم الدروس والمواضيع الهامة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

تحضير كائن الديركت بلاي

قبل التحضير طبعا يجب علينا أولا إضافة المرجع الذي سيوفر لنا الكائن DirectX

في هذا الموضوع سنتحدث أولا عن

1- كيفية تحضير كائن الديركت بلاي وكذلك معرفة أنواع الضغط المتوفرة للصوت على الجهاز

2- كيفية عمل اختبار الصوت

1- تحضير كائن الديركت بلاي ومعرفة أنواع الضغط المتوفرة للصوت على الجهاز:

مانحتاجه الآن هو الكائن DirectPlayVoiceServer8 طبعا بعد تحضير الكائن DirectX

Private dx As DirectX8
Private dvServer As DirectPlayVoiceServer8

نستعمل متغير من النوع DVCOMPRESSIONINFO الذي معلومات أنواع الضغط للصوت المتوفرة على جهازنا

هذا المتغير يتكون من 5 خصائص يمكننا الاستفادة منها في معرفة معلومات عن الCodec المتوفر لكننا نحتاج فقط في هذه المرحلة اسم الكودك strName

نقوم باحضار المعلومات التي نريدها بكتابة الكود التالي:

Dim i As Integer
Dim dci As DVCOMPRESSIONINFO
Set dx = New DirectX8
Set dvServer = dx.DirectPlayVoiceServerCreate
Combo1.AddItem "Default Codec", 0
For i = 1 To dvServer.GetCompressionTypeCount
  If i > 30 Then
  Exit For
  End If
  dvServer.GetCompressionType i, dci, 0
  Combo1.AddItem dci.strName, i
 Next
 Combo1.ListIndex = 0
 Set dvServer = Nothing

2-اختبار الصوت:

لعمل اختبار الصوت نستعمل DirectPlayVoiceTest8

 Dim dvSetup As DirectPlayVoiceTest8
	  Set dx = New DirectX8
	  Set dvSetup = dx.DirectPlayVoiceTestCreate
	  On Error Resume Next
	  dvSetup.CheckAudioSetup vbNullString, vbNullString, Me.hWnd, 0

نلاحظ هنا اننا عملنا تجاوز للأخطاء التي ستحدث باستعمال

On Error Resume Next

لذلك من المستحسن معرفة نوع الخطأ اذا حدث

المتغير Err يقوم بتخزين رقم الخطأ ومنه نستطيع عمل مقارنة لنعرف أي خطأ حدث

عموما في مثل هذه الحالات هناك خطأين هما:

أن يكون معالج اختبار الصوت مستعمل من طرف تطبيق آخر DVERR_COMMANDALREADYPENDING

أو أن يلغي المستخدم معالج اختبار الصوت DVERR_USERCANCEL

وبهذا يمكن اضافة الكود لمعرفة ماذا حدث

If Err.Number = DVERR_COMMANDALREADYPENDING Then
		  MsgBox "Could not start DirectPlayVoice.  The Voice Networking wizard is already open", vbOKOnly
	  End If
	  If Err.Number = DVERR_USERCANCEL Then
		  MsgBox "Could not start DirectPlayVoice.  The Voice Networking wizard has been cancelled.", vbOKOnly
	  End If
	  Set dvSetup = Nothing

طبعا عندما سنستعمل المعالج يجب ان يكون هناك كائن يحمل كل التعديلات التي عملنا بها لضبط الصوت

سوف نتعرف عليه في المرة القادمة ان شاء الله

فقط أردت أن أضع ملاحظة لمن يريد متابعة الموضوع أن يطلع على الموضوع الأول هنا

درس في إنشاء برنامج خادم عميل بالديركت بلاي

بالتوفيق للجميع دائما

تم تعديل هذه المشاركة بواسطة DreamNet في 17 مايو 2007 في 18:17

#2

يعطيك العافية أخوي DreamNet

موضوع رائع جدا

يعطيك العافية

تحياااتي

للصداقة البرمجية

pro-vb6@hotmail.com

#3

الدرس الثاني

تحضير برنامج الخادم:

قبل التطرق في الشرح أرجو من الاخوة أنهم ألقو نظرة على كيفية انشاء الخادم في الدرس المتعلق بالديركت بلاي

في الحقيقة سواء كان البرنامج خادم أو عميل لن يكون هناك فرق في تحضير الصوت لارساله الفرق الوحيد أن هناك برنامج ينتظر اتصال العميل بنفس الطريقة التي رايناها في الدرس الأول بعدها يتم تحضير كائنات الديركت بلاي الخاصة بالصوت

يجدر الاشارة أننا سنستعمل اتصال Peer2Peer في هذه الحالة بدل من استعمال كائن DirectPlay8Server نستعمال DirectPlay8Peer في انشاء الخادم ونمرر المعلومات اللازمة لانشاء خادم كما رأينا في السابق

Private  dpp As DirectPlay8Peer

  Set dpp = dx.DirectPlayPeerCreate

في هذه المرة سنستعمل الصوت لذلك نحتاج الى الأحداث المتعلقة بالصوت في الديركت بلاي لذلك نقوم باستدعائها

Implements DirectPlayVoiceEvent8

لارسال الصوت واستقباله نحتاج الى اتصالين بطبيعة الحال لذلك نعرف متغييرين

Private dvServer As DirectPlayVoiceServer8
Private dvClient As DirectPlayVoiceClient8

بعد تحضير dpp لاستقبال اتصال نحضر الآن جلسة الصوت بالنسبة للجهتين لذلك نحتاج الى ضبط خصائص الصوت والكودك المستعمل لهذه الجلسة ومن جهة الاستقبال باستعمال متغير من النوع DVSESSIONDESC

	Dim oSession As DVSESSIONDESC

ومن جهة الارسال نقوم بضبط خصائص الصوت باستعمال متغير من النوع DVSOUNDDEVICECONFIG و DVCLIENTCONFIG

Dim oSound As DVSOUNDDEVICECONFIG
	Dim oClient As DVCLIENTCONFIG

بعد ضبط الخصائص المستعملة نشغل استقبال الصوت وارساله انطلاقا من الاتصال المنشئ dpp

 dvServer.Initialize dpp, 0
	dvServer.StartSession oSession, 0

	dvClient.Initialize dpp, 0
			dvClient.Connect oSound, oClient, 0

رأينا قبل كيف نجلب أنواع الضغط المتوفرة للصوت على الجهاز وكيفية ضبط خصائص الصوت من ميكروفون و مكبر صوت باستعمال معالج اختبار الصوت وقلنا يجب حفظ هذه التعديلات في متغير لذلك سنستعمل oSound لذلك نمرر الهندل الخاص بالنافذة لكي يلتقط كل خصائص الصوت المضبطة من المعالج

oSound.hwndAppWindow = Me.hwnd

وكذلك نربط أحداث الصوت التي سيلتقطها الكائن dvClient بالفورم والتي ستكون ظاهرة باستدعائها بالسطر

Implements DirectPlayVoiceEvent8

طبعا الربط باحداث الكائن يكون

dvClient.StartClientNotification Me

لو أردنا الاتصال بالصوت فانه سوف يحدث خطأ اذا لم يتم ضبط خصائص الصوت مسبقا الخطأ سيكون DVERR_RUN_SETUP

يعني اذا كان الخطأ يساوي هذا الرقم نشغل معالج اختبار الصوت بتمرير نفس الهندل

dvSetup.CheckAudioSetup vbNullString, vbNullString, Me.hwnd, 0

يبقى لنا تسيير الأحداث الخاصة بالصوت في المرة القادمة ان شاء الله

1.zip

#4

السلام عليكم ورحمة الله وبركاته

ملاحظة : أتأسف لأي أخطاء في التعبير باللغة العربية

بعدما رأينا كيف ننشئ خادم للشات الصوتي أردت فقط اضافة بعض الأشياء هنا

أو بعض التقنيات حتى يتسنى لكل من يريد انشاء برنامج محادثة صوتية التحكم بالأحداث واختيار الطريقة الملائمة لسير برنامجه

أولا يمكننا تشغيل الخادم الصوتي اما مباشرة بعد اتصال العميل على DPP

هذا يعني عند الحدث DirectPlay8Event_ConnectComplete

او بطريقة أخرى وهي عن طريق وصول رسالة للخادم تطلب منه شات صوتي وبذلك يرفض أو يوافق مثل برامج الشات

وعندما يوافق يشغل خادم الشات الصوتي كما رأينا الطريقة في السابق

بعد انشاء جلسة الصوت باستعمال الكائن dvServer وربط الكائن الذي سيقوم بنقل الصوت بالجلسة الا وهو dvClient

في الطرف الآخر سنقوم بنفسة العملية لكن طبعا سنكتفي فقط بالاتصال بجلسة الصوت عن طريق كائن من نفس نوع dvClient

Dim oSound As DVSOUNDDEVICECONFIG
Dim oClient As DVCLIENTCONFIG

Set dvClient = dx.DirectPlayVoiceClientCreate
dvClient.StartClientNotification Me
dvClient.Initialize dpp, 0
oClient.lFlags = DVCLIENTCONFIG_AUTOVOICEACTIVATED Or DVCLIENTCONFIG_AUTORECORDVOLUME
oClient.lBufferAggressiveness = DVBUFFERAGGRESSIVENESS_DEFAULT
oClient.lBufferQuality = DVBUFFERQUALITY_DEFAULT
oClient.lNotifyPeriod = 150
oClient.lThreshold = DVTHRESHOLD_UNUSED
oClient.lPlaybackVolume = DVPLAYBACKVOLUME_DEFAULT
oSound.hwndAppWindow = Me.hWnd

الشئ المهم الآن هو توجيه الصوت بين الخادم والعميل لانه لحد الآن لن ينقل الصوت لذلك نضيف الى الحدث DirectPlayVoiceEvent8_ConnectResult

الكود التالي

Dim lTargets(0) As Long
 If ResultCode = 0 Then
 lTargets(0) = DVID_ALLPLAYERS
 dvClient.SetTransmitTargets lTargets, 0
 Else
 MsgBox "Could not start DirectPlayVoice." , vbCritical
 End If

وبهذا سيتم نقل الصوت بين الخادم والعميل

تطبيق مرفق للدرس

فقط ملاحظة الأداة المستعملة في البرنامج تستدعي تثبيت الياهو مسنجر

يمكن الاستغناء عنها ووضع البروقرس بار العادي الموجود في ادوات الVB

بالتوفيق ان شاء الله للجميع

#5

ما شاء الله , ربنا ينور بصيرتك ااامين على المعومات المفيده !!!

نشاتك ملحوظ اخي DreamNet

بالتوفيق ,,,,

A7med_prof

اقتباس

آسف الدخول متقطع هذه القتره

اقتباس

[يمين]

.[/يمين]

A7med_prof-4-2007.jpg

اخر مواضيعي 2007

االمثال مطبق على موقع بورصه سعودي

.

.

مواضيع مهمه ومطلوبه بكثره VB6

.

بــرامج ومشــاريع عربيه كامــله {HnHn} والمزيد في قسم برامج الاعضاء || ربط قواعد بيانات اكسس مع الفيجوال بيسك, مادة دراسية كاملة {بنت اليمن}|| المرجع الشامل لجمل SQL ا {GENIUS-IT} || كيفية التعامل مع مكتبة الـ DAO, في الوصول إلى قاعدة بيانات {رمضان} || مثال ريط Visaul Basic 6.0 مع SQL SERVER ا || العمليات التي تجرى على قاعدة البيانات, مثال كامل {بنت اليمن} || تصدير البيانات من الاكسل الي الاكسس بالفيجوال بيسك {HnHn} || البحث في قاعدة البيانات {MANSUR} || قواعد البيانات العلائقية وتقنيات الوصول إليها {عبد الله فتحي} || كيفية أظهار بيانات جدولين بواسطة التاريخ ,,,,,,,

.

أخي ربما سؤالك اجابته في أحدى هذه المواضيع فإن لم تجد قم بالبحث وان لم تجد اطرح سؤالك مع وضع عنوان مناسب بحيث ان يكون هذا العنوان دال على محتوى الموضوع فغير ذلك من أكبر الكبائر في المنتدى وسيؤدي الى غلق او حذف موضوعك .

.

</
#6

شكرا أستاذ أحمد

لقد نسيت المثال لم أتمكن من رفعه هنا يمكنكم رفعه الآن

بالتوفيق للجميع

Voice1.zip

تم تعديل هذه المشاركة بواسطة DreamNet في 21 مايو 2007 في 11:26

#7

أخيرا كنت أنتظر منك هذا الدرس بفارغ الصبر

شكرا أخي الكريم

لقد جربت الكود جميل جدا

فقط أردت سؤالك في جزية تتعلق بالديركت اكس

أردت أن أشغل صوت يعني زي الياهو مسنجر لما يطلبط حد لكن مدام نعمل بالديركت اكس ممكن نستفيد منو وانا سامع انه يمكن ذلك بواسطة DirectXSound و DirectMusic

فأيهما أفضل في رأيك أخي

موضوع مميز يستحق التثبيت شكرا مرة أخرى

#8

اختيار الطريقة ترجع الى احتاجاتك بالنسبة للصوت

بالنسبة للصوت فأنا أفضل ال DirectMusic في مثل هذه التطبيقات خاصة انه اذا استعملنا DirectSound في تطبيق مثل هذا يعني لنا امكانية التنقل بين النوافذ

فالصوت سيتوقف مباشرة بعد تحديد نافذة أخرى

أما بالنسبة للDirectMusic فلا يحدث هذا لهذا السبب فقط أفضله

سأقوم بتعديل الكود في المرة القادمة مع اضافة الصوت للطلب كما هو الحال على الياهو مسنجر

بالتوفيق ان شاء الله للجميع

#9

السلام عليكم ورحمة الله وبركاته

هذه بعض التعديلات على الملف الأول

أضفت لها تشغيل ملف صوتي بالdirectmusic

أرجو من الاخوة مشاركتنا بتعديلاتكم على الأمثلة المطروحة

بالتوفيق للجميع

Voice_like_ym.zip

#10

الاخ الفاضل ...

موضوع رائع، وفى انتظار المزيد، تم تثبيته فى قسم الدروس والمواضيع الهامة

شكرا

Eng. Usama El-Mokadem

Nothing is impossible, the word impossible itself says that: I M - Possible

#12

متشكرين جدا

اضافة رائعة للمثال ..يمكنني الآن أن أكمل برنامجي

منتظرين المزيد كما قال الأخ أسامة

#13

السلام عليكم ورحمة الله وبركاته

كنت أتمنى من الذين تابعو الموضوع ملاحظة أننا لم نستعمل خصائص ضبط الصوت على الجلسة المنشئة

المهم أتمنى أن الاخوة استفادو من بعض الجوانب هنا خاصة أنني حرصت على التبسيط قدر المستطاع وعدم الخوض في التفاصيل

طبعا هذا مجرد مدخل فقط وان شاء الله سأحاول اضافة بعض الجوانب التي تخص ضبط الصوت في المرات القادمة بحول الله

بالتوفيق للجميع

#14

شكرا لك أخي ويعطيك العافية

لكن يا خيو أنا أواجه مشكلة وهي ظهور رسالة : "تعذر عن إنشاء إتصال صوتي " ومن ثم تظهر رسالة من الدايركت تفيد بأنه لايستطيع البدء في تشغيل الدايركت الصوتي ..

لا أعلم ما المشكلة في ذلك

أتمنى الإفادة جزاكم الله خيرا

تحيااااااتي

للصداقة البرمجية

pro-vb6@hotmail.com

#15

أهلا أخي الكريم

للتوضيح المثال يعتمد على النسخة 8.1 للديركت اكس فما فوق هذه النسخة متوفرة على الاكسبي اذا كنت تعمل لعى نظام آخر يجي عليك تحميل الديركت اكس 8.1 أو أكثر وان شاء الله المثال راح يعمل

بالتوفيق ان شاء الله

#16

موضوع متميز ونرجوا من الاخ الفاضل تكملة الشرح

مواضيع مشابهة