package com.PP.LunarTabsAndroid.APIs;
import java.util.HashMap;
import java.util.Locale;
import android.app.Activity;
import android.speech.tts.TextToSpeech;
import android.speech.tts.UtteranceProgressListener;
import android.util.Log;
import com.PP.LunarTabsAndroid.UI.DataModel;
/**
* Wrapper for speech API (for use of use)
* @author prateek
*
*/
public class TextToSpeechAPI implements TextToSpeech.OnInitListener {
//fields
protected TextToSpeech tts;
//singleton instance
protected static TextToSpeechAPI instance = null;
/**
* Init API -- hook for main activity
* @param mainActivity
*/
public static void init(Activity mainActivity) {
if(instance==null) {
instance = new TextToSpeechAPI();
}
if(instance.tts==null) {
instance.tts = new TextToSpeech(mainActivity.getApplicationContext(),instance);
}
}
/**
* Speaks text
* @param text Text to speak
*/
public static void speak(String text) {
if(instance!=null && instance.tts!=null && text!=null && !text.trim().equals((""))) {
//turn of stt (if currently running)
if(DataModel.getInstance().isVoiceActionsEnabled()) {
WordActivatorAPI.getInstance().stopListening();
}
//turn on tts
HashMap<String, String> params = new HashMap<String, String>();
params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,text);
instance.tts.speak(text, TextToSpeech.QUEUE_FLUSH, params);
}
}
@Override
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
int result = tts.setLanguage(Locale.US);
if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
Log.e("TTS", "This Language is not supported");
}
instance.tts.setOnUtteranceProgressListener(new UtteranceProgressListener()
{
@Override
public void onDone(String utteranceId)
{
//restart stt (if currently user enabled)
Log.d("END", "FINISHED: " + utteranceId);
if(DataModel.getInstance().isVoiceActionsEnabled()) {
WordActivatorAPI.getInstance().start();
}
}
@Override
public void onError(String utteranceId){}
@Override
public void onStart(String utteranceId)
{
Log.d("START", "STARTED MUMBLING: " + utteranceId);
}
});
}
else {
Log.e("TTS", "Initilization Failed!");
instance=null;
}
}
}