课程笔记文集地址:Udemy课程:The Complete iOS 9 Developer Course - Build 18 Apps
这节课学习如何处理音频文件,实现对音频文件最基本的控制:播放、暂停和音量大小的控制。
最终效果图如下:
一、布局 Storyboard
2 个 UIButton控件(播放,暂停),1个 Slider 控件,修改 2 个 Button 的显示名称。然后给这三个控件 Ctr 拖拽创建 Action 连接,代码如下:
@IBAction func play(sender: AnyObject) {
}
@IBAction func pause(sender: AnyObject) {
}
@IBAction func adjustVolume(sender: UISlider) {
}
注意一下,视频中老师给 Slider 控件创建了 Outlet 连接,不过我发现这里实际上不需要创建这个 Outlet 连接,使用 @IBAction 方法里的参数 sender 就可以完成同样的事情。
区别在于这里,Type 选择 UISlider:
二、有 音频 有关的设置
1、初步设置
首先找到一个音频文件 + 新建一个工程。把 .mp3 文件直接拖到 Xcode 里,注意勾选 Copy items if needed,如下图:
点击 Finish,然后目录里就有了这个音频啦~
2、AVFoundation
在类文件里进行基本设置:
三、代码实现对音频文件的三种控制方式
1、创建音乐的路径
路径使用 NSBundle.mainBundle().pathForResource
方法:
let audioPath = NSBundle.mainBundle().pathForResource("bach", ofType: "mp3")!
2、创建音频控制的实例
player = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: audioPath))
当你敲入这句代码时,会出现报错,这是 Swift 的一个新特性,需要你处理一下错误情况,我们会使用 do catch 语法来完成这个任务。
3、do catch 语法
do {
try player = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: audioPath))
} catch {
// 出现报错在这个地方进行处理
}
4.控制的一些实现情况
player.play() //开始播放音频
player.pause() //停止播放音频
player.volume = ... //音量的大小
分别放入不同的 @IBAction 方法里:
@IBAction func play(sender: AnyObject) {
let audioPath = NSBundle.mainBundle().pathForResource("bach", ofType: "mp3")!
do {
try player = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: audioPath))
player.play()
} catch {
// 出现报错在这个地方进行处理
}
}
@IBAction func pause(sender: AnyObject) {
player.pause()
}
@IBAction func adjustVolume(sender: UISlider) {
player.volume = sender.value
}
运行,有个问题,点击 Pause 按钮,再点击 Play 后,音频文件总是从开头开始播放。这貌似是 重新从头播放 按钮的功能,如果你需要创建这个按钮的话。
那么如何实现暂停后播放,能够继续播放的效果呢?
非常简单,只需要把其中某些部分的代码放到其他地方即可。
5.实现继续播放的功能
override func viewDidLoad() {
super.viewDidLoad()
let audioPath = NSBundle.mainBundle().pathForResource("bach", ofType: "mp3")!
do {
try player = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: audioPath))
} catch {
// 出现报错在这个地方进行处理
}
}
@IBAction func play(sender: AnyObject) {
player.play()
}
@IBAction func pause(sender: AnyObject) {
player.pause()
}
@IBAction func adjustVolume(sender: UISlider) {
player.volume = sender.value
}
在 viewDidLoad 里引入音频文件,就OK啦~