天天看點

【記錄】科大訊飛語音控件的使用——Android Studio

##一、将libs檔案夾移至Android Studio的Project的根目錄下

将科大訊飛提供的SDK中的libs檔案夾直接拖拽至Android Studio的Project的根目錄下

【記錄】科大訊飛語音控件的使用——Android Studio
【記錄】科大訊飛語音控件的使用——Android Studio

##二、導入xxx.jar檔案

其實.jar檔案已經存在于libs檔案夾下了,不過此時它并不會随工程一起編譯,是以我們還需要做一些設定。

設定方法很簡單,如下圖所示:

【記錄】科大訊飛語音控件的使用——Android Studio

##三、導入xxx.so檔案

其實.so檔案已經存在于libs檔案夾下了,不過此時它并不會随工程一起編譯,是以我們還需要做一些設定。

設定方法很簡單在build.gradle中添加如下代碼即可

sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }
           

完整檔案如下圖:

【記錄】科大訊飛語音控件的使用——Android Studio

##四、初始化語音控件

檔案:App.java

// 建立全局執行個體
SpeechUtility.createUtility(App.this, "appid=" + getString(R.string.app_id));
// 關閉MSC Log
Setting.setShowLog(false);

           
檔案:MainActivity.java

//語音控件
private SpeechUnderstander mSpeechUnderstander;  // 語義了解對象(語音到語義)
private TextUnderstander mTextUnderstander;      // 語義了解對象(文本到語義)
private SpeechRecognizer mIat;  				 // 語音聽寫對象
private SpeechSynthesizer mTts;  				 // 語音合成對象

/*
	 * 初始化語音控件
	 */
	private void initVoice() {
		
		// 初始化語義了解對象(語音到語義)
		mSpeechUnderstander = SpeechUnderstander.createUnderstander(MainActivity.this, mSpeechUdrInitListener);
		
		// 初始化語義了解對象(文本到語義)
		mTextUnderstander =  TextUnderstander.createTextUnderstander(MainActivity.this, textUnderstanderListener);
		
		// 初始化語音合成對象
		mTts = SpeechSynthesizer.createSynthesizer(MainActivity.this, mTtsInitListener);

		// 初始化語音識别對象
		mIat = SpeechRecognizer.createRecognizer(MainActivity.this, mInitListener);
		
		// 語音識别參數設定
		setRecognizerParam();
		
		// 語音合成參數設定
		setTtsParam();
		
	}


/***start*************************************語音控件初始化回調**************************************************/

	/**
     * 初始化語義了解監聽器(語音到語義)
     */
    
private InitListener mSpeechUdrInitListener = new InitListener() {
    	
		@Override
		public void onInit(int code) {
			Log.d(TAG, "speechUnderstanderListener init() code = " + code);
			if (code != ErrorCode.SUCCESS) {
        		showTip("初始化失敗,錯誤碼:"+code);
        	}			
		}
    };
    
    
    /**
     * 初始化監聽器(文本到語義)
     */
    
   private InitListener textUnderstanderListener = new InitListener() {

		@Override
		public void onInit(int code) {
			Log.d(TAG, "textUnderstanderListener init() code = " + code);
			if (code != ErrorCode.SUCCESS) {
        		showTip("初始化失敗,錯誤碼:"+code);
        	}	
		}
    };
	
    /**
	 * 初始化語音識别監聽器
	 */

private InitListener mInitListener = new InitListener() {

		@Override
		public void onInit(int code) {
			Log.d(TAG, "SpeechRecognizer init() code = " + code);
			if (code != ErrorCode.SUCCESS) {
				showTip("初始化失敗,錯誤碼:" + code);
			}
		}
	};
	
	
	
	/**
	 * 初始化語音合成監聽
	 */
	
private InitListener mTtsInitListener = new InitListener() {
		@Override
		public void onInit(int code) {
			Log.d(TAG, "InitListener init() code = " + code);
			if (code != ErrorCode.SUCCESS) {
        		showTip("初始化失敗,錯誤碼:"+code);
        	} else {
				// 初始化成功,之後可以調用startSpeaking方法
        		// 注:有的開發者在onCreate方法中建立完合成對象之後馬上就調用startSpeaking進行合成,
        		// 正确的做法是将onCreate中的startSpeaking調用移至這裡
        		
//        		mTts.startSpeaking("小朋友", mTtsListener);
			}		
		}
	};
	
	
