Cocos2d iphone SimpleAudioEngine提供大量音效

Cocos2d iphone SimpleAudioEngine提供大量音效,cocos2d-iphone,simpleaudioengine,Cocos2d Iphone,Simpleaudioengine,背景: 我的背景音乐是作为音效播放的,因为我想在每次重复曲调之间改变音高 问题: 在播放背景音乐的同时,还有很多其他的短音效。在播放了一定数量的音效后,我的背景音乐(也是音效)就会停止播放。队列似乎在循环,所以在播放了50个音效之后,当第51个音效播放时,无论是否完成,第1个音效都将被释放 请求指示: 在这个问题上,我可以看到两个可能的方向。 1.不要将背景音乐作为效果播放,并了解如何将音高更改为背景音乐而不是效果 2.有些人如何确保效果将保留到完成 谢谢SimpleAudioEngine不允许

背景: 我的背景音乐是作为音效播放的,因为我想在每次重复曲调之间改变音高

问题: 在播放背景音乐的同时,还有很多其他的短音效。在播放了一定数量的音效后,我的背景音乐(也是音效)就会停止播放。队列似乎在循环,所以在播放了50个音效之后,当第51个音效播放时,无论是否完成,第1个音效都将被释放

请求指示: 在这个问题上,我可以看到两个可能的方向。 1.不要将背景音乐作为效果播放,并了解如何将音高更改为背景音乐而不是效果 2.有些人如何确保效果将保留到完成


谢谢

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

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

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

+(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;
}

+(id类。

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

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

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

+(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;
}

+(id类。

啊,我明白了。SimpleAudioEngine只是有点太简单了,是吗?谢谢你的全面回答,我会尝试一下,然后再回来报告。OALAudioSupport从哪里来?你的意思是哪里可以得到ObjectAL?这里:我在向我的项目中添加ObjectAL时遇到了一些重大问题。你对频道的指导非常到位不过非常有用。我最终实现了CDAudioManager。谢谢。@LearnCos2D,该代码似乎不再工作了。OALAudioSupport类似乎已从最新的ObjectAL稳定版本中删除。我已经迁移了GameSoundManager(我想是我最初得到的)从一个CocosDension演示应用程序到使用ObjectAL。这非常轻松,尽管我发现从一个背景曲目过渡到另一个更麻烦。我还注意到,使用ObjectAL运行时,设备和主机Mac上的调试器之间的通信可能会对声音产生负面影响。啊,我明白了。SimpleAudioEngine是JU有点太简单了,嗯?谢谢你的全面回答,我会试一试,然后再报告。OALAudioSupport从哪里来?你的意思是你可以从哪里获得ObjectAL?这里:我在向我的项目中添加ObjectAL时遇到了一些主要问题。不过,你对频道的指导非常到位,非常有帮助。我最终实现了with CDAudioManager。谢谢。@LearnCos2D,该代码似乎不再有效。OALAudioSupport类似乎已从ObjectAL的最新稳定版本中删除。我已迁移GameSoundManager(我认为是我最初得到的)从一个CocosDension演示应用程序到使用ObjectAL。这非常轻松,尽管我发现从一个背景曲目过渡到另一个更麻烦。我还注意到,使用ObjectAL运行时,设备和主机Mac上的调试器之间的通信可能会对声音产生负面影响。