溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

淺談網(wǎng)絡(luò)語(yǔ)音技術(shù)

發(fā)布時(shí)間:2020-06-14 21:18:44 來(lái)源:網(wǎng)絡(luò) 閱讀:349 作者:zhuweisky 欄目:編程語(yǔ)言

    當(dāng)我們使用像Skype、QQ這樣的工具和朋友流暢地進(jìn)行語(yǔ)音視頻聊天時(shí),我們可曾想過(guò)其背后有哪些強(qiáng)大的技術(shù)在支撐?本文將對(duì)網(wǎng)絡(luò)語(yǔ)音通話所使用到的技術(shù)做一些簡(jiǎn)單的介紹,算是管中窺豹吧。

一.概念模型

    網(wǎng)絡(luò)語(yǔ)音通話通常是雙向的,就模型層面來(lái)說(shuō),這個(gè)雙向是對(duì)稱的。為了簡(jiǎn)單起見(jiàn),我們討論一個(gè)方向的通道就可以了。一方說(shuō)話,另一方則聽(tīng)到聲音??此坪?jiǎn)單而迅捷,但是其背后的流程卻是相當(dāng)復(fù)雜的。我們將其經(jīng)過(guò)的各個(gè)主要環(huán)節(jié)簡(jiǎn)化成下圖所示的概念模型:

淺談網(wǎng)絡(luò)語(yǔ)音技術(shù)

    這是一個(gè)最基礎(chǔ)的模型,由五個(gè)重要的環(huán)節(jié)構(gòu)成:采集、編碼、傳送、解碼、播放。

1.語(yǔ)音采集

    語(yǔ)音采集指的是從麥克風(fēng)采集音頻數(shù)據(jù),即聲音樣本轉(zhuǎn)換成數(shù)字信號(hào)。其涉及到幾個(gè)重要的參數(shù):采樣頻率、采樣位數(shù)、聲道數(shù)。
    簡(jiǎn)單的來(lái)說(shuō):采樣頻率,就是在1秒內(nèi)進(jìn)行采集動(dòng)作的次數(shù);采樣位數(shù),就是每次采集動(dòng)作得到的數(shù)據(jù)長(zhǎng)度。
    而一個(gè)音頻幀的大小就等于:(采樣頻率×采樣位數(shù)×聲道數(shù)×時(shí)間)/8。 
    通常一個(gè)采樣幀的時(shí)長(zhǎng)為10ms,即每10ms的數(shù)據(jù)構(gòu)成一個(gè)音頻幀。假設(shè):采樣率16k、采樣位數(shù)16bit、聲道數(shù)1,那么一個(gè)10ms的音頻幀的大小為:(16000*16*1*0.01)/8 = 320 字節(jié)。計(jì)算式中的0.01為秒,即10ms。

2.編碼

    假設(shè)我們將采集到的音頻幀不經(jīng)過(guò)編碼,而直接發(fā)送,那么我們可以計(jì)算其所需要的帶寬要求,仍以上例:320*100 =32KBytes/s,如果換算為bits/s,則為256kb/s。這是個(gè)很大的帶寬占用。而通過(guò)網(wǎng)絡(luò)流量監(jiān)控工具,我們可以發(fā)現(xiàn)采用類似QQ等IM軟件進(jìn)行語(yǔ)音通話時(shí),流量為3-5KB/s,這比原始流量小了一個(gè)數(shù)量級(jí)。而這主要得益于音頻編碼技術(shù)。
    所以,在實(shí)際的語(yǔ)音通話應(yīng)用中,編碼這個(gè)環(huán)節(jié)是不可缺少的。目前有很多常用的語(yǔ)音編碼技術(shù),像G.729、iLBC、AAC、SPEEX等等。

3.網(wǎng)絡(luò)傳送

    當(dāng)一個(gè)音頻幀完成編碼后,即可通過(guò)網(wǎng)絡(luò)發(fā)送給通話的對(duì)方。對(duì)于語(yǔ)音對(duì)話這樣Realtime應(yīng)用,低延遲和平穩(wěn)是非常重要的,這就要求我們的網(wǎng)絡(luò)傳送非常順暢。

4.解碼

    當(dāng)對(duì)方接收到編碼幀后,會(huì)對(duì)其進(jìn)行解碼,以恢復(fù)成為可供聲卡直接播放的數(shù)據(jù)。

