斯威夫特:歌曲某些部分的火花动作(avaudioplayer)

时间:2016-03-25 01:33:04

标签: swift avfoundation avaudioplayer

我正在使用AVAudioPlayer播放一首歌,当歌曲达到30秒标记时,我想引发一个动作(调用一个函数)。当这首歌完成时,我知道如何做到这一点:

func play(url: NSURL) {
let item = AVPlayerItem(URL: url)

NSNotificationCenter.defaultCenter().addObserver(self, selector: "playerDidFinishPlaying:", name: AVPlayerItemDidPlayToEndTimeNotification, object: item)

let player = AVPlayer(playerItem: item)
player.play()
}

func playerDidFinishPlaying(note: NSNotification) {
// Your code here
}

然而,我想做类似的事情,但是这首歌已经达到了30秒。这可能吗?现在我必须使用NSTimers,但它不可靠。

谢谢!

1 个答案:

答案 0 :(得分:0)

不确定这是否昂贵,但效果很好。

首先我运行一个调用" checkForStrobe"很多:

func checkForStrobe(){
    //This is being called repeatedly checking if its time to run strobe
    if(backgroundAudio.currentTime >= 38.5 && backgroundAudio.currentTime <= 38.6){
        runStrobe()
    }
    if(backgroundAudio.currentTime >= 63.5 && backgroundAudio.currentTime <= 63.6){
        stopStrobe()
    }
    if(backgroundAudio.currentTime >= 125.0 && backgroundAudio.currentTime <= 125.1){
        runStrobe()
    }
    if(backgroundAudio.currentTime >= 150.0 && backgroundAudio.currentTime <= 150.1){
        stopStrobe()
    }
}

然后我把它放在checkForStrobe函数中:

{{1}}

这解决了我的问题。