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

Play audio file once every time NSTimer decrements?

我在 Swift 工作,我有一个从 3、2、1 开始倒计时的 NSTimer。每次这个计时器递减时我都想播放一个音频文件,这样计时器就会显示 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)

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

我该如何解决这个问题,让它只在计时器递减时播放?

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

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

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

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