使用AudioToolKit的简单音效循环

时间:2010-06-12 16:55:08

标签: iphone audio core-foundation audiotoolbox

我在游戏中创建了一些声音。我可以在某些事件中播放它们而不会出现问题:

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

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

// later...
AudioServicesPlaySystemSound(_soundIdShake);

游戏有一种机制,允许您摇动设备以激活某些功能。我已经完成了摇晃的代码,所以我得到了一个“摇动开始”和“摇晃结束”的消息给我的游戏。我需要做的是在开始摇动时开始播放“shave.wav”并将其循环直至停止。有没有办法用AudioToolbox / AudioServices做到这一点?如果没有,我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

跟踪“正在振动”状态,并使用AudioServicesAddSystemSoundCompletion注册系统声音完成的回调。然后只要它完成并再次启动系统声音,设备仍然会被震动。如果声音足够短,这将产生所需的效果。如果您需要确保在抖动停止时立即停止声音,则需要使用其中一个声音API,以便对播放进行更精细的控制(例如,音频队列服务或AVAudioPlayer)。