Files
auto_agent/llm_server/test_tts.py
T
2026-05-16 18:55:44 +08:00

72 lines
2.6 KiB
Python

import requests
import argparse
import os
import time
# 默认服务地址
BASE_URL = "http://127.0.0.1:8000"
def test_health():
"""检查服务是否在线"""
resp = requests.get(f"{BASE_URL}/health")
print(f"Health check: {resp.status_code} {resp.json()}")
def test_tts(text, speaker=None, speed=1.0, output="output.wav"):
"""
调用 TTS 接口并保存音频文件
"""
params = {"text": text, "speed": speed}
if speaker:
params["speaker"] = speaker
print(f"Requesting TTS...")
start = time.time()
resp = requests.get(f"{BASE_URL}/tts", params=params)
elapsed = time.time() - start
if resp.status_code == 200:
with open(output, "wb") as f:
f.write(resp.content)
print(f"Saved audio to: {output}")
print(f"Audio size: {os.path.getsize(output)} bytes")
print(f"Time taken: {elapsed:.2f}s")
else:
print(f"Error {resp.status_code}: {resp.text}")
def test_speakers():
"""尝试获取可用说话人列表(通过 health 端点里可能不返回,这里直接尝试几个常见说话人)"""
# MeloTTS 中文常见说话人: ZH, ZH_CN, ZH_TW 等,我们可以列出文档或手动尝试
test_speakers = ["ZH", "ZH_CN", "ZH_TW", "EN", "JP"]
print("Testing available speakers...")
for spk in test_speakers:
params = {"text": "测试", "speaker": spk}
resp = requests.get(f"{BASE_URL}/tts", params=params)
if resp.status_code == 200:
print(f" {spk}: OK")
else:
print(f" {spk}: {resp.text[:50]}")
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Test MeloTTS API server")
parser.add_argument("--url", default=BASE_URL, help="Server base URL")
parser.add_argument("--text", default="你好,这是一个语音合成测试。", help="Text to synthesize")
parser.add_argument("--speaker", default=None, help="Speaker ID (e.g., ZH)")
parser.add_argument("--speed", type=float, default=1.0, help="Speaking speed")
parser.add_argument("--output", default="test_output.wav", help="Output WAV filename")
parser.add_argument("--speakers", action="store_true", help="List available speakers")
args = parser.parse_args()
BASE_URL = args.url
# 先检查服务可用性
try:
test_health()
except requests.ConnectionError:
print(f"Cannot connect to server at {BASE_URL}. Make sure the FastAPI app is running.")
exit(1)
if args.speakers:
test_speakers()
else:
test_tts(args.text, args.speaker, args.speed, args.output)