Emb*_*ess 9 audio objective-c cocos2d-iphone ios simpleaudioengine
我正在使用SimpleAudioEngine,我试图在继续之前检测声音效果是否完成播放.
我正在寻找任何方法,但我试图实现的方法不起作用!
CDSoundEngine *engine = [CDAudioManager sharedManager].soundEngine;
ALuint soundId = [[SimpleAudioEngine sharedEngine] playEffect:soundId];
float seconds = [engine bufferDurationInSeconds:soundId];
Run Code Online (Sandbox Code Playgroud)
每次我使用bufferDurationInSeconds时,它都会将float值-1返回到变量秒.我检查了实现,当id无效时返回-1,但我100%ID有效!
任何人都可以帮我解决这个问题,或者建议我另一种方法来检测声音效果的结束?
中提琴!获取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];
Run Code Online (Sandbox Code Playgroud)
另外,为了在完成播放时运行方法,我将使用使用秒结果的NSTimer.
[NSTimer scheduledTimerWithTimeInterval:seconds target:self selector:@selector(aMethod) userInfo:nil repeats:NO];
Run Code Online (Sandbox Code Playgroud)
然后最后的方法实现了一些东西.
-(void)aMethod
{
NSLog(@"finished playing");
}
Run Code Online (Sandbox Code Playgroud)
虽然,这不会影响-1结果,但我必须指出,soundId变量在代码中出现两次,在同一行中会出现问题.不用担心,我已经成功地测试了上面的方法.
ALuint **soundId** = [[SimpleAudioEngine sharedEngine] playEffect:**soundId**];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1622 次 |
| 最近记录: |