SYN6288语音合成模块的简单应用

news2024/9/20 20:18:37

文章目录

  • 一、前言
  • 二、硬件
    • 1.原理图
      • 1.1 对外引脚说明
      • 1.2 电源供电参考电路
      • 1.3 复位电路和状态指示电路
      • 1.4 扬声器输出
      • 1.5 外接高速晶振
  • 三、软件
    • 1.系统构成框图
    • 2.通讯方式:异步串行通讯(UART)接口
    • 3.芯片回传
    • 4. 通信帧定义及通信控制
      • 4.1 命令帧格式
      • 4.2 芯片支持的控制命令
      • 4.3 文本控制标记列表
        • 标记[v?] --前景播放音量
        • 标记[m?]–背景音乐音量
        • 标记[t?] —词语语速
    • 5. 提示音效
    • 6. 示例代码
  • 四、总结


一、前言

最近复刻一个桌面宠物-小呆项目用到了SYN6288语音合成模块,简单的分享下使用。

SYN6288是一款高性价的语音合成模块,使用串口通信方式,发送简单的指令 即可实现文本到语音的转换,同时支持中文、英文(按字母朗读)、数字的朗读, 每次合成的文本量最多可达 250 字节,可同时进行文本解析和语音播放,实现连续无间隔的语音合成。内置音频功放,可直接驱动 0.5W 8R 或者 3W 4R 的喇叭。

在这里插入图片描述


二、硬件

1.原理图

接口简单:模块内置了DAC接口,可以直接连接扬声器输出语音。
在这里插入图片描述

1.1 对外引脚说明

以下是对外连接的引脚说明:

在这里插入图片描述

供电引脚:GND和3.3V/5V引脚
通信引脚:TX与RX,注意交叉接线
喇叭引脚:SP+和SP-(不分正负极)
BUSY引脚:忙引脚,播放时为高,空闲为低

1.2 电源供电参考电路

电源供电参考电路如下:

在这里插入图片描述

  1. SYN6288E共有6组外接电源,每组电源均使用一个47uF和一个0.1uF的电容;如果用户想节省成本,用户可以在每组电源上均使用0.1uF的电容,并对VDDPP、和VDDA两组电源,各加上一47uF的电容。
  2. 外接电源为使用3节电池,或VDD = 3.3V~~4.2V
  3. 电压自动调节输出REGOUT的使用说明
    SYN6288E为CVDD处理器电源模块提供一个电压自动调节输出REGOUT—亦即线性稳压器,这个线性稳压器输出电压设计为:2.8V±0.2V。其特征是:
    输入外部供应电压:VDD
    输出电流:20mA
    输出电压:2.6V~~3.0V
  4. 鉴于市面上流通的电源品质差异,建议用户不要采用临界极限值的电压,如:5.0V供电;建议外接电源VDD取值范围3.3V~~4.2V,不要高于4.5V或低于3.0V。

1.3 复位电路和状态指示电路

在这里插入图片描述

Ready/Busy 此 STATUS 引脚信号为低电平时说明芯片正在等待接收数据。在系统设计时可以将此引脚接在MCU的中断输入源上,产生一个下降沿中断请求发送数据,以示上位机MCU可以向语音合成芯片发送数据。

1.4 扬声器输出

在这里插入图片描述

为了在用户应用中输出声音, SYN6288E 内置了推挽式(Push-Pull)的 DAC ,可直接驱动喇叭,进行声音播报。并且SYN6288E内置的DAC电路模块,使用了VDDPP/VSSPP供电电源模块,具体电路说明部分请参见(10.1)和(10.2)节,其供电电压值可独立于其它电源组的供电。

如需外接功放芯片,可以参考推荐功放参考电路

功放的供电:VDD对地应当加一个大电容,一般以470uF为宜
PCB布线:音频的输入端和输出端严格按差分布线原则布线

下面简单列举个D类3W功放

在这里插入图片描述
在这里插入图片描述

1.5 外接高速晶振

在这里插入图片描述

三、软件

1.系统构成框图

