百度Android语音识别SDK分在线与离线两种,这篇文章介绍在线SDK的使用方法。

在线SDK是以JAR包和动态链接库形式发布和使用,可以从百度开放云平台网站中下载SDK及使用说明文档。

http://developer.baidu.com/wiki/index.php?title=docs/cplat/media/voice

完成语音SDK的集成分以下几步,本文将一步步介绍SDK集成方法。

1、注册开放开放平台

点击管理控制台,选择移动应用管理

选择创建应用,填写应用名称

  

可以看到右上角有ID、API KEY、Secret KEY,点击可以复制其内容,保存这些字符串,在使用语音SDK时会用到。

2、申请开启语音识别服务 ,选择媒体云---语音识别,点击申请开启服务,填写理由。

等待对接成功

3、使用语音识别SDK前的准备

之前准备了SDK开发包以及ID、API KEY、Secret KEY。

首先将开发包中的lib中的库添加到工程中

声明权限

     <uses-permission android:name="android.permission.RECORD_AUDIO" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.WAKE_LOCK" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /></span>

4、语音识别

SDK有两种实现语音识别的方式,一种是直接使用SDK中的语音识别控件,一种是使用SDK中的语音识别服务。

语音识别控件方式

语音识别控件BaiduASRDigitalDialog,提供了整套语音交互、提示音、音量反馈、动效反馈。开发者初始化一个BaiduASRDigitalDialog对象,并设置相关参数及结果回调,调用Show()方法就可以弹出对话框开始识别,识别结束后会在回调中得到识别结果。

if (mDialog == null || mCurrentTheme != Config.DIALOG_THEME) {mCurrentTheme = Config.DIALOG_THEME;if (mDialog != null) {mDialog.dismiss();}Bundle params = new Bundle();params.putString(BaiduASRDigitalDialog.PARAM_API_KEY, Constants.API_KEY);params.putString(BaiduASRDigitalDialog.PARAM_SECRET_KEY, Constants.SECRET_KEY);params.putInt(BaiduASRDigitalDialog.PARAM_DIALOG_THEME, Config.DIALOG_THEME);mDialog = new BaiduASRDigitalDialog(this, params);mDialog.setDialogRecognitionListener(mRecognitionListener);}mDialog.getParams().putInt(BaiduASRDigitalDialog.PARAM_PROP, Config.CURRENT_PROP);mDialog.getParams().putString(BaiduASRDigitalDialog.PARAM_LANGUAGE,Config.getCurrentLanguage());mDialog.show();

识别对话框支持的参数定义在BaiduASRDigitalDialog中以PARAM_前缀的常量。列表如下:

PARAM_API_KEY

string

 

开放平台认证API_key

PARAM_SECRET_KEY

string

开放平台认证Secret_key

PARAM_LANGUAGE

string

LANGUAGE_CHINESE

语种,取值定义在VoiceRecognitionConfig类中前缀为LANGUAGE_的常量

PARAM_PARTIAL_RESULTS

boolean

true

连续上屏

PARAM_NLU_ENABLE

boolean

false

是否语义解析。Prop为输入时暂不支持语义,请显示指定为其它领域。

PARAM_NLU_PARAMS

string

预留语义解析参数

PARAM_PROP

int

PROP_INPUT

领域参数,定义在VoiceRecognitionConfig类中前缀为PROP_的常量

PARAM_PORMPT_TEXT

string

“请说话”

对话框提示语

PARAM_PROMPT_SOUND_ENABLE

boolean

true

提示音,需要集成SDK包Raw文件夹的资源

PARAM_DIALOG_THEME

int

THEME_BLUE_LIGHTBG

样式。定义在前缀为THEME_的常量中

PARAM_TIPS

String[]

引导语列表

PARAM_SHOW_TIPS_ON_START

boolean

false

对话框弹出时首先显示引导语列表

PARAM_SHOW_TIP

boolean

false

识别启动3秒未检测到语音,随机出现一条引导语

PARAM_SHOW_HELP_ON_SILENT

boolean

false

静音超时后将“取消”按钮替换为“帮助”

设置回调方法,处理返回的结果

 mRecognitionListener = new DialogRecognitionListener() {@Overridepublic void onResults(Bundle results) {ArrayList<String> rs = results != null ? results.getStringArrayList(RESULTS_RECOGNITION) : null;if (rs != null && rs.size() > 0) {mResult.setText(rs.get(0));}}};
API方式
首先需要配置语音识别引擎ASREngine的参数VoiceRecognitionConfig
VoiceRecognitionConfig config = new VoiceRecognitionConfig();config.setProp(Config.CURRENT_PROP);config.setLanguage(Config.getCurrentLanguage());config.enableVoicePower(Config.SHOW_VOL); // 音量反馈。if (Config.PLAY_START_SOUND) {config.enableBeginSoundEffect(R.raw.bdspeech_recognition_start); // 设置识别开始提示音}if (Config.PLAY_END_SOUND) {config.enableEndSoundEffect(R.raw.bdspeech_speech_end); // 设置识别结束提示音}config.setSampleRate(VoiceRecognitionConfig.SAMPLE_RATE_8K); // 设置采样率,需要与外部音频一致

