这两天看到了一个项目Real-Time-Voice-,它可以通过一段声音的片段模拟一个人的声音。我感觉还是蛮有意思的。
这里有个作者的介绍视频可以看:(B 站视频地址 )。不过我觉得他给出的客户端软件不如直接上代码更直接。
环境搭建首先clone代码
git clone https://github.com/CorentinJ/Real-Time-Voice-Cloning.git
cd Real-Time-Voice-Cloning
安装依赖
这里环境搭建比较简单,基本不会遇到坑,步骤如下:
下载预训练的模型
这里有三个模型(,,)的参数,把文件夹分别放入到对应的文件夹即可。
准备音频数据
这里为了模仿特朗普的声音,我从上面找了一个特朗普的演讲,并截取了一小段,保存成一个文件。
生成语音
接下来就可以生成语音了,这里建立一个 。
加载模型
# 导入模型参数
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], )
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") # 合成语音
最后的生成效果如下:
完整的代码:
链接:
密码:ezl8
本文代码可查看hesis.ipynb
- End -
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...