1.1. 构建语法

MSC SDK 识别语法主要为两种:ABNF 和 BNF 格式。前者用于在线语法识别,后者用于离线语法识别。本文只对构建和使用语法的 SDK 调用过程进行介绍,关于语法的规则说明,请参考语法开发指南;关于上传应用级(对同一APPID所有设备均生效)语法文件,参考讯飞开放平台,以及MSC Android API 文档关于 SpeechRecognizer 类的说明。

1.1.1. 构建ABNF语法

如前文所述,ABNF 语法为在线识别使用的语法,故在构建时,应指定引擎类型为在线引擎,构建时的语法类型为 ABNF,如:

  1. // 设置引擎类型
  2. mAsr.setParameter( SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD );
  3. /* 其中 "abnf" 指定语法类型为 ABNF, grammarContent 为语法内容,grammarListener 为构建结果监听器*/
  4. ret = mAsr.buildGrammar( "abnf", grammarContent, grammarListener );

构建语法状态通过监听器 grammarListener 获取,当构建成功时,将在回调中返回一个 grammarID,将在使用语法识别时用到。

1.1.2. 构建BNF语法

BNF语法为离线识别使用的语法,在构建时,除了指定引擎为本地引擎,语法类型为BNF外,还必须指定离线资源的路径(MSC模式下,需下载使用对应的离线识别SDK),语法构建的路径——本地语法构建结果文件保存的路径:

  1. // 设置引擎类型
  2. mAsr.setParamter( SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_LOCAL );
  3. // 设置引擎模式
  4. mAsr.setParamter( SpeechConstant.ENGINE_MODE, engineMode );
  5. if( SpeechConstant.MODE_MSC.equals(engineMode) ){
  6. // 设置语法结果文件保存路径,以在本地识别时使用
  7. mAsr.setParameter( ResourceUtil.GRM_BUILD_PATH, grmPath );
  8. //设置识别资源路径
  9. mAsr.setParameter( ResourceUtil.ASR_RES_PATH, asrResPath );
  10. }
  11. /* 其中 "bnf" 指定语法类型为 BNF, grammarContent 为语法内容,grammarListener 为构建结果监听器*/
  12. ret = mAsr.buildGrammar( "bnf", grammarContent, grammarListener );

构建语法状态通过监听器 grammarListener 获取,当构建成功时,语法文件将保存到由 grmPath 指定的目录中,将在语法识别时用到(MSC 模式下)。