بتـــــاريخ : 2/28/2011 8:22:13 PM
الفــــــــئة
  • الحـــــــــــاسب
  • التعليقات المشاهدات التقييمات
    0 1898 0


    أخيرا حل مشكلة الصوت مع OpenAL مثال بسيط يصلح كأساس لإستخدام المكتبة

    الناقل : elmasry | العمر :42 | الكاتب الأصلى : basha2002 | المصدر : www.arabteam2000-forum.com

    كلمات مفتاحية  :
    مشكلة الصوت OpenAL المكتبة

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

    كلمات مفتاحية  :
    مشكلة الصوت OpenAL المكتبة

    تعليقات الزوار ()