一、SYN6658

SYN6658是中文语音合成芯片,通过UART 接口或SPI 接口通讯方式,接收待合成的文本数据,实现文本到语音的转换。可以采用GB2312、GBK、BIG5 和Unicode 四种编码方式。我们一般直接采用语音合成模块来实现语音的播放。

二、YS-V6

YS-V6:语音合成模块,直接将单片机(或六合一串口)与语音合成模块之间通过串口通信方式连接,按照“5 个字节帧头+文本”的格式进行数据发送即可。

模块管脚说明:

三、YS-V6的使用

命令帧格式:“帧头FD + 数据区长度+数据区”。

注意:数据区(含命令字,命令参数,待发送文本)的实际字节数必须与帧头后定义的数据区长度严格一致,否则芯片会报接收失败。

这个文本即我们要播放的语音的16 进制数据,直接利用配套的软件可以生成出对应文本的16 进制数据,用单片机直接发送这些数据出去给V6语音模块,便可让V6 语音模块发音。

举例如下:

注意事项:
1、本模块发音是实时的,只要有文本数据发给模块就开始播放声音,如播放过程中有新文本数据,将停止当前播放,播放新的文本数据。
2、同一帧数据中,每个字节之间的发送间隔不能超过15ms;帧与帧之间的发送间隔必须超过15ms(为保证通信质量,建议至少留2ms余量,即:大于17ms)。
3、待发送文本长度必须小于等于4096字节。实际发送的长度大于4096时,芯片会报接收失败。
4、如用户需要几个文本连续播放,则需要判断当前模块是否在播放,等当前文本播放完后再发送下一个文本,可通过串口判断串口反馈或判断模块RDY 引脚的电平状态,从而判断当前是否处于播放完状态。
用户在连续播放文本内容时,在收到前一帧数据播放完毕的“芯片空闲”字节(即0x4F)后,最好延时1ms左右再发送下一帧数据。

四、代码实现

void Voice_Announcements(char *yunyin_wenben)//格式 “5 个字节帧头+文本”
{
	yuyin_zhentou[2]=strlen(yunyin_wenben)+2;//更新帧头的数据区长度
	Usart_SendArray(USART2,yuyin_zhentou,5);//先发送5个字节帧头
	Usart_SendStr(USART2,yunyin_wenben);//发送yunyin_wenben数组里存放的文本
	for(char q=0;q<20;q++)//清除yunyin_final数组里面的数据
	{
		yunyin_final[q]=0;
	}	
}

yuyin_zhentou[2]=strlen(yunyin_wenben)+2; 这个"2"是命令字和命令参数的2个字节