一、简介
SYN6288中文语音合成芯片是背景宇音天下科技有限公司与2010年初推出的一款性价比更高,效果更自然的一款中高端语音合成芯片。SYN6288通过异步串口(UART)通信方式,接收待合成的文本数据实现文本到语音(或TTS语音)的转换。
二、功能特点
- 支持GB2312、GBK、BIG5和UNICODE内码格式的文本
- 每次合成的文本量最多可达200字节
- 支持多种控制命令,包括:合成,停止,暂停合成,继续合成,改变波特率等
- 支持休眠功能,在休眠状态下可降低功耗,支持多种方式查询芯片状态。
- 支持串口数据通讯接口,支持三种通信波特率:9600,19200,38400
- 支持16级音量调整,播放文本的前景音量和播放背景音乐的背景音量可分开控制。
- 可通过发送控制标志调节词语语速,支持6级词语语速调整。
- 芯片内固化有多首和弦音乐、提示音效和针对某行业领域的常见语音提示音。
- 内部继承19首声音提示音,23首和弦提示音,15首背景音乐
- 内置10bit推挽式、可独立供电的功放,进行数模DAC输出、
三、命令帧
1.命令帧格式
帧头FD+ 数据区长度 + 数据区
2.控制命令
/* 芯片设置命令 最后一个字节是前面所有数的异或,可以用计算器计算*/
u8 SYN_StopCom[] = {0xFD, 0X00, 0X02, 0X02, 0XFD}; //停止合成
u8 SYN_SuspendCom[] = {0XFD, 0X00, 0X02, 0X03, 0XFC}; //暂停合成
u8 SYN_RecoverCom[] = {0XFD, 0X00, 0X02, 0X04, 0XFB}; //恢复合成
/* 返回0x4E表名芯片任在合成播音中,返回0x4F表名芯片处于空闲状态*/
u8 SYN_ChackCom[] = {0XFD, 0X00, 0X02, 0X21, 0XDE}; //状态查询
u8 SYN_PowerDownCom[] = {0XFD, 0X00, 0X02, 0X88, 0X77}; //进入POWER DOWN 状态命令
/* 修改波特率,有3中模式 命令参数的低3位 0x00 0x01 0x02 分别对应9600 ,19200 38400*/
u8 SYN_SetBond[] = {0xFD,0x00,0x03,0x31,0x00,0xCF}; // 修改波特率 9600
//u8 SYN_SetBond[] = {0xFD,0x00,0x03,0x31,0x01,0xCE}; // 修改波特率 19200
//u8 SYN_SetBond[] = {0xFD,0x00,0x03,0x31,0x02,0xCD}; // 修改波特率 38400
四、通信函数
1.串口
/********************************************
@功能:串口3发送缓冲区的数据
@说明:
@参数: *data 要发送的数据的缓冲区
@返回值: 无
*********************************************/
void u3_TxData(uchar *data)
{
int i;
while((USART3->SR&0X40)==0);//可以发送数据
for(i = 1;i <= (data[0]*256+data[1]);i++){
USART3->DR = data[i+1]; //把数据送到串口
while((USART3->SR&0X40)==0); //等待发送完成
}
}
2.SYN6288
注意:
下面的SY6288SEND就是u3_TxData
#define SY6288SEND u3_TxDataLength // 串口3发送
/*
发送文本
Music:选择背景音乐。0:无背景音乐,1~15:选择背景音乐
*HZdata:要发送的文本,一个字符串
*/
void SYN_FrameInfo(u8 Music, u8 *HZdata)
{
u8 Frame_Info[50];
u8 HZ_Length; // 文本的长度
u8 ecc = 0; //定义校验字节
u16 i = 0;
HZ_Length = strlen((char*)HZdata); //需要发送文本的长度
/* 帧固定配置信息 */
Frame_Info[0] = 0xFD ; //构造帧头FD
Frame_Info[1] = 0x00 ; //构造数据区长度的高字节
Frame_Info[2] = HZ_Length + 3; //构造数据区长度的低字节
Frame_Info[3] = 0x01 ; //构造命令字:合成播放命令
/* 字节高5位表示背景音乐 ,低3位表示编码格式 0 是GB2312编码*/
Frame_Info[4] = 0x01 | Music << 4 ; //构造命令参数:背景音乐设定
/* 校验码计算 */
for(i = 0; i < 5; i++) //依次发送构造好的5个帧头字节
{
ecc = ecc ^ (Frame_Info[i]); //对发送的字节进行异或校验
}
for(i = 0; i < HZ_Length; i++) //依次发送待合成的文本数据
{
ecc = ecc ^ (HZdata[i]); //对发送的字节进行异或校验
}
/* 发送帧数据 */
memcpy(&Frame_Info[5], HZdata, HZ_Length);
Frame_Info[5 + HZ_Length] = ecc;
SY6288SEND(Frame_Info,5 + HZ_Length + 1); // 串口发送
}
/* 发送芯片设置命令 配置,停止合成、暂停合成等设置
Info_data:芯片的命令
*/
void YS_SYN_Set(u8 *Info_data)
{
u8 Com_Len;
Com_Len = strlen((char*)Info_data);
SY6288SEND(Info_data,Com_Len); // 串口发送
}
五、文本控制标记列表
/* 文本控制标记列表
设置前景文本播放音量(含提示音效) 全局 [v?] ?为音量值 取值0-16 0 为静音 默认[v10]
设置背景音乐音量 全局 [m?] ? 为音量值,取值0-16 0为静音 默认[m4]
设置词语语速 全局 [t?] ? 为词语语速值,取值0-5 默认[t4]
设置数字处理策略 全局 [n?] ? 为0,自动判断 为1 数字作号码处理 为2 数字作数值处理 默认[n0]
*/
SYN_FrameInfo(0, “[v16][m1][t5]你好[n2]123444444”);
表示设置文本背景音乐无音量16背景音量1播放你好,数字按数值处理
六、声音提示音列表
/* 声音提示音列表 25段声音提示音
sounda 出错声
soundb 刷卡成功
soundc 刷卡成功
soundd 刷卡成功
sounde 刷卡成功
soundf 激光声
soundg 门铃声
soundh 门铃声
soundi 电话铃声
soundj 电话铃声
soundk 广播提示音
soundl 提示音
soundm 提示音
soundn 警报
soundo 警报
soundp 警报
soundq 紧急警报
soundr 紧急警报
sounds 布谷声
soundt 提示音
soundu 提示音
soundv 提示音
soundw 提示音
soundx 提示音
soundy 提示音
*/
SYN_FrameInfo(0,"[v16][m1][t5]sounda");
播放提示音
七、和弦提示音列表
/* 和弦提示音列表 8首
msga 1s
msgb 1s
msgc 1s
msgd 1s
msge 2s
msgf 3s
msgg 4s
msgh 5s
*/
/* 和弦铃声 15首
ringa 60s
ringb 70s
ringc 27s
ringd 65a
ringe 60s
ringf 57s
ringg 60s
ringh 53s
ringi 35s
ringj 25s
ringk 18s
ringl 38s
ringm 60s
ringn 23s
ringo 5s
*/
SYN_FrameInfo(0,"[v16][m1][t5]ringa");
播放和弦音乐