訊飛語音語音識別輔助類
阿新 • • 發佈:2018-12-31
個人網站:極客時代
下面貼出訊飛語音識別的輔助類:
使用方法:package com.Ray.assistwModel; import java.net.ContentHandler; import java.security.PublicKey; import com.Ray.assistwhelpclass.JsonParser; import com.iflytek.cloud.ErrorCode; import com.iflytek.cloud.InitListener; import com.iflytek.cloud.RecognizerListener; import com.iflytek.cloud.RecognizerResult; import com.iflytek.cloud.SpeechConstant; import com.iflytek.cloud.SpeechError; import com.iflytek.cloud.SpeechRecognizer; import com.iflytek.cloud.ui.RecognizerDialog; import com.iflytek.cloud.ui.RecognizerDialogListener; import android.R.string; import android.content.Context; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; public class ListenContent { private static String TAG="ListenContent"; //上下文 private Context myContext; //語音聽寫物件 private static SpeechRecognizer mIat; //語音聽寫UI,在進行聽寫的時候會出現此UI private RecognizerDialog iatDialog; //聽寫結果內容 private EditText mResultText; private String resultText=""; //private Toast mToast=Toast.makeText(myContext, "", Toast.LENGTH_SHORT); public String getResultText() { return resultText; } public void setResultText(String text) { this.resultText+=text; } /* * 構造方法 * @param context */ public ListenContent(Context context){ //上下文 myContext=context; //初始化識別物件 mIat=SpeechRecognizer.createRecognizer(myContext,new InitListener() { //初始化監聽器 @Override public void onInit(int code) { // TODO Auto-generated method stub Log.d(TAG, "SpeechRecognizer init() code = "+code); if(code!=ErrorCode.SUCCESS){ //showTip("初始化失敗,錯誤碼:"+code); Toast.makeText(myContext, "語音合成失敗,錯誤碼: " + code, Toast.LENGTH_SHORT).show(); } } }); //初始化Dialog iatDialog=new RecognizerDialog(myContext, new InitListener() { //初始化監聽器 @Override public void onInit(int code) { // TODO Auto-generated method stub Log.d(TAG, "SpeechRecognizer init() code = "+code); if(code!=ErrorCode.SUCCESS){ Log.d(TAG, "here2"); //showTip("初始化失敗,錯誤碼:"+code); Toast.makeText(myContext, "語音合成失敗,錯誤碼: " + code, Toast.LENGTH_SHORT).show(); } } }); } int ret=0;//函式呼叫返回值 //開始聽寫 public void Listening(EditText myResultText){ Log.e(TAG, "here"); setParam(); // iatDialog.setListener(recognizerDialogListener); // iatDialog.show(); //showTip("開始聽寫"); mResultText=myResultText; Log.e(TAG, "開始聽寫"); ret=mIat.startListening(recognizerListener); if(ret!=ErrorCode.SUCCESS){ //showTip("聽寫失敗,錯誤碼:"+ret); Toast.makeText(myContext, "語音合成失敗,錯誤碼: " + ret, Toast.LENGTH_SHORT).show(); } //return resultText; } /* * 聽寫監聽器 */ private RecognizerListener recognizerListener=new RecognizerListener() { @Override public void onBeginOfSpeech(){ //showTip("開始說話"); Log.e(TAG, "開始說話"); } @Override public void onResult(RecognizerResult results, boolean isLast) { // TODO Auto-generated method stub String text=JsonParser.parseIatResult(results.getResultString()); //Log.e(TAG, text); // mResultText.append(text); // mResultText.setSelection(mResultText.length()); //resultText+=text; setResultText(text); if(isLast){ //TODO最後的結果 Log.e(TAG, resultText); mResultText.append(resultText); mResultText.setSelection(mResultText.length()); } } @Override public void onVolumeChanged(int volume){ //showTip("當前正在說話,音量大小:"+volume); Log.e(TAG, "當前正在說話,音量大小:"+volume); } @Override public void onEvent(int arg0, int arg1, int arg2, Bundle arg3) { // TODO Auto-generated method stub } @Override public void onError(SpeechError error) { // TODO Auto-generated method stub //showTip(error.getPlainDescription(true)); Log.e(TAG, error.getPlainDescription(true)); } @Override public void onEndOfSpeech() { // TODO Auto-generated method stub //showTip("結束說話"); Log.e(TAG, "結束說話"); } }; /** * 聽寫UI監聽器 */ private RecognizerDialogListener recognizerDialogListener=new RecognizerDialogListener(){ public void onResult(RecognizerResult result, boolean isLast) { Log.d(TAG, "recognizer result:" + result.getResultString()); String text = JsonParser.parseIatResult(result.getResultString()); // mResultText.append(text); Log.e(TAG, text); // mResultText.setSelection(mResultText.length()); resultText=text; } /** * 識別回撥錯誤. */ public void onError(SpeechError error) { //showTip(error.getPlainDescription(true)); Log.e(TAG, error.getPlainDescription(true)); } }; // private void showTip(final String str) // { // mToast.setText(str); // mToast.show(); // } /** * 引數設定 * @param param * @return */ public void setParam(){ // 清空引數 mIat.setParameter(SpeechConstant.PARAMS, null); String lag = "mandarin"; // 設定引擎 mIat.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD); if (lag.equals("en_us")) { // 設定語言 mIat.setParameter(SpeechConstant.LANGUAGE, "en_us"); }else { // 設定語言 mIat.setParameter(SpeechConstant.LANGUAGE, "zh_cn"); // 設定語言區域 mIat.setParameter(SpeechConstant.ACCENT,lag); } // 設定語音前端點 mIat.setParameter(SpeechConstant.VAD_BOS, "4000"); // 設定語音後端點 mIat.setParameter(SpeechConstant.VAD_EOS, "1000"); // 設定標點符號 mIat.setParameter(SpeechConstant.ASR_PTT, "1"); // 設定音訊儲存路徑 mIat.setParameter(SpeechConstant.ASR_AUDIO_PATH, Environment.getExternalStorageDirectory()+"/iflytek/wavaudio.pcm"); } }
宣告一個該類的物件,傳入context物件:ListenContent listenContent=new ListenContent(getActivity());
呼叫Listening方法:listenContent.Listening(myResultText);// myResultText是EditText型別的物件,識別出的內容會寫入這個EditText中顯示出來。