【雕爷学编程】Arduino动手做(129)---TTS文字转语音合成模块

news2024/11/17 10:30:31

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百二十九:中文TTS文字转语音合成模块 替代SYN6288和XFS5152

在这里插入图片描述

知识点:TTS(Text-To-Speech,文本到语音)

我们比较熟悉的ASR(Automatic Speech Recognition),是将声音转化为文字,可类比于人类的耳朵。而TTS是将文字转化为声音(朗读出来),类比于人类的嘴巴,是人机对话的一部分,让机器能够说话。

TTS是同时运用语言学和心理学的杰出之作,在内置芯片的支持之下,通过神经网络的设计,把文字智能地转化为自然语音流。TTS技术对文本文件进行实时转换,转换时间之短可以秒计算。在其特有智能语音控制器作用下,文本输出的语音音律流畅,使得听者在听取信息时感觉自然,毫无机器语音输出的冷漠与生涩感。TTS语音合成技术 [1] 即将覆盖国标一、二级汉字,具有英文接口,自动识别中、英文,支持中英文混读。所有声音采用真人普通话为标准发音,实现了120-150个汉字/分钟的快速语音合成,朗读速度达3-4个汉字/秒,使用户可以听到清晰悦耳的音质和连贯流畅的语调。有少部分MP3随身听具有了TTS功能。

在这里插入图片描述
语音合成(SpeechSynthesis)

语音合成,能将任意文字信息实时转化为标准流畅的语音朗读出来,相当于给机器装上了人工嘴巴。它涉及声学、语言学、数字信号处理、计算机科学等多个学科技术,是中文信息处理领域的一项前沿技术,解决的主要问题就是如何将文字信息转化为可听的声音信息,也即让机器像人一样开口说话。我们所说的“让机器像人一样开口说话”与传统的声音回放设备(系统)有着本质的区别。传统的声音回放设备(系统),如磁带录音机,是通过预先录制声音然后回放来实现“让机器说话”的。这种方式无论是在内容、存储、传输或者方便性、及时性等方面都存在很大的限制。而通过计算机语音合成则可以在任何时候将任意文本转换成具有高自然度的语音,从而真正实现让机器“像人一样开口说话”。

语音合成是通过机械的、电子的方法产生人造语音的技术。TTS技术(又称文语转换技术)隶属于语音合成,它是将计算机自己产生的、或外部输入的文字信息转变为可以听得懂的、流利的汉语口语输出的技术。TTS将储存于电脑中的文件,如帮助文件或者网页,转换成自然语音输出。TTS不仅能帮助有视觉障碍的人阅读计算机上的信息,更能增加文本文档的可读性。TTS应用包括语音驱动的邮件以及声音敏感系统,并常与声音识别程序一起使用。语音合成满足将文本转化成拟人化语音的需求,打通人机交互闭环。 提供多种音色选择,支持自定义音量、语速,让发音更自然、更专业、更符合场景需求。语音合成广泛应用于语音导航、有声读物、机器人、语音助手、自动新闻播报等场景,提升人机交互体验,提高语音类应用构建效率。

在这里插入图片描述
TTS一般分为两个步骤

一、 文本处理。这一步做的事情是把文本转化成音素序列,并标出每个音素的起止时间、频率变化等信息。作为一个预处理步骤,它的重要性经常被忽视,但是它涉及到很多值得研究的问题,比如拼写相同但读音不同的词的区分、缩写的处理、停顿位置的确定,等等。

二、语音合成。狭义上这一步专指根据音素序列(以及标注好的起止时间、频率变化等信息)生成语音,广义上它也可以包括文本处理的步骤。这一步主要有三类方法:

1、拼接法,即从事先录制的大量语音中,选择所需的基本单位拼接而成。这样的单位可以是音节、音素等等;为了追求合成语音的连贯性,也常常用使用双音子(从一个音素的中央到下一个音素的中央)作为单位。拼接法合成的语音质量较高,但它需要录制大量语音以保证覆盖率。

2、参数法,即根据统计模型来产生每时每刻的语音参数(包括基频、共振峰频率等),然后把这些参数转化为波形。参数法也需要事先录制语音进行训练,但它并不需要100%的覆盖率。参数法合成出的语音质量比拼接法差一些。

3、声道模拟法。参数法利用的参数是语音信号的性质,它并不关注语音的产生过程。与此相反,声道模拟法则是建立声道的物理模型,通过这个物理模型产生波形。这种方法的理论看起来很优美,但由于语音的产生过程实在是太复杂,所以实用价值并不高。

