gpt4 book ai didi

android - 文字转语音 : check if it is on-line or off-line for API < 21

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:52:33 25 4
gpt4 key购买 nike

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

文档表明,您可以通过对语音对象使用 getFeatures() 方法来了解语音是否在线。但是,Voice 类是为 API >= 21 实现的。对于 API < 21,还有一个getFeatures(Locale loc) 方法以及 TextToSpeech 类,它应该返回一个具有不同特征描述的字符串数组。我已经在不同的引擎和语言环境上尝试了最后一种方法,我通常得到一个空数组。大概,这是TTS开发者可以填写或不填写的额外信息...

那么,我怎么知道 tts-locale 是否是 API < 21 的在线语言环境?

最佳答案

Google Text to Speech 引擎的独特之处在于,如果用户没有安装额外的“离线”下载,它可以使用网络合成语音。

通常要请求这个,你会包括:

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

他们的网络合成语音曾经具有明显更高的质量,但最近随着他们的改进,这一点不那么明显了。

Text to Speech 引擎提供的 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, locale: en_US, quality: 300, latency: 300, requiresNetwork: false, features: [embeddedTts, **notInstalled**]] 

因此,您的代码将假定此引擎可以正常工作,但它不会......这非常令人沮丧,还有我向他们提交的未答复错误报告。

综上所述,您目前可能不得不在第一次尝试与引擎对话时退回到简单的通知,单击该通知会导致您的应用出现常见问题解答 - 在常见问题解答中,您将解释如果引擎不说话,请检查安装和下载......

令人沮丧的是,我无法为您发布一切正常的简单代码 fragment 。

关于android - 文字转语音 : check if it is on-line or off-line for API < 21,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37663691/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com