窗口,因此將使得混響聲場(chǎng)輸出的干聲和濕聲分別相應(yīng)地通過干聲窗口和濕聲窗口相加以得到最終輸出聲音,即補(bǔ)償?shù)囊纛l流。
[0044]通過如上所述的方法將使得編解碼器在發(fā)生網(wǎng)絡(luò)丟包時(shí)得以通過模擬且不斷修正各項(xiàng)參數(shù)的混響聲場(chǎng)輸出余音,并使這段余音經(jīng)過一定的平滑處理銜接,進(jìn)而得到了補(bǔ)償?shù)囊纛l流,對(duì)語音和音樂等音頻解碼輸出的流暢度都有明顯的提高,極大地改善了輸出效果。
[0045]如上所述的方法是獨(dú)立于編解碼之外進(jìn)行丟幀補(bǔ)償?shù)模虼似漭敵鲂Ч⒉灰蕾囉诰幗獯a種類的,對(duì)輸入的聲音種類(例如,語音或音樂)也沒有強(qiáng)相關(guān),因此可以廣泛地應(yīng)用于聲音丟失的補(bǔ)償,極大地?cái)U(kuò)充了音頻應(yīng)用場(chǎng)景。
[0046]如圖2所示,在一個(gè)實(shí)施例中,上述步驟S150之前,該方法還包括:
[0047]步驟S210,根據(jù)丟幀信息更新當(dāng)前丟幀狀態(tài)。
[0048]本實(shí)施例中,丟幀信息用于指示當(dāng)前的音頻流發(fā)生了丟幀的情況,以進(jìn)行當(dāng)前丟幀狀態(tài)的更新。其中,當(dāng)前丟幀狀態(tài)將包括了對(duì)當(dāng)前音頻流的丟幀所進(jìn)行的記錄以及對(duì)記錄的音頻流丟幀進(jìn)行估計(jì)所得到的丟幀統(tǒng)計(jì)狀況,以用于如實(shí)反映音頻流的丟幀狀況。
[0049]在一個(gè)實(shí)施例中,上述步驟S210的具體過程為:根據(jù)丟幀信息記錄當(dāng)前發(fā)生的音頻流丟幀,并由記錄的音頻流丟幀估計(jì)得到當(dāng)前的丟幀統(tǒng)計(jì)狀況。
[0050]本實(shí)施例中,根據(jù)丟幀信息對(duì)當(dāng)前音頻流所發(fā)生的丟幀,即通過一定的標(biāo)識(shí)對(duì)音頻流發(fā)生丟幀和未發(fā)生丟幀的狀況進(jìn)行記錄,例如,用“ I ”表示該幀音頻流沒有丟失,用“O”表示該幀音頻流實(shí)際為空,發(fā)生了丟幀,因此,所進(jìn)行的連續(xù)記錄將表明了一串連續(xù)的若干幀音頻流所對(duì)應(yīng)的丟幀狀況。如“0001”將記錄了四幀音頻流所對(duì)應(yīng)的丟幀狀況,即當(dāng)前輸入的一幀音頻流是正常的幀,未發(fā)生丟幀的狀況,但是前一幀、前兩幀和前三幀均為空幀,都發(fā)生了丟幀。
[0051]因此通過對(duì)發(fā)生的音頻流丟幀所進(jìn)行的記錄將可以獲知當(dāng)前丟幀是第幾次丟幀,進(jìn)而由記錄的音頻流丟幀進(jìn)行估計(jì)以得到當(dāng)前的丟幀統(tǒng)計(jì)狀況,其中,當(dāng)前的丟幀統(tǒng)計(jì)狀況可以通過統(tǒng)計(jì)的丟幀率表示。
[0052]步驟S230,通過得到的當(dāng)前丟幀狀態(tài)和音頻流對(duì)應(yīng)的音頻信息修正構(gòu)建的混響聲場(chǎng)。
[0053]本實(shí)施例中,根據(jù)當(dāng)前丟幀狀態(tài)和當(dāng)前音頻流所對(duì)應(yīng)的音頻信息對(duì)構(gòu)建的混響聲場(chǎng)中的各項(xiàng)參數(shù)進(jìn)行修正,以時(shí)刻保證混響聲場(chǎng)中的混響效果。
[0054]如圖3所示,在一個(gè)實(shí)施例中,上述步驟S230包括:
[0055]步驟S231,由音頻流對(duì)應(yīng)的音頻信息提取能量信息、噪聲信息和音素信息。
[0056]本實(shí)施例中,音頻流所對(duì)應(yīng)的音頻信息將包括了能量信息、噪聲信息和音素信息等,其中,能量信息和噪聲信息指的是波形的峰值電平,音素信息則是用于判斷當(dāng)前幀音頻流是池首還是清首O
[0057]步驟S233,通過當(dāng)前丟幀狀態(tài)和提取的能量信息、噪聲信息、音素信息對(duì)構(gòu)建的混響聲場(chǎng)進(jìn)行參數(shù)更新,以得到修正的混響聲場(chǎng)。
[0058]本實(shí)施例中,能量信息、噪聲信息和音素信息都是會(huì)變化的,因此,在發(fā)生的變化進(jìn)入到一個(gè)指定的區(qū)間之后將會(huì)相應(yīng)地對(duì)混響聲場(chǎng)中的參數(shù)進(jìn)行調(diào)整。而對(duì)于當(dāng)前丟幀狀態(tài)而言,該當(dāng)前丟幀狀態(tài)可為統(tǒng)計(jì)的丟幀率,將對(duì)丟幀率所對(duì)應(yīng)的值劃分為三個(gè)區(qū)間,即高中低所對(duì)應(yīng)的三個(gè)區(qū)間。當(dāng)丟幀率高時(shí),混響聲場(chǎng)的混響時(shí)間參數(shù)將增大,從而產(chǎn)生足夠的余音來填充空幀;例如,在連續(xù)丟的是第三幀時(shí),余音衰減可能太厲害,需要進(jìn)行增益補(bǔ)償。
[0059]如圖4所示,在一個(gè)實(shí)施例中,上述步驟S170包括:
[0060]步驟S171,由當(dāng)前的丟幀統(tǒng)計(jì)狀況確定平滑窗形狀。
[0061]本實(shí)施例中,平滑處理所用的平滑窗口將由當(dāng)前幀是怎樣的幀來確定其所對(duì)應(yīng)的平滑窗形狀。
[0062]步驟S173,通過確定的平滑窗形狀對(duì)輸出的余音進(jìn)行平滑處理以得到補(bǔ)償?shù)囊纛l流。
[0063]本實(shí)施例中,確定的平滑窗形狀包括了干聲窗口所對(duì)應(yīng)的平滑窗形狀和濕聲窗口所對(duì)應(yīng)的平滑窗形狀,因此,在進(jìn)行平滑處理的過程中,通過干聲窗口所對(duì)應(yīng)的平滑窗形狀和濕聲窗口所對(duì)應(yīng)的平滑窗形狀將對(duì)余音所包含的干聲和濕聲進(jìn)行平滑過渡,以得到最終輸出聲音,即對(duì)丟幀進(jìn)行補(bǔ)償?shù)囊纛l流。
[0064]例如,若對(duì)音頻流發(fā)生丟幀和未發(fā)生丟幀的狀況進(jìn)行記錄所得到的連續(xù)四幀音頻流所對(duì)應(yīng)的丟幀狀況為“1110”,則說明了在這四幀音頻流中,前三幀音頻流均是正常的,第四幀音頻流是一次孤立的丟幀,由于設(shè)置的延時(shí)處理的時(shí)間為5毫秒,因此,相應(yīng)干聲窗口內(nèi)將有5毫秒是正常數(shù)據(jù),其后則為靜音數(shù)據(jù),而濕聲窗口內(nèi)的前5毫秒將和干聲做平滑過渡以過渡到余下的部分得到補(bǔ)償?shù)囊纛l流。
[0065]下面結(jié)合一個(gè)具體的實(shí)施例來闡述上述音頻流中的丟幀補(bǔ)償實(shí)現(xiàn)方法。該實(shí)施例中,如圖5所示,音頻流和丟幀信息同步輸入,其中,通過丟幀信息可知由celt編解碼器或都其它編解碼器所輸入的音頻流發(fā)生了丟幀的狀況,實(shí)際為一空幀,此時(shí)執(zhí)行S501將空幀置為靜音,并如S502所述按照預(yù)設(shè)時(shí)間進(jìn)行延時(shí)處理,以延時(shí)靜音對(duì)混響聲場(chǎng)的輸入。
[0066]延時(shí)預(yù)設(shè)時(shí)間之后,將執(zhí)行S503由混響聲場(chǎng)輸出余音,該余音包括了干聲和濕聲,進(jìn)而對(duì)干聲和濕聲執(zhí)行S504的平滑處理即可得到最終輸出的音頻流,這一最終輸出的音頻流即為與當(dāng)前輸入的音頻流所發(fā)生的丟幀相對(duì)應(yīng)的補(bǔ)償幀。
[0067]如圖5所示,與音頻流同步輸入的丟幀信息將由丟幀狀態(tài)機(jī)510進(jìn)行當(dāng)前丟幀狀態(tài)的更新,以通過丟幀狀態(tài)準(zhǔn)確獲知當(dāng)前輸入的音頻流發(fā)生了丟幀,進(jìn)而立即將其置為靜音,并依次執(zhí)行如S502至S504所示的丟幀補(bǔ)償過程。
[0068]而在將執(zhí)行S503中由混響聲場(chǎng)輸出干聲和濕聲的步驟之前,將對(duì)丟幀狀態(tài)機(jī)510所更新得到的當(dāng)前丟幀狀態(tài)進(jìn)行丟幀狀態(tài)估計(jì),如S505,以得到當(dāng)前的丟幀統(tǒng)計(jì)狀況,進(jìn)而通過得到的當(dāng)前丟幀統(tǒng)計(jì)狀況和音頻流對(duì)應(yīng)的音頻信息對(duì)混響聲場(chǎng)進(jìn)行修正,以保證混響聲場(chǎng)的混響效果,其中,該音頻信息即包括了如圖5所示的能量信息、噪聲信息和音素信肩、O
[0069]如圖6所示,在一個(gè)實(shí)施例中,一種音頻流中的丟幀補(bǔ)償實(shí)現(xiàn)裝置,包括輸入獲取模塊110、預(yù)處理模塊130、混響模塊150和平滑處理模塊170。
[0070]輸入獲取模塊110,用于獲取由編解碼器輸入的音頻流和丟幀信息。
[0071]本實(shí)施例中,編解碼器為音頻引擎中使用的編解碼器,例如,該編解碼器可為celt高音質(zhì)編解碼器。輸入獲取模塊110當(dāng)前所獲取到的由編解碼器輸入的音頻流即為編解碼器所輸出的音頻流。在未發(fā)生音頻流的丟幀時(shí),不需要對(duì)音頻流進(jìn)行丟幀補(bǔ)償;當(dāng)發(fā)生音頻流的丟幀時(shí),則需要對(duì)獲取到的由編解碼器輸入的音頻流進(jìn)行優(yōu)化,以實(shí)現(xiàn)丟幀補(bǔ)償。
[0072]由音頻引擎的上層得到當(dāng)前的丟幀信息,以將傳遞至編解碼器中,該音頻引擎的上層是相對(duì)于編解碼器而言的。在判斷到當(dāng)前的音頻流發(fā)生了丟幀的情況之后,將生成相應(yīng)的丟幀信息,得以由這一丟幀信息獲知音頻流的丟幀狀況。
[0073]在一個(gè)實(shí)施例中,輸入獲取模塊110還用于逐幀獲取由編解碼器輸入的音頻流和當(dāng)前幀音頻流所對(duì)應(yīng)的丟幀信息。
[0074]本實(shí)施例中,進(jìn)行丟幀補(bǔ)償?shù)妮斎雽艘粠纛l流和該幀音頻流所對(duì)應(yīng)的丟幀信息,也就是說,輸入獲取模塊110對(duì)音頻流的獲取和丟幀補(bǔ)償?shù)膶?shí)現(xiàn)都是以幀為單位進(jìn)行的。
[0075]預(yù)處理模塊130,用于根據(jù)丟幀信息將音頻流置為靜音,并按照預(yù)設(shè)時(shí)間進(jìn)行延時(shí)處理。
[0076]本實(shí)施例中,在發(fā)生音頻流的丟幀時(shí),所獲取到的音頻流即為空幀,此時(shí)預(yù)處理模塊130將靜音作為混響聲場(chǎng)的輸入。
[0077]具體的,在獲知發(fā)生了丟幀之后預(yù)處理模塊130對(duì)當(dāng)前丟幀時(shí)刻所對(duì)應(yīng)