如何在Simple Audio Engine中循环音效

时间:2013-11-30 06:34:13

标签: audio cocos2d-iphone simpleaudioengine soundeffect

我已经广泛搜索了如何使用简单的音频引擎循环声音效果,但在cocos2d论坛上除了hello with looping sfx之外没有取得多大进展,这有几个问题。如何在简单音频引擎中循环声音效果?

2 个答案:

答案 0 :(得分:1)

您需要编辑SimpleAudioEngine

将此添加到SimpleAudioEngine.h

-(int) playEffect:(NSString*) file loop:(BOOL) loop;

将此方法添加到SimpleAudioEngine.m

-(int) playEffect:(NSString*) file loop:(BOOL) loop
{
    int handle = [[SimpleAudioEngine sharedEngine] playEffect:file];
    if (loop) {
        alSourcei(handle, AL_LOOPING, 1);
    }
    return handle;
}

循环音效或音乐只需这样做

ALuint yourSoundALuint = [[SimpleAudioEngine sharedEngine] playEffect:@"yourSound.caf" loop:YES];

并在必要时停止循环播放音乐

[[SimpleAudioEngine sharedEngine] stopEffect:yourSoundALuint]

答案 1 :(得分:0)

对于声音效果无限循环,直到您希望它停止。 这就是你如何做到这一点而不搞乱其他任何东西。

确保您在使用它的类或对象中保存CDSoundSource强引用,以便您可以随时停止它。

由于它是一个识别声音效果的唯一ID,因此您可以运行此声音效果的多个实例。 例如:当你需要2架直升机时,每架直升机都有自己无限的发动机声音。

//Create SFX
-(CDSoundSource*)playInfiniteHeliPad
{
    CDSoundSource *loopSound = [[SimpleAudioEngine sharedEngine] soundSourceForFile:@"Sound.m4a"];
    loopSound.looping = YES;
    loopSound.gain = 0.5f;//Volume
    [loopSound play];
   return loopSound; //Return the CDSoundSourse
}


//Stop Infinite loop SFX.
-(void)stopInfiniteHeliPad:(CDSoundSource*)loopSound {
    [loopSound stop];
}

这很容易实现,无需修改Cocos2Denshion

中的根文件