human/tts/tts_base.py

65 lines
1.5 KiB
Python
Raw Normal View History

2024-10-10 11:01:13 +00:00
#encoding = utf8
import logging
import time
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-10-14 10:20:55 +00:00
self._message_queue = AsyncTaskQueue(5)
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-10-14 10:20:55 +00:00
await self._on_handle(stream, index)
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-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):
self._message_queue.clear()