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

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

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

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

1、注冊开放开放平台

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

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVm9pY2VGYW5z/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">   

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVm9pY2VGYW5z/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

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

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

等待对接成功

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVm9pY2VGYW5z/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

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

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

首先将开发包中的lib中的库加入到project中

声明权限

     <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

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

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

 mRecognitionListener = new DialogRecognitionListener() {

            @Override
public 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 { @Override
public 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;
} } @Override
public void onError(int errorType, int errorCode) {
isRecognition = false;
mResult.setText(getString(R.string.error_occur, Integer.toHexString(errorCode)));
mControlPanel.statusChange(ControlPanelFragment.STATUS_FINISH);
} @Override
public 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在開始识别后,会启动录音、预处理、上传到server并获取识别结果。

 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. 百度语音识别开放平台SDK用法

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zpf8861/article/details/30229039 百度Android语音识别SDK分在 ...

  2. 发现最新版百度Android 定位SDK v6.1.3 网络定位bug

    对于百度地图已经实在忍无可忍了,实验室两年以前的一个项目用到了百度地图,以前师兄毕业了,我来维护这个破项目,百度地图推出新版本出来后,老版本的api不能用了,不能做到向下兼容吗?换掉少量的api也就算 ...

  3. Android开发中Bundle用法包裹数据(转)

    Android开发中Bundle用法包裹数据 Bundle的经典用法,包裹数据放入Intent中,目的在于传输数据. SDK 里是这样描述: A mapping from String values ...

  4. Android 视频直播 SDK

    Android 视频直播 SDK接入说明 一.名词解释 分辨率:用于计算机视频处理的图像,以水平和垂直方向上所能显示的像素数来表示分辨率.常见视频分辨率的有1080P即1920x1080,720P即1 ...

  5. 从getApplicationContext和getApplication再次梳理Android的Application正确用法

    原文地址http://blog.csdn.net/ly502541243/article/details/52105466 原文地址http://blog.csdn.net/ly502541243/a ...

  6. 三个小白是如何在三个月内搭一个基于kaldi的嵌入式在线语音识别系统的

    前面的博客里说过最近几个月我从传统语音(语音通信)切到了智能语音(语音识别).刚开始是学语音识别领域的基础知识,学了后把自己学到的写了PPT给组内同学做了presentation(语音识别传统方法(G ...

  7. android的logcat详细用法

    Android日志系统提供了记录和查看系统调试信息的功能.日志都是从各种软件和一些系统的缓冲区中记录下来的,缓冲区可以通过 logcat 命 令来查看和使用. 使用logcat命令 你可以用 logc ...

  8. 大叔也说Xamarin~Android篇~支付宝SDK的集成

    回到目录 首先做为支付宝SDK它提供了多种平台,网页版,wap版,IOS版,android版等等,今天主要说一下在xamarin里使用android平台的sdk的方法,在网上介绍这块的文章不多,大叔本 ...

  9. android 在线升级借助开源中国App源码

    android 在线升级借助开源中国App源码 http://www.cnblogs.com/luomingui/p/3949429.html android 在线升级借助开源中国App源码分析如下: ...

随机推荐

  1. 利用Session完成用户的登录和注销

    用户的登录和注销是最常见的Web应用案例,当一个应用的客户登录了以后,其他所有的会话都得知道这个用户已经登录还很有可能得提取用户的昵称予以显示等等,所以,只有把登录成功的用户的信息放入到Session ...

  2. No value for key [org.hibernate.impl.SessionFactoryImpl 异常解决

    使用Hibernate+Spring进行CRUD操作时.出现例如以下类似异常信息: java.lang.IllegalStateException: No value for key [org.hib ...

  3. C10K——千万级并发实现的秘密:内核不是解决方案,而是问题所在!(转)

    既然我们已经解决了 C10K并发连接问题,应该如何提高水平支持千万级并发连接?你可能会说不可能.不,现在系统已经在用你可能不熟悉甚至激进的方式支持千万级别的并发连接. 要知道它是如何做到的,我们首先要 ...

  4. 〖Eclipse〗Eclipse实现类似于YouCompleteMe补全插件的tab选择,shift+tab反向选择,空格、回车、点号等结束选择。

    1.增加Eclipse的提示功能 在Eclipse中,从Window -> preferences -> Java -> Editor -> Content assist -& ...

  5. Redis学习(7)-通用命令

    keys pattern: 获取所有与pattern匹配的key,返回所有与该key匹配的keys. 通配符: *表示任意一个或多个字符串. ?表示一个字符. 例如: 查询所有的key:keys * ...

  6. MySQL-SQL语句中SELECT语句的执行顺序

    SELECT语句的执行顺序大家比较少关注,下面将为您详细介绍SQL语句中SELECT语句的执行顺序,供您参考,希望对您能够有所帮助. SELECT语句的执行的逻辑查询处理步骤: (8)SELECT ( ...

  7. vc 6.0 的sdk下载地址

    很多人在为vc6.0sdk版本太老发愁吧,今天在晚上找了半天,终于找到了下载的地方,和大家分享一下. Windows Server 2003 Platform SDKLast Updated: Feb ...

  8. 使用 Eclipse 远程调试 Java 应用程序

    Eclipse 中的远程调试特性 Eclipse 是一个图形化 Java 调试器前端.JDI 在 org.eclipse.jdt.debug 包中实现.本文不详细讨论 JDI 实现.参见 参考资料 获 ...

  9. Accounting_会计基础知识

    作为企业的财务人员,必须拥有一些技能和财务方面的知识,本文就所讲述的是财务岗位必须掌握的知识总结,仅供参考. 1.账面价值.账面余额和账面净值 账面价值是指某科目(通常是资产类科目)的账面余额减去相关 ...

  10. Unix环境高级编程(十九)终端I/O

    终端I/O应用很广泛,用于终端.计算机之间的直接连线.调制解调器以及打印机等等.终端I/O有两种不同的工作模式: (1)规范模式输入处理:终端输入以行为单位进行处理,对于每个读要求,终端驱动程序最多返 ...