35 lines
938 B
Python
35 lines
938 B
Python
|
from time import sleep
|
||
|
from jnius import autoclass
|
||
|
from plyer.facades import TTS
|
||
|
from plyer.platforms.android import activity
|
||
|
|
||
|
Locale = autoclass('java.util.Locale')
|
||
|
TextToSpeech = autoclass('android.speech.tts.TextToSpeech')
|
||
|
|
||
|
|
||
|
class AndroidTextToSpeech(TTS):
|
||
|
def _speak(self, **kwargs):
|
||
|
tts = TextToSpeech(activity, None)
|
||
|
|
||
|
tts.setLanguage(Locale.US)
|
||
|
|
||
|
retries = 0 # First try rarely succeeds due to some timing issue
|
||
|
message = kwargs.get('message')
|
||
|
|
||
|
# first try for while loop
|
||
|
speak_status = tts.speak(
|
||
|
message, TextToSpeech.QUEUE_FLUSH, None
|
||
|
)
|
||
|
|
||
|
# -1 indicates error. Let's wait and then try again
|
||
|
while retries < 100 and speak_status == -1:
|
||
|
sleep(0.1)
|
||
|
retries += 1
|
||
|
speak_status = tts.speak(
|
||
|
message, TextToSpeech.QUEUE_FLUSH, None
|
||
|
)
|
||
|
|
||
|
|
||
|
def instance():
|
||
|
return AndroidTextToSpeech()
|