1. 程式人生 > >【記錄】科大訊飛語音控制元件的使用——Android Studio

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

一、將libs資料夾移至Android Studio的Project的根目錄下

將科大訊飛提供的SDK中的libs資料夾直接拖拽至Android Studio的Project的根目錄下
libs
studio

二、匯入xxx.jar檔案

其實.jar檔案已經存在於libs資料夾下了,不過此時它並不會隨工程一起編譯,所以我們還需要做一些設定。
設定方法很簡單,如下圖所示:
這裡寫圖片描述

三、匯入xxx.so檔案

其實.so檔案已經存在於libs資料夾下了,不過此時它並不會隨工程一起編譯,所以我們還需要做一些設定。

設定方法很簡單在build.gradle中新增如下程式碼即可

source
Sets { main { jniLibs.srcDirs = ['libs'] } }

完整檔案如下圖:
這裡寫圖片描述

四、初始化語音控制元件

檔案: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*************************************語音控制元件回撥****************************************************/