一文帶你了解音頻的那些事!
掃描二維碼
隨時(shí)隨地手機(jī)看文章
一前言
現(xiàn)實(shí)生活中,我們聽(tīng)到的聲音都是時(shí)間連續(xù)的,我們稱為這種信號(hào)叫模擬信號(hào)。模擬信號(hào)需要進(jìn)行數(shù)字化以后才能在計(jì)算機(jī)中使用。
目前我們?cè)谟?jì)算機(jī)上進(jìn)行音頻播放都需要依賴于音頻文件。那么音頻文件如何生成的呢?
音頻文件的生成過(guò)程是將聲音信息采樣、量化和編碼產(chǎn)生的數(shù)字信號(hào)的過(guò)程,我們?nèi)硕苈?tīng)到的聲音頻率范圍為(20Hz~20KHz),因此音頻文件格式的最大帶寬是20KHZ。
根據(jù)奈奎斯特的理論,音頻文件的采樣率一般在40~50KHZ之間。
奈奎斯特采樣定律,又稱香農(nóng)采樣定律,即:為了不失真地恢復(fù)模擬信號(hào),采樣頻率應(yīng)該大于等于模擬信號(hào)頻譜中最高頻率的2倍。
二概念
聲音的本質(zhì)是一種能量波,由振動(dòng)而產(chǎn)生的能量波,通過(guò)傳輸介質(zhì)傳輸出去。
聲音有三個(gè)屬性:
-
音調(diào):聲音頻率的高低,表示人的聽(tīng)覺(jué)分辨一個(gè)聲音的調(diào)子高低的程度。音調(diào)主要由聲音的頻率決定,同時(shí)也與聲音強(qiáng)度有關(guān)。
-
音量:由“振幅”(amplitude)和人離聲源的距離決定,振幅越大響度越大。
-
音色:又稱聲音的品質(zhì),波形決定了聲音的音色。
波長(zhǎng)是決定音調(diào)高低;振幅是決定音量高低;波紋是決定音色。
三PCM介紹
PCM(Pulse Code Modulation),即脈沖編碼調(diào)制技術(shù)。
由于我們?nèi)硕?tīng)到的聲音均為模擬信號(hào),那么我們?nèi)绾螌⒙?tīng)到的信息存儲(chǔ)起來(lái)呢?這就涉及到了PCM技術(shù)。
PCM技術(shù)就是把聲音從模擬信號(hào)轉(zhuǎn)化為數(shù)字信號(hào)的技術(shù),即對(duì)聲音進(jìn)行采樣、量化的過(guò)程,經(jīng)過(guò)PCM處理后的數(shù)據(jù),是最原始的音頻數(shù)據(jù),即未對(duì)音頻數(shù)據(jù)進(jìn)行任何的編碼和壓縮處理。
四PCM原理
脈沖編碼調(diào)制就是把一個(gè)時(shí)間連續(xù),取值連續(xù)的模擬信號(hào)變換成時(shí)間離散,取值離散的數(shù)字信號(hào)后在信道中傳輸。脈沖編碼調(diào)制就是對(duì)模擬信號(hào)先抽樣,再對(duì)樣值幅度量化,編碼的過(guò)程。
簡(jiǎn)化來(lái)說(shuō):PCM脈沖編碼調(diào)制,以一個(gè)固定的頻率對(duì)模擬信號(hào)進(jìn)行采樣,并將采樣的信號(hào)按照一定精度進(jìn)行量化,最終量化后的值被輸出,記錄到存儲(chǔ)介質(zhì)中。
如下圖所示:
-
原始模擬音頻數(shù)據(jù)如下:
-
按照固定頻率進(jìn)行采樣,得到:
-
最后,對(duì)采樣后的數(shù)據(jù)選擇合適精度進(jìn)行量化:
五PCM相關(guān)概念

采樣頻率:單位時(shí)間內(nèi)對(duì)模擬信號(hào)的采樣次數(shù),它用赫茲(Hz)來(lái)表示。采樣頻率越高,聲音的還原就越真實(shí)越自然,當(dāng)然數(shù)據(jù)量就越大。采樣頻率一般共分為22.05KHz、44.1KHz、48KHz三個(gè)等級(jí)。
Tip:
5kHz的采樣率僅能達(dá)到人們講話的聲音質(zhì)量。
11kHz的采樣率是播放小段聲音的最低標(biāo)準(zhǔn),是CD音質(zhì)的四分之一。
22kHz采樣率的聲音可以達(dá)到CD音質(zhì)的一半,目前大多數(shù)網(wǎng)站都選用這樣的采樣率。
44kHz的采樣率是標(biāo)準(zhǔn)的CD音質(zhì),可以達(dá)到很好的聽(tīng)覺(jué)效果。
48KHz:miniDV、數(shù)字電視、DVD、電影和專業(yè)音頻。

