|
import argparse |
|
import os |
|
import soundfile as sf |
|
|
|
from tools.i18n.i18n import I18nAuto |
|
from GPT_SoVITS.inference_webui import change_gpt_weights, change_sovits_weights, get_tts_wav |
|
|
|
i18n = I18nAuto() |
|
|
|
|
|
def synthesize( |
|
GPT_model_path, |
|
SoVITS_model_path, |
|
ref_audio_path, |
|
ref_text_path, |
|
ref_language, |
|
target_text_path, |
|
target_language, |
|
output_path, |
|
): |
|
|
|
with open(ref_text_path, "r", encoding="utf-8") as file: |
|
ref_text = file.read() |
|
|
|
|
|
with open(target_text_path, "r", encoding="utf-8") as file: |
|
target_text = file.read() |
|
|
|
|
|
change_gpt_weights(gpt_path=GPT_model_path) |
|
change_sovits_weights(sovits_path=SoVITS_model_path) |
|
|
|
|
|
synthesis_result = get_tts_wav( |
|
ref_wav_path=ref_audio_path, |
|
prompt_text=ref_text, |
|
prompt_language=i18n(ref_language), |
|
text=target_text, |
|
text_language=i18n(target_language), |
|
top_p=1, |
|
temperature=1, |
|
) |
|
|
|
result_list = list(synthesis_result) |
|
|
|
if result_list: |
|
last_sampling_rate, last_audio_data = result_list[-1] |
|
output_wav_path = os.path.join(output_path, "output.wav") |
|
sf.write(output_wav_path, last_audio_data, last_sampling_rate) |
|
print(f"Audio saved to {output_wav_path}") |
|
|
|
|
|
def main(): |
|
parser = argparse.ArgumentParser(description="GPT-SoVITS Command Line Tool") |
|
parser.add_argument("--gpt_model", required=True, help="Path to the GPT model file") |
|
parser.add_argument("--sovits_model", required=True, help="Path to the SoVITS model file") |
|
parser.add_argument("--ref_audio", required=True, help="Path to the reference audio file") |
|
parser.add_argument("--ref_text", required=True, help="Path to the reference text file") |
|
parser.add_argument( |
|
"--ref_language", required=True, choices=["中文", "英文", "日文"], help="Language of the reference audio" |
|
) |
|
parser.add_argument("--target_text", required=True, help="Path to the target text file") |
|
parser.add_argument( |
|
"--target_language", |
|
required=True, |
|
choices=["中文", "英文", "日文", "中英混合", "日英混合", "多语种混合"], |
|
help="Language of the target text", |
|
) |
|
parser.add_argument("--output_path", required=True, help="Path to the output directory") |
|
|
|
args = parser.parse_args() |
|
|
|
synthesize( |
|
args.gpt_model, |
|
args.sovits_model, |
|
args.ref_audio, |
|
args.ref_text, |
|
args.ref_language, |
|
args.target_text, |
|
args.target_language, |
|
args.output_path, |
|
) |
|
|
|
|
|
if __name__ == "__main__": |
|
main() |
|
|