模块介绍
SYN6288中文语音合成模块是北京宇音天下科技有限公司推出的语音合成模块。该模块通过串口接收主控传来的语音编码后,可自动进行自然流畅的中文语音播报。
注:SYN6288模块无法播报英文单词和句子,只能按字母播报英文 ;而数字播报的形式较为多样,详见下文。
命令帧格式
SYN6288的命令帧格式如下表所示:
帧结构 | 帧头 (1字节) | 数据区长度 (2字节) | 数据区(不大于203字节) | |||
命令字 (1字节) | 命令参数 (1字节) | 待发送文本 (不大于200字节) | 异或校验 (1字节) | |||
数据 | 0xFD | 0xXX 0xXX | 0xXX | 0xXX | 0xXX… | 0xXX |
说明 | 默认 | 高字节在前 | 长度必须和前面的“数据区长度”一致 |
只需将指定文字按照上表的编码格式进行转换,并通过串口发送给SYN6288模块,SYN6288模块即可实现语音播报。
中文编码
当然,中文字符庞大,且多数情况下只有播报几段特定语音的需求,这时可以使用官方提供的编码工具,直接生成,而无需自己进行编码(当然,既然官方已经提供了编码工具,那么肯定能对任意的中文语句编码,只是这样或许很麻烦):
编码工具下载路径:
https://download.csdn.net/download/qq_44955826/90092177?spm=1001.2014.3001.5503
数字变量编码
但是有些时候需要播报数字变量,这时只能自己写程序生成数字语音编码了。
数字、语音间的关系
但需要注意的是不同的书写方式对应的语音不一样,例如(以下数字间的标点均为英文半角):
1,2,3,4,5 语音模块会读作:一二三四五
12345 语音模块会读作:一万二千三百四十五
123.45 语音模块会读作:一百二十三点四五
1,2,3.45 语音模块会读作:一二三点四五(一二三点语速较慢,四五语速较快)
两个具体的数字编码含义实例:
一.
1,2,3,4,5(GB2312编码)对应的串口信号为:
253, 0, 12, 1, 0, 49, 44, 50, 44, 51, 44, 52, 44, 53, 193
其含义为:
253:帧头
0 12:在此之后会发送12个比特的数据
1:没搞清楚,但好像从来都不变
0:背景音乐选项,0为无背景音乐,8为背景音乐1,16为背景音乐2,以此类推
49:1对应的ASCII码
44:, 对应的ASCII码
50:2 对应的ASCII码
44:, 对应的ASCII码
51:3对应的ASCII码
44:, 对应的ASCII码
52:4 对应的ASCII码
44:, 对应的ASCII码
53:5 对应的ASCII码
193:校验码:以上所有数据(二进制)按位求为1的个数,奇数个1为1,偶数个1为0(其实就是异或运算),计算过程如下:
二
12345(GB2312编码)对应的串口信号为:
253, 0, 8, 1, 0, 49, 50, 51, 52, 53, 197
其含义为:
253:帧头
0 8:在此之后会发送8个比特的数据
1:没搞清楚,但好像从来都不变
0:背景音乐选项,0为无背景音乐,8为背景音乐1,16为背景音乐2,以此类推
49:1对应的ASCII码
50:2 对应的ASCII码
51:3对应的ASCII码
52:4 对应的ASCII码
53:5 对应的ASCII码
197:异或校验码
数字变量编码说明
可以看出,1,2,3,4,5编码中包含的逗号,并未被读出,而12345编码本身并未包含数字间的连接词(如:个、十、百、千、万),语音却自动补全了。这实际上是SYN6288模块自动做出的智能处理,也降低了我们的编码复杂程度。
编程实例
关于不同主控驱动SYN6288模块进行语音播报的实现,请参考如下专栏:
ESP32(MicroPython):Thonny IDE + MicroPython + ESP32 + SYN6288 输出语音-CSDN博客
STM32(Keil5):未完待续
Arduino:未完待续