androidstudio项目,可以给任何应用添加讯飞语音功能,步骤比较繁琐,忘了哪一步都会导致语音无法输出或者识别,所以记录下来。
一,给项目中添加讯飞jar包,msc.jar,sunflower.jar都可以从讯飞demo里面获取
二,在app/src/main/新建jniLibs目录,把.so文件copy到目录下面
三,给添加解析Json数据文件JsonParser.java
四,在AndroidMainifest.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” /><!–WRITE_EXTERNAL_STORAGE–><uses-permission android:name=“android.permission.WRITE_EXTERNAL_STORAGE”/> 五,修改代码,初始化
SpeechUtility.createUtility(this, SpeechConstant.APPID + “=XXXXX”); XXXX为你在讯飞上申请的APPID 六,在主Activity中添加语音识别函数代码 public void speaktowords(View view){ System.out.println(“**temp*speaktowords\n”); //1.创建SpeechRecognizer对象,第二个参数:本地听写时传InitListener SpeechRecognizer mIat= SpeechRecognizer.createRecognizer(this, null); //2.设置听写参数,详见《科大讯飞MSC API手册(Android)》SpeechConstant类 mIat.setParameter(SpeechConstant.DOMAIN, “iat”);//应用领域 mIat.setParameter(SpeechConstant.LANGUAGE, “zh_cn”);//中文 mIat.setParameter(SpeechConstant.ACCENT, “mandarin”);//普通话 // 设置听写引擎 mIat.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD); // 设置返回结果格式 mIat.setParameter(SpeechConstant.RESULT_TYPE, “json”); // 设置语音前端点:静音超时时间,即用户多长时间不说话则当做超时处理 mIat.setParameter(SpeechConstant.VAD_BOS, “3000”); // 设置语音后端点:后端点静音检测时间,即用户停止说话多长时间内即认为不再输入, 自动停止录音 mIat.setParameter(SpeechConstant.VAD_EOS, “2000”); // 设置标点符号,设置为”0″返回结果无标点,设置为”1″返回结果有标点 mIat.setParameter(SpeechConstant.ASR_PTT, “0”); RecognizerListener mRecoListener = new RecognizerListener() { @Override public void onVolumeChanged(int i, byte[] bytes) { } @Override public void onBeginOfSpeech() { System.out.println(“**temp,onBeginOfSpeech:”+speechtext); } @Override public void onEndOfSpeech() { } @Override public void onResult(RecognizerResult recognizerResult, boolean b) { speechtext = printResult(recognizerResult); } @Override public void onError(SpeechError speechError) { } @Override public void onEvent(int i, int i1, int i2, Bundle bundle) { } }; //3.开始听写 mIat.startListening(mRecoListener); } //语音合成代码 public void readText(String txt){ SpeechSynthesizer mTts = SpeechSynthesizer.createSynthesizer(FuncWifi.this,null); mTts.setParameter(SpeechConstant.ENGINE_TYPE,SpeechConstant.TYPE_CLOUD); mTts.setParameter(SpeechConstant.VOICE_NAME,“vixq”); mTts.setParameter(SpeechConstant.SPEED,“80”); mTts.setParameter(SpeechConstant.VOLUME,“100”); SynthesizerListener mTtsListener = new SynthesizerListener() { @Override public void onSpeakBegin() { } @Override public void onBufferProgress(int i, int i1, int i2, String s) { } @Override public void onSpeakPaused() { } @Override public void onSpeakResumed() { } @Override public void onSpeakProgress(int i, int i1, int i2) { } @Override public void onCompleted(SpeechError speechError) { } @Override public void onEvent(int i, int i1, int i2, Bundle bundle) { } }; mTts.startSpeaking(txt,mTtsListener);}
七,在主Activity中添加解析json数据函数代码
//输出结果private String printResult(RecognizerResult results) { String text = JsonParser.parseIatResult(results.getResultString()); String sn = null; // 读取json结果中的sn字段 try { JSONObject resultJson = new JSONObject(results.getResultString()); sn = resultJson.optString(“sn”); Log.e(“**Json**”,sn); } catch (JSONException e) { e.printStackTrace(); } //mIatResults,HasMap,存储听写结果 mIatResults.put(sn, text); StringBuffer resultBuffer = new StringBuffer(); for (String key : mIatResults.keySet()) { resultBuffer.append(mIatResults.get(key)); Log.e(“**key**”,key); } mIatResults.clear(); return resultBuffer.toString();}
————–
本程序所需权限可能无法通过AndroidManifest.xml文件获取,所以还得通过手机的权限管理给你自己的应用授予信任权限,否则得不到权限可能会闪退。
添加变量
private HashMap<String,String> mIatResults = new HashMap<String,String>();private String speechtext;
JsonParser.java,Msc.jar,Sunflower.jar在我的百度网盘下载
https://pan.baidu.com/s/1qXTOeni