一、目的
前一篇博文中我们提交语音交互框架设计,那如何设计一个语音SDK呢?本篇博文会给出一些建设性意见和参考设计。
二、框架
上图中每个实心圆代表每个线程,完成对应的功能;需要特别说明的是信号处理与唤醒,有些厂商这两个模块可能已经做好集成,呈现给开发者的接口封装了内部逻辑,对话只需要关心语音输出和相关事件。
上图中调度器也就是本文的核心,来实现上可以是行为树也可以是状态机,本文着重介绍状态机的实现方式。
三、设计
调度器顾名思义就是根据输入进行相关调度处理,保证其他各个线程都是按照指定逻辑进行处理。
现在我们来分析一下一个语音设备在处理语音时可能经历的状态:
- IDLE(空闲)
- WAIT_FOR_WAKEUP(等待被唤醒)
- WAIT_FOR_SPEECH_START(等待语音起点)
- SPEECHING(拾音中)
- WAIT_FOR_ASR(等待识别结果)
由于涉及到公司语音SDK的具体设计,各个状态下的具体消息跳转不一一标明,图中连线代表状态迁移,至于由于什么消息导致怎样的迁移,开发者可以自行思考。
至此,一个语音SDK草图就算完成了。