最小系统包括:控制器模块、SYN6288E语音合成芯片、功放模块和喇叭。

主控制器和SYN6288E语音合成芯片之间通过UART 接口连接,控制器可通过通讯接口向SYN6288E语音合成芯片发送控制命令和文本,SYN6288E语音合成芯片把接收到的文本合成为语音信号输出,输出的信号经功率放大器进行放大后连接到喇叭进行播放。

在这里插入图片描述

2.通讯方式:异步串行通讯(UART)接口

芯片支持的通讯波特率:9600bps,19200bps、38400bps 。

设置波特率说明:默认初始波特率为9600bps;上位机若需改变波特率,在发送完设置波特率命令帧后需间隔16毫秒再发送其它命令帧。若要改波特率,每次系统重置时都得重发改波特率的命令帧。发送完改波特率命令帧后,要暂停几百毫秒,再改主机的波特率。9600bps,19200bps两种波特率通讯传输都非常稳定(不管芯片在合成播音还是空闲)因系统时间片与传输时间片接近的原因:38400bps波特率通讯传输芯片空闲空闲时非常稳定;但在芯片合成播音时上位机再次发送数据时不是很稳定,接收成功和接收失败的概率各为50%左右。

在这里插入图片描述

SYN6288E提供一组全双工的异步串行通讯(UART)接口,实现与微处理器或PC的数据传输。

SYN6288E利用TxD和RxD以及GND实现串口通信。其中GND作为地信号。SYN6288E芯片支持UART 接口通讯方式,通过UART 接口接收上位机发送的命令和数据,允许发送数据的最大长度为206 字节。

在这里插入图片描述

3.芯片回传

接收到控制命令帧,芯片会向上位机发送1 个字节的状态回传,上位机可根据这个回传来判断芯片目前的工作状态。

SYN6288E 芯片在初始化成功时会发送一个字节的“初始化成功”回传。

SYN6288E 芯片收到命令帧后会判断此命令帧正确与否,如果命令帧正确返回“接收成功”回传,如果命令帧错误则返回“接收失败” 回传。

SYN6288E 芯片收到状态查询命令时,如果芯片正处于播音的工作状态则返回“正在播音”回传,如果芯片处于空闲状态则返回“芯片空闲”回传。在一帧数据合成完毕后,芯片会自动返回一次“芯片空闲”的回传。

在这里插入图片描述

4. 通信帧定义及通信控制

4.1 命令帧格式

芯片支持以下命令帧格式:“帧头FD + 数据区长度+数据区”格式。(最大206个字节)

上位机发送给 SYN6288E 芯片的所有命令和数据都需要用“帧”的方式进行封装后传输。

在这里插入图片描述

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

4.2 芯片支持的控制命令

这里只简单介绍控制命令,需要更详细的介绍可以去看宇音天下文档中心-SYN6288E中文语音合成芯片_用户手册

在这里插入图片描述
命令帧相关的特殊说明:

  1. 休眠与唤醒说明:芯片不会主动休眠,只有接收到上位机发送的休眠命令帧后才会休眠。芯片进入休眠之后,上位机首先需要唤醒芯片,然后再向芯片发送命令帧数据;(注意:唤醒后需间隔16毫秒再发送命令数据)。休眠被若唤醒后(例如硬件唤醒或软件唤醒),10秒钟(待机时间)内未接收到上位机发送的有效命令帧数据(语音合成播放命令,设置波特率命令,停止合成命令,暂停合成命令,恢复合成命令,状态查询命令),则芯片会重新进入休眠(会认为是干扰唤醒不去理睬)。(注意:芯片只有在已经进入休眠之后,才会有10秒钟唤醒待机再次休眠)。
  2. 同一帧数据中,每个字节之间的发送间隔不能超过8ms; 帧与帧之间的发送间隔必须超过8ms。
  3. 当 SYN6288E 芯片正在合成文本的时候,如果又接收到一帧有效的合成命令帧,芯片会立即停止当前正在合成的文本,转而合成新收到的文本。
  4. 待发送文本长度必须小于等于200个字节。实际发送的长度大于200字节,芯片会报接收失败。
  5. 用户在连续播放文本内容时,在收到前一帧数据播放完毕的“芯片空闲”字节(即0x4F)后,最好延时1ms左右再发送下一帧数据。
  6. 用户在连续播放文本内容时(即播完前一帧数据就马上发送播放下一帧数据),建议用户在逗号,句号,问号,感叹号,分号等标点符号处进行数据分帧。因数据传输需要时间,在标点符号处分帧,连贯性更好,且可避免词组被硬性切断的现象(例如“银行”一词,“银”在前一帧数据,“行”在后一帧数据)。

