作為移動互連網殺手級的互動方式,語音辨識從問世以來就一直備受人們的關注,從IOS的Siri到國內的訊飛語音,語音辨識技術在移動開發領域是最為充滿前景和希望的技術。Android作為一個移動作業系統,其本身就繼承了Google天生的搜尋基因,因此Android對於語音辨識和語音合成本身是具有較好的支援的。然而由於種種原因,在我天朝上國,Android的大量特性只能淪為紙上談兵。而作為未來人機互動的新模式,中文語音辨識技術本身門檻相對較高,這不禁令許多開發人員望而卻步。不過,目前國內已經出現了一些提供語音辨識相關技術服務的廠商,通過瞭解目前國內語音辨識技術的現狀,可以協助我們在開發語音辨識相關應用的過程中選擇一個較為合適的方向。那麼目前國內較為著名的兩家提供語音辨識技術的廠商分別是科大訊飛和百度,並且兩家廠商都開放了相應的API介面,通過API介面我們可以輕鬆地在自己的應用中實現語音辨識。科大訊飛提供了從文本合成到語音辨識等一系列的解決方案,而百度則僅提供了語音辨識的相關解決方案。具體的情況大家可以從下面的地址瞭解:
做好前面的準備工作後,我們就可以開始今天的學習了。首先讓我們來建立一個Android項目,並在項目中引入百度語音的jar庫檔案:VoiceRecognition-1.2.jar,然後在AndroidManifest.xml檔案中加入下面的許可權:
然後我們做一個簡單的布局,一個Button按鈕,一個文字框:
在這篇文章中我們只是對百度語音做一個初步的瞭解,因此我們今天採取的方式是直接調用百度為我們封裝好的一個語音辨識對話方塊類BaiduASRDigitalDialog,我們一起來看代碼:
package com.Android.BaiduVoice;import java.util.ArrayList;import com.baidu.voicerecognition.android.ui.BaiduASRDigitalDialog;import com.baidu.voicerecognition.android.ui.DialogRecognitionListener;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;public class MainActivity extends Activity { //開始按鈕 private Button BtnStart;//文字框private EditText InputBox;//百度語音辨識對話方塊private BaiduASRDigitalDialog mDialog=null;private DialogRecognitionListener mDialogListener=null;//應用授權資訊 ,這裡使用了官方SDK中的參數,如果需要,請自行申請,並修改為自己的授權資訊 private String API_KEY=8MAxI5o7VjKSZOKeBzS4XtxO;private String SECRET_KEY=Ge5GXVdGQpaxOmLzc8fOM8309ATCz9Ha;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main); if (mDialog == null) { if (mDialog != null) { mDialog.dismiss(); } Bundle params = new Bundle(); //設定API_KEY, SECRET_KEY params.putString(BaiduASRDigitalDialog.PARAM_API_KEY, API_KEY); params.putString(BaiduASRDigitalDialog.PARAM_SECRET_KEY, SECRET_KEY); //設定語音辨識對話方塊為藍色高亮主題 params.putInt(BaiduASRDigitalDialog.PARAM_DIALOG_THEME, BaiduASRDigitalDialog.THEME_BLUE_LIGHTBG); //執行個體化百度語音辨識對話方塊 mDialog = new BaiduASRDigitalDialog(this, params); //設定百度語音辨識回調介面 mDialogListener=new DialogRecognitionListener() {@Overridepublic void onResults(Bundle mResults) {ArrayList rs = mResults != null ? mResults.getStringArrayList(RESULTS_RECOGNITION) : null; if (rs != null && rs.size() > 0) { InputBox.setText(rs.get(0)); }} }; mDialog.setDialogRecognitionListener(mDialogListener); }//設定語音辨識模式為輸入模式 mDialog.setSpeechMode(BaiduASRDigitalDialog.SPEECH_MODE_INPUT); //禁用語義識別 mDialog.getParams().putBoolean(BaiduASRDigitalDialog.PARAM_NLU_ENABLE, false); //介面元素BtnStart=(Button)findViewById(R.id.BtnStart);InputBox=(EditText)findViewById(R.id.InputBox);BtnStart.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) { mDialog.show();}});}}這樣,我們就實現了在我們的應用中實現語音辨識的目的,感覺還是蠻簡單的啊,呵呵,下面給出程式運行:
通過這種方式調用百度語音十分地簡單,但是難以滿足個人化定製的需求,官方預設為我們提供過了8種色彩配置,如果這8種色彩配置還不能滿足我們實際需求的話,那麼就需要我們以百度語音提供的API自行定製,具體的內容大家可以繼續關注我的部落格,在下一篇文章中,我們將以百度語音API為基礎來實現自己的語音辨識介面,感謝大家關注!
原始碼下載