0

我创建了一些声音用于我的游戏。我可以在某些活动中毫无问题地播放它们:

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

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

// later...
AudioServicesPlaySystemSound(_soundIdShake);

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

4

1 回答 1

2

跟踪“正在摇晃”状态并使用 注册系统声音完成的回调AudioServicesAddSystemSoundCompletion。然后,只要它完成并且设备仍在摇晃,只需再次启动系统声音。如果声音足够短,这将产生所需的效果。如果您需要确保在震动停止时声音立即停止,您需要使用其中一种声音 API 来提供对播放的更精细控制(例如,Audio Queue Services 或AVAudioPlayer)。

于 2010-06-12T17:34:40.190 回答