Android 中的全局 TTS

2023-11-29

您好,我正在为盲人用户开发一个应用程序,因此我经常使用文本转语音,作为响应用户操作的唯一一种方法。 我决定让一个全局 TTS 实例与应用程序的运行时间一样长。 我是这样实现的

package com.simekadam.blindguardian;

import android.content.Context;
import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeech.OnInitListener;

public class SpeechHelper implements OnInitListener {

private static TextToSpeech mTts;
private String text; 
private static final SpeechHelper helper = new SpeechHelper();

public static SpeechHelper getInstance(){

    return helper;
}


public void say(String text, Context context){

    if(mTts == null){
        this.text = text;
        mTts = new TextToSpeech(context, (OnInitListener) helper);

    }
    else{
        mTts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
    }
}


@Override
public void onInit(int status) {
    // TODO Auto-generated method stub
    if (status == TextToSpeech.SUCCESS) {
        mTts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
    }
}

public void stopTTS(){
    if(mTts != null){
        mTts.shutdown();
        mTts.stop();
        mTts = null;
    }
}

}

起初 - 它可以工作但是 ..我想检查这样的语音数据的可用性

protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    Intent checkIntent = new Intent();
    checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
    startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);
    text = getIntent().getExtras();
}


protected void onActivityResult(
        int requestCode, int resultCode, Intent data) {
    if (requestCode == MY_DATA_CHECK_CODE) {
        if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
            // success, create the TTS instance
            mTts = new TextToSpeech(this, (OnInitListener) this);
            mTts.setLanguage(new Locale("cze", "CZE"));
        } else {
            // missing data, install it
            Intent installIntent = new Intent();
            installIntent.setAction(
                TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
            startActivity(installIntent);
        }
    }       
}

它的代码来自 Android 开发人员门户,但我无法启动 Activity 以获取不是 android.Activity 子级的类的结果。 请问如何在不使用活动的情况下检查它,这种调用TTS的方法是否正确? (我之前已经用 Activity 实现了这一切,但是由于错误地关闭了 TTS,因此出现了一些内存泄漏 - 当我正确关闭它时,必须在每次调用时再次创建它 - 太慢了..)


初始化您的全局实例onActivityResult(),在您知道 TTS 数据可用后。您的应用程序需要一个活动,因此从入口活动开始,一旦初始化,所有后续活动都将能够使用您的全局实例。还要考虑何时以及如何关闭它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 中的全局 TTS 的相关文章

