diff --git a/AI/WxMini/Start.py b/AI/WxMini/Start.py index 22e1769d..cb78bc81 100644 --- a/AI/WxMini/Start.py +++ b/AI/WxMini/Start.py @@ -149,7 +149,8 @@ async def reply(session_id: str = Form(...), prompt: str = Form(...)): # 生成 TTS 音频数据(不落盘) t = TTS(None) # 传入 None 表示不保存到本地文件 - audio_data = await asyncio.to_thread(t.generate_audio, result) # 假设 TTS 类有一个 generate_audio 方法返回音频数据 + audio_data, duration = await asyncio.to_thread(t.generate_audio, result) # 假设 TTS 类有一个 generate_audio 方法返回音频数据 + print(f"音频时长: {duration} 秒") # 将音频数据直接上传到 OSS await asyncio.to_thread(upload_mp3_to_oss_from_memory, tts_file, audio_data) @@ -159,7 +160,7 @@ async def reply(session_id: str = Form(...), prompt: str = Form(...)): url = 'https://ylt.oss-cn-hangzhou.aliyuncs.com/' + tts_file # 记录聊天数据到 MySQL - await save_chat_to_mysql(app.state.mysql_pool, session_id, prompt, result,url) + await save_chat_to_mysql(app.state.mysql_pool, session_id, prompt, result,url,duration) logger.info("用户输入和大模型反馈已记录到 MySQL 数据库。") return { diff --git a/AI/WxMini/Utils/MySQLUtil.py b/AI/WxMini/Utils/MySQLUtil.py index 157ecc71..a8b0028b 100644 --- a/AI/WxMini/Utils/MySQLUtil.py +++ b/AI/WxMini/Utils/MySQLUtil.py @@ -25,12 +25,12 @@ async def init_mysql_pool(): # 保存聊天记录到 MySQL -async def save_chat_to_mysql(mysql_pool, session_id, prompt, result,audio_url): +async def save_chat_to_mysql(mysql_pool, session_id, prompt, result,audio_url,duration): async with mysql_pool.acquire() as conn: async with conn.cursor() as cur: await cur.execute( - "INSERT INTO t_chat_log (session_id, user_input, model_response,audio_url, create_time) VALUES (%s, %s, %s, %s, NOW())", - (session_id, prompt, result,audio_url) + "INSERT INTO t_chat_log (session_id, user_input, model_response,audio_url,duration,create_time) VALUES (%s, %s, %s, %s, %s,NOW())", + (session_id, prompt, result,audio_url,duration) ) await conn.commit() logger.info("用户输入和大模型反馈已记录到 MySQL 数据库。") diff --git a/AI/WxMini/Utils/TtsUtil.py b/AI/WxMini/Utils/TtsUtil.py index 9624a0c6..b766e59f 100644 --- a/AI/WxMini/Utils/TtsUtil.py +++ b/AI/WxMini/Utils/TtsUtil.py @@ -1,7 +1,8 @@ -# -*- coding: utf-8 -*- import nls from WxMini.Utils.TokenUtil import * from WxMini.Milvus.Config.MulvusConfig import * +from pydub import AudioSegment +import io URL = "wss://nls-gateway-cn-shanghai.aliyuncs.com/ws/v1" @@ -34,7 +35,9 @@ class TTS: def generate_audio(self, text): """ - 生成 TTS 并返回音频数据(不保存到文件) + 生成 TTS 并返回音频数据和时长 + :param text: 要生成音频的文本 + :return: 音频数据(bytes)和时长(秒) """ self._text = text self._audio_data = bytearray() # 重置音频数据 @@ -50,7 +53,13 @@ class TTS: # 同步执行 TTS 生成 tts.start(self._text, voice="xiaobei", aformat="mp3") - return bytes(self._audio_data) # 返回生成的音频数据 + audio_bytes = bytes(self._audio_data) # 获取生成的音频数据 + + # 计算音频时长 + audio = AudioSegment.from_file(io.BytesIO(audio_bytes), format="mp3") + duration = len(audio) / 1000 # 转换为秒 + + return audio_bytes, duration # 返回音频数据和时长 def on_close(self, *args): """ diff --git a/AI/WxMini/Utils/__pycache__/MySQLUtil.cpython-310.pyc b/AI/WxMini/Utils/__pycache__/MySQLUtil.cpython-310.pyc index 8ec19b77..98649a68 100644 Binary files a/AI/WxMini/Utils/__pycache__/MySQLUtil.cpython-310.pyc and b/AI/WxMini/Utils/__pycache__/MySQLUtil.cpython-310.pyc differ diff --git a/AI/WxMini/Utils/__pycache__/TtsUtil.cpython-310.pyc b/AI/WxMini/Utils/__pycache__/TtsUtil.cpython-310.pyc index 16093273..1226d2da 100644 Binary files a/AI/WxMini/Utils/__pycache__/TtsUtil.cpython-310.pyc and b/AI/WxMini/Utils/__pycache__/TtsUtil.cpython-310.pyc differ diff --git a/AI/WxMini/__pycache__/Start.cpython-310.pyc b/AI/WxMini/__pycache__/Start.cpython-310.pyc index 5f4411ab..fbbaaf2e 100644 Binary files a/AI/WxMini/__pycache__/Start.cpython-310.pyc and b/AI/WxMini/__pycache__/Start.cpython-310.pyc differ