iOS 9音頻應(yīng)用播放音頻之播放控制暫停停止前進(jìn)后退的設(shè)置

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所示。

iOS 9音頻應(yīng)用播放音頻之播放控制暫停停止前進(jìn)后退的設(shè)置

圖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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容