1. 程式人生 > >訊飛語音語音識別輔助類

訊飛語音語音識別輔助類

個人網站:極客時代

下面貼出訊飛語音識別的輔助類:

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中顯示出來。