您的位置:首页 > 移动开发 > Android开发

Android科大讯飞语音听写实现

2017-04-04 10:42 621 查看
首先去讯飞平台注册一个应用,因为要用到APPID这个字符串。其实查看一下官方文档更好,每个接口都有很详细的准备工作和代码使用说明。链接:https://www.xfyun.cn/

在这里我就把准备工作再赘述一遍,已结做好准备工作的同学可以直接看使用代码。

工作环境:AndroidStudio

1、导入文件



将两个jar文件放入工程libs文件夹下。

两个jar文件上的7个文件夹里面含有so文件,全部放入工程:在main文件夹下新建jniLibs文件夹,然后将7个文件夹全部放入即可。

还有一些其他的资源文件,比如官方sdk下的assets文件夹下的资源,也需要放入工程:在main文件夹下新建assets文件夹,然后将官方sdk下的assets文件夹里的资源放入即可。



2、添加用户权限

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.W
4000
RITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>


在proguard-rules.pro里添加混淆规则:

-keep class com.iflytek.**{*;}
-keepattributes Signature


3、初始化

在使用语音听写之前,还需先创建语音配置对象,建议放在oncreate方法中,且一定要放在其他语音功能实现之前。

SpeechUtility.createUtility(this,SpeechConstant.APPID+"="+APPID);


接下来是语音听写的实现

private void initSpeech(){
//1、初始化窗口
RecognizerDialog dialog=new RecognizerDialog(MainActivity.this,null);
//2、设置听写参数,详见官方文档
//识别中文听写可设置为"zh_cn",此处为设置英文听写
dialog.setParameter(SpeechConstant.LANGUAGE,"en_us");
dialog.setParameter(SpeechConstant.ACCENT,"mandarin");
//3、开始听写
dialog.setListener(new RecognizerDialogListener() {
@Override
public void onResult(RecognizerResult recognizerResult, boolean b) {
if(!b){
String result=parseVoice(recognizerResult.getResultString());
editText.setText(result);
//Toast.makeText(MainActivity.this,result,Toast.LENGTH_SHORT).show();
}
}

@Override
public void onError(SpeechError speechError) {

}
});
dialog.show();
}
//解析Gson对象
public String parseVoice(String resultString) {
Gson gson =  new Gson();
Voice voiceBean = gson.fromJson(resultString, Voice.class);

StringBuffer sb = new StringBuffer();
ArrayList<Voice.WSBean> ws = voiceBean.ws;
for (Voice.WSBean wsBean : ws) {
String word = wsBean.cw.get(0).w;
sb.append(word);
}
return sb.toString();
}

/**
* 语音对象封装
*/
public class Voice {

public ArrayList<WSBean> ws;

public class WSBean {
public ArrayList<CWBean> cw;
}

public class CWBean {
public String w;
}
}


布局文件中我只使用了一个button和一个edittext,就不贴出来了。button用来响应语音听写的实现,edittext用来显示语音识别的结果。

附:在代码中用到了Gson类,我是通过添加依赖的方法解决的,以下是过程:

(1)在File工具栏中找到Project Structure

(2)切换至app下的Dependencies



(3)点击右边的加号添加依赖,选择第二个添加即可

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: