音频播放的代码

//
//  ViewController.swift
//  02-AVPlayer(音频)
//
//  Created by 余婷 on 16/9/19.
//  Copyright © 2016年 余婷. All rights reserved.
//

import UIKit
import AVFoundation

class ViewController: UIViewController {

    //MARK: - 属性
    lazy var player:AVPlayer = {
    
        return self.creatPlayer()
    }()
    //进度条
    @IBOutlet weak var slider: UISlider!
    //图片
    @IBOutlet weak var imageView: UIImageView!
    //歌词解析器
    let lyricManager = YTAnalysis()
    
    @IBOutlet weak var lyricLabel: UILabel!
    
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //1.注册观察者,去观察播放器播放结束的时刻(AVPlayer在播放完成后,消息中心会自动发送播放完成对应的消息)
        //AVPlayerItemDidPlayToEndTimeNotification ->消息名
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "finishedPlay", name: AVPlayerItemDidPlayToEndTimeNotification, object: nil)
        
        //2.获取播放器的播放进度
        //参数1:时间间隔(每隔多长时间获取一次播放进度),1秒
        //参数2:执行参数3中的任务的队列
        //参数3:每隔1秒需要执行的任务
        self.player.addPeriodicTimeObserverForInterval(CMTimeMake(1, 10), queue: dispatch_get_main_queue()) { (cmCurrent) in
            //闭包中的参数:当前时间(CMTime)
            
            //a.总的时间
            let cmDuration = self.player.currentItem?.duration
            //秒对应的总时间
            let duration = Float((cmDuration?.value)!) / Float((cmDuration?.timescale)!)
            
            //b.秒对应的当前时间
            let current = Float(cmCurrent.value) / Float(cmCurrent.timescale)
            
            //计算百分比
            self.slider.value = current / duration
            
            //获取指定时间对应的歌词
            let str = self.lyricManager.getLyricWithTime(Double(current))
            
            self.lyricLabel.text = str
            
        }
        
        
        
    }

}

//MARK: - 播放进度
extension ViewController{

    @IBAction func sliderAction(sender: UISlider) {
        
        //1.CMTime基础:
        //总时间:总帧数/每一秒播放的帧数
        //当前时间:当前帧数/每一秒播放的帧数
        //将播放器定位到指定的时间
        //在AVPlayer中所有的时间都是以CMTime来确定
        //CMTime中的value属性代表帧数,timeScale代表每一秒播放的帧数。一个CMTime变量确定的真正的时间是value/timescale
        //确定一个第10秒
        //let cmTime = CMTimeMake(100, 10)
        //let cmTime = CMTimeMake(10, 1)
        
        
        //2.定位到指定进度
        //a.拿到当前播放源的总时间(CMTime)
        let cmDuration =  self.player.currentItem?.duration
        //转换成秒单位时间
        let duration = Double((cmDuration?.value)!) / Double((cmDuration?.timescale)!)
        
        //b.根据进度条计算出当前时间
        let currentTime = duration * Double(sender.value)
        
        //c.定位到指定的位置
        self.player.seekToTime(CMTimeMake(Int64(currentTime), 1))
        
    }
    
}

//MARK: - 切换播放源
extension ViewController{

    func finishedPlay() {
        
        print("完成")
        self.changeItem("北京北京")
    }
    
    func changeItem(name:String){
        
        //1.创建新的播放源
        let url = NSURL.init(fileURLWithPath: NSBundle.mainBundle().pathForResource(name, ofType:"mp3")!)
        let newItem = AVPlayerItem.init(URL: url)
        
        //2.替换播放源
        self.player.replaceCurrentItemWithPlayerItem(newItem)
        
        //3.开始播放
        self.player.play()
        
        //4.更新图片
        self.imageView.image = AnalyseMedia.analyseMusic(name+".mp3").artwork
    }
}


//MARK: - 控制音量和速度
extension ViewController{

    @IBAction func rateAction(sender: UIStepper) {
        
        //改变播放速度(0.5-2)
        self.player.rate = Float(sender.value)
        
    }
    
    @IBAction func volumeAction(sender: UIStepper) {
        
        //改变音量(0-1)
        self.player.volume = Float(sender.value)
    }
    
}

//MARK: - 播放和暂停
extension ViewController{

    @IBAction func playAction(sender: UIButton) {
        
        if sender.currentTitle == "播放" || sender.currentTitle == "继续" {
            
            //1.开始播放
            self.player.play()
            
            sender.setTitle("暂停", forState: .Normal)
        }else{
        
            //2.暂停播放
            self.player.pause()
            
            sender.setTitle("继续", forState: .Normal)
        }
    }
    
}

//MARK: - 创建播放器
extension ViewController{

    func creatPlayer()->AVPlayer{
        
        //1.获取播放路径
        let url = NSURL.init(fileURLWithPath: NSBundle.mainBundle().pathForResource("蓝莲花.mp3", ofType: nil)!)
        
        //2.创建播放源
        let item = AVPlayerItem.init(URL: url)
        
        //3.创建播放器对象
        let tPlayer = AVPlayer.init(playerItem: item)
        
        //4.获取歌曲信息
        self.imageView.image = AnalyseMedia.analyseMusic("蓝莲花.mp3").artwork
        
        //5.解析歌词
        self.lyricManager.analysisLyricWithPath(NSBundle.mainBundle().pathForResource("蓝莲花.lrc", ofType: nil))
        
        return tPlayer
    }
}


你可能感兴趣的:(音频播放的代码)