TTS
TTS(Text To Speech)是一种语音AI技术,其全称为“TEXT To 文本转语音”,顾名思义,它能够将书面文字信息智能地转化为可听的、流畅自然的人类语音输出。这项技术融合了语言学、心理学、声学、数字信号处理以及神经网络等多个学科领域的知识和成果。
TTS模型将接收到的文字数据进行解析和转换。这些算法模仿发音,包括对音节、韵律、重音和语调等语音特征的精细模拟,从而生成与真人语音极为相似的声音流。不仅如此,TTS模型还能够根据上下文调整语气和语速,确保合成语音具有丰富的表现力和高自然度,从而提升了人机交互的体验。
魔搭社区上开源了丰富的(72个)语音合成模型,除了中文外,还支持英语、德语、法语、韩语等多语言模型,以及支持上海话,四川话,粤语等方言生成。
TTS应用场景包括:智能客服,朗读,视频配音等多种业务场景,同时支持多情感语音合成,可以满足各种不同类型文案的合成需求。
个性化语音合成PTTS
个性化语音生成是做什么的。我们把个性化语音生成定义为,保持相同语义,变更说话人音色。而过去的声音定制对录音的环境,时长,标注都有比较高的要求。
通义实验室智能语音实验室在魔搭社区上开源了ModelScopeTTS的模型,录制20句话即可定制模型,finetune流程只需要10分钟。
模型链接:
自动标注模型
https://modelscope.cn/models/iic/speech_ptts_autolabel_16k/summary
个性化语音合成模型
https://modelscope.cn/models/iic/speech_personal_sambert-hifigan_nsf_tts_zh-cn_pretrain_16k/summary
TTS-AutoLabel是一个集成进入ModelScope的语音合成自动化标注工具,旨在降低数据标注门槛,
使开发者更便捷的定制个性化语音合成模型。
模型链接:
自动标注模型
https://modelscope.cn/models/iic/speech_ptts_autolabel_16k/summary
个性化语音生成GPT-Sovits
GPT-Sovits技术来源于由语音转换领域最有名的,上了2023年时代周刊前两百大发明的算法So-Vits。So-vits的原理可以很简单的抽象为编码器解码器结构。首先通过编码器去除音色,然后通过Vits解码器重建音频。
so-vits-svc开源地址:https://github.com/svc-develop-team/so-vits-svc
so-vits算法的一些特点:
VITS:文本前端+时长预测器->语义embedding->编解码后端->合成语音波形
SoVITS:波形->自监督语义embedding->编解码后端->合成语音波形
SoVITS:语义特征比文本更soft,不会强制要求输出为某个字,能更精准地表示某个时刻的音素信息
增加音高信息强制绑定,模型不需要预测音调,因此输出音调不会很奇怪
泄露输入源音色
仅需音频即可训练
GPT-SoVITS实践
下载代码仓
git clone https://github.com/RVC-Boss/GPT-SoVITS
准备目录
cd GPT-SoVITS
mkdir -p /root/GPT-SoVITS/GPT_SoVITS/pretrained_models
mkdir -p /root/GPT-SoVITS/tools/damo_asr/models
mkdir -p /root/GPT-SoVITS/tools/uvr5
下载模型
cd /root/GPT-SoVITS/GPT_SoVITS/pretrained_models
git clone https://www.modelscope.cn/AI-ModelScope/GPT-SoVITS.git
cd /root/GPT-SoVITS/tools/damo_asr/models
git clone https://www.modelscope.cn/damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch.git
git clone https://www.modelscope.cn/damo/speech_fsmn_vad_zh-cn-16k-common-pytorch.git
git clone https://www.modelscope.cn/damo/punc_ct-transformer_zh-cn-common-vocab272727-pytorch.git
cd /root/GPT-SoVITS/tools/uvr5
rm -rf /root/GPT-SoVITS/tools/uvr5/uvr5_weights
git clone https://www.modelscope.cn/AI-ModelScope/uvr5_weights.git
git config core.sparseCheckout true
mv /root/GPT-SoVITS/GPT_SoVITS/pretrained_models/GPT-SoVITS/* /root/GPT-SoVITS/GPT_SoVITS/pretrained_models/
安装
pip install ipykernel
sed -i '10s/False/True/' /root/GPT-SoVITS/config.py
cd /root/GPT-SoVITS/
pip install gradio==3.38.0
启动webui
python webui.py
运行效果
使用KAN-TTS合成女生沪语音频
Sambert-Hifigan模型介绍
拼接法和参数法是两种Text-To-Speech(TTS)技术路线。近年来参数TTS系统获得了广泛的应用,故此处仅涉及参数法。
参数TTS系统可分为两大模块:前端和后端。 前端包含文本正则、分词、多音字预测、文本转音素和韵律预测等模块,它的功能是把输入文本进行解析,获得音素、音调、停顿和位置等语言学特征。 后端包含时长模型、声学模型和声码器,它的功能是将语言学特征转换为语音。其中,时长模型的功能是给定语言学特征,获得每一个建模单元(例如:音素)的时长信息;声学模型则基于语言学特征和时长信息预测声学特征;声码器则将声学特征转换为对应的语音波形。
系统结构:
声学模型SAM-BERT
后端模块中声学模型采用自研的SAM-BERT,将时长模型和声学模型联合进行建模
1. Backbone采用Self-Attention-Mechanism(SAM),提升模型建模能力。
2. Encoder部分采用BERT进行初始化,引入更多文本信息,提升合成韵律。
3. Variance Adaptor对音素级别的韵律(基频、能量、时长)轮廓进行粗粒度的预测,再通过decoder进行帧级别细粒度的建模;并在时长预测时考虑到其与基频、能量的关联信息,结合自回归结构,进一步提升韵律自然度.
4. Decoder部分采用PNCA AR-Decoder[@li2020robutrans],自然支持流式合成。
声码器模型
后端模块中声码器采用HIFI-GAN, 基于GAN的方式利用判别器(Discriminator)来指导声码器(即生成器Generator)的训练,相较于经典的自回归式逐样本点CE训练, 训练方式更加自然,在生成效率和效果上具有明显的优势。
在HIFI-GAN开源工作[1]的基础上,我们针对16k, 48k采样率下的模型结构进行了调优设计,并提供了基于因果卷积的低时延流式生成和chunk流式生成机制,可与声学模型配合支持CPU、GPU等硬件条件下的实时流式合成。
KAN-TTS代码仓
https://github.com/alibaba-damo-academy/KAN-TTS
使用模型
语音合成-上海话-通用领域-16k-发音人xiaoda 模型地址
https://modelscope.cn/models/speech_tts/speech_sambert-hifigan_tts_xiaoda_WuuShanghai_16k
环境准备
创建conda环境
cd KAN-TTS
conda create -n kantts python=3.10
激活环境,前面通过environment.yml文件安装的环境名为maas
conda activate kantts
安装torch
pip install torch torchvision torchaudio
安装依赖
pip install autopep8
pip install pre-commit
pip install modelscope
pip install matplotlib
pip install librosa
pip install ttsfrd --find-links https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html
pip install unidecode
pip install inflect
pip install pytorch_wavelets
pip install PyWavelets
pip install tensorboardX
克隆代码仓
git clone https://github.com/alibaba-damo-academy/KAN-TTS
代码脚本(demo.py)
from modelscope.outputs import OutputKeys
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
def read_text_file(filename):
with open(filename, 'r', errors='ignore') as file:
text = file.read()
cleaned_text = ''.join(text.split()).strip()
return cleaned_text
# 使用方法
text = read_text_file('文件名.txt')
model_id = 'speech_tts/speech_sambert-hifigan_tts_xiaoda_WuuShanghai_16k'
sambert_hifigan_tts = pipeline(task=Tasks.text_to_speech, model=model_id)
output = sambert_hifigan_tts(input=text)
wav = output[OutputKeys.OUTPUT_WAV]
with open('output.wav', 'wb') as f:
f.write(wav)
运行脚本
python demo.py
KAN-TTS训练
目前仅支持Linux使用,暂不支持Windows及Mac使用。 请结合KAN-TTS代码进行finetune。具体使用方法参考: