كيف تمكنت Scirra من الحصول على صوت HTML5 بشكل مثالي في Construct 2؟



audio html5-audio (1)

أنا مطور Construct 2 ، لذلك آمل أن أكون مؤهلاً بما يكفي للإجابة على سؤالك :)

صوت HTML5 هو في الواقع حالة من الفوضى ، لذلك ذهبت إلى أطوال كبيرة في محاولة لجعله مضاد للرصاص في Construct 2. وفيما يلي الخطوط العريضة لما قمت به:

استخدم واجهة برمجة تطبيقات Web Audio

يبدو صوت HTML5 مصممًا لتدفق الموسيقى ، لذا فإن كائن HTML5 Audio هو نوع من كائن ثقيل الوزن. لعب 10 أصوات ثانية معها مثل Space Blaster يمكنه بسهولة اغتنام المتصفح. من ناحية أخرى ، فإن واجهة برمجة تطبيقات Web Audio هي عبارة عن محرك صوتي عالي الأداء مع التوجيه والتأثيرات وتشغيل الصوت الخفيف الوزن. انها مثالية للألعاب. يتم فصل المخازن المؤقتة الصوتية وتشغيل الصوت ، بحيث يمكن أن يكون لديك مخزن بيانات واحد ويقوم بتشغيله بكفاءة عدة مرات في وقت واحد ، في حين أن بعض المتصفحات هي عربات التي تجرها الدواب حتى إذا كنت تلعب صوت HTML5 بضع مرات إعادة تنزيله في كل مرة! نظرًا لأنه تم تصميمه للألعاب في الواقع ، يمكنك تشغيل العديد من الأصوات بسعادة للأعمار ، وستظل هادئة طوال الوقت. ويمكنه أيضًا استخدام صوت HTML5 كمصدر صوت ، على الرغم من أنني لا أستخدم سوى صوت HTML5 للأشياء التي حددها المستخدم كمقاطع موسيقية (حيث أن هذا المكان تفضل أن يكون البث فيه - عادةً ما يتم تنزيل كل شيء آخر في واجهة برمجة تطبيقات Web Audio بالكامل قبل تلعب).

يتم دعم واجهة برمجة تطبيقات Web Audio في Chrome ، وقد تم تشغيلها أيضًا على نظام التشغيل iOS 6+ (على الرغم من كتم صوته إلى أن تحاول تشغيل بعض الصوت في حدث بلمسة) ، يعمل Firefox على الدعم ، ويجب أن يكون قريبًا إلى Chrome لـ ذكري المظهر. لذلك على هذه المنصات سوف يكون الصوت أكثر موثوقية بشكل ملحوظ.

مزيد من المعلومات حول HTML5Rocks والمواصفات المقترحة - سيتعين عليك استخدام المواصفات كوثائق في الوقت الحالي ، وليس هناك الكثير غير ذلك.

المتصفحات الأخرى: تنفيذ نظام إعادة تدوير الصوت

واجهة برمجة تطبيقات Web Audio غير مدعومة في أي مكان بعد ، ولا سيما IE ، مما يعني أنك ما زلت بحاجة إلى تخطي صوت HTML5 إلى شيء قد يعمل للألعاب لتحقيق التوافق مع الإصدارات السابقة. طريقة القيام بذلك هي إعادة تدوير الكائنات الصوتية.

ينطلق ليزر اللاعب في Space Blaster 10 مرات في الثانية - وهذا لا يشمل أي مؤثرات صوتية أخرى! كما ذكرت سابقًا ، يعد الصوت نوعًا من كائن ثقيل الوزن ، لذلك إذا كنت تفعل صوتًا new Audio() 10+ مرة ثانية ، فاختفي المستعرض في النهاية وبدأ الصوت يتسلق. ومع ذلك ، يمكنك تقليل عدد الكائنات الصوتية التي تم إنشاؤها عن طريق إعادة تدويرها بشكل كبير.

بشكل أساسي ، لكل تأثير صوت ، احفظ ذاكرة تخزين مؤقت لكل كائن صوتي قمت بإنشائه باستخدام هذا الصوت كمصدر. ثم ، عند تشغيل صوت جديد ، ابحث في ذاكرة التخزين المؤقت عن أي مؤثرات صوتية انتهت من التشغيل (ستكون الخاصية ended صوابًا). إذا وجدت واحدة ، currentTime = 0 إلى البداية ( currentTime = 0 ) و play() مرة أخرى. وإلا ، قم بإنشاء كائن new Audio() في ذاكرة التخزين المؤقت.

نظرًا لأن تأثير الصوت الليزري للاعب قصير ، فبدلاً من إنشاء 600 أغنية في الدقيقة ، سيكون هناك 3 أو 4 فقط لتستمر في الدوران. ستظل بعض المتصفحات للأسف ستنزِّلها 4 مرات (Safari did last last checked!) أو لديك وقت وصول عالٍ في المرة الأولى التي يتم فيها تشغيل كل مخزن مؤقت للصوت ، ولكن في النهاية يتعطل المتصفح نظرًا لأنه يتم دائمًا إعادة استخدام المخازن المؤقتة نفسها. لذلك قد يكون الصوت بشكل أساسي غريبًا بعض الشيء لحظات قليلة ، ثم يتم إزالته. كما نستخدم أيضًا ذاكرة التخزين المؤقت لتطبيق HTML5 ؛ لذا في المرة القادمة التي تشغل فيها كل شيء تحميلاً من القرص ، يجب أن تؤدي العروض اللاحقة أداءً جيدًا في الحال.

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

لا يوجد SoundManager أو أي خدوش على أساس Flash / plugin على الإطلاق لأننا نهدف إلى أن تكون نقية HTML5.

ندعم أيضًا واجهات برمجة التطبيقات الصوتية المقدمة من PhoneGap و appMobi للجوال ، نظرًا لأن صوت HTML5 على الجوّال لا يستحق التجربة. وهذا يجعل إجمالي أربعة واجهات برمجة تطبيقات صوتية يلتف محرك الصوت الخاص بنا ، ونعم ، يبدو وكأنه فوضى frankenstein ، لكنه يعمل.

هذا هو. أفترض أن منافسينا سوف يقرؤون هذا ، ولكن من يهتم عندما يكون هناك مندوبين من أجل ؟؟؟ !!! 1111

تحقق من هذا الفضاء مطلق النار التجريبي .

يعتبر صوت HTML5 مثاليًا على Chrome 18 و Firefox 10. ولا يوجد أي تأخير في تشغيل الأصوات وكل نموذج يعمل بشكل مثالي. في المرة الأخيرة التي حاولت فيها تشغيل الأصوات باستخدام صوت HTML5 وجافا سكريبت ، لم أتمكن من الحصول على صوت لتشغيله أكثر من مرة.

ما الشعوذة هو القيام Scirra لجعل هذا الكمال جدا؟





construct-2