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

أخيرا حل مشكلة الصوت مع OpenAL

مغلق
بدأه basha2002 في 3 مارس 2007 · 6 رد · 8,293 مشاهدة · في قسم برمجة الألعاب و الرسوميات العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

بفضل من الله, و بعيدا عن الإتجاهات المغرضة التي تحث على إحتكار العلم :) أقدم لكم هذا الكود الذي يعد أشبه ببيئة أساسية لدمج نافذة مع مكتبة OpenAL الصوتية من خلال دوال الـAPI, ولأن ضيق الوقت لم يمكنني من ضبط مقالة جيدة فيها شرح كامل للكود, فإنني سوف أضع الملاحظات التالية.

* هذا الكود في حقيقته ما هو إلا عملية دمج بين إحدى دروس الـAPI الخاصة بالويندوز و بين إحدى دروس مكتبة OpenAL الصوتية, أما وصلات الدروس الأصلية فهي كالتالي:

http://winprog.org/tutorial/files/forgers-...rial-arabic.zip

http://www.devmaster.net/articles

* لكي يعمل هذا الدرس معك يجب أن تقوم بتثبيت مكتبة OpenAL كالتالي:

وضع الملفات الديناميكية ".dll" إما في نفس المكان الذي به الملف التنفيذي ".exe" و إما في ملفات النظام "system".

وضع ملفات المكتبة ".lib" في الملف "lib".

وضع الملفات الرأسية "header"في ملف واحد أسمه "AL" و وضعه في الملف "Include", و ذلك مراعاة لترتيب مسارات وضع الملفات الرأسية.

* بالنسبة للكود ذاته لى الملاحظات التالية:

على الرغم من الوضع الصحيح لملفات المكتبة, إلا أنه قد تجد المترجم يعطيك الخطأ الشهير "Link2001" و الذي يعني عدم العثور على ملفات المكتبة, عموما للتغلب على تلك المشكلة يتم وضع السطران التاليان لعمل نوع من الإتصال الإجباري و المباشر بالمكتبة.

#pragma comment (lib, "OpenAL32.lib")
#pragma comment (lib, "ALut.lib")

________________________________________________________________________________

__

و الآن ركز معي في السطور التالية:

	
	ShowWindow(hwnd, nCmdShow);
	UpdateWindow(hwnd);

				alutInit(NULL, 0);	 //أساسيات مكتبة الصوت
				LoadALData();		  //تحميل بيانات الصوت
	SetListenerValues();   //بيانات الشخص المستمع
	  alSourcePlay(Source);  //دالة تشغيل الصوت
	alGetError();		  //دالة إيجاد الأخطاء

1.السطر alutInit إذا ما تم كتابته قبل ShowWindow , فإن الصوت سيعمل في نفس اللحظة التي ستظهر فيها النافذة, و السر في ذلك هو تعريف أساسيات الصوت قبل أن يتم رسم النافذة, أما إن ظل هذا السطر كما هو في مكانه, فإنه بعد ظهور النافذة سيتم الإنتظار بمعدل ثانية تقريبا كي يتم التعرف على مشغل الصوت ثم يظهر الصوت بعدها.

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

3.كلا من الدالتين alutInit و alutExit ما هما إلا إختصار لبيانات كثيرة كان عليك كتابتها, و الفضل لذلك يرجع لمكتبة ALUT و التي هي مكافئة لمكتبة GLUT في عملها, فهي توفر عليك الوقت و الجهد في كتابة دوال المقدمة و النهاية و تختصرهما لك في دالة واحدة بسيطة, عموما لمن يريد الدوال الأصلية لمكتبة OpenAL فهي كالتالي:

________________________________________________________________________________

__

دوال المقدمة

	//initialize OpenAL

	//Open device
	Device = alcOpenDevice((ALubyte*)"DirectSound3D");

	if (Device == NULL)
	{
		//we failed to initialize the device
		exit(-1);
	}

	//Create context(s)
	Context=alcCreateContext(Device,NULL);
	//Set active context
	alcMakeContextCurrent(Context);

