Implement gong for /say endpoint

This commit is contained in:
2020-05-31 14:04:06 +02:00
parent e9c3bd4016
commit 2621978ddd
3 changed files with 54 additions and 3 deletions

View File

@@ -1,11 +1,18 @@
package com.bartlomiejpluta.ttsserver.core.tts.engine
import android.content.Context
import android.content.SharedPreferences
import android.media.AudioAttributes
import android.media.MediaPlayer
import android.net.Uri
import android.speech.tts.TextToSpeech
import com.bartlomiejpluta.ttsserver.core.tts.exception.TTSException
import com.bartlomiejpluta.ttsserver.core.tts.listener.GongListener
import com.bartlomiejpluta.ttsserver.core.tts.listener.TTSProcessListener
import com.bartlomiejpluta.ttsserver.core.tts.model.TTSStream
import com.bartlomiejpluta.ttsserver.core.tts.status.TTSStatus
import com.bartlomiejpluta.ttsserver.core.tts.status.TTSStatusHolder
import com.bartlomiejpluta.ttsserver.ui.preference.PreferenceKey
import java.io.BufferedInputStream
import java.io.File
import java.io.FileInputStream
@@ -15,7 +22,8 @@ import java.util.*
class TTSEngine(
private val context: Context,
private val tts: TextToSpeech,
private val ttsStatusHolder: TTSStatusHolder
private val ttsStatusHolder: TTSStatusHolder,
private val preferences: SharedPreferences
) {
private val messageDigest = MessageDigest.getInstance("SHA-256")
@@ -71,8 +79,33 @@ class TTSEngine(
tts.setOnUtteranceProgressListener(listener)
tts.language = language
playGong()
tts.speak(text, TextToSpeech.QUEUE_ADD, null, uuid)
listener.await()
}
private fun playGong() {
if (!preferences.getBoolean(PreferenceKey.ENABLE_GONG, false)) {
return
}
val listener = GongListener()
val uri = preferences.getString(PreferenceKey.GONG, null) ?: throw TTSException()
MediaPlayer().apply {
setOnCompletionListener(listener)
setAudioAttributes(gongAudioAttributes)
setDataSource(context, Uri.parse(uri))
prepare()
start()
listener.await()
}
}
companion object {
private val gongAudioAttributes = AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build()
}
}

View File

@@ -0,0 +1,14 @@
package com.bartlomiejpluta.ttsserver.core.tts.listener
import android.media.MediaPlayer
import java.util.concurrent.LinkedBlockingQueue
class GongListener : MediaPlayer.OnCompletionListener {
private val queue = LinkedBlockingQueue<Any>()
override fun onCompletion(mp: MediaPlayer?) {
queue.add(Any())
}
fun await() = queue.take()
}

View File

@@ -28,8 +28,12 @@ class TTSModule {
@Provides
@Singleton
fun tts(context: Context, textToSpeech: TextToSpeech, ttsStatusHolder: TTSStatusHolder) =
TTSEngine(context, textToSpeech, ttsStatusHolder)
fun tts(
context: Context,
textToSpeech: TextToSpeech,
ttsStatusHolder: TTSStatusHolder,
preferences: SharedPreferences
) = TTSEngine(context, textToSpeech, ttsStatusHolder, preferences)
@Provides
@Singleton