音頻技術(shù)開(kāi)發(fā),我們得對(duì)聲音有所了解,掌握音頻的基礎(chǔ)知識(shí),這才能更好地去做技術(shù)開(kāi)發(fā)。
首先介紹音頻基礎(chǔ)知識(shí),然后介紹音頻的量化與編碼,音頻壓縮技術(shù),音頻編解碼器選型,AAC,希望對(duì)幫助大家。
聲音三要素
- 音調(diào) : 就是音頻,男生->女生->兒童。
聲音頻率的高低叫做音調(diào)。表示人的聽(tīng)覺(jué)分辨一個(gè)聲音的調(diào)子高低的程度。音調(diào)主要由聲音的頻率決定,同時(shí)也與聲音強(qiáng)度有關(guān)。對(duì)一定強(qiáng)度的純音,音調(diào)隨頻率的升降而升降;對(duì)一定頻率的純音、低頻純音的音調(diào)隨聲強(qiáng)增加而下降,高頻純音的音調(diào)卻隨強(qiáng)度增加而上升。
- 音量: 振動(dòng)的幅度。
音量又稱響度、音強(qiáng),是指人耳對(duì)所聽(tīng)到的聲音大小強(qiáng)弱的主觀感受,其客觀評(píng)價(jià)尺度是聲音的振幅大小。這種感受源自物體振動(dòng)時(shí)所產(chǎn)生的壓力,即聲壓。物體振動(dòng)通過(guò)不同的介質(zhì),將其振動(dòng)能量傳導(dǎo)開(kāi)去。人們?yōu)榱藢?duì)聲音的感受量化成可以監(jiān)測(cè)的指標(biāo),就把聲壓分成“級(jí)”——聲壓級(jí),以便能客觀的表示聲音的強(qiáng)弱,其單位稱為“分貝”(dB)。
- 音色: 它與材質(zhì)有很大關(guān)系,本質(zhì)就是諧波。
音色(Timbre)是指不同的聲音的頻率表現(xiàn)在波形方面總是有與眾不同的特性。不同的物體振動(dòng)都有不同的特點(diǎn)。
我們?yōu)槭裁匆私饴曇?,音頻技術(shù)不是有音頻采集,音頻編碼,音頻解碼,算法等等就行了么,還要了解這么基本的知識(shí)有必要么,如果你了解個(gè)音頻技術(shù)里的倍速播放功能時(shí),就你會(huì)發(fā)現(xiàn)當(dāng)你倍速播放時(shí),音調(diào)也發(fā)生了變化。
音頻采集
音頻采集一般使用 AudioRecod或者 MediaRecord
音頻采集的來(lái)源是什么?
一般是指麥克風(fēng):MediaRecorder.AudioSource.MIC
關(guān)于音頻是怎么采集的,到時(shí)候?qū)iT(mén)寫(xiě)一篇音頻采集的文章,這章主要是了解音頻基礎(chǔ)知識(shí)。當(dāng)我們采集到了聲音數(shù)據(jù)后都要對(duì)聲音數(shù)據(jù)進(jìn)行量化。
音頻量化的過(guò)程
獲取模擬數(shù)據(jù)(即采集到的音頻波片段的數(shù)據(jù))——>采樣(對(duì)音頻波進(jìn)行采樣)——>量化(根據(jù)采樣點(diǎn)的值進(jìn)行一一量化)——>編碼(根據(jù)樣本序號(hào)進(jìn)行編碼)——>轉(zhuǎn)換成數(shù)字信號(hào)(即把樣本一一轉(zhuǎn)換01這樣的機(jī)器能識(shí)別的數(shù)字信號(hào))
音頻量化基本概念
- 采樣大小: 一個(gè)采樣用多少bit存放。常用的是16bit(也有用8bit存放)
16bit 表示Y軸振幅的高度 2的16次方(聲音的振幅最高也高示過(guò)65535)
- 采樣率: 采樣頻率可分為8k 、16k、 32k、 44.1k、 48k等(對(duì)于AAC來(lái)說(shuō)是采用44.1K的采樣率)
以44.1K為例,就是說(shuō)每秒在模擬信號(hào)上,我們采樣441000次,比如說(shuō)20Hz的頻率(20Hz也就是人聽(tīng)到的最低頻率,20Hz的頻率即每秒采樣了20次),每秒鐘正弦波里,要采集多少次呢,要采樣2000次,那么對(duì)于高頻呢,比如20000Hz,那么就要采樣2次
- 聲道數(shù): 單聲道、雙聲道、多聲道(什么叫雙聲道?就是有兩個(gè)喇叭,多聲道就是有多個(gè)喇叭)
AudioFormat.CHANNEL_IN_MONO 單聲道,一個(gè)聲道進(jìn)行采樣
AudioFormat.CHANNEL_IN_STEREO 雙聲道,兩個(gè)聲道進(jìn)行采樣
- 音頻采樣精度
采樣精度:聲音樣本大小bit/s表示。位數(shù)越高,聲音的保真度越高。
采樣精度決定了記錄聲音的動(dòng)態(tài)范圍,它以位(Bit)為單位,比如8位、16位。8位可以把聲波分成256級(jí),16位可以把同樣的波分成65536級(jí)的信號(hào)。
它反映度量聲音波形幅度的精度。例如,每個(gè)聲音樣本用16位(2字節(jié))表示,測(cè)得的聲音樣本值是在0~65535的范圍里,它的精度就是輸入信號(hào)的1/65536。樣本位數(shù)的大小影響到聲音的質(zhì)量,位數(shù)越多,聲音的質(zhì)量越高,而需要的存儲(chǔ)空間也越多;位數(shù)越少,聲音的質(zhì)量越低,需要的存儲(chǔ)空間越少。
一般都采用這個(gè) AudioFormat.ENCODING_PCM_16BIT(官方文檔表示,該采樣精度保證所有設(shè)備都支持)
碼率計(jì)算
要算一個(gè)PCM音頻的碼率是一件很輕松的事情,采樣率 * 采樣大小 * 聲道數(shù)
例如:
采樣率為44.1KHz
采樣大小為16bit
雙聲道的PCM編碼的WAV文件
它是碼率為 44.1k * 16 * 2 =1411200b=1411.2Kb/s
每秒傳送的比特(bit)數(shù)。單位為 bps(Bit Per Second),比特率越高,傳送數(shù)據(jù)速度越快。
PCM
PCM是英文Pulse-code modulation的縮寫(xiě),中文譯名是脈沖編碼調(diào)制。
我們知道在現(xiàn)實(shí)生活中,人耳聽(tīng)到的聲音是模擬信號(hào),PCM就是要把聲音從模擬轉(zhuǎn)換成數(shù)字信號(hào)的一種技術(shù),他的原理簡(jiǎn)單地說(shuō)就是利用一個(gè)固定的頻率對(duì)模擬信號(hào)進(jìn)行采樣,采樣后的信號(hào)在波形上看就像一串連續(xù)的幅值不一的脈沖,把這些脈沖的幅值按一定的精度進(jìn)行量化,這些量化后的數(shù)值還要進(jìn)行編碼,就是用一組二進(jìn)制碼組來(lái)表示每一個(gè)量化值,然后記錄到存儲(chǔ)介質(zhì)中,所有這些組成了數(shù)字音頻的產(chǎn)生過(guò)程。
音頻壓縮技術(shù)
音頻壓縮技術(shù)有兩種方法,如下:
- 消除冗余數(shù)據(jù)(久損壓縮技術(shù))
在音頻采集過(guò)程中,會(huì)采集到各種各樣的聲音,其中只有一部分聲音是我們?nèi)四軌蜃R(shí)別出來(lái)的,其他聲音我們可以直接刪除掉,這樣能夠大大減少存儲(chǔ)的數(shù)據(jù),刪除掉的這些數(shù)據(jù),當(dāng)我們壓縮完之后是完全沒(méi)有了也無(wú)法恢復(fù)。
- 哈夫曼無(wú)損編碼(無(wú)損壓縮技術(shù))
將人無(wú)法識(shí)別的聲音刪除之后,留下來(lái)的聲音對(duì)其壓縮編碼,壓縮后的編碼還能恢復(fù)為原來(lái)一模一樣的數(shù)據(jù),這就稱為無(wú)損壓縮技術(shù)。
音頻冗余信息
壓縮的主要方法是去除采集到的音頻冗余信息,所謂冗余信息包括人耳聽(tīng)覺(jué)范圍外的音頻信號(hào)以及被掩蔽掉的音頻信號(hào)
信號(hào)的掩蔽可以分為:頻域掩蔽、時(shí)域掩蔽
頻域掩蔽: 人耳所能察覺(jué)的聲音信號(hào)的頻率范圍為20Hz~20KHz,在這個(gè)頻率范圍以外的音頻信號(hào)屬于冗余信號(hào);或一個(gè)強(qiáng)純音會(huì)掩蔽在其附近同時(shí)發(fā)聲的弱純音,那么弱純音也被掩蔽,弱純音屬于冗余信號(hào)。
時(shí)域掩蔽: 在時(shí)間上相鄰的聲音之間也有掩蔽現(xiàn)象,主要原因是人的大腦處理信息需要花費(fèi)時(shí)間。同步掩蔽效應(yīng)和不同頻率聲音的頻率和相對(duì)竟是有關(guān),而時(shí)間掩蔽則僅僅和時(shí)間有關(guān)。如果兩個(gè)聲音在時(shí)間上特別接近,分辨會(huì)有困難(如兩個(gè)聲音音量相差較大且兩個(gè)聲音間隔時(shí)間低于5毫秒,則其中弱的那個(gè)聲音會(huì)聽(tīng)不到)。
下面簡(jiǎn)單列出常見(jiàn)的音頻壓縮格式:
MP3,AAC,OGG,WMA,Opus,F(xiàn)LAC,APE,m4a,AMR,等等
音頻編碼的過(guò)程
時(shí)域轉(zhuǎn)頻域變換 —(聲學(xué)模型)—> 量化編碼 —> 比特流格式 (也可以添加輔助的數(shù)據(jù))—> 比特流
音頻編解碼器選型
常見(jiàn)的音頻編碼器
- 常見(jiàn)的音頻編碼器包括 OPUS、AAC、Vorbis、Speex、iLBC、AMR、G.711等
- 網(wǎng)上評(píng)測(cè)結(jié)果: OPUS>AAC>Vorbis
常見(jiàn)的音頻編碼器他們的性能對(duì)比就不一一列舉了,感興趣的可以網(wǎng)上查閱一下。下面重點(diǎn)介紹一下AAC編碼器。
AAC介紹
為什么重點(diǎn)介紹AAC呢?
- AAC是的應(yīng)用范圍廣(市面上95%以上的都是AAC編碼器)
- 傳輸協(xié)議是用rtmp,RTMP是支持AAC的不支持OPUS
- AAC是的編碼質(zhì)量非常高,有一個(gè)高保幀,保持音頻的高保幀,這樣也導(dǎo)致很多應(yīng)用使用AAC
AAC為了解決什么問(wèn)題?
- AAC(Advanced Audio Coding) 目的是取代MP3格式
- MPEG-4標(biāo)準(zhǔn)出現(xiàn)后,AAC加入了SBR技術(shù)和PS技術(shù)
- 目前常用的規(guī)格有AAC LC、AAC HE V1、AAC HE V2
AAC規(guī)格
AAC +SBR -> AAC HE V1
AAC+SBR+PS -> AAC HE V2
AAC規(guī)格描述
- AAC LC: (Low Complexity)低復(fù)雜度,碼流128k
- AAC HE V1: AAC LC +SBR(Spectral Band Replication)碼流64k(碼流減少了,音頻質(zhì)量也提高了)
- AAC HE V2: AAC LC +SBR + PS(Parametric Stereo)碼流32k(碼流減少了,音頻質(zhì)量也提高了)
AAC格式
- ADIF(Audio Data Interchange Format)這種格式只能從頭開(kāi)始解碼,常用在磁盤(pán)文件中
- ADTS(Audio Data Transport Stream)這種格式每一幀都有一個(gè)同步字,可以在音頻流的任何位置開(kāi)始解碼,它似于數(shù)據(jù)流格式
AAC編碼庫(kù)那個(gè)好?
市面上的庫(kù):
Libfdk_AAC > ffmpeg AAC > libfaac > libvo_aacenc
Libfdk_AAC的編碼效率更高