From 6a208428c914b87f2387d47356648276f17bb0d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Sat, 16 May 2020 16:18:50 +0200 Subject: [PATCH] Improve TTS engine listener --- .../ttsserver/core/tts/engine/TTSEngine.kt | 67 +++++-------------- .../ttsserver/core/tts/listener/Lock.kt | 5 -- .../core/tts/listener/TTSProcessListener.kt | 24 +++---- 3 files changed, 28 insertions(+), 68 deletions(-) delete mode 100644 app/src/main/java/io/bartek/ttsserver/core/tts/listener/Lock.kt diff --git a/app/src/main/java/io/bartek/ttsserver/core/tts/engine/TTSEngine.kt b/app/src/main/java/io/bartek/ttsserver/core/tts/engine/TTSEngine.kt index 34059cb..13a6004 100644 --- a/app/src/main/java/io/bartek/ttsserver/core/tts/engine/TTSEngine.kt +++ b/app/src/main/java/io/bartek/ttsserver/core/tts/engine/TTSEngine.kt @@ -2,8 +2,6 @@ package io.bartek.ttsserver.core.tts.engine import android.content.Context import android.speech.tts.TextToSpeech -import io.bartek.ttsserver.core.tts.exception.TTSException -import io.bartek.ttsserver.core.tts.listener.Lock import io.bartek.ttsserver.core.tts.listener.TTSProcessListener import io.bartek.ttsserver.core.tts.model.TTSStream import io.bartek.ttsserver.core.tts.status.TTSStatus @@ -29,26 +27,15 @@ class TTSEngine( val filename = "tts_$digest.wav" val file = File(context.cacheDir, filename) - file.takeIf { it.exists() } ?.let { return it } + file.takeIf { it.exists() }?.let { return it } val uuid = UUID.randomUUID().toString() - val lock = Lock() - tts.setOnUtteranceProgressListener( - TTSProcessListener( - uuid, - lock - ) - ) + val listener = TTSProcessListener(uuid) + tts.setOnUtteranceProgressListener(listener) - synchronized(lock) { - tts.language = language - tts.synthesizeToFile(text, null, file, uuid) - lock.wait() - } - - if (!lock.success) { - throw TTSException() - } + tts.language = language + tts.synthesizeToFile(text, null, file, uuid) + listener.await() return file } @@ -63,23 +50,12 @@ class TTSEngine( val file = createTempFile("tmp_tts_server", ".wav") val uuid = UUID.randomUUID().toString() - val lock = Lock() - tts.setOnUtteranceProgressListener( - TTSProcessListener( - uuid, - lock - ) - ) + val listener = TTSProcessListener(uuid) + tts.setOnUtteranceProgressListener(listener) - synchronized(lock) { - tts.language = language - tts.synthesizeToFile(text, null, file, uuid) - lock.wait() - } - - if (!lock.success) { - throw TTSException() - } + tts.language = language + tts.synthesizeToFile(text, null, file, uuid) + listener.await() val stream = BufferedInputStream(FileInputStream(file)) val length = file.length() @@ -91,23 +67,12 @@ class TTSEngine( fun performTTS(text: String, language: Locale) { val uuid = UUID.randomUUID().toString() - val lock = Lock() - tts.setOnUtteranceProgressListener( - TTSProcessListener( - uuid, - lock - ) - ) + val listener = TTSProcessListener(uuid) + tts.setOnUtteranceProgressListener(listener) - synchronized(lock) { - tts.language = language - tts.speak(text, TextToSpeech.QUEUE_ADD, null, uuid) - lock.wait() - } - - if (!lock.success) { - throw TTSException() - } + tts.language = language + tts.speak(text, TextToSpeech.QUEUE_ADD, null, uuid) + listener.await() } } diff --git a/app/src/main/java/io/bartek/ttsserver/core/tts/listener/Lock.kt b/app/src/main/java/io/bartek/ttsserver/core/tts/listener/Lock.kt deleted file mode 100644 index 6a84872..0000000 --- a/app/src/main/java/io/bartek/ttsserver/core/tts/listener/Lock.kt +++ /dev/null @@ -1,5 +0,0 @@ -package io.bartek.ttsserver.core.tts.listener - -@Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN") -// TODO: Investigate the Kotlin way to achieve the same -data class Lock(var success: Boolean = false) : Object() \ No newline at end of file diff --git a/app/src/main/java/io/bartek/ttsserver/core/tts/listener/TTSProcessListener.kt b/app/src/main/java/io/bartek/ttsserver/core/tts/listener/TTSProcessListener.kt index e550bc3..fa700d0 100644 --- a/app/src/main/java/io/bartek/ttsserver/core/tts/listener/TTSProcessListener.kt +++ b/app/src/main/java/io/bartek/ttsserver/core/tts/listener/TTSProcessListener.kt @@ -1,29 +1,29 @@ package io.bartek.ttsserver.core.tts.listener import android.speech.tts.UtteranceProgressListener +import io.bartek.ttsserver.core.tts.exception.TTSException +import java.util.concurrent.LinkedBlockingQueue -class TTSProcessListener( - private val uuid: String, - private val lock: Lock -) : UtteranceProgressListener() { +class TTSProcessListener(private val uuid: String) : UtteranceProgressListener() { + private val queue = LinkedBlockingQueue() override fun onDone(utteranceId: String?) { if (utteranceId == uuid) { - synchronized(lock) { - lock.success = true - lock.notifyAll() - } + queue.add(true) } } override fun onError(utteranceId: String?) { if (utteranceId == uuid) { - synchronized(lock) { - lock.success = false - lock.notifyAll() - } + queue.add(false) } } override fun onStart(utteranceId: String?) {} + + fun await() { + if(!queue.take()) { + throw TTSException() + } + } } \ No newline at end of file