android - 检测语音 (TTS) 何时真正结束
问题描述
我正在使用以下代码将文本转换为TTS
语音setOnUtteranceProgressListener.onDone
(是否可以检测到何时真正完成了阅读?
private fun speakSimple(content: String, utteranceId: String, flush: Boolean = false) {
mTTS?.speak(content, if (flush) TextToSpeech.QUEUE_FLUSH else TextToSpeech.QUEUE_ADD, null, utteranceId)
mUtteranceId = utteranceId
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
mView = inflater.inflate(R.layout.fragment_conversation, container, false)
mBotPhraseText = mView!!.findViewById(R.id.botPhraseText)
mInteractionOptionsContainer = mView!!.findViewById(R.id.interactionOptionsContainer)
requestRecordAudioPermission()
mTTS = TextToSpeech(context!!, this)
mTTS?.setOnUtteranceProgressListener(object : UtteranceProgressListener() {
override fun onError(utteranceId: String?) {
}
override fun onDone(utteranceId: String?) {
// This part is executed even before the speech is completed
}
}
override fun onStart(utteranceId: String?) {
}
})
解决方案
TTS不提供此类回调。您指的是UtteranceProgressListener通知侦听器合成事件。设置监听器的文档提到:
设置将通知与给定话语的合成相关的各种事件的侦听器。
因此,onDone
您收到的回调是关于合成的。TTS 服务会通知您所有文本都已处理/准备好。即使,TTS 说这并不意味着整个文本已经被合成。
您可以通过使用而不是说话来实现您想要的synthesizeToFile
,并且当您onDone
从接收UtteranceProgressListener
到将合成文件传递到媒体播放器服务或exoplayer(提供此类侦听器)的方法时,跟踪或操作事件会更容易一些,例如开始、恢复、暂停和停止。
推荐阅读
- sql - 单个查询中的不同计数和带条件的不同计数
- amazon-web-services - AWS 推送通知未发送 | SNS 和精确定位 | Android Studio FCM
- mysql - 自动更新的外键
- excel - VBA Excel在范围内查找字符串不适用于CALL语句
- java - Spring Request Scope 替换失败
- python - Leetcode 问题:矩阵对角线排序 帮助(但不要太多)
- java - 小行星的推力方法复制 Java
- reactjs - Formik setValues 不适用于数字类型输入
- django - Django url路径转换器在生产中不起作用
- wireshark - Wireshark:过滤掉无趣的 zigbee 消息