Audio playback progress as UISlider in Swift

前端 未结 4 1047
心在旅途
心在旅途 2021-01-31 10:28

I\'ve seen some posts about accomplishing this in Objective-C but I\'ve been unable to do the same via Swift.

Specifically, I can\'t figure out how to implement a

4条回答
  •  陌清茗
    陌清茗 (楼主)
    2021-01-31 11:13

    Just to elaborate on my previous comment, this is how I implemented it and it seems to work pretty well. Any Swift corrections are more than welcome, I'm still an Obj-C guy for now.

    @IBAction func playAudio(sender: AnyObject) {
    
        var playing = false
    
        if let currentPlayer = player {
            playing = player.playing;
        }else{
            return;
        }
    
        if !playing {
            let filePath = NSBundle.mainBundle().pathForResource("3e6129f2-8d6d-4cf4-a5ec-1b51b6c8e18b", ofType: "wav")
            if let path = filePath{
                let fileURL = NSURL(string: path)
                player = AVAudioPlayer(contentsOfURL: fileURL, error: nil)
                player.numberOfLoops = -1 // play indefinitely
                player.prepareToPlay()
                player.delegate = self
                player.play()
    
                displayLink = CADisplayLink(target: self, selector: ("updateSliderProgress"))
                displayLink.addToRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode!)
            }
    
        } else {
            player.stop()
            displayLink.invalidate()
        }
    }
    
    func updateSliderProgress(){
        var progress = player.currentTime / player.duration
        timeSlider.setValue(Float(progress), animated: false)
    }
    

    *I set time slider's range between 0 and 1 on a storyboard

提交回复
热议问题