[PaddleSpeech 原神] 音色克隆之胡桃

随着直播和短视频的火热流行,配音成为了一个很有“钱途”的行业

PaddleSpeech的出现,让我们快速又简单的上手音色克隆。

本篇将会带你去完成一个音色克隆的项目,这里以原神中的胡桃为例子

数据集中还有很多种语音任你选择。

├── 七七.zip
├── 丽莎.zip
├── 久岐忍.zip
├── 九条裟罗.zip
├── 云堇.zip
├── 五郎.zip
├── 优菈.zip
├── 八重神子.zip
├── 凝光.zip
├── 凯亚.zip
├── 刻晴.zip
├── 北斗.zip
├── 可莉.zip
├── 夜兰.zip
├── 女士.zip
├── 安柏.zip
├── 宵宫.zip
├── 戴因斯雷布.zip
├── 托马.zip
├── 散兵.zip
├── 早柚.zip
├── 枫原万叶.zip
├── 派蒙.zip
├── 温迪.zip
├── 烟绯.zip
├── 珊瑚宫心海.zip
├── 班尼特.zip
├── 琴.zip
├── 甘雨.zip
├── 申鹤.zip
├── 砂糖.zip
├── 神里绫人.zip
├── 神里绫华.zip
├── 罗莎莉亚.zip
├── 胡桃.zip
├── 芭芭拉.zip
├── 荒泷一斗.zip
├── 莫娜.zip
├── 菲谢尔.zip
├── 行秋.zip
├── 诺艾尔.zip
├── 辛焱.zip
├── 达达利亚.zip
├── 迪卢克.zip
├── 迪奥娜.zip
├── 重云.zip
├── 钟离.zip
├── 阿贝多.zip
├── 雷泽.zip
├── 雷电将军.zip
├── 香菱.zip
├── 魈.zip
└── 鹿野院平藏.zip

1. 配置 PaddleSpeech 开发环境

安装 PaddleSpeech 并在 PaddleSpeech/examples/other/tts_finetune/tts3 路径下配置 tools,下载预训练模型

# 配置 PaddleSpeech 开发环境
!git clone https://gitee.com/paddlepaddle/PaddleSpeech.git
%cd PaddleSpeech
!pip install . -i https://mirror.baidu.com/pypi/simple
# 下载 NLTK
%cd /home/aistudio
!wget -P data https://paddlespeech.bj.bcebos.com/Parakeet/tools/nltk_data.tar.gz
!tar zxvf data/nltk_data.tar.gz
# 删除软链接
# aistudio会报错: paddlespeech 的 repo中存在失效软链接
# 执行下面这行命令!!
!find -L /home/aistudio -type l -delete
# 配置 MFA & 下载预训练模型
%cd /home/aistudio
!bash env.sh

2 数据集配置

本项目数据集提供了完整的wav、labelx以及MFA对齐标注文件

如果要自行对齐,请去PaddleSpeech查阅完整资料

Finetune your own AM based on FastSpeech2 with multi-speakers dataset.

解压文件中的

音频

work/dataset/胡桃/wav/xx.wav

和标签

work/dataset/胡桃/wav/labels.txt

对齐的textgrid

work/dataset/胡桃/textgrid/newdir/xx.TextGrid

本项目采用胡桃的声音完成

2.1 解压数据集

!unzip /home/aistudio/data/data171682/yuanshen_zip.zip -d work/
!unzip /home/aistudio/work/yuanshen_zip/胡桃.zip -d work/dataset/

2.2 编写执行cmd函数代码

import subprocess# 命令行执行函数,可以进入指定路径下执行
def run_cmd(cmd, cwd_path):p = subprocess.Popen(cmd, shell=True, cwd=cwd_path)res = p.wait()print(cmd)print("运行结果:", res)if res == 0:# 运行成功print("运行成功")return Trueelse:# 运行失败print("运行失败")return False

2.3 配置各项参数

