如何检测何时播放完音效?

我正在使用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**];