最近开发App时,需要用到声音服务。在查阅资料和文档后,发现iOS上播放声音有好几种方法。准备针对每种方法写一篇文章来详细说明。一来可以推动自己查阅文档教程来对声音播放进行深入了解,二来希望可以帮忙到有需要的人。
简介
iOS 播放声音有很多种方式,其中系统声音服务应该是最简单的了。但我们使用起来要小心,因为使用系统声音服务时会有一些限制
- 声音不能超过30秒
- 支持的文件格式有限,具体的说只有CAF、AIF和使用PCM或IMA/ADPCM数据的WAV文件。
三种类型
播放系统声音有三种类型:
- 声音:播放一个声音文件。但是如果手机静音,用户什么也听不见。
- 提醒:播放一个声音文件,如果手机设为静音或震动,这时会通过震动提醒用户。
- 震动:震动手机,而不考虑其他设置。
具体代码实现
声音类型
import AudioToolbox
var soundID:SystemSoundID = 0
let path = Bundle.main.path(forResource: "msg", ofType: "wav")!
let url = URL(fileURLWithPath: path)
AudioServicesCreateSystemSoundID(url as CFURL, &soundID)
AudioServicesPlaySystemSound(soundID)
提醒类型
import AudioToolbox
var soundID:SystemSoundID = 0
let path = Bundle.main.path(forResource: "msg", ofType: "wav")!
let url = URL(fileURLWithPath: path)
AudioServicesCreateSystemSoundID(url as CFURL, &soundID)
AudioServicesPlayAlertSound(soundID)
震动类型
import AudioToolbox
let soundID = SystemSoundID(kSystemSoundID_Vibrate)
AudioServicesPlaySystemSound(soundID)
结束回调
AudioServicesAddSystemSoundCompletion(soundID, nil, nil, { (soundID, clientData) in
print("End of playing voice.")
}, nil)
总结
- 记得import AudioToolbox系统库
- 使用系统声音时要注意声音文件的一些限制
- 系统声音服务有三种类型,它们之间有一些细小区别,使用时注意选择适合自己需求的类型
- 如果你需要获取播放结束时的回调接口,使用AudioServicesAddSystemSoundCompletion,三种类型都支持结束回调