如何节省音频时间?

时间:2017-03-27 13:07:33

标签: ios swift audio

我有AVAudioPlayer。在第一个会话中(当用户暂停音频时)我想保存已经过的音轨时间和持续时间。并开始在下一个会话中播放保存的时间(例如在iBooks应用程序中)。最好的方法是什么?

我的代码以标签显示时间

@IBOutlet var timeElapsed: UILabel!
@IBOutlet var timeDuration: UILabel!

@IBAction func play(sender: AnyObject) {
    if !audioPlayer.isPlaying{
        audioPlayer.play()
        slider.maximumValue = Float(audioPlayer.duration)
        slider.value = 0.0
        timer = Timer(timeInterval: 0.0, target: self, selector: #selector(self.updateTime), userInfo: nil, repeats: true)
        RunLoop.main.add(timer!, forMode: .commonModes)
}

func updateTime() {

    let currentTime = Int(audioPlayer.currentTime)
    let minutes = currentTime/60
    let seconds = currentTime - minutes * 60

    let durationTime = Int(audioPlayer.duration) - Int(audioPlayer.currentTime)
    let minutes1 = durationTime/60
    let seconds1 = durationTime - minutes1 * 60
    timeElapsed.text = NSString(format: "%02d:%02d", minutes,seconds) as String
    timeDuration.text = NSString(format: "-%02d:%02d", minutes1,seconds1) as String
}

2 个答案:

答案 0 :(得分:0)

您可以使用NSUserDefaults在多个应用启动时保存信息。

当用户点击暂停按钮时,您可以将AudioSession的经过时间和持续时间保存到NSUserDefaults,如下所示:

func pauseClick()
{
  if audioPlayer.isPlaying
  {
    UserDefaults.standard.set(player.currentTime, forKey: "ElapsedDuration")
    UserDefaults.standard.set(player.duration, forKey: "TotalDuration")
    UserDefaults.standard.synchronize()
    audioPlayer.pause();
  }
}

每当你开始下一个会话时,只需通过调用这些方法从userDefaults获取信息。

func setUpNewAudioPlayer()
{
        let player:AVAudioPlayer = AVAudioPlayer()
        //before setting current time, make sure you set URL for player 
        player.currentTime  = self.getElapsedDuration()
}

func getTotalDuration() -> (TimeInterval)
{
   let timeInterval = UserDefaults.standard.value(forKey: "TotalDuration")
    return timeInterval != nil ? timeInterval as! TimeInterval : 0
}

func getElapsedDuration() -> (TimeInterval)
{
    let timeInterval = UserDefaults.standard.value(forKey: "ElapsedDuration")
    return timeInterval != nil ? timeInterval as! TimeInterval : 0
}

这会起作用!!

答案 1 :(得分:-1)

查看NSUserDefaults的文档。

NSUserDefaults

我认为这是将当前时间保存到字典中的最佳方式。