From 79df82ebea8494007f13bcdfedc9372132143baf Mon Sep 17 00:00:00 2001 From: Yun <2289128964@qq.com> Date: Thu, 4 Jul 2024 09:46:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=8C=E5=96=84=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=88=90=E8=87=AA=E5=8A=A8=E7=BB=9D=E5=AF=B9=E8=B7=AF=E5=BE=84?= =?UTF-8?q?,=E6=B7=BB=E5=8A=A0=E6=8E=A5=E5=8F=A3=E7=94=9F=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- baseasr.py | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 baseasr.py diff --git a/baseasr.py b/baseasr.py new file mode 100644 index 0000000..df66873 --- /dev/null +++ b/baseasr.py @@ -0,0 +1,61 @@ +import time +import numpy as np + +import queue +from queue import Queue +import multiprocessing as mp + + +class BaseASR: + def __init__(self, opt): + self.opt = opt + + self.fps = opt.fps # 20 ms per frame + self.sample_rate = 16000 + self.chunk = self.sample_rate // self.fps # 320 samples per chunk (20ms * 16000 / 1000) + self.queue = Queue() + self.output_queue = mp.Queue() + + self.batch_size = opt.batch_size + + self.frames = [] + self.stride_left_size = opt.l + self.stride_right_size = opt.r + #self.context_size = 10 + self.feat_queue = mp.Queue(2) + + #self.warm_up() + + def pause_talk(self): + self.queue.queue.clear() + + def put_audio_frame(self,audio_chunk): #16khz 20ms pcm + self.queue.put(audio_chunk) + + def get_audio_frame(self): + try: + frame = self.queue.get(block=True,timeout=0.01) + type = 0 + #print(f'[INFO] get frame {frame.shape}') + except queue.Empty: + frame = np.zeros(self.chunk, dtype=np.float32) + type = 1 + + return frame,type + + def get_audio_out(self): #get origin audio pcm to nerf + return self.output_queue.get() + + def warm_up(self): + for _ in range(self.stride_left_size + self.stride_right_size): + audio_frame,type=self.get_audio_frame() + self.frames.append(audio_frame) + self.output_queue.put((audio_frame,type)) + for _ in range(self.stride_left_size): + self.output_queue.get() + + def run_step(self): + pass + + def get_next_feat(self,block,timeout): + return self.feat_queue.get(block,timeout) \ No newline at end of file