当前位置: > > > Swift - 歌曲播放样例(附带播放时间和播放进度)

Swift - 歌曲播放样例(附带播放时间和播放进度)

(本文代码已升级至Swift3)

使用MPMoviePlayerController我们可以是进行音乐播放,下面是一个播放器样例。同时,播放时还可以显示播放时间和播放进度。

import UIKit
import MediaPlayer

class ViewController: UIViewController {
    
    //申明一个媒体播放控件
    var audioPlayer = MPMoviePlayerController()
    //申明一个计时器
    var timer:Timer?
    
    //ProgressView控件 播放进度条
    @IBOutlet weak var progressView: UIProgressView!
    //Label控件 播放时间
    @IBOutlet weak var playTime: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        onSetAudio(url: "http://www.hangge.com/mp3/music.mp3")
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
    
    //播放歌曲
    func onSetAudio(url:String){
        //暂停当前歌曲的播放
        self.audioPlayer.stop()
        //获取歌曲文件
        self.audioPlayer.contentURL = URL(string:url)
        //播放歌曲
        self.audioPlayer.play()
        //先停掉计时器
        timer?.invalidate()
        //将计时器归零
        playTime!.text="00:00"
        //开启计时器
        timer = Timer.scheduledTimer(timeInterval: 0.4, target: self,
            selector: #selector(ViewController.onUpdate), userInfo: nil, repeats: true)
    }
    
    //计时器更新方法
    func onUpdate(){
        //返回播放器当前的播放时间
        let c=audioPlayer.currentPlaybackTime
        if c>0.0 {
            //歌曲的总时间
            let t = audioPlayer.duration
            //歌曲播放的百分比
            let p:CFloat=CFloat(c/t)
            //通过百分比设置进度条
            progressView!.setProgress(p, animated: true)
            
            //一个小算法,来实现00:00这种格式的播放时间
            let all:Int=Int(c)
            let m:Int=all % 60
            let f:Int=Int(all/60)
            var time:String=""
            if f<10{
                time="0\(f):"
            }else {
                time="\(f)"
            }
            if m<10{
                time+="0\(m)"
            }else {
                time+="\(m)"
            }
            //更新播放时间
            playTime!.text=time
        }
    }
}
评论3
  • 3楼
    2017-08-14 09:12
    豆豆豆豆

    如何获取视频或者音频的总时间呀,航歌大大

    站长回复

    代码里有啊,audioPlayer.duration 得到的就是音频的总时间。

  • 2楼
    2017-06-05 19:43
    大大大

    航哥哥,及时更新呀 。

    站长回复

    会的,我会一直更新下去的,欢迎常来看看。

  • 1楼
    2017-04-20 16:33
    吴博文

    楼主请上代码

    站长回复

    文章里就是完整的代码啊。