4.3 文本控制标记列表

这里只简单介绍常用的3个,需要更详细的介绍可以去看宇音天下文档中心-SYN6288E中文语音合成芯片_用户手册

标记[v?] --前景播放音量

在这里插入图片描述

标记[m?]–背景音乐音量

在这里插入图片描述

标记[t?] —词语语速

在这里插入图片描述
注意:

  1. 所有的控制标识均为半角字符。
  2. 控制标识需要按照语音合成命令的格式发送,特殊控制标记作为文本进行合成,即合成命令是“帧头 + 数据区长度+ 合成命令字 + 文本编码格式 + 特殊控制标记文本”的格式。
  3. 控制标识为全局控制标识,也就是只要用了一次,在不对芯片复位或者断电的条件下,其后发送给芯片的所有文本都会处于它的控制之下,除非用相应的[d]恢复默认设置。
  4. 当芯片掉电或是复位后,芯片将恢复到所有的默认值,原来的设置过的标识失去了作用,需要重新设置。
  5. 不符合以上可识别的“控制标识”的或者格式不对的,一律按普通的字符和数字处理

简单示例:

  1. 单独作为一帧数据发送,此时对下一帧开始的数据发生作用 – 适合单独改变
    第1帧: [v5] 解释:设置前景音量为5级
    第1帧: 欢迎光临 解释:按5级前景音量播放“欢迎光临”

  2. 和其它控制标记一起作为一帧数据发送,此时对下一帧开始的数据发生作用。注意:在后的控制标记的优先权高于在先的控制标记 – 适合上位机初始化调用
    第1帧: [d][v5][m2][o0] 解释:先恢复默认全局变量,再设置前景音量为5级,背景音量为2级,按自然方式朗读
    第2帧: 欢迎光临 解释:按5级前景音量2级背景音量播放“欢迎光临”

  3. 放在播放文本的开头和播放文本一起发送,此时对本帧开始的数据发生作用。-- 适合和播放文本一起发送和改变
    第1帧: [v6][m2]欢迎使用语音合成芯片 解释:从本帧数据开始按6级前景音量2级背景音量播放:即按6级前景音量2级背景音量播放“欢迎使用语音合成芯片”。

5. 提示音效

芯片中提供了 25 段的声音提示音以及 23 段和弦音乐作为提示音,可以依据使用场合选用作为信息提示音。这里不一一介绍,感兴趣可以自己去看宇音天下文档中心-SYN6288E中文语音合成芯片_用户手册

在这里插入图片描述

6. 示例代码

#include "syn6288.h"
#include "usart2.h"
#include "string.h"
#include "delay.h"
//***语音合成***//

//Music:选择背景音乐。0:无背景音乐,1~15:选择背景音乐
void SYN_FrameInfo(u8 Music, u8 *HZdata)
{
  /****************需要发送的文本**********************************/
  unsigned  char  Frame_Info[50];
  unsigned  char  HZ_Length;
  unsigned  char  ecc  = 0;  			//定义校验字节
  unsigned  int 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;
  USART2_SendString(Frame_Info, 5 + HZ_Length + 1);
}

