iOS 9音訊應用播放音訊之iOS 9音訊播放進度
iOS 9音訊應用播放音訊之iOS 9音訊播放進度
iOS 9音訊應用開發播放進度
音訊檔案在播放後經過了多久以及還有多久才可以播放完畢,想必是使用者所關注的問題。為了解決這一問題,在很多的音樂播放器中都會有一個播放進度,如圖2.32所示。本節將講解兩種檢視播放進度的方法。
圖2.32 QQ音樂
iOS 9音訊應用開發透過進度時間檢視進度
透過時間檢視進度就是在圖2.32中出現的兩個時間,它有一個當前播放的時間,還有一個音訊檔案的總時間。透過這兩個時間,使用者就可以知道音訊檔案播放了多久,還需要多久播放完畢。
1.顯示音訊總時間
對於音訊檔案中總時間的獲取可以使用到AVAudioPlayer類的duration屬性,其語法形式如下:
- var duration: NSTimeInterval { get }
其中,該屬性是一個只讀屬性,獲取的值是一個NSTimeInterval型別(又名Double)的值,它是以秒為單位的。如果要想出現圖2.32中時間的效果,就需要將該值進行轉換,轉換的具體步驟如下:
(1)獲取分鐘數:由於使用duration屬性獲取的值為以秒為單位的,不是使用者所理解的時間。由於音訊檔案往往都是幾分鐘,所以就不需要小時。將秒轉換為分鐘,只需要將duration屬性獲取的值除以60就可以了。其轉換格式如下:
- AVAudioPlayer物件名.duration/60
注意:使用者所理解的時間格式如下:
- 時:分:秒
(2)將分鐘數轉換為整型:由於duration是NSTimeInterval型別即雙精度型別,而分鐘數往往沒有小數點,所以需要將此型別的值轉換為整型,轉換格式如下:
Int(分鐘數)
(3)獲取秒數:對於秒數的獲取就直接使用音訊檔案的總時間減去轉換為整型的分鐘數,其語法形式如下:
- AVAudioPlayer物件名.duration - Int(分鐘數)
(4)將秒數轉為為整型:和為分鐘數轉換型別一樣,需要將獲取的秒數轉換為整型,轉換格式如下:
- Int(秒數)
【示例2-7】以下將以第一個例項為基礎,獲取音訊檔案的總時間,並顯示在Duration Label標註中。具體的操作步驟如下:
(1)將主檢視中的Duration Label標籤控制元件與插座變數durationTime進行關聯。
(2)開啟ViewController.swift檔案,編寫程式碼,實現音訊總時間的獲取。程式碼如下:
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do any additional setup after loading the view, typically from a nib.
- moreSettingsView.hidden=true
- let path=NSBundle.mainBundle().pathForResource("Liekkas", ofType: "mp3")
- ……
- audioEffect?.pan = -1.0
- let durationMinutes:Int=Int(audioEffect!.duration/60) //獲取分鐘數
- let durationSeconds=Int(audioEffect!.duration - Double(durationMinutes * 60)) //獲取秒數
- durationTime.text="\(durationMinutes):\(durationSeconds)"
- }
此時執行程式,會看到如圖2.33所示的效果。
圖2.33 主檢視
2.獲取iOS 9音訊應用開發當前播放的時間
獲取當前播放的時間,我們在2.3.2小節中提到過需要使用到AVAudioPlayer類中的currentTime屬性。
注意:此時獲取的當前播放時間也是NSTimeInterval型別(又名Double)。所以也需要進行轉換,型別與音訊檔案總時間的轉換。
【示例2-8】下面將以第一個例項為基礎,獲取音訊檔案當前播放的時間,並顯示在Current Time Label標註中。具體的操作步驟如下:
(1)將主檢視中的Current Time Label標籤控制元件與插座變數currentTime進行關聯。
(2)開啟ViewController.swift檔案,宣告一個時間定時器,程式碼如下:
- var timer:NSTimer?=nil
- @IBAction func playAudio(sender: AnyObject) {
- audioEffect?.play() //播放聲音
- playButton.setBackgroundImage(UIImage(named: "pauseImage.png"), forState: UIControlState.Normal)
- playButton.addTarget(self, action: ("pauseAudio"), forControlEvents: UIControlEvents.TouchUpInside)
- //建立定時器
- timer=NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: ("updateProgress"), userInfo: nil, repeats: true)
- }
(4)新增updateProgress()方法,實現當前播放時間的更新。程式碼如下:
- func updateProgress(){
- let currentTimeMinutes=Int(self.audioEffect!.currentTime/60) //獲取分鐘數
- let currentTimeSeconds=Int(audioEffect!.currentTime - Double(currentTimeMinutes*60))//獲取秒數
- currentTime.text="\(currentTimeMinutes):\(currentTimeSeconds)"
- }
此時執行程式,會看到如圖2.34所示的效果。當輕拍播放按鈕後,會看到當前時間在不停的進行更新,如圖2.35所示。
圖2.34 初始狀態 圖2.35 更新當前播放時間
注意:當使用者輕拍暫停按鈕後,此時的音訊檔案就會暫停播放,當前播放的時間停止更新,此時需要在pauseAudio()動作中新增一行程式碼,實現此功能,程式碼如下:
- func pauseAudio(){
- audioEffect?.stop() //暫停
- playButton.setBackgroundImage(UIImage(named: "playImage.png"), forState: UIControlState.Normal)
- playButton.addTarget(self, action: ("playAudio:"), forControlEvents: UIControlEvents.TouchUpInside)
- timer?.invalidate() //讓定時器失效
- }
iOS 9音訊應用透過進度條檢視進度
透過進度條檢視進度可以讓使用者更為直接的看出音訊檔案播放了多少,還剩餘多少,在圖2.32中也使用到了此方法。在iOS中有兩個控制元件可以實現進度條的功能:一種是Progress View控制元件;另一種是Slider控制元件。在本書中為了更為直觀的看到音訊檔案多放了多少,還剩多少沒有播放,我們採用Slider實現進度條的功能。
【示例2-9】以下將以第一個例項為基礎,實現透過進度條檢視進度的功能。具體的操作步驟如下:
(1)將主檢視中的Progress Slider滑塊控制元件與插座變數progressSlider進行關聯。
(2)開啟ViewController.swift檔案,在updateProgress()方法中新增一行程式碼,對Slider控制元件的值進行設定,程式碼如下:
- func updateProgress(){
- let currentTimeMinutes=Int(self.audioEffect!.currentTime/60)
- let currentTimeSeconds=Int(Double(audioEffect!.currentTime) - Double(currentTimeMinutes*60))
- currentTime.text="\(currentTimeMinutes):\(currentTimeSeconds)"
- self.progressSlider.value=Float(self.audioEffect!.currentTime/self.audioEffect!.duration)
- }
此時執行程式,會看到如圖2.36所示的效果。當輕拍播放按鈕後,會看到當前時間在不停的進行更新,如圖2.37所示。
圖2.36 初始狀態 圖2.37 更新進度
iOS 9音訊應用拖動進度條播放
在音樂應用中,使用者都可以以拖動進度條的方式指定音訊檔案播放的位置。此功能的實現還需要使用到currentTime屬性。
【示例2-10】以下將以第一個例項為基礎,實現拖動進度條實現播放的功能。具體的操作步驟如下:
- @IBAction func dragPlayAudio(sender: AnyObject) {
- if(audioEffect!.playing){
- //設定當前播放的時間
- audioEffect!.currentTime=Double(progressSlider.value) * Double(audioEffect!.duration)
- }else{
- let alertController = UIAlertController(title: "提示", message: "音樂沒有播放,拖動無效", preferredStyle: UIAlertControllerStyle.Alert)
- let action = UIAlertAction(title: "知道了", style: UIAlertActionStyle.Default){
- (action: UIAlertAction!) -> Void in
- self.audioEffect?.currentTime=0.0
- self.progressSlider.value=0.0
- }
- alertController.addAction(action)
- self.presentViewController(alertController, animated: true, completion: nil)
- }
- }
此時執行程式,在出現的模擬器介面中輕拍播放按鈕,此時iOS 9音訊應用開發音訊檔案就會播放。當開發者拖動進度條中的滑塊後,音訊檔案就會播放滑塊所在位置處的聲音。
注意:拖動iOS 9音訊應用開發進度條播放並需要在音訊檔案播放時實現,否則就會出現“音樂沒有播放,拖動無效”的警告檢視,如圖2.38所示。
圖2.38 警告檢視
本文選自:iOS 9音訊應用開發基礎教程大學霸內部資料,轉載請註明出處,尊重技術尊重IT人!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29597077/viewspace-1973185/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- iOS 9音訊應用播放音訊之ios9音訊基本功能iOS音訊
- iOS 9音訊應用播放音訊之控制播放速度iOS音訊
- iOS 9音訊應用播放音訊之第一個ios9音訊例項iOS音訊
- iOS 9音訊應用播放音訊之第一個ios9音訊例項2iOS音訊
- iOS 9音訊應用播放音訊之播放控制暫停停止前進後退的設定iOS音訊
- iOS 9音訊應用播放音訊之音量設定與聲道設定iOS音訊
- iOS AVAudioPlayer(音訊播放)iOS音訊
- iOS開發:音訊播放、錄音、視訊播放、拍照、視訊錄製iOS音訊
- iOS開發系列--音訊播放、錄音、視訊播放、拍照、視訊錄製(轉)iOS音訊
- iOS實現音訊進度條效果iOS音訊
- 音視訊系列之iOS: 音訊採集 AudioUnitiOS音訊
- 電腦播放音訊聽不到聲音音訊
- iOS開發之簡單音訊播放器iOS音訊播放器
- Android 音視訊開發 - 使用AudioTrack播放音訊Android音訊
- iOS 收款推送訊息語音播報iOS
- iOS音訊-AVAudioSessioniOS音訊Session
- 第 9 章 音訊和視訊音訊
- Android音視訊之MediaPlayer音視訊播放Android
- iOS-音訊-AVAudioSessioniOS音訊Session
- IOS音視訊(二)AVFoundation視訊捕捉iOS
- iOS開發簡單的音訊播放器iOS音訊播放器
- ios中的音訊播放,好文,mark,等待後續iOS音訊
- 視音訊播放音訊
- ios網路學習------9 播放網路視訊iOS
- iOS音訊程式設計之實時語音通訊(對講機功能)iOS音訊程式設計
- iOS 視訊播放之切換清晰度iOS
- iZotope RX 9 音訊修復工具音訊
- iOS 音訊-audioUnit 總結iOS音訊
- iOS 實時音訊採集與播放Audio Unit使用iOS音訊
- 使用soundPool播放音訊音訊
- 帶你用AVPlayer實現音訊和視訊播放音訊
- 火爆的音訊聊天應用Clubhouse音訊恐洩露音訊
- iZotope RX 9 Mac(音訊修復工具)Mac音訊
- android 音訊播放 SoundPoolAndroid音訊
- hqplayer pro 4,音訊播放音訊
- Flutter(十) 音訊+影片播放Flutter音訊
- iOS 視訊剪下、旋轉,視訊新增音訊、新增水印,視訊匯出iOS音訊
- iOS視訊播放(二)iOS