在这里插入图片描述
中文TTS文本转语音合成模块(当前版本V5 )

网上资料非常少,细看模块上主要有三块芯片,U1估计是主要芯片,可惜被盖住了,查不到具体型号。

在这里插入图片描述
U2是8002A

8002A 是一颗带关断模式的音频功放 IC。在 5V 输入电压下工作时,负载(3Ω)上的平均功率为 3W,且失真度不超过 10%。而对于手提设备而言,当 VDD 作用于关断端时,8002A 将会进入关断模式,此时的功耗极低,IQ 仅为 0.6uA。8002A 是专为大功率、高保真的应用场合所设计的音频功放 IC。所需外围元件少且在 2.0V~5.5V 的输入电压下即可工作。

功能特点

1、无需输出耦合电容或外部缓冲电路。

2、 稳定的增益输出。

3、 外部增益设置。

4、 封装形式:SOP8、SOP8-PP、DIP8、MSOP8。

在这里插入图片描述
U5的型号是MX25L6406EMI-12G

功能描述:IC FLASH SER 64MB 86MHZ 16SOP

RoHS:是

类别:集成电路 (IC) >> 存储器

系列:MX25xxx05/06

标准包装:2,500

系列:- 格式 -

存储器:EEPROMs - 串行

存储器类型:EEPROM

存储容量:1K (128 x 8)

速度:100kHz

接口:UNI/O(单线)

电源电压:1.8 V ~ 5.5 V

工作温度:-40°C ~ 85°C

封装/外壳:8-TSSOP,8-MSOP(0.118,3.00mm 宽)

在这里插入图片描述
MX25L6406EMI-12G,查到的外文资料,功能方框图和型号命名规则

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Arduino实验开源代码

/*

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百二十九:中文TTS文字转语音合成模块 替代SYN6288和XFS5152

  实验接线:

  TX -> Arduino 0

  RX -> Arduino 1

  5V -> Arduino 5V

  GND -> Arduino GND

*/



void setup(){

  Serial.begin(9600);

}



void loop(){

  Serial.println("1234567890") ;

  delay(5000);

  Serial.println("abcdefghijk") ;

  delay(5000);

}

Arduino实验场景图

在这里插入图片描述
实验串口返回情况

在这里插入图片描述
完成初步的实验,通过串口,模块可以准确合成阿拉伯数字和英文字母的发音,并在喇叭上播放。

视频播放 https://v.youku.com/v_show/id_XNDUzNDgxMDE2NA==.html

TTS文本转发语音模块实验

实验之二:尝试中文TTS文本转语音合成播放

Arduino实验开源代码

/*

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百二十九:中文TTS文字转语音合成模块 替代SYN6288和XFS5152

实验之二:尝试中文TTS文本转语音合成播放

模块实验接线:

TX -> Arduino 0

RX -> Arduino 1

5V -> Arduino 5V

GND -> Arduino GND

*/



void setup(){

Serial.begin(9600);

}



void loop(){

Serial.println("期待好的解决方案 对编码转换这块一直有疑问") ;

delay(5000);

}

实验串口返回情况

在这里插入图片描述
由于编码不同,发出的是乱码播放,下面开始尝试学习编码转换相关…

播放链接 https://v.youku.com/v_show/id_XNDUzNDkyMjY4OA==.html

经查询资料,中文TTS文本转语音合成模块支持任意中文、 英文字母、阿拉伯数字的文本合成,并且支持中文、英文字母、数字的混读。模块支持中文 GBK 编码集;支持大、小写英文字母。

GBK编码(即汉字国标扩展码)
GBK编码,是对GB2312编码的扩展,因此完全兼容GB2312-80标准。GBK编码依然采用双字节编码方案,其编码范围:8140-FEFE,剔除xx7F码位,共23940个码位。共收录汉字和图形符号21886个,其中汉字(包括部首和构件)21003个,图形符号883个。GBK编码支持国际标准ISO/IEC10646-1和国家标准GB13000-1中的全部中日韩汉字,并包含了BIG5编码中的所有汉字。GBK编码方案于1995年12月15日正式发布,这一版的GBK规范为1.0版。Windows 95系统就是以GBK为内码,又由于GBK同时也涵盖了Unicode所有CJK汉字,所以也可以和Unicode做一一对应。

