Files
Podcast-Generator/server/check/check_fishaudio_voices.py
hex2077 2d94f98de7 refactor: 更新配置文件路径和依赖版本
将多个检查脚本中的tts_providers.json路径改为tts_providers-local.json
升级next和eslint-config-next到15.5.9版本
2026-01-06 23:58:44 +08:00

80 lines
3.1 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import json
import requests
import time
import msgpack
import json
def check_fishaudio_voices():
config_file_path = "../config/fish-audio.json"
tts_providers_path = "../config/tts_providers-local.json"
test_text = "你好" # 测试文本
try:
with open(config_file_path, 'r', encoding='utf-8') as f:
config_data = json.load(f)
except FileNotFoundError:
print(f"错误: 配置文件未找到,请检查路径: {config_file_path}")
return
except json.JSONDecodeError:
print(f"错误: 无法解析 JSON 文件: {config_file_path}")
return
voices = config_data.get('voices', [])
request_payload = config_data.get('request_payload', {})
headers = config_data.get('headers', {})
url = config_data.get('apiUrl','')
try:
with open(tts_providers_path, 'r', encoding='utf-8') as f:
tts_providers_data = json.load(f)
fish_api_key = tts_providers_data.get('fish', {}).get('api_key')
if fish_api_key:
headers['Authorization'] = f"Bearer {fish_api_key}"
else:
print(f"警告: 未在 {tts_providers_path} 中找到 Fish Audio 的 API 密钥。")
except FileNotFoundError:
print(f"错误: TTS 提供商配置文件未找到,请检查路径: {tts_providers_path}")
return
except json.JSONDecodeError:
print(f"错误: 无法解析 TTS 提供商 JSON 文件: {tts_providers_path}")
return
if not voices:
print("未在配置文件中找到任何声音voices")
return
print(f"开始验证 {len(voices)} 个 Fish Audio 语音...")
for voice in voices:
voice_code = voice.get('code')
voice_name = voice.get('alias', voice.get('name', '未知')) # 优先使用 alias, 否则使用 name
if voice_code:
print(f"正在测试语音: {voice_name} (Code: {voice_code})")
try:
# 准备请求数据
payload = request_payload.copy()
payload['text'] = test_text
payload['reference_id'] = voice_code
# 编码请求数据
encoded_payload = msgpack.packb(payload)
# 发送请求
response = requests.post(url, data=encoded_payload, headers=headers, timeout=30)
if response.status_code == 200:
print(f"{voice_name} (Code: {voice_code}): 可用")
with open(f"test_{voice_code}.mp3", "wb") as f:
f.write(response.content)
else:
print(f"{voice_name} (Code: {voice_code}): 不可用, 状态码: {response.status_code}")
except requests.exceptions.RequestException as e:
print(f"{voice_name} (Code: {voice_code}): 请求失败, 错误: {e}")
time.sleep(0.5) # 短暂延迟,避免请求过快
else:
print(f"跳过一个缺少 'code' 字段的语音条目: {voice}")
print("Fish Audio 语音验证完成。")
if __name__ == "__main__":
check_fishaudio_voices()