(譯)Iphone開發之音頻101 (第一部分): 文件和數據類型


    免責申明(必讀!):本博客提供的所有教程的翻譯原稿均來自於互聯網,僅供學習交流之用,切勿進行商業傳播。同時,轉載時不要移除本申明。如產生任何糾紛,均與本博客所有人、發表該翻譯稿之人無任何關系。謝謝合作!

 

原文鏈接地址:http://www.raywenderlich.com/204/audio-101-for-iphone-developers-file-and-data-formats

 

本教程由大俠自來翻譯,泰然論壇翻譯組校對,感謝大俠自來也

 

  在做iphone開發之前,我(ray)對聲音格式了解的相當少。我知道一些“wav”“mp3”聲音格式的差異,但是我肯定不能准確地告訴你“AAC”“CAF”是什么格式的聲音文件,同時也不知道在MAC上最好的轉換音頻文件的方法是什么。

  我深知,假如你想要成為一名合格的iphone開發者,你必須對聲音文件數據格式,轉換,錄音和使用什么音頻操作API有個基本的了解。

  這篇文章是三篇涵蓋音頻開發教程中的第一篇。在這篇文章中,我們將會從文件和數據格式開始。

文件格式和數據格式

   首先我們要知道的是,對每個音頻文件有兩部分:1是文件格式(也叫音頻容器),2是數據格式(也叫音頻編碼)。

  文件格式(或者是音頻容器)描述了這個文件它自己的格式。它里面的實際音頻數據能使用很多不同的方式編碼。例如,一個后綴為caf的文件是一種文件格式,它能夠包含用MP3、線性pcmlpcm和其他許多格式編碼的音頻數據。

    接下來讓我們更深入些。

數據格式(音頻編碼)

  我們接下來將要開始了解音頻編碼,而不是文件格式,因為音頻編碼才是最重要的。

  以下是iphone支持的的音頻數據編碼格式和針對每個的描述:

  •  AACaac其實是高級音頻編碼(advanced audio coding)”的縮寫,它是被設計用來取代MP3格式的。你可能會想,它壓縮了原始的聲音,導致容量占用少但是質量肯定會有所下降。不過這些質量的損失取決於聲音比特率的大小,當比特率合適的時候,這些損失人耳是很難聽出來的。事實上,aacmp3有更好的壓縮率,特別是在比特率低於128bit/s的時候 
  •  HE-AACHE-AACAAC的一個超集,這個“HE”代表的是“High efficiency”。 HE-AAC是專門為低比特率所優化的一種音頻編碼格式,比如streaming audio就特別適合使用這種編碼格式
  • AMRAMR全稱是“Adaptive Multi-Rate”它也是另一個專門為“說話(speech)”所優化的編碼格式,也是適合低比特率環境下采用。
  • ALAC:它全稱是“Apple Lossless”,這是一種沒有任何質量損失的音頻編碼方式,也就是我們說的無損壓縮。在實際使用過程中,它能夠壓縮40%-60%的原始數據。這種編碼格式的解碼速度非常快,這對iphone或者ipod這種小型設備來說非常適合。
  • iLBC: 這是另一種專門為說話所設計的音頻編碼格式,它非常適合於IP電話等其它需要流式音頻的場合。
  • IMA4: 這是一個在16-bit音頻文件下按照41的壓縮比來進行壓縮的格式。這是iphone上面一種非常重要的編碼格式,我們將在以后討論原因。
  •  Linear PCM它的中文意思是基於線性脈沖編碼調制,用於將模擬聲音數據轉換成數字聲音數據。簡而言之,就是意味着無壓縮數據。由於數據是非壓縮的,它可以非常快的播放,並且當空間不是問題時,這是在iphone上面首選的音頻編碼方式。
  •  μ-law and a-law: 就我所知道的,這種編碼是交替的編碼模擬數據為數字格式數據,但是在speech優化方面比linear PCM更好。
  • ·MP3: 這種格式是我們都知道也喜歡的,雖然很多年過去了,但MP3到目前為止仍然是一種非常流行的編碼格式,它也能被iphone很好地支持。

