1. 音頻常用術(shù)語(yǔ)
2. Pcm (playback 、capture)
PCM 是英文 Pulse-code modulation 的縮寫,中文譯名是脈沖編碼調(diào)制。PCM就是要把聲音從模擬轉(zhuǎn)換成數(shù)字信號(hào)的一種技術(shù),簡(jiǎn)單的來(lái)說(shuō)就是利用一個(gè)固定的頻率對(duì)模擬信號(hào)進(jìn)行采樣,采樣后的信號(hào)的幅值按一定的采樣精度進(jìn)行量化,量化后的數(shù)值被連續(xù)地輸出、傳輸、處理或記錄到存儲(chǔ)介質(zhì)中。
PCM 信號(hào)的兩個(gè)重要指標(biāo)是采樣頻率和量化精度。
通常,播放音樂時(shí),用程序從存儲(chǔ)介質(zhì)中讀取音頻數(shù)據(jù)(MP3、WMA、AAC…),經(jīng)過(guò)解碼后,最終送到音頻驅(qū)動(dòng)程序中的就是PCM數(shù)據(jù),反過(guò)來(lái),在錄音時(shí),音頻驅(qū)動(dòng)不停地把采樣所得的PCM數(shù)據(jù)送回給應(yīng)用程序,由應(yīng)用程序完成壓縮、存儲(chǔ)等任務(wù)。所以,音頻驅(qū)動(dòng)的兩大核心任務(wù)就是:
- playback
如何把用戶空間的應(yīng)用程序發(fā)過(guò)來(lái)的PCM數(shù)據(jù),轉(zhuǎn)化為人耳可以辨別的模擬音頻;
- capture
把mic拾取到得模擬信號(hào),經(jīng)過(guò)采樣、量化,轉(zhuǎn)換為PCM信號(hào)送回給用戶空間的應(yīng)用程序。
3. 聲音要素
聲音三要素 - 音調(diào)、響度、音色
- 1、音調(diào) “刺耳、低沉”,這其實(shí)是我們對(duì)聲音高低的感覺描述,這一特征我們稱之為音調(diào)。
在物理定義上,聲音是物體振動(dòng)(比如我們的聲帶)產(chǎn)生的波,而音調(diào)由發(fā)聲體振動(dòng)的頻率決定,頻率越高(振動(dòng)越快)則音調(diào)越高,聽起來(lái)就越“刺耳”,反之音調(diào)越低、聽起來(lái)就越低沉。
我們聲帶的振動(dòng)頻率,約在100Hz~10KHz之間,基本對(duì)應(yīng)于常說(shuō)的男低音至女高音的頻率。
而我們耳朵的聽力范圍僅限于頻率20Hz ~ 20KHz,低于或者高于這個(gè)頻率范圍的聲音,分別被稱為次聲波(<20Hz)和超聲波(>20KHz),無(wú)法被人耳感知。不難發(fā)現(xiàn),雖然人耳的感知范圍有限,但人類的發(fā)聲頻率完全包含于人耳的感知范圍之內(nèi),這意味著任何人說(shuō)的話,總能被耳朵捕捉到,每個(gè)人都有發(fā)聲的權(quán)力,也總有一雙耳朵能傾聽到你的聲音。
- 2、響度 “響亮、微弱”,是我們對(duì)聲音強(qiáng)弱的感覺描述,這種特征我們稱之為響度。響度由發(fā)聲體振動(dòng)的幅度決定,當(dāng)傳播的距離相同時(shí),振動(dòng)幅度越大、則響度越大;相反,當(dāng)振幅一定時(shí),傳播距離越遠(yuǎn),響度越小,就是我們常說(shuō)的“距離太遠(yuǎn)了,聽不見”的原因。
- 3、音色 “風(fēng)聲、雨聲、人聲”,是我們對(duì)各種音調(diào)、各種響度聲音的綜合感受,這種特征我們稱之為“音色”。音色是一種“感官屬性”,我們利用這種“感官屬性”,能區(qū)分發(fā)聲的物體,發(fā)聲的狀態(tài),還能評(píng)價(jià)聽感上的優(yōu)劣,比如“鋼琴聲、二胡聲”,比如“只聞其聲,如見其人”,比如“悅耳、動(dòng)聽”等等。那么音色是怎么“產(chǎn)生”的,又由什么“決定”呢?前面我們了解到,聲音是由物體振動(dòng)產(chǎn)生的波,而物體整體振動(dòng)發(fā)出的只是基音,其各部分還有復(fù)合的振動(dòng),這些復(fù)合的振動(dòng)也會(huì)發(fā)出聲音并形成泛音,基音+泛音的不同組合就產(chǎn)生了多樣化的音色,聲音世界才變得豐富多彩起來(lái)。我們一般認(rèn)為音色由發(fā)聲體的材質(zhì)決定。
4. 聲音采樣-ADC/DAC
處理器要想“聽到”外界的聲音必須要把外界的聲音轉(zhuǎn)化為自己能夠理解的“語(yǔ)言”,處理器能理解的就是 0 和 1,也就是二進(jìn)制數(shù)據(jù)。
所以我們需要先把外界的聲音轉(zhuǎn)換為處理器能理解的 0 和 1,在信號(hào)處理領(lǐng)域,外界的聲音是模擬信號(hào),處理器能理解的是數(shù)字信號(hào),因 此這里就涉及到一個(gè)模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào)的過(guò)程,而完成這個(gè)功能的就是 ADC 芯片。
1)采樣
以一定采樣率,在時(shí)間軸上對(duì)模擬信號(hào)進(jìn)行數(shù)字化。
首先,我們沿著時(shí)間軸,按照固定的時(shí)間間隔 T(假設(shè) T=0.1s),依次取多個(gè)點(diǎn)(如圖中 1~10 所對(duì)應(yīng)波上的點(diǎn))。
此時(shí) T 稱為取樣周期,T 的倒數(shù)為本次取樣的采樣率(f=1/T=10Hz),f 即表示每秒鐘進(jìn)行采樣的次數(shù),單位為赫茲(Hz)。顯然,采樣率越高、單位時(shí)間的采樣點(diǎn)越多,就能越好的表示原波形(如果高頻率、密集地采集無(wú)數(shù)個(gè)點(diǎn),就相當(dāng)于完整地記錄了原波形)。
2)量化
以一定精度,在幅度軸上對(duì)模擬信號(hào)進(jìn)行數(shù)字化。
完成采樣后,我們接下來(lái)進(jìn)行音頻數(shù)字化的第二步,量化。采樣是在時(shí)間軸上對(duì)音頻信號(hào)進(jìn)行數(shù)字化,得到多個(gè)采樣點(diǎn);而量化,則是在幅度方向上進(jìn)行數(shù)字化,得到每個(gè)采樣點(diǎn)的幅度值。
如下圖所示,我們?cè)O(shè)定縱軸的坐標(biāo)取值范圍為 0 ~8,得到每個(gè)采樣點(diǎn)的縱坐標(biāo)(向上取整),這里的坐標(biāo)值即為量化后的幅度值。因?yàn)槲覀儗⒎容S分為了 8 段,有 8 個(gè)值用于量化取整,即本次量化的精度為 8。
顯然,如果分段越多,則幅度的量化取值將越準(zhǔn)確(取整帶來(lái)的誤差就越?。材茉胶玫谋硎驹ㄐ?。對(duì)于幅度的量化精度,有一個(gè)專有術(shù)語(yǔ)描述 – 位深,我們后面會(huì)詳細(xì)說(shuō)明。
3)編碼
編碼是整個(gè)聲音數(shù)字化的最后一步,其實(shí)聲音模擬信號(hào)經(jīng)過(guò)采樣,量化之后已經(jīng)變?yōu)榱藬?shù)字形式,但是為了方便計(jì)算機(jī)的儲(chǔ)存和處理,我們需要對(duì)它進(jìn)行編碼,以減少數(shù)據(jù)量。
常見的音頻編碼格式有PCM、PDM。
經(jīng)過(guò)量化后,我們得到了每個(gè)采樣點(diǎn)的幅度值。接下來(lái),就是音頻信號(hào)數(shù)字化的最后一步,編碼。編碼是將每個(gè)采樣點(diǎn)的幅度量化值,轉(zhuǎn)化為計(jì)算機(jī)可理解的二進(jìn)制字節(jié)序列。
如下圖所示,參照編碼部分的表格,樣本序號(hào)為樣本采樣順序,樣本值(十進(jìn)制)為量化的幅度值。而樣本值(二進(jìn)制)即為幅度值轉(zhuǎn)換后的編碼數(shù)據(jù)。最終,我們就得到了“0”、“1”形式的二進(jìn)制字節(jié)序列,也即離散的數(shù)字信號(hào)。
這里得到的,是未經(jīng)壓縮的音頻采樣數(shù)據(jù)裸流,也叫做PCM 音頻數(shù)據(jù)(Pulse Code Modulation,脈沖編碼調(diào)制)。實(shí)際應(yīng)用中,往往還會(huì)使用其他編碼算法做進(jìn)一步壓縮,以后的文章我們會(huì)再展開討論。
同理,如果處理器要向外界傳達(dá)自己的“心聲”,也就是放音,那么就涉及到將處理器能理解的 0 和 1 轉(zhuǎn)化為外界能理解的連續(xù)變化的聲音,這個(gè)過(guò)程就是將數(shù)字信號(hào)轉(zhuǎn)化為模擬信號(hào),而完成這個(gè)功能的是 DAC 芯片。
5. 音頻數(shù)字信號(hào)質(zhì)量三要素
1)采樣率
音頻采樣率,指的是單位時(shí)間內(nèi)(1s)對(duì)聲音信號(hào)的采樣次數(shù)(參考數(shù)字化過(guò)程-采樣)。常說(shuō)的 44.1KHz 采樣率,也即 1 秒采集了 44100 個(gè)樣本。
我們前面了解到,采樣率越高、采樣點(diǎn)越多,就可以越好的表示原波形,這就是采樣率的影響。
參考奈奎斯特采樣定理:采樣率 f,必須大于原始音頻信號(hào)最大振動(dòng)頻率fmax 的 2 倍(也即 f > 2fmax,fmax 被稱為奈奎斯特頻率),采樣結(jié)果才能用于完整重建原始音頻信號(hào);如果采樣率低于 2fmax,那么音頻采樣就存在失真。
比如,要對(duì)最高頻率fmax=8KHz 的原始音頻進(jìn)行采樣,則采樣率 f 至少為 16KHz。
對(duì)于最大頻率為 f 的音頻信號(hào),當(dāng)我們分別采用 f、2f、4f/3 的采樣率進(jìn)行采樣時(shí),所得到的采樣結(jié)果參考下圖。顯然,只有當(dāng)采樣率為 2f 時(shí),才能有效的保留原信號(hào)特征。采樣率 f 和3f/4 下得到的結(jié)果,都和原波形差別很大。
那么,我們需要多大的采樣率?
按前面的討論,采樣率似乎越大越好,是否如此呢?理論上來(lái)說(shuō),最低采樣率需要滿足奈奎斯特采樣定理,在該前提下,采樣率越高則保留的原始音頻信息越多,聲音自然就越真實(shí)。
但需要注意的是,采樣率越高則采樣得到的數(shù)據(jù)量越大,對(duì)存儲(chǔ)和帶寬的要求也就越高。在實(shí)際應(yīng)用中,我們?yōu)榱似胶鈳捄鸵糍|(zhì),不同場(chǎng)景往往會(huì)有不同的選擇。常見的選擇如下:
當(dāng)采樣率從 8KHz 翻倍至 16KHz 時(shí),聽感明顯變得更清晰、空靈和舒適。
此時(shí),采樣率的提升帶來(lái)了明顯的音質(zhì)提升。而采樣率從 16KHz 提升至 44.1KHz 時(shí),實(shí)際聽感卻好像沒有太大的變化,這是因?yàn)椴蓸勇实竭_(dá)一定程度后,音頻質(zhì)量已經(jīng)比較高,再往上提升帶來(lái)的優(yōu)化已經(jīng)很細(xì)微。
借助專業(yè)的頻譜分析軟件,或許可以觀察到高頻譜區(qū)域的能量差異,但對(duì)于人耳來(lái)說(shuō),已經(jīng)很難進(jìn)行區(qū)分。所以實(shí)際應(yīng)用中,我們不需要一味追求高采樣率,而是要綜合帶寬、性能、實(shí)際聽感,選擇合適的配置即可。
2)采樣位深/量化精度
位深度,也叫位寬,量化精度。
指的是在音頻采集量化過(guò)程中,每個(gè)采樣點(diǎn)幅度值的取值精度,一般使用bit作為單位。
常見的位寬有:8bit或者16bit。
比如,當(dāng)采樣位深為 8bit,則每個(gè)采樣點(diǎn)的幅度值可以用 2^8=256 個(gè)量化值表示;采樣位深為 16bit 時(shí),則每個(gè)采樣點(diǎn)的幅度值可以用 2^16=65536 個(gè)量化值表示。
顯然,16bit 比 8bit 可存儲(chǔ)、表示的數(shù)據(jù)更多、更精細(xì),量化時(shí)產(chǎn)生的誤差損失就越小。位深影響聲音的解析精度、細(xì)膩程度,我們可以將其理解為聲音信號(hào)的“分辨率”,位深越大,音色也越真實(shí)、生動(dòng)。
采樣位深選擇和采樣率的選擇類似,雖然理論上來(lái)說(shuō)位深越大越好,但是綜合帶寬、存儲(chǔ)、實(shí)際聽感的考慮,我們應(yīng)該為不同場(chǎng)景選用不同的位深。
3)聲道數(shù)
我們常說(shuō)的單聲道、雙聲道,其實(shí)就是在描述一個(gè)音頻信號(hào)的聲道數(shù)(分別對(duì)應(yīng)于聲道數(shù) 1 和 2)。
聲波是可以疊加的,音頻的采集和播放自然也如此,我們可以同時(shí)從多個(gè)音頻源采集聲音,也可以分別輸出到多個(gè)揚(yáng)聲器,聲道數(shù)一般指聲音采集錄制時(shí)的音源數(shù)量或播放時(shí)的揚(yáng)聲器數(shù)量。
除了常見的聲道數(shù)1、2,PC上還有4,6,8等聲道的擴(kuò)展。一般來(lái)說(shuō)聲道數(shù)越多,聲音的方向感、空間感越豐富,聽感也就越好。
目前很多手機(jī)廠商已經(jīng)將雙聲道揚(yáng)聲器作為旗艦標(biāo)配。在RTC音樂場(chǎng)景,越來(lái)越多的應(yīng)用也開始采用雙聲道配置,其目的也是進(jìn)一步提高聽感,給用戶更好的體驗(yàn)。
聲道數(shù)的選擇實(shí)時(shí)音視頻場(chǎng)景下,聲道的選擇受限于編解碼器、前處理算法的能力,一般僅支持單、雙聲道。而雙聲道配置主要在語(yǔ)音電臺(tái)、音樂直播、樂器教學(xué)、ASMR 直播等場(chǎng)景使用,其它場(chǎng)景單聲道即可滿足。
當(dāng)然,最終能否使用哪一種聲道配置,還是由實(shí)際采集、播放設(shè)備的能力決定。解碼音頻數(shù)據(jù)時(shí),可以獲取數(shù)據(jù)的聲道數(shù),在實(shí)際播放時(shí),也要先獲取設(shè)備屬性。
如果設(shè)備支持雙聲道,但待播放數(shù)據(jù)是單聲道的,就需要將單聲道數(shù)據(jù)轉(zhuǎn)成雙聲道數(shù)據(jù)再播放;同理,如果設(shè)備只支持單聲道,但數(shù)據(jù)是雙聲道的,也需要將雙聲道數(shù)據(jù)轉(zhuǎn)換成單聲道數(shù)據(jù)再播放。
目前,CD音頻的采樣頻率通常為 44100 Hz,量化精度是 16bit。
6. 音頻碼率
數(shù)字音頻的三要素不僅影響音頻質(zhì)量,也會(huì)影響音頻存儲(chǔ)、傳輸所需的空間、帶寬。而實(shí)際應(yīng)用場(chǎng)景下,音質(zhì)決定用戶體驗(yàn)、帶寬決定成本,都是我們必須考慮到。
音質(zhì)可能更多是主觀上的感受,但帶寬、空間是比較容易量化的,我們需要了解音頻碼率的概念。
音頻碼率,又稱為比特率,指的是單位時(shí)間內(nèi)(一般為1s)所包含的音頻數(shù)據(jù)量,可以通過(guò)公式計(jì)算。
數(shù)據(jù)傳輸率:數(shù)據(jù)傳輸率(bps) = 采樣頻率 × 量化位數(shù) × 聲道數(shù)。
聲音信號(hào)的數(shù)據(jù)量:數(shù)據(jù)量(byte)= 數(shù)據(jù)傳輸率 * 持續(xù)時(shí)間 / 8。
比如采樣率 44.1K Hz,位深16bit、雙聲道音頻PCM數(shù)據(jù),它的原始碼率為:
原始碼率 = 采樣率/s x 位深/bit x 聲道數(shù) x 時(shí)長(zhǎng)(1s)
44.1 * 1000 * 16 * 2 * 1 = 1411200 bps = 1411.2 kbps = 1.411 Mbps (需要注意單位之間的差異和轉(zhuǎn)換,b=bit)
如果一個(gè)PCM文件時(shí)長(zhǎng)為1分鐘,則傳輸/存儲(chǔ)這個(gè)文件需要的數(shù)據(jù)量為:
1.411 Mbps * 60s = 86.46Mb
上述計(jì)算結(jié)果是未經(jīng)壓縮的、原始音頻PCM數(shù)據(jù)的碼率。
RTC場(chǎng)景下,往往還需要再使用 AAC、OPUS 等編碼算法做編碼壓縮,進(jìn)一步減小帶寬、存儲(chǔ)的壓力。碼率的選擇也是一個(gè)綜合質(zhì)量和成本的博弈。
7. 噪聲抑制
有上圖所示, 1、某一時(shí)刻,用戶 A 開始說(shuō)話,產(chǎn)生的語(yǔ)音 A 被麥克風(fēng) A 采集、并通過(guò)網(wǎng)絡(luò)傳輸給用戶 B,成為待播放的語(yǔ)音 A1
2、語(yǔ)音 A1 被揚(yáng)聲器 B 播放后,通過(guò)直射、周圍環(huán)境反射等方式,最終又被麥克風(fēng) B 采集為語(yǔ)音 A2(圖中的回聲 A2)
3、被回采的語(yǔ)音 A2,會(huì)通過(guò)網(wǎng)絡(luò)傳再輸給用戶 A,并通過(guò)揚(yáng)聲器 A 播放出來(lái)
經(jīng)過(guò)上述過(guò)程,用戶 A 會(huì)發(fā)現(xiàn):自己剛說(shuō)完一句話,過(guò)一會(huì)兒居然又聽到了自己的“復(fù)述”,這就是 RTC 場(chǎng)景下的“回聲”現(xiàn)象。
噪聲抑制技術(shù)用于消除背景噪聲,改善語(yǔ)音信號(hào)的信噪比和可懂度,讓人和機(jī)器聽得更清楚。
8. I2S
I2S(Inter-IC Sound)總線有時(shí)候也寫作 IIS, I2S 是飛利浦公司提出的一種用于數(shù)字音頻設(shè)備之間進(jìn)行音頻數(shù)據(jù)傳輸?shù)目偩€。
I2S 總線用于主控制器(譬如 ZYNQ 7010/7020)和音頻 CODEC 芯片之間傳輸音頻數(shù)據(jù);主控制器和音頻 CODEC 都得支持 I2S 協(xié)議 。
在I2S總線上,只能同時(shí)存在一個(gè)主設(shè)備和發(fā)送設(shè)備,主設(shè)備可以是發(fā)送設(shè)備或接收設(shè)備。
I2S是PCM的一個(gè)分支,接口定義相同。
I2S的采樣率一般為44.1/48KHZ,PCM采樣頻率一般為8/16KHZ等。
I2S接口有4組信號(hào):SCK(位時(shí)鐘)、LRCK(幀時(shí)鐘)、SDI/SDO(數(shù)據(jù))。
LRCLK
采樣時(shí)鐘,也叫WS(Word Select):字段選擇線,幀時(shí)鐘 (LRC) 線,
用于切換左右聲道數(shù)據(jù),
- 1 :傳輸左聲道的數(shù)據(jù)
0 :表示正在傳輸右聲道的數(shù)據(jù)
WS的頻率等于采樣頻率,比如采樣率為44.1KHz的音頻,WS=44.1KHz;
SCLK/BCLK
串行時(shí)鐘信號(hào),也叫位時(shí)鐘(BCLK)、CK(Serial Clock)
數(shù)字音頻的每一位數(shù)據(jù)都對(duì)應(yīng)有一個(gè) CK脈沖,它的頻率為:2* 采樣頻率 * 量化位數(shù), 2 代表左右兩個(gè)通道數(shù)據(jù)
比如采樣頻率為44.1KHz、 16位的立體聲音頻,那么
SCK=2×44100×16=1411200Hz=1.4112MHz;
SD/DATA
SD(Serial Data):串行數(shù)據(jù)線
用于發(fā)送或接收兩個(gè)時(shí)分復(fù)用的數(shù)據(jù)通道上的數(shù)據(jù) (僅半雙工模式),如果是全雙工模式,該信號(hào)僅用于發(fā)送數(shù)據(jù)。
MCLK
MCLK (Master/System clock input)也叫做主時(shí)鐘或系統(tǒng)時(shí)鐘,音頻 CODEC 芯片與主控制器之間同步用,一般是采樣率的 256 倍或 384 倍。
之所以引入MCLK。這是由CODEC內(nèi)部基于Delta-Sigma (ΔΣ)的架構(gòu)設(shè)計(jì)要求使然,其主要原因是因?yàn)檫@類的CODEC沒有所謂提供芯片的工作時(shí)鐘晶振電路,需要使用控制器為編解碼芯片提供的系統(tǒng)時(shí)鐘。
如果使用MCLK時(shí)鐘的話,MCLK時(shí)鐘頻率一般為采樣頻率的256倍或384倍,具體參考特定器件手冊(cè)。
下圖為一幀立體聲音頻時(shí)序圖
邏輯分析儀抓到的數(shù)據(jù)幀:
通道 0 是 LRCK 時(shí)鐘,通道 1 為 BCLK,通道 2 是 DACDATA,通道 3 是MCLK。
9. codec
處理器如果要想播放或者采集聲音, 需要用到 DAC 和 ADC 這兩款芯片。
那是不是買兩顆 DAC 和 ADC 芯片就行了呢?
答案肯定是可以的,但是音頻不單單是能出聲、能聽到就行。
我們往往需要聽到的聲音動(dòng)聽、錄進(jìn)去的語(yǔ)音貼近真實(shí)、可以調(diào)節(jié)音效、對(duì)聲音能夠進(jìn)行一些處理(需要 DSP 單元)、擁有統(tǒng)一的標(biāo)準(zhǔn)接口,方便開發(fā)等等。
將這些針對(duì)聲音的各種要求全部疊加到 DAC 和ADC 芯片上,那么就會(huì)得到一個(gè)專門用于音頻的芯片,也就是音頻編解碼芯片,英文名字就是 Audio CODEC。
codec芯片舉例:
wolfson(歐勝) 的WM8960;順芯的es8388、es8396;瑞芯微的rk809
Codec里面包含了I2S接口、D/A、A/D、Mixer、PA(功放),通常包含多種輸入Mic、Line-in、I2S、PCM和多個(gè)輸出hp(headphone)耳機(jī)、spk(Speak)喇叭、聽筒,Line-out
下圖是codec es8396芯片的模塊圖。
10. dai
dai(digital audio interface)
數(shù)字音頻接口全部是硬件接口,是實(shí)實(shí)在在的物理連線方式,即同一個(gè)PCB板上IC芯片和IC芯片之間的通訊協(xié)議。和音頻編碼格式完全是兩回事。
數(shù)字音頻接口有PCM、I2S、AC97、PDM;
- I2S和PCM(TDM)接口傳輸?shù)臄?shù)據(jù)是PCM編碼格式的音頻數(shù)據(jù);
- PDM接口傳輸?shù)臄?shù)據(jù)是PDM編碼格式的音頻數(shù)據(jù);
下圖是接口硬件接線的一般場(chǎng)景: