背景 我的背景音乐是作为音效播放的,因为我想改变每次重复曲调之间的音高。
问题: 在播放背景音乐的同时,还会发生许多其他短音效果。播放一定数量的声音效果后,我的背景音乐(也就是声音效果)会消失。队列似乎循环,以便在说出50个声音效果后,当第51个播放时,第1个将被释放,无论它是否已经完成。
请求指示: 我可以看到有两个方向可能会解决这个问题。 1.不播放背景音乐作为效果,并弄清楚如何将音高改为背景音乐而不是效果 2.一些如何确保效果在完成之前保留。
由于
答案 0 :(得分:4)
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课程播放的所有其他音频文件。