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

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

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

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

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

override func touchesBegan(_ touches: Set, 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种不同效果。

swift中音频播放与系统音频播放方法的封装_第1张图片
Snip20161125_5.png

你可能感兴趣的:(swift中音频播放与系统音频播放方法的封装)