|
import os
|
|
import torch
|
|
import sys
|
|
import librosa
|
|
sys.path.append('../OpenVoice')
|
|
from openvoice import se_extractor
|
|
from openvoice.api import ToneColorConverter
|
|
|
|
ckpt_converter = '../OpenVoice/checkpoints_v2/converter'
|
|
device = "cuda:0" if torch.cuda.is_available() else "cpu"
|
|
|
|
tone_color_converter = ToneColorConverter(f'{ckpt_converter}/config.json', device=device)
|
|
tone_color_converter.load_ckpt(f'{ckpt_converter}/checkpoint.pth')
|
|
|
|
def convert(source_path, reference_path, output_path):
|
|
target_se, audio_name = se_extractor.get_se(reference_path, tone_color_converter, vad=False)
|
|
source_se, audio_name = se_extractor.get_se(source_path, tone_color_converter, vad=False)
|
|
|
|
tone_color_converter.convert(
|
|
audio_src_path=source_path,
|
|
src_se=source_se,
|
|
tgt_se=target_se,
|
|
output_path=output_path,
|
|
message="@Myshell",)
|
|
ref_wav_16k, _ = librosa.load(reference_path, sr=16000)
|
|
output_wav_16k, _ = librosa.load(output_path, sr=16000)
|
|
ref_wav_16k = torch.tensor(ref_wav_16k).unsqueeze(0)
|
|
output_wav_16k = torch.tensor(output_wav_16k).unsqueeze(0)
|
|
return ref_wav_16k, output_wav_16k |