编码范围
8140-FEFE (33088-65278)
全部编码分为三大部分:1.汉字区;2.图形符号区;3.用户自定义区(详情见特性码位分配及顺序)

适用范围以及存在问题
几乎完美支持汉字,但是不支持部分国家的语言(如一些东亚国家,日本等)
所以经常会有GBK到UNICODE的转换

特性
1、字汇——GBK 规范收录了 ISO 10646.1 中的全部 CJK 汉字和符号,并有所补充。具体包括:
GB 2312 中的全部汉字、非汉字符号。
GB 13000.1 中的其他 CJK 汉字。以上合计 20902 个 GB 化汉字。
《简化字总表》中未收入 GB 13000.1 的 52 个汉字。
《康熙字典》及《辞海》中未收入 GB 13000.1 的 28 个部首及重要构件。
13 个汉字结构符。
BIG-5 中未被 GB 2312 收入、但存在于 GB 13000.1 中的 139 个图形符号。
GB 12345 增补的 6 个拼音符号。
汉字“○”。
GB 12345 增补的 19 个竖排标点符号(GB12345 较 GB 2312 增补竖排标点符号 29 个,其中 10 个未被 GB 13000.1 收入,故 GBK 亦不收)。
从 GB 13000.1 的 CJK 兼容区挑选出的 21 个汉字。
GB 13000.1 收入的 31 个 IBM OS/2 专用符号。
未录入《新华字典》上的一些字,如“韡”的简体。

2、码位分配及顺序
GBK 亦采用双字节表示,总体编码范围为 8140-FEFE,首字节在 81-FE 之间,尾字节在 40-FE 之间,剔除 xx7F 一条线。总计 23940 个码位,共收入 21886 个汉字和图形符号,其中汉字(包括部首和构件)21003 个,图形符号 883 个。

3、误处理
低字节是0x40-0x7E的GBK字符有一定特殊性,因为这些字符占用了ASCII码的位置,这样会给一些系统带来麻烦。有些系统中用0x40-0x7E中的字符(如“|”)做特殊符号,在定位这些符号时又没有判断这些符号是不是属于某个 GBK字符的低字节,这样就会造成错误判断。在支持GB2312的环境下就不存在这个问题。需要注意的是支持GBK的环境中小于0x80的某个字节未必就 是ASCII符号;另外就是最好选用小于0×40的ASCII符号做一些特殊符号,这样就可以快速定位,且不用担心是某个汉字的另一半。Big5编码中也存在相应问题。

4、双字节编码
遵循GB2312规定。

网上搜寻,请教知乎《Arduino 魔法书》专栏的兔子老师,才明白这个TTS模块只能识别16进制的GBK编码。

