在 iPhone 上完美连续播放声音
Posted
技术标签:
【中文标题】在 iPhone 上完美连续播放声音【英文标题】:Playing sounds in perfect succession on the iPhone 【发布时间】:2011-10-25 17:07:09 【问题描述】:我正在使用 cocos2d 为 iPhone 和 iPad 开发一个游戏,我需要能够在另一个游戏完成时准确地播放声音。 我有一个被切成小块的配乐,播放结束和开始播放之间的最小间隙没有空间。
顺便说一句。我无法将声音粘合到一个文件中并播放它,因为文件的顺序将在运行时重新排列。
我怎样才能做到这一点?
【问题讨论】:
【参考方案1】:使用 CocosDenshion,您可以注册一个委托
[[CDAudioManager sharedManager] setBackgroundMusicCompletionListener:self
selector:@selector(musicDidFinish)];
CDAudioManager class reference
只要背景音乐结束,就会调用这个委托。当然,这仅在您将声音文件作为背景音乐播放(使用 playBackgroundMusic 方法)时才有效。
如果这对您不起作用,请查看ObjectAL。您将拥有更多选择和更大的灵活性。例如,使用ALSource,您可以将多个代表声音文件的ALBuffer 对象排队。这意味着只要源的缓冲区计数减少到 1,您只需排队下一个缓冲区即可实现多个声音文件(任何格式)的不间断、连续播放。
因为 ObjectAL 太棒了(嗯,我想是的 :))它包含在 Kobold2D 中并可以使用。
【讨论】:
非常感谢您的回答!我尝试在 setBackgroundMusicCompletionListener 的回调中播放另一种声音,但速度不够快。我正在播放音乐,所以最轻微的延迟会非常明显。我也预加载了背景声音,所以我想它不会起作用。 我会尽快尝试你的其他技巧 :) 非常感谢!它使用带有 ALSource 和 ALBuffer 的 ObjectAL。创建不同的缓冲区,然后将它们排队就可以了:)【参考方案2】:您可以使用单个音频队列或 RemoteIO 音频单元,只需使用来自任何文件的原始/PCM 音频样本以任何顺序填充回调缓冲区。
【讨论】:
以上是关于在 iPhone 上完美连续播放声音的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iPhone/Mac 上使用 CoreAudio 合成声音