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

android–TextToSpeech:检查它是否在线或离线API,第1张

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

我正在尝试实现一个用不同语言读取文本的应用程序.令人惊讶的是,当我使用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 – TextToSpeech:检查它是否在线或离线API全部内容,希望文章能够帮你解决android – TextToSpeech:检查它是否在线或离线API所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1139365.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存