随机推荐

  • 为 Android 生成 Google 地图密钥 - 一步一步

    以下是我为 Android 生成地图密钥所遵循的步骤 1 我执行这个命令 keytool list v alias androiddebugkey keystore android debug keystore storepass andr
  • 具有共享数据的 Mongodb 数据库架构设计

    你好 我是 mongodb 的新手 我正在使用 java 我的关系表中有 4 个表租户 系统 授权 像这样的东西 Table Fields Tenant Tenant ID PK Tenant INFO System System ID P
  • 跨编译器访问 __m128 字段

    我注意到访问 m128按索引的字段可以在gcc 不使用union trick m128 t float r t 0 t 1 t 2 t 3 我还可以加载一个 m128就像数组一样 m128 t 1 f 2 f 3 f 4 f 这都符合gcc
  • 用于管理意图、实体的 Bluemix Watson Conversation API

    记录的 API 仅允许在配置后与 Watson Conversation 服务进行交互 是否有任何 API 允许配置 例如创建意图 实体等 好问题 我们同意 我们计划很快公开一组较低级别的 API 以解决您的担忧 布莱恩
  • 这个字符串的范围是多少?

    如果我有以下代码 UnicodeString sFish L FISH char szFish AnsiString sFish c str CallFunc szFish 那么临时的范围是什么呢 AnsiString已创建 持续时间是多久
  • 将java应用程序作为后台进程运行

    我已经使用java制作了一个应用程序 当我将其安装在我的计算机上时 我希望它运行为后台进程而不是应用程序 如果任何用户尝试任务管理器 那么他无法在应用程序中找到它 它不应该在应用程序列表中列出 它在进程列表中 所以请告诉我怎样才能做到这一点
  • 适合编写编译器的好语言

    我正在考虑用 haskell 编写一个编译器 为了获得一些知识和经验 我将尝试为现有语言实现编译器 有人可以给我一份适合于此的语言列表吗 提前致谢 Pascal 可能是一个好的开始 您可以一次性编译它 Lisp 的一个子集可能有助于理解 l
  • 使用纹理区域和引擎渲染精灵

    请注意 这是我第一次尝试 Andengine 我一直在尝试使用 libGdx 作为 Android 游戏开发的潜力 但它不适合我的需求 因为我只想为 Android 进行开发 而使用 3D 引擎来完成 2D 工作似乎有点矫枉过正 我现在想尝
  • 解释 SciPy 层次聚类树状图的输出? (也许发现了一个错误......)

    我想弄清楚如何输出scipy cluster hierarchy dendrogram有效 我以为我知道它是如何工作的 并且我能够使用输出来重建树状图 但似乎我不再理解它了 或者有一个错误Python 3该模块的版本 这个答案 如何获取 s
  • AES128 CTR 加密与 iv

    我想用 iv 和 key 实现 AES128 CTR 我正在寻找如何以最好的方式做到这一点而不是重新发明轮子的建议 我为此找到了很好的库RNC加密器 但看起来那里不支持这个 aes 我也测试this方法 但看起来这不是点击率 EDIT 我使
  • 如何使用 Discord 机器人嵌入消息?

    我想编写一个机器人 将用户发送的消息嵌入到特定频道中 如果您对 GTA RP 服务器有所了解 它就像 Twitter 或 Instagram 机器人 这是一个例子 我认为这与console log和作者的名字 但我不确定 所以这就是我来这里
  • PERL Email::Send::Gmail 无法连接到 Windows 7 上的 Gmail 帐户

    我正在尝试使用Email Send Gmail发送电子邮件 但由于某种原因 我收到一条错误消息 不允许我连接 代码是标准示例 usr bin perl use strict use warnings use Email Send use E
  • EmberJS registerHelper 在 Ember 1.8 中动态渲染模板

    我想动态渲染一个模板 如下所示 each layout in layouts render layout get type layout each 问题是 render 不需要变量作为它的第一个参数 所以在旧的 EmberJS 版本中 可以
  • 如何将 d3.js 图表转换/保存为 pdf/jpeg

    我正在开发一个客户端 javascript 函数来将现有的 D3 SVG 图形保存或转换为文件 我搜索了很多并找到了一些建议 主要使用canvas toDataURL 我没有
  • 如何将文件嵌入到 exe 中?

    我需要一个包含我的数据的文件嵌入到一个exe中 这样当用户调用它时 它将打开该文件 读取它 采取行动 并且用户看不到该文件或无法访问它或知道它存在 我怎样才能做到这一点 像 Molebox 这样的文件加壳器可以做到这一点 但会花费相当多的费
  • iPhone:如何允许在自定义单元格的表格视图中进行多项选择?

    我该如何调整它才能进行多项选择 并获取选定的 id initWithCellIdentifier NSString cellID if self super initWithStyle UITableViewCellStyleDefault
  • EF4.1:可能有零或一到零或一(0..1 到 0..1)的关系吗?

    NET 4 0 与 SQL Server 2008 R2 我试图表示 0 1 到 0 1 的关系 但不断收到以下错误 错误 113 多重性与关系 1 中角色 0 中的引用约束冲突 由于从属角色中的所有属性均不可为空 因此主体角色的重数必须为
  • 在多项目解决方案中共享变量

    我正在使用 C 在 VS2010 中为 Outlook 2010 创建一个解决方案 该解决方案由 3 个项目组成 项目 A B 和 C 都依赖于此 它定义了需要从 B 和 C 访问的某些变量 函数 项目 B 需要从 A 读取变量 项目 C
  • 如何在不访问 http://getfirebug.com 的情况下包含 firebug light?

    过去我可以包含萤火虫灯 如下所述 JavaFX WebView 中的 Html Javascript 调试 不幸的是 链接 http getfirebug com releases lite 1 2 firebug lite compres
  • Android 中的全局 TTS

    您好 我正在为盲人用户开发一个应用程序 因此我经常使用文本转语音 作为响应用户操作的唯一一种方法 我决定让一个全局 TTS 实例与应用程序的运行时间一样长 我是这样实现的 package com simekadam blindguardia