我有一个相对简单的应用程序,可以使用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/

10-09 16:25
查看更多