2024-10-12 11:57:24 +00:00
|
|
|
#encoding = utf8
|
2024-10-22 11:57:30 +00:00
|
|
|
import logging
|
|
|
|
import time
|
2024-10-12 11:57:24 +00:00
|
|
|
from abc import ABC, abstractmethod
|
2024-10-22 11:57:30 +00:00
|
|
|
from queue import Queue
|
|
|
|
from threading import Event, Thread
|
|
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
2024-10-12 11:57:24 +00:00
|
|
|
|
|
|
|
|
|
|
|
class BaseRender(ABC):
|
2024-10-23 09:44:33 +00:00
|
|
|
def __init__(self, play_clock, delay=0.02):
|
2024-10-22 11:57:30 +00:00
|
|
|
self._play_clock = play_clock
|
2024-10-23 09:44:33 +00:00
|
|
|
self._delay = delay
|
2024-10-22 11:57:30 +00:00
|
|
|
self._queue = Queue()
|
|
|
|
self._exit_event = Event()
|
|
|
|
self._thread = Thread(target=self._on_run)
|
|
|
|
self._exit_event.set()
|
|
|
|
self._thread.start()
|
|
|
|
|
|
|
|
def _on_run(self):
|
|
|
|
logging.info('Audio render run')
|
|
|
|
while self._exit_event.is_set():
|
2024-10-23 09:44:33 +00:00
|
|
|
self._run_step()
|
|
|
|
time.sleep(self._delay)
|
2024-10-22 11:57:30 +00:00
|
|
|
|
|
|
|
logging.info('Audio render exit')
|
2024-10-21 11:55:04 +00:00
|
|
|
|
|
|
|
def put(self, frame):
|
2024-10-23 09:44:33 +00:00
|
|
|
ps = time.time() - self._play_clock.start_time
|
2024-10-22 11:57:30 +00:00
|
|
|
self._queue.put_nowait((frame, ps))
|
2024-10-21 11:55:04 +00:00
|
|
|
|
2024-10-24 00:53:11 +00:00
|
|
|
def size(self):
|
|
|
|
return self._queue.qsize()
|
|
|
|
|
2024-10-23 11:58:41 +00:00
|
|
|
def pause_talk(self):
|
|
|
|
self._queue.queue.clear()
|
|
|
|
|
2024-10-21 11:55:04 +00:00
|
|
|
def stop(self):
|
2024-10-22 11:57:30 +00:00
|
|
|
self._queue.queue.clear()
|
|
|
|
self._exit_event.clear()
|
|
|
|
self._thread.join()
|
|
|
|
|
|
|
|
@abstractmethod
|
2024-10-23 09:44:33 +00:00
|
|
|
def _run_step(self):
|
2024-10-12 11:57:24 +00:00
|
|
|
pass
|
|
|
|
|
|
|
|
|