Android 语音 - 如何在 Android 中阅读文本?

2023-12-10

如何在 Android 中读取数据,即将简单的文本字符串转换为语音(语音)?

有没有一个API可以让我做这样的事情:

TextToVoice speaker = new TextToVoice();
speaker.Speak("Hello World");

使用 TTS 比您预期的要复杂一些,但是编写一个包装器来提供您想要的 API 是很容易的。

要使其正常工作,您必须克服许多问题。

他们是:

  1. 始终设置 UtteranceId(否则 OnUtteranceCompleted 不会 称为)
  2. 设置 OnUtteranceCompleted 听众(仅在演讲之后 系统已正确初始化)

public class TextSpeakerDemo implements OnInitListener
 {
    private TextToSpeech tts;
    private Activity activity;

    private static HashMap DUMMY_PARAMS = new HashMap();
    static 
    {
        DUMMY_PARAMS.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "theUtId");
    }
    private ReentrantLock waitForInitLock = new ReentrantLock();

    public TextSpeakerDemo(Activity parentActivity)
    {
        activity = parentActivity;
        tts = new TextToSpeech(activity, this);       
        //don't do speak until initing
        waitForInitLock.lock();
    }

    public void onInit(int version)
    {        //unlock it so that speech will happen
        waitForInitLock.unlock();
    }  

    public void say(WhatToSay say)
    {
        say(say.toString());
    }

    public void say(String say)
    {
        tts.speak(say, TextToSpeech.QUEUE_FLUSH, null);
    }

    public void say(String say, OnUtteranceCompletedListener whenTextDone)
    {
        if (waitForInitLock.isLocked())
        {
            try
            {
                waitForInitLock.tryLock(180, TimeUnit.SECONDS);
            }
            catch (InterruptedException e)
            {
                Log.e("speaker", "interruped");
            }
            //unlock it here so that it is never locked again
            waitForInitLock.unlock();
        }

        int result = tts.setOnUtteranceCompletedListener(whenTextDone);
        if (result == TextToSpeech.ERROR)
        {
            Log.e("speaker", "failed to add utterance listener");
        }
        //note: here pass in the dummy params so onUtteranceCompleted gets called
        tts.speak(say, TextToSpeech.QUEUE_FLUSH, DUMMY_PARAMS);
    }

    /**
     * make sure to call this at the end
     */
    public void done()
    {
        tts.shutdown();
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 语音 - 如何在 Android 中阅读文本? 的相关文章

  • “_加载小部件时出现问题”消息

    加载小部件时 如果找不到资源或其他内容 则会显示 加载小部件时出现问题 就这样 惊人的 此消息保留在主屏幕上 甚至没有说明加载时遇到问题的小部件 我通过反复试验弄清楚了这一点 但我想知道发生这种情况时是否有任何地方可以找到错误消息 Andr
  • Android NDK 中使用“dynamic_cast”时出现“UnsatisfiedLinkError”

    我是 Android 开发新手 我面临下一个问题 当我使用 C 代码时 动态演员 表达方式 不满意的链接错误 当我在模拟器上启动应用程序时出现 但是当我在没有它的情况下运行应用程序时 一切正常 我的意思是 LogCat 没有任何错误 我尝试
  • GridView 中多次调用 getView()

    我的 Activity 由包含 40 多个元素的 GridView 组成 开始活动后 用户最多可以看到 15 个项目 3 行 每行 5 个项目 我在 getView 正文中编写传递给获取 View 的 LogCat 编号 Log i get
  • 将正确的上下文传递给 greendao 的 OpenHelper 构造函数

    如果我理解正确的话 在使用数据库时 我必须执行以下操作 DaoMaster OpenHelper helper new DaoMaster OpenHelper this test db null Override public void
  • 在 Anko DSL 中创建自定义 View/ViewGroup 类

    我想创建一个自定义视图 它只是一些 Android 视图的包装 我考虑创建一个自定义 ViewGroup 来管理其子视图的布局 但我不需要这么复杂 我基本上想做的是 class MainActivity verticalLayout tex
  • android webview 函数 onPagefinished 被调用两次

    我的android webview功能onPageFinished被调用两次 我不知道为什么 但它在 android 2 2 上运行良好 但当我将其升级到 4 时 它就不起作用了 代码附在下面 Code Override public vo
  • Retrofit-2 内容类型问题

    我的 Api 接受 Content Type application json 作为标头 我按照改造文档中所述完美设置了标题 Headers Content Type application json POST user classes C
  • 如何从一个代码库创建多个 Android 应用

    我有一个 Android 代码库 它使用带有设置的 API 来获取多个应用程序的不同数据 所有应用程序都使用相同的代码库 但进行一两个设计调整 那么如何重用主代码库而不必每次都复制整个 Android 项目呢 iPhone 在同一个项目中使
  • Firestore - RecycleView - 图像持有者

    我不知道如何编写图像的支架 我已经设置了 2 个文本 但我不知道图像的支架应该是什么样子 你能帮我告诉我图像的文字应该是什么样子才能正确显示吗 holder artistImage setImageResource model getArt
  • 如何以编程方式断开拨出呼叫

    我使用以下代码以编程方式断开呼叫 但它不起作用 private void callDisconnect try TelephonyManager manager TelephonyManager this getSystemService
  • Android:应用内计费V3超时返回哪个响应码?

    出现网络超时情况时 Google Play 应用内结算服务 ice er V3 将返回哪些响应状态代码 它的所有功能都是统一的吗 我将在这里描述我的发现 我通过拔掉主机插头 在安装了全功能 GP GP Store V3 10 10 GP S
  • 应用内结算错误

    我的 UNMANAGED 应用内购买无法正常工作 在它完美运行之前 我可以使用测试帐户成功购买 但它突然不起作用了 因为我记得我对商家帐户所做的只是添加更多 2 4 个测试帐户 添加后 我的应用内购买将不起作用 所以我更新了公钥并上传了一个
  • 尝试在模拟器上安装第二个 flutter 应用程序时出错

    我创建了一个简单的 flutter 应用程序并在 android 模拟器上运行它 效果还不错 现在我创建了另一个 当我尝试在模拟器上运行它时 我得到 Error ADB exited with exit code 1 adb failed
  • Android Studio更新到1.5后Gradle错误

    今天我已将 Android Studio 更新到 v1 5 我的 libgdx 项目在这次更新之前运行良好 现在我收到此错误消息 Error Unable to load class org gradle mvn3 org sonatype
  • 如何强制从本机代码打开 Android 软键盘?

    我有一个游戏 当用户触摸屏幕时 它使用从 C 到 Java 的回调来强制打开软键盘 Java代码很简单是这样的 this inputMethodManager toggleSoftInput InputMethodManager SHOW
  • Web 视图未在 Android 中加载本地 html 文件

    I am integrating html in android I have created a web view But i am not able load local html page Surprisingly web view
  • Android 从命令行停止模拟器

    这个问题与如何通过命令行关闭Android模拟器 https stackoverflow com questions 5912403 how to shut down android emulator via cmd 但是 在尝试第一个答案
  • NoClassDefFoundError:无法解析:Landroid/support/v7/appcompat/R$styleable

    新手尝试完成 Google 提供的我的第一个应用程序教程 在这个致命异常的过程中 我确实导入了很多随机包来消除许多事情的 无法解析 错误 例如 ActionBarActivity EditText Fragment LayoutInflat
  • 安卓的限制

    我需要构建一个应用程序 该应用程序拍摄相机图像并将其上传到网络 在网络上进行一些处理并返回真 假 我在这方面遇到了一些问题 希望得到澄清 1 我的应用程序有什么方法可以知道 Android 相机捕获的图像吗 我从这里明白了什么 Androi
  • Android:解析 XML 数据的最佳解析器 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在开发一个应用程序 其中我第一次要解析来自远程服务器的 xml 文件中的数据 但我无法选择哪个解析器是有效的或最适合解析的 因为我知道主要有

随机推荐

  • 将派生类型与过程从模块放置到子模块

    我需要一些有关使用子模块的帮助 我的目的是使用一个子模块来表示来自父模块的特定派生类型 并且我想将派生类型的整个声明放入子模块中 例如 这是我想要转换的示例代码 MODULE PARENT MODULE IMPLICIT NONE TYPE
  • 如何知道给定的DLL是否被给定的进程加载? [复制]

    这个问题在这里已经有答案了 可能的重复 如何以编程方式获取 DLL 依赖项 在 Windows 上 在 C 程序中 我想知道给定的 DLL 我知道路径 是否由给定的外部进程 我知道 exe 的路径 使用 win32 函数加载 必须能够列出进
  • ObjectContext.GetObjectType(e.GetType()) 不返回 POCO 实体的实体类型

    The ObjectContext GetObjectType 方法应该返回 与指定类型的代理对象关联的 POCO 实体的实体类型 那么为什么在我的代码中它只返回代理呢 我正在使用实体框架 6 候选版本 Soft delete var e
  • 如何使在网络 A 框架中动态生成的实体可点击?

    我正在使用网络 A 框架在加载页面时生成一个新实体 我想在这些实体上添加一些功能 例如悬停 单击等 我尝试使其可单击 但没有成功 function rigClick console log Entity Clicked
  • 访问 PHP 函数中的全局变量

    根据大多数编程语言的作用域规则 我可以访问在函数内部定义的变量 但为什么这段代码不起作用 输出是 为了解决所提出的问题 它不起作用 因为您需要声明将在函数本身中访问哪些全局变量 data My data function menugen g
  • Python 中的 Selenium 单元测试——我的日志文件在哪里?

    因此 我将一些单元测试从 Selenium IDE 导出到 Python 现在我正在尝试调试一些东西 我注意到 Selenium 使用logging模块 有一个特定的行selenium webdriver remote remote con
  • Firefox 中的隐藏滚动条(允许滚动但没有滚动条)

    我想创建一个能够滚动但不显示滚动条的 div 我已经找到了 Webkit 的解决方案 如下 但是如何在其他浏览器中完成此操作 我宁愿避免使用 JavaScript 插件 希望找到 CSS 或供应商特定的解决方案 网络套件解决方案 photo
  • fseeko,fseeko64; ftello、ftello64 Visual C 等效项

    有人可以帮助我告诉我 fseeko 的 Visual C 等价物是什么吗 fseeko64 ftello ftello64 谢谢 没有返回 使用 off t 的函数 如果您需要 64 位位置 可以使用 fseeki64 ftelli64
  • 在Java中解析“2010年1月10日”格式的日期? (使用序数指标,st|nd|rd|th)

    我需要用Java解析 2010年1月10日 格式的日期 我怎样才能做到这一点 如何处理序数指标 the st nd rd or th跟踪天数 这有效 String s January 10th 2010 DateFormat dateFor
  • 查找对象的所有属性和子属性

    有时我想知道一个对象是否具有我正在寻找的属性 但有时一个对象有很多属性 可能需要一些时间才能找到它并进行调试 如果我可以编写一个函数来查找字符串中的所有属性及其值 那么我可以将该字符串粘贴到记事本中 并使用记事本具有的查找功能查找我正在查找
  • 如何解压Google AppEngine批量下载器编写的sqlite3数据库

    我需要下载应用程序数据存储区中相当大 多 GB 实体的所有实例 我有足够的磁盘空间来存储实体的数据 但不足以存储批量下载程序作为 SQLite 数据库检索的原始数据and下载程序在应用我的bulkloader yaml 文件中指定的转换后写
  • android_build.sh 在构建 ffmpeg 库时出错

    我正在尝试构建 ffmpeg 库 下面给出了我的 android build sh bin bash NDK C Users Benzatine Downloads android ndk r10e SYSROOT NDK platform
  • KDB:在两个列表中应用二元函数

    考虑一个函数F x y 生成一个表 我还有两个清单 xList x1 x2 x3 and yList y1 y2 y3 进行简单逗号连接的最佳方法是什么F x1 y1 F x1 y2 F x1 y3 F x2 y1 从而产生一张大桌子 您已
  • 错误“函数参数太少”

    我在以下代码片段中遇到错误 Too few arguments to function showtbl GetTabellen ns 0 passed in abcde folder php php on line 153 and exac
  • C# 中是否有像 Java 中那样的 splitByCharacterType 方法?

    Java中有一个方法按字符类型分割例如 需要一个字符串0015j8 并将其分成 0015 j 8 c 中有这样的内置函数吗 如果不是 我将如何构建一个函数来执行此操作 public static IEnumerable
  • ror 中使用 Paperclip 进行多次上传

    我正在使用回形针上传一栋建筑物的一张照片 http www youtube com watch v KGmsaXhIdjc我已经用这种方法做到了 但我决定将多张照片上传到一栋建筑 我可以使用回形针来做到这一点还是必须更改它并使用 jQuer
  • 两个 int 相乘得到负数

    我目前正在编写一个小下载管理器 当我尝试以百分比计算下载进度时 我得到了一个有趣的输出 这就是我用来计算的 int progress byte counter 100 size System out println byte counter
  • 调用共享WebMethod时出现未知Web方法异常

    我正在尝试在我的网站上实施视图跟踪网络服务 我使用 JavaScript 是因为我想从我的跟踪视图中排除任何搜索机器人 问题是当我尝试使用 jQuery 发布到我创建的 Web 服务时 出现 未知的 Web 方法 错误 document r
  • 在 PHP 中显示更多数字

    假设我有 echo 1 3 它只打印出 0 33333333333333 我可以得到更多的数字吗 Can use bcdiv echo bcdiv 1 3 20 第三个论点 用于设置结果中小数点后的位数 您还可以使用 bcscale 设置所
  • Android 语音 - 如何在 Android 中阅读文本?

    如何在 Android 中读取数据 即将简单的文本字符串转换为语音 语音 有没有一个API可以让我做这样的事情 TextToVoice speaker new TextToVoice speaker Speak Hello World 使用