欢迎光临散文网 会员登陆 & 注册

Tacotron2语音合成之复刻主播声音

2022-08-31 14:42 作者:秋之雪华  | 我要投稿

最近在阿B看到许多语音合成的视频,效果比小爱的声音定制略胜一筹,不能说和本人一模一样,但是也相当近似。

从实现方式讲,有阿里云商用闭源方案,有Tacotron2和VIST开源方案,以及更早的MockingBird。目前我用了Tacotron2,自我感觉上手难度较低,但是时间开销有些大。

在这里总结一下经验并作一个技术分享。


背景

目前的多数示例是使用游戏音频素材做训练和合成的。游戏音频素材已经是每句一个录音文件,发音吐字清晰,没有不必要的停顿和重读,录音音量稳定,无噪音和背景音,而主播录播内容恰恰相反,唯一的优势是录播素材多,可以手动精选。


准备

  1.  一台电脑

  2. 访问外网的工具

  3. 一个谷歌账户

  4. 预先下载录播(首选杂谈类型的录播,毕竟游戏、歌回、同步视听不是话说的少就是干扰因素多;杂谈也尽量选择纯音乐做BGM的录播)

建议只下载音频,dash音频即.m4a格式的文件



MockingBird

先简单说一下MockingBird,MockingBird的上手难度短和时间开销低,但是实际效果很不理想。简单讲,MockingBird需要内置一个模型,然后你提供一条10秒左右录音文件,MockingBird从录音文件学习,然后合成新的声音。

当内置模型和录音文件差异很大时,合成的结果就会翻车。

其次这种学习是无法学到平翘舌、前后鼻音之类的不标准的发音的。

因此不推荐使用这个工具。


简介

主要使用了 @梅雨初霁 的工具包进行训练

https://t.bilibili.com/695241886813650984

也参考了这个视频对录播的处理

https://www.bilibili.com/video/BV1dq4y137pH


文件准备

录播的录音文件需要做一定的预处理。我在处理过程中均使用wav文件格式,不一定非wav不可,但是理论上这可以减少重复编码解码造成的信息损失。

  1.  切割

    由于直播间通常有背景音乐,需要使用工具去除背景音;而录音文件越大,工具对内存就有更高的需求,因此录音文件需要根据具体情况预先切割。

    通常来说10分钟是不会有问题的

1小时的录音去除背景音乐时占用内存5G,但是并非剩余内存大于6G就一定能够运行成功


切割录音文件使用的工具我推荐QuickCut  

https://github.com/HaujetZhao/QuickCut/releases

重命名音频后缀为wav,拖文件到输入路径;选择一个输出文件夹,设置片段时长(秒),点击运行

QuickCut  切割录音文件

2. 去除背景音乐

下载并使用Spleeter为核心二次开发的程序,并处理已经切割后的文件。我推荐(个人感觉资源开销低,其他工具可能真的只能处理切割为10分钟的片段)  https://github.com/wudicgi/SpleeterMsvcExe/releases/  ,也可以使用https://github.com/otomad/SpleeterGui 或者 https://github.com/Anjok07/ultimatevocalremovergui/releases

处理结束,文件名包含vodal的就是去除了背景音乐的纯人声录音,其他文件都可以删除。


由于主播通常使用单通道麦克风录音,而背景音乐通常是立体声,可以使用音频处理软件(比如golden wave的立体声通道处理功能,选择“提升人声”或者“提升中央”,对录音文件中的噪音再次消除。

3. 修改编码

在golden wave中新建文件,选择单声道 22050采样率的文件

复制调整过音量的内容并粘贴到新文件中,保存为wav格式。

4. 音量增益

如果音量较小,需要把录音文件的音量调大。我使用golden wave的自动增益功能,设置目标音量-3db(当然也可以更大)

设置参考

音量调节前后对比


5. 语音识别并生成字幕

我推荐使用剪映,白嫖字节跳动的服务器资源。

直接拖拽录音文件到剪映的音频轨道上,右键识别字幕/歌词

语音识别

识别结束,导出。注意导出时不勾选视频导出,勾选字幕导出,字幕格式选择srt。

导出字幕

6. 校对字幕

剪映其实也可以校对字幕,但是我推荐aegisub,效率更高  https://github.com/Aegisub/Aegisub/releases

把录音和字幕拖到aegisub上,就可以预览波形图、播放选区、校对字幕了。

需要注意的是:

    a. 尽量只保留陈述句。如果录音有笑声、拍肚皮声,建议删掉,字音不清楚建议删掉

    b. 字幕有同音错字可以不处理

    c. 有英语的内容建议删除

    d. 相邻两句距离太短,建议合并字幕为一句

    e. 如果字幕在音频的边缘,需要注意字音是否完整。宁愿多选不要让字音有破音


7. 切割音频

按照字幕的时间,切割录音文件。可以使用https://gitee.com/kslizi/Sound_File_Procesing  或者前边用过的QuickCut   https://github.com/HaujetZhao/QuickCut/releases 

两者其实都有问题,前者是Python项目,需要安装环境、依赖,可以参考这个视频 https://www.bilibili.com/video/BV1dq4y137pH

后者切割文件后,需要手动生成文件列表,把左图的文件修改为右图的格式。熟悉文本编辑器或者excel倒是不难。

每行记录都有空格分割为两部分,左侧文件名(不包含后缀),右侧文本内容(不包含标点)


8. 上传文件。

解压tacotron2压缩包上传到谷歌云端硬盘;

把录音文件拆分训练集和测试集,放到training和testing两个不同的文件夹,在谷歌硬盘的tactron2目录中新建一个文件夹(举例命名为Miki)放进去。

文件列表同样需要拆分为训练集和测试集两个文件,文件名必须与放置的录音文件一致(录音文件为Miki目录,训练集文件列表命名Miki.txt,测试集文件列表命名Miki_testing.txt),放到谷歌硬盘的tactron2/filelists目录中


在线训练

由于深度学习需要使用高性能电脑,而看这个文档的你一定这样的电脑。

我们可以白嫖谷歌的高性能服务器。

在谷歌硬盘中点击Tacotron2+HifiGAN.ipynb这个文件并打开,修改

修改TTS/tacotron2为你上传到谷歌硬盘的路径,修改Miki为你的录音文件的文件夹名称

然后顺次点击每个白色的小箭头即可

其中trainning会耗费数天的时间。根据我的经验,每个谷歌账户应该一天只能白嫖4小时左右。但是问题不大,你可以多注册几个账户,通过共享文件的方式接力训练,或者充值变强。



离线合成


除在colob中在线合成,也可以使用MoeTTS加载Tacotron2模型。https://github.com/luoyily/MoeTTS/releases/tag/v1.0.1

首先从Google drive中,colab/outdir中下载训练过的模型。

再从tacotron2压缩包中获取hifimodel和config.json两个文件,

在moetts中选择模型、路径,

在文本框内输入拼音,注意句尾添加英文句号,点击成声音文件,稍等几秒即可得到录音文件。

每次生成录音具有一定的随机性,如果不理想可以重试几次



网盘链接

只打包了Tacotron2,考虑到录音文件和训练的模型存在风险,不做分享。

链接: https://pan.baidu.com/s/1KCHV3YWHVzPdb-62STMKlQ?pwd=3uyx 提取码: 3uyx 

Tacotron2语音合成之复刻主播声音的评论 (共 条)

分享到微博请遵守国家法律