/***********************************************************
* 名    称: YS_SYN_Set(u8 *Info_data)
* 功    能: 主函数	程序入口
* 入口参数: *Info_data:固定的配置信息变量
* 出口参数:
* 说    明:本函数用于配置,停止合成、暂停合成等设置 ,默认波特率9600bps。
* 调用方法:通过调用已经定义的相关数组进行配置。
**********************************************************/
void YS_SYN_Set(u8 *Info_data)
{
  u8 Com_Len;
  Com_Len = strlen((char*)Info_data);
  USART2_SendString(Info_data, Com_Len);
}

/**************语音合成芯片设置命令*********************/
//选择背景音乐2。(0:无背景音乐  1-15:背景音乐可选)
//m[0~16]:0背景音乐为静音,16背景音乐音量最大
//v[0~16]:0朗读音量为静音,16朗读音量最大
//t[0~5]:0朗读语速最慢,5朗读语速最快

SYN_FrameInfo(0, (uint8_t *)"[v12][m0][t5]欢迎光临");Delay_s(1);//唤醒后欢迎光临,音量12适合演示,10适合调试

四、总结

今天主要讲了SYN6288语音合成模块的简单应用,感兴趣的可以自行下载资源。

感谢你的观看!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2096818.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Eureka】搭建Eureka Server,实现服务注册和服务发现

1. Eureka介绍 Eureka是NetflixOSS套件中关于服务注册和发现的解决⽅案.SpringCloud对Eureka进⾏了集成,并作为优先推荐⽅案进⾏宣传,虽然⽬前Eureka2.0已经停⽌维护,新的微服务架构设计中,也不再建议使用,但是⽬前依然有⼤量公司的微服务系统使⽤Eureka作为注册中⼼. 官方文…

指尖疯2024年下半年软考报名快报:赛程过半,你报名成功了吗?

周一早上好&#xff0c;新的一周&#xff0c;新的9月&#xff01; 特别提醒&#xff1a;青海和上海&#xff0c;这两个“海”今天截止报名&#xff01;已经结束报名的地区已经增长到了13个&#xff0c;目前2024年下半年软考报名已经过半&#xff0c;考虑到还有审核时间以及报名…

原生冻结进程分析(U)

一、概要 1.定义&#xff1a; 当应用切换到后台并且没有其他活动时&#xff0c;系统会在一定时间内通过状态判断&#xff0c;将进程 ID 迁移到冻结的 cgroup 节点上&#xff0c;实现冻结 CACHE 应用。这项功能可以减少活跃缓存应用在后台存在时所消耗的 CPU 资源&#xff0c;从…

Nginx安全性配置

文章目录 引言I Nginx简单的安全性配置禁止特定的HTTP方法限制URL长度禁止某些用户代理限制请求速率连接限制禁止访问某些文件类型II 常见的安全规则防御CC攻击User-Agent过滤GET-URL过滤GET-参数过滤POST过滤(sql注入、xss攻击 )引言 Nginx本身并不具备复杂的防火墙规则定制…

NASA数据集:ASTER全球数字海拔模型(GTEM)V003

ASTER Digital Elevation Model V003 简介 ASTER全球数字海拔模型&#xff08;GTEM&#xff09;第3版&#xff08;ASTG TM&#xff09;提供了地球陆地区域的全球数字海拔模型&#xff08;TEM&#xff09;&#xff0c;空间分辨率为1角秒&#xff08;赤道处水平位置约30米&…

k8s集群环境搭建(一主二从--kubeadm安装)

前置条件 版本&#xff1a;CentOS Linux release 7.5.1804 (Core) 内存&#xff1a;2G CPU&#xff1a;2 主机名解析 vim /etc/hosts 192.168.109.100 master 192.168.109.101 node1 192.168.109.102 node2时间同步&#xff0c;这里直接使用chronyd服务从网络同步时间syste…

企业产品推广系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;活动资讯管理&#xff0c;产品分类管理&#xff0c;产品信息管理&#xff0c;用户分享管理&#xff0c;留言板管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页…

C语言 | Leetcode C语言题解之第388题文件的最长绝对路径

