1.1. 语音听写

语音听写能力,目前msc sdk支持在线和离线模式,其相关调用说明如下:

1.1.1. 1.在线听写

sdk提供了两种识别方式,分别为带UI识别和无UI方式:

一.无UI识别

  1. //初始化识别无UI识别对象
  2. //使用SpeechRecognizer对象,可根据回调消息自定义界面;
  3. mIat = SpeechRecognizer.createRecognizer(IatDemo.this, mInitListener);
  4. //设置语法ID和 SUBJECT 为空,以免因之前有语法调用而设置了此参数;或直接清空所有参数,具体可参考 DEMO 的示例。
  5. mIat.setParameter( SpeechConstant.CLOUD_GRAMMAR, null );
  6. mIat.setParameter( SpeechConstant.SUBJECT, null );
  7. //设置返回结果格式,目前支持json,xml以及plain 三种格式,其中plain为纯听写文本内容
  8. mIat.setParameter(SpeechConstant.RESULT_TYPE, "json");
  9. //此处engineType为“cloud”
  10. mIat.setParameter( SpeechConstant.ENGINE_TYPE, engineType );
  11. //设置语音输入语言,zh_cn为简体中文
  12. mIat.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
  13. //设置结果返回语言
  14. mIat.setParameter(SpeechConstant.ACCENT, "mandarin");
  15. // 设置语音前端点:静音超时时间,单位ms,即用户多长时间不说话则当做超时处理
  16. //取值范围{1000~10000}
  17. mIat.setParameter(SpeechConstant.VAD_BOS, "4000");
  18. //设置语音后端点:后端点静音检测时间,单位ms,即用户停止说话多长时间内即认为不再输入,
  19. //自动停止录音,范围{0~10000}
  20. mIat.setParameter(SpeechConstant.VAD_EOS, "1000");
  21. //设置标点符号,设置为"0"返回结果无标点,设置为"1"返回结果有标点
  22. mIat.setParameter(SpeechConstant.ASR_PTT,"1");
  23. //开始识别,并设置监听器
  24. mIat.startListening(mRecogListener);

二.带UI识别

  1. // 初始化听写Dialog,如果只使用有UI听写功能,无需创建SpeechRecognizer
  2. // 使用UI听写功能,请根据sdk文件目录下的notice.txt,放置布局文件和图片资源
  3. mIatDialog = new RecognizerDialog(IatDemo.this, mInitListener);
  4. //以下为dialog设置听写参数
  5. mIatDialog.setParams("xxx","xxx");
  6. ....
  7. //开始识别并设置监听器
  8. mIatDialog.setListener(mRecognizerDialogListener);
  9. //显示听写对话框
  10. mIatDialog.show();

具体配置信息,请参考后面识别对话框的内容

1.1.2. 2.离线听写

离线听写与在线听写主要差别在于引擎类型和听写资源:

  1. //此处engineType为“local”
  2. mIat.setParameter( SpeechConstant.ENGINE_TYPE, engineType );
  3. if (mEngineType.equals(SpeechConstant.TYPE_LOCAL)) {
  4. // 设置本地识别资源
  5. mIat.setParameter(ResourceUtil.ASR_RES_PATH, getResourcePath());
  6. }

resourcce设置种包含两个资源,common.jet 和 sms_16k.jet,从资源配置中可以看出,目前离线听写仅支持16k音频

  1. private String getResourcePath(){
  2. StringBuffer tempBuffer = new StringBuffer();
  3. //识别通用资源
  4. tempBuffer.append(ResourceUtil.generateResourcePath(this, ResourceUtil.RESOURCE_TYPE.assets, "iat/common.jet"));
  5. tempBuffer.append(";");
  6. tempBuffer.append(ResourceUtil.generateResourcePath(this, ResourceUtil.RESOURCE_TYPE.assets, "iat/sms_16k.jet"));
  7. //识别8k资源-使用8k的时候请解开注释
  8. return tempBuffer.toString();
  9. }

在线听写应用可以通过上传词典(又称个性化用户热词),提高听写的匹配率,参考后面更新词典的章节。