音頻開發基礎知識簡介

在現實生活中,音頻(audio)主要用在兩大場景中:語音(voice)和音樂(music)。語音主要用於溝通通信,如打電話,現在由於語音識別的發展,人機語音交互也是語音的一個應用,目前正在風口上,好多大廠都推出了智能音箱。音樂主要用於欣賞,如音樂播放。


下面簡單介紹音頻的基礎知識:

採樣和採樣頻率:
現在是數字時代,在音頻處理時要先把音頻的模擬信號變成數字信號,這叫A/D轉換。要把音頻的模擬信號變成數字信號,就需要採樣,或者叫抽樣。當要把音頻播放出來時則需要把數字信號轉換成模擬信號,這叫D/A轉換。一秒鐘內採樣的次數稱爲採樣頻率。根據Nyquist採樣定理,要想重建原始信號,採樣頻率必須大於信號中最高頻率的兩倍。採樣頻率越高,越接近原始信號,但是也加大了運算處理的複雜度。人能感受到的頻率範圍爲20HZ--20kHZ, 一般音樂的採樣頻率爲44.1kHZ(根據Nyquist採樣定理,採樣頻率大於信號中最高頻率的兩倍), 更高的可以是48kHZ和96kHZ,不過一般人用耳聽感覺不出差別了。語音主要是以溝通爲主,不需要像音樂那樣清晰,分窄帶和寬帶。窄帶頻率範圍爲300Hz--3400Hz,相應的採樣頻率爲8000Hz; 寬帶頻率範圍爲50Hz--7000Hz,相應的採樣頻率爲16000Hz,用16k採樣的語音就稱爲高清語音了。現在主流的語音採樣頻率爲16kHz。


採樣位數:
數字信號是用0和1來表示的。採樣位數就是採樣值用多少位0和1來表示,也叫採樣精度,用的位數越多就越接近真實聲音。如用8位表示,採樣值取值範圍就是-128--127,如用16位表示,採樣值取值範圍就是-32768--32767。現在一般都用16位採樣位數。

聲道(channel)
通常語音只用一個聲道。而對於音樂來說,既可以是單聲道(mono),也可以是雙聲道(即左聲道右聲道,叫立體聲stereo),還可以是多聲道,叫環繞立體聲,
多用於影院中。

音頻採集和播放
一般用專門的芯片(通常叫codec芯片)採集音頻,做A/D轉換,然後把數字信號通過I2S總線(主流用I2S總線,也可以用其他總線,比如PCM總線)送給CPU處理(也有的會把codec芯片與CPU芯片集成在一塊芯片中)。當要播放時CPU會把音頻數字信號通過I2S總線送給codec芯片,然後做D/A轉換得到模擬信號再播放出來。這部分對語音和音樂是通用的,只是用的採樣率有可能不一樣,音樂的採樣率用的高一些。

編解碼
如果把採樣值直接保存或者發送,會佔用很大的存儲空間或者很大的流量。以16kHz採樣率16位採樣位數單聲道爲例,一秒鐘就有32000(2字節*16000)字節。通常需要把採樣後的數字信號壓縮後才保存或者發送。把採樣值壓縮叫編碼(encode),形成比特流(bitstream). 把比特流還原出採樣值叫解碼(decode),統稱編解碼(codec)。

音頻的編解碼
通常也把音頻採樣過程叫脈衝編碼調製編碼,即PCM(Pulse Code Modulation)編碼,採樣值也叫PCM值。爲了節省保存空間或者發送流量,會對PCM值壓縮。目前
主要有三大技術標準組織制定壓縮標準:
a)ITU,主要制定有線語音的壓縮標準(g系列),有g711/g722/g726/g729等。
b)3GPP,主要制定無線語音的壓縮標準(amr系列等), 有amr-nb/amr-wb。後來ITU吸納了amr-wb,形成了g722.2。
c)MPEG,主要制定音樂的壓縮標準,有11172-3,13818-3/7,14496-3等。
一些大公司或者組織也制定壓縮標準,比如iLBC,OPUS。

無損壓縮和有損壓縮:把PCM數據壓縮後無任何損傷叫無損壓縮,不過壓縮程度不高。把PCM數據壓縮後有損傷叫有損壓縮,最多可以壓到幾十分之一,不過音頻質量差些。

音頻前後處理
音頻處理是指對PCM數據(也叫線性數據)進行處理,從而達到想要的效果,如回聲消除。
對音頻編碼前的PCM數據進行處理叫音頻前處理,主要用於語音中,來去除各種干擾,使聲音更清晰,主要有回聲消除、噪聲抑制、增益控制等。
對音頻解碼後的PCM數據進行處理叫音頻後處理,主要用於音樂中,來產生各種音效,使音樂更動聽,主要有均衡器、混響等。

音頻傳輸
這裏主要是指網絡傳輸,通過網絡把音頻數據傳給對方。語音和音樂兩種場景下有明顯的區別。
對於語音來說,實時性要求很高,主要用RTP/UDP做承載,由於UDP是不可靠傳輸,會丟包亂序等,影響語音質量,所以要採取相應的措施,主要有PLC(丟包補償)、FEC(前向糾錯)、重傳、jitter buffer等。
對於音樂來說,以前是播放本地音樂文件,近些年隨着網絡帶寬的加大,可以播放雲端的音樂文件了。播放時要把音樂文件傳給播放器,一般是邊播放邊下載,播放音樂對實時性要求不高,一般用HTTP/TCP做承載,也就不存在丟包亂序等問題了。
在軟件實現時,語音的傳輸要做好是不容易的,尤其在無線網絡環境下。個人覺得它是除了音頻算法外最難的部分(算法是有門檻的,需要精通數字信號處理)。

發佈了39 篇原創文章 · 獲贊 79 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章