سؤال

لدي لعبة iPhone كثيفة الأداء أود أن أضيف أصوات إلى. يبدو أن هناك حوالي ثلاثة خيارات رئيسية: (1) AVAudioPlayer, (2) قوائم الانتظار الصوتية و (3) OPENAL. كنت أكره كتابة صفحات من التعليمات البرمجية المنخفضة فقط للعب عينة، حتى أرغب في استخدامها AVAudioPlayer. وبعد المشكلة هي أنه يبدو أنه قتل الأداء - لقد قمت بقياس بسيطة باستخدام CFAbsoluteTimeGetCurrent و ال play يبدو أن الرسالة تأخذ في مكان ما من 9 إلى 30 مللي ثانية لإنهاء. هذا بائس تماما، مع مراعاة أن 25 مللي ثانية == 40 FPS.

بالطبع هناك prepareToPlay الطريقة التي يجب أن تسرع الأمور. لهذا السبب كتبت فئة بسيطة تبقي عدة AVAudioPlayerق بالتصرف، يعدهم مسبقا ثم يلعب العينة باستخدام اللاعب المعد. لا السيجار، لا يزال يستغرق ما ~ 20 مللي ثانية ذكرت أعلاه.

مثل هذا الأداء غير قابل للاستخدام للألعاب، إذن ما الذي تستخدمه للعب الأصوات مع أداء لائق على iPhone؟ هل أفعل شيئا خطأ في AVAudioPlayerب هل تلعب الأصوات مع قوائم الانتظار الصوتية؟ (لقد كتبت شيئا ما يشبه Avaudioplayer قبل 2.2 خرج وأحب أن أخرج هذه التجربة.) هل تستخدم Openal؟ إذا كانت الإجابة بنعم، هل هناك بسيط طريقة للعب الأصوات مع OPENAL، أو هل لديك لكتابة صفحات من التعليمات البرمجية؟


تحديث: نعم، لعب الأصوات مع openal هو بسيطة الى حد كبير.


هل كانت مفيدة؟

المحلول

Avaudioplayer هامشي للغاية للعبة الصوت. معالجة Audioyue أو ODEL من خلال تكييف أحد الأمثلة هي بالتأكيد هي الطريقة للذهاب. الكمون هو أكثر قابلية للتحكم بهذه الطريقة.

نصائح أخرى

إذا كنت تتصل play على الخيط الرئيسي، حاول تشغيله على مؤشر ترابط منفصل. ما انتهى به الأمر هو:

#include <dispatch/dispatch.h>

dispatch_queue_t playQueue = dispatch_queue_create("com.example.playqueue", NULL);

AVAudioPlayer* player = ...
dispatch_async(playQueue, ^{
    [player play];
});

التي الثابتة أسوأ الأسوأ من التأتأة Framerate كنت تعاني.

يمكنني استخدام الفصول المفتوحة والصفوف التي جاءت مع رمز عينة Crashlanding. لقد عملت بشكل جيد حتى الآن تلعب عينات ولعب الموسيقى المحررة في نفس الوقت. أنا أتعلم حاليا كيفية إصدار الذاكرة التي قمت بتخصيصها للحصول على صوت (ملف .wav) عندما، على سبيل المثال، أريد أن ألعب بعض الموسيقى المقدمة مرة واحدة فقط.

يستخدم cocosdenshion. - إنه مجاني وسهل وأعمال. انها يلف AVAudioPlayer بالنسبة لمسارات الخلفية و OPENAL للأصوات.

هل ترغب في التحقق من التخزين المؤقت مع التطبيق الذي تستخدمه؟ قد يكون بطريقة أو بأخرى أن تأخير 20ms كنت تعاني. أي، حاول أن تلعب مع حجم المخزن المؤقت.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top