mirror of
https://github.com/lightsoutgames/godot-tts
synced 2024-12-22 14:25:56 +00:00
Add support for JavaScript SpeechSynthesis API.
This commit is contained in:
parent
ecfee60db5
commit
bf6372a1a8
34
TTS.gd
34
TTS.gd
|
@ -1,27 +1,35 @@
|
|||
tool
|
||||
extends Node
|
||||
|
||||
const TTS = preload("godot-tts.gdns")
|
||||
var TTS
|
||||
|
||||
var tts = null
|
||||
|
||||
func _ready():
|
||||
# Only initialize TTS if it's available or if we're in the editor.
|
||||
if TTS.can_instance() or Engine.editor_hint:
|
||||
print_debug("Attempting to load TTS.")
|
||||
tts = TTS.new()
|
||||
if not OS.has_feature('JavaScript') and not Engine.has_singleton("AndroidTTS"):
|
||||
TTS = preload("godot-tts.gdns")
|
||||
if OS.has_feature('JavaScript'):
|
||||
pass
|
||||
elif Engine.has_singleton("AndroidTTS"):
|
||||
tts = Engine.get_singleton("AndroidTTS")
|
||||
elif TTS.can_instance() or Engine.editor_hint:
|
||||
tts = TTS.new()
|
||||
else:
|
||||
print_debug("TTS not available!")
|
||||
|
||||
var javascript_rate = 50
|
||||
|
||||
func set_rate(rate):
|
||||
if tts != null:
|
||||
tts.rate = rate
|
||||
elif OS.has_feature('JavaScript'):
|
||||
javascript_rate = rate
|
||||
|
||||
func get_rate():
|
||||
if tts != null:
|
||||
return tts.rate
|
||||
elif OS.has_feature('JavaScript'):
|
||||
return javascript_rate
|
||||
else:
|
||||
return 0
|
||||
|
||||
|
@ -31,14 +39,30 @@ func speak(text, interrupt := true):
|
|||
print_debug("%s: %s" % [text, interrupt])
|
||||
if tts != null:
|
||||
tts.speak(text, interrupt)
|
||||
elif OS.has_feature('JavaScript'):
|
||||
var scaled_rate = javascript_rate / 2
|
||||
var code = """
|
||||
let utterance = new SpeechSynthesisUtterance("%s")
|
||||
utterance.rate = %s
|
||||
""" % [text, scaled_rate]
|
||||
if interrupt:
|
||||
code += """
|
||||
window.speechSynthesis.cancel()
|
||||
"""
|
||||
code += "window.speechSynthesis.speak(utterance)"
|
||||
JavaScript.eval(code)
|
||||
|
||||
func stop():
|
||||
if tts != null:
|
||||
tts.stop()
|
||||
elif OS.has_feature('JavaScript'):
|
||||
JavaScript.eval("window.speechSynthesis.cancel()")
|
||||
|
||||
func get_is_rate_supported():
|
||||
if Engine.get_singleton("AndroidTTS"):
|
||||
return false
|
||||
elif OS.has_feature('JavaScript'):
|
||||
return true
|
||||
elif tts != null:
|
||||
return tts.is_rate_supported()
|
||||
else:
|
||||
|
|
Loading…
Reference in New Issue
Block a user