一前言
現實生活中,我們聽到的聲音都是時間連續(xù)的,我們稱為這種信號叫模擬信號。模擬信號需要進行數字化以后才能在計算機中使用。
目前我們在計算機上進行音頻播放都需要依賴于音頻文件。那么音頻文件如何生成的呢?
音頻文件的生成過程是將聲音信息采樣、量化和編碼產生的數字信號的過程,我們人耳所能聽到的聲音頻率范圍為(20Hz~20KHz),因此音頻文件格式的最大帶寬是20KHZ。
根據奈奎斯特的理論,音頻文件的采樣率一般在40~50KHZ之間。
奈奎斯特采樣定律,又稱香農采樣定律,即:為了不失真地恢復模擬信號,采樣頻率應該大于等于模擬信號頻譜中最高頻率的2倍。
二概念
聲音的本質是一種能量波,由振動而產生的能量波,通過傳輸介質傳輸出去。
聲音有三個屬性:
-
音調:聲音頻率的高低,表示人的聽覺分辨一個聲音的調子高低的程度。音調主要由聲音的頻率決定,同時也與聲音強度有關。
-
音量:由“振幅”(amplitude)和人離聲源的距離決定,振幅越大響度越大。
-
音色:又稱聲音的品質,波形決定了聲音的音色。
波長是決定音調高低;振幅是決定音量高低;波紋是決定音色。
三PCM介紹
PCM(Pulse Code Modulation),即脈沖編碼調制技術。
由于我們人耳聽到的聲音均為模擬信號,那么我們如何將聽到的信息存儲起來呢?這就涉及到了PCM技術。
PCM技術就是把聲音從模擬信號轉化為數字信號的技術,即對聲音進行采樣、量化的過程,經過PCM處理后的數據,是最原始的音頻數據,即未對音頻數據進行任何的編碼和壓縮處理。
四PCM原理
脈沖編碼調制就是把一個時間連續(xù),取值連續(xù)的模擬信號變換成時間離散,取值離散的數字信號后在信道中傳輸。脈沖編碼調制就是對模擬信號先抽樣,再對樣值幅度量化,編碼的過程。
簡化來說:PCM脈沖編碼調制,以一個固定的頻率對模擬信號進行采樣,并將采樣的信號按照一定精度進行量化,最終量化后的值被輸出,記錄到存儲介質中。
如下圖所示:
-
原始模擬音頻數據如下:
-
按照固定頻率進行采樣,得到:
-
最后,對采樣后的數據選擇合適精度進行量化:
五PCM相關概念
5.1采樣頻率采樣頻率:單位時間內對模擬信號的采樣次數,它用赫茲(Hz)來表示。采樣頻率越高,聲音的還原就越真實越自然,當然數據量就越大。采樣頻率一般共分為22.05KHz、44.1KHz、48KHz三個等級。
Tip:
5kHz的采樣率僅能達到人們講話的聲音質量。
11kHz的采樣率是播放小段聲音的最低標準,是CD音質的四分之一。
22kHz采樣率的聲音可以達到CD音質的一半,目前大多數網站都選用這樣的采樣率。
44kHz的采樣率是標準的CD音質,可以達到很好的聽覺效果。
48KHz:miniDV、數字電視、DVD、電影和專業(yè)音頻。
5.2采樣位數采樣位數(Sample Bits):又稱為采樣精度,量化級,也相當于每個采樣點所能被表示的數據范圍。
采樣位數通常有8bits或16bits兩種,采樣位數越大,所能記錄聲音的變化度就越細膩,相應的數據量就越大。
8bits為低品質,16bits為高品質,16bits最為常見。
5.3聲道數聲道數(Channels):又稱為通道數,指的是:能支持不同發(fā)聲的音響個數,它是衡量音響設備的重要指標之一。
Tip:
單聲道的聲道數為1個聲道;
雙聲道的聲道數為2個聲道;
立體聲道的聲道數默認為2個聲道;
立體聲道(4聲道)的聲道數為4個聲道。
5.4音頻數據大小計算知道上面三個概念,我們就能夠計算出來一個原始的音頻文件所占用空間大小了。
$$空間大小(Byte)=采樣頻率(hz)*時長(s) * 采樣位數(bit)*聲道數/8
$$
5.5量化量化: 量化就是通過四舍五入的方法將采樣后的模擬信號轉換成一種數字信號的過程。
對于采樣來說,就是在時間軸上對信號數字化;
對于量化來說,就是在幅度軸上對信號數字化
通過采樣時測的的模擬電壓值,要進行分級量化,按整個電壓變化的最大幅度劃分成幾個區(qū)段,把落在某區(qū)段的采樣到的樣品值歸成一類,并給出相應的量化值。
5.6其他參數相關-
幀(Frame):一個聲音的基本數據單元,其長度為采樣位數和通道數的乘積。
-
周期(Period Size):音頻設備一次處理所需要的幀數,對于音頻設備的數據訪問以及音頻數據的存儲,都是以此為單位。硬件緩沖傳輸單位,即完成這么多采樣幀的傳輸,就會回饋一個中斷。
-
Buffer Bytes: 一個應用Buffer有多少個字節(jié),DMA緩沖區(qū)大小。
因為Buffer Size由應用設置,其可大可小,若其太大,則傳輸的延時太大,所以對此進行分片,提出Period的概念。overrun,錄制時,數據都滿了,應用來不及取走;underrun,需要數據來播放,應用來不及寫入數據
-
Sign :表示樣本數據是否是有符號位
-
Byte Ordering:字節(jié)序,表明數據是小端(little-endian)存儲還是大端(big-endian)存儲,通常均為little-endian。
-
nteger Or Floating Point :整形或者浮點型,大多數格式的PCM樣本數據使用整形表示。
-
交錯模式:數字音頻信號存儲的方式。數據以連續(xù)幀的方式存放,即首先記錄第一幀的左聲道樣本和右聲道樣本,再開始第2幀的記錄…
-
非交錯模式: 首先記錄的是一個周期內所有幀的左聲道樣本,再記錄所有右聲道樣本。
以FFmpeg中常見的PCM數據格式s16le為例:它描述的是有符號16位小端PCM數據。
s表示有符號,16表示位深,le表示小端存儲。
六PCM數據流
對于PCM數據都是一些文本化的描述,那么一段PCM格式的數據流怎么表示的呢?
以8-bit有符號為例,長得像這樣:
+---------+-----------+-----------+---- binary | 0010 0000 | 1010 0000 | ... decimal | 32 | -96 | ... +---------+-----------+-----------+----
每個分割符"|"分割字節(jié)。因為是 8-bit 有符號表示的采樣數據,所以采樣的范圍為-128~128。
OK,對于PCM數據流的存儲而言,上面僅僅只是單聲道。對于多聲道的PCM數據而言,通常會交錯排列,就像這樣:
+---------+-----------+-----------+-----------+-----------+---- FL | FR | FL | FR | FL | +---------+-----------+-----------+-----------+-----------+----
對于8-bit有符號的PCM數據而言,上圖表示第一個字節(jié)存放第一個左聲道數據(FL),第二個字節(jié)放第一個右聲道數據(FR),第三個字節(jié)放第二個左聲道數據(FL)…
七編碼
一個完整的音頻,經過采樣和量化后的信號,需要將它轉化為數字編碼脈沖,這一過程稱為編碼。
編碼簡單來說,就是按一定格式記錄采樣和量化后的數字數據。
PCM技術僅僅包含采樣和量化,并不包含編碼部分,這里僅簡單介紹。
7.1音頻編碼協(xié)議ACCAAC(Advanced Audio Coding)高級音頻編碼,是一種聲音數據的文件壓縮格式。AAC分為ADIF和ADTS兩種文件格式。
-
ADIF(Audio Data Interchange Format):音頻數據交換格式。這種格式的特征是只有音頻數據最前面具有頭字節(jié),音頻數據流中間沒有頭字節(jié)。因此它的解碼只能在頭字節(jié)處開始進行。故這種格式常用在磁盤文件中。
-
ADTS(Audio Data Transport Stream):音頻數據傳輸流。這種格式的特征是它每一單元音頻數據都有一個header字節(jié),解碼可以在這個流中任何位置開始。
7.2壓縮PCM數據是最原始的音頻數據,完全無損,所以PCM數據雖然音質優(yōu)秀但體積龐大,為了解決這個問題先后誕生了一系列的音頻格式,這些音頻格式運用不同的方法對音頻數據進行壓縮,其中有無損壓縮和有損壓縮兩種。
-
無損壓縮:將數據壓縮之后,通過解碼還能還原成與原始數據一模一樣的數據為無損壓縮。
-
ALAC、APE、FLAC
-
有損壓縮:消除冗余信息,如人耳能聽到的聲音為20Hz - 20000Hz 以內,所以可以將此范圍外的聲音去除掉。
-
MP3、AAC、OGG、WMA
7.3
其他概念
-
碼率:(也成位速、比特率) 是指在一個數據流中每秒鐘能通過的信息量,代表了壓縮質量。
比如MP3常用碼率有128kbit/s、160kbit/s、320kbit/s等等,越高代表著聲音音質越好。
MP3中的數據有ID3和音頻數據組成,ID3用于存儲歌名、演唱者、專輯、音軌等我們可以常見的信息。
$$
碼率 = 采樣率 * 采樣位數 * 聲道數
$$
例如:
如果是CD音質,采樣率44.1KHz,采樣位數16bit,立體聲(雙聲道), 碼率 = 44.1 * 1000 * 16 * 2 = 1411200bps = 176400Bps,那么錄制一分鐘的音樂, 大概176400 * 1 * 60 / 1024 / 1024 =10.09MB。
-
音頻幀: 音頻數據是流式的,本身沒有明確的一幀幀的概念,在實際的應用中,為了音頻算法處理/傳輸的方便,一般約定俗成取2.5ms~60ms為單位的數據量為一幀音頻。





