gpt-sovits测试语音克隆

写个测试程序,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()
相关推荐
星辰AI1 小时前
Transformers 架构核心原理:从注意力机制到 GPT
人工智能·ai·语言模型
沪漂阿龙1 小时前
Hermes Agent Sessions 架构详解:AI 如何跨平台延续任务、找回历史、持续推进工作
人工智能·架构
500841 小时前
昇腾 CANN 的五层架构,到底分了哪五层
java·人工智能·分布式·架构·ocr·wpf
阿里云大数据AI技术1 小时前
让 AI 帮你运维 Elasticsearch:阿里云 ES Agent Skill 正式发布
人工智能·agent
虫无涯2 小时前
从零搞懂大模型:定义、起源、计量单位与完整分类|入门必看干货
人工智能
天地沧海2 小时前
langchain 与 langgraph
人工智能
stsdddd2 小时前
YOLO系列目标检测数据集大全【第二期】
人工智能·yolo·目标检测
我爱cope2 小时前
【Agent智能体4 | 智能体AI的应用】
数据库·人工智能·职场和发展
song5012 小时前
Ascend C 算子开发:从入门到上手
c语言·开发语言·图像处理·人工智能·分布式·flutter·交互