在 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 合成声音

iPhone:如何在 iPod 声音上播放声音?

如何在 iOS 应用程序中连续循环播放声音文件?

无法使用 JavaScript 在 iPhone 上播放声音,但可以在 Android 上播放

在 iPhone 上振动时播放自定义声音

iOS 应用仅通过耳机播放声音