【问题标题】:Waiting until another sound is finished before playing a new one等到另一个声音结束后再播放新的声音
【发布时间】:2011-04-18 01:15:46
【问题描述】:

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

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

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

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

这可能吗?

【问题讨论】:

标签: cocoa-touch ios audio


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-21
    相关资源
    最近更新 更多