题目&#xff1a; 题解&#xff1a; #define MAX(a, b) ((a) > (b) ? (a) : (b))int lengthLongestPath(char * input){int n strlen(input);int pos 0;int ans 0;int * level (int *)malloc(sizeof(int) * (n 1));memset(level, 0, sizeof(int) * (n 1));while (po…

LabVIEW电机多次调用

在LabVIEW中&#xff0c;为实现对多个电机的独立控制&#xff0c;工程师可以采用可重入VI、动态VI调用、多任务结构或面向对象编程等方法。每种方法都有其优点和适用场景&#xff0c;选择合适的方法能有效提升系统的性能和可维护性。 在LabVIEW中&#xff0c;如果需要多次调用…

WPF 手撸插件 六 消息总线

虽然暂时不知道该如何将消息总线集成到插件系统中&#xff0c;但是让我先学习起来吧&#xff0c;本文主要来说说我最近学习的Reface.EventBus Reface.EventBus有两个版本&#xff0c;分别支持.Net Framework和 .Net Core。 我们这里先说支持.Net Framework的版本&#xff0c;…

007.Python爬虫系列_初识爬虫

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈 PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈 Oracle数…

javaSSMmysql宠物领养系统的设计与实现26292-计算机毕业设计项目选题推荐(附源码)

摘 要 如今&#xff0c;随着人们生活水平不断提高&#xff0c;人们的生活在物质满足的基础上&#xff0c;更多的人将生活的重点放在追求精神享受的过程中。于此同时&#xff0c;Internet铺天盖地的普及&#xff0c;使得这样的人纷纷通过Internet的方式去寻找精神的满足。然而领…

java+Springboot+mysql小区维修管理平台41866-计算机毕业设计项目选题推荐(免费领源码)

摘 要 随着计算机技术的飞速发展&#xff0c;计算机在小区维修管理中应用的普及&#xff0c;利用计算机在实现小区维修的管理势在必行。当今社会正快速向信息化社会前进&#xff0c;信息自动化的作用也越来越大。从而使我们从繁杂的事务中解放出来,提高了我们的工作效率。目前…

Web入门-06.HTTP协议-协议解析

浏览器发起HTTP协议请求&#xff0c;服务端通过ServerSocket接收并交给一个Socket对象&#xff08;管道&#xff09;&#xff0c;然后解析浏览器的请求&#xff0c;并通过Socket管道向浏览器响应。 代码如下&#xff1a; package com.gjw;import java.io.*; import java.net…

学习之git的常用命令

git常用命令 设置用户签名 基本语法&#xff1a; 1.1 git config --global user.name 用户名 1.2 git config – global user.email 邮箱 1.3 cat ~/.gitconfig 1.4 git init 初始化本地库 在D盘新建一个文件夹—进入文件夹–右键–点击&#xff08;open git base here) …

低代码技术新趋势——逆向工程

低代码的下一个趋势&#xff0c;应该是“逆向工程”&#xff0c;用户可以通过 可视化界面&#xff0c;逆向输出全栈工程代码。而标准的工程代码同样可以编译为支持可视化分析、编辑、调整的“无代码”程序。前一个是解释性语言向编译性语言的逆向工程。后者则是一个理论实践应用…

华为OD机试真题 - 跳马 - 广度优先搜索BFS(Python/JS/C/C++ 2024 D卷 200分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、…

Java SpringBoot Vue开发的公司单位考勤管理系统,一键导出考勤数据,智能分析员工出勤,提高管理效率

&#x1f34a;作者&#xff1a;计算机毕设匠心工作室 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目…

IEEE PDF eXpress 报错解决 Error in converting file + font not embedded

IEEE PDF eXpress 报错解决方法 1. Error in converting file解决方法&#xff08;1&#xff09;直接使用 Manual Request&#xff08;2&#xff09;查看报错信息并修改 2. 报错信息为&#xff1a;font xxx not embedded解决方法&#xff1a;在pdf中嵌入字体 1. Error in conve…

codeforce一半空白?怎么解决

codeforces界面问题&#xff0c;有一半是空白 如图&#xff1a; 下拉到底&#xff0c;点击desktop version即可 这样就好了