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