采樣位數(shù)(Sample Bits):又稱為采樣精度,量化級(jí),也相當(dāng)于每個(gè)采樣點(diǎn)所能被表示的數(shù)據(jù)范圍。
采樣位數(shù)通常有8bits或16bits兩種,采樣位數(shù)越大,所能記錄聲音的變化度就越細(xì)膩,相應(yīng)的數(shù)據(jù)量就越大。
8bits為低品質(zhì),16bits為高品質(zhì),16bits最為常見(jiàn)。

聲道數(shù)(Channels):又稱為通道數(shù),指的是:能支持不同發(fā)聲的音響個(gè)數(shù),它是衡量音響設(shè)備的重要指標(biāo)之一。
Tip:
單聲道的聲道數(shù)為1個(gè)聲道;
雙聲道的聲道數(shù)為2個(gè)聲道;
立體聲道的聲道數(shù)默認(rèn)為2個(gè)聲道;
立體聲道(4聲道)的聲道數(shù)為4個(gè)聲道。

知道上面三個(gè)概念,我們就能夠計(jì)算出來(lái)一個(gè)原始的音頻文件所占用空間大小了。
$$空間大小(Byte)=采樣頻率(hz)*時(shí)長(zhǎng)(s) * 采樣位數(shù)(bit)*聲道數(shù)/8
$$

量化: 量化就是通過(guò)四舍五入的方法將采樣后的模擬信號(hào)轉(zhuǎn)換成一種數(shù)字信號(hào)的過(guò)程。
對(duì)于采樣來(lái)說(shuō),就是在時(shí)間軸上對(duì)信號(hào)數(shù)字化;
對(duì)于量化來(lái)說(shuō),就是在幅度軸上對(duì)信號(hào)數(shù)字化
通過(guò)采樣時(shí)測(cè)的的模擬電壓值,要進(jìn)行分級(jí)量化,按整個(gè)電壓變化的最大幅度劃分成幾個(gè)區(qū)段,把落在某區(qū)段的采樣到的樣品值歸成一類,并給出相應(yīng)的量化值。

-
幀(Frame):一個(gè)聲音的基本數(shù)據(jù)單元,其長(zhǎng)度為采樣位數(shù)和通道數(shù)的乘積。
-
周期(Period Size):音頻設(shè)備一次處理所需要的幀數(shù),對(duì)于音頻設(shè)備的數(shù)據(jù)訪問(wèn)以及音頻數(shù)據(jù)的存儲(chǔ),都是以此為單位。硬件緩沖傳輸單位,即完成這么多采樣幀的傳輸,就會(huì)回饋一個(gè)中斷。
-
Buffer Bytes: 一個(gè)應(yīng)用Buffer有多少個(gè)字節(jié),DMA緩沖區(qū)大小。
因?yàn)锽uffer Size由應(yīng)用設(shè)置,其可大可小,若其太大,則傳輸?shù)难訒r(shí)太大,所以對(duì)此進(jìn)行分片,提出Period的概念。overrun,錄制時(shí),數(shù)據(jù)都滿了,應(yīng)用來(lái)不及取走;underrun,需要數(shù)據(jù)來(lái)播放,應(yīng)用來(lái)不及寫(xiě)入數(shù)據(jù)
-
Sign :表示樣本數(shù)據(jù)是否是有符號(hào)位
-
Byte Ordering:字節(jié)序,表明數(shù)據(jù)是小端(little-endian)存儲(chǔ)還是大端(big-endian)存儲(chǔ),通常均為little-endian。
-
nteger Or Floating Point :整形或者浮點(diǎn)型,大多數(shù)格式的PCM樣本數(shù)據(jù)使用整形表示。
-
交錯(cuò)模式:數(shù)字音頻信號(hào)存儲(chǔ)的方式。數(shù)據(jù)以連續(xù)幀的方式存放,即首先記錄第一幀的左聲道樣本和右聲道樣本,再開(kāi)始第2幀的記錄…
-
非交錯(cuò)模式: 首先記錄的是一個(gè)周期內(nèi)所有幀的左聲道樣本,再記錄所有右聲道樣本。
以FFmpeg中常見(jiàn)的PCM數(shù)據(jù)格式s16le為例:它描述的是有符號(hào)16位小端PCM數(shù)據(jù)。
s表示有符號(hào),16表示位深,le表示小端存儲(chǔ)。
六PCM數(shù)據(jù)流
對(duì)于PCM數(shù)據(jù)都是一些文本化的描述,那么一段PCM格式的數(shù)據(jù)流怎么表示的呢?
以8-bit有符號(hào)為例,長(zhǎng)得像這樣:
+---------+-----------+-----------+---- binary | 0010 0000 | 1010 0000 | ... decimal | 32 | -96 | ... +---------+-----------+-----------+----
每個(gè)分割符"|"分割字節(jié)。因?yàn)槭?8-bit 有符號(hào)表示的采樣數(shù)據(jù),所以采樣的范圍為-128~128。
OK,對(duì)于PCM數(shù)據(jù)流的存儲(chǔ)而言,上面僅僅只是單聲道。對(duì)于多聲道的PCM數(shù)據(jù)而言,通常會(huì)交錯(cuò)排列,就像這樣:
+---------+-----------+-----------+-----------+-----------+---- FL | FR | FL | FR | FL | +---------+-----------+-----------+-----------+-----------+----
對(duì)于8-bit有符號(hào)的PCM數(shù)據(jù)而言,上圖表示第一個(gè)字節(jié)存放第一個(gè)左聲道數(shù)據(jù)(FL),第二個(gè)字節(jié)放第一個(gè)右聲道數(shù)據(jù)(FR),第三個(gè)字節(jié)放第二個(gè)左聲道數(shù)據(jù)(FL)…
七編碼
一個(gè)完整的音頻,經(jīng)過(guò)采樣和量化后的信號(hào),需要將它轉(zhuǎn)化為數(shù)字編碼脈沖,這一過(guò)程稱為編碼。
編碼簡(jiǎn)單來(lái)說(shuō),就是按一定格式記錄采樣和量化后的數(shù)字?jǐn)?shù)據(jù)。
PCM技術(shù)僅僅包含采樣和量化,并不包含編碼部分,這里僅簡(jiǎn)單介紹。

