mspeech_ui_thr.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. # encoding:utf-8
  2. '''
  3. 主进程UI的子线程,除UI外必须在主进程处理的业务
  4. '''
  5. import ctypes
  6. import logging
  7. from PyQt5.QtCore import QThread, pyqtSignal
  8. from util import constants
  9. from util import my_util
  10. from win import aiplay
  11. class Mspeech(QThread):
  12. sign_thread_recv = pyqtSignal(dict)
  13. sign_thread_send = pyqtSignal(dict)
  14. _logger = logging.getLogger(__name__)
  15. def __init__(self):
  16. super().__init__()
  17. self.sign_thread_recv.connect(self._proc_data)
  18. def __del__(self):
  19. pass
  20. def run(self):
  21. self._init_device()
  22. pass
  23. # 向主线程发送数据
  24. def _send_data(self, data):
  25. try:
  26. # 给主线程传递数据
  27. self.sign_thread_send.emit(data)
  28. except Exception as e:
  29. print(e)
  30. # 处理收到主线程发送的数据
  31. def _proc_data(self, data):
  32. self._logger.info(data)
  33. code = data["code"]
  34. print("UI_th_proc_data", code)
  35. # 初始化设备
  36. def _init_device(self):
  37. self.bundle_lib = aiplay.VoiceRecord(self.callback)
  38. rc = self.bundle_lib.voice_record_start()
  39. if rc == 0:
  40. print("开启录音成功")
  41. else:
  42. print("开启录音失败")
  43. # 定义回调函数
  44. def callback(self, event, arg1, arg2, data):
  45. # 在这里处理回调数据
  46. # print(f"Event: {event}, arg1: {arg1}, arg2: {arg2}")
  47. if event == 0x01: # E_EVENT_VOICE_BTN_DOWN
  48. print("语言键按下")
  49. self._send_data(my_util.gen_q_data(constants.MSPEECH_AIUI_RESET_DICTATION, None))
  50. elif event == 0x02: # E_EVENT_VOICE_BTN_UP
  51. print("语言键松开")
  52. self._send_data(my_util.gen_q_data(constants.MSPEECH_AIUI_STOP_WS, None))
  53. elif event == 0x03: # E_EVENT_VOICE_DATE
  54. buf = ctypes.cast(data, ctypes.POINTER(ctypes.c_char * arg1)).contents.raw
  55. self._send_data(my_util.gen_q_data(constants.MSPEECH_AIUI_SEND_DATA, buf))
  56. elif event == 251:
  57. # 251:演示笔插入 252:演示笔拔出 255:错误没有检测到录音笔设备
  58. print("演示笔热插拔")
  59. self.bundle_lib.voice_record_stop()
  60. self.bundle_lib.voice_record_start()