可可触摸-等待,直到另一个声音结束,然后播放一个新的



我正在开发一个播放声音的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];

最新更新