AAC(Advanced Audio Coding)高級(jí)音頻編碼,是一種聲音數(shù)據(jù)的文件壓縮格式。AAC分為ADIF和ADTS兩種文件格式。
-
ADIF(Audio Data Interchange Format):音頻數(shù)據(jù)交換格式。這種格式的特征是只有音頻數(shù)據(jù)最前面具有頭字節(jié),音頻數(shù)據(jù)流中間沒(méi)有頭字節(jié)。因此它的解碼只能在頭字節(jié)處開(kāi)始進(jìn)行。故這種格式常用在磁盤(pán)文件中。
-
ADTS(Audio Data Transport Stream):音頻數(shù)據(jù)傳輸流。這種格式的特征是它每一單元音頻數(shù)據(jù)都有一個(gè)header字節(jié),解碼可以在這個(gè)流中任何位置開(kāi)始。

PCM數(shù)據(jù)是最原始的音頻數(shù)據(jù),完全無(wú)損,所以PCM數(shù)據(jù)雖然音質(zhì)優(yōu)秀但體積龐大,為了解決這個(gè)問(wèn)題先后誕生了一系列的音頻格式,這些音頻格式運(yùn)用不同的方法對(duì)音頻數(shù)據(jù)進(jìn)行壓縮,其中有無(wú)損壓縮和有損壓縮兩種。
-
無(wú)損壓縮:將數(shù)據(jù)壓縮之后,通過(guò)解碼還能還原成與原始數(shù)據(jù)一模一樣的數(shù)據(jù)為無(wú)損壓縮。
-
ALAC、APE、FLAC
-
有損壓縮:消除冗余信息,如人耳能聽(tīng)到的聲音為20Hz - 20000Hz 以內(nèi),所以可以將此范圍外的聲音去除掉。
-
MP3、AAC、OGG、WMA

其他概念
-
碼率:(也成位速、比特率) 是指在一個(gè)數(shù)據(jù)流中每秒鐘能通過(guò)的信息量,代表了壓縮質(zhì)量。
比如MP3常用碼率有128kbit/s、160kbit/s、320kbit/s等等,越高代表著聲音音質(zhì)越好。
MP3中的數(shù)據(jù)有ID3和音頻數(shù)據(jù)組成,ID3用于存儲(chǔ)歌名、演唱者、專輯、音軌等我們可以常見(jiàn)的信息。
$$
碼率 = 采樣率 * 采樣位數(shù) * 聲道數(shù)
$$
例如:
如果是CD音質(zhì),采樣率44.1KHz,采樣位數(shù)16bit,立體聲(雙聲道), 碼率 = 44.1 * 1000 * 16 * 2 = 1411200bps = 176400Bps,那么錄制一分鐘的音樂(lè), 大概176400 * 1 * 60 / 1024 / 1024 =10.09MB。
-
音頻幀: 音頻數(shù)據(jù)是流式的,本身沒(méi)有明確的一幀幀的概念,在實(shí)際的應(yīng)用中,為了音頻算法處理/傳輸?shù)姆奖?,一般約定俗成取2.5ms~60ms為單位的數(shù)據(jù)量為一幀音頻。
