daihui.zhang
update to vad streaming
ca5d527
Raw
History Blame Contribute Delete
1.85 kB
from dataclasses import dataclass, field
from multiprocessing import Process, Queue
from multiprocessing import Event
from logging import getLogger
logger = getLogger(__name__)
@dataclass
class Segment:
t0: int
t1: int
text: str
@dataclass
class MetaItem:
segments: list[Segment] = field(default_factory=list)
source_audio: bytes = b""
audio: bytes = b''
transcribe_content: str = ''
translate_content: str = ''
source_language: str = 'zh'
destination_language: str = 'en'
speech_status: str = 'END' # "END", "START"
class BasePipe(Process):
def __init__(self, in_queue=None, out_queue=None) -> None:
super().__init__() # Initialize the Process class
self._in_queue = in_queue if in_queue else Queue()
self._out_queue = out_queue if out_queue else Queue()
self._ready = Event()
def set_ready(self):
self._ready.set()
def is_ready(self):
return self._ready.is_set()
def wait(self):
self._ready.wait()
@property
def output_queue(self):
return self._out_queue
@property
def input_queue(self):
return self._in_queue
def process(self, in_data: MetaItem) -> MetaItem:
raise NotImplementedError("Subclasses should implement this method.")
@classmethod
def init(cls):
raise NotImplementedError
def run(self):
logger.info(f"start initial {self.__class__.__name__}")
self.init()
logger.info(f"finish initial {self.__class__.__name__}")
self.set_ready()
while True:
item = self.input_queue.get()
if item is None: # Check for termination signal
break
out_item = self.process(item)
if out_item:
self.output_queue.put(out_item)