在播放新声音之前等待另一声音完成

我正在开发一个播放声音的iPhone应用程序。 如果声音已经播放,我不想中断或播放另一种声音,无论它是从哪个“产生”播放。 我的代码如下:

if(distance <= 10) { NSString *soundPath = [[NSBundle mainBundle] pathForResource:@"sound" ofType:@"wav"]; SystemSoundID soundID; AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath: soundPath], &soundID); AudioServicesPlaySystemSound(soundID); } 

简单地说,如果一个人已经在玩,我不想播放新的声音。

如果已经播放,我不想排队播放另一个声音。

这可能吗?

我建议你使用AVAudioPlayer API而不是AudioServicesPlaySystemSound。 它有一个你可以使用的委托,它定义了一个方法-audioPlayerDidFinishPlaying:successfully:它会告诉你声音何时播放完毕。 AVPlayer类还有一个-playing方法,您可以检查该方法是否正在播放声音。

所以,换句话说,改为:

 NSError *error; AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundPath error:&error]; if(!player) [self doSomethingWithError:error]; [player setDelegate:self]; [player play];