android – TextToSpeech:检查它是否在线或离线API

前端之家收集整理的这篇文章主要介绍了android – TextToSpeech:检查它是否在线或离线API前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在尝试实现一个用不同语言读取文本的应用程序.令人惊讶的是,当我使用isLanguageAvailable(Locale loc)方法时,对于尚未下载的Google TTS列表中的语言,它返回true.当我调用speak()方法时,它们甚至被播放.我的结论是,这是因为它们是在线声音.

文档显示您可以通过Voice对象使用方法getFeatures()来了解语音是否在线.但是,Voice类是针对API> = 21实现的.对于API< 21,在TextToSpeech类上还有一个getFeatures(Locale loc)方法,它应该返回一个具有不同特征描述的字符串数组.我在不同的引擎和语言环境中尝试了最后一种方法,我通常得到一个空数组.可能这是TTS开发人员可以填写或不填写的额外信息...... 那么,我怎么知道tts-locale是否是API的在线版本< 21?

最佳答案
Google文本到语音引擎的独特之处在于,如果用户未安装额外的“离线”下载,它可以使用网络合成语音.

通常要求这个,你会包括

put(TextToSpeech.Engine.KEY_FEATURE_NETWORK_SYNTHESIS,String.valueOf(shouldNetwork()));

他们的网络合成声音过去质量明显较高,但最近他们的改进并不那么明显.

文本到语音引擎提供的信息API< 21是无望的和一般的错误,正如你从isLanguageAvailable(Locale loc)的调用中注意到的那样,大多数引擎都报错了.新API尝试解决此问题,因此您将难以使用API​​< 21获取您可以信赖的详细信息.查看my answer on this question如何查询元素.

在撰写本文时,即使使用新API,引擎也会提供不正确的信息.

以IVONA为例,查询getVoices()时返回类似于:

Voice[Name: en-US,locale: en_US,quality: 300,latency: 300,requiresNetwork: false,features: [embeddedTts]] 

但它省略了:

Voice[Name: en-US,features: [embeddedTts,**notInstalled**]] 

因此,您的代码将假设此引擎将工作,它不会….这是非常令人沮丧的,以及我的未答复的错误报告给他们.

以上所述,您可能目前不得不在第一次尝试与引擎通话时使用简单通知,单击时会显示应用程序的常见问题解答 – 在常见问题解答中,您将解释如果引擎不说话,检查安装和下载…….

令人沮丧的是,我无法为您发布一切简单的代码片段.

猜你在找的Android相关文章