CosyVoice 添加新音色

CosyVoice 默认提供了几个音色,现在新的需求希望增加新的音色。研究一下了发现可以在不训练模型的情况下完成新音色的增加。


预置音色

准备工作

首先需要准备包含音色的音频文件,音频时长最好长一些,内容丰富一些,这样提取 embedding 的时候也会丰富一些。另外需要准备语音对应的标注文字。

CosyVoice 工程 example 路径下提供了训练模型的代码,我们虽然不需要训练模型,但是里面的脚本文件包括一些提取音色的依赖项。将 example/libritts/cosyvoice/run.sh 文件在相同目录下另外拷贝一份,命名为 new.sh

打开新建的文件,修改如下代码。这样就会只运行这个脚本的前两步,后面训练模型的部分我们不需要。data_dir 存放的是训练数据。准备好这些之后就可以开始提取音色了。

stage=0
stop_stage=1

data_dir=/test/workspace/CosyVoice/input

生成语音嵌入文件

接下来,运行新建的new.sh文件,生成 embedding 文件。文件存放在 example/libritts/cosyvoice/data 目录。

sh new.sh

该文件实际为一个 python 字典的 pickle 序列化。里面存放的语音 embedding 就是我们需要的音色。

音色提取

通过以下实例代码提取音色

import torch

device = torch.device('cuda')
model_dir = '/test/workspace/CosyVoice/pretrained_models/CosyVoice-300M-train/'
spk_path = '{}spk2info.pt'.format(model_dir)

spk2info = torch.load(spk_path, map_location=device)

wl_path = '/test/workspace/CosyVoice/examples/libritts/cosyvoice/data/train_data/spk2embedding.pt'
wl = torch.load(wl_path, device)
tensor = torch.tensor(wl['audio_file_name.WAV'])
tensor = tensor.view(1, 192)
spk2info['user_name'] = {'embedding': tensor}
torch.save(spk2info,'spk2info_new.pt')

通过这种方式生成新的 spk2info 字典,将其保存下来替换掉原来的文件重新启动 webui 就能加载新的音色选项了。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容