2010-01-26 78 views
2

我想在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静态函数。这工作正常 - 虽然我仍然不明白为什么音频剪辑在初始用例中失败。

+0

我试图在我的自定义声音后立即播放kSystemSoundID_Vibrate时遇到此问题。禁止在模拟器中播放kSystemSoundID_Vibrate解决了问题 – 2010-05-16 04:59:34

回答

2

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

+0

不,这不是问题。只有1个音频片段。并且它播放一次,然后等待用户输入有几分钟的暂停。 – 2010-01-27 02:26:15

+0

好吧,那我的不好。 (但是你确定吗?你发送了一个日志语句,或者在发送'play'消息之后发送线程睡眠消息吗?) – 2010-01-27 07:00:16

相关问题