Как зациклить звуковой эффект в 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