找回密码
 立即注册
查看: 152635|回复: 6

基于Arduino开发板的文本转语音(TTS)转换器

[复制链接]

864

主题

285

回帖

3695

积分

版主

积分
3695
QQ
发表于 2019-6-29 18:35:58 | 显示全部楼层 |阅读模式

文本转语音(TTS系统)能够将普通文本转换为语音。这种技术使系统能够用人声说出文本。有许多文本转语音转换的例子,例如公共交通公告、客户服务电话、智能手机中的语音助手或一些机器的导航菜单。您甚至可以在Microsoft Word中找到TTS,在其中将其设置为说出文档中所写的文本。


今天在本篇文章中,我们将学习如何使用Arduino制作文本到语音转换器。TTS的第一步是预处理或标准化。此步骤涉及将符号、数字和缩写转换为可由机器读取的单词,如“?”将转换为“问号”。

第二步涉及将规范化文本转换为音素或语音抄本。音素是口语单词的一小部分,即这些是产生句子的声音。这一步非常重要,这样机器可以像人类那样说出这些话。

最后一步是将音素合成为语音。该步骤可以通过不同的方法来实现,例如通过记录不同单词/短语的人声或者通过生成基本声音频率并将它们堆积为音素或通过复制人类说话机制来实现。


必需的组件

●    Arduino开发板

●    扬声器

●    放大器电路

●    稳压电源

●    连接线


电路原理图

在这个文本到语音转换器中,我们使用放大器电路来降低噪声并获得清晰的声音。放大器电路使用LM386制作。整体电路图如下所示:

LM386-Audio-Amplifier-Circu.gif

使用一个100K的电位器用来调整声音。调整它以获得清晰的声音。如果您对此电路有任何疑问,请查看基于LM386的音频放大器电路。


将扬声器连接到Arduino

制作放大器电路后,连接非常简单。

Circuit-Diagram-for-Arduino-based-Text-to-Speech-Converter.png

将电源连接到放大器电路,将Arduino的数字引脚3连接到10K电阻,并将Arduino的地连接到电路的地。现在通过将扬声器的负端接地,并将正极端子连接到220μF电容器,然后连接电源

Circuit-Hardware-for-Arduino-based-Text-to-Speech-Converter.jpg


为TTS编程Arduino

这个基于Arduino的TTS的程序也非常简单,因为有相关的库可以使用。该库称为Talkie,可以由库管理器添加。要添加库,请转到Sketch-> Include Library-> Mange Libraries

Programming-Arduino-for-TTS.jpg

现在,在屏幕上将出现一个库管理器。在搜索栏中键入Talkie,然后单击安装按钮。该库将安装。

Adding-Library-to-Arduino-IDE.png

这个库非常方便,它有超过1000个单词和命令。它有几个例子,你可以尝试它们,但在这里我们使用一个简单的代码来解释工作。


您还可以尝试库中给出的其他命令。要获取这些命令,请转到Documents \ Arduino \ libraries \ Talkie \ src,然后打开头文件并获取可用于不同警报的多个命令。还有许多其他TTS库,如jscrane TTS库谷歌TTS库等。您也可以试用它们。


所以让我们开始编写代码。首先包括一些头文件。 Talkie.h用于初始化该库并将Arduino的数字引脚3设置为输出引脚。 Vocab_US_Large.h用于使用我们正在使用的警报,Vocab_Special.h用于使用我们正在使用的暂停。

  1. #include "Talkie.h"
  2. #include "Vocab_US_Large.h"
  3. #include "Vocab_Special.h"
复制代码

现在定义一个对象'value'来使用命令:

  1. Talkie voice;
复制代码

这里将在扬声器中重复相同的消息,因此请将setup函数保持为空并将命令置于loop函数中。第一个命令voice.say(spPAUSE2)在重复警报消息时暂停一小段时间。接下来的命令只是简单的词语暗示: DANGER DANGER STORM IN THE NORTH

  1. void setup() {
  2. }
  3. void loop() {
  4.     voice.say(spPAUSE2);
  5.     voice.say(sp2_DANGER);
  6.     voice.say(sp2_DANGER);
  7.     voice.say(sp3_STORM);
  8.     voice.say(sp3_IN);
  9.     voice.say(sp3_THE);
  10.     voice.say(sp3_NORTH);
  11. }
复制代码

最后将代码上传到Arduino中,然后连接电源。一旦电路供电,您将开始听到警报!如果您没有听到清晰的声音,请尝试调整电位器的旋钮或检查Arduino是否获得正确的电源,并确保Arduino的GND连接到电路的接地。

Arduino-based-Text-to-Speech-Converter.jpg


代码

本文使用的完整代码如下: main.rar (232 Bytes, 下载次数: 93)

回复

使用道具 举报

0

主题

3

回帖

18

积分

新手上路

积分
18
发表于 2019-8-17 09:10:23 来自手机 | 显示全部楼层
请教下,用这个voice库,就可以直接将文字转成语音,而不需要syn6288这样的语音硬件模块?
回复

使用道具 举报

864

主题

285

回帖

3695

积分

版主

积分
3695
QQ
 楼主| 发表于 2019-8-17 09:40:49 | 显示全部楼层
happyren 发表于 2019-8-17 09:10
请教下,用这个voice库,就可以直接将文字转成语音,而不需要syn6288这样的语音硬件模块? ...

不需要呢
回复

使用道具 举报

0

主题

3

回帖

18

积分

新手上路

积分
18
发表于 2019-8-17 09:50:47 来自手机 | 显示全部楼层
太感谢了,再请教下,这个Talkie库,以及google的tts库在哪可以下载呢
回复

使用道具 举报

0

主题

3

回帖

18

积分

新手上路

积分
18
发表于 2019-8-17 10:03:22 来自手机 | 显示全部楼层
另外,这个tts库里有哪些单词,才能发出对应的语音吧,相当于是部语音字典。中文的,需要自己把中文按编码格式转成utf8或者unicode编码吗,多谢
回复

使用道具 举报

864

主题

285

回帖

3695

积分

版主

积分
3695
QQ
 楼主| 发表于 2019-8-17 10:04:26 | 显示全部楼层
happyren 发表于 2019-8-17 09:50
太感谢了,再请教下,这个Talkie库,以及google的tts库在哪可以下载呢

文章里面有下载链接 使用方法可以参考链接里面的介绍
回复

使用道具 举报

0

主题

1

回帖

18

积分

新手上路

积分
18
发表于 2020-8-14 15:02:50 | 显示全部楼层
请问楼主,连接实物的时候楼主用到了电路图里面的condensor mic吗?我根据楼主的电路图进行连接(但没有连接condensor mic)发现电位器只能固定在一个位置,如果调电位器噪音会变得很大听不到语音。但是如果不调电位器,喇叭的声音很小,很难听清在说什么。所以请问楼主连接实物遇到了这个情况吗?电位器在这里是降低噪音还是单纯作为滑动变阻器呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|YiBoard一板网 ( 冀ICP备18020117号 )

GMT+8, 2025-10-30 05:44 , Processed in 0.122356 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表