Convert Text-to-Speech in Java2025年5月10日 | 阅读 6 分钟 文本转语音(TTS)或朗读是一种辅助技术(它是指辅助、自适应和康复设备,用于残疾人士),可以朗读数字文本。文本转语音(TTS)转换是 ATM、在线翻译器、文本扫描仪等智能设备的高级功能。在应用程序中实现文本转语音技术,由于相关的可访问性,可以增强客户体验。如今,它被广泛用于将书籍制作成有声读物。甚至一个名为Audible的流行平台也通过使用 TTS 技术提供数千本有声读物。大多数智能设备都带有此功能。 在本节中,我们将讨论Java Speech API FreeTTS以及如何使用 Java 程序将文本转换为语音。 ![]() Java Speech API (JSAPI)Java 提供了Speech API,它将语音技术集成到 UI 中。它定义了一个跨平台 API,用于支持命令和控制识别器、听写系统和语音合成器。它不是 JDK 的一部分。它是一个第三方语音 API,旨在鼓励多种实现的可用性。TTS 系统的架构如下图所示。 ![]() JSAPI 包括两个规范,即JSML(Java Speech API 标记语言)和JSGF(Java Speech API 语法格式)。JSML 定义了用于标记文本以输入到语音合成器的标准文本格式。而 JSGF 定义了为语音识别器提供语法的标准文本格式。下图说明了文本转语音的框图。 ![]() JSAPI 在将文本转换为语音时需要四样东西。 Engine (引擎)它是 javax.speech 包中定义的所有语音引擎的父接口。语音引擎包括 Recognizer(识别器)和 Synthesizer(合成器)。因此,它同时处理语音输入和语音输出。 createRecognizer() 和 createSynthesizer() 方法用于创建语音引擎。这两个方法都接受一个参数 EngineModeDesc,该参数定义了要创建的引擎所需的属性。 该参数可以是其子类之一,即 RecognizerModeDesc 或 SynthesizerModeDesc。 模式描述符定义了一组引擎所需的属性。例如,SynthesizerModeDesc 可以描述一个具有男性声音的瑞士德语合成器。类似地,RecognizerModeDesc 可以描述支持日语听写的识别器。 Central (中央)它是属于 javax.speech 包的类。它是所有语音输入和输出能力器的初始接入点。它提供了定位、选择和创建语音识别器和语音合成器的能力。 SynthesizerModeDesc (合成器模式描述符)它扩展了 EngineModeDesc,并包含了语音合成器特有的属性。 Synthesizer (合成器)它也是一个提供语音合成能力主要访问权限的接口。SynthesizerModeDesc 添加了两个属性:合成器提供的声音列表和在合成器启动时要加载的声音。 第三方语音 APIJava 提供了以下第三方语音 API,可用于将文本转换为语音。
在本节中,我们将讨论广泛使用的语音合成 APIFreeTTS。 FreeTTSFreeTTS 是一个完全用 Java 编程语言编写的开源语音合成系统。它基于festival-lite,也称为 CMU Flite。它是一个小型、快速的运行时开源文本转语音合成引擎。通过使用 FreeTTS API,我们可以让计算机说话。换句话说,我们可以说它是人类语音的人工制作,它将普通文本转换为语音。 为了创建一个 Java 程序,我们首先需要下载并安装FreeTTS API。请按照以下步骤操作。 步骤 1:下载 FreeTTS API(zip 格式)。 步骤 2:解压 zip 文件,该文件提供两个文件夹,如下图所示。 ![]() 步骤 3:访问目录 C:\freetts-1.2.2-bin\freetts-1.2\lib\jsapi.exe ![]() 步骤 4:通过双击 jsapi.exe 文件安装 jsapi。通过点击 I Agree 按钮接受许可协议。 ![]() 现在点击 Close 按钮。上述过程会在 jsapi.exe 文件所在的相同位置生成一个名为 jsapi.jar 的 jar 文件。这是一个 jar 文件,其中包含创建文本转语音应用程序所需的 FreeTTS 库。 ![]() 我们已正确安装 JSAPI。 步骤 5:现在,我们将像平常一样在 IDE 中创建一个 Java 项目。在本例中,我们创建了一个名为 TTS 的 Java 项目。在此项目中,我们创建了一个名为 TextToSpeechExample1 的类并编写了以下代码。 ![]() 注意:在运行程序之前,我们必须确保以下 jar 文件已包含在我们的项目中。![]() 步骤 6:导航到目录 C:\freetts-1.2.2-bin\freetts-1.2 并复制 speech.properties 文件,然后将属性文件粘贴到主目录中。在本例中,目录是 C:\Users\Anubhav。 ![]() 让我们创建一个将文本转换为语音的 Java 程序。 文本转语音 Java 程序TextToSpeechExample1.java 现在运行上述程序。由于输出只能听到,因此无法在此处显示。所以,请自行尝试。 TextToSpeechExample2.java JSAPI 还允许我们使用 setRate()、setPitch() 和 setVolume() 方法分别设置声音的速率、音高和音量。例如,请看以下 Java 程序。 在以下程序中,请注意,我们使用了 com.sun.speeach 包,而不是 javax.speech 包。 TextToSpeechExample3.java 注意:上述程序的输出是可听的。下一主题Java-查找平面图最大团的程序 |
数字补码问题是一个涉及二进制运算和位操作的有趣挑战。在本节中,我们将详细探讨这个问题,深入研究其背后的理论,并提供一个全面的 Java 解决方案。这个问题通常出现在编码...
5 分钟阅读
图像处理是计算机视觉的一个重要方面,它使计算机能够像人脑一样识别和处理图像。Java 提供了一个强大的环境,可以在其中使用健壮的库实现图像处理算法,并且不受平台依赖性的影响。边缘检测...
7 分钟阅读
持续集成(CI)和持续交付(CD)已成为现代软件开发实践的重要组成部分。这些方法旨在加强协作、提高代码质量并加速软件交付。Java 作为构建健壮且可扩展应用程序的常用编程语言,在...
阅读 2 分钟
在 Java 中,复制数组意味着创建一个新数组,并将元素的内容从现有数组传输到新数组。这样做是为了使两个数组可以独立使用而不会相互影响。为什么我们需要复制数组?复制...
5 分钟阅读
在计算数学和算法问题解决领域,一项常见的任务是处理和分析矩阵。一个有趣的问题涉及找到一个二维矩阵中心到零(0)的最远距离。这个任务不仅展示了数学的优雅...
阅读 4 分钟
Java 的多线程功能是一种有效的工具,可以通过允许多个线程同时运行来提高程序性能和资源利用率。线程层级的概念为管理并发工作提供了有组织的方法,是 Java 线程模型的基础。本节...
5 分钟阅读
DRY(Don't Repeat Yourself,不要重复自己)方法是一种帮助程序员编写更清晰、更易于管理的密码的思维方式。它超越了简单的编码指南。在 Java 编程方面,DRY 代表 Don't Repeat Yourself。它鼓励程序员只编写一次逻辑,并...
阅读 4 分钟
java.text.ChoiceFormat 类包含一个 hashcode() 函数。使用 ChoiceFormat 类获取选择格式对象的哈希码。返回表示此哈希码值的整数。语法:public int hashCode() 参数:此方法不接受任何参数。返回值:...
阅读 2 分钟
? Java 是最广泛使用的编程语言之一,应用范围广泛,从开发移动应用程序到基于 Web 的应用程序和软件系统。然而,Java 并非没有需要故障排除的问题,包括弃用错误。当方法或...
阅读 4 分钟
在 Java 编程中,方法签名是指方法的唯一标识符。它包括方法名称及其参数列表。签名有助于区分一个方法与另一个方法,并允许 Java 编译器将方法调用与其对应的定义进行匹配....
阅读 3 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India