我們到底選擇什么編碼格式?

  上面的看起來是張很大的表,但是實際上只有一些是我們做開發時首選的。在具體做選擇的時候,你必須記住以下幾點:

  • 你可以播放linear PCM, IMA4和一些其它沒有壓縮的或者簡單壓縮的音頻格式,這些格式可以很好地被iphone的硬件解碼。
  • 對於更多高級的壓縮格式,例如AACMP3,和ALACiphone並沒有提供硬件編解碼器的支持來很快解壓縮這些數據,並且在一個時候只能處理一個文件。因此,假如你播放超過一個使用這些編碼的音頻文件,系統將選擇使用軟件來解碼,那樣會比較慢,還會占用CPU

  因此選擇什么樣的數據格式,這里有兩條建議:

  • 假如空間不是問題,那么使用linear PCM來編碼每個音頻。這樣不僅使你的音頻最快地播放,而且你能夠在不占用CPU資源的情況下同時播放多個聲音。
  • 假如空間是問題,你大多數時候要使用AAC來編碼你的背景音樂和IMA4來編碼你的音效。

Linear PCM的許多變種

  還有一個很重要的關於linear PCM問題需要強調,那就是這種無壓縮的數據格式是iphone上面編程首選的。針對不同的數據存儲,這里有一些linear PCM變種。這些數據可以使用高尾數或者低尾數格式來儲存,它們之間的差別,就像浮點型和整型它們占用的位寬不同。

  這里最重要的一件事就是,在iphone上面首選的linear PCM是低尾數(little-endian)格式的16位整型,或者是"LEI16"(好像是一種編碼格式,apple caf audio format code: LEI16, ios設備的音頻格式是16位低尾數編碼)。這個是和Mac os x不一樣的,它使用的是本地32位浮點型尾數編碼。因為音頻文件經常要在Mac上面創建,所以檢查文件並把他們轉換為iphone首選的音頻編碼格式是個很好的主意。

文件格式(音頻容器)

  iphone支持很多文件格式,包括MPEG-1 (.mp3), MPEG-2 ADTS (.aac), AIFF, CAF, and WAVE。但是最重要的事是你可以只使用CAF,因為它能包含任何iphone支持的編碼格式的數據,在iPhone上面它是推薦的文件格式。

  (譯者:在這里我在啰嗦點,其實文件格式就像是桶一樣,里面可以裝很多水,那些水就是那些音頻數據。桶有很多種,也就是有很多種文件格式,而且不一樣的桶,也需要裝不同的水。CAF這種桶就可以裝各種各樣的水,不過有些就只能裝幾種類型的水。希望我這樣的比喻你可以很好的理解。

比特率

  這有一個有關音頻編碼很重要的術語,我們接下來會提及:比特率。

  比特率是音頻文件每秒占據的字節數(比特數)。一些像AAC或者MP3編碼會指定音頻文件壓縮的比特數。當你在使用比較低的比特率時,你將會丟失聲音質量。

  你應該根據特定的聲音文件的不同來選擇不同的比特率,試着使用不同的比特率,來比較哪個是最合適的,在聲音文件大小和聲音質量之間做一些權衡。假如你的文件大多數是語音說話數據,你可以使用比較低的比特率。

  這里有一個表,給你一個最常見的比特率的概述:

  • 32kbit/s: 調幅(AM)廣播的質量
  • 48kbit/s: 一般比較長時間的語音播客的比特率
  • 64kbit/s: 一般正常長度的語音播客的比特率
  • 96kbit/s: 調頻(FM)廣播的質量
  • 128kbit/s: 大多數MP3音樂的比特率
  • 160kbit/s: 那些很喜歡音樂的,想要聽覺感受的人更喜歡的在128kbit/s之上的一個比特率
  • 192kbit/s: 數字電台的質量
  • 320kbit/s: 在這個比特率下人們幾乎和CD的播放效果一樣,不能區別
  • 500kbit/s-1,411kbit/s: 無損的音頻編碼,就像linear PCM

采樣率

  在我們繼續介紹音頻之前,這里還有一個術語我們需要了解一下,就是:采樣率。

  當轉換一個模擬信號到數字格式,采樣率表示多久抽取一次聲音波形試樣來轉換成一個數字信號。

  大多情況下,44100Hz是被經常使用的,因為這和CD音頻一樣的采樣率。

 

     更多關於iphone音頻格式及音頻操作的文章,可以去大俠自來也的主頁看看。 

 

    要論壇交流,請點擊傳送門


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM