|
import os |
|
import torch |
|
from openvoice import se_extractor |
|
from openvoice.api import ToneColorConverter |
|
import requests |
|
import zipfile |
|
import shutil |
|
device="cuda:0" if torch.cuda.is_available() else "cpu" |
|
output_dir = 'outputs' |
|
|
|
|
|
|
|
|
|
ROOT = os.getcwd() |
|
cache_dir = f"{ROOT}/.cache/torch/hub" |
|
extract_dir = os.path.join(cache_dir, "snakers4_silero-vad_master") |
|
url = "https://github.com/snakers4/silero-vad/zipball/master" |
|
|
|
if not os.path.exists(extract_dir): |
|
os.makedirs(cache_dir, exist_ok=True) |
|
zip_path = os.path.join(cache_dir, "master.zip") |
|
with requests.get(url, stream=True) as r: |
|
r.raise_for_status() |
|
with open(zip_path, 'wb') as f: |
|
for chunk in r.iter_content(chunk_size=8192): |
|
f.write(chunk) |
|
temp_extract_dir = os.path.join(cache_dir, "temp_extract") |
|
with zipfile.ZipFile(zip_path, 'r') as zip_ref: |
|
zip_ref.extractall(temp_extract_dir) |
|
|
|
|
|
extracted_folder = os.path.join(temp_extract_dir, os.listdir(temp_extract_dir)[0]) |
|
shutil.move(extracted_folder, extract_dir) |
|
shutil.rmtree(temp_extract_dir) |
|
|
|
class Postprocessor: |
|
def __init__(self): |
|
self.device = "cuda" if torch.cuda.is_available() else "cpu" |
|
self.tone_color_converter = ToneColorConverter('checkpoints_v2/converter/config.json', device=device) |
|
self.tone_color_converter.load_ckpt('checkpoints_v2/converter/checkpoint.pth') |
|
os.makedirs(output_dir, exist_ok=True) |
|
|
|
def convert_tone_color(self, reference_speaker, src_path="outputs/xtts.wav", save_path="outputs/openvoice.wav", base_speaker="outputs/xtts.wav"): |
|
source_se, audio_name = se_extractor.get_se(base_speaker, self.tone_color_converter, vad=True) |
|
target_se, audio_name = se_extractor.get_se(reference_speaker, self.tone_color_converter, vad=True) |
|
|
|
encode_message = "@MyShell" |
|
|
|
self.tone_color_converter.convert( |
|
audio_src_path=src_path, |
|
src_se=source_se, |
|
tgt_se=target_se, |
|
output_path=save_path, |
|
message=encode_message) |
|
|
|
if __name__ == "__main__": |
|
postprocessor = Postprocessor() |
|
postprocessor.convert_tone_color(reference_speaker="outputs/xtts.wav") |
|
print("Done!") |
|
|