iOS 9音頻應(yīng)用播放音頻之播放控制暫停停止前進(jìn)后退的設(shè)置
ios9音頻應(yīng)用播放控制
在“iOS 9音頻應(yīng)用播放音頻之ios9音頻基本功能”一文可以看到AVAudioPlayer類有很多的屬性以及方法。本節(jié)將AVAudioPlayer類中常使用到的屬性和方法進(jìn)行詳細(xì)的講解。
ios9音頻應(yīng)用暫停/停止
在音樂應(yīng)用程序中都會(huì)有一個(gè)使音樂停止播放的按鈕。當(dāng)用戶輕拍該按鈕,正在播放的音樂就會(huì)停止。在iOS要想要正在播放的音頻停止下來,可以使用AVAudioPlayer類中的pause()方法和stop()方法。
1.暫停
pause()方法的功能是暫停正在播放的音頻文件,音頻文件仍然準(zhǔn)備從暫停處離開恢復(fù)播放。其語法形式如下:
func pause()
2.停止
stop()方法的功能是停止正在播放的音頻文件,并撤消所需的播放設(shè)置,即如果恢復(fù)播放,音頻文件就需要重新開始播放。其語法形式如下:
func stop()
注意:stop()方法在Xcode 6.0之后和pause的功能是一樣的,但是幫助文檔中對stop()的簡介還是以前的。
【示例2-1】以下將以第一個(gè)實(shí)例為基礎(chǔ),在播放音頻的基礎(chǔ)上實(shí)現(xiàn)暫停音頻播放的功能。代碼如下:
@IBAction func playAudio(sender: AnyObject) {
** audioEffect?.play()** //播放聲音
playButton.setBackgroundImage(UIImage(named: "pauseImage.png"), forState: UIControlState.Normal)
playButton.addTarget(self, action: ("pauseAudio"), forControlEvents: UIControlEvents.TouchUpInside)
}
func pauseAudio(){
**audioEffect?.pause(**) //暫停
playButton.setBackgroundImage(UIImage(named: "playImage.png"), forState: UIControlState.Normal)
playButton.addTarget(self, action: ("playAudio:"), forControlEvents: UIControlEvents.TouchUpInside)
}
此時(shí)運(yùn)行程序,在出現(xiàn)的模擬器界面中輕拍播放按鈕,此時(shí)音頻文件就會(huì)播放,并且播放按鈕會(huì)變?yōu)闀和0粹o;當(dāng)開發(fā)者輕拍暫停按鈕,播放的音頻文件就會(huì)暫停播放,并且暫停按鈕就變?yōu)樵瓉淼牟シ虐粹o。
注意:由于在大多數(shù)的音樂播放器中都不會(huì)出現(xiàn)停止控件,所在在此示例中也就不進(jìn)行代碼實(shí)現(xiàn)了。
ios9音頻應(yīng)用前進(jìn)/后退
在AVAudioPlayer類中有一個(gè)currentTime屬性。該屬性可以用來對當(dāng)前播放的音頻文件的時(shí)長進(jìn)行設(shè)置的,即對當(dāng)前播放的音頻文件的播放位置進(jìn)行設(shè)置。該屬性值以秒為單位的。其語法形式如下:
var currentTime: NSTimeInterval
通過對currentTime屬性的設(shè)置,我們可以實(shí)現(xiàn)在音樂應(yīng)用中的前進(jìn)后退功能。
1.前進(jìn)
前進(jìn)功能就是讓正在播放的音頻文件前進(jìn)幾秒進(jìn)行播放。它的實(shí)現(xiàn)就是讓currentTime屬性設(shè)置的值進(jìn)行固定的加法運(yùn)算。
【示例2-2****】以下將以第一個(gè)實(shí)例為基礎(chǔ),實(shí)現(xiàn)前進(jìn)的功能。具體的操作步驟如下:
(1)將主視圖中的Forward Button按鈕與動(dòng)作forwardAudio進(jìn)行關(guān)聯(lián)。
(2)打開ViewController.swift文件,編寫代碼,實(shí)現(xiàn)前進(jìn)功能。代碼如下:
@IBAction func forwardAudio(sender: AnyObject) {
//判斷音頻文件是否正在播放
if(audioEffect!.playing){
//音頻文件正在播放,實(shí)現(xiàn)前進(jìn)
** let desiredTime=(self.audioEffect?.currentTime)!+20.0**
** **//判斷設(shè)置的時(shí)間是否小于音頻文件的總時(shí)間
if(desiredTime<self.audioEffect?.duration){
**self.audioEffect?.currentTime=desiredTime **//設(shè)置當(dāng)前播放的時(shí)間
}
}else{
let alertController = UIAlertController(title: "提示", message: "音樂沒有開始播放", preferredStyle: UIAlertControllerStyle.Alert)
let action = UIAlertAction(title: "知道了", style: UIAlertActionStyle.Default, handler: nil)
alertController.addAction(action)
self.presentViewController(alertController, animated: true, completion: nil)
}
}
此時(shí)運(yùn)行程序后,在模擬器界面中輕拍播放按鈕,此時(shí)音頻文件就會(huì)開始播放,當(dāng)開發(fā)者輕拍前進(jìn)按鈕后,音頻文件就會(huì)快進(jìn)20秒然后進(jìn)行播放。(每輕拍一次就會(huì)快進(jìn)20秒的進(jìn)度)。
注意:如果開發(fā)者沒有輕拍播放按鈕,而是直接輕拍前進(jìn)按鈕,那么就是彈出“音樂沒有開始播放”的警告視圖,如圖2.25所示。

圖2.25 警告視圖
2.后退
后退功能就是讓正在播放的音頻文件后退幾秒進(jìn)行播放。它的實(shí)現(xiàn)就是讓currentTime屬性設(shè)置的值進(jìn)行固定的減法運(yùn)算。
【示例2-3****】以下將以第一個(gè)實(shí)例為基礎(chǔ),實(shí)現(xiàn)后退的功能。具體的操作步驟如下:
(1)將主視圖中的Backward Button按鈕與動(dòng)作backwardAudio進(jìn)行關(guān)聯(lián)。
(2)打開ViewController.swift文件,編寫代碼,實(shí)現(xiàn)后退功能。代碼如下:
@IBAction func backwardAudio(sender: AnyObject) {
if(audioEffect!.playing){
//實(shí)現(xiàn)后退
**let desiredTime=(self.audioEffect?.currentTime)!-20.0**
//判斷指定的時(shí)間是否為0
if(desiredTime<0){
self.audioEffect?.currentTime=0.0
}else{
**self.audioEffect?.currentTime=desiredTime**
}
}else{
let alertController = UIAlertController(title: "提示", message: "音樂沒有開始播放", preferredStyle: UIAlertControllerStyle.Alert)
let action = UIAlertAction(title: "知道了", style: UIAlertActionStyle.Default, handler: nil)
alertController.addAction(action)
self.presentViewController(alertController, animated: true, completion: nil)
}
}
}
備注:純搬運(yùn),勿責(zé) 詳情原文在這里: http://zhan.renren.com/daxuebatdaren?gid=3602888498065765330&from=template&checked=true