import os# 试验路径
exp_dir = "/home/aistudio/work/exp"
# 配置试验相关路径信息
cwd_path = "/home/aistudio/PaddleSpeech/examples/other/tts_finetune/tts3"
# 可以参考 env.sh 文件,查看模型下载信息
pretrained_model_dir = "models/fastspeech2_mix_ckpt_1.2.0"# # 同时上传了 wav+标注文本 以及本地生成的 textgrid 对齐文件
# 输入数据集路径
data_dir = "/home/aistudio/work/dataset/胡桃/wav"
# 如果上传了 MFA 对齐结果,则使用已经对齐的文件
mfa_dir = "/home/aistudio/work/dataset/胡桃/textgrid"# 输出文件路径
wav_output_dir = os.path.join(exp_dir, "output")
os.makedirs(wav_output_dir, exist_ok=True)dump_dir = os.path.join(exp_dir, 'dump')
output_dir = os.path.join(exp_dir, 'exp')
lang = "zh"

2.4 检查数据集是否合法

# check oov
cmd = f"""python3 local/check_oov.py \--input_dir={data_dir} \--pretrained_model_dir={pretrained_model_dir} \--newdir_name={new_dir} \--lang={lang}
"""
# 执行该步骤
run_cmd(cmd, cwd_path)
    python3 local/check_oov.py         --input_dir=/home/aistudio/work/dataset/胡桃/wav         --pretrained_model_dir=models/fastspeech2_mix_ckpt_1.2.0         --newdir_name=work/dataset/胡桃/textgrid/newdir         --lang=zh运行结果: 0
运行成功True

2.5 生成 Duration 时长信息

cmd = f"""
python3 local/generate_duration.py \--mfa_dir={mfa_dir}
"""
# 执行该步骤
run_cmd(cmd, cwd_path)
python3 local/generate_duration.py     --mfa_dir=/home/aistudio/work/dataset/胡桃/textgrid运行结果: 0
运行成功True

2.6. 数据预处理

cmd = f"""
python3 local/extract_feature.py \--duration_file="./durations.txt" \--input_dir={data_dir} \--dump_dir={dump_dir}\--pretrained_model_dir={pretrained_model_dir}
"""
# 执行该步骤
run_cmd(cmd, cwd_path)

2.7. 准备微调环境

cmd = f"""
python3 local/prepare_env.py \--pretrained_model_dir={pretrained_model_dir} \--output_dir={output_dir}
"""

# 执行该步骤
run_cmd(cmd, cwd_path)
python3 local/prepare_env.py     --pretrained_model_dir=models/fastspeech2_mix_ckpt_1.2.0     --output_dir=/home/aistudio/work/exp/exp运行结果: 0
运行成功True

2.8. 微调并训练

不同的数据集是不好给出统一的训练参数,因此在这一步,开发者可以根据自己训练的实际情况调整参数,重要参数说明:

训练轮次: epoch

  1. epoch 决定了训练的轮次,可以结合 VisualDL 服务,在 AIstudio 中查看训练数据是否已经收敛,当数据集数量增加时,预设的训练轮次(100)不一定可以达到收敛状态
  2. 当训练轮次过多(epoch > 200)时,建议新建终端,进入/home/aistudio/PaddleSpeech/examples/other/tts_finetune/tts3 路径下, 执行 cmd 命令,AIStudio 在打印特别多的训练信息时,会产生错误

配置文件:

/home/aistudio/PaddleSpeech/examples/other/tts_finetune/tts3/conf/finetune.yaml

# 将默认的 yaml 拷贝一份到 exp_dir 下,方便修改
import shutil
in_label = "/home/aistudio/PaddleSpeech/examples/other/tts_finetune/tts3/conf/finetune.yaml"
shutil.copy(in_label, exp_dir)
'/home/aistudio/work/exp/finetune.yaml'
epoch = 250
config_path = os.path.join(exp_dir, "finetune.yaml")cmd = f"""
python3 local/finetune.py \--pretrained_model_dir={pretrained_model_dir} \--dump_dir={dump_dir} \--output_dir={output_dir} \--ngpu=1 \--epoch={epoch} \--finetune_config={config_path}
"""
# 执行该步骤
# 如果训练轮次过多,则复制上面的cmd到终端中运行
run_cmd(cmd, cwd_path)

