如何在播放时在标签中获取AVAudioplayer中的当前时间

问题描述 投票:-2回答:3

我尝试构建一个应用程序来播放mp3文件,我希望获得当前时间和持续时间,以便在播放时将其显示在2个标签中。

我使用了这段代码,在持续时间内显示了歌曲的一半时间,

例如:如果歌曲的持续时间是20分40秒,它会显示一半像10:20

但它在当前时间没有取得进展,它显示00:00

谢谢你。

        let duration = Int((player1?.duration)!)
        let minutes2 = duration/60
        let seconds2 = duration - minutes2 * 60
        durLabel.text = NSString(format: "%02d:%02d", minutes2,seconds2) as String


        let currentTime1 = Int((player1?.currentTime)!)
        let minutes = currentTime1/60
        let seconds = currentTime1 - minutes * 60
        curLabel.text = NSString(format: "%02d:%02d", minutes,seconds) as String
swift mp3 avaudioplayer duration
3个回答
3
投票
    // this is to compute and show remaining time
    let duration = Int((player1?.duration - (player1?.currentTime))!)
    let minutes2 = duration/60
    let seconds2 = duration - minutes2 * 60
    durLabel.text = NSString(format: "%02d:%02d", minutes2,seconds2) as String

    //This is to show and compute current time
    let currentTime1 = Int((player1?.currentTime)!)
    let minutes = currentTime1/60
    let seconds = currentTime1 - minutes * 60
    curLabel.text = NSString(format: "%02d:%02d", minutes,seconds) as String

1
投票

玩家当前时间不会自动更新。相反,您必须使用计时器定期更新当前时间。如果您想了解更多详细信息,请查看以下主题。

check avaudioplayer's current playback time


0
投票

如果你有滑块来寻找mp3文件,像这样:

    @IBOutlet weak var slidetOutlet: UISlider!

您可以像这样更新您的UILabel:

     self.lblPlayerTime.text = self.secondsToHoursMinutesSeconds(seconds: Double( self.slidetOutlet.value ))

初始你的播放器和滑块:

func playerInit()  {
    guard let url = URL(string: urlAudio) else {

        return
    }
    do {
        try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
        print("AVAudioSession Category Playback OK")
        do {
            try AVAudioSession.sharedInstance().setActive(true)
            print("AVAudioSession is Active")
            playerItem = AVPlayerItem(url: url)
            player = AVPlayer(playerItem: playerItem)

            player!.addPeriodicTimeObserver(forInterval: CMTimeMakeWithSeconds(1, 1), queue: DispatchQueue.main) { (CMTime) -> Void in
                if self.player!.currentItem?.status == .readyToPlay {
                    let time : Float64 = CMTimeGetSeconds(self.player!.currentTime());
                    self.slidetOutlet.value = Float ( time )
                    self.slidetOutlet.minimumValue = 0

                    let duration : CMTime = self.playerItem!.asset.duration
                    let seconds : Float64 = CMTimeGetSeconds(duration)

                    self.slidetOutlet.maximumValue = Float(seconds)
                    self.lblStartTimePlayer.text = self.secondsToHoursMinutesSeconds(seconds: seconds)

                    self.lblPlayerTime.text = self.secondsToHoursMinutesSeconds(seconds: Double( self.slidetOutlet.value ))

                }
            }

        } catch let error as NSError {
            print(error.localizedDescription)
        }
    } catch let error as NSError {
        print(error.localizedDescription)
    }
}

并转换时间:

func secondsToHoursMinutesSeconds (seconds : Double) -> (String) {
    let (hr,  minf) = modf (seconds / 3600)
    let (min, secf) = modf (60 * minf)
    return ("\(Int(hr)):\(Int(min)):\(Int(60 * secf))")
}
© www.soinside.com 2019 - 2024. All rights reserved.