首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SimpleAudioEngine的大量声音效果

使用SimpleAudioEngine的大量声音效果
EN

Stack Overflow用户
提问于 2011-10-15 21:21:12
回答 1查看 1.9K关注 0票数 1

背景:,我的背景音乐被播放为一种声音效果,因为我想改变每一次重复的曲调之间的音高。

的问题:,当背景音乐在播放的时候,还有很多其他的短音效正在发生。在播放了一定数量的音效后,我的背景音乐(也是音效)被删掉了。队列似乎是循环的,在播放了50个音效之后,当第51次播放时,不管是否已经完成,第一个将被释放。

的方向请求:,我可以看到有两个方向可能会处理这个问题。1.不要将背景音乐作为一种效果播放,而要想出如何将音高改为背景音乐,而不是效果2。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-15 21:57:27

SimpleAudioEngine不允许您控制频道,所以它只会在它内部分配的一个频道中播放您的声音效果。最终,所有频道都在播放音频。在这种情况下,当要播放一个新的音频文件,并且所有的频道都在播放时,SimpleAudioEngine将取消一个现有的音频文件。有时这将是你的背景音乐。见鬼。

你通常要做的就是为背景音乐分配(分配)一个音频频道。任何其他音频都不会尝试在该频道播放音频。您必须使用“常规”CocosDenshion API。看起来您要么需要使用CDAudioManager,要么需要使用CDSoundEngine,但是我没有使用CocosDenshion通道的经验。

就我个人而言,我从未使用过CocosDenshion,每当我需要更多的控制时,我发现ObjectAL API更容易理解,而且它有很好的文档。我为ObjectAL创建了下面的辅助函数,它在特定的频道上播放声音。我只是为我的背景音乐实例化了一个ALChannelSource,并且只通过这个频道播放背景音乐。返回的ALSoundSource甚至允许您在播放音频时更改音高、平底锅等。

代码语言:javascript
复制
+(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类播放的所有其他音频文件。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7780718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档