5.語(yǔ)音播放

    完成解碼后,即可將得到的音頻幀提交給聲卡進(jìn)行播放。

二.實(shí)際應(yīng)用中的難點(diǎn)及解決方案

    如果僅僅依靠上述的技術(shù)就能實(shí)現(xiàn)一個(gè)效果良好的應(yīng)用于廣域網(wǎng)上的語(yǔ)音對(duì)話系統(tǒng),那就沒(méi)什么太大的必要來(lái)撰寫此文了。正是有很多現(xiàn)實(shí)的因素為上述的概念模型引入了眾多挑戰(zhàn),使得網(wǎng)絡(luò)語(yǔ)音系統(tǒng)的實(shí)現(xiàn)不是那么簡(jiǎn)單,其涉及到很多專業(yè)技術(shù)。當(dāng)然,這些挑戰(zhàn)大多已經(jīng)有了成熟的解決方案。首先,我們要為“效果良好”的語(yǔ)音對(duì)話系統(tǒng)下個(gè)定義,我覺(jué)得應(yīng)該達(dá)到如下幾點(diǎn):
(1)低延遲。只有低延遲,才能讓通話的雙方有很強(qiáng)的Realtime的感覺(jué)。當(dāng)然,這個(gè)主要取決于網(wǎng)絡(luò)的速度和通話雙方的物理位置的距離,就單純軟件的角度,優(yōu)化的可能性很小。
(2)背景噪音小。
(3)聲音流暢、沒(méi)有卡、停頓的感覺(jué)。
(4)沒(méi)有回音。
    下面我們就逐個(gè)說(shuō)說(shuō)實(shí)際網(wǎng)絡(luò)語(yǔ)音對(duì)話系統(tǒng)中額外用到的技術(shù)。

1.回音消除 AEC

    現(xiàn)在大家?guī)缀醵家呀?jīng)都習(xí)慣了在語(yǔ)音聊天時(shí),直接用PC或筆記本的聲音外放功能。殊不知,這個(gè)小小的習(xí)慣曾為語(yǔ)音技術(shù)提出了多大的挑戰(zhàn)。當(dāng)使用外放功能時(shí),揚(yáng)聲器播放的聲音會(huì)被麥克風(fēng)再次采集,傳回給對(duì)方,這樣對(duì)方就聽(tīng)到了自己的回音。所以,實(shí)際應(yīng)用中,回音消除的功能是必需的。
    在得到采集的音頻幀后,在編碼之前的這個(gè)間隙,是回音消除模塊工作的時(shí)機(jī)。

淺談網(wǎng)絡(luò)語(yǔ)音技術(shù)

    其原理簡(jiǎn)單地來(lái)說(shuō)就是,回音消除模塊依據(jù)剛播放的音頻幀,在采集的音頻幀中做一些類似抵消的運(yùn)算,從而將回聲從采集幀中清除掉。這個(gè)過(guò)程是相當(dāng)復(fù)雜的,而且其還與你聊天時(shí)所處的房間的大小、以及你在房間中的位置有關(guān),因?yàn)檫@些信息決定了聲波反射的時(shí)長(zhǎng)。 智能的回音消除模塊,能動(dòng)態(tài)調(diào)整內(nèi)部參數(shù),以最佳適應(yīng)當(dāng)前的環(huán)境。

2.噪聲抑制 DENOISE

    噪聲抑制又稱為降噪處理,是根據(jù)語(yǔ)音數(shù)據(jù)的特點(diǎn),將屬于背景噪音的部分識(shí)別出來(lái),并從音頻幀中過(guò)濾掉。有很多編碼器都內(nèi)置了該功能。

3.抖動(dòng)緩沖區(qū) JitterBuffer

    抖動(dòng)緩沖區(qū)用于解決網(wǎng)絡(luò)抖動(dòng)的問(wèn)題。所謂網(wǎng)絡(luò)抖動(dòng),就是網(wǎng)絡(luò)延遲一會(huì)大一會(huì)小,在這種情況下,即使發(fā)送方是定時(shí)發(fā)送數(shù)據(jù)包的(比如每100ms發(fā)送一個(gè)包),而接收方的接收就無(wú)法同樣定時(shí)了,有時(shí)一個(gè)周期內(nèi)一個(gè)包都接收不到,有時(shí)一個(gè)周期內(nèi)接收到好幾個(gè)包。如此,導(dǎo)致接收方聽(tīng)到的聲音就是一卡一卡的。
    JitterBuffer工作于×××之后,語(yǔ)音播放之前的環(huán)節(jié)。即語(yǔ)音解碼完成后,將解碼幀放入JitterBuffer,聲卡的播放回調(diào)到來(lái)時(shí),從JitterBuffer中取出最老的一幀進(jìn)行播放。

