Pergunta

Eu criei alguns sons para uso no meu jogo. Eu posso jogá -los em determinados eventos sem problemas:

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

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

// later...
AudioServicesPlaySystemSound(_soundIdShake);

O jogo possui um mecanismo que permite que você agite o dispositivo para ativar alguma funcionalidade. Eu fiz o código de agitação, então recebo uma mensagem "Shaking Inict" e "Shaking Ended" para o meu jogo. O que eu preciso ter acontecido é começar a tocar "Shave.wav" quando o tremor começa e o loop até que pare. Existe uma maneira de fazer isso com o AudioToolBox/AudiosServices? Como eu poderia fazer isso se não?

Foi útil?

Solução

Acompanhe o estado "Is Shaking" e registre um retorno de chamada para a conclusão do som do sistema com AudioServicesAddSystemSoundCompletion. Em seguida, basta iniciar o som do sistema novamente sempre que for concluído e o dispositivo ainda está sendo abalado. Se o som for curto o suficiente, isso criará o efeito desejado. Se você precisar garantir que o som pare imediatamente quando o tremor parar, você precisará usar uma das APIs de som que fornecem um controle mais granular sobre a reprodução (por exemplo, serviços de fila de áudio ou AVAudioPlayer).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top