3 生成音频

输入我们需要生成的文字,即可生成对应的音频文件

3.1 文本输入

text_dict = {"0": "大家好,我是 胡桃,今天 天气 很不错啊,大家一起来原神找我玩呀!","1": "hehe,太阳 出 来 我 晒 太阳 ,月亮 出 来 我 晒 月亮 咯。","2": "我是it er hui , 一名 P P D E ,欢迎 大家 来飞桨 社区 找我,谢谢大家 fork 这个项目"
}
# 生成 sentence.txt
text_file = os.path.join(exp_dir, "sentence.txt")
with open(text_file, "w", encoding="utf8") as f:for k,v in sorted(text_dict.items(), key=lambda x:x[0]):f.write(f"{k} {v}\n")

3.2 调训练的模型

# 找到最新生成的模型
def find_max_ckpt(model_path):max_ckpt = 0for filename in os.listdir(model_path):if filename.endswith('.pdz'):files = filename[:-4]a1, a2, it = files.split("_")if int(it) > max_ckpt:max_ckpt = int(it)return max_ckpt

3.2 生成语音

# 配置一下参数信息
model_path = os.path.join(output_dir, "checkpoints")
ckpt = find_max_ckpt(model_path)cmd = f"""
python3 /home/aistudio/PaddleSpeech/paddlespeech/t2s/exps/fastspeech2/../synthesize_e2e.py \--am=fastspeech2_mix \--am_config=models/fastspeech2_mix_ckpt_1.2.0/default.yaml \--am_ckpt={output_dir}/checkpoints/snapshot_iter_{ckpt}.pdz \--am_stat=models/fastspeech2_mix_ckpt_1.2.0/speech_stats.npy \--voc="hifigan_aishell3" \--voc_config=models/hifigan_aishell3_ckpt_0.2.0/default.yaml \--voc_ckpt=models/hifigan_aishell3_ckpt_0.2.0/snapshot_iter_2500000.pdz \--voc_stat=models/hifigan_aishell3_ckpt_0.2.0/feats_stats.npy \--lang=mix \--text={text_file} \--output_dir={wav_output_dir} \--phones_dict={dump_dir}/phone_id_map.txt \--speaker_dict={dump_dir}/speaker_id_map.txt \--spk_id=0 \--ngpu=1
"""
run_cmd(cmd, cwd_path)

3.4 语音展示

import IPython.display as ipdipd.Audio(os.path.join(wav_output_dir, "0.wav"))

<IPython.lib.display.Audio object>

ipd.Audio(os.path.join(wav_output_dir, "1.wav"))

<IPython.lib.display.Audio object>

ipd.Audio(os.path.join(wav_output_dir, "2.wav"))

<IPython.lib.display.Audio object>

项目总结

在paddlespeech的加持下,音色克隆变成了一件非常简单的事情(虽然效果还不是很好),本项目中还有很多数据可以使用,大家可以尽情的fork体验。

个人总结

全网同名:

iterhui

我在AI Studio上获得至尊等级,点亮10个徽章,来互关呀~

https://aistudio.baidu.com/aistudio/personalcenter/thirdview/643467

此文章为搬运
原项目链接

