4cfad5ae0f
- 全新ui - 全面优化websocket逻辑,提高数字人和ui连接的稳定性及资源开销 - 全面优化唤醒逻辑,提供稳定的普通唤醒模式和前置词唤醒模式 - 优化拾音质量,支持多声道麦克风拾音 - 优化自动播放服务器的对接机制,提供稳定和兼容旧版ue工程的对接模式 - 数字人接口输出机器人表情,以适应新fay ui及单片机的数字人表情输出 - 使用更高级的音频时长计算方式,可以更精准控制音频播放完成后的逻辑 - 修复点击关闭按钮会导致程序退出的bug - 修复没有麦克风的设备开启麦克风会出错的问题 - 为服务器主机地址提供配置项,以方便服务器部署
44 lines
1.2 KiB
Python
44 lines
1.2 KiB
Python
import ctypes
|
|
import threading
|
|
from threading import Thread
|
|
|
|
|
|
class MyThread(Thread):
|
|
def __init__(self, group=None, target=None, name=None, args=(), kwargs=None, *, daemon=None):
|
|
Thread.__init__(self, group=group, target=target, name=name, args=args, kwargs=kwargs, daemon=daemon)
|
|
add_thread(self)
|
|
|
|
def get_id(self):
|
|
# returns id of the respective thread
|
|
if hasattr(self, '_thread_id'):
|
|
return self._thread_id
|
|
for id, thread in threading._active.items():
|
|
if thread is self:
|
|
return id
|
|
|
|
def raise_exception(self):
|
|
thread_id = self.get_id()
|
|
res = ctypes.pythonapi.PyThreadState_SetAsyncExc(thread_id, ctypes.py_object(SystemExit))
|
|
if res > 1:
|
|
ctypes.pythonapi.PyThreadState_SetAsyncExc(thread_id, 0)
|
|
print('Exception raise failure')
|
|
|
|
|
|
__thread_list = []
|
|
|
|
|
|
def add_thread(thread: MyThread):
|
|
if thread not in __thread_list:
|
|
__thread_list.append(thread)
|
|
|
|
|
|
def remove_thread(thread: MyThread):
|
|
if thread in __thread_list:
|
|
__thread_list.remove(thread)
|
|
|
|
|
|
def stopAll():
|
|
for thread in __thread_list:
|
|
thread.raise_exception()
|
|
thread.join()
|