2011-10-25 86 views
2

我正在使用cocos2d为iPhone和iPad开发游戏,并且我需要能够在另一个完成时精确播放声音。 我有一个配乐片段被切成小块,并且当一个完成和一个开始时,播放之间的最小间隙没有空间。在iPhone上完美播放声音

Btw。我无法将这些声音粘贴到一个文件中,只是播放该文件,因为这些文件的顺序将被重新排列为运行时。

我该如何做到这一点?

回答

2

随着CocosDenshion你可以

[[CDAudioManager sharedManager] setBackgroundMusicCompletionListener:self 
             selector:@selector(musicDidFinish)]; 

CDAudioManager class reference

注册的委托每当背景音乐结束此委托将被调用。这当然只适用于以背景音乐播放声音文件的情况(使用playBackgroundMusic方法)。

如果这不适用于您,请查看ObjectAL。你会有更多的选择和更大的灵活性。例如,使用ALSource,您可以排队代表声音文件的多个ALBuffer对象。这意味着只要源的缓冲区计数减少到1,您只需排队下一个缓冲区即可实现多个声音文件(任何格式)的不间断,连续播放。

因为ObjectAL太棒了(嗯,我认为是这样:))它包含在内,并准备在Kobold2D中使用。

+0

非常感谢您的回答!我尝试在setBackgroundMusicCompletionListener的回调中播放另一个声音,但它不够快。我在播放音乐,所以最轻微的延迟将非常明显。我预先载入了背景声音,所以我猜这是行不通的。 –

+0

我会尝试你的其他技巧尽快:) –

+0

非常感谢!它使用ALSource和ALBuffer使用ObjectAL。创建不同的缓冲区,然后排队他们做了诀窍:) –

0

您可以使用单个音频队列或RemoteIO音频单元,只需以任意顺序从任何文件中填充回调缓冲区中的原始/ PCM音频样本。