[PaddleSpeech] 音色克隆之原神角色 <胡桃>相关推荐

  1. nonebot 原神角色查询插件

    文章目录 前言 一.使用命令及方法 1.使用命令 2.使用方法 二.代码部分 1.引入库 2.完整代码 总结 前言 本插件基于nonebot框架进行创作 作者萌新源 作者QQ:1648576390 交 ...

  2. nonebot2 原神角色查询插件

    今天为你们带来的是原神角色查询插件 功能是可以在群里查询各种角色的属性等 """ 作者:萌新源 时间:2022/3/30 操作系统:debian for raspberr ...

  3. 【C++】原神角色管理系统——基于vs的系统开发

    首先成果展示给大家放上链接: B站:[原神]原神系统演示_原神 以下是代码部分(有点长): #include <iostream> #include <fstream> #in ...

  4. 将原神角色导入unity 完整版

    一.角色导入         首先需要获取角色模型,获取方式可以从原神官网获取,这里采用从模之屋进行获取,进入模之屋后搜索自己想要的角色,然后下载压缩包并解压. 模之屋:专业模型创作分享社区_模之屋_ ...

  5. 20行代码爬取原神角色全图

    python爬取原神官网所有角色的全身图 需要的工具 python环境 原神首页链接 https://ys.mihoyo.com/main/ 一个.py文件 话不多说,直接开整 用到的库有 impor ...

  6. Flutter--简易的原神角色培养计算器

    原来你也玩原神?!!! 输入你的当前面板属性,计算结果得到攻击暴击爆伤的收益系数,选择系数大的去提升,这样一点点修正培养,你就可以越来越接近理论最大值. 注意:输入的暴击/爆伤比如是 50%, 计算时 ...

  7. 有趣的Python爬虫-原神角色查询程序

    目录 1.网页分析抓包 2.代码编写 使用Python制作的角色查询功能现已制作成Nonebot2插件,可在我的群里拿取插件包. 1.网页分析抓包 对于这种 动态网页 我们去爬取网页的html代码是得 ...

  8. 【原神】各角色Pixiv涩图统计(一). 最多的是谁? R18涩图谁最多?

    统计的结果请见第一篇文章. 代码已经开源至GitHub 本文下面所有的爬虫项目都有详细的配套教程以及源码,都已经打包好上传到百度云了,链接在文章结尾处! 扫码此处领取大家自行获取即可~~~ 讲真, 这 ...

  9. 《原神》——开放世界二次元游戏的一些见解和建议

    一.原神在海外的布局 原神商业化的成功绝对离不开其海外的布局,截止目前的数据来看,原神在海外的市场带来的商业化价值已经和国内相近甚至更高.原神不仅在多国拿到付费榜榜首的好成绩,并且在12月1日,谷歌公 ...

最新文章

  1. oracle java连接配置
  2. Markdown 图片助手-MarkdownPicPicker
  3. 关于c++深拷贝与浅拷贝
  4. JavaScript 技术篇-简单的两行js代码获取password不可见密码实例演示,js获取密码输入框里的值
  5. poj 1935(搜索+回溯)
  6. 可以无限量服用的药材
  7. UVALive 6511 Term Project
  8. java程序员常用查询和学习的网站
  9. php display block,CSS display (block inline none )常见属性和用法教程
  10. 平时如何管理你的项目?
  11. Spring Boot 2.x(十四):整合Redis,看这一篇就够了
  12. sqlite dev破解
  13. Node+Express实现文件的上传下载与删除
  14. 中文点阵字库的使用方法
  15. [算法]代码运行时间增长数量级对比 线性级别N vs 线性对数级别 NlgN
  16. H3C模拟器安装及解决各种兼容性问题方法
  17. 巧舟的逆转裁判开发手记
  18. ArcGIS面矢量挖洞
  19. Itext使用 Java导出PDF
  20. tomcat配置url跳转_架构成长之路:还不清楚原理就晚了,Java技术大咖带你手写Tomcat...

热门文章

  1. org.apache.xerces.parsers.SAXParser
  2. 水平接近病理学家!人工智能快速解码脑癌基因组
  3. python操作网页flash视频_Python爬取FLASH播放器中的资料
  4. RabbitMQ【笔记整理+代码案例】
  5. 【C语言】寄存器变量
  6. 运动无极限,NANK南卡全新品牌形象大使—世界轮滑冠军郭丹
  7. 3分钟告诉你什么是CDP系统
  8. 软件可行性研究报告(伪代码)
  9. LaTex中的绝对值符号
  10. Canvas动画的实现——塔吊