使用懒加载创建AVFoundation
class ViewController: UIViewController {
//MARK:- 懒加载 通过闭包创建
lazy var record : AVAudioRecorder? = {
/**
参数:
url: 文件存储路径
settings:录音的设置项
*/
//这个方法只能取出路径 而不能创建路径
var path = (NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).first)!
path = path + "/CustomeAudio"
do {
try FileManager.default.createDirectory(atPath: path, withIntermediateDirectories: true, attributes: nil)
}catch {
print(error)
}
let filePath = path + "/test.caf"
let fileURL = NSURL(string: filePath)!
let configDic:[String : AnyObject] = [
// 编码格式
AVFormatIDKey: NSNumber(value: Int32(kAudioFormatLinearPCM)),
// 采样率
AVSampleRateKey: NSNumber(value: 11025.0),
// 通道数
AVNumberOfChannelsKey: NSNumber(value: 2),
// 录音质量
AVEncoderAudioQualityKey: NSNumber(value: Int32(AVAudioQuality.min.rawValue))
]
do {
let record = try AVAudioRecorder(url: fileURL as URL, settings: configDic)
//准备录音:系统会给我们分配一些资源
record.prepareToRecord()
return record
} catch {
print(error)
return nil
}
}()
override func viewDidLoad() {
super.viewDidLoad()
let paths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)
let documentDir = paths[0]
let filePath = documentDir + "/Direct"
do {
try FileManager.default.createDirectory(atPath: filePath, withIntermediateDirectories: true, attributes: nil)
}catch {
print(error)
}
}
//MARK:- 点击屏幕时开始录音
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
//开始录音
print("开始录音")
record?.record()
}
//MARK:- 结束录音
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
//根据当前的录音时间,做处理
let duration = record?.currentTime ?? 0
if duration < 2 {
print("录音时间太短,请重新录制")
record?.stop()
record?.deleteRecording()
return
}
//结束录音
print("录音时间刚刚好,可以保存")
record?.stop()
}
}
网友评论