You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
git-test3/app/src/main/java/org/xing/engine/IflySpeechEngine.java

133 lines
4.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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) {
}
};
}