录音,就要用到麦克风了
iOS 设备中,每一个应用 app,都有一个音频会话 Audio Session.
app 调用音频相关,自然会用到 iOS 的硬件功能。
音频会话 Audio Session ,就是来管理音频操作的。
iOS 使用音频,管理粒度很细
你觉得: 后台播放的音乐,要不要与你 app 的音频,混杂在一起?
Audio Session 处理音频,通过他的分类 Audio Session Category 设置
默认的分类,
1, 允许播放,不允许录音。
2, 静音按钮开启后,你的应用就哑巴了,播放音频没声音。
3, 锁屏后,你的应用也哑巴了,播放音频没声音。
4, 如果后台有别的 app 播放音频,你 app 要开始播放音频的时候,别的 app 就哑巴了。
更多分类,如图:
首先要对音频操作,做一些配置。
一般操作音频,会用到 AVFoundation
框架,先引入 import AVFoundation
设置 Audio Session 的分类,AVAudioSession.CategoryOptions.defaultToSpeaker
, 允许我们的 app , 调用内置的麦克风来录音,又可以播放音频。
这里要做录音功能,就把分类的选项也改了。
分类的默认选项是,音频播放的是收听者,即上面的喇叭口,场景一般是你把手机拿到耳朵边,打电话。
现在把音频播放路径, 指向说话的人,即麦克风,下面的喇叭口。
// 这是一个全局变量,记录麦克风权限的
var appHasMicAccess = true
// ...
// 先获取一个 AVAudioSession 的实例
let session = AVAudioSession.sharedInstance()
do {
// 在这里,设置分类
try session.setCategory(AVAudioSession.Category.playAndRecord, options: AVAudioSession.CategoryOptions.defaultToSpeaker)
try session.setActive(true)
// 检查 app 有没有权限,使用该设备麦克风
session.requestRecordPermission({ (isGranted: Bool) in
if isGranted {
// 你的 app 想要录制音频,用户必须授予麦克风权限
appHasMicAccess = true
}
else{
appHasMicAccess = false
}
})
} catch let error as NSError {
print("AVAudio