Convert Text-to-Speech in Java

2025年5月10日 | 阅读 6 分钟

文本转语音(TTS)或朗读是一种辅助技术(它是指辅助、自适应和康复设备,用于残疾人士),可以朗读数字文本。文本转语音(TTS)转换是 ATM、在线翻译器、文本扫描仪等智能设备的高级功能。在应用程序中实现文本转语音技术,由于相关的可访问性,可以增强客户体验。如今,它被广泛用于将书籍制作成有声读物。甚至一个名为Audible的流行平台也通过使用 TTS 技术提供数千本有声读物。大多数智能设备都带有此功能。

在本节中,我们将讨论Java Speech API FreeTTS以及如何使用 Java 程序将文本转换为语音。

Convert Text-to-Speech in Java

Java Speech API (JSAPI)

Java 提供了Speech API,它将语音技术集成到 UI 中。它定义了一个跨平台 API,用于支持命令和控制识别器、听写系统和语音合成器。它不是 JDK 的一部分。它是一个第三方语音 API,旨在鼓励多种实现的可用性。TTS 系统的架构如下图所示。

Convert Text-to-Speech in Java

JSAPI 包括两个规范,即JSML(Java Speech API 标记语言)和JSGF(Java Speech API 语法格式)。JSML 定义了用于标记文本以输入到语音合成器的标准文本格式。而 JSGF 定义了为语音识别器提供语法的标准文本格式。下图说明了文本转语音的框图。

Convert Text-to-Speech in Java

JSAPI 在将文本转换为语音时需要四样东西。

Engine (引擎)

它是 javax.speech 包中定义的所有语音引擎的父接口。语音引擎包括 Recognizer(识别器)和 Synthesizer(合成器)。因此,它同时处理语音输入和语音输出。

createRecognizer()createSynthesizer() 方法用于创建语音引擎。这两个方法都接受一个参数 EngineModeDesc,该参数定义了要创建的引擎所需的属性。

该参数可以是其子类之一,即 RecognizerModeDescSynthesizerModeDesc

模式描述符定义了一组引擎所需的属性。例如,SynthesizerModeDesc 可以描述一个具有男性声音的瑞士德语合成器。类似地,RecognizerModeDesc 可以描述支持日语听写的识别器。

Central (中央)

它是属于 javax.speech 包的类。它是所有语音输入和输出能力器的初始接入点。它提供了定位、选择和创建语音识别器和语音合成器的能力。

SynthesizerModeDesc (合成器模式描述符)

它扩展了 EngineModeDesc,并包含了语音合成器特有的属性。

Synthesizer (合成器)

它也是一个提供语音合成能力主要访问权限的接口。SynthesizerModeDesc 添加了两个属性:合成器提供的声音列表和在合成器启动时要加载的声音。

第三方语音 API

Java 提供了以下第三方语音 API,可用于将文本转换为语音。

  1. FreeTTS
  2. IBM 的 Java 语音
  3. The Cloud Garden
  4. Conversa Web 3.0
  5. Festival

在本节中,我们将讨论广泛使用的语音合成 APIFreeTTS

FreeTTS

FreeTTS 是一个完全用 Java 编程语言编写的开源语音合成系统。它基于festival-lite,也称为 CMU Flite。它是一个小型、快速的运行时开源文本转语音合成引擎。通过使用 FreeTTS API,我们可以让计算机说话。换句话说,我们可以说它是人类语音的人工制作,它将普通文本转换为语音。

为了创建一个 Java 程序,我们首先需要下载并安装FreeTTS API。请按照以下步骤操作。

步骤 1:下载 FreeTTS API(zip 格式)。

步骤 2:解压 zip 文件,该文件提供两个文件夹,如下图所示。

Convert Text-to-Speech in Java

步骤 3:访问目录 C:\freetts-1.2.2-bin\freetts-1.2\lib\jsapi.exe

Convert Text-to-Speech in Java

步骤 4:通过双击 jsapi.exe 文件安装 jsapi。通过点击 I Agree 按钮接受许可协议。

Convert Text-to-Speech in Java

现在点击 Close 按钮。上述过程会在 jsapi.exe 文件所在的相同位置生成一个名为 jsapi.jar 的 jar 文件。这是一个 jar 文件,其中包含创建文本转语音应用程序所需的 FreeTTS 库。

Convert Text-to-Speech in Java

我们已正确安装 JSAPI。

步骤 5:现在,我们将像平常一样在 IDE 中创建一个 Java 项目。在本例中,我们创建了一个名为 TTS 的 Java 项目。在此项目中,我们创建了一个名为 TextToSpeechExample1 的类并编写了以下代码。

Convert Text-to-Speech in Java

注意:在运行程序之前,我们必须确保以下 jar 文件已包含在我们的项目中。

Convert Text-to-Speech in Java

步骤 6:导航到目录 C:\freetts-1.2.2-bin\freetts-1.2 并复制 speech.properties 文件,然后将属性文件粘贴到主目录中。在本例中,目录是 C:\Users\Anubhav。

Convert Text-to-Speech in Java

让我们创建一个将文本转换为语音的 Java 程序。

文本转语音 Java 程序

TextToSpeechExample1.java

现在运行上述程序。由于输出只能听到,因此无法在此处显示。所以,请自行尝试。

TextToSpeechExample2.java

JSAPI 还允许我们使用 setRate()、setPitch()setVolume() 方法分别设置声音的速率、音高音量。例如,请看以下 Java 程序。

在以下程序中,请注意,我们使用了 com.sun.speeach 包,而不是 javax.speech 包。

TextToSpeechExample3.java

注意:上述程序的输出是可听的。