Android音頻知識(shí)介紹-從AndroidRecord看起

前言

音頻的相關(guān)知識(shí)我們從AudioRecord的構(gòu)造傳參看起:

        RecorderHelper.getInstance().initRecoder(
                this,
                MediaRecorder.AudioSource.MIC,  //麥克風(fēng)數(shù)據(jù)
                16000,                          //采樣率16k
                AudioFormat.CHANNEL_CONFIGURATION_MONO,  //單聲道
                AudioFormat.ENCODING_PCM_16BIT);// 16bit的采樣精度

上面一個(gè)初始化麥克風(fēng)的調(diào)用转捕,涉及到了很多知識(shí)五芝,大概是大學(xué)時(shí)數(shù)字信號(hào)處理課程或者是信號(hào)與系統(tǒng)學(xué)的。相關(guān)覺得有必要科普一下沉删,不然大家永遠(yuǎn)是在復(fù)制代碼醉途,遇到相關(guān)問題的時(shí)候如果不了解會(huì)一頭霧水隘擎,優(yōu)化效果更提不上了。

這篇文章不是用來介紹API的推正,介紹AndroidRecord API很簡(jiǎn)單植榕,無非初始化然后讀取尼夺。如果只是這么簡(jiǎn)單的需求,甚至這個(gè)類都用不到淤堵,直接用MediaRecorder即可錄音等寝衫。本文主要介紹相關(guān)的參數(shù)是什么意思。比如什么是16Bit采樣拐邪,什么是44100采樣率慰毅。

簡(jiǎn)介

Google API地址
https://developer.android.google.cn/reference/android/media/AudioRecord.html

從網(wǎng)頁的右上角我們可以看到,這是從API3等級(jí)開始就有的類扎阶。AndroidRecord是一個(gè)比MediaRecorder更加底層的類汹胃,根據(jù)谷歌介紹婶芭,有點(diǎn)相當(dāng)于是直接從音頻設(shè)備拉數(shù)據(jù)的意思,并且我們拿到的也直接是PCM流着饥。

從API23開始 多了個(gè)AudioRecord.Builder類來幫助我們初始化AndroidRecord,可惜這個(gè)類還不如不用宰掉,用了我23以下的還得用老方法初始化呵哨,這不僅沒優(yōu)化代碼,還冗余了代碼轨奄。

構(gòu)造方法

AudioRecord(int audioSource, int sampleRateInHz, int channelConfig, int audioFormat, int bufferSizeInBytes)
參數(shù) 介紹
audioSource MediaRecorder.AudioSource類里面的各種類型孟害,有MICVOICE_CALL
sampleRateInHz 采樣率戚绕,44100Hz是唯一可以工作于所有手機(jī)上的采樣率纹坐,22050, 16000, and 11025 可能只有部分機(jī)型能工作,我之前就因?yàn)樵O(shè)置的采樣率為16000導(dǎo)致在我的手機(jī)上工作正常枝冀,而在努比亞手機(jī)上Buffer滿的時(shí)間變短導(dǎo)致了些問題舞丛。
channelConfig CHANNEL_IN_MONO 和 CHANNEL_IN_STEREO.即單聲道和立體聲也叫雙聲道,雙聲道可以有保證的作于所有手機(jī)上
audioFormat ENCODING_PCM_8BIT, ENCODING_PCM_16BIT, and ENCODING_PCM_FLOAT. 有8bit果漾,16bit球切,32bit的采樣精度
bufferSizeInBytes Record的內(nèi)部記錄緩沖區(qū)大小,可以通過getMinBufferSize(int, int, int) 方法得到绒障。

什么是PCM

脈沖編碼調(diào)制(Pulse Code Modulation,PCM)吨凑,這是在信號(hào)與系統(tǒng)里面接觸過的編碼格式,脈沖編碼調(diào)制是數(shù)字通信的編碼方式之一户辱。主要過程是將話音鸵钝、圖像等模擬信號(hào)每隔一定時(shí)間進(jìn)行取樣,使其離散化庐镐,同時(shí)將抽樣值按分層單位四舍五入取整量化恩商,同時(shí)將抽樣值按一組二進(jìn)制碼來表示抽樣脈沖的幅值。

PCM通過抽樣必逆、量化怠堪、編碼三個(gè)步驟將連續(xù)變化的模擬信號(hào)轉(zhuǎn)換為數(shù)字編碼

什么是采樣率?

