Простой звуковой цикл эффекта с использованием аудиоулякита

StackOverflow https://stackoverflow.com/questions/3029406

Вопрос

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

// 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).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top