写个测试程序,ref_10s.wav 作为参考音频,ref_10s.txt 作为参考文本,1.txt 作为待合成文本,进行合成,合成后的音频文件放到\gpt-sovits\media 这个免费云服务器文件夹下
现在我了解了三丰云项目结构。根据项目中的 batch_synthesize.py ,它使用预训练模型进行合成。让我为您编写一个简单的测试程序:
python
import os
import sys
os.environ["gpt_path"] = r"E:\ai\python\gpt-sovits\models\AIDub\GPT-SoVITS\GPT_SoVITS\pretrained_models\s1v3.ckpt"
os.environ["sovits_path"] = r"E:\ai\python\gpt-sovits\models\AIDub\GPT-SoVITS\GPT_SoVITS\pretrained_models\sv\pretrained_eres2netv2w24s4ep4.ckpt"
os.environ["version"] = "v2"
sys.path.insert(0, r"E:\ai\python\gpt-sovits\models\AIDub\GPT-SoVITS")
print("开始导入模块...", flush=True)
from GPT_SoVITS.inference_webui import change_gpt_weights, change_sovits_weights, get_tts_wav
import GPT_SoVITS.inference_webui as inference_webui
from tools.i18n.i18n import I18nAuto
import soundfile as sf
print("模块导入完成", flush=True)
print(f"hps 是否已定义: {hasattr(inference_webui, 'hps')}", flush=True)
print(f"vq_model 是否已定义: {hasattr(inference_webui, 'vq_model')}", flush=True)
i18n = I18nAuto()
GPT_MODEL = os.environ["gpt_path"]
SOVITS_MODEL = os.environ["sovits_path"]
REF_AUDIO = r"E:\ai\python\gpt-sovits\media\5月27日_ref_10s.wav"
REF_TEXT = r"E:\ai\python\gpt-sovits\media\5月27日_ref_10s.txt"
TARGET_TEXT = r"E:\ai\python\gpt-sovits\media\1.txt"
OUTPUT_DIR = r"E:\ai\python\gpt-sovits\media"
def synthesize():
print("=" * 50)
print("GPT-SoVITS 语音合成测试")
print("=" * 50)
if not os.path.exists(REF_AUDIO):
print(f"错误: 参考音频文件不存在: {REF_AUDIO}")
return
if not os.path.exists(REF_TEXT):
print(f"错误: 参考文本文件不存在: {REF_TEXT}")
return
if not os.path.exists(TARGET_TEXT):
print(f"错误: 待合成文本文件不存在: {TARGET_TEXT}")
return
if not os.path.exists(OUTPUT_DIR):
os.makedirs(OUTPUT_DIR)
print(f"\n参考音频: {REF_AUDIO}")
print(f"参考文本: {REF_TEXT}")
print(f"待合成文本: {TARGET_TEXT}")
print(f"输出目录: {OUTPUT_DIR}")
with open(REF_TEXT, "r", encoding="utf-8") as f:
ref_text = f.read().strip()
print(f"\n参考文本内容: {ref_text}")
with open(TARGET_TEXT, "r", encoding="utf-8") as f:
target_text = f.read().strip()
print(f"待合成文本内容: {target_text}")
print("\n加载模型...", flush=True)
print(f"GPT模型: {GPT_MODEL}", flush=True)
print(f"SoVITS模型: {SOVITS_MODEL}", flush=True)
change_gpt_weights(gpt_path=GPT_MODEL)
print("GPT模型加载完成", flush=True)
try:
gen = change_sovits_weights(sovits_path=SOVITS_MODEL)
next(gen)
next(gen)
print("SoVITS模型加载完成", flush=True)
except StopIteration:
print("SoVITS模型加载完成(生成器已结束)", flush=True)
except Exception as e:
print(f"加载SoVITS模型时出现警告: {e}", flush=True)
import traceback
traceback.print_exc()
print(f"hps 是否已定义: {hasattr(inference_webui, 'hps')}", flush=True)
print("开始合成...")
synthesis_result = get_tts_wav(
ref_wav_path=REF_AUDIO,
prompt_text=ref_text,
prompt_language=i18n("中文"),
text=target_text,
text_language=i18n("中文"),
top_p=1,
temperature=1,
)
result_list = list(synthesis_result)
if result_list:
last_sampling_rate, last_audio_data = result_list[-1]
output_path = os.path.join(OUTPUT_DIR, "output.wav")
sf.write(output_path, last_audio_data, last_sampling_rate)
print(f"\n合成完成! 音频已保存到: {output_path}")
else:
print("\n合成失败,未生成音频")
if __name__ == "__main__":
synthesize()