[스위프트 기초] 13장 오디오

    import UIKit
    import AVFoundation
    
    class ViewController: UIViewController, AVAudioPlayerDelegate {
        
        var audioPlayer : AVAudioPlayer!
        var audioFile : URL!
        let MAX_VOLUME : Float = 10.0
        var progressTimer : Timer!
        
        let timePlayerSelector: Selector = #selector(ViewController.updatePlayTime)
    
        @IBOutlet var pvProgressPlay: UIProgressView!
        @IBOutlet var lblCurrentTime: UILabel!
        @IBOutlet var lblEndTime: UILabel!
        @IBOutlet var btnPlay: UIButton!
        @IBOutlet var btnPause: UIButton!
        @IBOutlet var slVolume: UISlider!
        @IBOutlet var btnStop: UIButton!
        
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view.
            audioFile = Bundle.main.url(forResource: "test", withExtension: "mp3")
            initPlay()
        }
        func initPlay() {
            do{
                audioPlayer = try AVAudioPlayer(contentsOf: audioFile)
            }
            catch let error as NSError {
                print ("Error-initPlay : \(error)")
            }
            slVolume.maximumValue = MAX_VOLUME
            slVolume.value = 1.0
            pvProgressPlay.progress = 0
            
            audioPlayer.delegate = self
            audioPlayer.prepareToPlay()
            audioPlayer.volume = slVolume.value
            
            // 재생시간 초기화
            lblEndTime.text = convertNSTimeInterval2String(audioPlayer.duration)
            lblCurrentTime.text = convertNSTimeInterval2String(0)
            
            //오디오 버튼 제어
            setPlayButtons(true, pause: false, stop: false)
        }
        //버튼 여부 설정
        func setPlayButtons(_ play:Bool, pause:Bool, stop:Bool){
            btnPlay.isEnabled = play
            btnPause.isEnabled = pause
            btnStop.isEnabled = stop
        }
        func convertNSTimeInterval2String(_ time: TimeInterval) -> String {
            let min = Int(time/60)
            let sec = Int(time.truncatingRemainder(dividingBy: 60))
            let strTime = String(format: "%02d:%02d",min,sec)  // 시간 String 으로 바꿔줌
            return strTime
        }
        @IBAction func btnPlayAudio(_ sender: UIButton) {
            audioPlayer.play()
            setPlayButtons(false, pause: true, stop: true)
            
            //timer setting
            progressTimer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: timePlayerSelector, userInfo: nil, repeats: true)
        }
        @objc func updatePlayTime() {
            lblCurrentTime.text = convertNSTimeInterval2String(audioPlayer.currentTime)
            pvProgressPlay.progress = Float(audioPlayer.currentTime/audioPlayer.duration)
        }
        @IBAction func btnPauseAudio(_ sender: UIButton) {
            audioPlayer.pause()
            setPlayButtons(true, pause: false, stop: true)
        }
        @IBAction func btnStopAudio(_ sender: UIButton) {
            audioPlayer.stop()
            audioPlayer.currentTime = 0
            lblCurrentTime.text = convertNSTimeInterval2String(0)
            setPlayButtons(true, pause: false, stop: false)
            progressTimer.invalidate()  //무효화
        }
        @IBAction func slChangeVolume(_ sender: UISlider) {
            audioPlayer.volume = slVolume.value
        }
        func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
            progressTimer.invalidate()
            setPlayButtons(true, pause: false, stop: false)
        }
        
    
    }

    댓글