百度——汉字转GBK,有很多在线工具,这里使用千千秀字(https://www.qqxiuzi.cn/bianma/zifuji.php),输入“谢谢兔子老师”,自动转换结果见下图

在这里插入图片描述
例如汉字”兔子”的GBK编码是“CDC3 D7D3”,再转为C语言格式“0xCD,0xC3,0xD7,0xD3”。

实验开源代码如下:

/*

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百二十九:中文TTS文字转语音合成模块 替代SYN6288和XFS5152

  实验之三:中文TTS文本转语音合成播放:兔子你好

模块实验接线:

  TX -> Arduino 0

  RX -> Arduino 1

  5V -> Arduino 5V

  GND -> Arduino GND

*/



char a[4]={0xC4,0xE3,0xBA,0xC3};//你好

char b[]={0xCD,0xC3,0xD7,0xD3};//兔子

String zi= "";



void setup() {

  Serial.begin(9600);  

  for(int i=0;i<4;i++) zi+=a;

}



void loop() {

  Serial.println(zi);

  Serial.println(b);

  delay(1000);  

  }

发送到串口的16进制GBK编码
在这里插入图片描述
在这里插入图片描述
Arduino实验开源代码之三

/*

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

 实验一百二十九:中文TTS文字转语音合成模块 替代SYN6288和XFS5152

  实验之四:中文TTS文本转语音合成播放:春节快乐

  (GBK码 B4BA,BDDA,BFEC,C0D6)

  模块实验接线:

  TX -> Arduino 0

  RX -> Arduino 1

  5V -> Arduino 5V

  GND -> Arduino GND

*/



char a[8] = {0xB4,0xBA,0xBD,0xDA,0xBF,0xEC,0xC0,0xD6}; //春节快乐

void setup() {

  Serial.begin(9600);

}

void loop() {

  Serial.println(a);

  delay(3000);

}

实验串口返回情况

在这里插入图片描述
在这里插入图片描述

中文TTS文本转语音模块合成播放“春节快乐”的10秒视频
https://v.youku.com/v_show/id_XNDUzNTY3MjMyNA==.htm

完成本实验,特别感谢兔子老师的微信指导与帮助,主要学习与参考的资料有

Arduino 语音交互 TTS语音合成
https://zhuanlan.zhihu.com/p/66314323

DIY朗读机器人!不想给孩子读故事?TTS语音合成模块了解一下,B719模块效果测试
https://www.bilibili.com/read/cv3630794/

TTS 真人发音 SYN6288 模块
https://www.arduino.cn/thread-75043-1-1.html

Arduino语音模块-Speech Synthesizer Bee语音合成模块
https://www.ncnynl.com/archives/201606/192.html

关于 Arduino 发送中文字符问题 GB2312转16进制
https://www.cnblogs.com/xiaohe520/articles/7918641.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/689574.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python爬虫_requests入门指引

文章目录 ⭐前言⭐requests库&#x1f496; pip安装requests&#x1f496; requests get&#x1f496; requests post 结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享关于python的requests库用法。 该系列文章&#xff1a; python爬虫_基本数据类型 python爬虫…

Edge浏览器可以多开吗?

问答链接&#xff1a;Edge浏览器可以多开吗&#xff1f; 可以。 如果你的edge浏览器是默认路径安装的&#xff0c;那么打开命令提示符窗口输入以下两条命令即可启动一个数据完全隔离的edge浏览器。 mkdir C:\logs001 "C:\Program Files (x86)\Microsoft\Edge\Applicati…

shell [[]] 语法错误解决方式

错误如图&#xff1a; /linux/install.sh:行15: if [[ $contrainsha e *$contrainsname* ]] /linux/install.sh:行15: 条件表达式中有语法错误 附近有语法错误/linux/install.sh:行15: ]] [[]]语法 当[[ ]]判断expr成立时&#xff0c;退出状态为0&#xff0c;否则为非0值。…

STM32F103使用USART3/UART4乱码问题

源程序为USART1的配置&#xff0c;更改USART3/4相应寄存器测试&#xff0c;测试一直显示有规律乱码&#xff0c;收发不符。 void uart_init(u32 pclk,u32 bound) { float temp;u16 mantissa;u16 fraction; temp(float)(pclk*1000000)/(bound*16);//得到USARTDIVmantissa…

labview 公式节点转换(U16->S16)

问题&#xff1a;在和测力计通讯时&#xff0c;需要把读出的裸数据转化有符号整数 其它网友的文章可以进行转换 &#xff08;笔记&#xff09;labview各种进制转换&#xff08;通讯得到的负数补码转换成负数原码&#xff09;_labview数字间的进制转换_是孑然呀的博客-CSDN博客…

chatgpt赋能python:用Python计算AIC:一种常用的信息标准

用Python计算AIC&#xff1a;一种常用的信息标准 介绍 AIC&#xff08;赤池信息准则&#xff09;是一种用于模型选择的信息理论标准&#xff0c;旨在平衡模型复杂度和拟合准确度的权衡。在统计学和机器学习中&#xff0c;模型选择是一项关键任务&#xff0c;因为正确选择模型…

QT使用问题记录

VS中无法直接打开QT的Ui界面 需要确保安装上这个VS的QT扩展插件 还需要把QT的path添加到VS里面 这是添加好的 运行编译好的QT软件报 应用程序无法正常启动(0xc000007b)&#xff0c;需要把QT的路径添加到系统环境变量的path中哦 加上这个就可以了

【python 第三方库安装换源】

换源&#xff1a; pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/其他国内第三方库的下载源地址&#xff1a; 阿里云&#xff1a;http://mirrors.aliyun.com/pypi/simple/ 科技大学&#xff1a;https://pypi.mirrors.ustc.edu.cn/simple/ 豆瓣&a…

4.用python写网络爬虫,并发下载

目录 前言 4.1 100万个网页 4.1.1 解析Alexa列表 4.2 串行爬虫 4.3 多 线程爬虫 4.3.1 线程和进程如何工作 4.3.2 实现 4.3.3 多进程爬虫 4.4性能 4.5 本章小结 前言 在之前的章节中&#xff0c;我们的爬虫都是串行下载网页的&#xff0c;只有前一次下载完成之后才会…

【Nginx】第一章 Nginx简介

内容概览 1、nginx简介 &#xff08;1&#xff09;介绍nginx的应用场景和具体可以做什么事情 &#xff08;2&#xff09;介绍什么是反向代理 &#xff08;3&#xff09;介绍什么是负载均衡 &#xff08;4&#xff09;介绍什么是动静分离 2、nginx安装 3、nginx常用的命…

GDPU C语言 番外篇

1. 冒泡排序 &#x1f351; 冒泡排序详解 &#x1f351; 测试地址 #include<stdio.h>int main() {int n;int a[1010];scanf("%d", &n);int i,j;for(i 0; i < n; i)scanf("%d", &a[i]);//冒泡排序for(i 0; i < n-1; i)//最多需要进…

文件系统考古 3:1994 - The SGI XFS Filesystem

在 1994 年&#xff0c;论文《XFS 文件系统的可扩展性》发表了。自 1984 年以来&#xff0c;计算机的发展速度变得更快&#xff0c;存储容量也增加了。值得注意的是&#xff0c;在这个时期出现了更多配备多个 CPU 的计算机&#xff0c;并且存储容量已经达到了 TB 级别。对于这些…

7.NVIC中断优先级管理

1.NVIC中断优先级分组&#xff1a; 分组就是确定系统初始化中断分组之后&#xff0c;确定系统是哪一个分组&#xff0c;从而确定好每一个中断到底有几位抢占优先级和响应优先级&#xff1b;CM3内核支持256个中断&#xff0c;其中包含了16个内核中断和240个外部中断&#xff0c…

@Validated 和 @Valid校验提示信息的双语化以及动态参数添加

对于国际性应用来说&#xff0c;提示信息的双语化是必须的&#xff0c;那么Validated 和 Valid校验提示信息怎么来进行双语化呢&#xff0c;下面我们一起学习一下。 Validated 和 Valid校验提示信息的双语化 SpringBoot项目双语化配置 因为这里是基于SpringBoot项目学习的&a…

最佳实践|亚马逊可持续发展的架构模型

在过去的十年里面&#xff0c;亚马逊云科技一直都致力于帮助企业和开发者实现数字化转型&#xff0c;包括如何使用云技术帮助企业提高运营中资源利用率&#xff1b;如何通过云基础架构、容器、DevOps 进行业务的创新和敏捷性&#xff1b;未来的十年&#xff0c;亚马逊云科技将帮…

idea导入SpringBoot项目,没有启动按钮,没有maven

解决办法&#xff1a;&#xff08;快捷键双击Shift&#xff0c;在搜索框中搜索maven&#xff0c;点击Add Maven Project&#xff0c;就 行了&#xff09; 如果在idea出现下图这种&#xff0c;说明成功了

HAL库介绍

HAL 库&#xff08;Hardware Abstraction Layer&#xff0c;硬件抽象层&#xff09;和标准库&#xff08;Standard Peripheral Library&#xff0c;标准外设库&#xff0c;又称为 SPL&#xff09;都是 STM32 微控制器的固件库。它们的主要区别在于结构和抽象级别。 1.HAL 库&a…

使用IDEA启动项目,build时出现OOM相关异常

在使用idea启动项目时&#xff0c;即使使用参数设置了很大的JVM内存&#xff0c;但在项目构建时&#xff0c;仍会出现OOM异常&#xff0c;这一般是由于idea限制了项目构建时的heap size导致的&#xff0c;可以按需将这个数值调大。 参数位置&#xff1a;setting > Build,Ex…

C# 变量与类型

目录 一 变量类型 二 变量类型大纲 三 使用示范 一 变量类型 C# 有两种类型&#xff1a;值类型和引用类型。 值类型的变量直接包含它们的数据。 引用类型的变量存储对数据&#xff08;称为“对象”&#xff09;的引用。 对于引用类型&#xff0c;两个变量可以引用同一个对…

图像增强之图像锐化(边缘增强)之拉普拉斯算子

note mat (0,1,0;1,-4,1;0,1,0) code // 图像增强之图像锐化(边缘增强)之拉普拉斯算子 void GetLaplaceMat(Mat& laplaceMat) {laplaceMat (Mat_<int>(3,3) << 0,1,0,1,-4,1,0,1,0); } void EdgeSharpenLaplace(Mat&src, Mat& res) {Mat laplaceMa…