背景:,我的背景音乐被播放为一种声音效果,因为我想改变每一次重复的曲调之间的音高。
的问题:,当背景音乐在播放的时候,还有很多其他的短音效正在发生。在播放了一定数量的音效后,我的背景音乐(也是音效)被删掉了。队列似乎是循环的,在播放了50个音效之后,当第51次播放时,不管是否已经完成,第一个将被释放。
的方向请求:,我可以看到有两个方向可能会处理这个问题。1.不要将背景音乐作为一种效果播放,而要想出如何将音高改为背景音乐,而不是效果2。
谢谢
发布于 2011-10-15 21:57:27
SimpleAudioEngine不允许您控制频道,所以它只会在它内部分配的一个频道中播放您的声音效果。最终,所有频道都在播放音频。在这种情况下,当要播放一个新的音频文件,并且所有的频道都在播放时,SimpleAudioEngine将取消一个现有的音频文件。有时这将是你的背景音乐。见鬼。
你通常要做的就是为背景音乐分配(分配)一个音频频道。任何其他音频都不会尝试在该频道播放音频。您必须使用“常规”CocosDenshion API。看起来您要么需要使用CDAudioManager,要么需要使用CDSoundEngine,但是我没有使用CocosDenshion通道的经验。
就我个人而言,我从未使用过CocosDenshion,每当我需要更多的控制时,我发现ObjectAL API更容易理解,而且它有很好的文档。我为ObjectAL创建了下面的辅助函数,它在特定的频道上播放声音。我只是为我的背景音乐实例化了一个ALChannelSource,并且只通过这个频道播放背景音乐。返回的ALSoundSource甚至允许您在播放音频时更改音高、平底锅等。
+(id<ALSoundSource>) playEffect:(NSString*)effect channel:(ALChannelSource*)channel loop:(bool)loop
{
id<ALSoundSource> soundSource = nil;
if (channel)
{
ALBuffer* buffer = [[OALAudioSupport sharedInstance] bufferFromFile:effect];
soundSource = [channel play:buffer loop:loop];
}
return soundSource;
}我通过OALSimpleAudio类播放的所有其他音频文件。
https://stackoverflow.com/questions/7780718
复制相似问题