音頻社交的變聲,應(yīng)用了哪些算法?
在移動(dòng)互聯(lián)網(wǎng)技術(shù)加持下,音頻社交不僅可以滿足多場(chǎng)景下的社交需求,體驗(yàn)也迎來(lái)了革新,尤其是AI+5G技術(shù),對(duì)音頻社交的驅(qū)動(dòng)將更為明顯。很多社交產(chǎn)品會(huì)基于音頻技術(shù)增加變聲、美聲、立體聲、混響和場(chǎng)景化音效等,來(lái)豐富用戶的聽(tīng)感體驗(yàn)。本篇拍樂(lè)云Pano的技術(shù)分享就來(lái)講講音頻社交場(chǎng)景中的變聲是應(yīng)用了哪些算法來(lái)實(shí)現(xiàn)的。
01 變聲是如何實(shí)現(xiàn)的?
當(dāng)我們?nèi)粘S^看視頻時(shí),有時(shí)會(huì)使用倍速播放。在加快播放速度時(shí),我們會(huì)感覺(jué)視頻中的男聲聽(tīng)起來(lái)有點(diǎn)像“女聲”;在放慢播放速度時(shí),我們能聽(tīng)到類似于《瘋狂動(dòng)物城》中那個(gè)說(shuō)話慢吞吞的“樹懶聲”。這些其實(shí)就是簡(jiǎn)單的變聲。
從技術(shù)的角度并不難理解,如果我們用16k的采樣率去采集一個(gè)100Hz的正弦波,而用32k或者8k的采樣率去播放的話,那么這個(gè)正弦波的頻率就會(huì)提升一倍(200Hz)或者降低一倍(50Hz)。這樣將音頻的頻率升高或者降低的方法很簡(jiǎn)單,提升一倍就是每隔一個(gè)丟棄一個(gè)樣本,放慢一倍就是進(jìn)行一個(gè)線性插值。用專業(yè)的術(shù)語(yǔ)來(lái)說(shuō),這是一個(gè)重采樣的過(guò)程。按照重采樣方法是可以實(shí)現(xiàn)一個(gè)變調(diào)的,但同時(shí)也很容易發(fā)現(xiàn),音頻的時(shí)間變長(zhǎng)或者變短了,和我們?cè)驾斎氲囊纛l長(zhǎng)度不一致了,這在實(shí)時(shí)通信中是不能接受的。在實(shí)時(shí)通信中,我們要的是一個(gè)變調(diào)不變速的變聲功能,單一的重采樣方法是做不到的。當(dāng)然除了重采樣,我們還有其他的一些變聲方法能夠?qū)崿F(xiàn)變調(diào)不變速的需求。
02 變聲有哪些常見(jiàn)的算法?
常見(jiàn)的變調(diào)算法有時(shí)域、頻域和參量法。時(shí)域較易實(shí)現(xiàn),多采用變速不變調(diào)+重采樣實(shí)現(xiàn)變調(diào)不變速等。頻域以及參量法就相對(duì)復(fù)雜,并且計(jì)算量相比于時(shí)域大了很多。本次主要簡(jiǎn)單介紹一些常見(jiàn)的時(shí)域和頻域算法。
在時(shí)域內(nèi)主要是OLA(Overlap-Add)類算法:OLA,同步波形疊加法(Synchronized Overlap-Add, SOLA)、固定同步波形疊加法(Synchronized Overlap-Add and Fixed Synthesis, SOLAFS)、時(shí)域基音同步疊加法(Time-Domain Pitch Synchronized Overlap-Add, TD-PSOLA) 波形相似疊加法(waveform similarity overlap-and-add, WSOLA)等,頻域內(nèi)主要是基音同步波形疊加算法(Pitch-Synchronized OLA, PSOLA)等。
1)OLA
OLA是最簡(jiǎn)單粗暴的一種TSM方式。對(duì)原始語(yǔ)音進(jìn)行分幀后,間隔一段采樣點(diǎn),重復(fù)或者丟棄其中某些語(yǔ)音幀來(lái)重新建立語(yǔ)音。這樣就實(shí)現(xiàn)簡(jiǎn)單的變音效果。原理如下圖所示:
a.分幀,對(duì)時(shí)域音頻進(jìn)行分幀處理;
b.在輸入信號(hào)X上加上一個(gè)漢寧窗;
c.在第一幀后間隔固定點(diǎn)數(shù)Ha取出第二幀;
d.把第二幀語(yǔ)音加窗后與第一幀overlap-add。
如此操作到語(yǔ)音結(jié)束就能重建一個(gè)新的變調(diào)語(yǔ)音。但是這算法存在一定的局限性,無(wú)法保證語(yǔ)音是連續(xù)的,可能會(huì)出現(xiàn)基音斷裂的情況。這樣的語(yǔ)音聽(tīng)起來(lái)會(huì)有咔吧聲,造成了語(yǔ)音的失真。
2)波形相似疊加法(waveform similarity overlap-and-add, WSOLA)
了解了簡(jiǎn)單粗暴的OLA算法后,我們可以清晰的知道OLA算法的局限和缺陷。當(dāng)然也知道造成這種缺陷的原因是什么:相位不連續(xù)導(dǎo)致的。為了減小基音斷裂和相位不連續(xù)問(wèn)題,Verhelst和Roelands提出了波形相似疊加法(WSOLA)。目前開(kāi)源代碼soundtouch使用的就是該算法。其原理如下圖:
a.在原始音頻中取出第一幀,讓后對(duì)該幀進(jìn)行加窗,輸出到y(tǒng)信號(hào)上;
b+c. 在虛線藍(lán)色范圍內(nèi)找到第二幀,第二幀相位參數(shù)應(yīng)該和第一個(gè)幀相位對(duì)齊,在藍(lán)色范圍內(nèi)尋找與第二幀最相似的幀作為輸出幀,作為y信號(hào)的第二幀;
d. 最為相似的幀與第一幀overlap-add到y(tǒng)信號(hào)上
重點(diǎn)在b.c兩步操作中,如何尋找最相似的幀。很多論文中給出了一種最直接的方法,計(jì)算“自相關(guān)”。雖然WSOLA能夠解決基音斷裂和相位不連續(xù)問(wèn)題,但是它會(huì)影響音色,將WSOLA應(yīng)用于打擊樂(lè)樂(lè)器的音頻時(shí),這種現(xiàn)象將會(huì)更加的明顯。
3)基音同步波形疊加算法(Pitch-Synchronized OLA, PSOLA)
PSOLA的算法原理與WSOLA有所不同,PSOLA在頻域處理的,它能進(jìn)一步達(dá)到基音同步的目的。在該算法中,變速和變調(diào)是兩個(gè)獨(dú)立的過(guò)程,由不同的參數(shù)控制。先對(duì)基音進(jìn)行檢測(cè),標(biāo)記基音周期。通過(guò)標(biāo)記的基音周期將語(yǔ)音劃分為多個(gè)合成單元。通過(guò)重復(fù)或者丟失合成單元來(lái)實(shí)現(xiàn)語(yǔ)速的控制。通過(guò)改變相鄰合成單元的重疊長(zhǎng)度或者重采樣結(jié)合變速來(lái)改變語(yǔ)音的基頻。
PSOLA是對(duì)基頻進(jìn)行修改的,因此很好的保護(hù)了共振峰,不會(huì)對(duì)音色有太大的影響。不過(guò)該算法在頻域中進(jìn)行處理的,計(jì)算量大,很難滿足實(shí)時(shí)的變速與變調(diào)處理。
03 結(jié)束語(yǔ)
以上是拍樂(lè)云Pano簡(jiǎn)單介紹的三種常見(jiàn)的變聲算法,這三種算法可以粗略實(shí)現(xiàn)大叔音、蘿莉音以及怪獸聲等。但是想要做到變聲后的聲音聽(tīng)起來(lái)更加真實(shí)自然,就需要進(jìn)一步的優(yōu)化調(diào)試了。除了這些算法外,還有其他的變聲音效,比如常見(jiàn)的“驚悚聲”,運(yùn)用了vibrato或者tremolo算法,還有“山谷空靈音”運(yùn)用了echo算法等等,這些算法都是基于傳統(tǒng)的信號(hào)處理實(shí)現(xiàn)的。在傳統(tǒng)的信號(hào)處理變聲方法外,還有更高級(jí)的變聲算法:AI變聲。AI變聲相比于傳統(tǒng)的信號(hào)處理方法,會(huì)讓變聲后的聲音更加真實(shí)自然。
注:文中圖片來(lái)源于《A Review of Time-Scale Modification of Music Signals》論文