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