如何检测何时播放完音效?
我正在使用SimpleAudioEngine,并试图在继续之前检测音效是否完成播放。
我正在寻找任何方法,但我试图实施的方法不起作用!
CDSoundEngine *engine = [CDAudioManager sharedManager].soundEngine; ALuint soundId = [[SimpleAudioEngine sharedEngine] playEffect:soundId]; float seconds = [engine bufferDurationInSeconds:soundId];
每次我使用bufferDurationInSeconds时,它都会返回-1的浮点值给variables秒。 我检查了实现,并且当id无效时返回-1,但是我是100%ID是有效的!
任何人都可以帮助我解决这个问题,或build议我另一种方式来检测声音效果的结束?
中提琴! 获取CDSoundSource,然后从soundId的工作。
(第二行是可选的,只是播放声音)。
CDSoundEngine *engine = [CDAudioManager sharedManager].soundEngine; [[SimpleAudioEngine sharedEngine] playEffect:@"soundeffect.m4a"]; CDSoundSource *aSound =[[SimpleAudioEngine sharedEngine] soundSourceForFile:@"soundeffect.m4a"]; float seconds = [engine bufferDurationInSeconds:aSound.soundId];
另外要运行一个方法,当它完成播放我会使用NSTimer使用秒结果。
[NSTimer scheduledTimerWithTimeInterval:seconds target:self selector:@selector(aMethod) userInfo:nil repeats:NO];
然后最后的方法实现了一些东西。
-(void)aMethod { NSLog(@"finished playing"); }
虽然这不会影响-1的结果,但我必须指出,soundIdvariables会在代码中出现两次,在同一行中会导致问题。 不用担心,我已经用上面的方法testing了我的方法。
ALuint **soundId** = [[SimpleAudioEngine sharedEngine] playEffect:**soundId**];