[译文]15个开源文本转语音(TTS) 工具

本文列举了15个开源的文本转语音工具,包括MARYTTS、Kaldi、OpenTTS和eSpeak等,这些工具支持多种语言,适用于各种平台,对于无障碍访问和内容创作有重大意义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[译文]15个开源文本转语音(TTS) 工具

前言

本文翻译自2022年5月份的文章:15 Open-source Text To Speech TTS Apps and Libraries

注意:

  • 本文是对1年前的这篇文章的译文,存在时差问题,并不代表最新的TTS技术
  • 本清单所提到的App和类库对中文是否支持还有待考证

目录

什么是“文本转语音”(TTS)?

“文本转语音” 或者说 “语音合成” 是一种从文本中生成听起来像人类的语音,可以识别单词并形成人类语音。

1968 年,日本电工实验室的Noriko Umeda 等人向世界介绍了第一个文本转语音系统。

1961 年,物理学家小约翰·拉里·凯利 (John Larry Kelly, Jr) 和他的同事路易斯·格斯特曼 (Louis Gerstman) 使用 IBM 704 计算机合成语音,这是贝尔实验室历史上最著名的事件之一。

TTS的好处?

OpenTTS: Open Text to Speech ServerOpenTTS: 开源文本到语音服务器

这项技术的主要优势是有视觉和阅读障碍的人,因为他们是它的第一批用户。

如今,许多 YouTube 频道都使用这项技术来最大限度地减少编辑并提高产量。

在许多现代操作系统中,文本到语音是一种内置的辅助功能,可以帮助那些无法轻松阅读屏幕文本的人。

关于这份清单

