package com.ljb.mvp.kotlin.utils
import android.annotation.SuppressLint
import android.content.Context
import android.media.AudioManager
import android.speech.tts.TextToSpeech
import android.util.Log
import android.widget.Toast
import java.util.Locale
/**
* 語(yǔ)音播放的一個(gè)單例對(duì)象
*/
@Suppress("DEPRECATION")
class TTSUtils private constructor(context: Context) {
? ? //context對(duì)象
? ? private val mContext: Context = context.applicationContext
? ? //核心播放對(duì)象
? ? private val textToSpeech: TextToSpeech?
? ? //是否支持
? ? private var isSupport = true
? ? init {
? ? ? ? textToSpeech = TextToSpeech(mContext, TextToSpeech.OnInitListener { i ->
? ? ? ? ? ? //textToSpeech的配置
? ? ? ? ? ? init(i)
? ? ? ? })
? ? }
? ? //textToSpeech的配置
? ? private fun init(i: Int) {
? ? ? ? if (i == TextToSpeech.SUCCESS) {
? ? ? ? ? ? val result = textToSpeech!!.setLanguage(Locale.SIMPLIFIED_CHINESE)
? ? ? ? ? ? // 設(shè)置音調(diào)车猬,值越大聲音越尖(女生)霉猛,值越小則變成男聲,1.0是常規(guī)
? ? ? ? ? ? textToSpeech.setPitch(1.0f) //(這里推薦默認(rèn),不然不同手機(jī)可能發(fā)聲不同,并且異常)
? ? ? ? ? ? textToSpeech.setSpeechRate(1.5f)
? ? ? ? ? ? if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
? ? ? ? ? ? ? ? //系統(tǒng)不支持中文播報(bào)
? ? ? ? ? ? ? ? isSupport = false
? ? ? ? ? ? ? ? Log.e("語(yǔ)音",""+isSupport)
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? fun isTTsSupport():Boolean{
? ? ? ? return isSupport
? ? }
? ? fun play(text: String) {
? ? ? ? if (!isSupport) {
? ? ? ? ? ? Toast.makeText(mContext, "暫不支持", Toast.LENGTH_SHORT).show()
? ? ? ? ? ? return
? ? ? ? }
? ? ? ? //設(shè)置播報(bào)語(yǔ)音音量(跟隨手機(jī)音量調(diào)節(jié)而改變)
? ? ? ? val myHashAlarm = hashMapOf<String,String>()
? ? ? ? myHashAlarm[TextToSpeech.Engine.KEY_PARAM_STREAM] = AudioManager.STREAM_MUSIC.toString()
? ? ? ? //語(yǔ)音播報(bào)
? ? ? ? //QUEUE_ADD:播放完之前的語(yǔ)音任務(wù)后才播報(bào)本次內(nèi)容
? ? ? ? //QUEUE_FLUSH:丟棄之前的播報(bào)任務(wù)诈唬,立即播報(bào)本次內(nèi)容
? ? ? ? textToSpeech?.speak(text, TextToSpeech.QUEUE_FLUSH, myHashAlarm)
? ? }
? ? fun destroy() {
? ? ? ? textToSpeech?.stop()
? ? ? ? textToSpeech?.shutdown()
? ? }
? ? companion object {
? ? ? ? //單例對(duì)象
? ? ? ? @SuppressLint("StaticFieldLeak")
? ? ? ? private var singleton: TTSUtils? = null
? ? ? ? fun getInstance(context: Context): TTSUtils {
? ? ? ? ? ? if (singleton == null) {
? ? ? ? ? ? ? ? synchronized(TTSUtils::class.java) {
? ? ? ? ? ? ? ? ? ? if (singleton == null) {
? ? ? ? ? ? ? ? ? ? ? ? singleton = TTSUtils(context)
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? return this.singleton!!
? ? ? ? }
? ? }
}
activity中使用方法:
TTSUtils.getInstance(this).play("播放內(nèi)容")