美文网首页
日常随笔第十二弹-简单的音乐播放器

日常随笔第十二弹-简单的音乐播放器

作者: 没有北方的南方 | 来源:发表于2016-07-30 17:14 被阅读15次
    • 音乐播放器
    import UIKit
    import AVFoundation
    
    enum Mode {//定义三种音乐播放模式
        case repeatSong
        case repeatOneSong
        case random
    }
    
    var playmd : Mode = .repeatSong//初始化播放模式
    
    
    class ViewController: UIViewController, AVAudioPlayerDelegate {
        var audio : AVAudioPlayer?
        var times : NSTimer!
        var i = 0
        
        
        let url1 = ["Justin Bieber&Ludacris-Baby", "One Direction-Steal My Girl (Live Acoustic Session)", "Damien Rice&Lisa Hannigan-9 Crimes"]
        
        @IBOutlet weak var progressView: UIProgressView!
        
        //播放暂停键
        @IBAction func avaudio(sender: UIButton) {
            buttonPlayChangePause()
            play()
            
        }
        
        //下一首歌播放键
        
        
        @IBAction func nextplaying(sender: UIButton) {
            
            progressView.progress = 0
            switch playmd {
            case .random:
                i = Int(arc4random_uniform(UInt32(url1.count-1)))
                
            default:
                if(i >= url1.count-1){
                    i = 0
                    
                }
                    
                else{
                    i += 1
                    
                }
    
            }
            playing()
            play()
        }
        
        
        //上一首歌播放键
        @IBAction func beforPlaying(sender: AnyObject) {
            progressView.progress = 0
            
            switch playmd {
            case .random:
                i = Int(arc4random_uniform(UInt32(url1.count-1)))
            default:
                if(i <= 0){
                    i = url1.count-1
                    
                }
                    
                else{
                    i -= 1
                    
                }
                
            }
            playing()
            play()
        }
        
        
        
        //播放模式切换键
        @IBOutlet weak var changemd: UIButton!
        
        
        @IBAction func changeMode(sender: UIButton) {
            changemd.layer.cornerRadius = 5
            switch playmd {
            
            case .repeatSong:
                playmd = .repeatOneSong
                changemd.setImage(UIImage(named: "play_repeat_one"), forState: .Normal)
                
            case .repeatOneSong:
                playmd = .random
                changemd.setImage(UIImage(named: "play_random"), forState: .Normal)
                
            case .random:
                playmd = .repeatSong
                changemd.setImage(UIImage(named: "play_repeat"), forState: .Normal)
            }
            
            
        }
        
        
        
        //音量调节属性
        @IBOutlet weak var sound: UISlider!
        
        
        
        //播放按钮属性
        @IBOutlet weak var playbutton: UIButton!
        
        //背景图片
        @IBOutlet weak var backgroundImage: UIImageView!
        
        //歌名显示
        @IBOutlet weak var songsName: UILabel!
        
        //歌曲开始播放时间
        @IBOutlet weak var playingTime: UILabel!
        
        //歌曲总时间
        @IBOutlet weak var sumTime: UILabel!
        
        
        override func viewDidLoad() {
            super.viewDidLoad()
            
            sound.value = 0.1//音量调节按钮设置
            progressView.progress = 0//播放进度条初始化
            playing()
            audio?.pause()
            playbutton.selected = false
            
            
        }
        
        //AVAudioPlayerDelegate协议方法
        func audioPlayerDidFinishPlaying(player: AVAudioPlayer, successfully flag: Bool) {
            print("完成播放")
            
            //完成播放后自动跳到下一首(判断模式)
            switch playmd {
            case .repeatOneSong:
                audio?.numberOfLoops = -1
            case .repeatSong:
                if(i >= url1.count-1){
                    i = 0
                    
                }
                    
                else{
                    i += 1
                    
                }
    
            default:
                i = Int(arc4random_uniform(UInt32(url1.count-1)))
            }
            playing()
        }
        
        //计时器方法:实现了进度条的同步和播放时间同步
        func didtime(times : NSTimer){
            progressView.progress = Float((audio?.currentTime)!/(audio?.duration)!)//计算进度条
            
            audio?.volume = sound.value
            
            playingTime.text = "\(Int((audio?.currentTime)!/60)):\(Int((audio?.currentTime)!%60/10))\(Int((audio?.currentTime)!%60%10))"//播放时间计算
            
            sumTime.text = "\(Int((audio?.duration)!/60)):\(Int((audio?.duration)!%60/10))\(Int((audio?.duration)!%60%10))"//音乐总时间计算
        }
        
        //开始播放音乐
        func playing(){
            
            let url = NSBundle.mainBundle().URLForResource(url1[i], withExtension: "mp3")//将资源url进行存储
            try! audio = AVAudioPlayer(contentsOfURL: url!)//传递url
            
            audio?.enableRate = true
            audio?.numberOfLoops = 0//设置循环播放
            audio?.rate = 1//设置播放速度
            audio?.prepareToPlay()
            audio?.play()
            songsName.text = url1[i]
            
            
            playbutton.selected = true
            audio?.delegate = self
            
        
        }
        
        //切换播放/暂停
        func buttonPlayChangePause() {
            playbutton.selected = !playbutton.selected
            
        }
        
        //判断是否播放
        func play() {
            if playbutton.selected == true{
                audio?.play()
                times = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: #selector(didtime(_:)), userInfo: nil, repeats: true)
            }
            else{
                audio?.pause()
                times?.invalidate()
            }
            
        }
    
    }
    

    相关文章

      网友评论

          本文标题:日常随笔第十二弹-简单的音乐播放器

          本文链接:https://www.haomeiwen.com/subject/aurtsttx.html