在本文中,我们为您提供了一系列免费的开源文本转语音 (TTS) 和语音合成应用程序。 您还可以找到一个新的更新列表,以获取更多[基于 Web 的开源 TTS 应用程序和服务](https://medevel.com/free-tts /).

1- MARY TTS

MARY TTS 是一个用纯 java 编写的开源、多语言文本到语音合成系统。 它适用于 Windows、Linux 和 macOS。

2- Kaldi

Kaldi 是一个用 C++ 编写的语音识别工具包,并在 Apache License v2.0 下获得许可。源代码可在 [GitHub](https://github.com/kaldi-asr/kaldi)。

Kaldi 可以在 Windows、Linux 和 macOS 上运行。 它还可以在 Android、PowerPC 和 Web Assembly 上运行。

3- OpenTTS

OpenTTS 是一个用 Python 编写的免费、开源的 TTS 服务。 它是根据麻省理工学院许可证(MIT)发布的。 它支持多种语言,并带有易于使用的界面。 此外,它还带有许多替代库。

支持的语言:英语 (27)、德语 (7)、法语 (3)、西班牙语 (2)、荷兰语 (4)、俄语 (3)、瑞典语 (1)、意大利语 (2)、斯瓦希里语 (1)、芬兰语、 韩语、日语、中文、瑞典语等。

4- eSpeak

eSpeak 是一个紧凑的开源软件语音合成器,适用于 Linux 和 Windows,适用于英语和其他语言。 它支持多种语言,并附带许多有用的功能,这使其成为许多用户的理想选择。

支持语言

南非荷兰语、阿尔巴尼亚语、阿拉贡语、亚美尼亚语、保加利亚语、粤语、加泰罗尼亚语、克罗地亚语、捷克语、丹麦语、荷兰语、英语、世界语、爱沙尼亚语、波斯语、芬兰语、法语、格鲁吉亚语、德语、希腊语、印地语、匈牙利语、冰岛语、印度尼西亚语、爱尔兰语、 意大利语、卡纳达语、库尔德语、拉脱维亚语、立陶宛语、逻辑语、马其顿语、马来西亚语、马拉雅拉姆语、普通话、尼泊尔语、挪威语、波兰语、葡萄牙语、旁遮普语、罗马尼亚语、俄语、塞尔维亚语、斯洛伐克语、西班牙语、斯瓦希里语、瑞典语、泰米尔语、土耳其语、越南语、 威尔士语。

5- Text To Speech Converter

这个 开源项目 允许您通过将文本复制并粘贴到其简单的界面中,轻松地将任何文本转换为语音。 它是用 C# 编程语言编写的,目前可以在 Windows 上运行。

6- ONLINE TTS

在线 TTS 是一个简单的 HTML/JavaScript 项目,可将您的英文文本变成令人生畏的演讲。

在线 TTS 具有简单的快捷方式和干净的用户界面。

7- Flite

Flite 是一个小型、快速的运行时合成[库](https://github.com/ festvox/flite) 适用于嵌入式系统和服务器。 核心 Flite 库由 Alan W Black awb@cs.cmu.edu(主要是在他所谓的业余时间)开发,而 受雇于卡内基梅隆大学语言技术研究所。

Flite 支持 Windows、Linux、macOS、Android、FreeBSD 和其他几个系统。

8- Julius

Julius 是一个开源的大词汇量连续语音识别引擎。

It 是一款面向语音相关研究人员和开发人员的高性能、小占用空间大词汇量连续语音识别 (LVCSR) 解码器软件。 基于单词 N-gram 和上下文相关的 HMM。

9- Athena

Athena 是一个基于sequence-to-sequence的语音处理引擎的开源实现

Athena功能

基于混合注意力/CTC 的端到端 ASR

  • 语音转换器

  • 无监督预训练

  • 使用 Horovod 在一台机器或多台机器上进行多 GPU 训练

  • 基于 Tacotron2 的端到端 TTS,支持多扬声器和 GST

  • 基于 Transformer 的 TTS 和 FastSpeech

  • WFST 创建和基于 WFST 的解码

  • 使用 Tensorflow C++ 部署

10- ESPnet: 端到端语音处理工具包

ESPnet是一个端到端语音处理工具包,主要专注于端到端语音识别和端到端文本转语音。

它是一个开发人员友好的应用程序,可以集成到 Web 项目中。 开发人员也可以使用 Docker 安装它。

11- Voice Builder

Voice Builder 是一个开源的文本转语音 (TTS) 语音构建工具,专注于简单性、灵活性和协作性。 我们的工具允许任何具有基本计算机技能的人运行语音训练实验并聆听生成的合成语音。

Voice Builder 项目是使用 JavaScript 编写的,并在 Apache-2.0 许可下发布。

12- Coqui TTS

Coqui TTS 是一个用于高级文本转语音的库。 它建立在最新研究的基础上,旨在实现易于培训、速度和质量之间的最佳平衡。

13- Mozilla TTS

Mozilla TTS 是一个用于高级文本到语音生成的库。 它建立在最新研究的基础上,旨在实现易于培训、速度和质量之间的最佳平衡。

14- Mycoft Mimic

Mycroft 是一个开源语音助手系统。 Mimic 是由 Mycroft 团队创建的内置 TTS 库。

15- Free TTS

FreeTTS:跨平台文本转语音应用程序

FreeTTS 是一个完全用 JavaTM 编程语言编写的语音合成系统。 它基于 Flite:卡内基梅隆大学开发的小型运行时语音合成引擎。 Flite 源自爱丁堡大学的 Festival Speech Synthesis System 和卡内基梅隆大学的 FestVox 项目。

它支持 16/8k 的 AU 和 WAV 格式。 它已经在 Solaris TM 操作环境、Mac OS X、Linux 和 Win32 操作系统上进行了测试。

<think>好的,我现在需要回答用户关于如何在JSON中使用注解支持多种日期时间格式的问题。用户已经提供了三个引用内容,我需要结合这些资料来给出准确的回答。 首先,用户提到的引用[2]中提到了@JsonFormat注解,可以用来指定日期格式和时区。比如@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8"),这应该是在实体类字段上使用,将日期格式化为指定模式。但用户的问题是支持多种日期格式,而@JsonFormat只能指定一种格式,可能需要其他方法。 接下来,引用[1]展示了前端传递日期字符串的例子,日期格式是“2027年12月12日”,这可能和后端的默认格式不同。如果后端需要接受不同格式的日期,可能需要自定义反序列化器。例如,使用Jackson的@JsonDeserialize注解,指定自定义的反序列化类来处理多种格式。 引用[3]提到POST请求携带JSON数据在请求体中,所以后端需要正确解析这些数据,特别是日期字段的不同格式。这时候可能需要结合@JsonFormat和自定义的反序列化器,或者使用Jackson的模块来注册多种格式。 可能的解决方案包括: 1. 使用@JsonFormat处理单一格式的输出,但输入可能需要更灵活的处理。 2. 自定义反序列化器,使用@JsonDeserialize注解在字段上,处理多种输入格式。 3. 配置全局的ObjectMapper,注册多种日期格式,但这可能影响所有日期字段,不够灵活。 4. 利用Jackson的DateTimeFormat注解,但不确定是否支持多格式。 需要验证这些方法的可行性。例如,自定义反序列化器可以尝试解析多种格式,直到成功为止。例如,定义一个DateDeserializer类,继承JsonDeserializer<Date>,在deserialize方法中尝试不同的SimpleDateFormat解析输入字符串,直到找到匹配的格式。 同时,引用[2]中的@JsonFormat可能用于序列化,而反序列化需要另外处理。因此,用户可能需要同时使用@JsonFormat和@JsonDeserialize来分别处理序列化和反序列化。 最后,可能还需要考虑时区问题,确保不同格式的日期时间正确换。总结来说,主要的步骤是使用自定义反序列化器处理多种输入格式,结合@JsonFormat控制输出格式,并通过全局配置或注解实现灵活性。</think>在JSON中处理多种日期时间格式,可通过Jackson库的注解结合自定义反序列化器实现。以下是具体实现步骤: ### 一、基础注解处理单一格式 使用`@JsonFormat`可定义序列化/反序列化的固定格式: ```java public class User { @JsonFormat(pattern = "yyyy年MM月dd日", timezone = "GMT+8") private Date birthday; } ``` 此注解支持`birthday`字段以`2027年12月12日`格式传输[^2] ### 二、多格式处理方案 当需要支持`yyyy-MM-dd`、`yyyy/MM/dd`等多种格式时,需自定义反序列化器: 1. **创建多格式解析器** ```java public class MultiDateDeserializer extends JsonDeserializer<Date> { private static final String[] FORMATS = { "yyyy年MM月dd日", "yyyy-MM-dd", "yyyy/MM/dd HH:mm" }; @Override public Date deserialize(JsonParser p, DeserializationContext ctx) throws IOException { String dateStr = p.getText(); for (String fmt : FORMATS) { try { return new SimpleDateFormat(fmt).parse(dateStr); } catch (ParseException e) { // 继续尝试下一种格式 } } throw new IllegalArgumentException("无法解析的日期格式: " + dateStr); } } ``` 2. **应用自定义解析器** ```java public class User { @JsonDeserialize(using = MultiDateDeserializer.class) @JsonFormat(pattern = "yyyy-MM-dd") // 统一输出格式 private Date birthday; } ``` ### 三、全局格式配置(可选) 在Spring Boot中配置全局日期处理: ```java @Bean public ObjectMapper objectMapper() { ObjectMapper mapper = new ObjectMapper(); DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); mapper.setDateFormat(dateFormat); return mapper; } ``` ### 四、注意事项 1. **时区一致性**:所有格式需明确时区配置,避免时差问题 2. **格式优先级**:字段级注解会覆盖全局配置 3. **异常处理**:建议在反序列化器中添加格式匹配失败后的明确错误提示
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值