xCode - 如何在另一个操作发生时停止一个操作

时间:2011-03-20 04:22:21

标签: objective-c xcode ios audio

我有一个会说话的应用。但是,当按下单词B时,我想要停止单词A.有没有办法做到这一点?这是我说出的话的代码:

-(IBAction)sayIt:(id)sender
{
//NSLog(@"%s", __FUNCTION__);
CFBundleRef mainBundle = CFBundleGetMainBundle();
FlashCardsAppDelegate *mainDelegate = (FlashCardsAppDelegate *)[[UIApplication sharedApplication] delegate];
CFURLRef soundFileURLRef;
soundFileURLRef= CFBundleCopyResourceURL (mainBundle, (CFStringRef)[mainDelegate soundFile], CFSTR("caf"), NULL);   
UInt32 soundID;
AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
AudioServicesPlaySystemSound(soundID);
}   

2 个答案:

答案 0 :(得分:2)

查看文档,看起来你可以停止播放警报直到它完成。

但你可以使用回调告诉它何时完成播放以避免播放两个声音。 看看:

<强> AudioServicesAddSystemSoundCompletion

  

讨论   由于系统声音可能会播放几秒钟,因此您可能想知道它何时播放完毕。例如,在播放另一个声音之前,您可能需要等到系统声音播放完毕。

<强> AudioServicesSystemSoundCompletionProc

  

讨论   由于系统声音可能会播放长达30秒,因此AudioServicesPlaySystemSound函数将异步执行(即,它会立即返回)。当指定的系统声音播放完毕后,将调用此回调。例如,您可以使用此回调来帮助您避免在第一个声音仍在播放时播放第二个声音。

答案 1 :(得分:2)

你可以使用AVAudioPlayer作为班级成员, 调用player.stop和player.play来停止和启动音频。 如果您需要在停止播放器后使用InitWithData

更改声音