Swift 4-AVAudioPlayer从UISlider设置currentTime

时间:2018-07-10 02:38:45

标签: ios swift avaudioplayer

我有一个AvAudioPlayerUISlider,目前我可以将currentTime设置为AvAudioPlayer的{​​{1}},如下所示:

timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: (#selector(RecordController.updateTimer)), userInfo: nil, repeats: true)

@objc func updateTimer() {
    if(audio != nil) {
       audioSlider.setValue(Float((self.audio?.currentTime)! / (self.audio?.duration)!), animated: false)
    }
}

但是在更改currentTime的值时如何设置AVAudioPlayer的{​​{1}}?

UISlider

3 个答案:

答案 0 :(得分:1)

您可以使用AVAudioPlayer的currentTime属性:

@IBAction func audioSliderUpdated(_ sender: Any) {
  if let slider = sender as? UISlider {
    self.audio?.currentTime = slider.value    
  }
}

答案 1 :(得分:0)

使用此值,滑块值会根据时间而变化

 @IBAction func slide(_ sender: UISlider) {
    self.audio.currentTime = TimeInterval(slider.value)
}

答案 2 :(得分:0)

您必须根据媒体文件将滑块值转换为新值。

首先,您必须配置滑块值以使用归一化值(从0.0到1.0)

/// call this on viewDidLoad: configDefaults(for: audioSlider)
func configDefaults(for slider: UISlider)
    slider.minimumValue = 0.0
    slider.maximumValue = 1.0
}

然后,您应该根据currentTimeaudioSlider.value计算duration,然后将其设置为player.currentTime

@IBAction func audioSliderUpdated(_ sender: Any) {
    guard let slider = sender as? UISlider,
        let player = audio else {
        return
    }
    player.currentTime = Double(slider.value) * player.duration
}