声音在带有断点的iphone模拟器中播放,但在没有断点的情况下无法播放
我正在尝试在iPhone模拟器中播放声音(使用3.1 SDK)。当我添加一个断点,并在GDB中单步执行代码时,声音就会播放。但是,如果禁用断点,则不会播放声音 调用声音的代码是:声音在带有断点的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
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_振动的播放解决了问题