ios和android的錄音格式

參考文章:
http://blog.csdn.net/kingkong1024/article/details/14004885
英文鏈接地址
http://www.raywenderlich.com/69365/audio-tutorial-ios-file-data-formats-2014-edition
這篇文章中提到兩個問題:
每個音頻文件有兩個部分,一個是文件格式(音頻容器),一個是數據格式(音頻編碼)。音頻容器好比桶,一個桶可以裝好幾種水(音頻編碼)。有的桶可以裝好多種水,有的桶可以裝幾種水。
音頻容器有幾種各種,包括MPEG-1 (.mp3), MPEG-2 ADTS (.aac), AIFF, CAF, and WAVE,音頻編碼有AAC,HE-AAC,ALAC,ILBC,IMA4,lINEAR PCM,μ-law and a-law,MP3
· AAC:aac其實是“高級音頻編碼(advanced audio coding)”的縮寫,它是被設計用來取代MP3格式的。你可能會想,它壓縮了原始的聲音,導致容量佔用少但是質量肯定會有所下降。不過這些質量的損失取決於聲音比特率的大小,當比特率合適的時候,這些損失人耳是很難聽出來的。事實上,aac比mp3有更好的壓縮率,特別是在比特率低於128bit/s的時候。

· HE-AAC:HE-AAC是AAC的一個超集,這個“HE”代表的是“High efficiency”。 HE-AAC是專門爲低比特率所優化的一種音頻編碼格式,比如streaming audio就特別適合使用這種編碼格式。

· AMR:AMR全稱是“Adaptive Multi-Rate”,它也是另一個專門爲“說話(speech)”所優化的編碼格式,也是適合低比特率環境下采用。

· ALAC:它全稱是“Apple Lossless”,這是一種沒有任何質量損失的音頻編碼方式,也就是我們說的無損壓縮。在實際使用過程中,它能夠壓縮40%-60%的原始數據。這種編碼格式的解碼速度非常快,這對iphone或者ipod這種小型設備來說非常適合。

· iLBC: 這是另一種專門爲說話所設計的音頻編碼格式,它非常適合於IP電話等其它需要流式音頻的場合。

· IMA4: 這是一個在16-bit音頻文件下按照4:1的壓縮比來進行壓縮的格式。這是iphone上面一種非常重要的編碼格式,我們將在以後討論原因。

· Linear PCM:它的中文意思是基於線性脈衝編碼調製,用於將模擬聲音數據轉換成數字聲音數據。簡而言之,就是意味着無壓縮數據。由於數據是非壓縮的,它可以非常快的播放,並且當空間不是問題時,這是在iphone上面首選的音頻編碼方式。

· μ-law and a-law: 就我所知道的,這種編碼是交替的編碼模擬數據爲數字格式數據,但是在speech優化方面比linear PCM更好。

· MP3: 這種格式是我們都知道也喜歡的,雖然很多年過去了,但MP3到目前爲止仍然是一種非常流行的編碼格式,它也能被iphone很好地支持。

參考文獻:
http://www.cnblogs.com/Amandaliu/archive/2013/02/04/2891604.html
android Android提供了兩個API用於實現錄音功能:android.media.AudioRecord、android.media.MediaRecorder。
1、AudioRecord

主要是實現邊錄邊播(AudioRecord+AudioTrack)以及對音頻的實時處理(如會說話的湯姆貓、語音)

優點:語音的實時處理,可以用代碼實現各種音頻的封裝

缺點:輸出是PCM語音數據,如果保存成音頻文件,是不能夠被播放器播放的,所以必須先寫代碼實現數據編碼以及壓縮

示例:

使用AudioRecord類錄音,並實現WAV格式封裝。錄音20s,輸出的音頻文件大概爲3.5M左右(已寫測試代碼)

2、MediaRecorder

已經集成了錄音、編碼、壓縮等,支持少量的錄音音頻格式,大概有.aac(API = 16) .amr .3gp

優點:大部分以及集成,直接調用相關接口即可,代碼量小

缺點:無法實時處理音頻;輸出的音頻格式不是很多,例如沒有輸出mp3格式文件

示例:

使用MediaRecorder類錄音,輸出amr格式文件。錄音20s,輸出的音頻文件大概爲33K(已寫測試代碼)

3、音頻格式比較

WAV格式:錄音質量高,但是壓縮率小,文件大

AAC格式:相對於mp3,AAC格式的音質更佳,文件更小;有損壓縮;一般蘋果或者Android SDK4.1.2(API 16)及以上版本支持播放

AMR格式:壓縮比比較大,但相對其他的壓縮格式質量比較差,多用於人聲,通話錄音

至於常用的mp3格式,使用MediaRecorder沒有該視頻格式輸出。一些人的做法是使用AudioRecord錄音,然後編碼成wav格式,再轉換成mp3格式

源碼:
在MediaRecorder的編碼格式有以下幾種:

public static final int AAC = 3;
public static final int AAC_ELD = 5;
public static final int AMR_NB = 1;
public static final int AMR_WB = 2;
public static final int DEFAULT = 0;
public static final int HE_AAC = 4;
public static final int VORBIS = 6;

在MediaRecorder的文件格式有以下幾種

public static final int AAC_ADTS = 6;
public static final int AMR_NB = 3;
public static final int AMR_WB = 4;
public static final int DEFAULT = 0;
public static final int MPEG_4 = 2;
/** @deprecated */
@Deprecated
public static final int RAW_AMR = 3;
public static final int THREE_GPP = 1;
public static final int WEBM = 9;

在AudioRecord中的編碼格式有以下幾種:

public static final int ENCODING_AC3 = 5;
public static final int ENCODING_DEFAULT = 1;
public static final int ENCODING_DTS = 7;
public static final int ENCODING_DTS_HD = 8;
public static final int ENCODING_E_AC3 = 6;
public static final int ENCODING_INVALID = 0;
public static final int ENCODING_PCM_16BIT = 2;
public static final int ENCODING_PCM_8BIT = 3;
public static final int ENCODING_PCM_FLOAT = 4;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章