iOS 9音頻應用播放音頻之ios9音頻基本功能

iOS 9音頻應用播放音頻之ios9音頻基本功能

iOS 9音頻應用開發中最爲簡單和經常使用的就是AVFoundation框架中的AVAudioPlayer類。雖然AVAudioPlayer類不能播放網絡上的音頻文件,可是它能夠播放本地音頻文件,以及緩衝區的文件。本章將講解最爲基礎的音頻播放——本地音頻文件的播放。ios

iOS 9音頻應用開發基本功能

實現音頻的播放須要使用到AVAudioPlayer類。AVAudioPlayerAVFoundation.framework框架裏面最基本的一個音頻播放器的類。使用此類能夠實現單個音頻的播放、暫停以及中止等功能。本節將使用AVAudioPlayer類實現一個音頻文件的播放。緩存

iOS 9中的AVAudioPlayer類簡介

AVAudioPlayeriOS 2.2以後引入的AVFoundation.framework框架中的一個類,使用此類能夠實現音頻的播放。表2-1中總結了AVAudioPlayer類中使用到的方法。網絡

2-1  AVAudioPlayer類的方法框架

2-2總結了了AVAudioPlayer類中使用到的屬性。 
字體

2-2  AVAudioPlayer類的屬性ui

注意:Xcode 6.0以後,在建立的項目中,AVFoundation.framework框架默認是被添加到項目中的。若是AVFoundation.framework框架沒有被添加到項目中,就須要開發者手動進行添加。手動添加框架的具體操做步驟以下:url

1)選擇導航窗口中的項目名稱,打開目標窗口,如圖2.1所示。spa

2.1  目標窗口code

2)選擇目標窗口中的Build Phases選項,打開Build Phases面板,如圖2.2所示。orm

2.2  Build Phases面板

3)將Link Binary With Libraries(0 items)打開,會看到一個加號按鈕,如圖2.3所示。

2.3  Link Binary With Libraries(0 items)

4)選擇加號按鈕後,會彈出一個Choose frameworks and libraries to add對話框,如圖2.4所示。

5)在對話框中找到AVFoundation.framework框架,單擊Add按鈕。此時,就會在Link Binary With Libraries中出現添加的框架,如圖2.5所示。這代表此框架已經添加到了項目中。

2.4  Choose frameworks and libraries to add對話框

2.5  添加框架

ios9音頻應用開發準備素材文件

iOS9的遊戲應用中(如例如超級瑪麗)或者是酷狗音樂打開時,常常會有音頻的播放。這些音頻都是應用程序預置的,也就是素材文件。在實現播放本地音頻文件以前,首先須要將預置的音頻文件添加到建立的項目中。添加音頻文件的具體操做步驟以下。

1)在建立項目的導航窗口中右擊,彈出快捷菜單。

2)在彈出的快捷菜單中選擇Add Files to "***"…命令。彈出選擇文件對話框,如圖2.6所示。

3)選擇音頻文件後,單擊Add按鈕,此時被選擇的音頻文件就添加到了建立的項目中。

2.6  添加音頻文件

注意:添加音頻文件到建立的項目中除了以上講解的方式外,還有一種方式,具體的操做步驟以下。

1)找到須要添加到項目中的音頻文件,將其拖動到建立的項目中,彈出Choose options for adding these files:對話框架,如圖2.7所示。

2.7  添加音頻文件

2)單擊Finish按鈕後,音頻文件就添加到了建立的項目中。

注意:在添加音頻文件中提到的兩種方式,除了能夠添加音頻文件外,還能夠添加其餘文件,如圖像文件、字體文件等。

ios9音頻應用開發加載音頻文件

加載音頻文件是爲了對AVAudioPlayer類進行實例化,實例化時須要使用到init()方法,根據init()方法參數需求的不一樣,能夠分爲4種形式,分別爲init(contentsOfURL:)init(data:)init(contentsOfURL:fileTypeHint:)init(data:fileTypeHint:)。如下就是對這四種形式的講解。

1.init(contentsOfURL:)

init(contentsOfURL:)是使用本地音頻文件的地址對AVAudioPlayer類進行實例化。其語法形式以下:

  • init(contentsOfURL url: NSURL) throws

其中,參數urlNSURL對象。NSURL是一個數據類型,實際上就是一個地址,不少開發人員會有疑惑,地址就是一個字符串,爲何還有NSURL類型,那是由於地址分爲絕地路徑(描述目標文件夾的位置)和相對路徑(顯示文件的完整路徑)。對於絕對路徑來講,地址的字符串都會比較複雜,包括不少請求參數。這樣,在請求過程當中須要解析出來每一個部分,因此封裝一個NSURL。因此須要將字符串轉換爲NSURL,對於NSURL的轉換其實能夠使用它的實例化方法init來實現,這個方法中會有一個字符串參數,也就是使用字符串去實例化NSURL方法,其語法形式以下:

  • init(fileURLWithPath path: String)

其中,參數path是一個字符串。此字符串是一個地址(通常來講不一樣部分之間以斜線(/)分隔),這個地址能夠是相對路徑,也能夠是絕對路徑。

注意:參數path是隻能夠是本地文件的地址,不能夠是網絡地址。

2.init(data:)

在前面的內容中提到AVAudioPlayer類不能夠播放從網絡上獲取音頻文件,可是能夠播放從網絡上下載到內存緩衝區的音頻。要實現內存緩衝區音頻的播放,須要使用init()方法的init(data:)方式,其語法形式以下:

  • init(data data: NSData) throws

其中,參數data是一個NSData對象,表示一個音頻數據。因爲是要播放內存緩衝區的音頻,因此NSData對象在建立時須要指定音頻文件的地址,此時須要使用到init()方法的init(contentsOfFile:)形式。

  • init?(contentsOfFile path: String)

其中,參數path是一個字符串,代碼表示文件的絕對路徑。

注意:參數data必須是一個完整的文件。

3.init(contentsOfURL:fileTypeHint:)

方法init(contentsOfURL:)init(data:)都是在具備後綴名的狀況下使用的形式,可是在網絡上下載的音頻文件可能因爲某些緣由沒有後綴名。這時就須要使用到init()方法的init(contentsOfURL:fileTypeHint:)形式以及init(data:fileTypeHint:)init(contentsOfURL:fileTypeHint:)的語法形式以下:

  • init(contentsOfURL url: NSURL,

  •       fileTypeHint utiString: String?) throws

其中,參數urlNSURL對象,此對象的實例化在前面講解過。參數utiString用來指定文件類型的提示,用於提示系統該文件屬於什麼類型。其中,文件類型的提示如表2-3所示。

2-3  文件類型的提示

4.init(data:fileTypeHint:)

init(data:fileTypeHint:)形式的語法形式以下:

  • init(data data: NSData,

  • fileTypeHint utiString: String?) throws

其中,參數urlNSURL對象,此對象的實例化在前面講解過。參數utiString用來指定文件類型的提示,這些提示能夠參考表2-3

ios9音頻應用開發添加音頻文件到緩衝區

對於音頻文件來講,讀取的次數會過於頻繁,這樣不只可能致使存儲卡損耗,還會增長CPU的負擔。爲了解決這一問題,咱們能夠將加載的音頻文件存入到緩衝區中(緩衝區爲暫時放置輸出或輸入數據的地方)。而這一過程須要使用到AVAudioPlayerprepareToPlay()方法,其語法形式以下

  • func prepareToPlay() -> Bool

其中,該方法的返回值類型爲Bool,即布爾類型。當值爲真時,表示將文件放入緩存;反之,則不放入緩存。

ios9音頻應用開發播放音頻

最後一步就是播放音頻,此功能的實現須要使用到AVAudioPlayerplay()方法,其語法形式以下:

  • func play() -> Bool

其中,該方法的返回值類型爲Bool即布爾類型。當值爲真時,表示音頻文件播放成功;反之,則失敗。

本文選自:iOS 9音頻應用開發基礎教程大學霸內部資料,轉載請註明出處,尊重技術尊重IT人!

相關文章
相關標籤/搜索