然后启动识别

 int code = mASREngine.startVoiceRecognition(mListener, config);
其中mListener是识别过程的回调,需要对其中的方法进行实现

 /*** 重写用于处理语音识别回调的监听器*/class MyVoiceRecogListener implements VoiceClientStatusChangeListener {@Overridepublic void onClientStatusChange(int status, Object obj) {switch (status) {// 语音识别实际开始,这是真正开始识别的时间点,需在界面提示用户说话。case VoiceRecognitionClient.CLIENT_STATUS_START_RECORDING:isRecognition = true;mHandler.removeCallbacks(mUpdateVolume);mHandler.postDelayed(mUpdateVolume, POWER_UPDATE_INTERVAL);mControlPanel.statusChange(ControlPanelFragment.STATUS_RECORDING_START);break;case VoiceRecognitionClient.CLIENT_STATUS_SPEECH_START: // 检测到语音起点mControlPanel.statusChange(ControlPanelFragment.STATUS_SPEECH_START);break;// 已经检测到语音终点,等待网络返回case VoiceRecognitionClient.CLIENT_STATUS_SPEECH_END:mControlPanel.statusChange(ControlPanelFragment.STATUS_SPEECH_END);break;// 语音识别完成,显示obj中的结果case VoiceRecognitionClient.CLIENT_STATUS_FINISH:mControlPanel.statusChange(ControlPanelFragment.STATUS_FINISH);isRecognition = false;updateRecognitionResult(obj);break;// 处理连续上屏case VoiceRecognitionClient.CLIENT_STATUS_UPDATE_RESULTS:updateRecognitionResult(obj);break;// 用户取消case VoiceRecognitionClient.CLIENT_STATUS_USER_CANCELED:mControlPanel.statusChange(ControlPanelFragment.STATUS_FINISH);isRecognition = false;break;default:break;}}@Overridepublic void onError(int errorType, int errorCode) {isRecognition = false;mResult.setText(getString(R.string.error_occur, Integer.toHexString(errorCode)));mControlPanel.statusChange(ControlPanelFragment.STATUS_FINISH);}@Overridepublic void onNetworkStatusChange(int status, Object obj) {// 这里不做任何操作不影响简单识别}}
获得识别BDVRClient对象
mASREngine = VoiceRecognitionClient.getInstance(this);mASREngine.setTokenApis(Constants.API_KEY, Constants.SECRET_KEY);
请求参数设置
每次识别需要通过通过VoiceRecognitionConfig设置参数,其中一些方法在API中有说明

方法

参数

描述

enableBeginSoundEffect

int soundResourceId 启动提示音资源Id

设置开始提示音,soundResourceId为放置在Raw文件夹的资源Id。

enableEndSoundEffect

int soundResourceId 说话结束提示音资源Id

检测到用户说话结束播报的提示音,非识别结束

setSampleRate

int rate 采样率

设置音频采样率,

通常建议开发者不指定采样频率,由BDVRClient自动根据当前网络环境选择采样频率。WiFi环境下将使用16kHz采样,移动网络下将使用8kHz采样,来节省流量。参考常量定义

SAMPLE_RATE_8K 8K采样率

SAMPLE_RATE_16K 16K采样率

setProp

int prop

开发者可以通过指定垂直分类来获取更精准的语音识别结果。

注:垂直分类目前支持地图,音乐,视频,APP,网址,开发者需要注意设定采样频率时只能在这五种垂直分类中选择。若指定其他分类,可能会影响识别结果的精度。参考PROP_前缀的常量定义。

setUseDefaultAudioSource

boolean useDefaultSource

设置是否使用缺省的录音。 如果不使用,用户需要调用VoiceRecognitionClient对象的feedAudioBuffer方法为识别器提供语音数据

enableNLU

 

启用语义解析,只在搜索模式起作用

getSampleRate

 

获取当前识别采样率

setLanguage

String Language

设置语种。目前支持的语种有中文普通话(LANGUAGE_CHINESE)、中文粤语(LANGUAGE_CANTONSE)、英文(LANGUAGE_ENGLISH)。

开始语音识别,BDVRClient在开始识别后,会启动录音、预处理、上传到服务器并获取识别结果。

 int code = mASREngine.startVoiceRecognition(mListener, config);if (code != VoiceRecognitionClient.START_WORK_RESULT_WORKING) {mResult.setText(getString(R.string.error_start, code));} 

取消语音识别

 mASREngine.stopVoiceRecognition();

结束语音识别

mRecognitionClient.speakFinish();

读者可以结合着SDK文档与demo源代码一起来学习百度语音识别SDK的使用。

语音识别的demo下载: http://download.csdn.net/detail/voicefans/7451441

小伙伴注意: 需要按照文章开头的去申请api key和secret key, 修改Constant.java,填上自己的key就ok了。VoiceRecognitionDemoActivity.java  展示了如何使用Dialog方式识别

如果遇到问题欢迎留言交流。

百度Android在线语音识别SDK使用方法相关推荐

  1. 百度Android在线语音识别SDK用法

    百度Android语音识别SDK分在线与离线两种,这篇文章介绍在线SDK的用法. 在线SDK是以JAR包和动态链接库形式公布和使用,能够从百度开放云平台站点中下载SDK及使用说明文档. 完毕语音SDK ...

  2. android在线签名sdk,Android 微信 SDK 签名问题

    因为 Android 的开放性, 可能是出于安全考虑, 微信 SDK 除了核对应用包名外, 还会核对应用签名, 所以调试 Android 时, 需要保证应用签名与提交审核的签名一致. 首先, 应用务必 ...

  3. flash air移动应用中添加百度移动广告联盟sdk挣钱方法

    1.在flash builder 中选择创建actionscript mobile project或者flex mobile project   因为flash builder 默认的air sdk版 ...

  4. Android studio删除sdk的方法(图文教程)

    如下看图:

  5. 跨平台Android和IOS百度语音在线识别原生插件

    一.插件推荐 跨平台Office文档.图片在线预览,视频播放原生插件 Android和IOS图片在线预览,视频播放原生插件 跨平台Android和IOS百度OCR文字识别.证卡识别.票据识别原生插件 ...

  6. Java实现在线语音识别

    本文为大家分享了Java实现在线语音识别的具体方法,供大家参考,具体内容如下 利用讯飞开发平台作为第三方库 首先需要在讯飞开发平台下载SDK,网址为,讯飞开发平台,这些SDK 下载都是免费的,当然你需 ...

  7. android在线播放音乐

    2019独角兽企业重金招聘Python工程师标准>>> android在线音乐 一种方法是调用android自带的播放器 //调用系统自带播放器Intent intent = new ...

  8. 百度 android tts sdk,百度Android语音合成(TTS)SDK使用方法

    语音合成是实现人机语音交互,建立一个有听和讲能力的交互系统所必需的关键技术.随着语音技术的发展,百度自主研发了语音合成系统(TTS),功能是接受用户发送的文本,生成语音发送给用户. 这篇文章将介绍如何 ...

  9. Android 调用百度在线语音识别功能

    换了好几个语音转文字的工具,主要跟百度上大家的方法一样,最开始用的科大讯飞的语音,真的还蛮好用的,整体来说demo的接口比较清晰吧~准确率也很高,但是量大就要收费.所以,换了第二种,Android原生 ...

  10. Baymax (Android版的Siri)之百度语音识别SDK调用

    之前说Baymax 的UI设计,现在UI设计好了,我们得开始讲一讲识别方面的事了.这里我们需要用到百度的语音识别技术,大家可以先上百度语音开放平台,上面有开发手册和demo帮助大家学习.贴上连接:ht ...

最新文章

  1. SBIO | 西农韦革宏组-大豆土壤细菌门间负向互作影响群落的动态变化和功能
  2. 重磅来袭!谷歌八年高级工程师亲授面试经验!!!
  3. Oracle中Scott账户常见表的样本查询编程与数据库
  4. python获取pid并杀死_用python记录运行pid,并在需要时kill掉它们的实例
  5. 《 图解 HTTP 》读书笔记
  6. 简单计算器(信息学奥赛一本通-T1057)
  7. django-创建项目-创建应用-注册应用-配置mysql连接pycharm-连接django-生成数据表
  8. .NET笔试题集(二)
  9. 从一个真实案例看性能差异问题处理方法论
  10. libpcre.so.1 cannot be found
  11. 第五章 列表、元组和字符串[DDT书本学习 小甲鱼]【2】
  12. 2011年1月28日早会资料「招き猫」(汉语版)
  13. .NET回归 HTML----表单元素(1)和一些常用的标记
  14. Day 32 processthreading_4
  15. [2020-07]如何获取百度访客搜索关键字(竞价、推广、SEO)
  16. 简述前端MVVM框架
  17. c++中MFC消息机制,UI线程和工作线程,模式对话框原理
  18. 电脑热点和虚拟机网卡冲突
  19. 兔子繁殖问题----Python
  20. 向上管理:如何正确汇报工作

热门文章

  1. Linux:邮箱客户端
  2. 95后,我们一起看过的剧
  3. hdoj 4888 Redraw Beautiful Drawings 【最大流满流+唯一性判断】
  4. 【论文笔记】Deep Learning on Graphs: A Survey
  5. 新能源汽车的电池寿命
  6. 第四篇:UE4视角切换节点,Possess和Set View Target With Blend的区别
  7. 蓝桥杯「鲁卡斯队列」
  8. 解决Android打包Entry name ‘res/animator/linear_indeterminate_line1_head_interpolator.xml‘ collided
  9. 群晖docker容器内配置ubuntu远程桌面访问
  10. Java_定义一个圆类,提供输出面积和周长的方法,定义一个测试类使用