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