package com.syan.agora;

import android.content.Context;
import android.os.Environment;
import android.util.Log;

import com.iflytek.cloud.ErrorCode;
import com.iflytek.cloud.InitListener;
import com.iflytek.cloud.RecognizerListener;
import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechRecognizer;
import com.iflytek.cloud.SpeechUtility;

public class IFlyRecognizer implements XLAudioRecordManager.XLAudioRecordSubscriberCallback {
    private com.iflytek.cloud.RecognizerListener recognizerListener;
    private SpeechRecognizer speechRecognizer;
    private String userAudioPath = null;
    private static Context mContext;

    public IFlyRecognizer(Context context) {
        mContext = context;
        speechRecognizer = SpeechRecognizer.createRecognizer(context, null);
        //2.设置听写参数
//        speechRecognizer.setParameter(SpeechConstant.DOMAIN, "iat");
//        speechRecognizer.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
//        speechRecognizer.setParameter(SpeechConstant.ACCENT, "mandarin");
//        speechRecognizer.setParameter(SpeechConstant.PARAMS, null);
//        speechRecognizer.setParameter(SpeechConstant.SAMPLE_RATE, "16000");
//        //设置返回多个结果
//        speechRecognizer.setParameter(SpeechConstant.ASR_NBEST, "5");
//        // 设置语音前端点:静音超时时间，即用户多长时间不说话则当做超时处理
//        speechRecognizer.setParameter(SpeechConstant.VAD_BOS, "8000");
//        // 设置语音后端点:后端点静音检测时间，即用户停止说话多长时间内即认为不再输入， 自动停止录音
//        speechRecognizer.setParameter(SpeechConstant.VAD_EOS, "1000");
//        speechRecognizer.setParameter(SpeechConstant.ASR_PTT, "0");
//        speechRecognizer.setParameter(SpeechConstant.AUDIO_SOURCE, "-1");
        if(speechRecognizer !=null){
          // 设置听写引擎
          speechRecognizer.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);

          // 设置返回结果格式
          speechRecognizer.setParameter(SpeechConstant.RESULT_TYPE, "json");

          // 设置语言
          speechRecognizer.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
          // 设置语言区域
          speechRecognizer.setParameter(SpeechConstant.ACCENT, "mandarin");

          // 设置语音前端点:静音超时时间，即用户多长时间不说话则当做超时处理
          speechRecognizer.setParameter(SpeechConstant.VAD_BOS, "10000");

          // 设置语音后端点:后端点静音检测时间，即用户停止说话多长时间内即认为不再输入， 自动停止录音
          speechRecognizer.setParameter(SpeechConstant.VAD_EOS, "10000");


          // 设置标点符号,设置为"0"返回结果无标点,设置为"1"返回结果有标点
          speechRecognizer.setParameter(SpeechConstant.ASR_PTT, "1");

          speechRecognizer.setParameter(SpeechConstant.AUDIO_SOURCE, "-1");
          XLAudioRecordManager.getInstance().subscribe(this);
        }
    }

    public void setRecognizerListener(RecognizerListener listener) {
        this.recognizerListener = listener;
    }

    public void startRecognize() {
        XLAudioRecordManager.getInstance().startRecording();
        speechRecognizer.startListening(recognizerListener);
        if (recognizerListener != null) {
            recognizerListener.onBeginOfSpeech();
        }
    }

    public void stopRecognize() {
        speechRecognizer.stopListening();
        XLAudioRecordManager.getInstance().stopRecording();
    }

    public void cancelRecognize() {
        speechRecognizer.cancel();
        XLAudioRecordManager.getInstance().stopRecording();
    }

    @Override
    public void onAudio(byte[] audioData, int offset, int length) {
        int res = speechRecognizer.writeAudio(audioData, offset, length);
        if (res == ErrorCode.SUCCESS) {
            Log.e("nell:IFlyRecognizer", "写入成功");
        } else {
            Log.e("nell:IFlyRecognizer", "写入失败");
        }
    }

}
