百度Android在线语音识别SDK使用方法
百度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));}}};
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);
/*** 重写用于处理语音识别回调的监听器*/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) {// 这里不做任何操作不影响简单识别}}
mASREngine = VoiceRecognitionClient.getInstance(this);mASREngine.setTokenApis(Constants.API_KEY, Constants.SECRET_KEY);
方法 |
参数 |
描述 |
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使用方法相关推荐
- 百度Android在线语音识别SDK用法
百度Android语音识别SDK分在线与离线两种,这篇文章介绍在线SDK的用法. 在线SDK是以JAR包和动态链接库形式公布和使用,能够从百度开放云平台站点中下载SDK及使用说明文档. 完毕语音SDK ...
- android在线签名sdk,Android 微信 SDK 签名问题
因为 Android 的开放性, 可能是出于安全考虑, 微信 SDK 除了核对应用包名外, 还会核对应用签名, 所以调试 Android 时, 需要保证应用签名与提交审核的签名一致. 首先, 应用务必 ...
- flash air移动应用中添加百度移动广告联盟sdk挣钱方法
1.在flash builder 中选择创建actionscript mobile project或者flex mobile project 因为flash builder 默认的air sdk版 ...
- Android studio删除sdk的方法(图文教程)
如下看图:
- 跨平台Android和IOS百度语音在线识别原生插件
一.插件推荐 跨平台Office文档.图片在线预览,视频播放原生插件 Android和IOS图片在线预览,视频播放原生插件 跨平台Android和IOS百度OCR文字识别.证卡识别.票据识别原生插件 ...
- Java实现在线语音识别
本文为大家分享了Java实现在线语音识别的具体方法,供大家参考,具体内容如下 利用讯飞开发平台作为第三方库 首先需要在讯飞开发平台下载SDK,网址为,讯飞开发平台,这些SDK 下载都是免费的,当然你需 ...
- android在线播放音乐
2019独角兽企业重金招聘Python工程师标准>>> android在线音乐 一种方法是调用android自带的播放器 //调用系统自带播放器Intent intent = new ...
- 百度 android tts sdk,百度Android语音合成(TTS)SDK使用方法
语音合成是实现人机语音交互,建立一个有听和讲能力的交互系统所必需的关键技术.随着语音技术的发展,百度自主研发了语音合成系统(TTS),功能是接受用户发送的文本,生成语音发送给用户. 这篇文章将介绍如何 ...
- Android 调用百度在线语音识别功能
换了好几个语音转文字的工具,主要跟百度上大家的方法一样,最开始用的科大讯飞的语音,真的还蛮好用的,整体来说demo的接口比较清晰吧~准确率也很高,但是量大就要收费.所以,换了第二种,Android原生 ...
- Baymax (Android版的Siri)之百度语音识别SDK调用
之前说Baymax 的UI设计,现在UI设计好了,我们得开始讲一讲识别方面的事了.这里我们需要用到百度的语音识别技术,大家可以先上百度语音开放平台,上面有开发手册和demo帮助大家学习.贴上连接:ht ...
最新文章
- SBIO | 西农韦革宏组-大豆土壤细菌门间负向互作影响群落的动态变化和功能
- 重磅来袭!谷歌八年高级工程师亲授面试经验!!!
- Oracle中Scott账户常见表的样本查询编程与数据库
- python获取pid并杀死_用python记录运行pid,并在需要时kill掉它们的实例
- 《 图解 HTTP 》读书笔记
- 简单计算器(信息学奥赛一本通-T1057)
- django-创建项目-创建应用-注册应用-配置mysql连接pycharm-连接django-生成数据表
- .NET笔试题集(二)
- 从一个真实案例看性能差异问题处理方法论
- libpcre.so.1 cannot be found
- 第五章 列表、元组和字符串[DDT书本学习 小甲鱼]【2】
- 2011年1月28日早会资料「招き猫」(汉语版)
- .NET回归 HTML----表单元素(1)和一些常用的标记
- Day 32 processthreading_4
- [2020-07]如何获取百度访客搜索关键字(竞价、推广、SEO)
- 简述前端MVVM框架
- c++中MFC消息机制,UI线程和工作线程,模式对话框原理
- 电脑热点和虚拟机网卡冲突
- 兔子繁殖问题----Python
- 向上管理:如何正确汇报工作
热门文章
- Linux:邮箱客户端
- 95后,我们一起看过的剧
- hdoj 4888 Redraw Beautiful Drawings 【最大流满流+唯一性判断】
- 【论文笔记】Deep Learning on Graphs: A Survey
- 新能源汽车的电池寿命
- 第四篇:UE4视角切换节点,Possess和Set View Target With Blend的区别
- 蓝桥杯「鲁卡斯队列」
- 解决Android打包Entry name ‘res/animator/linear_indeterminate_line1_head_interpolator.xml‘ collided
- 群晖docker容器内配置ubuntu远程桌面访问
- Java_定义一个圆类,提供输出面积和周长的方法,定义一个测试类使用