_______________________________________________________________________________

دوال النهاية

	// Shutdown
	//Get active context
	Context=alcGetCurrentContext();
	//Get device for active context
	Device=alcGetContextsDevice(Context);
	//Disable context
	alcMakeContextCurrent(NULL);
	//Release context(s)
	alcDestroyContext(Context);
	//Close device
	alcCloseDevice(Device);

_______________________________________________________________________________

و في النهاية أحب أن أنوه إلى أن هذا الكود ما هو إلا محصلة إجتماع بين مكتبة OpenAL الأصلية و بين مكتبة الدوال الصوتية المختصرة ALUT و لذا يجب عليك تحميل االأثنين معا حتى ترى نتيجة مرضية, كل شئ ستحجده في الموقع الرسمي:

http://www.openal.com

و أي أستفسار أنا في الخدمة.

و السلام ختام

My_OpenAL_First.rar

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

OpenGL-3-revolution.jpg

#2

أخي الكريم رغم أن جزء من الموضوع شاهدته من قبل ;) ,

إلا أن التحديثات للموضوع كانت أكبر من توقعاتي فانا لم أكن أتوقع أن الـ

OPAL (OpenAL) بهذه البساطة و لكن نريد المزيد من التطبيقات حول إستخدامه في المؤثرات الصوتية أو الـHardware Control :rolleyes:

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

أخيكم في الله ;

NubiaPrince

أحمد اسامة

' و على الله فليتوكل المؤمنون '

* فريق الجرافيك الحاسوبي العربي الإسلامي * the Arabic-Islamic Computer Graphics - A I C G

イスラム教は平和を意味する

이슬람교는 평화를 의미한다

Ислам означает мир

#3

شكرا لك ..

لكني لم استطيع تحميل مكتبة الـopenAL

#4

لم أجد الهيدر فايل al.h !!!!!

تم تعديل هذه المشاركة بواسطة بسوووم في 22 مايو 2007 في 20:13

#5

السلام عليكم

محاولة مني لإستكمال الموضوع , قمت بعمل الدرسين الثاني و الثالث, رغم أن المسألة في غالب الأمر لا تخرج عن عمليات القص و اللصق :) و ذلك لحث البعض لي على وجود تطبيقات لتلك المكتبة. لي عدة ملاحظات على هذه الدروس:

1. أمثال السطور التالية (و ما يتعلق بها من سطور أخرى من تعريف لمتغيرات و خلافه) يمكن حذفها دون أن تؤثر على تشغيل برنامجنا:

				alSourcef (Source, AL_PITCH,	1.0	  );

				alSourcef (Source, AL_GAIN,	 1.0	  );

				alSourcefv(Source, AL_POSITION, SourcePos);

				alSourcefv(Source, AL_VELOCITY, SourceVel);

لماذا؟ لأن مثل هذه السطور تتعلق بموضع الصوت و سرعته و فصل طبقتين من الصوت في ملف واحد, مثل هذه الأسطر ليست ذات فائدة بالنسبة لنا الأن, و لكن وضعها مبرمج هذه الأكواد من أجل إيجاد كود صالح للقيام بالعديد من الأعمال, لا سيما تحديد بعض الخصائص المهمة عند التعامل مع العالم الثلاثي البعد.

2. قد تقوم بتحميل المكتبات المطلوبة library و كذلك مفات الـDLL و الملفات الرأسية header, و مع ذلك لا تعمل الدروس و لا يظهر الصوت, لماذا؟ لأن مثل هذه الملفات قد يكون حدث بها عطب, أو تكون قد حملت نسخة قديمة من ملفات المكتبة, أحرص دائما على التعامل مع النسخ الأحدث من المكتبة كي لا تواجهك المشاكل, الجدير بالذكر أنك قد لا تحتاج إلى ذكر أحد الملفات الرئيسية في برنامجك, ذلك لأنه قد تم ذكرها بالفعل تحت إحدي الملفات الرئيسية الأخرى, هذا الملف هو alc.h و ذلك لوجود alut.h التي تغنيك عن ذلك.

