代码如下
private var mTextToSpeech: TextToSpeech? = null
private var initSuccess = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
//首先需要初始化引擎
initialize(this)
if(initSuccess){
speak("这是一条测试语音播报")
}
}
private fun initialize(context: Context){
//初始化回调,成功之后就可以对 Tts 进行设置
mTextToSpeech = TextToSpeech(context, object: TextToSpeech.OnInitListener{
override fun onInit(status: Int) {
if (status == TextToSpeech.SUCCESS){
initSuccess = true
//设置 Tts 的语言种类,并且判断是否设置成功
if(mTextToSpeech?.setLanguage(Locale.CHINESE) == TextToSpeech.LANG_AVAILABLE){
//设置 Tts 的音调高度,默认为1,越低则声调越低
mTextToSpeech!!.setPitch(0.8f)
//设置 Tts 的语速
mTextToSpeech!!.setSpeechRate(1.0f)
//这里设置的为 Tts.speak 的回调
mTextToSpeech!!.setOnUtteranceProgressListener(object: UtteranceProgressListener() {
override fun onStart(utteranceId: String?) {
}
override fun onStop(utteranceId: String?, interrupted: Boolean) {
}
override fun onDone(utteranceId: String?) {
}
override fun onError(utteranceId: String?) {
}
})
}
}
}
})
}
private fun speak(text: String){
/**
* TextToSpeech.QUEUE_FLUSH 指语音播报为当语音播报未结束时
* 此时再调用 speak 方法则直接停止上一条播报
* TextToSpeech.QUEUE_ADD 则为将下一条添加到队列中
* 上一条播报完毕再播放下一条
* 这里最后一个参数为 utteranceId
* 如果需要对播报情况进行监听
* 即了解播报开始、结束、失败等状态
* 那么这个参数不能为空,否则上面的 UtteranceProgressListener 将不会收到任何回调
**/
mTextToSpeech.speak(text, TextToSpeech.QUEUE_FLUSH, null, "testId")
}