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

emotion-vits环境配置的一些踩坑

2023-03-27 18:06 作者:斜眼飞舞  | 我要投稿

本人只使用了使用样例音频作为情感输入的功能和@一只有梦想的咸鱼电台 训练的模型,懒得训练感情模型了,之后有时间再说。

资料参考:

可控制情感的绫地宁宁语音合成!基于VITS模型_哔哩哔哩_bilibili

【VITS】基于emotion-vits的LL全员语音模型_哔哩哔哩_bilibili

https://www.bilibili.com/read/cv20607867

首先用Anaconda3安装虚拟环境,本人显卡是笔记本3070,然后建议使用python3.7,不然后面自动安装的时候有些依赖包的版本会出问题你还得再改。

然后先去把pytorch安装了,选择CUDA的版本,因为懒得天天换,学习用的yolov8用的是11.3的,所以我就选了11.3的pytorch,当然不训练的话你用CPU的也可以。再pytorch官网的旧版本下载页面点击ctrl+f搜索。我要11.3版本的我就搜cu113。然后找到对应的pip命令安装。

如果你用不到情感词典,在第四段代码中把导入情感词典的注释掉。因为tts就是在这一段定义的。

# all_emotions = np.load("all_emotions.npy")

# 音频情感分类结果

# emotion_dict = json.load(open("sample_wav.json", "r"))

import random

def tts(txt, sid, emotion, roma=False, length_scale = 1):

    if roma:

        stn_tst = get_text_byroma(txt, hps)

    else:

        stn_tst = get_text(txt, hps)

    with torch.no_grad():

        x_tst = stn_tst.unsqueeze(0)

        x_tst_lengths = torch.LongTensor([stn_tst.size(0)])

        import emotion_extract

        emo = torch.FloatTensor(emotion_extract.extract_wav(emotion))

        # sid = torch.LongTensor([0])

        # if type(emotion) ==int:

        #     emo = torch.FloatTensor(all_emotions[emotion]).unsqueeze(0)

        # elif emotion == "random":

        #     emo = torch.randn([1,1024])

        # elif emotion == "random_sample":

        #     randint = random.randint(0, all_emotions.shape[0])

        #     emo = torch.FloatTensor(all_emotions[randint]).unsqueeze(0)

        #     print(randint)

        # elif emotion.endswith("wav"):

        #     import emotion_extract

        #     emo = torch.FloatTensor(emotion_extract.extract_wav(emotion))

        # else:

        #     emo = torch.FloatTensor(all_emotions[emotion_dict[emotion]]).unsqueeze(0)


        audio = net_g.infer(x_tst, x_tst_lengths, sid=sid, noise_scale=0.667, noise_scale_w=0.8, length_scale=length_scale, emo=emo)[0][0,0].data.float().numpy()

    ipd.display(ipd.Audio(audio, rate=hps.data.sampling_rate, normalize=False))


get_roma是pyopenjtalk的函数,安装上。

chardet也安装上。

transformers也安装上。

Jupyter notebook遇到500的问题可以自己搜一下解决办法。

先把前几段代码都跑了该导入的导入了,用到情感词典的可以不管。

然后运行使用样例音频作为情感输入的一段。

另外运行的时候可能缺少一些转换词典之类的

# 使用音频文件作为感情输入

txt = "疲れた?甘ったれたこと言ってんじゃないわよ!"

txtr=get_roma(txt, hps)

tts(txtr, torch.LongTensor([1]), emotion="./short normal.wav", roma=True, length_scale = 1)

这个LongTensor[]里面的数字就是你载入的模型里的讲话者序号,后面的emotion就是从当前路径开始的音频文件,get_roma是把日文转换成罗马音的。

这一段代码我之前遇到过:

ImportError: cannot import name 'logging' from 'huggingface_hub' (D:\Anaconda3\envs\vits\lib\site-packages\huggingface_hub\__init__.py)

这个我没找到解决办法,当时是python3.8的环境,我干脆换3.7了,之后没有报错。

然后还有可能遇到:

TypeError: load() takes 1 positional argument but 2 were given

这个是librosa版本的问题,去google了一下,stackoverflow上有解决办法,就是换成librosa的0.9.2版本,因为之前安装可能给你安装了个0.10.0之后的。重装之后重新打开ipynb文件。

现在就可以根据样例音频作为情感输入合成音频了。



但是有个小提醒,样例音频最好是用原句,这样效果最好。不要用不同的语言,不同的语言表达情感的轻重音和升降调是有差别的,导出结果会非常怪异。如果对音调什么的细节不满意,可以自己先用get_roma函数输出罗马音音素,然后自己调整一下字符比如箭头啊什么的,然后输入到新的字符串,改为tts函数的第一个变量,然后输出。

总之如果懂一些python的话这些会方便许多。


总之感谢@一只有梦想的咸鱼电台 和@Rcell 大佬的努力,本人电脑还在跑其他模型,可能最近还是会鸽子一段时间。有时间了我自己想办法制作一个语音库填补一些空白。

之后可能会试试so-vits和AI画图,不得不说真的是在亲身经历一场科技革命,以后二创会方便不少了。



emotion-vits环境配置的一些踩坑的评论 (共 条)

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