我有一个相对简单的应用程序,可以使用AVAudioPlayer
播放声音,如下所示:
NSURL *file3 = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/ball_bounce.aiff", [[NSBundle mainBundle] resourcePath]]];
player3 = [[AVAudioPlayer alloc] initWithContentsOfURL:file3 error:nil];
[player3 prepareToPlay];
稍后被要求玩,就像这样:
[player3 play];
但是,这种声音在多个地方(与弹跳球的碰撞)被多次调用。有时,球以足够快的速度连续击打两件事,当第二次碰撞时,第一次弹跳的声音仍在播放。然后第二次弹跳不会发出声音。即使涉及支付与已经播放的声音重叠的声音,如何在每次碰撞时播放声音?
任何帮助是极大的赞赏。
最佳答案
解决此问题的一种方法是,如果先前的ozt_code实例已经在播放,则创建它的新实例:
if([player3 isPlaying]) {
AVAudioPlayer *newPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[player3 url]];
[newPlayer setDelegate:self];
[newPlayer play];
}
然后,在委托(delegate)方法
AVAudioPlayer
中,您应该向播放器发送audioPlayerDidFinishPlaying:successfully:
消息:- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag {
if(player != player3) {
[player release];
}
}
这就是必须这样做的方式,因为每次播放并发声音时确实需要一个新的源缓冲区。 :(
关于objective-c - AVAudioPlayer不会重复播放,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6399099/