Простой цикл звуковых эффектов с использованием AudioToolKit - PullRequest
0 голосов
/ 12 июня 2010

Я создал несколько звуков для использования в моей игре.Я могу играть в них на определенных событиях без проблем:

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

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

// later...
AudioServicesPlaySystemSound(_soundIdShake);

В игре есть механизм, который позволяет встряхивать устройство, чтобы активировать некоторые функции.Я выполнил код встряхивания, поэтому я получил сообщение «встряхивание началось» и «встряхивание закончилось» для моей игры.Что мне нужно, это начать играть в «shave.wav», когда начинается встряхивание, и повторять его до тех пор, пока оно не остановится.Есть ли способ сделать это с AudioToolbox / AudioServices?Как я мог это сделать, если нет?

1 Ответ

2 голосов
/ 12 июня 2010

Отслеживайте состояние "дрожит" и регистрируйте обратный вызов для завершения звука системы с помощью AudioServicesAddSystemSoundCompletion.Затем просто запустите системный звук снова, когда он завершится, и устройство все еще встряхивается.Если звук достаточно короткий, это создаст желаемый эффект.Если вам нужно убедиться, что звук прекращается сразу после прекращения тряски, вам нужно использовать один из API звуков, который обеспечивает более детальный контроль над воспроизведением (например, Audio Queue Services или AVAudioPlayer).

...