-音頻播放
1.錄音功能實(shí)現(xiàn)
- AVFoundation框架
- 創(chuàng)建一個錄音對象
- 設(shè)置保存錄音文件的位置(沙盒)
- 準(zhǔn)備錄音
- 開始錄音
- 結(jié)束錄音
// 全局的錄音對象屬性
var record: AVAudioRecorder?
// 測試方法
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
// 開始錄音
print("開始錄音")
// 1. 先在沙盒里面創(chuàng)建一個文件路徑
let path = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).first!
// 拼接文件的保存路徑
let fullPath = path + "/test.caf"
// 轉(zhuǎn)換為url
let url = NSURL(string: fullPath)
// 設(shè)置配置選項(xiàng)
let configDic: [String: AnyObject] = [
"a": "" // 字典的配置選項(xiàng)
]
// 創(chuàng)建錄音對象
do {
// 參數(shù)1: 錄音文件, 需要存放的路徑
// 參數(shù)2: 錄音的配置選項(xiàng)
record = try AVAudioRecorder(URL: url!, settings: configDic)
}catch {
print(error)
return
}
// 準(zhǔn)備錄音(系統(tǒng)會給我們分配資源)
record?.prepareToRecord()
// 開始錄音
// record?.record()
// 從某個時間點(diǎn)開始錄音
// record?.recordAtTime((record?.deviceCurrentTime)! + 2)
// 從當(dāng)前時間點(diǎn), 開始錄音, 錄音多久
// record?.recordForDuration(2)
// 從哪個時間點(diǎn),開始錄音, 錄多久結(jié)束
record?.recordAtTime((record?.deviceCurrentTime)! + 2, forDuration: 3)
}
// 觸摸結(jié)束的時候停止錄音
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
print("結(jié)束錄音")
// 結(jié)束錄音
// record?.stop()
}
2.音樂播放
- 也是 AVFoundation框架
- 實(shí)現(xiàn)步驟
- 創(chuàng)建一個音頻會話(AVAudioSession)單例
- 設(shè)置會話的類型浅浮,用于控制音頻播放的類型(后臺前臺等其他類型)--- setCategory
- 設(shè)置好會話的類型之后,激活會話(setActive)
- 之后是創(chuàng)建一個音頻播放器AVAudioPlayer
- 加載音頻文件的url
- 準(zhǔn)備播放
func playBack() -> () {
// 1. 獲取音頻會話(單例)
let share = AVAudioSession.sharedInstance()
// 2. 設(shè)置會話的類型(后臺前臺...)
do {
try share.setCategory(AVAudioSessionCategoryPlayback)
// 3. 激活會話
try share.setActive(true)
}catch {
print(error)
return
}
}
lazy var player: AVAudioPlayer? = {
// 1. 創(chuàng)建一個播放器
let player: AVAudioPlayer?
// 得到文件路徑的url
guard let url = NSBundle.mainBundle().URLForResource("簡單愛.mp3", withExtension: nil) else {
return nil
}
do {
// 雖然接收的參數(shù)是nsurl, 但是只能, 播放本地音樂, 遠(yuǎn)程, 不能播放
// 如果想要播放多首音樂,必須創(chuàng)建多個播放器才可以
player = try AVAudioPlayer(contentsOfURL: url)
}catch {
print(error)
return nil
}
// 設(shè)置代理, 接收事件
player?.delegate = self
// 啟動倍速播放功能殊霞,一定要放在, 準(zhǔn)備播放之前
player?.enableRate = true
// 準(zhǔn)備播放
player?.prepareToPlay()
return player
}()
// 開始播放
@IBAction func play(sender: AnyObject) {
// 獲取音頻會話
playBack()
// 開始播放
player?.play()
}
// 暫停
@IBAction func pause(sender: AnyObject) {
player?.pause()
}
// 停止
@IBAction func stop(sender: AnyObject) {
// 現(xiàn)將當(dāng)前的時間設(shè)置為0
player?.currentTime = 0
player?.stop()
}
// 快進(jìn)
@IBAction func kuaijin(sender: AnyObject) {
// 系統(tǒng)內(nèi)部已經(jīng)做過了容錯處理,
// 不需要處理, 小于零, 或者大于, 音樂總時長, 這樣的問題
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("播放完成")
}
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者