Как зациклить звуковой эффект в Simple Audio Engine

Я много искал, как зациклить звуковой эффект с помощью простого звукового движка, но не добился большого прогресса, кроме приветствия с зацикливанием sfx на форуме cocos2d, где есть несколько проблем. Как зациклить звуковой эффект в Simple Audio Engine?

2 ответа

Вам нужно будет отредактировать 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]

Для звукового эффекта Infinite Looping, пока вы не захотите его остановить. Это то, как вы делаете это, ничего не путая.

Убедитесь, что вы сохранили надежную ссылку CDSoundSource в классе или объекте, который его использует, чтобы вы могли остановить его, когда захотите.

Поскольку это уникальный идентификатор, который идентифицирует этот звуковой эффект, и таким образом вы можете иметь несколько экземпляров этого звукового эффекта. Например: когда вам нужно 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

Другие вопросы по тегам