Domanda

Ho creato un paio di suoni per l'uso nel mio gioco. Posso giocare a certi eventi senza alcun problema:

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

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

// later...
AudioServicesPlaySystemSound(_soundIdShake);

Il gioco ha un meccanismo che consente di scuotere il dispositivo per attivare alcune funzionalità. Ho il codice di agitazione fatto vengo ricevo un messaggio e "scuotere iniziato" "scuotere finito" per il mio gioco. Quello che ho bisogno di avere accadere è iniziare a giocare "shave.wav" quando agitano inizia e loop fino all'arresto. C'è un modo per fare questo con AudioToolbox / AudioServices? Come potrei fare questo se non?

È stato utile?

Soluzione

tenere traccia dello stato "sta scuotendo" e registrare un callback per il completamento del sistema audio con AudioServicesAddSystemSoundCompletion. Poi basta avviare di nuovo il suono di sistema ogni volta che si completa e il dispositivo è ancora in fase di scossa. Se il suono è abbastanza breve, questo creerà l'effetto desiderato. Se è necessario per garantire il suono si arresta immediatamente quando la si ferma agitazione, è necessario utilizzare una delle API sonore che fornisce un controllo più granulare sulla riproduzione (ad esempio, audio coda Services o AVAudioPlayer).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top