main
HuangHai 4 months ago
parent 8b98169c40
commit 1f72404b89

@ -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 {

@ -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 数据库。")

@ -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):
"""

Loading…
Cancel
Save