综合介绍
EmotiVoice是一个由网易有道开发的多声音和情感提示控制的文本转语音(TTS)引擎。此开源TTS引擎支持英文和中文,拥有超过2000种不同的声音,并具备情感合成能力,能够创建带有快乐、兴奋、悲伤和愤怒等多种情绪的语音。它提供了易于使用的WEB界面和批量生成结果的脚本接口。
功能列表
提供WEB界面和脚本批处理接口
支持情感合成
多种声音选择
支持中英文合成
使用帮助
查看GitHub仓库获取安装、使用说明
运行Docker镜像试用EmotiVoice
参考Wiki页面下载预训练模型等额外资料
加入微信群交流反馈
为了响应社区需求,我们很开心地发布了声音克隆功能,并提供了两个教程示例!
注意事项:
- 该功能至少需要一张 Nvidia GPU 显卡 。
- 目标声音的数据至关重要!详细要求将在下一节中提供。
- 目前,该功能仅支持中文和英文,这意味着你可以使用中文数据或英文数据进行训练,从而得到一个能够说两种语言的音色模型。
- 尽管EmotiVoice支持情感控制,但如果想要你的声音传达情感,训练数据也需要富有情感。
- 在仅使用你的数据进行训练后,来自EmotiVoice的原始声音将被改变。这意味着新的模型将完全根据你的数据进行定制。如果想使用EmotiVoice的2000+个原始声音,建议使用原始的预训练模型。
训练数据的详细需求
- 音频数据应该有较高质量,需要清晰无失真的单个人语音。时长或句数暂时不做强制要求,几句话也行,不过推荐在100句话以上。
- 与每个音频对应的文本应该与语音的内容严格相符。在进行训练之前,原始文本会使用G2P转换为音素。需要注意停顿(sp*)和多音字的转换结果,它们对训练质量影响很大。
- 如果希望你的声音传达情感,训练数据也需要富有情感。此外,**标签'prompt'**的内容应该根据每个音频进行修改。提示词的内容可以包括情感、语速以及说话风格等任何形式的文本描述。
- 然后,你会得到一个名为
data directory
的目录,包含两个子目录,分别是train
和valid
。每个子目录都有一个datalist.jsonl
文件,且每行的格式为:{"key": "LJ002-0020", "wav_path": "data/LJspeech/wavs/LJ002-0020.wav", "speaker": "LJ", "text": ["<sos/eos>", "[IH0]", "[N]", "engsp1", "[EY0]", "[T]", "[IY1]", "[N]", "engsp1", "[TH]", "[ER1]", "[T]", "[IY1]", "[N]", ".", "<sos/eos>"], "original_text": "In 1813", "prompt": "common"}
。
分布训练步骤:
中文请参考 DataBaker Recipe,英文请参考:LJSpeech Recipe。以下是概要:
- 准备训练环境——只需要配置一次。
# create conda enviroment conda create -n EmotiVoice python=3.8 -y conda activate EmotiVoice # then run: pip install EmotiVoice[train] # or git clone https://github.com/netease-youdao/EmotiVoice pip install -e .[train]
- 参考 Detailed requirements for training data 进行数据准备,推荐参考示例DataBaker Recipe 和 LJSpeech Recipe中的方法和脚本。
- 接下来,运行以下命令创建一个用于训练的目录:
python prepare_for_training.py --data_dir <data directory> --exp_dir <experiment directory>
。替换<data directory>
为准备好的数据目录的实际路径,<experiment directory>
为实验目录的期望路径。 - 可以根据服务器配置和数据的情况修改
<experiment directory>/config/config.py
。完成修改后,通过运行以下命令启动训练过程torchrun --nproc_per_node=1 --master_port 8018 train_am_vocoder_joint.py --config_folder <experiment directory>/config --load_pretrained_model True
。这个命令将使用指定的配置文件夹启动训练过程,并加载任何指定的预训练模型)。目前该方法适用于Linux,Windows可能会遇到问题! - 在完成一些训练步骤后,选择某个checkpoint,运行以下命令确认效果是否符合预期:
python inference_am_vocoder_exp.py --config_folder exp/DataBaker/config --checkpoint g_00010000 --test_file data/inference/text
。别忘了修改data/inference/text
中speaker字段的内容。如果结果满意,就可以随意使用了!我们提供了一个修改版的demo page:demo_page_databaker.py
来体验用DataBaker克隆后的音色效果。 - 如果结果不尽人意,可以继续训练,或者检查你的数据和环境。当然,欢迎在社区讨论,或者提交issue!
运行时间的参考信息:
我们提供如下运行时间信息和硬件配置信息,供大家参考:
- Pip包的版本:Python 3.8.18, torch 1.13.1, cuda 11.7
- GPU卡型号:NVIDIA GeForce RTX 3090, NVIDIA A40
- 训练耗时:训练一万步,大概需要1-2个小时。
它甚至可以不用GPU显卡,只用CPU来训练。请静候佳音!