diff --git a/TTS.gd b/TTS.gd index 4dd4c21..1b6f3c9 100644 --- a/TTS.gd +++ b/TTS.gd @@ -10,6 +10,8 @@ func _ready(): if TTS.can_instance() or Engine.editor_hint: print_debug("Attempting to load TTS.") tts = TTS.new() + elif Engine.has_singleton("AndroidTTS"): + tts = Engine.get_singleton("AndroidTTS") else: print_debug("TTS not available!") @@ -35,7 +37,9 @@ func stop(): tts.stop() func get_is_rate_supported(): - if tts != null: + if Engine.get_singleton("AndroidTTS"): + return false + elif tts != null: return tts.is_rate_supported() else: return false diff --git a/android/src/games/lightsout/godot/tts/TTS.java b/android/src/games/lightsout/godot/tts/TTS.java new file mode 100644 index 0000000..e784d97 --- /dev/null +++ b/android/src/games/lightsout/godot/tts/TTS.java @@ -0,0 +1,66 @@ +package games.lightsout.godot.tts; + +import android.app.Activity; +import android.content.Intent; +import android.content.Context; +import android.speech.tts.TextToSpeech; +import android.util.Log; +import com.godot.game.R; +import javax.microedition.khronos.opengles.GL10; +import org.godotengine.godot.Godot; + +public class TTS extends Godot.SingletonBase implements TextToSpeech.OnInitListener { + + protected Activity appActivity; + protected Context appContext; + private Godot activity = null; + private int instanceId = 0; + + private TextToSpeech tts = null; + + private Integer utteranceId = 0; + + public void speak(String text, boolean interrupt) { + int mode = TextToSpeech.QUEUE_ADD; + if (interrupt) + mode = TextToSpeech.QUEUE_FLUSH; + tts.speak(text, mode, null, this.utteranceId.toString()); + this.utteranceId++; + } + + public void stop() { + tts.stop(); + } + + public void getInstanceId(int pInstanceId) { + // You will need to call this method from Godot and pass in the get_instance_id(). + instanceId = pInstanceId; + } + + static public Godot.SingletonBase initialize(Activity p_activity) { + return new TTS(p_activity); + } + + public TTS(Activity p_activity) { + this.activity = (Godot)p_activity; + this.appActivity = p_activity; + this.appContext = appActivity.getApplicationContext(); + this.tts = new TextToSpeech(this.appContext, this); + // Register class name and functions to bind. + registerClass("AndroidTTS", new String[] + { + "speak", + "stop", + "getInstanceId" + }); + this.activity.runOnUiThread(new Runnable() { + public void run() { + } + }); + + } + + public void onInit(int status) { + } + +}