gpt4 book ai didi

ios - 使用 SimpleAudioEngine 按顺序播放声音

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:43:05 25 4
gpt4 key购买 nike

我正在使用 cocos2d 2 构建一个 iOS 应用程序,我正在使用 SimpleAudioEngine 来播放一些效果。

有没有办法在前一个声音完成后播放多个声音?

例如在我的代码中:

[[SimpleAudioEngine sharedEngine] playEffect:@"yay.wav"];
[[SimpleAudioEngine sharedEngine] playEffect:@"youDidIt.wav"];

当运行此代码时,yay.wavyouDidIt.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];

最佳答案

最简单的方法是使用 -[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) {
...

sourceIdplayEffect 返回的 ALuint

关于ios - 使用 SimpleAudioEngine 按顺序播放声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14987061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com