🩹fix: 修改添加logger函数,添加speed_ratio选项,为一些选项添加description

This commit is contained in:
YOO_koishi
2025-05-19 16:16:25 +08:00
parent 0002e49bb5
commit bf306a2f01
2 changed files with 37 additions and 23 deletions
+23 -2
View File
@@ -848,13 +848,34 @@ CONFIG_METADATA_2 = {
"enable": False,
"api_key": "",
"appid": "",
"cluster": "",
"voice_type": "",
"volcengine_cluster": "",
"volcengine_voice_type": "",
"volcengine_speed_ratio": 1.0,
"api_base": "https://openspeech.bytedance.com/api/v1/tts",
"timeout": 20,
},
},
"items": {
"volcengine_cluster": {
"type": "string",
"description": "火山引擎集群",
"hint": "可选volcano_icl或volcano_icl_concurr"
},
"volcengine_voice_type": {
"type": "string",
"description": "火山引擎音色",
"hint": "输入S_开头的声音id(SpeakerId)"
},
"volcengine_speed_ratio": {
"type": "float",
"description": "语速设置",
"hint": "语速设置,范围为 0.2 到 3.0,默认值为 1.0"
},
"volcengine_volume_ratio": {
"type": "float",
"description": "音量设置",
"hint": "音量设置,范围为 0.0 到 2.0,默认值为 1.0"
},
"azure_tts_voice": {
"type": "string",
"description": "音色设置",
+14 -21
View File
@@ -9,6 +9,7 @@ import requests
from ..provider import TTSProvider
from ..entities import ProviderType
from ..register import register_provider_adapter
from astrbot import logger
@register_provider_adapter(
"volcengine_tts", "火山引擎 TTS", provider_type=ProviderType.TEXT_TO_SPEECH
@@ -18,12 +19,10 @@ class ProviderVolcengineTTS(TTSProvider):
super().__init__(provider_config, provider_settings)
self.api_key = provider_config.get("api_key", "")
self.appid = provider_config.get("appid", "")
self.cluster = provider_config.get("cluster", "")
self.voice_type = provider_config.get("voice_type", "xiaoyun")
host = "openspeech.bytedance.com"
self.api_base = provider_config.get("api_base", f"https://{host}/api/v1/tts")
self.cluster = provider_config.get("volcengine_cluster", "")
self.voice_type = provider_config.get("volcengine_voice_type", "")
self.speed_ratio = provider_config.get("volcengine_speed_ratio", 1.0)
self.api_base = provider_config.get("api_base", f"https://openspeech.bytedance.com/api/v1/tts")
self.timeout = provider_config.get("timeout", 20)
def _build_request_payload(self, text: str) -> dict:
@@ -39,7 +38,7 @@ class ProviderVolcengineTTS(TTSProvider):
"audio": {
"voice_type": self.voice_type,
"encoding": "mp3",
"speed_ratio": 1.0,
"speed_ratio": self.speed_ratio,
"volume_ratio": 1.0,
"pitch_ratio": 1.0,
},
@@ -57,30 +56,27 @@ class ProviderVolcengineTTS(TTSProvider):
"""异步方法获取语音文件路径"""
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer;{self.api_key}"
"Authorization": f"Bearer; {self.api_key}"
}
payload = self._build_request_payload(text)
# 打印请求信息以便调试
print(f"请求 URL: {self.api_base}")
print(f"请求: {headers}")
print(f"请求体: {json.dumps(payload, ensure_ascii=False)[:100]}...")
logger.info(f"请求头: {headers}")
logger.info(f"请求 URL: {self.api_base}")
logger.info(f"请求: {json.dumps(payload, ensure_ascii=False)[:100]}...")
try:
# 使用 aiohttp 进行异步请求
async with aiohttp.ClientSession() as session:
async with session.post(
self.api_base,
data=json.dumps(payload), # 使用 data 而不是 json 参数
data=json.dumps(payload),
headers=headers,
timeout=self.timeout
) as response:
print(f"响应状态码: {response.status}")
logger.info(f"响应状态码: {response.status}")
# 获取响应内容
response_text = await response.text()
print(f"响应内容: {response_text[:200]}...")
logger.info(f"响应内容: {response_text[:200]}...")
if response.status == 200:
resp_data = json.loads(response_text)
@@ -88,12 +84,10 @@ class ProviderVolcengineTTS(TTSProvider):
if "data" in resp_data:
audio_data = base64.b64decode(resp_data["data"])
# 确保目录存在
os.makedirs("data/temp", exist_ok=True)
file_path = f"data/temp/volcengine_tts_{uuid.uuid4()}.mp3"
# 使用线程运行I/O操作,避免阻塞
loop = asyncio.get_running_loop()
await loop.run_in_executor(
None,
@@ -108,7 +102,6 @@ class ProviderVolcengineTTS(TTSProvider):
raise Exception(f"火山引擎 TTS API 请求失败: {response.status}, {response_text}")
except Exception as e:
# 添加更详细的异常捕获
error_details = traceback.format_exc()
print(f"火山引擎 TTS 异常详情: {error_details}")
logger.info(f"火山引擎 TTS 异常详情: {error_details}")
raise Exception(f"火山引擎 TTS 异常: {str(e)}")