|
|
package org.xing.engine;
|
|
|
|
|
|
import android.content.Context;
|
|
|
import android.os.Bundle;
|
|
|
|
|
|
import com.iflytek.cloud.RecognizerListener;
|
|
|
import com.iflytek.cloud.RecognizerResult;
|
|
|
import com.iflytek.cloud.SpeechConstant;
|
|
|
import com.iflytek.cloud.SpeechError;
|
|
|
import com.iflytek.cloud.SpeechRecognizer;
|
|
|
import com.iflytek.cloud.SpeechUtility;
|
|
|
|
|
|
import org.xing.android.MainActivity;
|
|
|
import org.xing.logger.impl.EventLogger;
|
|
|
import org.xing.utils.JsonParser;
|
|
|
|
|
|
import static com.iflytek.cloud.ErrorCode.ERROR_AUDIO_RECORD;
|
|
|
import static com.iflytek.cloud.ErrorCode.ERROR_ENGINE_BUSY;
|
|
|
import static com.iflytek.cloud.ErrorCode.ERROR_NETWORK_TIMEOUT;
|
|
|
import static com.iflytek.cloud.ErrorCode.ERROR_NO_MATCH;
|
|
|
import static com.iflytek.cloud.ErrorCode.ERROR_NO_NETWORK;
|
|
|
import static com.iflytek.cloud.ErrorCode.ERROR_PERMISSION_DENIED;
|
|
|
import static com.iflytek.cloud.ErrorCode.MSP_ERROR_NO_DATA;
|
|
|
|
|
|
/**
|
|
|
* Created by Administrator on 2017/3/8 0008.
|
|
|
*/
|
|
|
|
|
|
public class IflySpeechEngine implements SpeechEngine{
|
|
|
private Context ctx;
|
|
|
private SpeechListener listener;
|
|
|
private SpeechRecognizer speechRecognizer;
|
|
|
private InternalRecognizerListener _listener;
|
|
|
|
|
|
private static EventLogger eventLogger;
|
|
|
|
|
|
public IflySpeechEngine(Context ctx) {
|
|
|
this.ctx = ctx;
|
|
|
SpeechUtility.createUtility(ctx, SpeechConstant.APPID +"=585290e7");
|
|
|
|
|
|
speechRecognizer= SpeechRecognizer.createRecognizer(ctx, null);
|
|
|
speechRecognizer.setParameter(SpeechConstant.DOMAIN, "iat"); //{短信和日常用语:iat (默认) 视频:video 地图:poi 音乐:music
|
|
|
speechRecognizer.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
|
|
|
speechRecognizer.setParameter(SpeechConstant.ACCENT, "mandarin");
|
|
|
speechRecognizer.setParameter(SpeechConstant.VAD_BOS, "10000"); //十秒超时
|
|
|
speechRecognizer.setParameter(SpeechConstant.ASR_PTT, "0"); //不带标点
|
|
|
|
|
|
eventLogger = MainActivity.eventLogger;
|
|
|
}
|
|
|
|
|
|
public void setSpeechListener(SpeechListener listener){
|
|
|
this.listener = listener;
|
|
|
_listener = new InternalRecognizerListener(listener);
|
|
|
}
|
|
|
|
|
|
public void startListening() {
|
|
|
speechRecognizer.startListening(_listener);
|
|
|
listener.onReadyForSpeech();
|
|
|
}
|
|
|
|
|
|
public void stopListening() {
|
|
|
speechRecognizer.stopListening();
|
|
|
}
|
|
|
public void cancel() {
|
|
|
speechRecognizer.cancel();
|
|
|
}
|
|
|
public void destroy() {
|
|
|
speechRecognizer.destroy();
|
|
|
}
|
|
|
|
|
|
private static class InternalRecognizerListener implements RecognizerListener{
|
|
|
private SpeechListener listener;
|
|
|
public InternalRecognizerListener(SpeechListener listener) {
|
|
|
this.listener = listener;
|
|
|
}
|
|
|
public void onResult(RecognizerResult results, boolean isLast) {
|
|
|
String expr = JsonParser.parseIatResult(results.getResultString());
|
|
|
listener.onResults(expr);
|
|
|
}
|
|
|
|
|
|
//会话发生错误回调接口
|
|
|
public void onError(SpeechError error) {
|
|
|
switch (error.getErrorCode()) {
|
|
|
case ERROR_AUDIO_RECORD:
|
|
|
listener.onError(android.speech.SpeechRecognizer.ERROR_AUDIO);
|
|
|
break;
|
|
|
case ERROR_ENGINE_BUSY:
|
|
|
listener.onError(android.speech.SpeechRecognizer.ERROR_RECOGNIZER_BUSY);
|
|
|
break;
|
|
|
case ERROR_PERMISSION_DENIED:
|
|
|
listener.onError(android.speech.SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS);
|
|
|
break;
|
|
|
case ERROR_NO_NETWORK:
|
|
|
listener.onError(android.speech.SpeechRecognizer.ERROR_NETWORK);
|
|
|
break;
|
|
|
case ERROR_NETWORK_TIMEOUT:
|
|
|
listener.onError(android.speech.SpeechRecognizer.ERROR_NETWORK_TIMEOUT);
|
|
|
break;
|
|
|
case ERROR_NO_MATCH:
|
|
|
listener.onError(android.speech.SpeechRecognizer.ERROR_NO_MATCH);
|
|
|
break;
|
|
|
case MSP_ERROR_NO_DATA:
|
|
|
listener.onError(android.speech.SpeechRecognizer.ERROR_SPEECH_TIMEOUT);
|
|
|
break;
|
|
|
default:
|
|
|
eventLogger.onEvent("ifly-error-"+error.getErrorCode()+": "+error.getErrorDescription());
|
|
|
listener.onError(android.speech.SpeechRecognizer.ERROR_CLIENT);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//开始录音
|
|
|
public void onBeginOfSpeech() {
|
|
|
listener.onBeginningOfSpeech();
|
|
|
}
|
|
|
|
|
|
//音量值0~30
|
|
|
public void onVolumeChanged(int volume, byte[] data){
|
|
|
listener.onRmsChanged((float)volume * 10);
|
|
|
}
|
|
|
|
|
|
//结束录音
|
|
|
public void onEndOfSpeech() {
|
|
|
listener.onEndOfSpeech();
|
|
|
}
|
|
|
|
|
|
//扩展用接口
|
|
|
public void onEvent(int eventType, int arg1, int arg2, Bundle obj) {
|
|
|
|
|
|
}
|
|
|
};
|
|
|
}
|