TTSUtils.kt 2.03 KB
package com.tools.tts

import android.speech.tts.TextToSpeech
import android.speech.tts.TextToSpeech.OnInitListener
import android.speech.tts.UtteranceProgressListener
import android.util.Log
import com.tools.tts.common.TTSLibraryContext
import java.util.*

object TTSUtils {
    private val onInitListener =
        OnInitListener { status ->
            Log.i("Test", "OnInitListener=$status")
            ttsReady = status != TextToSpeech.ERROR
        }

    private val progressListener = object : UtteranceProgressListener() {
        override fun onStart(utteranceId: String?) {
            Log.i("Test", "onStart=$utteranceId")
            isSpeak = true
        }

        override fun onDone(utteranceId: String?) {
            Log.i("Test", "onDone=$utteranceId")
            isSpeak = false
        }

        override fun onError(utteranceId: String?) {
            Log.i("Test", "onError=$utteranceId")
            isSpeak = false
        }

        override fun onStop(utteranceId: String?, interrupted: Boolean) {
            Log.i("Test", "onStop=$utteranceId $interrupted")
            isSpeak = !interrupted
            super.onStop(utteranceId, interrupted)
        }

    }

    val tts = TextToSpeech(
        TTSLibraryContext.appContext,
        onInitListener,
        "com.diligrp.tms.kdy"
    )

    var ttsReady: Boolean = false

    private var isSpeak: Boolean = false

    init {
        tts.setOnUtteranceProgressListener(progressListener)
    }

    fun sayText(text: String) {
        val result = tts.setLanguage(Locale.SIMPLIFIED_CHINESE)
        Log.e("Test", "sayText !")
        if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
            Log.e("Test", "setLanguage error! $result")
        } else {
            val speechResult =
                tts.speak(text, TextToSpeech.QUEUE_FLUSH, null, Random().nextInt().toString())
            Log.i("Test", "speechResult=$speechResult")
        }
    }

    fun stop() {
        tts.stop()
    }

    fun onCleared() {
        tts.shutdown()
    }
}