Android 集成科大訊飛語音識別

項目中集成科大訊飛語音識別以及隨着語音分貝的大小,聲紋波動動畫的效果,整個效果圖如下:


以下爲項目中加入語音識別模塊的流程及需要注意的問題:

1.根據科大訊飛平臺的文檔介紹,將科大訊飛語音接入項目,文檔鏈接如下:
http://www.xfyun.cn/doccenter/awd

2.項目中只需要用到語音識別,這部分有兩個類:
RecognizerDialog:識別語音功能,該類啓動之後具有科大訊飛提供的UI,RecognizerDialogListener爲其監聽類

recognizerDialog.setListener(mRecognizerDialogListener);
recognizerDialog.show();
上段代碼用於設置其監聽類,返回語音識別結果

SpeechRecognizer:識別語音,該類與RecognizerDialog區別在於,不提供UI界面,RecognizerListener爲其監聽類

 int ret=speechRecognizer.startListening(mRecognizerListener);
                        if (ret!=ErrorCode.SUCCESS){//此時聽寫失敗
                            showTip("聽寫失敗,錯誤碼:"+ret);
                        }
ret爲返回碼,判斷監聽狀態

兩個類中,只需要用到其中一個即可,若兩個同時用到,則SpeechRecognizer會被覆蓋,在其監聽類中回調接口中,結果不完全。

3.使用語音識別時,點擊按鈕啓動相關類之後,直接說話即可,不需要長按按鈕;但是用到的一般都是類似微信語音的模式,長按發送語音,因此Demo中仿照微信語音的模式,具體代碼如下:

  //按住說話
        btn_start_voice.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                switch (motionEvent.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        Log.i(TAG,"ACTION_DOWN");

                        mIatResults.clear();
                        setSpeechParam();

                        int ret=speechRecognizer.startListening(mRecognizerListener);
                        if (ret!=ErrorCode.SUCCESS){//此時聽寫失敗
                            showTip("聽寫失敗,錯誤碼:"+ret);
                        }

                        break;
                    case MotionEvent.ACTION_UP:
                        Log.i(TAG,"ACTION_UP");
                        speechRecognizer.stopListening();
                        break;
                }
                return true;
            }
        });

上述代碼即可實現長按識別語音,在鬆開按鈕時,調用speechRecognizer.stopListening();即可,若調用speechRecognizer.cancel();則在其監聽類中無回調結果;

4.聲紋波動動畫,在Android Studio項目中的buidle.gradle文件中,配置compile 'com.carlos.voiceline:mylibrary:1.0.6'即可使用該控件,xml文件如下:

 <com.carlos.voiceline.mylibrary.VoiceLineView
        android:id="@+id/voicLine"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1.5"
        android:background="@android:color/white"
        voiceView:maxVolume="60"
        voiceView:middleLine="@android:color/black"
        voiceView:middleLineHeight="1dp"
        voiceView:fineness="three"
        voiceView:rectSpace="2dp"
        voiceView:rectWidth="5dp"
        voiceView:sensibility="four"
        voiceView:viewMode="line"
        voiceView:lineSpeed="90"
        voiceView:voiceLine="@android:color/holo_green_dark" />

maxVolume爲最大波動值,源碼中根據該值與輸入的語音分貝大小計算波動幅度;sensibility爲聲音敏感度的檢測,“five”爲最高,(1-5 設置時均爲對應的英文設置)

5.聲紋波動設置:voicLine.setVolume();此句設置聲紋波動;開始使用MediaRecorder類來獲取錄入語音的分貝值大小,但是在部分手機上會由於MediaRecorder佔用了錄音資源而導致科大訊飛啓動錄音失敗。

具體Demo代碼在已上傳到資源,下載後將在科大訊飛平臺申請的APPID,在Application裏面替代即可。






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章