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

时间:2010-01-26 20:55:47

标签: iphone cocoa-touch core-audio

我想在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”方法上方启用断点,则播放效果非常好。但是,如果没有断点,则不会发出声音。

音频文件是一个5秒的CAF文件。

在调用AudioServicesPlaySystemSound以确保它播放后,我需要添加一些延迟吗?

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

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

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

1 个答案:

答案 0 :(得分:2)

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