iOS 播放声音系列(一): 系统声音

最近开发App时,需要用到声音服务。在查阅资料和文档后,发现iOS上播放声音有好几种方法。准备针对每种方法写一篇文章来详细说明。一来可以推动自己查阅文档教程来对声音播放进行深入了解,二来希望可以帮忙到有需要的人。

简介

iOS 播放声音有很多种方式,其中系统声音服务应该是最简单的了。但我们使用起来要小心,因为使用系统声音服务时会有一些限制

  • 声音不能超过30秒
  • 支持的文件格式有限,具体的说只有CAF、AIF和使用PCM或IMA/ADPCM数据的WAV文件。

三种类型

播放系统声音有三种类型:

  • 声音:立刻播放一个简单的声音文件。如果手机静音,则用户什么也听不见。
  • 提醒:播放一个声音文件,如果手机设为静音或震动,则通过震动提醒用户。
  • 震动:震动手机,而不考虑其他设置。

具体代码实现

声音类型

1
2
3
4
5
6
7
8
9
10

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)

提醒类型

1
2
3
4
5
6
7
8
9
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)

震动类型

1
2
3
4
import AudioToolbox

let soundID = SystemSoundID(kSystemSoundID_Vibrate)
AudioServicesPlaySystemSound(soundID)

结束回调

1
2
3
AudioServicesAddSystemSoundCompletion(soundID, nil, nil, { (soundID, clientData) in
print("End of playing voice.")
}, nil)

说再多,都不如一个Demo,GitHub地址请戳这里

总结

  • 记得import AudioToolbox系统库
  • 使用系统声音时要注意声音文件的一些限制
  • 系统声音服务有三种类型,它们之间有一些细小区别,使用时注意选择适合自己需求的类型
  • 如果你需要获取播放结束时的回调接口,使用AudioServicesAddSystemSoundCompletion,三种类型都支持结束回调