| 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 |