背景技术
语音变速,或称为语音压扩,是指语音回放时语速变化,包括快放和慢放;就像我们说话一样,可以说快些,也可以说慢些;快放,就能更快更省时地听完所有内容;慢放,就能听得更清晰,一字不漏。其实,单纯的语音变速,可以通过改变播放采样率来实现;但通过这种方法实现变速,会严重变调,回放的效果已经完全不是原来的声音,如男声变得像女声,或女声听起来像男声。本文所描述的语音变速,指的是变速不变调。语音变速技术,可以满足学习外语、报告记录、语音研究及公安侦察等需要。
在语音信号处理领域,语音变速很早就被人们研究。目前的实现方法,有硬件实现和软件处理办法。
硬件实现办法很多,例如,用以由所输入的声音信号分别分离成原音成分和声音特性的音调检测电路;用以在由上述音调检测电路分离出的原音成分和声音特性中,按播放原音成分的速度进行消除和添加来调节声音信号长度的音调调节部件;用以合成用上述音调调制部件调制的原音成分和声音特性,输出已变速的声音信号的声音合成电路;用由外部输入的控制信号控制上述各构成部件的主控制器。硬件实现办法应该能取得不错的效果,但涉及成本问题。
软件实现办法较多,例如专利号为200610164672的中国专利:语音变速的方法提出的方法包含下列步骤:接收原始语音信号;计算出该原始语音信号的基本周期;依据该基本周期定义搜寻范围;在该原始语音信号的每个该搜寻范围内寻找最大值;依据该最大值将该原始语音信号划分为多个语音区段;依据变速指令对该原始语音信号的每个该语音区段进行变速运算,而取得变速语音信号;输出该变速语音信号。上述方法的好处是将语音信号以最细小的基本周期单位进行后续的变速处理,不足之处是算法较复杂,软件实现时代码比较繁琐。
硬件实现语音变速,效果不错,但缺点是增加了成本,如果是需要量产的产品,会因增加语音变速带来不菲的支出;同时,因为增加硬件,很可能会增加产品尺寸,影响产品外观设计。
软件实现办法很多,例如某欧洲国家提供的商业语音变速方案,也有一些开源组织实现的变速方案。但目前普遍存在一些缺陷,就是处理后音质明显比原始音源差很多,有颤音,甚至引入轻微不明噪音,尤其慢放效果难以满足用户的需要。另外还存在的一个问题是,变速的级数或倍数有限,通常看到的一些产品中,慢放最慢是原速的0.65倍,快放最快是原速的1.5倍,或者即便能达到慢放0.5,快放2倍,但此时的效果已经令人无法忍受。
发明内容
本发明的目的是提出一种语音变速的处理方法,能根据用户的需要进行相应的语音变速,而且变速后的音质效果令用户满意,不产生颤音。
上述发明目的可通过以下的技术措施来实现,一种语音变速的方法,包括以下步骤:
(1)获取待处理的原始语音信号,以帧为语音单位进行处理;
(2)在待处理的原始语音信号帧处插入一段语音信号,实现慢放效果;在待处理的原始语音信号帧之后删除一段语音信号,实现快放效果;
(3)上述实现慢放效果时插入一段语音信号的过程为:按播放时间顺序,在待处理原始语音信号帧之前的语音信号中进行基音搜索,采用自相关法获取待处理原始语音信号帧的最大自相关帧;从该最大自相关帧之后到待处理原始语音信号帧为止的语音信号内容即为慢放插入的一段语音信号;
(4)上述实现快放效果时删除一段语音信号的过程为:按播放时间顺序,在待处理原始语音信号帧之后的语音信号中进行基音搜索,开始搜索位置由快放变速级数确定,采用自相关法获取待处理原始语音信号帧的最大自相关帧;从待处理原始语音信号帧之后到该最大自相关帧为止的语音信号内容即为快放删除的一段语音信号。
实现快放或慢放时,在原始语音信号帧的插入或删除处,用一帧经过叠加处理的语音信号进行平滑过渡,缓解或消除语音在遭切割肢解处引起的噪音。叠加处理的具体过程为:在待处理原始语音信号帧附近的语音信号中进行基音搜索,采用自相关法获取待处理原始语音信号帧的最大自相关帧;由待处理原始语音信号帧和该最大自相关帧两段等长的语音信号,分别经过汉宁窗加窗处理后,再叠加。
本发明中级数的控制方法为:快放时,依据需要快放的级数,确定需要删除的语音信号长度,从而实现指定级数的变速;慢放时,依据需要慢放的级数,确定对每帧语音进行慢速处理的概率,从而达到各种级数慢放控制。
步骤1中,处理对象是数字语音信号,即经采样量化后的数字信号;以帧(Frame)为语音单位进行处理,每帧语音以7-10毫秒为宜,视不同的语音采样率,每帧语音信号长度(即帧长FrameLen)不等,这个帧长一般都比较接近于基音周期的长度。
本发明以帧为语音信号的处理单位,采用最大自相关法确定基音周期,在要进行变速的语音信号源中,找到最相似的两段语音,进行叠加,将两段语音间剩余的语音信号,进行复制拼接或删除,从而达到慢放或快放的效果,并采用一段经过叠加处理的语音信号进行平滑过渡,缓解或消除语音在遭切割肢解处引起的噪音。
与现有技术相比,本发明在低运算量,低功耗且算法简单、软件实现代码简洁的基础上实现了好的音质和好的变速效果,可以应用于学习机、点读机、点读笔、录音笔等。
具体实施方式
本发明的理论基础是:语音信号由清音和浊音组成,其中浊音的能量比清音的能量大得多,对语音信号的音质、效果起着决定性的作用,因此语音变速主要基于浊音的特性进行。浊音是气流通过声门时使声带振动产生的一股周期性的脉冲气流引起的声音,这个周期称为基音周期。
下面结合附图,对本发明作进一步的说明。
如图1所示,为本发明语音变速原理示意图,假定当前已经播放到b0点,此时由于慢放的需要,需要插入扩充一段语音数据,于是,在b0之前的语音信号中进行基音搜索,采用最大自相关法在前面找到一块与b0-b1最相似的语音信号为a0-a1语音段;将a0-a1与b0-b1通过叠加,整合成长度相同的一段语音(命名为a-b段),用于播放;接着播放a1-b1段的语音数据(即将a1-b1段放到a-b语音段后面);后面再接着播放b1后面的数据。由于a0-a1与b0-b1整合成的a-b段同时具备a0-a1和b0-b1的特性,a1-b1段放到a-b段后面,即图中的b-c段,类似于放a0-a1段后面,a-b-c能实现平滑过渡,同时实现了扩展功能,即扩充了b-c段数据。
计算自相关时,选定一帧数据为基准,在另外指定的一块数据范围内,寻找一块连续的长度为帧长的数据,使该块数据与基准数据的自相关系数最大,此块数据即为最大自相关帧。自相关系数的计算公式为:
式中,sb(n)代表基准语音信号帧,sc(n)代表用于搜索的语音信号数据块,k代表sc中相对首地址的偏移。R(k)(k0,1,..,Framelen-1)中最大值对应的k值即为最大自相关帧在搜索数据块中的偏移量。
图2~图5为本发明语音慢放相关步骤的示意图,语音慢速实现时,每输入1帧原始语音,一定会至少输出1帧变速后的语音,接着视慢速播放级速的要求,决定是否需要进行变速处理再输出1帧语音。因此,每帧语音进行慢速处理的概率由慢速播放级数确定,对于0.5倍速慢放,对每帧语音进行慢速处理的概率为100%,即每帧都要做慢速处理;对于0.75倍速,概率为50%;1倍速(即不慢放),概率为0。具体为:对于0.5倍速慢放,则每输入1帧,都需要进行慢速处理,输出2帧变速语音;对于0.7~0.8倍速慢放,则每输入2帧,则有一帧需要进行慢速处理,另一帧直接输出,共输出3帧变速语音,实现时可以“输入1帧->输出2帧->输入1帧->输出1帧”为一个处理单元,重复进行。
下面以0.5倍速慢放为例,具体实现步骤:
(1)定义一块运算处理缓冲区,如图2所示,缓冲区的大小以FrameLen为单位,可定义为5-7个Framlelen。其中,前面长度为1.5个FrameLen的缓冲区用于存放历史数据;读指针开始的1个FrameLen是将要输出的处理后语音信号;写指针指示接收原始语音信号的地址。该缓冲区初始化为0,读指针初始化为1.5*FrameLen,写指针初始化为3*FrameLen。
(2)从原始语音信号处(即要进行语音处理的源语音信号)读取1帧长度为FrameLen的数据,存入写指针指示的区域,同时记录该帧为自相关基准帧,并将写指针递增FrameLen;从运算处理缓冲区的读指针处输出1帧长度为FrameLen的数据,该数据即为1帧处理后的最终语音输出帧,读指针递增FrameLen。如图3所示。
(3)判断读写指针间剩余的语音信号长度是否超出1帧长度,如果没有超出则进入步骤(4)进行基音搜索并语音扩展;如果超出,则继续从读指针处输出1帧长度为FrameLen的数据,读指针再递增FrameLen,将整个运算处理缓冲区左移2*FrameLen长度,读写指针相应左移(即递减)2*FrameLen,此时运算缓冲区处于类似图2的状态,回到步骤2。
(4)进行基音搜索,如图4所示,在开始搜索位置到结束搜索位置之间,寻找一块长度为FrameLen,与自相关基准帧音间自相关系数最大的语音数据,即最大自相关帧(自相关系数越大,说明这两帧语音相似程度越高,也就可以认为找到了语音信号的周期,即基因周期)。搜索开始位置定义为运算处理缓冲区中自相关基准帧前面前1.5~2帧处,因为在1.5~2帧范围内,至少包含一个基音周期,这样才能搜索到真正的基音;搜索结束位置定义为自相关基准帧前面前0.5帧处(理论上说,基音周期不可能在0.5帧范围内),容易推出搜索长度为1~1.5帧长度。
(5)对自相关基准帧和最大自相关帧两块数据进行加窗叠加处理,得到一帧长度也为FrameLen的最终语音输出帧,同时读指针要递增FrameLen长度。如图4所示。
(6)将搜索到的最大自相关帧后面开始到自相关基准帧(含该帧)之间的所有语音信号数据拷贝到运算处理缓冲写指针开始地址,同时更新写指针。如图5所示。
(7)将图5中所示的整个运算处理缓冲区中的数据向左移动2帧长度,左边历史数据区被移出2帧长度的历史数据,被丢弃,后面非历史数据区中的数据移入2帧填充历史数据区;读指针和写指针分别递减2个FrameLen,再次得到如图2所示缓冲区状态。
(8)重复(2)-(6)步骤,进行下一轮语音慢速处理。
如图6所示,为本发明语音快放实现示意图,快放的运算处理缓冲与慢放不一样,实现步骤也大不一样,具体为:
(1)定义长度皆为6帧(6个FrameLen)的运算处理缓冲区和变速输出缓冲区两个缓冲区,都初始化为0。
(2)从原始语音中接收语音数据帧,直至将整个运算处理缓冲区填满。
(3)以运算处理缓冲区中第1个语音帧为自相关基准帧;根据快放变速级数,确定本次处理需要删除的语音长度。例如,要求2倍速播放时,则需要删除3帧长度的语音数据,由于1~1.5帧内必有一个基音,可确定离运算处理缓冲区2.5帧处为搜索开始地址;搜索长度可定为1~1.5帧。在开始搜索位置到结束搜索位置之间,寻找一块长度为FrameLen,与自相关基准帧音自相关系数最大的语音数据,即最大自相关帧,这样搜索出来的最大自相关帧大概位置在离运算处理缓冲区2.5~4帧处。
(4)对自相关基准帧和最大自相关帧两块数据进行加窗叠加处理,得到一块长度也为帧长的最终语音输出帧,将其拷贝到变速输出缓冲区首地址开始处。
(5)将运算处理缓冲区中最大自相关帧后面的所有剩余语音数据拷贝到变速输出缓冲区中最终语音输出帧的后面。由于前面定义的变速输出缓冲区与运算处理缓冲区的大小一样,并且从语音快放的角度看,变速后输出的语音信号长度一定比变速前存放在运算处理缓冲区中语音信号长度小,所以变速输出缓冲区的大小是足够的。
(6)重复(2)-(5)步骤,继续进行下一轮快放处理。
上述实施方案为本发明的较佳实施方案但不是唯一实施方案,根据本发明提供的方案,按照本领域的普通技术知识和惯用手段,在不脱离本发明基本技术思想的前提下做出的各种形式的等效修改、替换和变更,均处于本发明的保护范围之内。