语音合成
简介

语音合成技术的本质是将文本信息转化成语音信息,如果我们要将这句文本信息变成语音信息,首先需要在语音合成数据库里面挑选出这句文本信息所包含的元素,挑选完元素之后将这些元素按照一定的顺序组合排列,最后再输出我们想要合成的那句语音信息。语音合成的原理是将输入文本分析得到的信息,从预先录制和标注好的语音库中挑选合适的单元,进行少量的调整(也可以不进行调整),然后拼接得到最终的合成语音,其中用来进行单元挑选的信息可以是前端分析得到的韵律文本,也可以是生成的声学参数(比如基频、时长和谱参数),或者两者兼有。

​ 语音合成的方法主要分为三类:波形合成法、参数合成法和规则合成法。

​ 波形合成法是对波形进行编码或编辑。 波形合成法是相对简单,通常只能合成有限词汇的语音段。 波形合成法一般有两种形式,一种是波形编码合成,它类似于语音编码中的波形编解码方法,该方法直接把要合成的语音发音波形进行存储,或者进行波形编码压缩后存储,合成重放时再解码组合输出。另一种是波形编辑合成,它把波形编辑技术用于语音合成,通过选取音库中采取自然语言的合成单元的波形,对这些波形进行编辑拼接后输出。

​ 参数合成法是从数字信号处理,统计学等角度,对声码器提取的声学特征参数进行统计建模,然后把模型预测得到的声学特征参数输入声码器完成语音合成。传统参数语音合成方法是基于统计学习和决策树的隐马尔科夫-高斯混合模型 (HMM)。 HMM 对声音特征的适应性和鲁棒性高、需要较小的计算代价和在训练数据较少的时候有更好的表现等诸多优点,使其长期成为语音合成方法的主流技术。

​ 规则合成法通过语音学规则产生语音。 合成的词汇表不是事先确定,系统中存储的是最小的语音单位的声学参数,以及由音素组成音节、由音节组成词、由词组成句子和控制音调、轻重音等韵律的各种规则。 给出待合成的文本数据后,合成系统利用规则自动地将他们转换成连续的语音声波。

​ 本节使用的语音合成算法为VITS,VITS是一种结合变分推理(variational inference)、标准化流(normalizing flows)和对抗训练的高表现力语音合成模型。VITS通过隐变量而非频谱串联起来语音合成中的声学模型和声码器,在隐变量上进行建模,从而消除两个模型之间的不匹配问题,实现真正意义的端到端语音合成。VITS的好处是VAE擅长捕捉句子整体的韵律特征,而Flow擅长重建音频的细节特征;将两者整合,进行多任务训练,实现参数与优势共享。

硬件平台
机器硬件:OriginBot(导航版/视觉版)
PC主机:Windows(>=10)/Ubuntu(>=20.04)
扩展硬件:X3语音版

操作步骤
用VITS算法训练模型

本次VITS的训练教程根据你的电脑的版本选择,本实验以windows训练单人数据集为例。首先是前期准备工作:

​ 1、安装Conda来搭建Python虚拟环境。Conda官网

​ 2、下载音频处理软件(包括Au或者类似软件都可以)

​ 首先准备数据集,选择希尔贝壳语音数据库(也可以自己选择其他数据集)。进入官网下载数据集。AISHELL-3是由北京贝壳科技有限公司发布的大规模高保真多说话人普通话语音语料库。它可用于训练多说话者文本到语音 (TTS) 系统。该语料库包含大约 85 小时的情感中性录音,由 218 位以中文普通话为母语的人所说,总共 88035 条话语。他们的辅助属性,如性别、年龄组和本地口音在语料库中被明确标记和提供。因此,汉字级别和拼音级别的成绩单与录音一起提供。通过专业的语音标注和严格的声调韵律质检,字音转写准确率在98%以上。

​ 通过git项目下载,如果没有git,进入VITS项目网站下载

git clone http://github.com/CjangCjengh/vits.git

​ 进入下载的VITS项目,删除所有文件,新建list.txt,list_val.txt。文件编码必须是UTF-8。
然后需要对音频进行处理,音频要求:无背景音(自行搜索如何去背景音、去噪、去BGM)、吐字清晰、无明显情感波动、语速适中、音量大小均衡。如果不符合要求将会影响训练出的模型质量。 使用Au(或者其他音频处理软件)处理数据集的音频(格式请严格处理为单声道、22050Hz,PCM 16bit)。

​ 接下来进行音频的分割处理,下载audio-slicer项目,使用Conda虚拟环境进行处理:
conda create -n slicer python=3.7
conda activate slicer

#进入audio-slicer安装相关依赖,如果出现依赖冲突,可以自行选择版本命令安装或者按需修改pip install -r requirements.txt#将Au处理过的音频移动到当前目录python slicer.py 这里填你命名的文件

然后将分割后的文件(不包括原文件)移动到前面的wavs目录,然后进行文本整理,打开filelists目录中的list.txt(训练集)和list_val.txt(验证集)。

关于数据量,个人建议训练集五百条十秒长的语音起步,越多更好;验证集大概为训练集十分之一左右,另外,两个txt文件都必须不带任何空行,末尾也不可以,否则后面预处理会报错out of range。

​ 文件的处理可以参考一下简单的python脚本来处理,这里以希尔贝壳语音数据集的处理为例:

点击语音合成 – 古月居可查看全文

本站无任何商业行为
个人在线分享 » 语音合成
E-->