سؤال

لقد أنشأت بعض الأصوات للاستخدام في لعبتي. يمكنني لعبها في بعض الأحداث دون مشكلة:

// create sounds
CFBundleRef mainBundle;
mainBundle = CFBundleGetMainBundle();

_soundFileShake = CFBundleCopyResourceURL(mainBundle, CFSTR("shake"), CFSTR("wav"), NULL);
AudioServicesCreateSystemSoundID(_soundFileShake, &_soundIdShake);

// later...
AudioServicesPlaySystemSound(_soundIdShake);

تحتوي اللعبة على آلية تتيح لك التخلص من الجهاز لتنشيط بعض الوظائف. لقد تم تنفيذ رمز الهز حتى أحصل على "الهز الذي بدأ" و "الهز الذي انتهى" إلى لعبتي. ما أحتاج إلى حدوثه هو البدء في لعب "Shave.wav" عندما يبدأ الهز وحلقه حتى يتوقف. هل هناك طريقة للقيام بذلك باستخدام Audiotoolbox/Audioservices؟ كيف يمكنني فعل هذا إن لم يكن؟

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

المحلول

تتبع حالة "الهز" وتسجيل رد اتصال لاستكمال صوت النظام مع AudioServicesAddSystemSoundCompletion. ثم فقط ابدأ صوت النظام مرة أخرى كلما أكملت ولا يزال الجهاز يهتز. إذا كان الصوت قصيرًا بدرجة كافية ، فسيخلق هذا التأثير المطلوب. إذا كنت بحاجة إلى التأكد من توقف الصوت فورًا عند توقف الهز ، فستحتاج إلى استخدام أحد واجهات برمجة التطبيقات الصوتية التي توفر المزيد من التحكم الحبيبي في التشغيل (على سبيل المثال ، خدمات قائمة انتظار الصوت أو AVAudioPlayer).

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