OpenVoiceV2:零样本跨语言语音克隆技术,支持多种风格控制

1 openvoicev2介绍

语音克隆技术
近年来取得了显著进展,但现有方法通常存在着局限性,例如无法灵活控制语音风格、需要大量多语言数据进行训练、生成速度慢等等。为了克服这些挑战,MyShell.ai团队推出了全新的语音克隆技术OpenVoiceV2,它能够在无需额外训练的情况下,仅凭少量参考音频,就能够克隆任何人的声音,并支持多种语音风格控制,以及快速高效的跨语言语音生成。

论文地址:http://arxiv.org/pdf/2312.01479

代码地址:https://github.com/myshell-ai/OpenVoice

模型地址:https://huggingface.co/myshell-ai/OpenVoiceV2/tree/main

1.1 技术特点

OpenVoiceV2拥有以下关键技术特点:

  • 零样本跨语言语音克隆

OpenVoiceV2能够实现零样本跨语言语音克隆,即即使目标语言不在模型的训练数据集中,也可以通过少量参考音频进行克隆。这得益于OpenVoiceV2的独特设计,它将语音克隆过程分解为不同的子任务,并采用了一种基于语音特征的转换方式。

  • 灵活的语音风格控制

OpenVoiceV2支持多种语音风格控制,例如情感、口音、节奏、停顿和语调等等。用户可以根据自己的需求,自由控制生成的语音风格,为语音合成

带来更多可能性。

  • 快速高效的语音生成

OpenVoiceV2采用了高效的模型架构,并经过优化,能够在单卡A10G GPU上实现12倍实时语音生成速度,这意味着它只需85毫秒就能生成1秒的语音。

  • 多语言支持

OpenVoiceV2原生支持英语、西班牙语、法语、中文、日语和韩语,这意味着用户可以使用该技术生成多种语言的语音。

  • 开源且免费商用

为了促进语音合成技术的发展,OpenVoiceV2的代码和模型都已公开发布,并采用MIT许可证,这意味着用户可以自由使用该技术进行研究或商业应用。

1.2 性能表现

OpenVoiceV2在语音克隆方面展现出优异的性能:

  • OpenVoiceV2能够准确地克隆参考音色,并生成多种语言和口音的语音。
  • OpenVoiceV2支持多种语音风格控制,并能够保持高保真度。
  • OpenVoiceV2的语音生成速度非常快,能够满足实时应用的需求。

1.3 应用场景

OpenVoiceV2的强大功能和易用性使其在众多应用场景中具有广阔的应用前景:

  • 媒体内容创作: OpenVoiceV2可以帮助用户生成不同角色的声音,用于配音、朗读、制作音频节目等。
  • 定制化聊天机器人: OpenVoiceV2可以为聊天机器人提供更自然、更人性化的语音,提升用户体验。
  • 多模态
    交互: OpenVoiceV2可以用于构建更加智能、更加自然的多模态交互系统,例如根据用户的文字描述生成语音,或将图像转化为语音等等。
  • 教育和娱乐: OpenVoiceV2可以用于制作语音教材、游戏、动画等,为教育和娱乐领域提供更具吸引力的内容。

2 openvoicev2本地部署及使用

3.1 conda环境准备

conda环境准备详见:annoconda

3.2 运行环境构建

3.1 创建运行环境

conda create -n openvoice python==3.9
conda activate openvoice 

3.2 安装MeloTTS

git clone https://github.com/myshell-ai/MeloTTS.git
cd MeloTTS

修改依赖requirements.txt如下:

txtsplit==1.0.0
torch==2.3.1
torchaudio==2.3.1
boto3==1.34.0
botocore==1.34.0
cached_path==1.6.0
transformers==4.27.4
num2words==0.5.12
unidic_lite==1.0.8
unidic==1.1.0
mecab-python3==1.0.9
pykakasi==2.2.1
fugashi==1.3.0
g2p_en==2.1.0
anyascii==0.3.2
jamo==0.4.1
gruut[de,es,fr]==2.2.3
g2pkk>=0.1.1
librosa==0.9.1
pydub==0.25.1
eng_to_ipa==0.0.2
inflect==7.0.0
unidecode==1.3.7
pypinyin==0.50.0
cn2an==0.5.22
jieba==0.42.1
gradio==3.36.0
langid==1.1.6
tqdm
tensorboard==2.16.2
loguru==0.7.2

执行安装命令:

pip install -e .

更改typer版本:

pip install typer==0.11.0

执行下载命令:

python -m unidic download

注意:不用使用文档中的命令安装(如下所示),否则会陷入无限的依赖版本尝试

pip install git+https://github.com/myshell-ai/MeloTTS.git

3.3 安装openvoice

git clone https://github.com/myshell-ai/OpenVoice
cd OpenVoice
pip install -r requirements.txt

3.4 下载模型

下载地址:checkpoints_v2_0417.zip

解压到checkpoints_v2文件夹下

3.5 创建并运行脚本代码

根目录下创建脚本文件:deni_part3.py,内容如下:

import os
import torch
from openvoice import se_extractor
from openvoice.api import ToneColorConverter


ckpt_converter = 'checkpoints_v2/converter'
device = "cuda:0" if torch.cuda.is_available() else "cpu"
output_dir = 'outputs_v2'

tone_color_converter = ToneColorConverter(f'{ckpt_converter}/config.json', device=device)
tone_color_converter.load_ckpt(f'{ckpt_converter}/checkpoint.pth')

os.makedirs(output_dir, exist_ok=True)

reference_speaker = 'resources/example_reference.mp3' # This is the voice you want to clone
target_se, audio_name = se_extractor.get_se(reference_speaker, tone_color_converter, vad=False)

from melo.api import TTS

texts = {
    'EN_NEWEST': "Did you ever hear a folk tale about a giant turtle?",  # The newest English base speaker model
    'EN': "Did you ever hear a folk tale about a giant turtle?",
    'ES': "El resplandor del sol acaricia las olas, pintando el cielo con una paleta deslumbrante.",
    'FR': "La lueur dorée du soleil caresse les vagues, peignant le ciel d'une palette éblouissante.",
    'ZH': "在这次vacation中,我们计划去Paris欣赏埃菲尔铁塔和卢浮宫的美景。",
    'JP': "彼は毎朝ジョギングをして体を健康に保っています。",
    'KR': "안녕하세요! 오늘은 날씨가 정말 좋네요.",
}

src_path = f'{output_dir}/tmp.wav'

# Speed is adjustable
speed = 1.0

for language, text in texts.items():
    model = TTS(language=language, device=device)
    speaker_ids = model.hps.data.spk2id

    for speaker_key in speaker_ids.keys():
        speaker_id = speaker_ids[speaker_key]
        speaker_key = speaker_key.lower().replace('_', '-')

        source_se = torch.load(f'checkpoints_v2/base_speakers/ses/{speaker_key}.pth', map_location=device)
        model.tts_to_file(text, speaker_id, src_path, speed=speed)
        save_path = f'{output_dir}/output_v2_{speaker_key}.wav'

        # Run the tone color converter
        encode_message = "@MyShell"
        tone_color_converter.convert(
            audio_src_path=src_path,
            src_se=source_se,
            tgt_se=target_se,
            output_path=save_path,
            message=encode_message)

python deni_part3.py运行代码后,生成的音频文件存储在outputs_v2文件夹下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智慧医疗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值