【发布时间】: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