|
1 | 1 | from maix import nn, audio, time, display, app, image, touchscreen |
2 | 2 | import threading |
3 | | -from queue import Queue, Empty |
4 | 3 | import re |
5 | 4 |
|
6 | 5 | class PagedText: |
@@ -110,16 +109,6 @@ def __init__(self): |
110 | 109 | except: |
111 | 110 | self.vad = None |
112 | 111 |
|
113 | | - self.__show_load_info('loading player..') |
114 | | - self.player = audio.Player(sample_rate=44100, block=False) |
115 | | - # max buffer size: (period_size * period_count) / sample_rate * 1000 |
116 | | - # (160 * 4 * 4200) / 44100 = 60.95s |
117 | | - self.player.period_count(4200) |
118 | | - self.player.volume(50) |
119 | | - self.player_queue = Queue(100) |
120 | | - self.player_thread = threading.Thread(target=self.player_thread_handle, daemon=True) |
121 | | - self.player_thread.start() |
122 | | - |
123 | 112 | self.__show_load_info('loading whisper..') |
124 | 113 | ai_isp_on = bool(int(app.get_sys_config_kv("npu", "ai_isp", "1"))) |
125 | 114 | if ai_isp_on is True: |
@@ -148,50 +137,8 @@ def __init__(self): |
148 | 137 | self.llm.set_reply_callback(self.__llm_on_reply) |
149 | 138 | self.llm_last_msg = "" |
150 | 139 |
|
151 | | - self.__show_load_info('loading melotts..') |
152 | | - self.tts = nn.MeloTTS(model="/root/models/melotts/melotts-zh.mud", speed = 0.8, language='en') |
153 | | - |
154 | | - self.tts_queue = Queue(100) |
155 | | - self.tts_thread = threading.Thread(target=self.tts_thread_handle, daemon=True) |
156 | | - self.tts_thread.start() |
157 | | - |
158 | 140 | self.page_text = PagedText() |
159 | | - |
160 | | - def player_thread_handle(self): |
161 | | - bytes_per_frame = 2 |
162 | | - while not app.need_exit(): |
163 | | - try: |
164 | | - pcm = self.player_queue.get(timeout=500) |
165 | | - t = time.ticks_ms() |
166 | | - print('self.player.remaining size1', self.player.get_remaining_frames()) |
167 | | - while not app.need_exit(): |
168 | | - idle_frames = self.player.get_remaining_frames() |
169 | | - write_frames = len(pcm) / bytes_per_frame |
170 | | - print('idle', idle_frames, 'write', write_frames) |
171 | | - if idle_frames >= write_frames: |
172 | | - break |
173 | | - else: |
174 | | - time.sleep_ms(10) |
175 | | - print('wait remain cost', time.ticks_ms() - t) |
176 | | - print('idle', self.player.get_remaining_frames(), 'write', len(pcm) / bytes_per_frame) |
177 | | - t = time.ticks_ms() |
178 | | - self.player.play(pcm) |
179 | | - print('play cost', time.ticks_ms() - t) |
180 | | - except Empty: |
181 | | - continue |
182 | | - |
183 | | - def tts_thread_handle(self): |
184 | | - while not app.need_exit(): |
185 | | - try: |
186 | | - msg = self.tts_queue.get(timeout=500) |
187 | | - print('tts queue get:', msg) |
188 | | - t = time.ticks_ms() |
189 | | - pcm = self.tts.infer(msg, output_pcm=True) |
190 | | - print('tts infer cost', time.ticks_ms() - t) |
191 | | - self.player_queue.put(pcm) |
192 | | - except Empty: |
193 | | - continue |
194 | | - |
| 141 | + |
195 | 142 | def _whisper_thread_handle(self, path): |
196 | 143 | self.whisper_results = self.whisper.transcribe(path) |
197 | 144 |
|
@@ -228,19 +175,7 @@ def __llm_on_reply(self, obj, resp): |
228 | 175 | parts=re.split(r"[,.!?]", self.llm_last_msg) |
229 | 176 | # print('parts', parts) |
230 | 177 | if len(parts) > 1: |
231 | | - if "!" in self.llm_last_msg: |
232 | | - push_msg = parts[0] + "!" |
233 | | - elif "," in self.llm_last_msg: |
234 | | - push_msg = parts[0] + "," |
235 | | - elif "." in self.llm_last_msg: |
236 | | - push_msg = parts[0] + "." |
237 | | - elif "?" in self.llm_last_msg: |
238 | | - push_msg = parts[0] + "?" |
239 | | - else: |
240 | | - push_msg = parts[0] |
241 | | - pass |
242 | 178 | self.llm_last_msg = parts[-1] |
243 | | - self.tts_queue.put(push_msg) |
244 | 179 |
|
245 | 180 | def __show_load_info(self, text: str, x:int = 0, y:int = 0, color:image.Color=image.COLOR_WHITE): |
246 | 181 | if self.disp: |
@@ -369,14 +304,12 @@ class Status: |
369 | 304 | llm_result = llm_result0.msg |
370 | 305 | self.llm.clear_context() |
371 | 306 | print(llm_result) |
372 | | - status = Status.TTS |
373 | | - asr_result = None |
374 | | - elif status == Status.TTS: |
375 | | - if self.tts_queue.empty(): |
376 | 307 | status = Status.IDLE |
| 308 | + asr_result = None |
377 | 309 | else: |
378 | 310 | status = Status.IDLE |
379 | 311 | time.sleep_ms(5) |
| 312 | + del self.llm |
380 | 313 |
|
381 | 314 | if __name__ == '__main__': |
382 | 315 | appication = App() |
|
0 commit comments