3.0 语音控制系统文档
一、系统架构
┌─────────────────────────────────────────────────────────────────┐
│ 语音控制系统 │
├───────────────────────────┬─────────────────────────────────────┤
│ 配置层 (voice-config) │ 服务层 (voice.js) │
│ ┌─────────────────────┐ │ ┌───────────────────────────────┐ │
│ │ 命令词配置 │ │ │ 语音监听 │ │
│ │ • 导航命令 │ │ │ • 创建监听器(Xiri.Listener) │ │
│ │ • 跳转命令 │ │ │ • 注册场景(regist) │ │
│ │ • 功能命令 │ │ │ • 同步信息(syncClientInfo) │ │
│ │ • 应用命令 │ │ └───────────────────────────────┘ │
│ └─────────────────────┘ │ ┌───────────────────────────────┐ │
│ ┌─────────────────────┐ │ │ 命令分发处理器 │ │
│ │ 场景配置 │ │ │ • intentHandler(入口) │ │
│ │ • createScene() │ │ │ • initMasterHandler(主处理) │ │
│ └─────────────────────┘ │ └───────────────────────────────┘ │
│ │ ┌───────────────────────────────┐ │
│ │ │ 业务处理器 │ │
│ │ │ • 导航处理 │ │
│ │ │ • 链接跳转 │ │
│ │ │ • 功能操作 │ │
│ │ │ • 语义解析 │ │
└───────────────────────────┴─────────────────────────────────────┘二、配置层详解 (voice-config.js)
2.1 命令词命名规范
[标识]$[值]
标识类型:
├─ nav → 首页导航跳转
├─ wyNav → 维语导航跳转
├─ link → 页面链接跳转
├─ cmd → 功能命令操作
├─ apk → 应用启动
├─ list → 列表栏目切换
├─ channel → 频道栏目切换
└─ xiri → 科大注册场景2.2 场景配置生成
javascript
createScene(data) → 生成场景对象
├── _scene: 'com.iflytek.xiri.MyScene' // 场景标识
├── _commands: { 命令词: 匹配规则数组 } // 命令词配置
├── _feedbacks: { 命令词: 反馈文本 } // 语音反馈
└── _fuzzy_words: { 槽位名: 同义词数组 } // 模糊匹配词三、服务层详解 (voice.js)
3.1 核心流程
voiceListener(启动监听)
↓
创建 Xiri.Listener 实例
↓
createScene(生成场景配置)
↓
listener.regist(注册场景)
↓
_syncClientInfo(同步客户端信息)
↓
syncChannelInfo(同步频道信息)
↓
[等待语音指令]
↓
callBack → intentHandler(接收回调)
↓
initMasterHandler(命令分发)
↓
各类处理器执行3.2 命令分发总览
intentHandler (入口)
│
├─► command === '_XIRI_XJMobile' ────► 科大语义解析
│ ├─ getClientInfo
│ ├─ search (语音搜索)
│ ├─ search-others (灵犀)
│ └─ semantemeHandler
│ ├─ tvchannel (直播)
│ ├─ epg (回看)
│ ├─ cmd (控制)
│
├─► command === '_XIRI_XJMobile_Wy' ─► 维语搜索处理
│
└─► 其他命令 ─────────────────────────► 类型分发
│
├─ nav → navHandler
├─ wyNav → wyNavHandler
├─ cmd → cmdHandler(需要在各自页面实现voiceHandler)
├─ apk → apkHandler
└─ 预设命令 → presetHandler
├─ _PLAY
├─ _PAGE
├─ _EPISODE
└─ _SELECT四、命令词分类速查表
4.1 导航类命令
| 类型 | 命令格式 | 示例 | 功能 |
|---|---|---|---|
| 首页导航 | nav$[key] | nav$movieIndex | 切换到电影首页 |
| 维语导航 | wyNav$[key] | wyNav$7 | 切换维语电影 |
4.2 功能操作命令
| 命令 | 语音示例 | 页面方法 |
|---|---|---|
cmd$goBack | "返回" | keyBack() / xiriGoBack() |
cmd$fullPlay | "全屏观看" | fullPlay() |
cmd$openEpisodeList | "选集" | openEpisodeList() |
cmd$order | "订购" | order() |
cmd$continuePlay | "继续播放" | continuePlay() / resume() |
cmd$replay | "从头播放" | restart() |
cmd$addCollect | "收藏" | addCollect() |
cmd$delCollect | "取消收藏" | delCollect() |
cmd$playPrev | "上一个" | prevEpisode() |
cmd$playNext | "下一个" | nextEpisode() |
cmd$playFirst | "第一集" | playFirst() |
cmd$playFinal | "最后一集" | playFinal() |
4.3 预置控制命令
| 命令 | Action | 功能 | 页面方法 |
|---|---|---|---|
_PLAY | PLAY | 播放 | play() |
PAUSE | 暂停 | pause() | |
RESUME | 继续 | resume() | |
RESTART | 重播 | restart() | |
SEEK | 定位 | seek(position) | |
FORWARD | 快进 | forward(offset) | |
BACKWARD | 快退 | backward(offset) | |
_PAGE | PREV | 上一页 | prevPage() |
NEXT | 下一页 | nextPage() | |
INDEX | 指定页 | setPage(index) | |
_EPISODE | PREV | 上一集 | prevEpisode() |
NEXT | 下一集 | nextEpisode() | |
INDEX | 指定集 | setEpisode(index) 最后一集 index 为 -1 | |
_SELECT | - | 选择项 | selectItem(index, row) |
五、语义解析详解
5.1 语义服务类型
| 服务名 | 触发场景 | 处理函数 | 核心逻辑 |
|---|---|---|---|
tvchannel | 换台/直播控制 | channelSemanteme | 切台/上下频道 |
epg | 回看查询 | tvodSemanteme | 日期解析+跳转回看 |
cmd | 系统控制 | controllSemanteme | 音量/静音控制 |
5.2 音量控制指令
| 指令 | 功能说明 |
|---|---|
volumeAdd | 增加指定音量值 |
volumeLower | 降低指定音量值 |
volume_plus | 音量+5 |
volume_minus | 音量-5 |
volume_max | 音量最大(100) |
volume_min | 音量最小(0) |
volumeMid | 音量减半 |
mute | 静音 |
unmute | 取消静音 |
_volume | 设置到指定音量 |
六、页面接口规范
6.1 必需实现接口
页面需暴露给语音系统调用的方法:
| 分类 | 方法名 | 参数 | 调用场景 |
|---|---|---|---|
| 基础 | getPage() | - | 获取Page实例 |
saveParams() | - | 保存页面状态 | |
voiceHandler(intent) | intent | 自定义语音处理 | |
| 选择 | selectItem(i,r) | index,row | 选择元素 |
wySelectItem(i) | intent | 维语选择 |
七、双语支持机制
7.1 语言切换标志
javascript
top.isWY // true: 维语模式 false: 中文模式7.2 反馈文本格式
javascript
postFeedBackFn({
zhText: '中文提示', // 中文反馈
ugText: '维语文本' // 维语反馈
});7.3 维语特殊处理
| 场景 | 处理方式 |
|---|---|
| 导航 | wyNavHandler 单独处理 |
| 命令 | cmd$wy_* 前缀区分 |
| 搜索 | _XIRI_XJMobile_Wy 命令 |
| 选择 | wySelectItem() 方法 |
