美文网首页程序员
84课:播放、暂停和音量控制

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

作者: sing_crystal | 来源:发表于2016-05-28 17:14 被阅读139次

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

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

    最终效果图如下:


    一、布局 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:


    二、有 音频 有关的设置

    1、初步设置

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


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

    2、AVFoundation

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


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

    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课:播放、暂停和音量控制

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