Spaces:
Sleeping
Sleeping
import gradio as gr | |
import torch | |
from pathlib import Path | |
import os | |
import sys | |
# 添加项目根目录到 Python 路径 | |
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | |
from src.deploy.voice_clone import VoiceCloneSystem | |
# 创建临时目录 | |
TEMP_DIR = Path("temp") | |
TEMP_DIR.mkdir(exist_ok=True) | |
# 初始化系统 | |
system = VoiceCloneSystem(device="cpu" if not torch.cuda.is_available() else "cuda") | |
def clone_voice(text: str, reference_audio) -> str: | |
""" | |
克隆语音的 Gradio 接口函数 | |
Args: | |
text: 要转换的文本 | |
reference_audio: 参考音频文件路径 | |
Returns: | |
生成的音频文件路径 | |
""" | |
try: | |
# 生成语音 | |
speech = system.clone_voice(text, [reference_audio]) | |
# 保存音频 | |
output_path = str(TEMP_DIR / "output.wav") | |
system.save_audio(speech, output_path) | |
return output_path | |
except Exception as e: | |
raise gr.Error(str(e)) | |
# 创建 Gradio 界面 | |
demo = gr.Interface( | |
fn=clone_voice, | |
inputs=[ | |
gr.Textbox( | |
label="输入文本", | |
placeholder="请输入要转换的文本...", | |
lines=3 | |
), | |
gr.Audio( | |
label="参考音频", | |
sources=["microphone", "upload"], | |
type="filepath" | |
) | |
], | |
outputs=gr.Audio(label="生成的语音"), | |
title="语音克隆系统", | |
description="录制或上传一段参考音频,输入文本,系统会生成具有相同声音特征的语音。支持中文和英文!", | |
article=""" | |
## 使用说明 | |
1. 点击录音按钮录制语音,或上传一段音频文件(5-10秒最佳) | |
2. 输入要转换的文本(支持中文和英文) | |
3. 点击提交,等待系统生成语音 | |
## 注意事项 | |
- 请在安静的环境下录音 | |
- 说话时保持适当距离和音量 | |
- 首次运行时需要下载模型,可能需要等待一段时间 | |
""", | |
examples=[ | |
["你好,这是一段测试文本。", None], | |
["Hello, this is a test message.", None], | |
] | |
) | |
# 启动应用 | |
if __name__ == "__main__": | |
demo.launch() |