每次NSTimer递减时播放音频文件一次?

时间:2015-10-04 18:45:31

标签: ios swift avfoundation nstimer

我在Swift工作,我有一个NSTimer从3,2,1倒数。我想每次这个定时器减少时播放一个音频文件,这样定时器就会显示3,音频会播放一次,然后翻到2,音频播放一次,最后播放到1,播放一次。

这就是我创建计时器并尝试这样做的方法:

var path2 = NSBundle.mainBundle().pathForResource("splatter1", ofType: "wav")
    var soundTrack2 = AVAudioPlayer()

    func timeToMoveOn() {
        let loadingDelay = 0.01 * Double(NSEC_PER_SEC)
        let loadingTime = dispatch_time(DISPATCH_TIME_NOW, Int64(loadingDelay))
        dispatch_after(loadingTime, dispatch_get_main_queue()) {
            //After delay
            self.performSegueWithIdentifier("goToGameScene", sender: self)
        }
    }
    func splatterSound() {
        soundTrack2 = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: path2!), error: nil)
        soundTrack2.numberOfLoops = 1
        soundTrack2.volume = 0.35
        soundTrack2.play()
    }

    func updateCounter() {
        countdownTestLabel.text = String(counter--)

        splatterSound()

        if counter == 0 {
            countdown.invalidate()
            //Then trigger segue to Game Scene view
            timeToMoveOn()

        }
    }

在视图中加载:

counter = 3
        countdown = NSTimer.scheduledTimerWithTimeInterval(1, target:self, selector: Selector("updateCounter"), userInfo: nil, repeats: true)

我的问题是每次定时器递减时音频文件都会播放,但它会播放多次。例如,它将一次,然后第二次,然后第三次第四次和第五次全部快速连续。它不应该这样做。

如何解决此问题,以便仅在计时器减少时播放?

1 个答案:

答案 0 :(得分:0)

摆脱soundTrack2.numberOfLoops = 1位。 numberOfLoops设置是重复声音的次数。因此,当您的计时器第一次触发时,您会将声音排队连续播放两次。

然后一秒钟之后,你将声音排队再次连续播放两次。

然后,一秒钟之后,你将你的声音排成队,连续两次播放。

如果您消除该行,声音将默认为numberOfLoops=0,或者只播放一次声音(这就是您想要的声音。)