芯片选型
不难发现某宝搜索出来的语音芯片都是由方案公司推出来的,需要事先给到播报的语音内容,由他们进行一次烧录到语音芯片,不能随意更改,比较麻烦。
简单粗暴,这里直接推荐一款 SYN6288中文语音合成芯片简单好用,是博主最近亲身体验出来的
附上参考代码
这里使用的是STC8位单片机写的代码,并且已验证可直接使用的
//主函数
//******************************************************
void main()
{
UartInit();//串口初始化
while(1)
{
//m[0~16]:0背景音乐为静音,16背景音乐音量最大
//v[0~16]:0朗读音量为静音,16朗读音量最大
//t[0~5]:0朗读语速最慢,5朗读语速最快
SYN_FrameInfo(2,"[m4][v16][t5][b0]当你走近,请你细听,那颤抖[2]的叶是我等待[3]的热情,\
而当你终于无视[3]的走过,在你[2]身后落了一地的,朋友啊,那不是[2]花瓣,\
是我凋零[2]的心");
SYN_FrameInfo(0,"[m4][v16][t5][b0]蟑螂药,老鼠药,臭脚克星");//博主专业摆摊20年的广告宣传语
//这里实现语音芯片播放功能
}
}
//语音芯片功能实现函数
//***********************************************************************
#include "syn6288.h"
sbit busy = P3^5;
//Music: 0:无背景音乐 1~15:选择背景音乐
void SYN_FrameInfo(uchar Music, uchar *HZdata)
{
/****************需要发送的文本**********************************/
uchar idata Frame_Info[200];
uchar HZ_Length;
uchar ecc = 0; //定义校验字节
uint 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 ; //构造命令字:合成播放命令
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;
UART_SendStringL(Frame_Info, 5 + HZ_Length + 1);
delay_ms(5);
while(busy); //等待合成结束
delay_ms(5);
}
看完请留个足迹,点个赞