声音在带断点的 iphone 模拟器中播放,但没有断点无法播放
Posted
技术标签:
【中文标题】声音在带断点的 iphone 模拟器中播放,但没有断点无法播放【英文标题】:Sound plays in iphone simulator with breakpoint, but fails to play without breakpoint 【发布时间】:2010-01-26 20:55:46 【问题描述】:我正在尝试在 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 静态函数。这可以正常工作 - 尽管我仍然不明白为什么音频剪辑在初始用例中失败。
【问题讨论】:
我在尝试在我的自定义声音之后立即播放 kSystemSoundID_Vibrate 时遇到了这个问题。在模拟器中禁用 kSystemSoundID_Vibrate 的播放解决了问题 【参考方案1】:您检查过您的程序流程吗?因为它让我相信,如果没有断点,您的程序会反复触发 play
消息并以如此高的频率多次重新播放声音,您永远听不到任何样本。使用断点,您可以阻止代码中断播放。
【讨论】:
不,这不是问题所在。只有 1 个音频剪辑。它播放一次,然后暂停几分钟等待用户输入。 好吧,那我的错。 (但是你确定吗?你是在里面放了一条日志语句,还是在你发送play
消息之后就放了一条线程休眠消息?)以上是关于声音在带断点的 iphone 模拟器中播放,但没有断点无法播放的主要内容,如果未能解决你的问题,请参考以下文章
在模拟器中录制和播放声音效果很好,但在我的 iPhone 中却不行