بسم الله الرحمن الرحيم بفضل من الله, و بعيدا عن الإتجاهات المغرضة التي تحث على إحتكار العلم أقدم لكم هذا الكود الذي يعد أشبه ببيئة أساسية لدمج نافذة مع مكتبة 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(); //دالة إيجاد الأخطاء
//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);