【有趣的项目分享】尝试用AI合成特朗普的语音

20,777 阅读1分钟

这两天看到了一个项目Real-Time-Voice-Cloning,它可以通过一段声音的片段模拟一个人的声音。我感觉还是蛮有意思的。

这里有个作者的介绍视频可以看:BV1W4411B7ge。不过我觉得他给出的客户端软件不如直接上代码更直接。

这里我用特朗普的语音来举个例子。

环境搭建

首先clone代码

git clone https://github.com/CorentinJ/Real-Time-Voice-Cloning.git
cd Real-Time-Voice-Cloning

安装依赖

这里环境搭建比较简单,基本不会遇到坑,步骤如下:

  • 安装Python3.6 or Python3.7
  • 安装ffmpeg
  • 安装PyTorch (>=1.0.1)
  • 最后通过pip安装依赖了:pip3 install -r requirements.txt

下载预训练的模型

github.com/CorentinJ/R…

这里有三个模型(encoder,synthesizer,vocoder)的参数,把save_models文件夹分别放入到对应的文件夹即可。

准备音频数据

这里为了模仿特朗普的声音,我从youtube上面找了一个特朗普的演讲,并截取了一小段,保存成一个文件。

生成语音

接下来就可以生成语音了,这里建立一个jupyter notebook。

加载模型

# 导入模型参数
from IPython.display import Audio
from IPython.utils import io
from synthesizer.inference import Synthesizer
from encoder import inference as encoder
from vocoder import inference as vocoder
from pathlib import Path
import numpy as np
import librosa
encoder_weights = Path("encoder/saved_models/pretrained.pt")
vocoder_weights = Path("vocoder/saved_models/pretrained/pretrained.pt")
syn_dir = Path("synthesizer/saved_models/logs-pretrained/taco_pretrained")
encoder.load_model(encoder_weights)
synthesizer = Synthesizer(syn_dir)
vocoder.load_model(vocoder_weights)

调用模型并生成语音

#@title Deep vocoder
def synth(text):
  in_fpath = Path("donald_trump_hosts_medal_presentation_ceremony_-820681363564909524.wav") # 特朗普的一小段声音文件
  reprocessed_wav = encoder.preprocess_wav(in_fpath)
  original_wav, sampling_rate = librosa.load(in_fpath)
  preprocessed_wav = encoder.preprocess_wav(original_wav, sampling_rate)
  embed = encoder.embed_utterance(preprocessed_wav)
  print("Synthesizing new audio...")
  with io.capture_output() as captured:
    specs = synthesizer.synthesize_spectrograms([text], [embed])
  generated_wav = vocoder.infer_waveform(specs[0])
  generated_wav = np.pad(generated_wav, (0, synthesizer.sample_rate), mode="constant")
  librosa.output.write_wav("output_trump_voice.wav", generated_wav, synthesizer.sample_rate) 
  display(Audio(generated_wav, rate=synthesizer.sample_rate))
  
synth("Chinese government is so powerful, and I love the Republic of China") # 合成语音

最后的生成效果如下:nladuo.github.io/trump_voice…

完整的代码:链接:pan.baidu.com/s/1NFtU26GW… 密码:ezl8

本文代码可查看demo_trump_voice_sythesis.ipynb