Page 66 - 智慧地铁建设实践与创新研究
P. 66
智慧地铁建设实践与创新研究
Research on the Practice and Innovation of Smart Metro Construction
Received 和应用层的 on Voice In foIn form。On Audio Message Received 接口中通
过对 JSON 串的解析实现对语音消息的种类辨别并进行转发。关于为何要进行一
个转发而不是直接在此接口中进行消息处理,是因为在子线程中进行界面更新是
不被 MFC 允许的。每个线程都有自己的线程模块状态映射表,在一个线程中操
作另一个线程中创建的 MFC 对象,会带来意想不到的问题,更不可以在线程函
数中直接调用更新函数刷新界面,这会导致程序直接崩溃。在 MFC 中 UI 线程
是 C Win Tread 类控制的,该类与 CWin App 相似,售票软件的主线程就是 CWin
App 创建的,其实 C Win App 创建的主线程也是 UI 线程,但一般为了便于表
达,MFC 开发者会故意将其与 C win Tread 创建的 UI 线程进行区分。On Audio
Message Received 就是通过将传入的语音消息发送给对应的 UI 线程,随后在 UI
线程的消息响应函数中进行消息处理,从而实现语音识别功能。
售票软件在运行过程中处于不同的状态,开发中采用状态模式的思想,将不
同状态下的行为封装在特定类中,简化了判断逻辑,增强了软件的扩展性和可读
性。语音售票也是在语音控制状态下进行的,因此设计了语音控制状态类 Voice
Handle State,on Voice Info In form 接口是该类的成员函数,调用应用层中的接
口函数实现界面更新。应用层的接口函数处理的正是 On Audio Message Received
接口传递来的语音消息,只不过需要在 on Voice In foIn form 中进行一个过渡分
类处理。语音模组的通信数据是 JSON 格式,使用 CJSON 的库函数对语音消息
进行解析,通过提取字段“event”和“status”来判断消息类型以及消息的有效
性。确定消息类型后再依次提取该消息的其他字段进行下一步的逻辑判断和接
口调用,最终实现语音消息输入信息界面和路径查询结果信息界面。语音模组对
乘客输入的 ASR 和云服务器返回的 NLU 等消息均采用 UTF-8 的编码规则,售
票软件采用了 GB2312 编码,为了使语音模组与售票软件正常通信,需要为消息
的编码格式设计一个转换函数。函数的功能是将 UTF-8 编码格式的信息转换为
GB2312 编码格式。若没有经过转换,传至售票软件中的信息将会出现乱码现象,
售票软件无法对其辨认与解析。
(四)语音售票功能应用层设计与实现
1. 语音售票界面的设计与实现
用户界面(UserInterface,UI)分为硬件用户界面和软件用户界面两种,笔
者主要针对软件用户界面进行研究与探讨。用户界面可以从用户研究、交互设计
·54·

