Java 中的语音处理

2024 年 9 月 10 日 | 阅读 7 分钟

Java 编程语言通过 **Java Speech API** 的内置接口,可以实现将文本转换为人类可识别的语音。它用于增强用户体验和便捷性。该 API 定义了一个跨平台 API,用于支持命令和控制识别器以及语音合成器。**文本转语音** (TTS) 或 **朗读** 是一种辅助技术,它使用户能够听到数字文本。辅助技术是为残疾人士构建的辅助、适应性和康复设备的工具。

如今,语音处理在各种应用和自助服务终端中得到广泛应用。一个例子是智能手机中的文本转语音辅助功能,以及像 Domino's 这样的应用程序,它们会朗读选项/菜单给用户。

让我们详细了解 Java Speech API 以及如何将文本转换为语音。

在 Java 中转换文本为语音

Java Speech API (JSAPI)

Java Speech API 允许 Java 应用程序在用户界面中启用语音技术。Java Speech API 定义的跨平台 API 支持命令控制识别器、听写系统和语音合成器。它不包含在 Java Development Kit 中,因此我们需要第三方语音 API 来鼓励提供多种实现。Java Speech 只是一个规范,它没有自己的实现。

在本节中,我们将使用 FreeTTS 的开源实现,但也有其他实现,例如 Cloudscape。

考虑 FreeTTS 相关以下类,可用于将文本转换为语音。

javax.speech.Central 类

这是一个单例类,包含在“javax.speech”包中。它是访问语音引擎功能的主要接口。它是所有语音和输出能力的第一个接入点。availableSynthesizers 和 createSynthesizer 等方法仅属于该类。它提供了检测、选择和创建语音识别和语音合成器的能力。

javax.speech.synthesis.SynthesiserModeDesc 类

该类保存了合成器所有必需的属性。属性列表包括引擎名称、模式名称、区域设置和正在运行的合成器。

引擎名称用于引用程序中使用的引擎的名称。模式名称属性特定于引擎,并将合成器限制在能够朗读文本的合成器中。区域设置属性用于限制国际合成器。最后,正在运行的合成器属性用于将返回的合成器限制为仅那些已加载到内存中的合成器。

引擎:它定义在 **javax.speech** 包中,并被视为所有其他语音引擎的父接口。它包含 **Recognizer** 和 **synthesizer**。因此,语音输入和语音输出可以轻松完成。

用于创建语音引擎的方法是 createRecognizer() 和 createSynthesizer()。这两个方法都只接受一个参数 EngineModeDesc,它定义了创建引擎所需的所有属性。作为参数传递的是 RecognizerModeDesc 或 SynthesizerModeDesc 等子类之一。

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

javaxspeech.synthesis.Synthesizer 类

它也被定义为一个接口,提供语音合成功能作为主要访问方式。在使用合成器之前,必须先分配合成器。SynthesizerModeDesc 添加了以下两个属性,第一个是合成器提供的声音列表,另一个是合成器启动时要加载的声音。

第三方语音 API

Java 编程语言提供了以下第三方语音 API 来将文本转换为语音。

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

让我们详细讨论上面提到的库。

FreeTTS

FreeTTS 是一个完全用 Java 编程语言编写的开源编译系统。它是一个小巧、快速的运行时开源文本转语音合成引擎。当使用 FreeTTS API 时,计算机可以真正地说话。通俗地说,它仅仅是人类语音的人工合成,将普通文本转换为语音。

为了在 Java 中实现语音合成,请遵循以下步骤。

  1. 在此处以 zip 文件夹形式下载 FreeTTS
  2. 解压 zip 文件,然后选择 **freetts-1.2.2-bin/freetts-1.2/lib/jsapi.exe**
  3. 打开 jsapi.exe 文件并安装它。
  4. 将创建一个名为“jsapi.jar”的 jar 文件。FreeTTS 库包含在这个 JAR 库中,您需要将其包含到项目中。
  5. 在您的 IDE 中创建一个新的 Java 项目。
  6. 将此 jsapi.jar 文件包含到您的项目中。
  7. 根据您的需求编写项目代码。
  8. 最后,执行项目以获得所需的输出。

Java 中流行的文本转语音转换包如下:

1. 包 javax.speech

“javax.speech”包定义了定义引擎基本功能的所有类和接口。语音合成器和语音识别器都是语音引擎实例。“javax.speech.synthesis”和“javax.speech.recognition”包扩展了语音合成器和语音识别器的基本功能和特定能力。

让我们看看在应用程序中使用语音引擎的基本流程

  1. 确定应用程序对引擎的功能需求。例如,要使用的语言。
  2. 找到并创建一个满足上述要求的引擎。
  3. 为所选引擎分配资源。
  4. 开始处理引擎的操作。
  5. 完成后,释放引擎的资源。

考虑以下将文本转换为语音的 Java 程序。

TextToSpeechExample2.java

要获得输出,请执行程序并收听我们在上面程序中指定的文本。

2. 包 com.sun.speech

com.sun.speech 包定义了定义引擎基本功能的所有类和接口。com.sun.speech.freetts 包含 FreeTTS 合成引擎的实现。大多数与语言和语音无关的代码可以在这里找到。

JSAPI 还允许我们通过使用 setRate()、setPitch() 和 setVolume() 等方法来设置语速、音高和音量。例如,请考虑以下 Java 程序。

Voice

它是 FreeTTS 的中央处理点,它接收 FreeTTSSpeakable 作为输入,并将与之相关的文本转换为语音并生成相应的音频。Voice 对象通过 Voice.speak 方法接受 FreeTTSSpeakable。

VoiceManager

它是 FreeTTS 可用声音的中央存储库。它用于获取声音。

考虑以下导入 com.sun.speech 包并使用上述方法的 Java 程序。

TextToSpeech.java

要获得输出,请执行程序并收听我们在上面程序中指定的文本。