点击按钮时重复播放声音

时间:2015-12-01 12:16:48

标签: ios xcode swift avaudioplayer

我正在尝试为我的应用添加声音。我想要它,当我点击一个按钮,它播放一个快速的声音。但是,当快速重复按下按钮时,声音也不起作用(当我按下按钮5或6次时,它只播放1或2次)。这是按钮中的代码

player.play()

我在外面有这个

var player = AVAudioPlayer()
let audioPath = NSBundle.mainBundle().pathForResource("illuminati", ofType: "wav")

viewDidLoad中:

do {
        try player = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: audioPath!))
    } catch {}

我怎样才能更好地播放声音?感谢。

2 个答案:

答案 0 :(得分:2)

您的声音只播放一次的原因是,即使您连续多次按下该按钮,该歌曲一直播放直到您完成或直到您停止播放为止。 你可以手动停止音乐,所以在按下播放声音的按钮之前你会说

player.stop() 

而不是

player.play()

这有帮助吗?

答案 1 :(得分:1)

问题是您在上一次通话结束前多次调用play。您需要跟踪用户逐一点击按钮和播放歌曲的次数。

这是你可以做的:

  1. 在您的班级中使用整数来跟踪点击按钮的次数

    var numClicks = 0
    var buttonClickTime:NSDate? = nil // The last time when the button is clicked
    
    @IBAction func yourbuttonclickfunction() {
        numClicks++; 
        buttonClickTime = NSDate()
        player.play()
    } 
    
  2. 注册AVAudioPlayerDelegate

    的代表
    do {
          try player = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: audioPath!))
    
          // Add this 
          player.delegate = self
    } catch {}
    
  3. 在委托功能中,当前一首歌到达结尾时再次播放该歌曲:

    optional func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer,
                         successfully flag: Bool)
    {
         if --numClicks > 0
         {
             let now = NSDate()
             let duration = now.timeIntervalSinceDate(buttonClickTime!)
    
             // If the button click was less than 0.5 seconds before
             if duration < 0.5 
             {
                 // Play the song again
                 player.play();
             } 
         }
    }