84课:播放、暂停和音量控制

课程笔记文集地址:Udemy课程:The Complete iOS 9 Developer Course - Build 18 Apps

这节课学习如何处理音频文件,实现对音频文件最基本的控制:播放、暂停和音量大小的控制。

最终效果图如下:


84课:播放、暂停和音量控制_第1张图片

一、布局 Storyboard

2 个 UIButton控件(播放,暂停),1个 Slider 控件,修改 2 个 Button 的显示名称。然后给这三个控件 Ctr 拖拽创建 Action 连接,代码如下:

    @IBAction func play(sender: AnyObject) {   
    }
    
    @IBAction func pause(sender: AnyObject) {      
    }
    
    @IBAction func adjustVolume(sender: UISlider) {
    }

注意一下,视频中老师给 Slider 控件创建了 Outlet 连接,不过我发现这里实际上不需要创建这个 Outlet 连接,使用 @IBAction 方法里的参数 sender 就可以完成同样的事情。

区别在于这里,Type 选择 UISlider:


84课:播放、暂停和音量控制_第2张图片

二、有 音频 有关的设置

1、初步设置

首先找到一个音频文件 + 新建一个工程。把 .mp3 文件直接拖到 Xcode 里,注意勾选 Copy items if needed,如下图:

84课:播放、暂停和音量控制_第3张图片

点击 Finish,然后目录里就有了这个音频啦~

84课:播放、暂停和音量控制_第4张图片

2、AVFoundation

在类文件里进行基本设置:


84课:播放、暂停和音量控制_第5张图片

三、代码实现对音频文件的三种控制方式

1、创建音乐的路径

路径使用 NSBundle.mainBundle().pathForResource 方法:

let audioPath = NSBundle.mainBundle().pathForResource("bach", ofType: "mp3")!

2、创建音频控制的实例

player = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: audioPath))

当你敲入这句代码时,会出现报错,这是 Swift 的一个新特性,需要你处理一下错误情况,我们会使用 do catch 语法来完成这个任务。

3、do catch 语法

        do {            
            try player = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: audioPath))           
        } catch {          
            // 出现报错在这个地方进行处理          
        }

4.控制的一些实现情况

player.play() //开始播放音频
player.pause() //停止播放音频
player.volume = ... //音量的大小

分别放入不同的 @IBAction 方法里:

    @IBAction func play(sender: AnyObject) {
        let audioPath = NSBundle.mainBundle().pathForResource("bach", ofType: "mp3")!
        do {            
            try player = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: audioPath))    
            player.play()       
        } catch {          
            // 出现报错在这个地方进行处理          
        }            
    }
    
    @IBAction func pause(sender: AnyObject) {      
        player.pause()       
    }

    @IBAction func adjustVolume(sender: UISlider) {
        player.volume = sender.value
    }

运行,有个问题,点击 Pause 按钮,再点击 Play 后,音频文件总是从开头开始播放。这貌似是 重新从头播放 按钮的功能,如果你需要创建这个按钮的话。

那么如何实现暂停后播放,能够继续播放的效果呢?

非常简单,只需要把其中某些部分的代码放到其他地方即可。

5.实现继续播放的功能

    override func viewDidLoad() {
        super.viewDidLoad()        
        let audioPath = NSBundle.mainBundle().pathForResource("bach", ofType: "mp3")!        
        do {            
            try player = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: audioPath))        
        } catch {            
            // 出现报错在这个地方进行处理       
        }   
    }
    @IBAction func play(sender: AnyObject) {
        player.play()
    }

    @IBAction func pause(sender: AnyObject) {      
        player.pause()       
    }

    @IBAction func adjustVolume(sender: UISlider) {
        player.volume = sender.value
    }

在 viewDidLoad 里引入音频文件,就OK啦~

你可能感兴趣的:(84课:播放、暂停和音量控制)