daihui.zhang
update to vad streaming
ca5d527
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)