72 lines
2.6 KiB
Python
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)
|