Linly-Talker / api /tts_client.py
weismart1807's picture
Upload folder using huggingface_hub
e90b704 verified
import os
import requests
tts_service_host = os.environ.get("TTS_SERVICE_HOST", "localhost")
tts_service_port = os.environ.get("TTS_SERVICE_PORT", 8001)
# API endpoint URLs
CHANGE_MODEL_URL = f"http://{tts_service_host}:{tts_service_port}/tts_change_model/"
TTS_RESPONSE_URL = f"http://{tts_service_host}:{tts_service_port}/tts_response/"
def change_model(model_name):
"""请求更换TTS模型"""
response = requests.post(CHANGE_MODEL_URL, params={"model_name": model_name})
if response.status_code == 200:
print(f"模型更换成功: {response.json()}")
else:
print(f"模型更换失败: {response.status_code}, {response.text}")
def request_tts(payload, ref_audio_path=None, output_wav_path='output_tts.wav'):
"""请求TTS生成音频,支持上传文件"""
files = {}
if ref_audio_path:
files['ref_audio'] = open(ref_audio_path, 'rb')
try:
response = requests.post(TTS_RESPONSE_URL, data=payload, files=files)
response.raise_for_status() # Raise an exception for HTTP errors
with open(output_wav_path, 'wb') as wav_file:
wav_file.write(response.content)
print(f"TTS生成成功, 音频保存为: {output_wav_path}")
except requests.RequestException as e:
print(f"TTS生成失败: {e}")
if __name__ == "__main__":
result_dir = "outputs"
os.makedirs(result_dir, exist_ok=True)
# 要测试的模型列表
models = [
"EdgeTTS",
"PaddleTTS",
]
# 循环更换模型并生成TTS
for model_name in models:
print(f"切换到模型: {model_name}")
change_model(model_name)
# 请求TTS生成音频
text = "你好,我是Linly-Talker,很高兴认识大家"
payload = {
"text": text,
"tts_method": model_name,
"save_path": f"output_{model_name}.wav"
}
output_wav_path = os.path.join(result_dir, f"output_{model_name}.wav")
request_tts(payload, output_wav_path=output_wav_path)
print("\n" + "-" * 50 + "\n")
# 测试 GPT-SoVITS
model_name = "GPT-SoVITS克隆声音"
print(f"切换到模型: {model_name}")
change_model(model_name)
# 请求TTS生成音频
payload = {
"text": "你好,我是Linly-Talker,很高兴认识大家",
"tts_method": model_name,
"prompt_text": "你好,我是Linly-Talker,我是克隆生成的",
"ref_text": "你好,我是Linly-Talker。",
"prompt_language": "中文",
"ref_language": "中文",
"save_path": f"output_{model_name}.wav"
}
ref_audio_path = os.path.join(result_dir, "output_EdgeTTS.wav")
output_wav_path = os.path.join(result_dir, "output_GPT_SoVITS.wav")
request_tts(payload, ref_audio_path=ref_audio_path, output_wav_path=output_wav_path)
print("\n" + "-" * 50 + "\n")
# 测试 CosyVoice
cosyvoice_models = [
"CosyVoice-SFT模式",
"CosyVoice-克隆翻译模式"
]
for cosy_model in cosyvoice_models:
print(f"切换到模型: {cosy_model}")
change_model(cosy_model)
# 请求TTS生成音频
payload = {
"text": "你们好,今天天气很好,你们都要天天开心哦",
"tts_method": cosy_model,
"cosyvoice_mode": "预训练音色" if "SFT模式" in cosy_model else "3s极速复刻",
"ref_text": "你好,我是Linly-Talker,很高兴认识大家",
}
ref_audio_path = os.path.join(result_dir, "output_EdgeTTS.wav") if "克隆翻译模式" in cosy_model else None
output_wav_path = os.path.join(result_dir, f"output_{cosy_model}.wav")
request_tts(payload, ref_audio_path=ref_audio_path, output_wav_path=output_wav_path)
print("\n" + "-" * 50 + "\n")