AVAudioPlayer播放多次相同的声音而不会中断

时间:2015-07-14 12:00:38

标签: ios swift avaudioplayer

我有一个scrollview。每当我达到1/7时,我想发出声音。当用户慢慢滚动时,它起作用,因为声音在另一个被触发之前完成。

但如果它太快:我有两个选择:

  • 忽略应触发的以下声音
  • 停止上一个并播放以下内容

但我想要的是让第一个完成比赛,即使第二个(甚至第3个,第4个等)已经开始播放。

我可以使用一个AVAudioplayer吗?

var alertSound = NSBundle.mainBundle().URLForResource("Transit", withExtension: "aif")
AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient, error: nil)
AVAudioSession.sharedInstance().setActive(true, error: nil)

var error:NSError?
audioPlayer = AVAudioPlayer(contentsOfURL: alertSound, error: &error)
audioPlayer.prepareToPlay()

1 个答案:

答案 0 :(得分:1)

为了达到你想要的效果,你需要多个 AVAudioPlayers ,一个玩家不会做这个工作。但是, AudioToolbox 框架可能会满足您的要求。

您基本上可以为声音创建系统声音ID,并随时将其关闭。一旦它被解雇,声音将会发挥出来,不利于音量,但在这种情况下这不应该是重要的。

基本的例子是(obj-C抱歉)

    NSString *path=[[NSBundle mainBundle] pathForResource: @"soundName" ofType:@"aif"];

    SystemSoundID soundID;
    AudioServicesCreateSystemSoundID((__bridge CFURLRef)([NSURL fileURLWithPath:path]), &soundID);
    AudioServicesPlaySystemSound(soundID);