【问题标题】:Sound plays in iphone simulator with breakpoint, but fails to play without breakpoint声音在带断点的 iphone 模拟器中播放,但没有断点无法播放
【发布时间】: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 的播放解决了问题

标签: iphone cocoa-touch core-audio


【解决方案1】:

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

【讨论】:

  • 不,这不是问题所在。只有 1 个音频剪辑。它播放一次,然后暂停几分钟等待用户输入。
  • 好吧,那我的错。 (但是你确定吗?你是在里面放了一条日志语句,还是在你发送play 消息之后就放了一条线程休眠消息?)
猜你喜欢
  • 2012-02-10
  • 2018-06-26
  • 1970-01-01
  • 1970-01-01
  • 2011-08-30
  • 2014-01-16
  • 1970-01-01
  • 2011-07-29
  • 1970-01-01
相关资源
最近更新 更多