【问题标题】:how to loop a sound effect in Simple Audio Engine如何在简单音频引擎中循环播放音效
【发布时间】:2013-12-16 08:04:06
【问题描述】:

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

【问题讨论】:

标签: audio cocos2d-iphone simpleaudioengine soundeffect


【解决方案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]

【讨论】:

    【解决方案2】:

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

    确保将 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 修改根文件

    【讨论】:

      猜你喜欢
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多