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

时间:2011-04-18 01:15:47

标签: cocoa-touch ios audio

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

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

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

如果已经播放了,我不想排队播放其他声音。

这可能吗?

1 个答案:

答案 0 :(得分:4)

我建议您使用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];