如何制作 TTS 文本转语音应用程序?

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 63w+ 字,讲解图 2808+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2200+ 小伙伴加入学习 ,欢迎点击围观

这是我在 YouTube 上发布的第一个视频,并且是用英语制作的,所以当您给它评分时,请尽量保持友善和宽容。

[嵌入]https://youtu.be/n3mI7kZK_dk[/embed]

这几天我一直在寻找最好的语音合成器,我可以在我的自制应用程序中使用它。我主要使用 Java 语言进行编程,但我还没有找到任何已完成且质量足以让我满意的解决方案。我找到了完全用 Java 语言编写的免费库 FreeTTS。有一天我会谈论它。这是该图书馆 网站 的链接。如果您查看发行说明页面,就会了解到该库的开发已于 2005 年完成。FreeTTS 仅提供英语。在左侧,您可以看到声音文件的链接。试着听听它的声音。听起来像机器人。您想像这样大声朗读您的电子书吗?我想你听几段就累了。

我找到了很好的语音合成器,叫做 IVONA。它使用超过 18 种语言,包括波兰语、英语和德语。在这个网站上,您可以看到所有可用的 IVONA 声音 。有些语言有几种声音。例如,英语涉及 Amy、Brian 和 Emma 的声音。让我向您介绍 布赖恩的声音 。很高兴听到这样的话,知道这是一个软件。如您所见,Brian 语音的价格为 45 美元。您可以下载 30 天试用版。我做到了,我仍在测试这些声音。重要的是该合成器的声音支持 SAPI 5 接口。 SAPI 5 是原生的 Microsoft Speech API (SAPI)。 SAPI 的文档可在网站 MSDN Library 上找到。

SAPI 5 不可从 Java 虚拟机位置获得。需要用 C++ 或 C# 或 Visual Basic 对其进行编程。我的简单应用程序是用 C++ 语言编写的。如果我可以在用 Java 编写的应用程序中使用 SAPI,那么我可以在 C++ 中创建库 DLL(动态链接库)并从 Java Native Interface 中受益。因此,我将在我的 Java 应用程序中使用 C++ 应用程序。还有一个解决方案,有点脏。我可以使用来自 Java 的适当命令行参数来执行 EXE 应用程序。为此,我使用 ProcessBuilder 类或 System.Runtime.exec 方法。

在描述“speak(...)”函数之前,先看一下“main(...)”函数。当我调用函数“speak(...)”时,我传递了将被大声朗读的文本和将要使用的语音的描述。该属性被函数“ SpFindBestToken ”用于指示语音合成器和语音。你怎么知道在这里写什么?请打开 Windows 注册表(regedit 命令)并打开节点“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices”。您可以使用所有声音的列表。您可以通过传递年龄、性别、语言、姓名和供应商等属性来指示您感兴趣的声音。

有趣的是,Speech API 不仅可以用于语音合成,还可以用于语音识别。如果我安装了支持 SAPI 5 的语音识别应用程序,我可以在节点“HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\Recognizers”中看到它。

在我的简单应用程序中,我使用了 3 个来自组件对象模型 (COM) 库的函数。有:

- CoInitialize - 在当前线程上初始化 COM 库。在调用任何库函数之前,您需要在线程上初始化 COM 库。

- CoUninitialize - 关闭当前线程上的 COM 库,卸载线程加载的所有 DLL,释放线程维护的任何其他资源,并强制关闭线程上的所有 RPC 连接。

- CoCreateInstance - 创建与指定 CLSID 关联的类的单个未初始化对象。

我在这里传递与类“ISpVoice”相关的“CLSID_SpVoice”,并在“sapi.h”头文件中进行了描述。这里我有所有 Speech API 类的标识符。现在您可以使用“pVoice”指针。我在这里选择声音,然后命令语音合成器朗读我的文本。最后,我释放资源。当然,这段代码是可以重构的,因为我做了三次相同的事情。

在我的下一次演示中,我将向您展示将 Java 应用程序与这个简单的文本到语音应用程序集成的解决方案。我将介绍其他文本转语音平台和应用程序编程接口 (API)。

访问我的 GitHub 个人资料

知识

伊沃娜之声

环境和IDE

应用程序接口

组件对象模型 (COM)

演讲

Windows 注册表编辑器

  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices

相关文章