我想在iPhone模拟器(使用3.1 SDK)中播放声音。当我添加一个断点,并逐步浏览GDB中的代码时,声音播放。但是,如果我禁用断点,声音不会播放。声音在iPhone模拟器与断点播放,但无法播放没有断点
的代码来调用声音:
SoundEffect *completeSound = [myobj completeSound];
if (completeSound != nil) {
[completeSound play];
}
SoundEffect类有一个简单的游戏方法:
// Plays the sound associated with a sound effect object.
-(void)play {
// Calls Core Audio to play the sound for the specified sound ID.
AudioServicesPlaySystemSound(_soundID);
}
如果启用上面的“MyObj中completeSound”方法中设置断点,它起着完美。但是,如果没有断点,则不会发出声音。
音频文件是一个长度为5秒的CAF文件。
在调用AudioServicesPlaySystemSound确保播放后需要添加一些延迟吗?
更新:似乎使用AudioServicesAddSystemSoundCompletion方法是解决方案。
SoundEffect *completeSound = [myobj completeSound];
if (completeSound != nil) {
AudioServicesAddSystemSoundCompletion([completeSound _soundID],
NULL, NULL, AudioPlaybackComplete, self);
[completeSound play];
}
然后当音频剪辑完成时,调用AudioPlaybackComplete静态函数。这工作正常 - 虽然我仍然不明白为什么音频剪辑在初始用例中失败。
我试图在我的自定义声音后立即播放kSystemSoundID_Vibrate时遇到此问题。禁止在模拟器中播放kSystemSoundID_Vibrate解决了问题 – 2010-05-16 04:59:34