淺談網(wǎng)絡(luò)語(yǔ)音技術(shù)

    JitterBuffer的緩沖深度取決于網(wǎng)絡(luò)抖動(dòng)的程度,網(wǎng)絡(luò)抖動(dòng)越大,緩沖深度越大,播放音頻的延遲就越大。所以,JitterBuffer是利用了較高的延遲來(lái)?yè)Q取聲音的流暢播放的,因?yàn)橄啾嚷曇粢豢ㄒ豢▉?lái)說(shuō),稍大一點(diǎn)的延遲但更流暢的效果,其主觀體驗(yàn)要更好。
    當(dāng)然,JitterBuffer的緩沖深度不是一直不變的,而是根據(jù)網(wǎng)絡(luò)抖動(dòng)程度的變化而動(dòng)態(tài)調(diào)整的。當(dāng)網(wǎng)絡(luò)恢復(fù)到非常平穩(wěn)通暢時(shí),緩沖深度會(huì)非常小,這樣因?yàn)镴itterBuffer而增加的播放延遲就可以忽略不計(jì)了。

4.靜音檢測(cè) VAD

    在語(yǔ)音對(duì)話中,要是當(dāng)一方?jīng)]有說(shuō)話時(shí),就不會(huì)產(chǎn)生流量就好了。靜音檢測(cè)就是用于這個(gè)目的的。靜音檢測(cè)通常也集成在編碼模塊中。靜音檢測(cè)算法結(jié)合前面的噪聲抑制算法,可以識(shí)別出當(dāng)前是否有語(yǔ)音輸入,如果沒(méi)有語(yǔ)音輸入,就可以編碼輸出一個(gè)特殊的的編碼幀(比如長(zhǎng)度為0)。
    特別是在多人視頻會(huì)議中,通常只有一個(gè)人在發(fā)言,這種情況下,利用靜音檢測(cè)技術(shù)而節(jié)省帶寬還是非??捎^的。

5.混音算法

    在多人語(yǔ)音聊天時(shí),我們需要同時(shí)播放來(lái)自于多個(gè)人的語(yǔ)音數(shù)據(jù),而聲卡播放的緩沖區(qū)只有一個(gè),所以,需要將多路語(yǔ)音混合成一路,這就是混音算法要做的事情。即使,你可以想辦法繞開(kāi)混音而讓多路聲音同時(shí)播放,那么對(duì)于回音消除的目的而言,也必需混音成一路播放,否則,回音消除最多就只能消除多路聲音中的某一路。
    混音可以在客戶端進(jìn)行,也可以在服務(wù)端進(jìn)行(可節(jié)省下行的帶寬)。如果使用了P2P通道,那么混音就只能在客戶端進(jìn)行了。如果是在客戶端混音,通常,混音是播放之前的最后一個(gè)環(huán)節(jié)。

    綜合上面的概念模型以及現(xiàn)實(shí)中用到的網(wǎng)絡(luò)語(yǔ)音技術(shù),下面我們給出一個(gè)完整的模型圖:

淺談網(wǎng)絡(luò)語(yǔ)音技術(shù)

    本文是我們?cè)趯?shí)現(xiàn)OMCS語(yǔ)音部分功能的一個(gè)粗略的經(jīng)驗(yàn)總結(jié)。在這里,我們只是對(duì)圖中各個(gè)環(huán)節(jié)做了一個(gè)最簡(jiǎn)單的說(shuō)明,而任何一塊深入下去,都可以寫成一篇長(zhǎng)篇論文甚至是一本書(shū)。所以,本文就算是為那些剛剛接觸網(wǎng)絡(luò)語(yǔ)音系統(tǒng)開(kāi)發(fā)的人提供一個(gè)入門的地圖,給出一些線索。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI