2016-03-25 8 views
0

Ich spiele einen Song mit AVAudioPlayer und wenn der Song seine 30-Sekunden-Marke erreicht, möchte ich eine Aktion auslösen (rufen Sie eine Funktion). Ich weiß, wie dies zu tun, wenn der Song wie dies abgeschlossen ist:Swift: Funken Aktion in bestimmten Teilen des Songs (avaudioplayer)

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 
} 

Aber ich mag etwas ähnliches tun, aber wenn der Song 30 Sekunden getroffen. Ist das möglich? Im Moment muss ich NSTimers verwenden, aber es ist nicht zuverlässig.

Vielen Dank!

Antwort

0

Nicht sicher, ob das teuer ist, aber es funktioniert sehr gut.

Zuerst i laufen eine Schleife, die "checkForStrobe" eine Menge Anrufe:

var dpLink : CADisplayLink? 
dpLink = CADisplayLink(target: self, selector: "checkForStrobe") 
dpLink?.addToRunLoop(NSRunLoop.currentRunLoop(), forMode: NSRunLoopCommonModes) 

Dann einfach Ich habe diese Funktion in meinem 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() 
    } 
} 

Das ist mein Problem gelöst.

Verwandte Themen