實現變聲的效果主要有兩種方式,一種是對語音的本身進行修改,通過修改語音的一些特性達到變聲的效果;另一種則是語音轉殖,直接將輸入語音特性轉化成模板的語音特性。這裡我們介紹第一種方式,語音轉殖後面有機會再介紹。其實如果沒有特定的變聲需求,直接用不同的取樣率讀取原來的檔案就會產生變聲效果。
基音同步疊加(pitch synchronous overlap add, psola, 發音是:劈死尤拉)是一種將語音在頻域(fd-psola)或者時域(td-psola)進行調整的演算法,經常用於語音波形合成,這裡將其稍微修改用於語音變聲。其主要原理是通過改變基頻間隔的時間長度來調整音高,通過重複或者省略一些基音片段來調整音長,達到變速和變調的效果改變語音。psola演算法分為基音同步分析和標註、基音同步修改和基音同步疊加幾個部分。下面分別進行介紹。
基音同步分析和標註
基音同步分析和標註是為了確定語音單元基音週期的位置,語音分為清音段和濁音段,對於不同的語音段標註方式也不同。對於濁音段進行正常的標註,對於清音段直接將其基音週期設定乙個確定的常數。進行基音標註首先要求基音週期,這部分內容在花式估計基音週期裡面已經介紹過了,這裡就不再贅述。一般基音週期估計後一般會經過中值濾波進行平滑處理。至此,基音同步分析的過程就結束了。
下面介紹基於動態規劃的標註過程。再獲得每一幀的基音週期後,可以根據基音週期的值直接將語音分為濁音段和清音段。對每個濁音段進行如下的操作:
這裡基音標註標註其實標註的是聲道的脈衝響應,可以參考說話聲音是如何產生的,如下圖所示。
基音同步修改
在求出基音標註位置後,我們就可以對基音進行修改。音長可以通過插入、刪除語音單元的同步標註點來實現;音高可以通過增加、減少語音單元同步標註點的間距來實現。我們標註好的基音週期如下圖所示
如果我們不修改音高和音長,而只是單純的疊加可以得到如下的波形,這個波形和原始語音波形相近。
如果我們減少乙個週期,可以得到如下的波形,在時間維度上,波形變長意味著語音時間減少。
如果我們減少基音標註的間距,會使得基音變高,反之則會變低。如下所示。
(a)原始基音標註
(b)基音標註間距減少
(c)基音標記間距增加
基音同步疊加
經過上述兩個步驟之後我們就可以開始最後的基音同步疊加了。這個過程類似於分幀加窗fft後還原的過程,大家應該都比較熟悉了。其具體過程如下圖所示。
[2]. matlab在語音頻號分析與合成中的應用
[3].
[4].
LP PSOLA演算法之(二) 語音變調
1.聲學引數,如共振峰頻率,基頻,主要由聲道差異決定。2.韻律學引數,如說話快慢,節奏,口音不同。改變語音基音頻率 pitch pitch變大 男聲變女生,pitch變小,女聲變男聲。所以問題就變得很簡單,只要在語音合成之前,根據變調要求改變pitch大小,合成後得語音就能達到變調得效果。值得注意得...
LP PSOLA演算法之(一) 語音變速
語音編碼,得到每幀訊號的lpc係數和基音頻率,就能 出語音。該方法可算出共振峰等引數,方便做變調的時候,對共振峰進行調整。通過lp psola演算法,學習基音檢測的原理和演算法,方便開展更多工作。1.聲學引數,如共振峰頻率,基頻,主要由聲道差異決定。2.韻律學引數,如說話快慢,節奏,口音不同。把語音...
TTS語音合成的實現
在.net中要實現語音合成可以利用微軟的語音技術,利用微軟的這一技術,需要安裝microsoft speech sdk和語音庫,安裝之後,呼叫com中的microsoft speech object library,即可實現語音合成。sdk 5.1 語言包,這裡 sdk 5.1 語音檔案,這裡 下面...