حلقة تأثير الصوت البسيطة باستخدام Audiotoolkit
-
26-09-2019 - |
سؤال
لقد أنشأت بعض الأصوات للاستخدام في لعبتي. يمكنني لعبها في بعض الأحداث دون مشكلة:
// 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
).