赞
踩
SYN6288中文语音合成芯片是背景宇音天下科技有限公司与2010年初推出的一款性价比更高,效果更自然的一款中高端语音合成芯片。SYN6288通过异步串口(UART)通信方式,接收待合成的文本数据实现文本到语音(或TTS语音)的转换。
帧头FD+ 数据区长度 + 数据区
/* 芯片设置命令 最后一个字节是前面所有数的异或,可以用计算器计算*/
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
/********************************************
@功能:串口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); //等待发送完成
}
}
注意:
下面的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");
播放和弦音乐
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。