一种语音合成的方法、装置及设备
技术领域
本发明涉及语音合成技术领域,尤其涉及一种语音合成的方法、装置及设备。
背景技术
语音播报在生活中很多领域都有应用,比如在使用支付宝或微信付款时自动播报到账金额,超市、车站等公共场所使用的智能播报系统等。在语音播报时,需要用到语音合成技术,即将不同音节的字或词语拼接起来,组成需要播报的一段话。目前制作播报语音的技术中,有的技术虽然可以使播报的语音听起来自然,但是此技术对设备的处理能力要求高;有的技术虽然对处理能力要求不高,但是听起来不自然。
发明内容
为克服相关技术中存在的问题,本发明提供了一种语音拼接的方法、装置及设备。
首先,本说明书提供了一种语音合成的方法,所述方法包括:
获取待合成语音的文本中的各音节的语音文件,所述语音文件存储有所述音节的采样点的音强数据;
从相邻两音节的语音文件中分别获取指定采样点的音强数据;其中,前一音节的指定采样点为该音节的最后N个采样点,后一音节的指定采样点为该音节的前N个采样点,其中,N为整数;
将两个音节的所述指定采样点的音强数据进行数据处理,以获得合成后的语音。
其次,本说明书提供了一种语音合成装置,所述装置包括:
获取单元,获取待合成语音的文本中的各音节的语音文件,所述语音文件存储有所述音节的采样点的音强数据;以及从相邻两音节的语音文件中分别获取指定采样点的音强数据;其中,前一音节的指定采样点为该音节的最后N个采样点,后一音节的指定采样点为该音节的前N个采样点,其中,N为整数;
处理单元,将两个音节的所述指定采样点的音强数据进行处理,以获得合成后的语音。
另外,本说明书还提供了一种语音合成设备,所述语音合成设备包括:处理器和存储器;
所述存储器用于存储可执行的计算机指令;
所述处理器用于执行所述计算机指令时实现以下步骤:
获取待合成语音的文本中的各音节的语音文件,所述语音文件存储有所述音节的采样点的音强数据;
从相邻两音节的语音文件中分别获取指定采样点的音强数据;其中,前一音节的指定采样点为该音节的最后N个采样点,后一音节的指定采样点为该音节的前N个采样点,其中,N为整数;
将两个音节的所述指定采样点的音强数据进行处理,以获得合成后的语音。
本说明书的有益效果:在语音合成时,将相邻两音节中前一个音节的尾部与后一个音节的首部的指定采样点的音强进行处理,使合成后的语音更加自然,另外,由于不需要通过学习模型训练,而是对相邻音节部分采样点做简单处理,因此避免了高强度的计算,使本方案更加具有适用性,适用于嵌入式设备等处理能力较低的设备。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
图1为本说明书一示例性实施例示出的一种语音合成方法流程图;
图2为本说明书一示例性实施例示出的一种语音合成方法示意图;
图3为本说明书一示例性实施例示出的一种语音合成装置的逻辑框图;
图4为本说明书一示例性实施例示出的一种语音合成设备的逻辑框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
在本发明使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本发明可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本发明范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
语音播报广泛的应用于生活中的各个领域,比如车站中的车次信息的播报,超市中商品促销信息播放、以及目前常用的支付宝支付时的到账播报等。语音播报时需要用到语音合成技术,即将不同音节的字或词语拼接起来,组成需要播报的一段话。目前有的语音合成的方法是基于深度学习模型,生成模拟的语音,这种方法合成的语音听起来比较自然,但是由于需要大量的训练资源和计算资源,很难在嵌入式系统等处理能力较弱的系统上运行。目前,针对嵌入式系统等处理能力较弱的系统,主要采用的是拼接的方法,即先录制每一个单词的读音,然后把待播放的句子的每个单词的读音全部播放一遍,这种方法对语音合成系统的处理能力要求不高,但是这种方法合成的语音效果比较差,听起来不自然。
为了解决采用拼接的方法进行语音合成时,合成效果较差,听起来不自然的问题,本说明书提供了一种语音合成的方法,所述方法可用于实现语音合成的设备,所述语音合成方法的流程图如图1所示,包括步骤S102-步骤S106:
S102、获取待合成语音的文本中的各音节的语音文件,所述语音文件存储有所述音节的采样点的音强数据;
S104、从相邻两音节的语音文件中分别获取指定采样点的音强数据;其中,前一音节的指定采样点为该音节的最后N个采样点,后一音节的指定采样点为该音节的前N个采样点,其中,N为整数;
S106、将两个音节的所述指定采样点的音强数据进行处理,以获得合成后的语音。
在收到需要合成语音的文本后,会根据文本的内容获取文本中每个音节的语音文件。在某些情况下语音文件可以存储在本地,语音合成设备可以直接从本地获取语音文件;在某些情况下,语音文件可以保存在云端,语音合成设备需要使用时从云端下载。
语音文件可以是事先录制好的不同的音节的录音,可以是WAV.、Mp3.等格式的文件,在音节录制的时候,会对声音的模拟信号进行采样,转化成二进制的采样数据,得到最终的语音文件。音节在录制并保存成语音文件的时候,可以将各音节单独录制,也可以以一个词语或成语的形式录制,比如“我喜欢跑步”这句话中的各音节,可以是“我”、“喜”、“欢”、“跑”、“步”五个音节分别录制保存成五份语音文件,也可以将词语组合起来录制成一个语音文件,即“我”、“喜欢”、“跑步”三份语音文件,语音文件可以根据实际需求录制,本说明书不作限制。
在一个实施例中,如果音节在录制的时候是以词语组合的形式录制的,在获取待合成语音的文本中的各音节的语音文件之前,还可以对待合成文本进行分词处理,以便根据分词的结果去获取音节的语音文件。比如待合成文本是“我们在吃饭”,由于保存的语音文件是以“我们”、“在”、“吃饭”这种词语的形式录制存储的,所以我们在获取这些音节的语音文件之前可以对待合成文本“我们在吃饭”先进行分词处理,以便找到对应的词语或字的语音文件,对文本的分词可通过分词算法来完成,将“我们在吃饭”分词处理后即分成“我们”、“在”、“吃饭”,然后再获取“我们”、“在”、“吃饭”这三个词的语音文件,进行后续的语音合成。
对于处理能力较弱的设备,比如嵌入式系统的设备,如果又要运行分词算法,又要进行语音合成,可能需要耗费较多的内存和功耗,会导致处理速度较慢。为了减小语音合成设备的资源消耗,在一个实施例中,对所述文本进行分词处理可以由服务器端完成。由于设备的语音文件都是从服务器端下载的,服务器端保存的语音文件与设备的语音文件是一致的,所以服务可以根据语音文件将待合成文本进行分词,然后将经过分词的文本下发给设备。
另外,如果待合成语音的文本是中文文本,在录制音节的语音文件时,由于汉字的数量较多,如果存储每个汉字的拼音,语音文件会很大,非常占用内存资源,所以可以只存储汉字音节的四个声调,无需存储每个汉字的拼音,这样可以减小存储的语音文件的大小,节约内存。
在一个实施例中,所述语音文件记录有音节的音频时长、采样点的音强数据、采样频率、采样精度和/或采样点数量。其中,音频时长为每个音节的发音时长,表征每个音节发音的长短,音频时长越短,则音节发音越短促。采样频率为每秒中采集采样点音强数据的数量,比如采样频率为48K,表示1秒中采集48K个音强数据。每个音节的采样点数量则为该音节的音频时长与采样频率的乘积,比如“我”这个音节的音频时长为1.2s,采样频率为48K,则“我”这个音节采样数量一共有1.2×48K=57.6K个。采样精度是指采集卡处理声音的解析度,反映了声音波形幅度(即音强)的精度。采样精度越高,录制和回放的声音就越真实。采样精度也叫采样位数,由于声音信号在保存的时候都是以二进制的形式保存,保存的位数可以是8位或16位,如果是8位,则采集的采样点音强数值在0-256之间,如果是16位,则测得的采集的采样点音强数值在0~65535之间。位数越多,声音的质量越高,而需要的存储空间也越多。一般在对音强进行处理的时候,会先对音强数据进行归一化处理,比如采样精度为8位时,采样点音强数值在0-256之间,一般会对影响数据进行归一化处理,使音强数值在0-1之间,便于后续处理。
在获取文本中的各音节的语音文件后,可以从语音文件中分别获取相邻两音节指定采样点的音强数据,其中,前一音节的指定采样点为该音节的最后N个采样点,后一音节的指定采样点为该音节的前N个采样点,其中,N为整数,将相邻两音节中前一音节最后N个采样点与后一音节前N个采样点的音强数据进行处理后,得到合成后的语音。例如,可以将前一个音节的最后1000个采样点的音强数据与后一个音节前面1000个采样点的数据进行处理,以便两个音节在合成时,尾部过渡自然些。图2为一文本在进行语音合成的示意图,在合成“我喜欢跑步”这句话时,可以逐一将前一个音节的指定采样点的音强和后一个音节的指定采样点的音强进行处理,以得到合成后的文本,其中图中4.5%和5%代表处理采样点数量与前一音节采样数量的比值。通过将相邻两音节的首尾部分的指定采样点的音强数据进行处理,可得到衔接比较自然的合成语音。
在对相邻两音节进行处理时,需要保留前后音节的本身的特点,所以处理的部分不能太多,还需考虑前后两音节在处理时前后留白的问题,如果留白过长,则处理后的语音会出现明显的停顿,造成合成的语音听起来特别自然。综合考虑以上因素,在一个实施例中,在确定指定采样点时,需要处理的采样点数量N可以基于相邻两音节是否组成词语或四字成语、相邻两音节的采样点数量、相邻两音节的最后M1个采样点的平均音强和/或相邻两音节前M2个采样点的平均音强计算得到,其中M1、M2为整数。如果两个音节可以组成一个词语或成语,在处理的时候需处理采样点数量可以适当的多一些,所以可以根据相邻两音节是否可以组成词语来确定需处理采样点数量N。另外,每个音节开头部分和末尾部分的音强也是处理时候需要重点关注的一个因素,所以,在计算需需处理采样点数量N时,也可以基于相邻两音节相邻两音节的最后M1个采样点的平均音强或相邻两音节前M2个采样点的平均音强来计算。另外,在采样频率一定时,采样点的数量的多少即反映了的每个音节音频的时长,相邻两个音节的音频时长的差别对合成语音的效果影响也比较大,如果两个音节的音频时长过大,说明两个音节有轻重、快慢的差别,在处理时需处理采样点的数量需要多一些,如果两个音节的音频时长相差不大,则需处理的采样点的数量可以少一些。所以,在计算需处理采样点数量N时,也可以考虑音节的采样点数量。
为了考虑相邻两音节的留白问题,在计算需处理采样点数量时还可以考虑相邻两音节的开头的平均音强和末尾的平均音强。末尾的平均音强可以通过计算音节最后M1个采样点的平均音强获得,开头的平均音强可以取音节前M2个采样点的平均音强获得,其中M1和M2可以根据音节自身的特点去设定,比如M1为前一个音节采样点总数的10%,M2为后一个音节采样点总数的5%,或者M1为1000,M2为2000,本说明书不作限制。在一个实施例中,经过申请人的反复试验,为了达到较好合成效果,使前后音节在合成后不会有明显的停顿感,M1可以取前一个音节音频采样点总数的20%,M2可以取后一个音节音频采样点总数的20%。
进一步的,在一个实施例中,需处理的采样点的数量N可以通过以下公式去计算:
其中,Nw的不同取值表示当前相邻两音节是否组成词语或四字成语,SNpre表示前一个音节的采样数量,SNnext表示后一个音节的采样数量;末尾平均音强pre表示前一个音节最后M1个采样点的平均音强;开头平均音强next表示后一个音节前M2个采样点的平均音强,M1、M2为整数。
在计算需处理采样点数量N时可以考虑相邻两音节是否组成词语或成语,为了方便计算需处理采样点数量N,可以将相邻两音节是否组成词语或成语时这个影响因素量化,即用Nw的不同数值来表示相邻两音节是否组成词语或成语,便于N的计算,一般如果相邻两音节可以组成词语,Nw数值会比不能组成词语大。在一个实施例中,为了达到较好的合成效果,如果相邻两音节为一个词语,则Nw取2,如果相邻两音节不在一个词语或四字成语中,则Nw取1,如果相邻两音节在一个四字成语中,则Nw取2。当然,所述Nw的取值可根据具体的情况去设定,本说明书不作限制。
例如,需要合成“我”、“不”两个音节,其中“我”这个音节的采样为96K,“不”这个音节的采样数量为48K,即SNpre=96K,SNnext=48K,这个音节不组成词语,所以Nw可以取1,即Nw=1,取“我”这个音节的最后2K的采样点的音强,计算最后2K个采样点的平均音强为0.3,即末尾平均音强pre=0.3,取“不”这个音节的前面2K个采样点的音强,计算前面2K个采样点的平均音强为0.2,开头平均音强next=0.2,代入公式计算,可得到N的值为3920。即取前一个音节的最后3920个采样点与后一个音节前3920个采样点的音强数据,将这些音强数据处理后得到合成的语音。
在获取指定采样点的音强数据后,将两个音节的所述指定采样点的音强进行处理具体方式也可以根据音节的特点来选择,比如,在某些实施例中,可以将前一个音节的最后N个采样点的音强与后一个音节的前N个采样点音强直接相加,得到叠加的音强,比如需要处理前一个音节的最后五个采样点的音强以及后一个音节的前五个采样点的音强,前一个音节的最后五个采样点的音强分别为0.15、0.10、0.05、0.03和0.01,后一个音节的前五个采样点的音强分别为0.005、0.01、0.04、0.06、0.07和0.10,则处理后的叠加部分的语音的音强为0.155、0.11、0.09、0.09、0.08、0.11。
当然,为了获得更加优质和自然的合成效果,在某些实施例中,也可以将前一个音节的最后N个采样点的音强与后一个音节的前N个采样点音强分别乘以预设权重后再相加,得到叠加的音强,其中,所述预设权重基于音节的前后顺序与采样点的前后顺序设定。在进行前后相邻两音节的音强的处理的时候,可以将前后两音节的音强乘以一个权重后再相加,比如,一般在处理部分的前面部分前一个音节要重一些,因此前一个音节的权重可以大一些,在处理部分的后面部分,后一个音节要重一些因而后一个音节的权重可以大一些。举个例子,需要将前一个音节最后五个采样点与后一个音节前五个采样点的音强进行处理,前一个音节的最后五个采样点音强分别为0.5、0.4、0.3、0.2和0.1,其中,五个采样点的权重分别为90%、80%、70%、60%、50%,后一个音节前五个采样点的音强分别为0.1、0.2、0.3、0.4、0.5,其中,五个采样点的权重分别为10%、20%、30%、40%、50%,则处理后的音强分别为0.5×90%+0.1×10%、0.4×80%+0.2×20%、0.3×70%+0.3×30%、0.2×70%+0.4×40%、0.1×50%+0.5×50%,即0.46、0.36、0.3、0.3、0.3。
为了保证处理后的音节不会出现破音的现象,需要处理的指定采样点的音强一般不会太大,避免处理后破音,在某个实施例中,指定采样点的音强与该音节的采样点的最大音强的比值小于0.5。比如,音节的所有采样点中的音强最大的采样点的音强为1,那么指定的需要处理的采样点的音强都小于0.5。
以下用几个具体实施例来进一步解释本说明书提供的语音合成的方法。比如语音设备需要对“我喜欢跑步”这句话进行语音合成。在语音合成前,预先录制有“我”、“喜”、“欢”、“跑”、“步”这五个汉字的读音的五份语音文件,这五份语音文件保存在服务器中。且五份语音文件的开头记录有语音文件的配置信息,采样频率为48K,采样精度为16位,以及每个读音的音频时长。其中,“我”、“喜”、“欢”、“跑”、“步”的音频时长分别为1s、0.5s、1s、1.5s、0.8s。语音合成设备在收到需要合成语音的文本,“我喜欢跑步”后,会从服务器下载这个5个音节的语音文件。然后按照文本的顺序逐一对连续两个音节做处理,比如先对“我”和“喜”进行处理,需要处理“我”最后一部采样点和“喜”最前面一部分采样点的音强,在处理前需要先根据以后公式计算需要处理的采样点的数量:
其中,Nw的不同取值表示当前相邻两音节是否组成词语或四字成语,如果相邻两音节为一个词语,则所述Nw取2,如果相邻两音节不在一个词语或四字成语中,则Nw取1,如果相邻两音节在一个四字成语中,则Nw取2。SNpre表示前一个音节的采样数量,SNnext表示后一个音节的采样数量;末尾平均音强pre表示前一个音节最后20%的采样点的平均音强;开头平均音强next表示后一个音节前20%的采样点的平均音强,M1、M2为整数。
由于“我”和“喜”不能组成一个词语或成语,所以公式中的Nw取1,“我”这个音节的采样数量等于采样频率乘以音频时长,即SNpre=0.5×48K=24K,“喜”这个音节的采样数量SNnext=48K×1,“我”这个音节最后20%的采样点的平均音强为0.3,“喜”这个音节最前面20%的采样点的平均音强为0.1,将这些数据代入以上公式,可以获得需要处理的采样点的数量为711,即从“我”这个音节的语音文件中获取最后711个采样点的音强数据,和“喜”这个音节的语音文件中获取最前711个采样点的音强数据,然后将获取的音强数据直接相加,得到处理后的音强。同理,“喜”和“欢”,“欢”和“跑”,“跑”和“步”之间也采用同样的方式进行处理,得到合成以后的文本“我喜欢跑步”。
再比如,语音设备需要合成的文本为“我们爱天安门”,在录制语音文件时,是以词语的形式录制的,即语音文件中包括有“我们”、“爱”、“天安门”三个词的语音文件,语音文件预先从服务器下载下来并保存在语音设备本地目录当中。服务器收到需要合成的文本“我们爱天安门”后,会根据语音文件的形式对文本进行分词处理,分词处理可通过分词算法完成。将文本分成“我们/爱/天安门”,然后将分词处理后的文本下发给语音合成设备,语音合成设备在收到文本后,会先获取“我们”、“爱”、“天安门”三个词的语音文件,其中采样频率为48K,采样精度为8位,以及三个词读音的音频时长分贝为2s、1s、3s。然后先对“我们”和“爱”进行处理,处理前需要根据以下公式计算得到处理采样点的数量:
其中,Nw的不同取值表示当前相邻两音节是否组成词语或四字成语,如果相邻两音节为一个词语,则所述Nw取2,如果相邻两音节不在一个词语或四字成语中,则Nw取1,如果相邻两音节在一个四字成语中,则Nw取2。SNpre表示前一个音节的采样数量,SNnext表示后一个音节的采样数量;末尾平均音强pre表示前一个音节最后15%的采样点的平均音强;开头平均音强next表示后一个音节前20%的采样点的平均音强,M1、M2为整数。
根据采样频率和音频时长,可计算得到SNpre=96K,SNnext=48K,“我们”最后15%的采样点的音强平均值为0.2,“爱”前20%的采样点的平均音强为0.3,前后音节不组成词语,Nw=1,将这些数据代入公式可计算得到处理采样点数量为5689,即从语音文件中获取“我们”最后5689个采样点的音强数据和“爱”前面5689个采样点音强的数据。在获取处理采样点的音强数据后,将“我们”每个采样点的音强乘以一定的权重,再将“爱”每个采样点的音强乘以一定的权重,然后再相加,得到处理部分的音强。同理,“爱”和“天安门”也采用同样的处理方法,得到合成后的文本“我们”、“爱”、“天安门”。
与上述一种语音合成方法相对应,本说明书还提供了一种语音合成装置,如图3所示,所述语音合成装置300包括:
获取单元301,获取待合成语音的文本中的各音节的语音文件,所述语音文件存储有所述音节的采样点的音强数据;以及从相邻两音节的语音文件中分别获取指定采样点的音强数据;其中,前一音节的指定采样点为该音节的最后N个采样点,后一音节的指定采样点为该音节的前N个采样点,其中,N为整数;
处理单元302,将两个音节的所述指定采样点的音强数据进行处理,以获得合成后的语音。
在一个实施例中,所述语音文件记录有:音节的音频时长、采样点的音强数据、采样频率、采样精度和/或采样点数量。
在一个实施例中,将两个音节的所述指定采样点的音强数据进行处理具体包括:
将前一个音节的最后N个采样点的音强与后一个音节的前N个采样点音强数据相加;或
将前一个音节的最后N个采样点的音强数据与后一个音节的前N个采样点音强数据分别乘以预设权重后再相加,其中,所述预设权重基于音节的前后顺序与采样点的前后顺序设定。
在一个实施例中,所述待合成语音的文本为中文,所述语音文件为记录有汉字音节的四个声调的语音文件。
在一个实施例中,所述指定采样点的音强数据与所述音节的采样点的最大音强数据的比值小于0.5。
在一个实施例中,所述N基于相邻两音节是否组成词语或四字成语、相邻两音节的采样点数量、相邻两音节的最后M1个采样点的平均音强和/或相邻两音节前M2个采样点的平均音强计算得到,其中M1、M2为整数
在一个实施例中,所述数M1为前一个音节音频采样点总数的20%,所述M2为后一个音节音频采样点总数的20%。
在一个实施例中,如果相邻两音节为一个词语,则所述转化系数为2,如果相邻两音节不在一个词语或四字成语中,则转化系数1,如果相邻两音节在一个四字成语中,则转化系数为2。
在一个实施例中,所述N具体计算公式如下:
其中,Nw的不同取值表示当前相邻两音节是否组成词语或四字成语,SNpre表示前一个音节的采样数量,SNnext表示后一个音节的采样数量;末尾平均音强pre表示前一个音节最后M1个采样点的平均音强;开头平均音强next表示后一个音节前M2个采样点的平均音强,M1、M2为整数。
在一个实施例中,在获取待合成语音的文本中的各音节的语音文件之前,还包括:
对所述文本进行分词处理。
在一个实施例中,对所述文本进行分词处理由服务器端完成。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
另外,本说明书还提供了一中语音合成设备,如图4所示,所述语音合成设备包括:处理器401和存储器402;
所述存储器用于存储可执行的计算机指令;
所述处理器用于执行所述计算机指令时实现以下步骤:
获取待合成语音的文本中的各音节的语音文件,所述语音文件存储有所述音节的采样点的音强数据;
从相邻两音节的语音文件中分别获取指定采样点的音强数据;其中,前一音节的指定采样点为该音节的最后N个采样点,后一音节的指定采样点为该音节的前N个采样点,其中,N为整数;
将两个音节的所述指定采样点的音强进行处理,以获得合成后的语音。
以上所述仅为本说明书的较佳实施例而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。