| import threading | |
| from abc import ABC, abstractmethod | |
| from multiprocessing import Queue | |
| from voice_dialogue.core.base import BaseThread | |
| class BaseCapture(BaseThread, ABC): | |
| """ | |
| 抽象音频捕获器基类。 | |
| 定义了所有音频捕获策略应遵循的通用接口。 | |
| """ | |
| def __init__( | |
| self, | |
| audio_frames_queue: Queue, | |
| group=None, target=None, name=None, args=(), kwargs=None, *, daemon=None | |
| ): | |
| """ | |
| 初始化音频捕获器。 | |
| Args: | |
| audio_frames_queue (Queue): 用于存放捕获的音频帧的队列。 | |
| """ | |
| super().__init__(group, target, name, args, kwargs, daemon=daemon) | |
| self.audio_frames_queue = audio_frames_queue | |
| self._pause_event = threading.Event() | |
| def is_paused(self) -> bool: | |
| """检查捕获器是否已暂停。""" | |
| return self._pause_event.is_set() | |
| def pause(self): | |
| """暂停音频捕获。""" | |
| self._pause_event.set() | |
| def resume(self): | |
| """恢复音频捕获。""" | |
| self._pause_event.clear() | |
| def run(self): | |
| """ | |
| 线程主循环。 | |
| 子类必须实现此方法以提供具体的音频捕获逻辑。 | |
| """ | |
| raise NotImplementedError | |