1. 程式人生 > >整合科大訊飛語音聽寫功能

整合科大訊飛語音聽寫功能

一、準備工作
1.建立應用,並獲取appId;
2.下載科大訊飛語音聽寫功能的jar包和so包(http://www.xfyun.cn/sdk/dispatcher);
3.將jar包新增到libs中(記得libs的jar包右鍵Add As Library
這裡寫圖片描述
4.將so包新增到jniLibs中
這裡寫圖片描述

好了,準備工作已經完成了。。。。接下來開始整合

二、開始整合
1.在Manifests檔案中新增許可權

2.初始化SDK
這裡寫圖片描述

3.在具體實現只能語音功能中,科大訊飛提供了兩種方式。
(1)自定義語音輸入UI介面
(2)使用科大訊飛的語音輸入的UI介面(次方式比較操蛋,dialog上有科大訊飛的廣告,而且不能去掉)
下面先介紹自定義UI的方式實現語音聽寫:

(1)初始化監聽器
這裡寫圖片描述
(2)建立SpeechRecognizer物件
這裡寫圖片描述
(3)建立聽寫監聽器

/**
 * 聽寫監聽器。
 */
private RecognizerListener recognizerListener = new RecognizerListener() {
    @Override
    public void onVolumeChanged(int num, byte[] bytes) {
       //根據音量的大小改變dialog話筒的變化   num為音量的大小
        if (num>0 && num <=5){
            dialogManager.updateVoiceLevel(num);
        }else{
            num = 1;
            dialogManager.updateVoiceLevel(num);
        }
    }
    @Override
    public void onBeginOfSpeech() {
        //開始說話
        dialogManager.showRecordingDialog();
    }

    @Override
    public void onEndOfSpeech() {
        //結束說話
        dialogManager.dimissDialog();
    }

    @Override
    public void onResult(RecognizerResult recognizerResult, boolean isLast) {
        if (!recognizerResult.getResultString().isEmpty()) {
            UniSoundConfig.printResult(recognizerResult, mIatResults, editText);
        }

        if (isLast) {
            // 最後的結果
        }
    }

    @Override
    public void onError(SpeechError speechError) {
        //識別錯誤
        if (speechError.getErrorCode() == 14002) {
            dialogManager.tooShort("請確認是否已開通翻譯功能");
        } else if (speechError.getErrorCode() == 10081) {
            dialogManager.tooShort("您沒有說話");
        }
    }

    @Override
    public void onEvent(int i, int i1, int i2, Bundle bundle) {

    }
};

(4)設定相關屬性
這裡寫圖片描述
(5)解析並列印語音輸入
這裡寫圖片描述

如果直接使用訊飛提供聽寫UI,則不需要建立SpeechRecognizer物件,而是建立RecognizerDialog物件,並且聽寫監聽器也得用RecognizerDialogListener監聽器

(1)建立RecognizerDialog物件

 mRecognizerDialog = new RecognizerDialog(context, mInitListener);

(2)建立RecognizerDialogListener監聽器

private RecognizerDialogListener mRecognizerDialogListener = new RecognizerDialogListener() {

    @Override
    public void onResult(RecognizerResult results, boolean isLast) {
        // TODO Auto-generated method stub
        if (!results.getResultString().isEmpty()) {
            UniSoundConfig.printResult(results, mIatResults, editText);
        }

        if (isLast) {
            // 最後的結果
        }
    }

    @Override
    public void onError(SpeechError error) {
        // TODO Auto-generated method stub
        if (error.getErrorCode() == 14002) {
            Toast.makeText(context, error.getPlainDescription(true)
                    + "\n請確認是否已開通翻譯功能", Toast.LENGTH_SHORT);
        } else {
            Toast.makeText(context, error.getPlainDescription(true),
                    Toast.LENGTH_SHORT);
        }
    }
};

以上就是整合科大訊飛語音聽寫的兩種方式