Java tutorial
package com.wordsbaking.cordova.tts; import org.apache.cordova.CallbackContext; import org.apache.cordova.CordovaPlugin; import org.apache.cordova.CordovaWebView; import org.apache.cordova.CordovaInterface; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.speech.tts.TextToSpeech; import android.speech.tts.TextToSpeech.OnInitListener; import android.speech.tts.UtteranceProgressListener; import java.util.HashMap; import java.util.Locale; /* Cordova Text-to-Speech Plugin https://github.com/vilic/cordova-plugin-tts by VILIC VANE https://github.com/vilic MIT License */ public class TTS extends CordovaPlugin implements OnInitListener { public static final String ERR_INVALID_OPTIONS = "ERR_INVALID_OPTIONS"; public static final String ERR_NOT_INITIALIZED = "ERR_NOT_INITIALIZED"; public static final String ERR_ERROR_INITIALIZING = "ERR_ERROR_INITIALIZING"; public static final String ERR_UNKNOWN = "ERR_UNKNOWN"; boolean ttsInitialized = false; TextToSpeech tts = null; @Override public void initialize(CordovaInterface cordova, final CordovaWebView webView) { tts = new TextToSpeech(cordova.getActivity().getApplicationContext(), this); tts.setOnUtteranceProgressListener(new UtteranceProgressListener() { @Override public void onStart(String s) { // do nothing } @Override public void onDone(String callbackId) { if (!callbackId.equals("")) { CallbackContext context = new CallbackContext(callbackId, webView); context.success(); } } @Override public void onError(String callbackId) { if (!callbackId.equals("")) { CallbackContext context = new CallbackContext(callbackId, webView); context.error(ERR_UNKNOWN); } } }); } @Override public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { if (action.equals("speak")) { speak(args, callbackContext); } else { return false; } return true; } @Override public void onInit(int status) { if (status != TextToSpeech.SUCCESS) { tts = null; } else { // warm up the tts engine with an empty string HashMap<String, String> ttsParams = new HashMap<String, String>(); ttsParams.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, ""); tts.setLanguage(new Locale("en", "US")); tts.speak("", TextToSpeech.QUEUE_FLUSH, ttsParams); ttsInitialized = true; } } private void speak(JSONArray args, CallbackContext callbackContext) throws JSONException, NullPointerException { JSONObject params = args.getJSONObject(0); if (params == null) { callbackContext.error(ERR_INVALID_OPTIONS); return; } String text; String locale; double rate; if (params.isNull("text")) { callbackContext.error(ERR_INVALID_OPTIONS); return; } else { text = params.getString("text"); } if (params.isNull("locale")) { locale = "en-US"; } else { locale = params.getString("locale"); } if (params.isNull("rate")) { rate = 1.0; } else { rate = params.getDouble("rate"); } if (tts == null) { callbackContext.error(ERR_ERROR_INITIALIZING); return; } if (!ttsInitialized) { callbackContext.error(ERR_NOT_INITIALIZED); return; } HashMap<String, String> ttsParams = new HashMap<String, String>(); ttsParams.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, callbackContext.getCallbackId()); String[] localeArgs = locale.split("-"); tts.setLanguage(new Locale(localeArgs[0], localeArgs[1])); tts.setSpeechRate((float) rate); tts.speak(text, TextToSpeech.QUEUE_FLUSH, ttsParams); } }