-音频播放
1.录音功能实现
- AVFoundation框架
- 创建一个录音对象
- 设置保存录音文件的位置(沙盒)
- 准备录音
- 开始录音
- 结束录音
// 全局的录音对象属性
var record: AVAudioRecorder?
// 测试方法
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
// 开始录音
print("开始录音")
// 1. 先在沙盒里面创建一个文件路径
let path = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).first!
// 拼接文件的保存路径
let fullPath = path + "/test.caf"
// 转换为url
let url = NSURL(string: fullPath)
// 设置配置选项
let configDic: [String: AnyObject] = [
"a": "" // 字典的配置选项
]
// 创建录音对象
do {
// 参数1: 录音文件, 需要存放的路径
// 参数2: 录音的配置选项
record = try AVAudioRecorder(URL: url!, settings: configDic)
}catch {
print(error)
return
}
// 准备录音(系统会给我们分配资源)
record?.prepareToRecord()
// 开始录音
// record?.record()
// 从某个时间点开始录音
// record?.recordAtTime((record?.deviceCurrentTime)! + 2)
// 从当前时间点, 开始录音, 录音多久
// record?.recordForDuration(2)
// 从哪个时间点,开始录音, 录多久结束
record?.recordAtTime((record?.deviceCurrentTime)! + 2, forDuration: 3)
}
// 触摸结束的时候停止录音
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
print("结束录音")
// 结束录音
// record?.stop()
}
2.音乐播放
- 也是 AVFoundation框架
- 实现步骤
- 创建一个音频会话(AVAudioSession)单例
- 设置会话的类型,用于控制音频播放的类型(后台前台等其他类型)--- setCategory
- 设置好会话的类型之后,激活会话(setActive)
- 之后是创建一个音频播放器AVAudioPlayer
- 加载音频文件的url
- 准备播放
func playBack() -> () {
// 1. 获取音频会话(单例)
let share = AVAudioSession.sharedInstance()
// 2. 设置会话的类型(后台前台...)
do {
try share.setCategory(AVAudioSessionCategoryPlayback)
// 3. 激活会话
try share.setActive(true)
}catch {
print(error)
return
}
}
lazy var player: AVAudioPlayer? = {
// 1. 创建一个播放器
let player: AVAudioPlayer?
// 得到文件路径的url
guard let url = NSBundle.mainBundle().URLForResource("简单爱.mp3", withExtension: nil) else {
return nil
}
do {
// 虽然接收的参数是nsurl, 但是只能, 播放本地音乐, 远程, 不能播放
// 如果想要播放多首音乐,必须创建多个播放器才可以
player = try AVAudioPlayer(contentsOfURL: url)
}catch {
print(error)
return nil
}
// 设置代理, 接收事件
player?.delegate = self
// 启动倍速播放功能,一定要放在, 准备播放之前
player?.enableRate = true
// 准备播放
player?.prepareToPlay()
return player
}()
// 开始播放
@IBAction func play(sender: AnyObject) {
// 获取音频会话
playBack()
// 开始播放
player?.play()
}
// 暂停
@IBAction func pause(sender: AnyObject) {
player?.pause()
}
// 停止
@IBAction func stop(sender: AnyObject) {
// 现将当前的时间设置为0
player?.currentTime = 0
player?.stop()
}
// 快进
@IBAction func kuaijin(sender: AnyObject) {
// 系统内部已经做过了容错处理,
// 不需要处理, 小于零, 或者大于, 音乐总时长, 这样的问题
player?.currentTime += 15
}
// 快退
@IBAction func kuaiBack(sender: AnyObject) {
player?.currentTime -= 15
}
// 倍速播放
@IBAction func rate(sender: AnyObject) {
player?.rate = 5.0
}
@IBAction func shengyin(sender: UISlider) {
player?.volume = sender.value
}
}
extension ViewController: AVAudioPlayerDelegate {
func audioPlayerDidFinishPlaying(player: AVAudioPlayer, successfully flag: Bool) {
print("播放完成")
}
}