Java 从文件末尾停止MediaPlayer 250ms
我正在谷歌语音文本交互手机应用程序中使用语音识别 当人工智能跟你顶嘴时,我停止听,以抵消噪音 现在,我正在使用Java 从文件末尾停止MediaPlayer 250ms,java,android,kotlin,Java,Android,Kotlin,我正在谷歌语音文本交互手机应用程序中使用语音识别 当人工智能跟你顶嘴时,我停止听,以抵消噪音 现在,我正在使用onCompletedListener在文件末尾恢复识别,但最好在文件结束之前开始,以考虑网络延迟并优化响应时间 是否有办法监视currentPosition并在每个文件末尾250ms处触发事件?它们的长度不一致。检测当前位置的唯一方法是调用“MediaPlayer.getCurrentPosition()”,因此唯一的解决方案是定期检查位置并检查“(MaxPosition-Curren
onCompletedListener
在文件末尾恢复识别,但最好在文件结束之前开始,以考虑网络延迟并优化响应时间
是否有办法监视
currentPosition
并在每个文件末尾250ms处触发事件?它们的长度不一致。检测当前位置的唯一方法是调用“MediaPlayer.getCurrentPosition()”,因此唯一的解决方案是定期检查位置并检查“(MaxPosition-CurrentPosition)”是否在200-300ms之间。这意味着您需要每50/75毫秒检查一次,以确保保持在该范围内
一个改进是,只有在“MediaPlayer.play()”开头的“MaxLength-250ms”之后才开始定期检查(如上所述)
如果您允许在MediaPlayer中进行搜索,则应在每次搜索后更改此计时器。是否有办法在单独的线程上以while循环或类似方式播放音频,而不会使应用程序陷入困境?然后执行检查并做出反应?如果您对其进行编码,您将得到它。您建议什么作为周期检查?只有一个
计时器。scheduleAtFixedRate
功能在50ms循环中检查和反应?最好的方法是在需要的时间前几毫秒开始一个小的“检查循环”。事实上,如果你有一个5分钟的音乐,我不认为你想在这段时间里每50毫秒检查一次,对吗?因此,最好是在“maxLength-500ms”开始循环,然后从那一刻开始每50ms循环一次,直到达到“maxLength-250ms”。循环检查不能保证每50ms执行一次,因此我建议提前一点开始,然后做一个短循环。