最近因为公司项目,研究了一下讯飞语音相关接入的技术,实现了讯飞的语音输入和合成输出,发现这真是一个很好玩的东西,下面进入正题
(1),进行这一类开发,需要先进入讯飞语音平台注册,选取你想要接入的技术,下载相应的SDK,获取相应的APPID
(2),将SDKdemo程序lib文件夹下的
这三个文件拷贝到你的项目lib文件下
(3),将demo程序的assets文件夹拷贝到你的项目目录下
(4)好,准备工作基本就绪,下面开始进入正题
在工程中假如权限Androidminifest.xml中
//连接网络的权限
<uses-permission android:name="android.permission.INTERNET"/>
<!-- 获取手机录音机使用的权限 听写识别语义理解需要用到此权限 -->
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<!-- 读取网络信息状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!-- 获取当前WiFi状态 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<!-- 允许程序改变网络连接状态 -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<!-- 读取手机信息权限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!-- 读取联系人权限 -->
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<!-- 获取手机录音机使用的权限 听写识别语义理解需要用到此权限 -->
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<!-- 读取网络信息状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!-- 获取当前WiFi状态 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<!-- 允许程序改变网络连接状态 -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<!-- 读取手机信息权限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!-- 读取联系人权限 -->
<uses-permission android:name="android.permission.READ_CONTACTS"/>
//接下来是初始化语音配置对象
//初始化及创建语音配置对象 其中的APPID对应你自己申请的APPID(这部分代码最好写在oncreat内部)
SpeechUtility.createUtility(MainActivity.this,SpeechConstant.APPID+"=572be963");
SpeechUtility.createUtility(MainActivity.this,SpeechConstant.APPID+"=572be963");
对了 说一下我的布局 ,我是用一个按钮触发的语音输入的方法,你可以根据自己的需要来配置
然后再方法内部进行如下配置
voiceButton.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
// TODO Auto-generated method stub
RecognizerDialog mDialog = new RecognizerDialog(MainActivity.this ,mInitListener);
//2.设置accent、language等参数
mDialog.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
mDialog.setParameter(SpeechConstant.ACCENT, "mandarin");
//若要将UI控件用于语义理解,必须添加以下参数设置,设置之后onResult回调返回将是语义理解
//结果
mDialog.setParameter("asr_sch", "1");
mDialog.setParameter("nlp_version", "2.0");
//3.设置回调接口
mDialog.setListener(mRecognizerDialogListener);
//4.显示dialog,接收语音输入
mDialog.show();
}
});
public void onClick(View arg0) {
// TODO Auto-generated method stub
RecognizerDialog mDialog = new RecognizerDialog(MainActivity.this ,mInitListener);
//2.设置accent、language等参数
mDialog.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
mDialog.setParameter(SpeechConstant.ACCENT, "mandarin");
//若要将UI控件用于语义理解,必须添加以下参数设置,设置之后onResult回调返回将是语义理解
//结果
mDialog.setParameter("asr_sch", "1");
mDialog.setParameter("nlp_version", "2.0");
//3.设置回调接口
mDialog.setListener(mRecognizerDialogListener);
//4.显示dialog,接收语音输入
mDialog.show();
}
});
//因为返回的字段是json 数据,所以还要进行解析,将demo工程的jsonparser拷贝到项目中,下面的解析要用到
//语音输入的方法
private InitListener mInitListener = new InitListener() {
public void onInit(int code) {
if (code == ErrorCode.SUCCESS) {}}
};
//语音输入的方法
private RecognizerDialogListener mRecognizerDialogListener = new RecognizerDialogListener() {
public void onResult(RecognizerResult results, boolean isLast) {
String text = JsonParser.parseIatResult(results.getResultString());
String sn = null;
// 读取json结果中的sn字段
try {
JSONObject resultJson = new JSONObject(results.getResultString());
sn = resultJson.optString("sn");
} catch (JSONException e) {
e.printStackTrace();
}
private InitListener mInitListener = new InitListener() {
public void onInit(int code) {
if (code == ErrorCode.SUCCESS) {}}
};
//语音输入的方法
private RecognizerDialogListener mRecognizerDialogListener = new RecognizerDialogListener() {
public void onResult(RecognizerResult results, boolean isLast) {
String text = JsonParser.parseIatResult(results.getResultString());
String sn = null;
// 读取json结果中的sn字段
try {
JSONObject resultJson = new JSONObject(results.getResultString());
sn = resultJson.optString("sn");
} catch (JSONException e) {
e.printStackTrace();
}
mIatResults.put(sn, text);
StringBuffer resultBuffer = new StringBuffer();
for (String key : mIatResults.keySet()) {
resultBuffer.append(mIatResults.get(key));
}
for (String key : mIatResults.keySet()) {
resultBuffer.append(mIatResults.get(key));
}
mInputMsg.setText(resultBuffer.toString());
Toast.makeText(MainActivity.this, resultBuffer.toString()+"", Toast.LENGTH_SHORT).show();
}
public void onError(SpeechError error) {
//Toast.makeText(getApplication(), error.getPlainDescription(true), Toast.LENGTH_SHORT).show();
}
};
到现在为止语音的输入已经基本完成了,可以根据自己的需要进行完善,刚开始写博客,思维有点乱,以后努力