Arduino的NANO 电路板(UNO也可以使用),调用SYN6288,按固定格式给其发送编码数组,使其发音。
在网上找了好久,要么只支持英文,要么只支持汉字,一直没办法解决类似“今天气温12摄氏度”这种连读功能。
绕过去的方法是 “今天气温”+“12”+“摄氏度”。但这并不完美。
后来,在一遍PDF的帮助下,解决了这个问题,我修改了一些代码,增加了一些注释后,记录下来。
/*************声明软串口,避免占用硬串口导致的每次刷写插拔操作***********/
#include <SoftwareSerial.h>
SoftwareSerial TTS_Serial(2,3);//用D2针做为RX,连接SYN6288的的TX口;用D3针做为TX,连接SYN6288的RX口;
void setup()
{ /***********************初始化硬串口和软串口**************/
Serial.begin(9600);
TTS_Serial.begin(9600); //初始化软串口通信;
spk("jzdriver宇音天下SYN6288模块123%");//输入 utf8 编码字符串
}
void loop()
{
/*
本示例参考了一个名为《SYN6288中文发声使用说明、》的PDF文档,在此感谢这位未知的作者
我在这基础上,进行了一些修改和注释
仅希望后人不要像我费心了好久才找到解决办法
jzdriver再次感谢所有热爱开源的人们
*/
}
void spk(unsigned char utf8str[])
{
/****************参数声明**********************************/
unsigned char TTS_body[100]; //输出 unicode 编码字符串jz
int utf8_to_unicode(unsigned char *pUTF8, unsigned char *pUNIC); //dr
unsigned int TTS_length; //定义正文长度iv
unsigned char TTS_head[5]; //定义数据帧头er
unsigned char TTS_xor = 0 ; //定义校验字节
unsigned int i = 0; //jzdriver
/***************构造命令头部***********************************/
TTS_length = utf8_to_unicode(utf8str, TTS_body); //utf8 编码转换成 unicode 编码,并返回unicode 字符数j
TTS_head[0] = 0xFD ; //构造帧头 FD z
TTS_head[1] = TTS_length >> 8 ; //构造数据区长度的高字节 d
TTS_head[2] = (TTS_length + 3) & 0xFF; //构造数据区长度的低字节
TTS_head[3] = 0x01; //构造命令字:合成播放命令
TTS_head[4] = 0x03 ; //构造命令参数:编码格式为 Unicode
/***************构造并发送主体********************************/
TTS_xor = 0;
for(i = 0; i < 5; i++) //j依次发送构造好的 5 个帧头字节
{
TTS_xor = TTS_xor ^ (TTS_head[i]); //z对发送的字节进行异或校验
//Serial.write(headOfFrame[i]);
TTS_Serial.write(TTS_head[i]);
}
for(i = 0; i < TTS_length; i++) //d依次发送待合成的文本数据
{
TTS_xor = TTS_xor ^ (TTS_body[i]); //r对发送的字节进行异或校验
//Serial.write(unicstr[i]);
TTS_Serial.write(TTS_body[i]);
//Serial.println(unicstr[i], HEX);
}
//Serial.write(ecc); //i最后发送校验字节
TTS_Serial.write(TTS_xor);
delay(6000);
}
这其中调用了utf8_to_unicode 函数,是UTF8转UNICODE的方法,在网上找一找即可。
如果嫌费事,可以到优快云下载。
https://download.youkuaiyun.com/download/jzdriver/18160461
下载链接中是完整的 ino 文件,接线后直接刷写即可。
调用方法只需一句
spk("jzdriver宇音天下SYN6288模块123%");
本文档介绍如何使用Arduino NANO或UNO电路板,配合SYN6288模块,通过发送特定编码数组实现中文发音。重点在于解决“今天气温12摄氏度”这类连读句子的发音问题,通过修改代码和利用UTF8到UNICODE转换,成功实现了连贯的发音功能。提供了完整的ino文件下载链接,方便读者直接使用。