3. هناك أمر أعتقد أنه تقتضيه طبيعة التعامل مع المكتبات, هذا الأمر يتمثل في أن لكل مكتبة إسلوبها الخاص في تعريف المتغيرات, بمعنى أدق إن كنت تتعامل مع كلا من WinAPI و OpenAL API و حاولت تعريف إحدى المتغيرات البولينية الخاصة بـOpenAL على أنها bool فإن البرنامج لن يعمل, و إنما عليك تعريفها عن طريق المتغير البوليني التابع للمكتبة ألا و هو ALboolean, كذلك الأمر مع بقية المتغيرات و المكتبات البرمجية.

أما بالنسبة لما تغير في الدروس فيمكنكم مراجعة الشرح في موقع devmaster أو بالمقارنة بين الدرس الأول و الدروس التالية, ذلك أنها من البساطة ما يمكنك من معرفة ما تغير من الكود.

و السلام ختام

My_OpenAL_Second.rar

My_OpenAL_Third.rar

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

OpenGL-3-revolution.jpg

#6

رائع أخي .

أنا محتار بصراحة بين OpenAL و Fmod .

على العموم .. سأختار OpenAL . .

هناك بعض المفاهيم في هذه المكتبة مثل SOURCE وما الى ذلك ..

المكتبة كلها تقوم على هذه المفاهيم ..

أيضا عندك AL_PITCH و AL_GAIN .. هذه حاولت اغير قيمها وظهرت لي أصوات شنيعة :) .

عموما أشكرك على اهتمامك بهذه المكتبة .. فأنت كنت سبب في اختياري لها لوجود مصادر عربية .. وهذا أمر ارتحت له ( ناحية نفسية :) ) .

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#7

السلام عليكم

إليكم تحويل الملف الثامن إلى العمل في بيئة للنوافذ و الذي يرتبط بتشغيل ملفات من نوع ogg. و التي تتميز بأنها تتعلق بالملفات المجانية, و لكن لماذا؟ لأنه من المعروف جيدا أن ملفات الـMP3 ليست بالمجانية, و كان البديل الطبيعي هو أستخدام ملفات عملها مثل عمل الـMP3 و تقاربها في الكفاءة و صغر الحجم إن لم تكن مثلها (مساحة الملف الصوتي المرفق 16KB بينما كانت مساحته و هو wave في المثال الأول 82KB). بالطبع كانت مشكلة الكثير بعد البحث كثيرا و التقصي حول المكتبة التي تدعم ملفات oog, و وجدنا أنها موجودة على موقع vorbis.com و لكن كان المشكلة هو عدم وجود ملفات الـDLL و الـLIB . كلا! أنها موجودة و لكن يجب عليك عمل لها Compile تماما كما تفعل مع جميع التطبيقات, و لعل السر في ذلك هو أن أصحاب المكتبة أرادوها مفتوحة بشكل كامل حتى يمكن لمن يريد التطوير أن يعدل فيها أو إتمام عملية الـCompile دون أي تعديل و ذلك على حسب نوع الـCompiler و كذلك على حسب إصداره. لتهوين الأمر عليكم لمن يشعر بحيرة في الأمر قمت بعمل Compile للملفات كلها و وضعها في شكل ملف مضغوط تجدونه بالأسفل. أما الموقع الرسمي لملفات المكتبة فهو كالتالي:

أولا: ملفات مكتبة ogg

ثانيا: ملفات مكتبة vorbis

و صفحة المثال الأصلي:

و ترجمتها:

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

و السلام ختام

Ogg_Vorbis.rar

OpenAL_OGG.rar

تم تعديل هذه المشاركة بواسطة basha2002 في 6 فبراير 2008 في 19:06

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

OpenGL-3-revolution.jpg

هذا الموضوع مغلق.

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