采樣率又叫抽樣名眉,由于聲音其實(shí)是一種能量波粟矿,因此也有頻率和振幅的特征,頻率對(duì)應(yīng)于時(shí)間軸線损拢,振幅對(duì)應(yīng)于電平軸線陌粹。波是無限光滑的,弦線可以看成由無數(shù)點(diǎn)組成福压,由于存儲(chǔ)空間是相對(duì)有限的掏秩,數(shù)字編碼過程中绘证,必須對(duì)弦線的點(diǎn)進(jìn)行采樣。采樣的過程就是抽取某點(diǎn)的頻率值哗讥,很顯然嚷那,在一秒中內(nèi)抽取的點(diǎn)越多,獲取得頻率信息更豐富杆煞,為了復(fù)原波形魏宽,一次振動(dòng)中,必須有2個(gè)點(diǎn)的采樣决乎,人耳能夠感覺到的最高頻率為20kHz队询,因此要滿足人耳的聽覺要求,則需要至少每秒進(jìn)行40k次采樣构诚,用40kHz表達(dá)蚌斩,這個(gè)40kHz就是采樣率。我們常見的CD范嘱,采樣率為44.1kHz送膳。

44.1kHz意味著什么呢?假設(shè)我們有2段正弦波信號(hào)丑蛤,分別為20Hz和20KHz叠聋,長(zhǎng)度均為一秒鐘,以對(duì)應(yīng)我們能聽到的最低頻和最高頻受裹,分別對(duì)這兩段信號(hào)進(jìn)行 40KHz的采樣碌补,我們可以得到一個(gè)什么樣的結(jié)果呢?結(jié)果是:20Hz的信號(hào)每次振動(dòng)被采樣了40K/20=2000次棉饶,而20K的信號(hào)每次振動(dòng)只有2次采樣厦章。顯然,在相同的采樣率下照藻,記錄低頻的信息遠(yuǎn)比高頻的詳細(xì)袜啃。這也是為什么有些音響發(fā)燒友指責(zé)CD有數(shù)碼聲不夠真實(shí)的原因,CD的44.1KHz采樣也無法保證高頻信號(hào)被較好記錄岩梳。要較好的記錄高頻信號(hào)囊骤,看來需要更高的采樣率,于是有些朋友在捕捉CD音軌的時(shí)候使用48KHz的采樣率冀值,這是不可取的也物!這其實(shí)對(duì)音質(zhì)沒有任何好處,對(duì)抓軌軟件來說列疗,保持和CD提供的44.1KHz一樣的采樣率才是最佳音質(zhì)的保證之一滑蚯,而不是去提高它。較高的采樣率只有相對(duì)模擬信號(hào)的時(shí)候才有用,如果被采樣的信號(hào)是數(shù)字的告材,請(qǐng)不要去嘗試提高采樣率坤次。

常用的采樣率為:44.1KHz與48KHz

什么是采樣精度?

1 字節(jié)(也就是8bit) 只能記錄 256 個(gè)數(shù), 也就是只能將振幅劃分成 256 個(gè)等級(jí);
2 字節(jié)(也就是16bit) 可以細(xì)到 65536 個(gè)數(shù), 這已是 CD 標(biāo)準(zhǔn)了;
4 字節(jié)(也就是32bit) 能把振幅細(xì)分到 4294967296 個(gè)等級(jí), 實(shí)在是沒必要了.

如果是雙聲道(stereo), 采樣就是雙份的, 文件也差不多要大一倍.

我們來看一張圖就能明白:

上述的模擬數(shù)據(jù)模擬就好比人的聲音是有振幅有頻率的波斥赋,假設(shè)上面的模擬數(shù)據(jù)時(shí)長(zhǎng)為1秒缰猴。
那么采樣,可以看到我們采樣了10根線疤剑,那采樣率就是10Hz滑绒。(44100Hz是多高自己體會(huì))
再看量化,分為了8個(gè)等級(jí)隘膘,也就是采樣進(jìn)度是3bit疑故。(可以想象16bit是多么精確了)
最后1秒鐘的數(shù)據(jù),被編碼成了3bit×10 即30個(gè)二進(jìn)制數(shù)據(jù)弯菊。

單聲道和立體聲

如果是8bit的采樣纵势,對(duì)于單聲道聲音文件,采樣數(shù)據(jù)為八位的短整數(shù)(short int 00H-FFH)管钳;

而對(duì)于雙聲道立體聲聲音文件钦铁,每次采樣數(shù)據(jù)為一個(gè)16位的整數(shù)(int),高八位(左聲道)和低八位(右聲道)分別代表兩個(gè)聲道蹋嵌。

