我正在用iOS 2构建一个cocos2d应用程序,我正在使用SimpleAudioEngine来发挥一些效果。
是否有一种方法可以在前一个声音完成后对多个声音进行排序?
例如,在我的代码中:
[[SimpleAudioEngine sharedEngine] playEffect:@"yay.wav"];
[[SimpleAudioEngine sharedEngine] playEffect:@"youDidIt.wav"];当运行此代码时,yay.wav和youDidIt.wav完全同时在对方之上播放。
我想让yay.wav玩,一旦完成,youDidIt.wav就玩。
如果没有SimpleAudioEngine,是否有一种使用AudioToolbox的方法,或者其他的方法?
谢谢!
== 更新 ==
我想我将使用AVFoundation来使用这个方法:
AVPlayerItem *sound1 = [[AVPlayerItem alloc] initWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"yay" ofType:@"wav"]]];
AVPlayerItem *sound2 = [[AVPlayerItem alloc] initWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"YouDidIt" ofType:@"wav"]]];
AVQueuePlayer *player = [[AVQueuePlayer alloc] initWithItems: [NSArray arrayWithObjects:sound1, sound2, nil]];
[player play];发布于 2013-02-20 18:51:57
简单的方法是使用-[CDSoundSource durationInSeconds]获得音轨的持续时间,然后在适当的延迟之后安排第二个效果的播放:
[[SimpleAudioEngine sharedEngine] performSelector:@selector(playEffect:) withObject:@"youDidIt.wav" afterDelay:duration];获取音频持续时间的一种更容易的方法是修补SimpleAudioManager并添加一个查询其音频持续时间的CDSoundEngine (静态全局)的方法:
- (float)soundDuration {
return [_engine bufferDurationInSeconds:_soundId];
}第二种方法是轮询音频引擎的状态,然后等待它停止播放。
alGetSourcei(sourceId, AL_SOURCE_STATE, &state);
if (state == AL_PLAYING) {
...sourceId是playEffect返回的ALuint。
发布于 2013-10-16 19:18:15
它很简单,用Cocos2D 2.1进行了测试:
https://stackoverflow.com/questions/14987061
复制相似问题