极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: eagler8

【Arduino】168种传感器系列实验(138)---TTS文本转语音模块

[复制链接]
 楼主| 发表于 2020-2-6 14:30:06 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-6 14:30:51 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-6 15:47:08 | 显示全部楼层
本帖最后由 eagler8 于 2020-2-6 15:56 编辑



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

视频播放 https://v.youku.com/v_show/id_XNDUzNDgxMDE2NA==.html
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-6 16:14:59 | 显示全部楼层
实验之二:尝试中文TTS文本转语音合成播放

  1. /*
  2. 【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)
  3. 实验一百三十八:中文TTS文本转语音合成模块 替代SYN6288和XFS5152
  4. 实验之二:尝试中文TTS文本转语音合成播放
  5. 模块实验接线:
  6. TX -> Arduino 0
  7. RX -> Arduino 1
  8. 5V -> Arduino 5V
  9. GND -> Arduino GND
  10. */

  11. void setup()
  12. {
  13. Serial.begin(9600);
  14. }
  15. void loop()
  16. {
  17. Serial.println("期待好的解决方案 对编码转换这块一直有疑问") ;
  18. delay(5000);
  19. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-6 16:15:17 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-6 17:14:45 | 显示全部楼层


由于编码不同,发出的是乱码播放,下面开始尝试学习编码转换相关.......

播放链接  https://v.youku.com/v_show/id_XNDUzNDkyMjY4OA==.html
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-6 19:06:34 | 显示全部楼层
经查询资料,中文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规定。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-6 19:27:50 | 显示全部楼层
网上搜寻,请教知乎《Arduino 魔法书》专栏的兔子老师,才明白这个TTS模块只能识别16进制的GBK编码。

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-6 19:36:37 | 显示全部楼层
例如汉字”兔子”的GBK编码是“CDC3 D7D3”,再转为C语言格式“0xCD,0xC3,0xD7,0xD3”。
实验开源代码如下:

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)
  3.   实验一百三十八:中文TTS文本转语音合成模块 替代SYN6288和XFS5152
  4.   实验之三:中文TTS文本转语音合成播放:兔子你好
  5. 模块实验接线:
  6.   TX -> Arduino 0
  7.   RX -> Arduino 1
  8.   5V -> Arduino 5V
  9.   GND -> Arduino GND
  10. */

  11. char a[4]={0xC4,0xE3,0xBA,0xC3};//你好
  12. char b[]={0xCD,0xC3,0xD7,0xD3};//兔子
  13. String zi= "";

  14. void setup() {
  15.   Serial.begin(9600);  
  16.   for(int i=0;i<4;i++) zi+=a[i];
  17. }

  18. void loop() {
  19.   Serial.println(zi);
  20.   Serial.println(b);
  21.   delay(1000);   
  22.   }
复制代码

回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-6 19:57:48 | 显示全部楼层
发送到串口的16进制GBK编码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-7 10:24:04 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-8 09:00:33 | 显示全部楼层
  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)
  3.   实验一百三十八:中文TTS文本转语音合成模块 替代SYN6288和XFS5152
  4.   实验之四:中文TTS文本转语音合成播放:春节快乐
  5.   (GBK码 B4BA,BDDA,BFEC,C0D6)
  6.   模块实验接线:
  7.   TX -> Arduino 0
  8.   RX -> Arduino 1
  9.   5V -> Arduino 5V
  10.   GND -> Arduino GND
  11. */

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

  13. void setup() {
  14.   Serial.begin(9600);
  15. }

  16. void loop() {
  17.   Serial.println(a);
  18.   delay(3000);
  19. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-8 09:00:52 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-8 09:01:11 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-8 09:19:14 | 显示全部楼层


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

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-27 06:58 , Processed in 0.040119 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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