File size: 1,853 Bytes
485d8e3
 
6f13b8c
 
fca9809
 
 
 
485d8e3
 
 
 
 
 
 
 
 
 
c0447ed
485d8e3
 
 
 
 
ca5d527
485d8e3
 
 
6f13b8c
485d8e3
6f13b8c
 
 
 
 
 
 
 
 
 
 
 
485d8e3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fca9809
485d8e3
fca9809
6f13b8c
485d8e3
6f13b8c
485d8e3
 
 
ebd6110
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72

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)