Простой звуковой цикл эффекта с использованием аудиоулякита
-
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», когда встряхивание начинается и циклично, пока не останавливается. Есть ли способ сделать это с помощью аудиоуллы / аудиосигнала? Как я мог сделать это, если нет?
Решение
Следите за состоянием «встряхивание» и зарегистрируйте обратный вызов для завершения звука системы с AudioServicesAddSystemSoundCompletion
. Отказ Тогда просто запустите звук системы снова, когда он завершит, и устройство все еще встряхивается. Если звук достаточно короткий, это создаст желаемый эффект. Если вам нужно, чтобы звук останавливается сразу, когда встряхивание останавливается, вам нужно будет использовать один из звуковых API, которые обеспечивают больше грануляционного управления воспроизведением (например, службы аудио очереди или AVAudioPlayer
).