/***end*************************************語音控件初始化回調****************************************************/

           

##五、語音控件的使用

/**
 * 使用語音合成
 */
 
mTts.startSpeaking("需要合稱為語音的文本", mTtsListener);

/**
 * 使用語音識别
 */

ret = mIat.startListening(mRecognizerListener);
if (ret != ErrorCode.SUCCESS) {
	showTip("聽寫失敗,錯誤碼:" + ret);
} else {
	showTip("請開始說話…");
}


/**
 * 使用語義了解(語音到語義)
 */
 
if(mSpeechUnderstander.isUnderstanding()){// 開始前檢查狀态
					mSpeechUnderstander.stopUnderstanding();
					mMyHandler.obtainMessage(0, "停止錄音").sendToTarget();
					}else {
						ret = mSpeechUnderstander.startUnderstanding(mSpeechUnderstanderListener);
						if(ret != 0){
							
							showTip("語義了解失敗,錯誤碼:"	+ ret);
						}else {
							showTip("請開始說話…");
						}
					}

/**
 * 使用語義了解(文本到語義)
 */

if(mTextUnderstander.isUnderstanding()){
					mTextUnderstander.cancel();
					showTip("取消");
				}else {
					ret = mTextUnderstander.understandText("需要語義了解的文本", textListener);
					if(ret != 0)
					{
						showTip("語義了解失敗,錯誤碼:"+ ret);
					}
				}
	
/***start*************************************語音控件回調****************************************************/
	/**
	 * 語音合成回調
	 */
	private SynthesizerListener mTtsListener = new SynthesizerListener() {
		
		

		@Override
		public void onSpeakResumed() {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void onSpeakProgress(int arg0, int arg1, int arg2) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void onSpeakPaused() {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void onSpeakBegin() {
			
			System.out.println("開始播放");
		
		}
		
		@Override
		public void onEvent(int arg0, int arg1, int arg2, Bundle arg3) {
			
		}
		
		@Override
		public void onCompleted(SpeechError error) {
			
			System.out.println("播放完成");
			if (atEnterWakeup) {
				atEnterWakeup = false;
				new SemanticUnderstand("WithoutHello").start();
			}else {
				new SemanticUnderstand(null).start();
			}
			
			
			
		}
		
		@Override
		public void onBufferProgress(int arg0, int arg1, int arg2, String arg3) {
			// TODO Auto-generated method stub
			
		}
	};
	
	
	/**
	 * 語音識别回調
	 */

private RecognizerListener mRecognizerListener = new RecognitionListener() {
		
		@Override
		public void onRmsChanged(float rmsdB) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void onResults(Bundle results) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void onReadyForSpeech(Bundle params) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void onPartialResults(Bundle partialResults) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void onEvent(int eventType, Bundle params) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void onError(int error) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void onEndOfSpeech() {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void onBufferReceived(byte[] buffer) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void onBeginningOfSpeech() {
			// TODO Auto-generated method stub
			
		}
	};

/**
 * 語義了解回調(語音到語義)
 */

private SpeechUnderstanderListener mSpeechUnderstanderListener = new SpeechUnderstanderListener() {
		
		@Override
		public void onVolumeChanged(int arg0, byte[] arg1) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void onResult(UnderstanderResult arg0) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void onEvent(int arg0, int arg1, int arg2, Bundle arg3) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void onError(SpeechError arg0) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void onEndOfSpeech() {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void onBeginOfSpeech() {
			// TODO Auto-generated method stub
			
		}
	};
	
/**
 *語音了解回調(文本到語義)
 */

private TextUnderstanderListener textListener= new TextUnderstanderListener() {
		
		@Override
		public void onResult(UnderstanderResult arg0) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void onError(SpeechError arg0) {
			// TODO Auto-generated method stub
			
		}
	};

/***end*************************************語音控件回調****************************************************/
           

更多精彩資訊,請掃碼關注。

【記錄】科大訊飛語音控件的使用——Android Studio