1. 程式人生 > >訊飛語音Demo—java版

訊飛語音Demo—java版

最近想用第三方api做點東西玩,一直在網上找不到,訊飛的java版的demo,就自己寫了一個供大家參考,比較簡陋,沒有介面,執行main函式,說話就行了,

這個工程師api自帶的,test的類是我的Demo


package com.iflytek.test;

import com.iflytek.cloud.speech.RecognizerListener;
import com.iflytek.cloud.speech.RecognizerResult;
import com.iflytek.cloud.speech.SpeechError;
import com.iflytek.cloud.speech.SpeechRecognizer;
import com.iflytek.cloud.speech.SpeechUtility;
import com.iflytek.util.DebugLog;
import com.iflytek.util.JsonParser;


public class VoiceTest {

    SpeechRecognizer speechRecognizer;
    
    String resultText = "";
    public VoiceTest(){
    this.speechRecognizer = SpeechRecognizer.createRecognizer();
    }
    
    public void speech(){
    if(!speechRecognizer.isListening())
    speechRecognizer.startListening(listener);
    else
    speechRecognizer.stopListening();
    }
    
    public String text(){
    return resultText;
    }
    
    //編寫監聽器,建立匿名內部類
    private RecognizerListener listener = new RecognizerListener() {

    /**
    * 當在說話的過程中音量發生變化時會多次呼叫此函式,顯示音量值
    */
@Override
public void onVolumeChanged(int arg0) {
DebugLog.Log("onVolumeChanged enter      "+arg0);

}

/**
* 獲取聽寫結果. 獲取RecognizerResult型別的識別結果
*/
@Override
public void onResult(RecognizerResult result, boolean flag) {
DebugLog.Log("onResult enter");
//這個result就是遠端解析的結果
String strResult = null;
//這裡的捕獲異常是我自己修改了JsonParser的這個靜態方法,因為他在裡面捕獲了異常,所以我修改了,我在那裡面又拋了一個異常
//因為這個函式解析result的時候,如果不說話就會列印異常資訊,所以受不了,我就把他修改了
try{
strResult = JsonParser.parseIatResult(result.getResultString());
}catch(Exception e){
strResult = "";
}
resultText = result.getResultString();
System.out.println(strResult);

}

/*
* 事件 擴充套件用介面,由具體業務進行約定
* @see com.iflytek.cloud.speech.RecognizerListener#onEvent(int, int, int, java.lang.String)
*/
@Override
public void onEvent(int arg0, int arg1, int arg2, String arg3) {

}

@Override
public void onError(SpeechError arg0) {
DebugLog.Log("onError enter");
}

@Override
public void onEndOfSpeech() {
DebugLog.Log("onEndOfSpeech enter");
}

/*
* 結束聽寫,恢復初始狀態
* @see com.iflytek.cloud.speech.RecognizerListener#onBeginOfSpeech()
*/
@Override
public void onBeginOfSpeech() {
DebugLog.Log("onBeginOfSpeech enter");
}
};
    

    public static void main(String[] args) {
    //這句是必須的,註冊的時候必須建一個應用,會分配一個appid
SpeechUtility.createUtility("appid=59b78833");
//初始化這個類的時候,這些函式就呼叫了,如果不初始化,那個匿名內部類就沒辦法監聽,監聽器的方法有的需要重寫,有的可以不重寫
VoiceTest speechTest = new VoiceTest();
//新版api當startListening被呼叫之後,自動判斷音量為靜音來自動停止,所以不需要關心停止的
speechTest.speech();
//System.out.println(speechTest.text());
    }
}