美文网首页
swift中音频播放与系统音频播放方法的封装

swift中音频播放与系统音频播放方法的封装

作者: 估唔到 | 来源:发表于2016-11-25 21:54 被阅读184次

    音效,又称“短音频”,通常在程序中的播放时长为1~2秒,在APP开发的过程中添加音效,经常能起到点缀效果,提升整体用户体验。一些经典的音效往往使用户对其自动关联到APP,比如经典案例“斗地主”。下面简单说下swift中音效的播放以及对系统方法的封装。

    播放音效相关的API封装在AVFoundation框架中,一般来说只需要简单的三部曲,就能实现音效的播放。

    1.定义一个SystemSoundID
    2.根据某一个音效文件,给soundID进行赋值
    3.播放音效

    不过播放音效时一般有四个使用方法,方法区别如下:

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        // 1.定义一个SystemSoundID
        var soundID : SystemSoundID = 0
        
        // 2.根据某一个音效文件,给soundID进行赋值
        guard let fileURL = Bundle.main.url(forResource: "win.aac", withExtension: nil) else { return }
        AudioServicesCreateSystemSoundID(fileURL as CFURL, &soundID)
        
       // 3.播放音效
       // 3.1.最基本播放
         AudioServicesPlaySystemSound(soundID)
       // 3.2.播放音效的同时有震动效果
         AudioServicesPlayAlertSound(soundID)
       // 3.3.基本播放,并且监听播放完成
        
        AudioServicesPlaySystemSoundWithCompletion(soundID, {
            print("音效文件播放完成")
        })
    
      // 3.4.播放有震动效果,并且监听播放完成
        AudioServicesPlayAlertSoundWithCompletion(soundID, {
            print("音效文件播放完成")
        })
    }
    

    如果每次使用时都要逐一寻找方法可能会有些不便,所以我们可以对其进行统一封装。封装的话我们便要考虑参数的传入问题,首先播放的音频应有外界使用者确定,所以根据音频文件来给soundID赋值的文件名应该作为参数传入。其次,几个方法的区别在于是否有震动和是否有回调监听播放完成,那么这两个参数可以使用BOOL值和闭包作为参数传入。为了方便别人调用,我们还可以把isAlert 和 completion两个参数设置默认值。

    class func playAudio(_ audioName : String, _ isAlert : Bool = false,  _ completion : (() -> ())? = nil) {
        // 1.定义一个SystemSoundID
        var soundID : SystemSoundID = 0
        
        // 2.根据某一个音效文件,给soundID进行赋值
        guard let fileURL = Bundle.main.url(forResource: audioName, withExtension: nil) else { return }
        AudioServicesCreateSystemSoundID(fileURL as CFURL, &soundID)
        
        // 3.播放音效
        if isAlert {
            AudioServicesPlayAlertSoundWithCompletion(soundID, completion)
        } else {
            AudioServicesPlaySystemSoundWithCompletion(soundID, completion)
        }
    }
    

    然后外界可以通过我们封装的工具类,直接调用我们的一个方法实现4种不同效果。

    Snip20161125_5.png

    相关文章

      网友评论

          本文标题:swift中音频播放与系统音频播放方法的封装

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