Implement gong for /say endpoint
This commit is contained in:
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user