实现变声的效果主要有两种方式,一种是对语音的本身进行修改,通过修改语音的一些特性达到变声的效果;另一种则是语音克隆,直接将输入语音特性转化成模板的语音特性。这里我们介绍第一种方式,语音克隆后面有机会再介绍。其实如果没有特定的变声需求,直接用不同的采样率读取原来的文件就会产生变声效果。
基音同步叠加(Pitch Synchronous Overlap Add, PSOLA, 发音是:劈死欧拉)是一种将语音在频域(FD-PSOLA)或者时域(TD-PSOLA)进行调整的算法,经常用于语音波形合成,这里将其稍微修改用于语音变声。其主要原理是通过改变基频间隔的时间长度来调整音高,通过重复或者省略一些基音片段来调整音长,达到变速和变调的效果改变语音。PSOLA算法分为基音同步分析和标注、基音同步修改和基音同步叠加几个部分。下面分别进行介绍。
基音同步分析和标注
基音同步分析和标注是为了确定语音单元基音周期的位置,语音分为清音段和浊音段,对于不同的语音段标注方式也不同。对于浊音段进行正常的标注,对于清音段直接将其基音周期设定一个确定的常数。进行基音标注首先要求基音周期,这部分内容在花式估计基音周期里面已经介绍过了,这里就不再赘述。一般基音周期估计后一般会经过中值滤波进行平滑处理。至此,基音同步分析的过程就结束了。
下面介绍基于动态规划的标注过程。再获得每一帧的基音周期后,可以根据基音周期的值直接将语音分为浊音段和清音段。对每个浊音段进行如下的操作:
-
找出浊音段的最大峰值,该峰值对应的位置t就是一个基音脉冲的标注点
-
取出该浊音段最大峰值对应的基音周期T