human/tts/tts_base.py

79 lines
2.0 KiB
Python
Raw Normal View History

2024-10-10 11:01:13 +00:00
#encoding = utf8
import logging
import time
2024-11-07 12:43:46 +00:00
from eventbus import EventBus
2024-10-10 11:01:13 +00:00
from nlp import NLPCallback
from utils import AsyncTaskQueue
logger = logging.getLogger(__name__)
class TTSBase(NLPCallback):
2024-10-11 12:09:54 +00:00
def __init__(self, handle):
self._handle = handle
2024-11-07 00:26:03 +00:00
self._message_queue = AsyncTaskQueue('TTSBaseQueue', 5)
2024-11-07 12:43:46 +00:00
self._is_running = True
EventBus().register('stop', self.on_stop)
def __del__(self):
EventBus().unregister('stop', self.on_stop)
def on_stop(self, *args, **kwargs):
self.stop()
2024-10-10 11:01:13 +00:00
2024-10-11 12:09:54 +00:00
@property
def handle(self):
return self._handle
@handle.setter
def handle(self, value):
self._handle = value
2024-10-14 10:20:55 +00:00
async def _request(self, txt: str, index):
2024-10-10 11:01:13 +00:00
print('_request:', txt)
t = time.time()
2024-10-14 10:20:55 +00:00
stream = await self._on_request(txt)
if stream is None:
print(f'-------stream is None')
return
2024-10-10 11:01:13 +00:00
print(f'-------tts time:{time.time() - t:.4f}s')
2024-11-05 14:06:02 +00:00
if self._handle is not None and self._is_running:
await self._on_handle(stream, index)
else:
logger.info(f'handle is None, running:{self._is_running}')
2024-10-10 11:01:13 +00:00
async def _on_request(self, text: str):
pass
2024-10-14 10:20:55 +00:00
async def _on_handle(self, stream, index):
pass
async def _on_close(self):
2024-10-10 11:01:13 +00:00
pass
def on_message(self, txt: str):
self.message(txt)
def message(self, txt):
2024-10-18 00:15:48 +00:00
txt = txt.strip()
if len(txt) == 0:
logger.info(f'message is empty')
return
2024-10-10 11:01:13 +00:00
logger.info(f'message:{txt}')
2024-10-14 10:20:55 +00:00
index = 0
if self._handle is not None:
index = self._handle.get_index()
2024-10-18 00:15:48 +00:00
print(f'message txt-index:{txt}, index {index}')
2024-10-14 10:20:55 +00:00
self._message_queue.add_task(self._request, txt, index)
2024-10-10 11:01:13 +00:00
def stop(self):
2024-11-07 12:43:46 +00:00
self._is_running = False
2024-10-14 10:20:55 +00:00
self._message_queue.add_task(self._on_close)
2024-10-10 11:01:13 +00:00
self._message_queue.stop()
2024-10-19 10:47:34 +00:00
def pause_talk(self):
2024-11-05 14:06:02 +00:00
logger.info(f'TTSBase pause_talk')
2024-10-19 10:47:34 +00:00
self._message_queue.clear()