我在游戏中创建了一些声音。我可以在某些事件中播放它们而不会出现问题:
// create sounds
CFBundleRef mainBundle;
mainBundle = CFBundleGetMainBundle();
_soundFileShake = CFBundleCopyResourceURL(mainBundle, CFSTR("shake"), CFSTR("wav"), NULL);
AudioServicesCreateSystemSoundID(_soundFileShake, &_soundIdShake);
// later...
AudioServicesPlaySystemSound(_soundIdShake);
游戏有一种机制,允许您摇动设备以激活某些功能。我已经完成了摇晃的代码,所以我得到了一个“摇动开始”和“摇晃结束”的消息给我的游戏。我需要做的是在开始摇动时开始播放“shave.wav”并将其循环直至停止。有没有办法用AudioToolbox / AudioServices做到这一点?如果没有,我怎么能这样做?
答案 0 :(得分:2)
跟踪“正在振动”状态,并使用AudioServicesAddSystemSoundCompletion
注册系统声音完成的回调。然后只要它完成并再次启动系统声音,设备仍然会被震动。如果声音足够短,这将产生所需的效果。如果您需要确保在抖动停止时立即停止声音,则需要使用其中一个声音API,以便对播放进行更精细的控制(例如,音频队列服务或AVAudioPlayer
)。