前言 书接上回,在体验过RVC实时音色转换后,调整了很多转换参数和各种音色模型,总是感觉效果差一点,在追求更好的效果的时候一个开源的AI模型出现了,即CosyVoice,据说拥有媲美人类录音的真实效果,同时有丰富的情感语气,自然发声。看官网的样式很吊,那么下面就来自己搭建一下体验效果。
安装&体验 环境:windows10
python:3.10.11
官网:CosyVoice 领先的多语言语音生成工具
github:FunAudioLLM/CosyVoice: Multi-lingual large voice generation model, providing inference, training and deployment full-stack ability.
把代码块clone下来开始安装
1 2 3 4 5 6 7 git clone --recursive https://github.com/FunAudioLLM/CosyVoice.git cd CosyVoice git submodule update --init --recursive python -m venv .venv .venv\Scripts\activate pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host=mirrors.aliyun.com
在安装依赖的时候遇到一个小坑,由于我是window10+3060TI的显卡,在安装torch相关依赖的时候要指定一下版本,不然会报错
1 2 pip install torch==2.1.2+cu118 torchaudio==2.1.2+cu118 torchvision==0.16.2+cu118 ^ --index-url https://download.pytorch.org/whl/cu118
安装好后,还要下载一下对应预训练模型到本地
1 2 3 4 5 6 7 from modelscope import snapshot_download snapshot_download('FunAudioLLM/Fun-CosyVoice3-0.5B-2512', local_dir='pretrained_models/Fun-CosyVoice3-0.5B') snapshot_download('iic/CosyVoice2-0.5B', local_dir='pretrained_models/CosyVoice2-0.5B') snapshot_download('iic/CosyVoice-300M', local_dir='pretrained_models/CosyVoice-300M') snapshot_download('iic/CosyVoice-300M-SFT', local_dir='pretrained_models/CosyVoice-300M-SFT') snapshot_download('iic/CosyVoice-300M-Instruct', local_dir='pretrained_models/CosyVoice-300M-Instruct') snapshot_download('iic/CosyVoice-ttsfrd', local_dir='pretrained_models/CosyVoice-ttsfrd')
为了节省时间,我这里其实只下载了【CosyVoice-300M-Instruct】模型,下载完后就可以启动web demo来体验效果啦
1 python3 webui.py --port 50000 --model_dir pretrained_models/CosyVoice-300M-Instruct
这里我们可以使用预训练音色,在最上面的文本框来直接体验效果,注意这里生成会比RVC这些慢挺多的,因为模型参数大很多,下面这段效果我用3060TI都跑了8秒。
文本:【今天深圳天气很不错,温度26度,空气适宜,适合躺平呀】
虽然还是缺少一点点活人感,但整体效果还是不错的。
下面再来体验一下代码方式生成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 import syssys.path.append('third_party/Matcha-TTS' ) from cosyvoice.cli.cosyvoice import AutoModelimport torchaudiodef cosyvoice3_example () : cosyvoice = AutoModel(model_dir='pretrained_models/Fun-CosyVoice3-0.5B' ) for i, j in enumerate(cosyvoice.inference_zero_shot('让我教你炒股秘诀,分别是全仓猛干,浮盈加仓,频繁交易,技术分析,绝对有搞头' , 'You are a helpful assistant. 用开心、快乐、快速的语气<|endofprompt|>希望你以后能够做的比我还好呦。' , './asset/zero_shot_prompt.wav' , stream=False )): torchaudio.save('money_{}.wav' .format(i), j['tts_speech' ], cosyvoice.sample_rate) def main () : cosyvoice3_example() if __name__ == '__main__' : main()
上面这段代码主要方法就是:inference_zero_shot,
第一个参数:要生成音频的文本
第二参数:语音克隆的prompt(风格+语气+指令)
[系统指令] + [语气控制] + <|endofprompt|> + [引导性文本]
第三个参数:参考音频
这里返回是一个generator,一段文本会根据长度被切分为多段音频,所以要遍历保存一下。
原理 CosyVoice3 是一个支持多语言的语音合成(TTS)模型 ,它不仅能把文字变成自然语音,还能做到:
零样本音色克隆(zero-shot voice cloning) :只需一小段音频示例,就能模仿该人的声音;
多语言和方言支持 :覆盖 9 种通用语言和 18 种中文方言;
情感/语气控制 :语速、情绪等可用自然语言指令控制;
跨语种合成 :用一个语种的音色在其他语言中发音,且保持声音特征。
本质上是一个基于大规模深度学习模型的端到端语音生成系统 。