Skip to content

系统事件

Yazhong Liu edited this page Mar 20, 2019 · 2 revisions

本文定义了 YodaOS 系统事件,它们主要用于:

  • 自定义任何模块
  • 监控系统状态
  • 支持集成测试接口

Flora 是同时具备发布/订阅、请求/响应模式的 IPC 库,我们可以用它来获取以下所列的所有系统事件和方法。

目录

模块概览

在语音交互过程中,YodaOS主要分为三个系统模块:turenproc,speech-service 和 vui。

turenproc 用于从麦克风捕获原始音频数据,判断语音是否激活,并上报激活后的语音数据。speech-service 接收 turenproc 的音频数据后上传云端,并将 NLP 结果返回给 vui。

vui 负责管理应用生命周期,并通过配置向不同的应用下发 NLP 进行处理。

事件

以下是 YodaOS 的系统事件列表。一种用于获取系统当前状态,一种用于重写某个系统模块时,可以根据该文档重新实现。

(instant)rokid.turen.voice_coming

本地激活事件,通常由本地激活模块提供。

(instant)rokid.turen.local_awake

本地寻向事件,可以提供当前用户说话的角度。

  • angle {float} 用户说话的角度

(instant)rokid.turen.start_voice

表示语音激活后,开始输出语音数据。

  • trigger {string} 激活词
  • trigger_start {int32} 激活词的语音数据中的起始坐标
  • trigger_end {int32} 激活词在语音数据中的结束坐标
  • energy {float} 当前语音的能量值
  • cloud_verfiy {int32} 是否支持云端激活确认
  • id {int32} 请求 ID

(instant)rokid.turen.voice

语音原始数据。

  • data {raw} 原始 PCM 数据
  • id {int32} 请求 ID

(instant)rokid.turen.sleep

本地休眠事件,比如“没事了”。

(instant)rokid.turen.pickup

控制设备是否处于拾音状态。

  • enabled {int32} 1表示拾音状态, 0表示非拾音状态

(instant)rokid.turen.mute

控制设备麦克风是否启用。

  • muted {int32} 0表示启用, 1禁用麦克风

(instant)rokid.turen.addVtWord

新增自定义激活词。

  • text {string} 中文形式的激活词
  • pinyin {string} 激活词拼音
  • type {int32} 激活词类型,1表示唤醒词,2表示休眠词,3表示热词

(instant)rokid.turen.removeVtWord

删除自定义激活词。

  • text {string} 中文形式的激活词

(instant)rokid.speech.completed

该事件需要由 speech-service 实现,它通知激活词请求完成。

  • id {int32} 请求 ID

(persist)rokid.speech.prepare_options

语音服务的认证信息,默认按照 Rokid 开放平台 的格式。

  • uri {string} 服务 URI
  • key {string} key.
  • device_type_id {string} the device type id.
  • secret {string} the secret.
  • device_id {string} the device id.
  • reconnect_interval {double} 当网络不好时,重连的间隔时间
  • ping_interval {double} keep alive 间隔时间
  • timeout {double} 请求超时时间

(persist)rokid.speech.options

语音服务的参数。

  • lang {double} 中文(0), 英文(1).
  • codec {double} pcm(0), opus(1).
  • vad_mode {double} 本地(0), 云端(1).
  • vad_timeout {double} 当 vad_mode 值为1时的云端 VAD 超时时间
  • require_nlp {double} 是否返回 NLP
  • require_full_asr {double} 是否返回识别的中间结果
  • ignore_voice {double} the milliseconds ignore part of voice data.
  • voice_mtu {double} separate voice data to fragment with max size.

(persist)rokid.speech.stack

语音服务要求的 NLP 领域栈信息,采用cut-domain:scene-domain格式。

  • stack {string} NLP 领域栈。

(instant)rokid.speech.final_asr

语音识别的最终结果。

  • text {string} 识别内容
  • id {int32} 请求 ID

(instant)rokid.speech.inter_asr

语音识别的中间结果。

  • text {string} 识别内容
  • id {int32} 请求 ID

(instant)rokid.speech.extra

Voice data to asr, extra result (activation cloud confirm, multiple devices activation arbitrate, etc).

  • extra {string} the extra information.
  • id {int32} the voice request id.

(instant)rokid.speech.nlp

自然语言处理(NLP)后的结果。

  • nlu {string} 自然语言理解数据
  • action {string} NLP 数据,一般由云端技能通过 NLU 数据生成
  • id {int32} 请求 ID

(instant)rokid.speech.error

表示识别错误,也可能为网络错误。

  • code {int32} 错误码
  • id {int32} 请求 ID

(instant)rokid.speech.completed

结束一次语音交互流程(正常结束,或异常结束)。

  • id {int32} 请求 ID

方法

如果您尝试在 YodaOS 中实现某模块,如 speech-service,需要先实现该模块下的方法。

speech-service

该服务通常用于上传语音数据并将云端识别的结果作为系统事件分发。

asr2nlp(text, options)

将纯文本转换为 NLP 结果,返回的结构与rokid.speech.nlp相同。

  • text {string} 输入的文本
  • options {string} 技能参数

vui

Vui 用于处理与语音交互相关的逻辑,包括语音应用管理和 NLP 分发。

rokid.skilloptions()

获取当前技能的状态与参数,它返回一个 JSON 字符串。