2024-10-09 12:19:00 +00:00
|
|
|
#encoding = utf8
|
|
|
|
|
|
|
|
import threading
|
|
|
|
|
2024-11-06 03:11:53 +00:00
|
|
|
from eventbus import EventBus
|
2024-10-09 12:19:00 +00:00
|
|
|
from .asr_observer import AsrObserver
|
|
|
|
|
|
|
|
|
|
|
|
class AsrBase:
|
|
|
|
def __init__(self):
|
2024-10-10 03:47:52 +00:00
|
|
|
self._hot_words_file = ''
|
2024-10-09 12:19:00 +00:00
|
|
|
self._sample_rate = 32000
|
|
|
|
self._samples_per_read = 100
|
|
|
|
self._observers = []
|
|
|
|
|
2024-11-06 03:11:53 +00:00
|
|
|
EventBus().register('stop', self._on_stop)
|
|
|
|
|
2024-10-09 12:19:00 +00:00
|
|
|
self._stop_event = threading.Event()
|
2024-11-04 13:44:51 +00:00
|
|
|
self._stop_event.set()
|
2024-11-08 23:39:03 +00:00
|
|
|
self._thread = threading.Thread(target=self._recognize_loop, name="AsrBaseThread")
|
2024-10-09 12:19:00 +00:00
|
|
|
self._thread.start()
|
|
|
|
|
2024-11-06 03:11:53 +00:00
|
|
|
def __del__(self):
|
|
|
|
EventBus().unregister('stop', self._on_stop)
|
|
|
|
|
|
|
|
def _on_stop(self, *args, **kwargs):
|
|
|
|
self.stop()
|
|
|
|
|
2024-10-09 12:19:00 +00:00
|
|
|
def _recognize_loop(self):
|
|
|
|
pass
|
|
|
|
|
|
|
|
def _notify_process(self, message: str):
|
|
|
|
for observer in self._observers:
|
|
|
|
observer.process(message)
|
|
|
|
|
|
|
|
def _notify_complete(self, message: str):
|
2024-11-08 11:49:53 +00:00
|
|
|
EventBus().post('clear_cache')
|
2024-10-09 12:19:00 +00:00
|
|
|
for observer in self._observers:
|
|
|
|
observer.completed(message)
|
|
|
|
|
|
|
|
def stop(self):
|
2024-11-04 13:44:51 +00:00
|
|
|
self._stop_event.clear()
|
2024-10-09 12:19:00 +00:00
|
|
|
self._thread.join()
|
|
|
|
|
|
|
|
def attach(self, observer: AsrObserver):
|
|
|
|
self._observers.append(observer)
|
|
|
|
|
|
|
|
def detach(self, observer: AsrObserver):
|
|
|
|
self._observers.remove(observer)
|