声音在带有断点的iphone模拟器中播放,但在没有断点的情况下无法播放

声音在带有断点的iphone模拟器中播放,但在没有断点的情况下无法播放,iphone,cocoa-touch,core-audio,Iphone,Cocoa Touch,Core Audio,我正在尝试在iPhone模拟器中播放声音(使用3.1 SDK)。当我添加一个断点,并在GDB中单步执行代码时,声音就会播放。但是,如果禁用断点,则不会播放声音 调用声音的代码是: SoundEffect *completeSound = [myobj completeSound]; if (completeSound != nil) { [completeSound play]; } SoundEffect类有一个简单的播放方法: // Plays the sound associat

我正在尝试在iPhone模拟器中播放声音(使用3.1 SDK)。当我添加一个断点,并在GDB中单步执行代码时,声音就会播放。但是,如果禁用断点,则不会播放声音

调用声音的代码是:

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”方法上方启用断点,它将完美播放。但是,如果没有断点,则不会发出声音

音频文件是一个CAF文件,长度为5秒

在调用AudioServicesPlaySystemSound以确保其播放后,是否需要添加一些延迟

更新:使用AudioServicesAddSystemSoundCompletion方法似乎是解决方案

SoundEffect *completeSound = [myobj completeSound];
if (completeSound != nil) {
    AudioServicesAddSystemSoundCompletion([completeSound _soundID], 
        NULL, NULL, AudioPlaybackComplete, self);
    [completeSound play];
} 

然后在音频剪辑完成时调用AudioPlaybackComplete静态函数。这可以正常工作-尽管我仍然不明白为什么音频剪辑在初始用例中失败。

您检查了程序流程了吗?因为这让我相信,如果没有断点,你的程序会反复触发
play
消息,并以如此高的频率多次重新播放声音,你永远听不到任何声音样本。有了断点,就可以停止代码中断播放。

不,这不是问题所在。只有一个音频剪辑。它播放一次,然后有几分钟的暂停等待用户输入。好吧,我的错。(但您确定吗?您是否在发送
play
消息后立即在其中放入了日志语句,或线程睡眠消息?)我在尝试播放自定义声音后立即播放kSystemSoundID\u振动时遇到了此问题。在模拟器中禁用kSystemSoundID_振动的播放解决了问题