首页>>科技 >>内容

基于STM32物联网开发板(二)--语音播报SYN6288

发布时间:2023-07-08 16:06:37编辑:温柔的背包来源:

很多朋友对基于STM32物联网开发板(二)--语音播报SYN6288不是很了解,每日小编刚好整理了这方面的知识,今天就来带大家一探究竟。

基于STM32物联网开发板(二)--语音播报SYN6288

1、SYN6288简介SYN6288-A语音合成模块是一款性价比更高、效果更自然的中高端语音合成技术。 SYN6288-A通过异步串口接收需要合成的文本,实现文本到声音(TTS)的转换。

国内首款语音合成评估板SYN6288-A的推出,继承了OSYNO6188-A模块的优良特性:体积最小、硬件接口简单、性价比高;另外,SYN6288-A文字识别更智能,语音合成更自然,语音合成和智能识别的效果都得到了大幅提升,是一款面向中高端应用的语音合成技术。

1.1 产品应用范围 车载信息终端语音播报、车辆调度、车辆导航 公交报站器、考勤机 排队取号机、收银收费机 自动售货机、信息机、POS机 智能玩具、智能手表 电动自行车 语音电子书、彩屏故事书、语音电子词典、语音电子导游 短信播放、新闻播放 电子地图

硬件接口:引脚

阐明

TXD 发送数据引脚PA3RXD 接收数据引脚PA2BUSY 忙信号检测引脚PC5,高电平表示忙1.2 通信协议SYN6288 模块采用串口通信方式,数据格式如下:

默认波特率为9600,1位起始位,8位数据位,1位停止位,无奇偶校验位,无硬件流控制。

1.2.1 命令帧格式芯片支持以下命令帧格式:“帧头FD+数据区长度+数据区”格式。 (最大206字节) 上位机向SYN6288-A模块发送的所有命令和数据都需要以“帧”的形式进行封装和传输。

数据长度:命令字+命令参数+数据内容+校验值;检查值:从帧头开始的总字节数;同一帧数据中,每个字节的直接发送间隔不能超过8ms,数据帧直接发送的间隔必须超过8ms;默认初始波特率为9600bps;如果需要更改波特率,则在发送设置波特率的命令帧后,需要间隔16ms发送其他命令帧。 9600bps和19200bps波特率通讯传输都很稳定(无论芯片在合成广播还是空闲)。当模块正在合成文本时,如果收到另一个有效的合成命令帧,芯片将立即停止当前正在合成的文本,转而合成新接收到的文本。发送的文本长度必须小于或等于200字节。如果实际发送的长度大于200字节,芯片会报接收失败。 1.2.2 控制命令说明1.2.3 数据帧示例(1) 无背景音示例

(2) 背景音示例

(3) 音量设置

(4)波特率设置

(5) 停止综合命令

(5) 暂停合成命令

(6) 恢复合成命令

1.2.4 文字控制标记说明: 所有控制标记均为半角字符。 控制标志需要以语音合成命令的格式发送,特殊控制标志合成为文本,即合成命令的格式为“帧头+数据区长度+合成命令字+文本编码格式+特殊控制标记文本”。 控制标志是全局控制标志,即只要使用一次,所有发送到芯片的文本都将受其控制,除非芯片复位或断电,除非使用对应的[d]恢复默认设置。 当芯片断电或复位时,芯片将恢复到所有默认值,原来设置的标志位将失去作用,需要复位。 不符合上述可识别“控制标志”或格式不正确的,按普通字符和数字处理。 1.2.5 提示音效芯片提供25 段声音提示,可以根据应用场合选择作为信息提示。以下列表是当前芯片内置提示音的名称和声音类型:

1.2.6 和弦提示列表芯片提供23 首和弦音乐作为提示,可广泛应用于公共信息广播场合。以下列表为芯片当前内置提示音的名称和播放时长。

和弦铃声不仅可以作为和弦铃声,还可以作为背景音乐的素材

注:提示音的使用没有特殊性,与合成普通文本的合成命令相同。但需要注意的是,当提示音名称前后有英文字母时,需要用标点符号、空格、回车等将其与其他字母分开,以便芯片能够自动识别它。例如,如果您发送文字“sounda,hello!”,sounda可以合成相应的短信提示音,但如果您发送文字“soundahello!”,sounda无法合成提示音,而是直接读出字母“S-O-U-N-D-A” 。

1.3 数据帧组合示例/*功能:SYN6288语音广播(单个语音不超过206字节) 形参:str --play voice cmd --command (0~15) 0表示无背景,1~15表示背景音音量--volume (0~16) 0为静音,16为最大音量uint8_t buffer[206]; uint16_t i=0;字符温度[10];整数j=0; int str_len=0; SYN6288_GetStat();延迟_女士(10); str_len=snprintf(temp,sizeof( temp),'[v%d]',vol0x1f); uint16_t len=strlen((char *)str);//发送的是内容长度str_len+=len; str_len+=3;//加上命令字、命令参数和校验值buffer[i]=0xFD;//帧头dat_xor^=buffer[i++]; buffer[i]=(str_len8)0xff; dat_xor^=缓冲区[i++];缓冲区[i]=str_len0xff; dat_xor^=缓冲区[i++]; buffer[i]=0x01;//语音合成播放命令dat_xor^=buffer[i++];缓冲区[i]=((cmd0xf)

以上知识分享希望能够帮助到大家!