Pregunta

He creado unos sonidos para su uso en mi juego. Puedo jugar con ellos en ciertos eventos sin ningún problema:

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

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

// later...
AudioServicesPlaySystemSound(_soundIdShake);

El juego tiene un mecanismo que le permite agitar el dispositivo para activar algunas funciones. Tengo el código sacudiendo hecho así que llegar llegar un mensaje y "temblor comenzado" "sacudiendo terminado" a mi juego. Lo que necesita tener suceda es empezar a jugar "shave.wav" cuando se inicia y agitando bucle hasta que se detenga. ¿Hay una manera de hacer esto con AudioToolbox / AudioServices? ¿Cómo podría hacerlo si no?

¿Fue útil?

Solución

Realizar un seguimiento del estado "está sacudiendo" y registrar una devolución de llamada para la finalización de sonido sistema con AudioServicesAddSystemSoundCompletion. A continuación, sólo iniciar el sistema de sonido de nuevo cada vez que se completa y el dispositivo sigue siendo sacudido. Si el sonido es lo suficientemente corto, esto va a crear el efecto deseado. Si es necesario asegurarse de que el sonido se detiene inmediatamente cuando pase el temblor, tendrá que utilizar una de las API de sonido que proporciona un control más granular sobre la reproducción (por ejemplo, audio o cola de Servicios AVAudioPlayer).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top