预加载 TTS 语言而不将用户重定向到 Android 中的系统设置?

问题描述 投票:0回答:1

我正在开发一款包含文本转语音 (TTS) 功能的 Android 应用程序。在我的应用程序中,用户通常没有下载所有必需的 TTS 语言文件。目前,我使用

ACTION_INSTALL_TTS_DATA
意图打开系统窗口,提示用户选择并下载所需的语言文件。

但是,我希望通过避免重定向到系统窗口并直接在我的应用程序中启动下载过程来提供更无缝的用户体验。我最初的想法是将 TTS 语言文件存储在 S3 存储桶上,然后下载并将它们预加载到用户设备上的 TTS 引擎中。

是否有一种解决方法可以在不使用

ACTION_INSTALL_TTS_DATA
意图的情况下预加载 TTS 语言,从而允许用户留在应用程序中而不是被重定向到系统窗口?如果是这样,我该如何实现这一目标,或者是否有其他方法可以解决这个用例?

当前代码:

var tts: TextToSpeech? = null

tts = TextToSpeech(this) { status ->
    if (status == TextToSpeech.SUCCESS) {
        val availableLanguages = tts!!.availableLanguages
            
        if (!availableLanguages.contains(Locale.forLanguageTag("ro"))) {
            val intent = Intent(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA)
            startActivity(intent)
        }
    }
}
android kotlin text-to-speech google-text-to-speech
1个回答
0
投票

这里的主要问题是,在 Android 上,无法提前知道最终用户将安装什么实际的 TTS 引擎(或该引擎的哪个子版本)......并且这些引擎之间的行为各不相同,或者它们是否支持某种特定语言。您可以查询在运行时安装/激活的引擎,但是您必须根据引擎调整您的方法,即使这样您也无法预测将来会存在哪些引擎。

我相信,如果您尝试使用已卸载的语言,某些引擎(例如 Google)可以自动下载一种语言...但在此期间您仍然会遇到延迟,并且您必须弄清楚如何处理在你的应用程序中。

基本上,根据我的经验,在我看来,您可以按照从最好到最差的顺序进行以下选择:

  1. 使用云 TTS 服务。

这消除了不可预测的因素,并且始终可以获得所需的声音。唯一的问题是用户需要互联网,你可能需要付费。

  1. 只需使用你现在拥有的,它正确地符合 Android 的设计方式。

  2. 在您的应用程序中使用静态 TTS 库(不完全直接)

这意味着您实际上不再使用外部 Android TTS“服务”,并且 TTS 被硬编码到您的应用程序中。据我所知,如果不使用听起来不太好的非常过时的 TTS 引擎,这实际上是不可行的,而且将是一项非常艰巨的任务。不过,也许现在存在一些更新的东西,也许使用机载人工智能或其他东西。

  1. 确定您是否同意在您的应用程序运行之前强制用户安装最新的 Google TTS 引擎。这会将范围缩小到更可预测的场景,但仍不确定是否可以在不转移用户的情况下下载语音。

  2. 尝试容纳所有可能的用户配置(不可行)。

© www.soinside.com 2019 - 2024. All rights reserved.