package com.hh.arome.common.voice;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;


import com.hh.arome.utlis.log.AppLogUtils;

import java.util.List;
import java.util.Locale;

public class MTTSDemo implements TextToSpeech.OnInitListener {


    //用volatile关键字确保 instance 在多线程下的可见性
    private static volatile MTTSDemo instance = null;

    //将构造方法私有化，禁止外部通过构造方法创建实例
    private MTTSDemo() {}

    //提供一个公共的访问方法，用于获取该类的唯一实例
    public static MTTSDemo getInstance(Context context) {
        //如果instance为空，就进行实例化
        if (instance == null) {
            //保证多线程下只有一个线程进行实例化
            synchronized (MTTSDemo.class) {
                //第二次判断，避免多线程下创建多个实例
                if (instance == null) {
                    instance = new MTTSDemo(context);
                }
            }
        }
        return instance;
    }
    
    
    private TextToSpeech mTTS;
    private Context mContext;

    public MTTSDemo(Context mContext) {
        this.mContext = mContext;
        //监听器就直接传入本类
        this.mTTS = new TextToSpeech(mContext, this);
    }

    /**
     * 初始化
     *
     * @param status
     */
    @Override
    public void onInit(int status) {
        //判断是否转化成功
        if (status == TextToSpeech.SUCCESS) {
            //设置语言为中文
            int languageCode = mTTS.setLanguage(Locale.CHINESE);
            //判断是否支持这种语言，Android原生不支持中文，使用科大讯飞的tts引擎就可以了
            if (languageCode == TextToSpeech.LANG_NOT_SUPPORTED) {
                AppLogUtils.w(true,"TTS语音播报 onInit: 不支持这种语言");
            } else {
                //不支持就改成英文
                mTTS.setLanguage(Locale.US);
            }
        }
    }


    public void jump(){
        String enginePackageName = mTTS.getDefaultEngine();





    }


    /**
     * 播报方法，需要传入播报的内容
     *
     * @param text 播报的内容
     */
    public void speak(String text) {
        //设置音调，值越大声音越尖（女生），值越小则变成男声，1.0是常规
        mTTS.setPitch(1.0f);
        //设置语速
        mTTS.setSpeechRate(1.0f);
        mTTS.speak(text, TextToSpeech.QUEUE_ADD, null);
    }


    public void speak(String text,float pitch,float rate) {


//        // 获取当前引擎的参数
//        Bundle params = new Bundle();
//        List<TextToSpeech.EngineInfo> engines = mTTS.getEngines();
//        String defaultEngine = mTTS.getDefaultEngine();
//        mTTS.get
//        int currentSpeed = params.getInt(TextToSpeech.Engine.KEY_PARAM_SPEED);
//
//        // 修改语速参数
//        int newSpeed = currentSpeed + 10;
//
//        // 重新设置引擎参数
//        params.putInt(TextToSpeech.Engine.K, newSpeed);
//        mTTS.setParams(params);


        //设置音调，值越大声音越尖（女生），值越小则变成男声，1.0是常规
        mTTS.setPitch(pitch);
        //设置语速
        mTTS.setSpeechRate(rate);
        mTTS.speak(text, TextToSpeech.QUEUE_ADD, null);
    }


    /**
     * 销毁播报方法，直接调用
     */
    public void stopTTS() {
        if(mTTS!=null){
            mTTS.stop();
            mTTS.shutdown();
            mTTS = null;
        }
        instance = null;
    }
}
