tts 失败重试bug修复

This commit is contained in:
XL
2025-05-06 14:19:05 +08:00
parent 9fc1285c09
commit 59ef51ea20
8 changed files with 58 additions and 40 deletions
@@ -38,9 +38,13 @@ class TTSProvider(TTSProviderBase):
"Authorization": f"Bearer {self.access_token}", "Authorization": f"Bearer {self.access_token}",
"Content-Type": "application/json", "Content-Type": "application/json",
} }
response = requests.request(
"POST", self.api_url, json=request_json, headers=headers try:
) response = requests.request(
data = response.content "POST", self.api_url, json=request_json, headers=headers
file_to_save = open(output_file, "wb") )
file_to_save.write(data) data = response.content
file_to_save = open(output_file, "wb")
file_to_save.write(data)
except Exception as e:
raise Exception(f"{__name__} error: {e}")
@@ -32,4 +32,6 @@ class TTSProvider(TTSProviderBase):
with open(output_file, "wb") as file: with open(output_file, "wb") as file:
file.write(resp.content) file.write(resp.content)
else: else:
logger.bind(tag=TAG).error(f"Custom TTS请求失败: {resp.status_code} - {resp.text}") error_msg = f"Custom TTS请求失败: {resp.status_code} - {resp.text}"
logger.bind(tag=TAG).error(error_msg)
raise Exception(error_msg) # 抛出异常,让调用方捕获
+14 -10
View File
@@ -20,14 +20,18 @@ class TTSProvider(TTSProviderBase):
) )
async def text_to_speak(self, text, output_file): async def text_to_speak(self, text, output_file):
communicate = edge_tts.Communicate(text, voice=self.voice) try:
# 确保目录存在并创建空文件 communicate = edge_tts.Communicate(text, voice=self.voice)
os.makedirs(os.path.dirname(output_file), exist_ok=True) # 确保目录存在并创建空文件
with open(output_file, "wb") as f: os.makedirs(os.path.dirname(output_file), exist_ok=True)
pass with open(output_file, "wb") as f:
pass
# 流式写入音频数据 # 流式写入音频数据
with open(output_file, "ab") as f: # 改为追加模式避免覆盖 with open(output_file, "ab") as f: # 改为追加模式避免覆盖
async for chunk in communicate.stream(): async for chunk in communicate.stream():
if chunk["type"] == "audio": # 只处理音频数据块 if chunk["type"] == "audio": # 只处理音频数据块
f.write(chunk["data"]) f.write(chunk["data"])
except Exception as e:
error_msg = f"Edge TTS请求失败: {e}"
raise Exception(error_msg) # 抛出异常,让调用方捕获
@@ -177,5 +177,7 @@ class TTSProvider(TTSProviderBase):
audio_file.write(audio_content) audio_file.write(audio_content)
else: else:
print(f"Request failed with status code {response.status_code}") error_msg = f"Request failed with status code {response.status_code}"
print(error_msg)
print(response.json()) print(response.json())
raise Exception(error_msg)
@@ -105,6 +105,6 @@ class TTSProvider(TTSProviderBase):
with open(output_file, "wb") as file: with open(output_file, "wb") as file:
file.write(resp.content) file.write(resp.content)
else: else:
logger.bind(tag=TAG).error( error_msg = f"GPT_SoVITS_V2 TTS请求失败: {resp.status_code} - {resp.text}"
f"GPT_SoVITS_V2 TTS请求失败: {resp.status_code} - {resp.text}" logger.bind(tag=TAG).error(error_msg)
) raise Exception(error_msg)
@@ -64,6 +64,7 @@ class TTSProvider(TTSProviderBase):
with open(output_file, "wb") as file: with open(output_file, "wb") as file:
file.write(resp.content) file.write(resp.content)
else: else:
logger.bind(tag=TAG).error( error_msg = f"GPT_SoVITS_V3 TTS请求失败: {resp.status_code} - {resp.text}"
f"GPT_SoVITS_V3 TTS请求失败: {resp.status_code} - {resp.text}" logger.bind(tag=TAG).error(error_msg)
) raise Exception(error_msg)
@@ -39,9 +39,12 @@ class TTSProvider(TTSProviderBase):
"Authorization": f"Bearer {self.access_token}", "Authorization": f"Bearer {self.access_token}",
"Content-Type": "application/json", "Content-Type": "application/json",
} }
response = requests.request( try:
"POST", self.api_url, json=request_json, headers=headers response = requests.request(
) "POST", self.api_url, json=request_json, headers=headers
data = response.content )
file_to_save = open(output_file, "wb") data = response.content
file_to_save.write(data) file_to_save = open(output_file, "wb")
file_to_save.write(data)
except Exception as e:
raise Exception(f"{__name__} error: {e}")
+12 -10
View File
@@ -58,8 +58,8 @@ class TTSProvider(TTSProviderBase):
resp = requests.request("POST", url, data=payload) resp = requests.request("POST", url, data=payload)
if resp.status_code != 200: if resp.status_code != 200:
logger.bind(tag=TAG).error(f"TTS请求失败: {resp.text}") logger.bind(tag=TAG).error(f"TTSON 请求失败: {resp.text}")
return None raise Exception(f"{__name__}: TTS请求失败")
resp_json = resp.json() resp_json = resp.json()
try: try:
result = ( result = (
@@ -71,13 +71,15 @@ class TTSProvider(TTSProviderBase):
+ "&voice_audio_path=" + "&voice_audio_path="
+ resp_json["voice_path"] + resp_json["voice_path"]
) )
audio_content = requests.get(result)
with open(output_file, "wb") as f:
f.write(audio_content.content)
return True
voice_path = resp_json.get("voice_path")
des_path = output_file
shutil.move(voice_path, des_path)
except Exception as e: except Exception as e:
print("error:", e) print("error:", e)
raise Exception(f"{__name__}: TTS请求失败")
audio_content = requests.get(result)
with open(output_file, "wb") as f:
f.write(audio_content.content)
return True
voice_path = resp_json.get("voice_path")
des_path = output_file
shutil.move(voice_path, des_path)