百度Android语音识别SDK分在线与离线两种,这篇文章介绍在线SDK的使用方法。
在线SDK是以JAR包和动态链接库形式发布和使用,可以从百度开放云平台网站中下载SDK及使用说明文档。
点击管理控制台,选择
2、申请开启语音识别服务 ,选择媒体云---语音识别,点击申请开启服务,填写理由。
等待对接成功
3、使用语音识别SDK前的准备
声明权限
[java]
view plain copy
"android.permission.RECORD_AUDIO"
/>
/>
/>
/>
/>
/>
/>
/>
/>
4、语音识别
语音识别控件方式
[java]
view plain copy
if
(mDialog==
null
||mCurrentTheme!=Config.DIALOG_THEME){
mCurrentTheme=Config.DIALOG_THEME;
if
(mDialog!=
null
){
mDialog.dismiss();
}
Bundleparams= 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
静音超时后将“取消”按钮替换为“帮助”
设置回调方法,处理返回的结果
[java]
view plain copy
mRecognitionListener=
new
DialogRecognitionListener(){
@Override
public
void
onResults(Bundleresults){
ArrayListrs=results!= null
?results
.getStringArrayList(RESULTS_RECOGNITION): null
;
if
(rs!=
null
&&rs.size()>
0
){
mResult.setText(rs.get( 0
));
}
}
};
API方式
首先需要配置语音识别引擎ASREngine的参数VoiceRecognitionConfig
[java]
view plain copy
VoiceRecognitionConfigconfig=
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); //设置采样率,需要与外部音频一致
然后启动识别
[java]
view plain copy
int
code=mASREngine.startVoiceRecognition(mListener,config);
其中mListener是识别过程的回调,需要对其中的方法进行实现
[java]
view plain copy
/**
*重写用于处理语音识别回调的监听器
*/
class
MyVoiceRecogListener
implements
VoiceClientStatusChangeListener{
@Override
public
void
onClientStatusChange(
int
status,Objectobj){
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,Objectobj){
//这里不做任何操作不影响简单识别
}
}
获得识别BDVRClient对象
[java]
view plain copy
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在开始识别后,会启动录音、预处理、上传到服务器并获取识别结果。
[java]
view plain copy
int
code=mASREngine.startVoiceRecognition(mListener,config);
if
(code!=VoiceRecognitionClient.START_WORK_RESULT_WORKING){
mResult.setText(getString(R.string.error_start,code));
}
取消语音识别
如果觉得《android语音识别sdk接入收费吗 百度语音识别开放平台SDK使用方法》对你有帮助,请点赞、收藏,并留下你的观点哦!