声音在带断点的 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 模拟器中播放,但没有断点无法播放的主要内容,如果未能解决你的问题,请参考以下文章

ios:在模拟器中播放系统声音,但在 iphone 上没有

在模拟器中录制和播放声音效果很好,但在我的 iPhone 中却不行

带有 iOS 6 AVAudioPlayer 的 iPhone 4S 工作正常,但没有声音

如何设置播放声音的断点

iPhone短文件播放

使用 AVAudioPlayer 没有声音