mirror of
https://github.com/xinnan-tech/xiaozhi-esp32-server.git
synced 2026-07-28 01:53:53 +08:00
Merge pull request #737 from HiCoderMonkey/tts-response
Tts response 双向流tts,fix 播放音乐
This commit is contained in:
@@ -622,6 +622,10 @@ class ConnectionHandler:
|
|||||||
self.recode_first_last_text(text, text_index)
|
self.recode_first_last_text(text, text_index)
|
||||||
self.tts.tts_one_sentence(self, text)
|
self.tts.tts_one_sentence(self, text)
|
||||||
self.dialogue.put(Message(role="assistant", content=text))
|
self.dialogue.put(Message(role="assistant", content=text))
|
||||||
|
elif result.action == Action.NONE:
|
||||||
|
# 啥也不干
|
||||||
|
text = result.result
|
||||||
|
self.dialogue.put(Message(role="assistant", content=text))
|
||||||
else:
|
else:
|
||||||
text = result.result
|
text = result.result
|
||||||
self.recode_first_last_text(text, text_index)
|
self.recode_first_last_text(text, text_index)
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ class TTSProviderBase(ABC):
|
|||||||
",",
|
",",
|
||||||
)
|
)
|
||||||
self.tts_request = False
|
self.tts_request = False
|
||||||
|
self.tts_stop_request = False
|
||||||
self.processed_chars = 0
|
self.processed_chars = 0
|
||||||
self.stream = False
|
self.stream = False
|
||||||
self.last_to_opus_raw = b""
|
self.last_to_opus_raw = b""
|
||||||
@@ -93,6 +94,9 @@ class TTSProviderBase(ABC):
|
|||||||
)
|
)
|
||||||
self.processed_chars += len(segment_text_raw) # 更新已处理字符位置
|
self.processed_chars += len(segment_text_raw) # 更新已处理字符位置
|
||||||
return segment_text
|
return segment_text
|
||||||
|
elif self.tts_stop_request and current_text:
|
||||||
|
segment_text = current_text
|
||||||
|
return segment_text
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@@ -115,8 +119,11 @@ class TTSProviderBase(ABC):
|
|||||||
|
|
||||||
def tts_one_sentence(self, conn, text, u_id=None):
|
def tts_one_sentence(self, conn, text, u_id=None):
|
||||||
if not u_id:
|
if not u_id:
|
||||||
u_id = str(uuid.uuid4()).replace("-", "")
|
if conn.u_id:
|
||||||
conn.u_id = u_id
|
u_id = conn.u_id
|
||||||
|
else:
|
||||||
|
u_id = str(uuid.uuid4()).replace("-", "")
|
||||||
|
conn.u_id = u_id
|
||||||
self.tts_text_queue.put(
|
self.tts_text_queue.put(
|
||||||
TTSMessageDTO(u_id=u_id, msg_type=MsgType.START_TTS_REQUEST, content="")
|
TTSMessageDTO(u_id=u_id, msg_type=MsgType.START_TTS_REQUEST, content="")
|
||||||
)
|
)
|
||||||
@@ -135,6 +142,7 @@ class TTSProviderBase(ABC):
|
|||||||
if msg_type == MsgType.START_TTS_REQUEST:
|
if msg_type == MsgType.START_TTS_REQUEST:
|
||||||
# 开始传输tts文本
|
# 开始传输tts文本
|
||||||
self.tts_request = True
|
self.tts_request = True
|
||||||
|
self.tts_stop_request = False
|
||||||
self.u_id = ttsMessageDTO.u_id
|
self.u_id = ttsMessageDTO.u_id
|
||||||
# 开启session
|
# 开启session
|
||||||
future = asyncio.run_coroutine_threadsafe(
|
future = asyncio.run_coroutine_threadsafe(
|
||||||
@@ -152,6 +160,7 @@ class TTSProviderBase(ABC):
|
|||||||
future.result()
|
future.result()
|
||||||
elif msg_type == MsgType.STOP_TTS_REQUEST:
|
elif msg_type == MsgType.STOP_TTS_REQUEST:
|
||||||
self.tts_request = False
|
self.tts_request = False
|
||||||
|
self.tts_stop_request = True
|
||||||
future = asyncio.run_coroutine_threadsafe(
|
future = asyncio.run_coroutine_threadsafe(
|
||||||
self.finish_session(ttsMessageDTO.u_id), loop=self.loop
|
self.finish_session(ttsMessageDTO.u_id), loop=self.loop
|
||||||
)
|
)
|
||||||
@@ -183,6 +192,7 @@ class TTSProviderBase(ABC):
|
|||||||
if msg_type == MsgType.START_TTS_REQUEST:
|
if msg_type == MsgType.START_TTS_REQUEST:
|
||||||
# 开始传输tts文本
|
# 开始传输tts文本
|
||||||
self.tts_request = True
|
self.tts_request = True
|
||||||
|
self.tts_stop_request = False
|
||||||
self.processed_chars = 0
|
self.processed_chars = 0
|
||||||
self.tts_text_buff = []
|
self.tts_text_buff = []
|
||||||
elif self.tts_request and msg_type == MsgType.TTS_TEXT_REQUEST:
|
elif self.tts_request and msg_type == MsgType.TTS_TEXT_REQUEST:
|
||||||
@@ -190,6 +200,7 @@ class TTSProviderBase(ABC):
|
|||||||
elif msg_type == MsgType.STOP_TTS_REQUEST:
|
elif msg_type == MsgType.STOP_TTS_REQUEST:
|
||||||
# 结束传输tts文本,处理最尾巴的数据
|
# 结束传输tts文本,处理最尾巴的数据
|
||||||
self.tts_request = False
|
self.tts_request = False
|
||||||
|
self.tts_stop_request = True
|
||||||
segment_text = self._get_segment_text()
|
segment_text = self._get_segment_text()
|
||||||
if segment_text:
|
if segment_text:
|
||||||
# 修改部分:创建协程对象
|
# 修改部分:创建协程对象
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ def play_music(conn, song_name: str):
|
|||||||
future.add_done_callback(handle_done)
|
future.add_done_callback(handle_done)
|
||||||
|
|
||||||
return ActionResponse(
|
return ActionResponse(
|
||||||
action=Action.RESPONSE, result="指令已接收", response="正在为您播放音乐"
|
action=Action.NONE, result="指令已接收", response="正在为您播放音乐"
|
||||||
)
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.bind(tag=TAG).error(f"处理音乐意图错误: {e}")
|
logger.bind(tag=TAG).error(f"处理音乐意图错误: {e}")
|
||||||
|
|||||||
Reference in New Issue
Block a user