Код: Выделить всё
AudioManager.STREAM_ACCESSIBILITY
6. Перед отправкой текста в TTS проверяет, если он говорит в настоящее время. Если занято, добавив новый текст в очередь, который будет произнесен потом; В противном случае, выступая немедленно.
7. вот моя текущая реализация TTS :
package com.gtdvm.echopoint.utils
import android.content.Context
import android.os.Bundle
import android.provider.Settings
import android.speech.tts.TextToSpeech
import android.media.AudioAttributes
import android.media.AudioManager
import android.util.Log
import java.util.Locale
class TextToSpeechHelper(context: Context) : TextToSpeech.OnInitListener {
private var tts: TextToSpeech? = null
private var pendingText: String? = null
private var ttsSuccess: Boolean = false
private var audioManager: AudioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
private val ttsVolume = Bundle().apply {
putFloat(TextToSpeech.Engine.KEY_PARAM_VOLUME, 1.0f)
putInt(TextToSpeech.Engine.KEY_PARAM_STREAM, AudioManager.STREAM_ACCESSIBILITY)
}
init {
Log.d(TTSTAG, "Initializing the synthesizer")
val userTTS = Settings.Secure.getString(context.contentResolver, Settings.Secure.TTS_DEFAULT_SYNTH) ?: "com.google.android.tts"
Log.d(TTSTAG, "User-selected synthesizer: $userTTS")
tts = TextToSpeech(context, this, userTTS).apply {
setAudioAttributes(
AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_ASSISTANCE_ACCESSIBILITY)
.setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
.build()
)
}
}
override fun onInit(status: Int) {
Log.d(TTSTAG, "TTS initialization callback triggered")
if (status == TextToSpeech.SUCCESS) {
ttsSuccess = true
Log.d(TTSTAG, "TTS initialized successfully")
tts?.setLanguage(Locale.getDefault())
Log.d(TTSTAG, "Language set to system default")
val currentVoice = tts?.defaultEngine
Log.d(TTSTAG, "TTS engine: $currentVoice")
pendingText?.let { toSpeak(it) }
pendingText = null
} else {
Log.e(TTSTAG, "TTS initialization failed")
}
}
fun toSpeak(text: String) {
Log.d(TTSTAG, "Sending text to TTS")
if (!ttsSuccess) {
Log.d(TTSTAG, "TTS not initialized yet, storing text for later")
pendingText = text
} else {
if (tts?.isSpeaking == true) {
Log.d(TTSTAG, "TTS is currently speaking, adding text to queue")
tts?.speak(text, TextToSpeech.QUEUE_ADD, ttsVolume, null)
} else {
Log.d(TTSTAG, "Speaking text immediately")
tts?.speak(text, TextToSpeech.QUEUE_FLUSH, ttsVolume, null)
}
}
}
fun releaseTtsResources() {
Log.d(TTSTAG, "Releasing TTS resources")
tts?.stop()
tts?.shutdown()
tts = null
}
companion object {
const val TTSTAG = "TextToSpeechHelper"
}
}
< /code>
Вопрос < /strong>:
Почему мои TTS прерывается с помощью Talkback или других читателей экрана на устройствах Samsung, но не на Google Pixel Pro? Резюме? /> Так приятно иметь возможность писать код, когда у вас все еще есть видение - я рад за тех, кто может видеть. < /li>
< /ul>
Спасибо! < /p>
Подробнее здесь: https://stackoverflow.com/questions/794 ... nterrupted