碼率計(jì)算

算一個(gè)PCM音頻流的碼率是一件很輕松的事情育瓜,采樣率值×采樣大小值×聲道數(shù)bps。一個(gè)采樣率為44.1KHz栽烂,采樣大小為16bit,雙聲道的PCM編碼的WAV文件恋脚,它的數(shù)據(jù)速率則為 44.1K×16×2 =1411.2 Kbps腺办。我們常說128K的MP3,對(duì)應(yīng)的WAV的參數(shù)糟描,就是這個(gè)1411.2 Kbps怀喉,這個(gè)參數(shù)也被稱為數(shù)據(jù)帶寬,它和ADSL中的帶寬是一個(gè)概念船响。將碼率除以8,就可以得到這個(gè)WAV的數(shù)據(jù)速率躬拢,即176.4KB/s。這表示存儲(chǔ)一秒鐘采樣率為44.1KHz见间,采樣大小為16bit聊闯,雙聲道的PCM編碼的音頻信號(hào),需要176.4KB的空間米诉,1分鐘則約為10.34M菱蔬,這對(duì)大部分用戶是不可接受的,尤其是喜歡在電腦上聽音樂的朋友,要降低磁盤占用拴泌,只有2種方法魏身,降低采樣指標(biāo)或者壓縮。降低指標(biāo)是不可取的蚪腐,因此專家們研發(fā)了各種壓縮方案箭昵。

碼率的不同帶來的是音頻品質(zhì)的不同,我們的音樂軟件里面有音樂的品質(zhì)其實(shí)就是這些回季,正常我們聽的當(dāng)然是有損壓縮的歌曲宙枷,比如QQ音樂里面聽歌有SQ無損品質(zhì),就是無損壓縮的音頻茧跋。

WAV文件介紹

PCM流我們可以直接保存為文件慰丛,但是這就是PCM格式了,正常播放器都沒有播放pcm的功能瘾杭,我們可以把PCM轉(zhuǎn)成WAV诅病。WAV文件是一種一種無損的音頻文件格式,里面還是PCM的編碼粥烁,只不過是在我們?cè)械膒cm文件上加上一個(gè)WAV規(guī)定的協(xié)議頭而已贤笆。這個(gè)頭是44個(gè)byte大小。所以一個(gè)0bit的pcm文件轉(zhuǎn)成wav大小是44B讨阻。

因?yàn)閃AV并沒有進(jìn)行壓縮芥永,所以WAV占用的空間是最大的。因此為了傳輸以及存儲(chǔ)的需求后來人們?cè)O(shè)計(jì)了很多的音頻壓縮格式钝吮,mp3就是一種有損的壓縮音頻埋涧,至于怎么壓縮的那是各種壓縮算法的事情了。


本文作者:Anderson/Jerey_Jobs

博客地址 : http://jerey.cn/
簡(jiǎn)書地址 : Anderson大碼渣
github地址 : https://github.com/Jerey-Jobs

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末奇瘦,一起剝皮案震驚了整個(gè)濱河市棘催,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌耳标,老刑警劉巖醇坝,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異次坡,居然都是意外死亡呼猪,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門砸琅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宋距,“玉大人,你說我怎么就攤上這事明棍∠绺铮” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)沸版。 經(jīng)常有香客問我嘁傀,道長(zhǎng),這世上最難降的妖魔是什么视粮? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任细办,我火速辦了婚禮,結(jié)果婚禮上蕾殴,老公的妹妹穿的比我還像新娘笑撞。我一直安慰自己,他們只是感情好钓觉,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布茴肥。 她就那樣靜靜地躺著,像睡著了一般荡灾。 火紅的嫁衣襯著肌膚如雪瓤狐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天批幌,我揣著相機(jī)與錄音础锐,去河邊找鬼。 笑死荧缘,一個(gè)胖子當(dāng)著我的面吹牛皆警,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播截粗,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼信姓,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了桐愉?” 一聲冷哼從身側(cè)響起财破,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎从诲,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體靡羡,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡系洛,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了略步。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片描扯。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖趟薄,靈堂內(nèi)的尸體忽然破棺而出绽诚,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布恩够,位于F島的核電站卒落,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蜂桶。R本人自食惡果不足惜儡毕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望扑媚。 院中可真熱鬧腰湾,春花似錦、人聲如沸疆股。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽旬痹。三九已至附井,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間唱凯,已是汗流浹背羡忘。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留磕昼,地道東北人卷雕。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像票从,于是被迫代替她去往敵國(guó)和親漫雕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容