1

我已经广泛搜索了如何使用简单的音频引擎循环播放音效,但除了在 cocos2d 论坛上使用循环 sfx 打招呼之外没有取得太大进展,这有几个问题。如何在 Simple Audio Engine 中循环播放音效?

4

2 回答 2

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]
于 2013-11-30T23:14:15.597 回答
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 修改根文件

于 2014-04-28T03:05:18.297 回答