diff --git a/TTS.gd b/TTS.gd index 3f3bccf..5c7a4b4 100644 --- a/TTS.gd +++ b/TTS.gd @@ -121,8 +121,9 @@ var normal_rate_percentage setget , _get_rate_percentage func speak(text, interrupt := true): + var utterance if tts != null: - tts.speak(text, interrupt) + utterance = tts.speak(text, interrupt) elif OS.has_feature('JavaScript'): var code = ( """ @@ -139,6 +140,7 @@ func speak(text, interrupt := true): JavaScript.eval(code) else: print_debug("%s: %s" % [text, interrupt]) + return utterance func stop(): @@ -236,8 +238,6 @@ func singular_or_plural(count, singular, plural): func _on_utterance_begin(utterance): - print("Here") - print(utterance) emit_signal("utterance_begin", utterance) diff --git a/src/lib.rs b/src/lib.rs index daad223..0a79814 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -174,9 +174,17 @@ impl TTS { } #[export] - fn speak(&mut self, _owner: &Node, message: GodotString, interrupt: bool) { + fn speak(&mut self, _owner: &Node, message: GodotString, interrupt: bool) -> Option { let message = message.to_string(); - self.0.speak(message, interrupt).unwrap(); + if let Ok(id) = self.0.speak(message, interrupt) { + let utterance: Instance = Instance::new(); + utterance + .map_mut(|u, _| u.0 = id) + .expect("Failed to set utterance ID"); + Some(utterance.owned_to_variant()) + } else { + None + } } #[export] @@ -208,16 +216,16 @@ impl TTS { match msg { Msg::UtteranceBegin(utterance_id) => { let utterance: Instance = Instance::new(); - /*utterance - .map_mut(|u, _| u.0 = Some(utterance_id)) - .expect("Failed to set utterance ID");*/ + utterance + .map_mut(|u, _| u.0 = Some(utterance_id)) + .expect("Failed to set utterance ID"); owner.emit_signal("utterance_begin", &[utterance.owned_to_variant()]); } Msg::UtteranceEnd(utterance_id) => { let utterance: Instance = Instance::new(); - /*utterance - .map_mut(|u, _| u.0 = Some(utterance_id)) - .expect("Failed to set utterance ID");*/ + utterance + .map_mut(|u, _| u.0 = Some(utterance_id)) + .expect("Failed to set utterance ID"); owner.emit_signal("utterance_end", &[utterance.owned_to_variant()]); } } @@ -227,6 +235,7 @@ impl TTS { fn init(handle: InitHandle) { env_logger::init(); + handle.add_class::(); handle.add_class::(); }