From 23cab9d86b38d3049f3ca61a47589d52ad4a0b73 Mon Sep 17 00:00:00 2001 From: jiegeaiai Date: Sun, 8 Dec 2024 13:04:14 +0800 Subject: [PATCH] modify break logic --- asr/asr_base.py | 2 +- human/audio_inference_handler.py | 6 ------ human/audio_inference_onnx_handler.py | 7 +------ human/audio_mal_handler.py | 1 + human/human_render.py | 9 ++------- human_handler/audio_handler.py | 6 +++++- nlp/nlp_base.py | 5 +++-- nlp/nlp_callback.py | 4 ++++ tts/tts_audio_handle.py | 12 ++++-------- tts/tts_base.py | 10 +++++----- tts/tts_edge_http.py | 4 ++-- 11 files changed, 28 insertions(+), 38 deletions(-) diff --git a/asr/asr_base.py b/asr/asr_base.py index 4eadd41..1118e44 100644 --- a/asr/asr_base.py +++ b/asr/asr_base.py @@ -30,11 +30,11 @@ class AsrBase: pass def _notify_process(self, message: str): + EventBus().post('clear_cache') for observer in self._observers: observer.process(message) def _notify_complete(self, message: str): - EventBus().post('clear_cache') for observer in self._observers: observer.completed(message) diff --git a/human/audio_inference_handler.py b/human/audio_inference_handler.py index 590f316..1874d43 100644 --- a/human/audio_inference_handler.py +++ b/human/audio_inference_handler.py @@ -23,7 +23,6 @@ class AudioInferenceHandler(AudioHandler): super().__init__(context, handler) EventBus().register('stop', self._on_stop) - EventBus().register('clear_cache', self.on_clear_cache) self._mal_queue = SyncQueue(1, "AudioInferenceHandler_Mel") self._audio_queue = SyncQueue(context.batch_size * 2, "AudioInferenceHandler_Audio") @@ -37,15 +36,10 @@ class AudioInferenceHandler(AudioHandler): def __del__(self): EventBus().unregister('stop', self._on_stop) - EventBus().unregister('clear_cache', self.on_clear_cache) def _on_stop(self, *args, **kwargs): self.stop() - def on_clear_cache(self, *args, **kwargs): - self._mal_queue.clear() - self._audio_queue.clear() - def on_handle(self, stream, type_): if not self._is_running: return diff --git a/human/audio_inference_onnx_handler.py b/human/audio_inference_onnx_handler.py index b521fbe..826fdae 100644 --- a/human/audio_inference_onnx_handler.py +++ b/human/audio_inference_onnx_handler.py @@ -44,7 +44,6 @@ class AudioInferenceOnnxHandler(AudioHandler): super().__init__(context, handler) EventBus().register('stop', self._on_stop) - EventBus().register('clear_cache', self.on_clear_cache) self._mal_queue = SyncQueue(1, "AudioInferenceHandler_Mel") self._audio_queue = SyncQueue(context.batch_size * 2, "AudioInferenceHandler_Audio") @@ -58,15 +57,10 @@ class AudioInferenceOnnxHandler(AudioHandler): def __del__(self): EventBus().unregister('stop', self._on_stop) - EventBus().unregister('clear_cache', self.on_clear_cache) def _on_stop(self, *args, **kwargs): self.stop() - def on_clear_cache(self, *args, **kwargs): - self._mal_queue.clear() - self._audio_queue.clear() - def on_handle(self, stream, type_): if not self._is_running: return @@ -196,3 +190,4 @@ class AudioInferenceOnnxHandler(AudioHandler): print('AudioInferenceHandler111') self._mal_queue.clear() print('AudioInferenceHandler222') + super().pause_talk() diff --git a/human/audio_mal_handler.py b/human/audio_mal_handler.py index 679f27d..2c81d42 100644 --- a/human/audio_mal_handler.py +++ b/human/audio_mal_handler.py @@ -124,3 +124,4 @@ class AudioMalHandler(AudioHandler): def pause_talk(self): print('AudioMalHandler pause_talk', self._queue.size()) self._queue.clear() + super().pause_talk() diff --git a/human/human_render.py b/human/human_render.py index 8e08171..a6902ed 100644 --- a/human/human_render.py +++ b/human/human_render.py @@ -19,7 +19,6 @@ class HumanRender(AudioHandler): super().__init__(context, handler) EventBus().register('stop', self._on_stop) - EventBus().register('clear_cache', self.on_clear_cache) play_clock = PlayClock() self._voice_render = VoiceRender(play_clock, context) self._video_render = VideoRender(play_clock, context, self) @@ -36,14 +35,10 @@ class HumanRender(AudioHandler): def __del__(self): EventBus().unregister('stop', self._on_stop) - EventBus().unregister('clear_cache', self.on_clear_cache) def _on_stop(self, *args, **kwargs): self.stop() - def on_clear_cache(self, *args, **kwargs): - self._queue.clear() - def _on_run(self): logging.info('human render run') while self._exit_event.is_set() and self._is_running: @@ -96,8 +91,8 @@ class HumanRender(AudioHandler): def pause_talk(self): logging.info('hunan pause_talk') - # self._voice_render.pause_talk() - # self._video_render.pause_talk() + self._queue.clear() + super().pause_talk() def stop(self): logging.info('hunan render stop') diff --git a/human_handler/audio_handler.py b/human_handler/audio_handler.py index f2e307e..eb5eff6 100644 --- a/human_handler/audio_handler.py +++ b/human_handler/audio_handler.py @@ -29,4 +29,8 @@ class AudioHandler(ABC): logging.info(f'_handler is None') def pause_talk(self): - pass + if self._handler is not None: + self._handler.pause_talk() + else: + logging.info(f'next_pause_talk _handler is None') + diff --git a/nlp/nlp_base.py b/nlp/nlp_base.py index 5534901..377eb27 100644 --- a/nlp/nlp_base.py +++ b/nlp/nlp_base.py @@ -28,7 +28,9 @@ class NLPBase(AsrObserver): def on_clear_cache(self, *args, **kwargs): logger.info('NLPBase clear_cache') - self._ask_queue.clear() + self.pause_talk() + if self._callback is not None: + self._callback.on_clear() @property def callback(self): @@ -74,6 +76,5 @@ class NLPBase(AsrObserver): def pause_talk(self): logger.info('NLPBase pause_talk') - self._is_running = False self._ask_queue.clear() \ No newline at end of file diff --git a/nlp/nlp_callback.py b/nlp/nlp_callback.py index 96619b2..854a89e 100644 --- a/nlp/nlp_callback.py +++ b/nlp/nlp_callback.py @@ -7,3 +7,7 @@ class NLPCallback(ABC): @abstractmethod def on_message(self, txt: str): pass + + @abstractmethod + def on_clear(self): + pass diff --git a/tts/tts_audio_handle.py b/tts/tts_audio_handle.py index 13ba8e4..361ecea 100644 --- a/tts/tts_audio_handle.py +++ b/tts/tts_audio_handle.py @@ -20,18 +20,13 @@ class TTSAudioHandle(AudioHandler): self._index = -1 EventBus().register('stop', self._on_stop) - EventBus().register('clear_cache', self.on_clear_cache) def __del__(self): EventBus().unregister('stop', self._on_stop) - EventBus().unregister('clear_cache', self.on_clear_cache) def _on_stop(self, *args, **kwargs): self.stop() - def on_clear_cache(self, *args, **kwargs): - self._index = -1 - @property def sample_rate(self): return self._sample_rate @@ -51,7 +46,8 @@ class TTSAudioHandle(AudioHandler): pass def pause_talk(self): - pass + self._index = -1 + super().pause_talk() class TTSAudioSplitHandle(TTSAudioHandle): @@ -103,8 +99,8 @@ class TTSAudioSplitHandle(TTSAudioHandle): self._is_running = False self._thread.join() - def on_clear_cache(self, *args, **kwargs): - super().on_clear_cache() + def pause_talk(self): + super().pause_talk() with self._lock: self._current = 0 self._priority_queue.clear() diff --git a/tts/tts_base.py b/tts/tts_base.py index 62af6c7..5ee0bab 100644 --- a/tts/tts_base.py +++ b/tts/tts_base.py @@ -16,18 +16,18 @@ class TTSBase(NLPCallback): self._message_queue = AsyncTaskQueue('TTSBaseQueue', 5) self._is_running = True EventBus().register('stop', self.on_stop) - EventBus().register('clear_cache', self.on_clear_cache) def __del__(self): EventBus().unregister('stop', self.on_stop) - EventBus().unregister('clear_cache', self.on_clear_cache) def on_stop(self, *args, **kwargs): self.stop() - def on_clear_cache(self, *args, **kwargs): - logger.info('TTSBase clear_cache') - self._message_queue.clear() + def on_clear(self): + self.pause_talk() + + if self._handle is not None: + self._handle.pause_talk() @property def handle(self): diff --git a/tts/tts_edge_http.py b/tts/tts_edge_http.py index c3ad86a..6d669d1 100644 --- a/tts/tts_edge_http.py +++ b/tts/tts_edge_http.py @@ -97,8 +97,8 @@ class TTSEdgeHttp(TTSBase): # if self._byte_stream is not None and not self._byte_stream.closed: # self._byte_stream.close() - def on_clear_cache(self, *args, **kwargs): + def on_clear(self): logger.info('TTSEdgeHttp clear_cache') - super().on_clear_cache(*args, **kwargs) for response in self._response_list: response.close() + super().on_clear()