样品购买请到:宇音天下淘宝官方旗舰店
SYN6288E中文语音合成芯片是北京宇音天下科技有限公司在2010年初推出的一款性/价比更高的SYN6288芯片的基础上更改封装方式的,效果更自然的一款中高端语音合成芯片。SYN6288E通过异步串口(UART)通讯方式,接收待合成的文本数据,实现文本到语音(或TTS语音)的转换。
宇音天下于2002年最早研制出国内首款语音合成芯片OSYNO6188。公司最新推出的SYN6288E语音合成芯片:LQFP32L贴片封装、硬件接口简单、低功耗、音色清亮圆润、极高的性/价比;除此之外,SYN6288E在识别文本/数字/字符串更智能、更准确,语音合成自然度更好、可懂度更高。SYN6288E语音合成效果和智能化程度均得到大幅度提高,是一款真正面向中高端行业应用领域的中文语音合成芯片。
SYN6288E语音合成芯片的诞生,将推动TTS语音合成技术的行业应用走向更深入、更广泛!
芯片支持任意中文文本的合成,可以采用GB2312、GBK、BIG5 和Unicode 四种编码方式。芯片支持英文字母的合成,遇到英文单词时按字母方式发音。每次合成的文本量可达200个字节。
芯片具有文本智能分析处理功能,对常见的数值、电话号码、时间日期、度量衡符号等格式的文本,芯片能够根据内置的文本匹配规则进行正确的识别和处理。
例如:“2008-12-21”读作 “二零零八年十二月二十一日”,“10:36:28”读作 “十点三十六分二十八秒”,“28℃”读作“二十八摄氏度”,等等。
对存在多音字的文本,例如:“当前工作的重中之重是要在重重困难中保证重庆市的重点工程的顺利进行,坚决拒绝重复建设”,芯片可以自动对文本进行分析,判别文本中多音字的读法并合成正确的读音。
芯片可实现16级数字音量控制,音量更大,更广。播放文本的前景音量和播放背景音乐的背景音量可分开控制,更加自由。
芯片内集成了15 首背景音乐,在任何播音时均可以选择背景音乐。
芯片内集成了19 首声音提示音,可用于不同场合的信息提醒、报警等功能。
芯片内集成了23 首和弦音乐,可用作和弦短信提示音或者和弦铃声。
控制命令包括:合成文本、停止合成、暂停合成、恢复合成、状态查询、进入Power Down模式、改通讯波特率等控制命令。控制器通过通讯接口发送控制命令实现对芯片的控制。
芯片支持多种文本控制标记。可通过发送“合成命令”发送文本控制标记,调节音量、设置数字读法、设置词语语速、设置标点是否读出等。
支持多种方式查询芯片的工作状态,包括:查询状态管脚电平、通过读芯片自动返回的回传、发送查询命令获得芯片工作状态的回传。
芯片支持Power Down 模式。使用控制命令可以使芯片进入Power Down 模式。复位芯片可以使芯片从Power Down 模式恢复到正常工作模式。
芯片支持的通讯波特率:9600bps,19200bps、38400bps 。
自然度 | 清晰度 | 正确率 | 可懂度 |
---|---|---|---|
3.5 | 98% | 96% | 99% |
最小系统包括:控制器模块、SYN6288E语音合成芯片、功放模块和喇叭。
主控制器和SYN6288E语音合成芯片之间通过UART 接口连接,控制器可通过通讯接口向SYN6288E语音合成芯片发送控制命令和文本,SYN6288E语音合成芯片把接收到的文本合成为语音信号输出,输出的信号经功率放大器进行放大后连接到喇叭进行播放。
芯片型号 | 封装名称 | 封装描述 |
---|---|---|
SYN6288E | LQFP32L | 32脚,7mm X 7mm X 1.4mm |
编号 | 引脚 | 说明 | 编号 | 引脚 | 说明 | |
1 | XOUT | 高速晶振输出 | 17 | NC | - | |
2 | VDDA | 内部稳压电源正极 | 18 | NC | - | |
3 | TXD | 串口数据发送,初始波特率为9600bps | 19 | NC | - | |
4 | RXD | 串口数据接收,初始波特率为9600bps | 20 | NC | - | |
5 | VSSIO0 | 总线模块0电源负极 | 21 | NC | - | |
6 | VDDIO0 | 总线模块0电源正极 | 22 | NC | - | |
7 | VSSIO0 | 总线模块0电源负极 | 23 | NC | - | |
8 | R/B-STATUS引脚 | 低电平表示CHIP空闲, 可接收上位机发送的命令和数据; 高电平表示CHIP忙,正在进行语音合成并播音; |
24 | VSS | 电源负极—与语音合成芯片基板一体,必须与PCB布线的地(GND)或负板(VSS)相连结。 | |
9 | Res. | Res引脚 | 25 | VSSIO2 | 总线模块2电源负极 | |
10 | VDDIO1 | 总线模块1电源正极 | 26 | CVSS | 处理器电源负极 | |
11 | VSSIO1 | 总线模块1电源负极 | 27 | RST | 芯片复位,低电平触发有效 | |
12 | VSSPP | 语音输出模块电源负极 | 28 | VDDIO2 | 总线模块2电源正极 | |
13 | BP0 | 推送DAC语音输出1 | 29 | CVDD | 处理器电源正极 | |
14 | VDDPP | 语音输出模块电源正极 | 30 | REGOUT | 电压自动调节输出 | |
15 | BN0 | 推送DAC语音输出2 | 31 | VSSA | 内部稳压电源负极 | |
16 | VSSPP | 语音输出模块电源负极 | 32 | XIN | 高速晶振输入 |
上位机以命令帧的格式向SYN6288E芯片发送命令。SYN6288E芯片根据命令帧进行相应操作,并向上位机返回命令操作结果。
SYN6288E芯片提供了多种控制命令,列表如下:
命令功能 | 说明 |
---|---|
语音合成播放命令 | 合成本次发送的文本 |
改通讯波特率命令 | 改变之后的通讯波特率 |
停止合成命令 | 停止当前的合成动作 |
暂停合成命令 | 暂停正在进行的合成 |
恢复合成命令 | 继续合成被暂停的文本 |
芯片状态查询命令 | 查询当前芯片的工作状态:上位机可通过“芯片状态查询命令” 来判断TTS 模块是否正常工作,以及获取相应参数,返回0x4E 表明芯片仍在合成中,返回0x4F 表明芯片处于空闲状态。 |
进入 Power Down 模式的命令 | 使芯片从正常工作模式进入 Power Down 模式,复位后恢复 |
接收到控制命令帧,芯片会向上位机发送1 个字节的状态回传,上位机可根据这个回传来判断芯片目前的工作状态。
SYN6288E 芯片在初始化成功时会发送一个字节的“初始化成功”回传。
SYN6288E 芯片收到命令帧后会判断此命令帧正确与否,如果命令帧正确返回“接收成功”回传,如果命令帧错误则返回“接收失败” 回传。
SYN6288E 芯片收到状态查询命令时,如果芯片正处于播音的工作状态则返回“正在播音”回传,如果芯片处于空闲状态则返回“芯片空闲”回传。在一帧数据合成完毕后,芯片会自动返回一次“芯片空闲”的回传。
回传类型名称 | 回传数据 | 触发条件 |
---|---|---|
初始化成功回传 | 0x4A | 芯片初始化成功 |
收到正确的命令帧回传 | 0x41 | 接收成功 |
收到不能识别命令帧回传 | 0x45 | 接收失败 |
芯片播音状态回传 | 0x4E | 收到“状态查询命令帧”,芯片处在正在播音状态 |
芯片空闲状态回传 | 0x4F | 当一帧数据合成完以后,芯片进入空闲状态回传0x4F;或者收到“状态查询命令帧”,芯片处于空闲状态回传0x4F |
SYN6288E提供一组全双工的异步串行通讯(UART)接口,实现与微处理器或PC的数据传输。
SYN6288E利用TxD和RxD以及GND实现串口通信。其中GND作为地信号。SYN6288E芯片支持UART 接口通讯方式,通过UART 接口接收上位机发送的命令和数据,允许发送数据的最大长度为206 字节。
初始波特率 | 起始位 | 数据位 | 校验位 | 停止位 | 流控制 |
---|---|---|---|---|---|
9600 bps | 1 | 8 | 无 | 1 | 无 |
起始位 | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 | 停止位 |
芯片支持以下命令帧格式:“帧头FD + 数据区长度+数据区”格式。(最大206个字节)
上位机发送给 SYN6288E 芯片的所有命令和数据都需要用“帧”的方式进行封装后传输。
帧结构 | 帧头 1字节 |
数据区长度 2字节 |
数据区(小于等于203字节) | |||
命令字 1字节 |
命令参数 1字节 |
待发送文本 小于等于200字节 |
异或校验 1字节 |
|||
数据 | 0xFD | 0xXX 0xXX | 0xXX | 0xXX | 0xXX 。。。 | 0xXX |
说明 | 定义为十六进制“0xFD” | 高字节在前低字节在后 | 长度必须和前面的“数据区长度”一致 |
注意:数据区(含命令字,命令参数,待发送文本,异或校验)的实际长度必须与帧头后定义的数据区长度严格一致,否则芯片会报接收失败。
数据区(小于等于203字节) | |||||||
命令字1字节 | 命令参数1字节 | 待发送文本 小于等于200字节 |
异或校验 1字节 |
||||
取值 | 对应功能 | 字节 高5位 |
对应功能 | 字节 低3位 |
对应功能 | ||
0x01 | 语音合成播放命令 | 值:0 值:1 值:2 值:3 … 值:14 值:15 |
值0:不加背景音乐 其它值:所选背景音乐的编号 |
0 | 文本: GB2312 |
待合成文本的二进制内容 | 之前所有字节(包括帧头,数据区长度字节)做的异或校验得出的字节 |
1 | 文本: GBK |
||||||
2 | 文本: BIG5 |
||||||
3 | 文本: UNICODE |
||||||
0x31 | 设置波特率命令 | 0 | 无功能 | 0 | 波特率: 9600bps |
无文本 | |
1 | 波特率: 19200bps |
||||||
2 | 波特率: 38400bps |
||||||
0x02 | 停止合成命令 | 无参数 | |||||
0x03 | 暂停合成命令 | ||||||
0x04 | 恢复合成命令 | ||||||
0x21 | 芯片状态查询命令 | ||||||
0x88 | 芯片进入Power Down模式命令 |
上位机可使用数据区中的命令字和命令参数来实现语音合成芯片的各种功能。
芯片不会主动休眠,只有接收到上位机发送的休眠命令帧后才会休眠。
芯片进入休眠之后,上位机首先需要唤醒芯片,然后再向芯片发送命令帧数据;(注意:唤醒后需间隔16毫秒再发送命令数据)
休眠被若唤醒后(例如硬件唤醒或软件唤醒),10秒钟(待机时间)内未接收到上位机发送的有效命令帧数据(语音合成播放命令,设置波特率命令,停止合成命令,暂停合成命令,恢复合成命令,状态查询命令),则芯片会重新进入休眠(会认为是干扰唤醒不去理睬)。(注意:芯片只有在已经进入休眠之后,才会有10秒钟唤醒待机再次休眠)
默认初始波特率为9600bps;上位机若需改变波特率,在发送完设置波特率命令帧后需间隔16毫秒再发送其它命令帧。
若要改波特率,每次系统重置时都得重发改波特率的命令帧。
发送完改波特率命令帧后,要暂停几百毫秒,再改主机的波特率。
9600bps,19200bps两种波特率通讯传输都非常稳定(不管芯片在合成播音还是空闲)
因系统时间片与传输时间片接近的原因:38400bps波特率通讯传输芯片空闲空闲时非常稳定;但在芯片合成播音时上位机再次发送数据时不是很稳定,接收成功和接收失败的概率各为50%左右。
提醒用户:在芯片正在合成播音时,若使用38400bps波特率再次发送新的数据(中断当前播放),可以先重复发送“停止”命令,确保收到“接收成功”信号后,再发送新的数据。
帧结构 | 帧头 | 数据区长度 | 数据区 | |||
命令字 | 命令参数 | 待发送文本 | 异或校验 | |||
数据 | 0xFD | 0x00 0x0B | 0x01 | 0x00 | 宇音天下 0xD3 0xEE 0xD2 0xF4 0xCC 0xEC 0xCF 0xC2 |
0xC1 |
数据帧 | 0xFD 0x00 0x0B 0x01 0x00 0xD3 0xEE 0xD2 0xF4 0xCC 0xEC 0xCF 0xC2 0xC1 | |||||
说明 | 播放文本编码格式为 “GB2312” 的文本“宇音天下”,不带背景音乐 |
帧结构 | 帧头 | 数据区长度 | 数据区 | |||
命令字 | 命令参数 | 待发送文本 | 异或校验 | |||
数据 | 0xFD | 0x00 0x0B | 0x01 | 0x01 | 宇音天下 0xD3 0xEE 0xD2 0xF4 0xCC 0xEC 0xCF 0xC2 |
0xC0 |
数据帧 | 0xFD 0x00 0x0B 0x01 0x01 0xD3 0xEE 0xD2 0xF4 0xCC 0xEC 0xCF 0xC2 0xC0 | |||||
说明 | 播放文本编码格式为 “GBK” 的文本“宇音天下”,不带背景音乐 |
帧结构 | 帧头 | 数据区长度 | 数据区 | |||
命令字 | 命令参数 | 待发送文本 | 异或校验 | |||
数据 | 0xFD | 0x00 0x0B | 0x01 | 0x02 | 宇音天下 0XA6 0x74 0xAD 0XB5 0Xa4 0XD1 0XA4 0x55 |
0xBB |
数据帧 | 0xFD 0x00 0x0B 0x01 0x02 0XA6 0x74 0xAD 0XB5 0XA4 0XD1 0XA4 0x55 0xBB | |||||
说明 | 播放文本编码格式为 “BIG5” 的文本“宇音天下”,不带背景音乐 |
帧结构 | 帧头 | 数据区长度 | 数据区 | |||
命令字 | 命令参数 | 待发送文本 | 异或校验 | |||
数据 | 0xFD | 0x00 0x0B | 0x01 | 0x03 | 宇音天下 0x8b 0xed 0x97 0xf3 0x59 0x29 0x4e 0x0b |
0Xc3 |
数据帧 | 0xFD 0x00 0x0B 0x01 0x03 0x8b 0xed 0x97 0xf3 0x59 0x29 0x4e 0x0b 0xC3 | |||||
说明 | 播放文本编码格式为 “Unicode” 的文本“宇音天下”,不带背景音乐 |
帧结构 | 帧头 | 数据区长度 | 数据区 | |||
命令字 | 命令参数 | 待发送文本 | 异或校验 | |||
数据 | 0xFD | 0x00 0x0B | 0x01 | 0x09 | 宇音天下 0xD3 0xEE 0xD2 0xF4 0xCC 0xEC 0xCF 0xC2 |
0xC8 |
数据帧 | 0xFD 0x00 0x0B 0x01 0x09 0xD3 0xEE 0xD2 0xF4 0xCC 0xEC 0xCF 0xC2 0xC8 | |||||
说明 | 播放文本编码格式为 “GBK” 的文本“宇音天下”时,同时播放背景音乐1 |
帧结构 | 帧头 | 数据区长度 | 数据区 | |||
命令字 | 命令参数 | 待发送文本 | 异或校验 | |||
数据 | 0xFD | 0x00 0x0B | 0x01 | 0x79 | 宇音天下 0xD3 0xEE 0xD2 0xF4 0xCC 0xEC 0xCF 0xC2 |
0xB8 |
数据帧 | 0xFD 0x00 0x0B 0x01 0x79 0xD3 0xEE 0xD2 0xF4 0xCC 0xEC 0xCF 0xC2 0xB8 | |||||
说明 | 播放文本编码格式为 “GBK” 的文本“宇音天下”时,同时播放背景音乐15 |
帧结构 | 帧头 | 数据区长度 | 数据区 | |||
命令字 | 命令参数 | 待发送文本 | 异或校验 | |||
数据 | 0xFD | 0x00 0x08 | 0x01 | 0x01 | [v11] 0x5B 0x76 0x31 0x31 0x5D |
0x85 |
数据帧 | 0xFD 0x00 0x08 0x01 0x01 0x5B 0x76 0x31 0x31 0x5D 0x85 | |||||
说明 | 播放文本 [v11], 芯片会识别成:设置音量为11级 |
帧结构 | 帧头 | 数据区长度 | 数据区 | |||
命令字 | 命令参数 | 待发送文本 | 异或校验 | |||
数据 | 0xFD | 0x00 0x03 | 0x31 | 0x00 | - | 0xCF |
数据帧 | 0xFD 0x00 0x03 0x31 0x00 0xCF | |||||
说明 | 设置波特率为:9600bps |
帧结构 | 帧头 | 数据区长度 | 数据区 | |||
命令字 | 命令参数 | 待发送文本 | 异或校验 | |||
数据 | 0xFD | 0x00 0x03 | 0x01 | 0x01 | - | 0xCE |
数据帧 | 0xFD 0x00 0x03 0x31 0x01 0xCE | |||||
说明 | 设置波特率为:19200bps |
帧结构 | 帧头 | 数据区长度 | 数据区 | |||
命令字 | 命令参数 | 待发送文本 | 异或校验 | |||
数据 | 0xFD | 0x00 0x03 | 0x01 | 0x02 | - | 0xCD |
数据帧 | 0xFD 0x00 0x03 0x31 0x02 0xCD | |||||
说明 | 设置波特率为:38400bps |
帧结构 | 帧头 | 数据区长度 | 数据区 | |||
命令字 | 命令参数 | 待发送文本 | 异或校验 | |||
数据 | 0xFD | 0x00 0x02 | 0x02 | - | - | 0xFD |
数据帧 | 0xFD 0x00 0x02 0x02 0xFD | |||||
说明 | 停止合成命令 |
帧结构 | 帧头 | 数据区长度 | 数据区 | |||
命令字 | 命令参数 | 待发送文本 | 异或校验 | |||
数据 | 0xFD | 0x00 0x02 | 0x03 | - | - | 0xFC |
数据帧 | 0xFD 0x00 0x02 0x03 0xFC | |||||
说明 | 暂停合成命令 |
帧结构 | 帧头 | 数据区长度 | 数据区 | |||
命令字 | 命令参数 | 待发送文本 | 异或校验 | |||
数据 | 0xFD | 0x00 0x02 | 0x04 | - | - | 0xFB |
数据帧 | 0xFD 0x00 0x02 0x04 0xFB | |||||
说明 | 恢复合成命令 |
帧结构 | 帧头 | 数据区长度 | 数据区 | |||
命令字 | 命令参数 | 待发送文本 | 异或校验 | |||
数据 | 0xFD | 0x00 0x02 | 0x21 | - | - | 0xDE |
数据帧 | 0xFD 0x00 0x02 0x21 0xDE | |||||
说明 | 通过该命令来判断TTS 模块是否正常工作,以及获取相应返回参数,返回0x4E 表明芯片仍在合成播音中,返回0x4F 表明芯片处于空闲状态 |
帧结构 | 帧头 | 数据区长度 | 数据区 | |||
命令字 | 命令参数 | 待发送文本 | 异或校验 | |||
数据 | 0xFD | 0x00 0x02 | 0x88 | - | - | 0x77 |
数据帧 | 0xFD 0x00 0x02 0x88 0x77 | |||||
说明 | 进入POWER DOWN 状态命令,复位后恢复 |
作用 | 标识类型 | 控制标识 | 详细说明 | 芯片默认 |
---|---|---|---|---|
设置前景文本播放音量 (含提示音效) |
全局 | [v?] | ? 为音量值,取值:0~16 (其中0为静音) ? 为其它无符号整数时,将视为最大音量值16处理 |
[v10] |
设置背景音乐音量 | 全局 | [m?] | ? 为音量值,取值:0~16 (其中0为静音) ? 为其它无符号整数时,将视为最大音量值16处理 |
[m4] |
设置词语语速 (针对自然朗读方式) |
全局 | [t?] | ? 为词语语速值,取值:0~5 ? 为其它无符号整数时,将视为最高词语语速值5处理 0级为最慢词语语速,5级为最快词语语速。 注意:对于Word-by-Word朗读方式不支持词语语速调节 |
[t4] |
设置数字处理策略 | 全局 | [n?] | ? 为0,自动判断 ? 为1,数字作号码处理 ? 为2,数字作数值处理 ? 为其它无符号整数时,将视为整数0处理 |
[n0] |
设置号码中“1”的读法 | 全局 | [y?] | ? 为0,合成号码时“1”读成“幺” ? 为1,合成号码时“1”读成“一” ? 为其它无符号整数时,将视为整数0处理 |
[y0] |
设置提示音处理策略 | 全局 | [x?] | ? 为0,不使用提示音 ? 为1,默认使用提示音 ? 为其它无符号整数时,将视为整数0处理 |
[x1] |
设置标点是否读出 | 全局 | [b?] | ? 为0,不读标点 ? 为1,读标点 ? 为其它无符号整数时,将视为整数0处理 |
[b0] |
设置文本朗读方式 | 全局 | [o?] | ? 为0,设置为自然朗读方式 ? 为1,设置为Word-By-Word方式 ? 为其它无符号整数时,将视为整数0处理 |
[o0] |
恢复默认的全局合成参数 | - | [d] | 所有以下全局标识恢复为默认值 | - |
强制后一个汉字按姓氏发音 | 临时 | [r] | 此控制标记后的1个汉字强制读成姓氏(主要用于多音字姓氏的处理),若没有紧跟1个汉字,则此控制无效 | - |
强制后两个汉字组成两字词 | 临时 | [2] | 此控制标记后的2个汉字强制读成“两字词”,若没有紧跟2个汉字,则此控制无效 | - |
强制后三个汉字组成三字词 | 临时 | [3] | 此控制标记后的3个汉字强制读成“三字词”,若没有紧跟3个汉字,则此控制无效 | - |
- 所有的控制标识均为半角字符。
- 控制标识需要按照语音合成命令的格式发送,特殊控制标记作为文本进行合成,即合成命令是“帧头 + 数据区长度 + 合成命令字 + 文本编码格式 + 特殊控制标记文本”的格式。
- 控制标识为全局控制标识,也就是只要用了一次,在不对芯片复位或者断电的条件下,其后发送给芯片的所有文本都会处于它的控制之下,除非用相应的[d]恢复默认设置。
- 当芯片掉电或是复位后,芯片将恢复到所有的默认值,原来的设置过的标识失去了作用,需要重新设置。
- 不符合以上可识别的“控制标识”的或者格式不对的,一律按普通的字符和数字处理
[d] [v?] [m?]这3个控制标记不能随意在播放文本中出现(容易发生理解歧义),只能有以下应用(其它控制标记没有此约束)
示例文本 | 芯片解释 |
---|---|
[v6]欢迎使用语音合成芯片 | 从本帧数据开始按6级前景音量播放:即按6级前景音量播放“欢迎使用语音合成芯片”,以后的数据帧也按6级前景音量播放。 |
示例文本 | 芯片解释 |
---|---|
[m2]欢迎使用语音合成芯片 | 从本帧数据开始按2级背景音量播放:即按2级背景音量播放“欢迎使用语音合成芯片”,以后的数据帧也按2级背景音量播放。 |
示例文本 | 芯片解释 |
---|---|
欢迎使用[t0]北京宇音天下[t5]语音合成芯片 | 按默认4级正常词语语速播放“欢迎使用”,再按0级最慢词语语速播放“北京宇音天下”,再按5级最快词语语速播放“语音合成芯片” |
示例文本 | 芯片解释 |
---|---|
[n0]234343545 | 芯片自动判断。 读作:两亿三千四百三十四万三千五百四十五 |
[n1]234343545 | 芯片强制按照号码的方式合成数字串。 读作:二三四三四三五四五 |
[n2]234343545 | 芯片强制按照数值的方式合成数字串。 读作:两亿三千四百三十四万三千五百四十五 |
示例文本 | 芯片解释 |
---|---|
[y0]010-62986600 | 芯片按照“幺”的读法合成号码文本中的“1”。读作:零幺零,六二九八六六零零 |
[y1]010-62986600 | 芯片按照“一”的读法合成号码文本中的“1”。读作:零一零,六二九八六六零零 |
注:此标记必须是在合成号码类型文本的时候才有效。
示例文本 | 芯片解释 |
---|---|
[x0]ringa sounda | 不按提示音处理,直接读成英文字母: r-i-n-g-a s-o-u-n-d-a |
[x1]ringa sounda | 按提示音处理:播放和弦ringa,再播放信息提示音sounda |
示例文本 | 芯片解释 |
---|---|
[b0] 欢迎光临,请进! | 标点符号不读出,读成:“欢迎光临 请进” |
[b1] 欢迎光临,请进! | 读出标点符号, 读成:“欢迎光临 逗号 请进 感叹号” |
示例文本 | 芯片解释 |
---|---|
[o0] 欢迎使用宇音天下研制的中文语音合成芯片 | 按比较自然的方式朗读 |
[o1] 欢迎使用宇音天下研制的中文语音合成芯片 | 按 Word By Word 方式朗读 |
示例文本 | 芯片解释 |
---|---|
[v11][n1]123, [y1]010-62986600, [r1]曲田芳 | 按11级音量读成:一二三,零一零,六二九八六六零零,曲(qu3)田芳 |
[d]123, 010-62986600, 曲田芳 | 所有全局控制标记全部恢复成默认! 按默认8级音量读成:一百二十三,零幺零,六二九八六六零零,曲(qu1)田芳 |
示例文本 | 芯片解释 |
---|---|
单位的单小虎走过来了 | 单小虎:读作:dan1 xiao2 hu3 |
单位的[r]单小虎走过来了 | 单小虎:读作:shan4 xiao2 hu3 |
注:本芯片能正确切分词组达到98%以上,由于汉语语义的复杂性,任何产品不可能做到100%正确。应用此功能,可人工干预切分词组,在一定程度上能让合成自然度更好一些。
以下是我们特别筛选出未切分好的句子。
示例文本 | 芯片解释 |
---|---|
北京东直门站到了 | 芯片会切分成: /北京/东/直/门/站/到了/ (听起来稍有点不自然) |
北京[3]东直门站到了 | 人工干预,切分成: /北京/东直门/站/到了/ (听起来更自然一些) |
已进入广顺北大街 | 芯片会切分成: /已进入/广/顺/北大街/ (听起来稍有点不自然) |
已进入[2]广顺北大街 | 人工干预,切分成: /已进入/广顺/北大街/ (听起来更自然一些) |
示例文本 | 芯片解释 |
---|---|
第1帧数据: [d][v8][m2][t5][y0][x1][o0] | 先恢复默认全局变量,设置前景音量为8级,设置背景音量为2级,设置词组语速为5级,设置合成号码时“1”读成“幺”,设置使用提示音,设置自然朗读方式 |
第2帧数据: 欢迎使用语音合成芯片 | 按上1帧数据设置好的变量播放“欢迎使用语音合成芯片” |
芯片中提供了 25 段的声音提示音,可以依据使用场合选用作为信息提示音。下面列表中是目前芯片的内置提示音的名称及声音类型:
声音提示音 (共25首) | ||||||||
序号 | 名称 | 声音类型 | 播放时间 | 序号 | 名称 | 声音类型 | 播放时间 | |
1 | sounda | 出错声 | 1s | 14 | soundn | 警报 | 2s | |
2 | soundb | 刷卡成功 | 1s | 15 | soundo | 警报 | 1s | |
3 | soundc | 刷卡成功 | 1s | 16 | soundp | 警报 | 3s | |
4 | soundd | 刷卡成功 | 1s | 17 | soundq | 紧急警报 | 1s | |
5 | sounde | 刷卡成功 | 1s | 18 | soundr | 紧急警报 | 4s | |
6 | soundf | 激光声 | 1s | 19 | sounds | 布谷声 | 1s | |
7 | soundg | 门铃声 | 1s | 20 | soundt | 提示音 | 1s | |
8 | Soundh | 门铃声 | 1s | 21 | soundu | 提示音 | 1s | |
9 | soundi | 电话铃声 | 2s | 22 | soundv | 提示音 | 1s | |
10 | soundj | 电话铃声 | 1s | 23 | soundw | 提示音 | 1s | |
11 | soundk | 广播提示音 | 2s | 24 | soundx | 提示音 | 1s | |
12 | soundl | 提示音 | 1s | 25 | soundy | 提示音 | 1s | |
13 | soundm | 提示音 | 1s |
芯片中提供了 23 段和弦音乐作为提示音,可以广泛的使用在公共信息播报的场合,下面列表中是目前芯片的内置提示音的名称和播放长度。
和弦提示音 (共8首) | ||||||||
序号 | 名称 | 播放时间 | 序号 | 名称 | 播放时间 | |||
1 | msga | 1s | 5 | msge | 2s | |||
2 | msgb | 1s | 6 | msgf | 3s | |||
3 | msgc | 1s | 7 | msgg | 4s | |||
4 | msgd | 1s | 8 | msgh | 5s |
和弦铃声 (共15首) | ||||||||
序号 | 名称 | 播放时间 | 序号 | 名称 | 播放时间 | |||
1 | ringa | 60s | 9 | ringi | 35s | |||
2 | ringb | 70s | 10 | ringj | 25s | |||
3 | ringc | 27s | 11 | ringk | 18s | |||
4 | ringd | 65s | 12 | ringl | 38s | |||
5 | ringe | 60s | 13 | ringm | 60s | |||
6 | ringf | 57s | 14 | ringn | 23s | |||
7 | ringg | 60s | 15 | ringo | 5s | |||
8 | ringh | 53s |
和弦铃声既可作和弦铃声,也是背景音乐的素材
注意:提示音在使用上没有特殊性,与合成普通文本的合成命令相同。但是,需要注意的是:提示音名称前面或后面紧接着是英文字母时,需要使用标点符号、空格、回车等与其他字母隔开,芯片才能够自动识别。
例如:发送文本“sounda,hello!”,sounda 就可以合成对应的短信提示音,但是如果发送的文本”soundahello!”,sounda 就不能合成提示音,而是直接朗读成字母“S-O-U-N-D-A”。
简单调用针对应用比较简单的情况。用户不用关心 SYN6288E 的工作状态,只需要发送文本,SYN6288E 会将接收的文本合成为语音输出。
在简单调用情况下,上位机只要与SYN6288E 之间建立起串行通信连接,即可发送合成命令来实现文本的合成,上位机不需要理睬SYN6288E 的反馈信息和状态输出,SYN6288E 会输出合成的语音。
提示: 如前一帧文本还没有合成完,再发送文本到SYN6288E 就会打断前次合成,而执行新的合成。
对于一般情况,上位机需要确定 SYN6288E的工作状态,以更精确的控制SYN6288E芯片的工作:比如需要确保上次文本被完整合成之后,再合成下一段文本。
应用举例如下:假设需要合成的文本为300字节,超过了芯片一个命令帧所能容纳的最大文本长度(200 字节),这时分两次给芯片发送文本信息。程序过程如下:
可通过硬件和软件两种方式查询 SYN6288E 的工作状态。
通过查询输出引脚 Ready/Busy的电平,来判断芯片的工作状态。当Ready/Busy为高电平时,表明芯片正在合成播放文本状态;当Ready/Busy低电平时,表明芯片空闲状态。
通过芯片状态查询命令帧来查询芯片的工作状态。当上位机发送状态查询命令帧给芯片后,芯片会立即向上位机发送当前芯片状态回传。上位机根据芯片状态的回传数据来判断当前芯片是处于空闲状态还是播音状态。
SYN6288E支持以下4种编码体系: GB2312, GBK, BIG5, Unicode。
识别类型 | 识别编码范围 | 备注 |
---|---|---|
半角ASCII符号区 | 0x00 — 0x7F | - |
全角符号区 | 0xA1A0 — 0xA3FE | - |
汉字区 | 0xB0A1 — 0xF7FE | 共6768个汉字 |
识别类型 | 识别编码范围 | 备注 |
---|---|---|
半角ASCII符号区 | 0x00 — 0x7F | - |
全角符号区 | 0xA1A0 — 0xA3FE | - |
汉字区 | 0x8140 — 0xA0FE 0xAA40 — 0xFEFE |
共21003个汉字 |
识别类型 | 识别编码范围 | 备注 |
---|---|---|
半角ASCII符号区 | 0x00 — 0x7F | - |
全角符号区 | 0xA140 — 0xA3FE | - |
汉字区 | 0xA440 — 0xF9FE | 共13060个汉字 |
识别类型 | 识别编码范围 | 备注 |
---|---|---|
全角符号区 | 0x00区, 0x30区, 0xFF区, |
- |
汉字区 | 0x4E00 — 0x9FFF | 共20902个汉字 |
注意:对于传送来的不属于可识别的编码,会静音几十毫秒左右。
标注 | 最小(mm) | 最大(mm) | 标注 | 最小(mm) | 最大(mm) | |
A | - | 1.6 | E | 8.80 | 9.20 | |
A1 | 0.05 | 0.15 | E1 | 6.90 | 7.10 | |
A2 | 1.35 | 1.45 | e | 0.80BSC | ||
A3 | 0.59 | 0.69 | b | 0.33 | 0.41 | |
D | 8.80 | 9.20 | L | 0.45 | 0.75 | |
D1 | 6.90 | 7.10 | L1 | 1.00REF |
项目 | 表示符号 | 最小值 | 最大值 | 单位 |
---|---|---|---|---|
电源电压 | VDD-V | -0.3 | 5.1 | V |
输入电压 | VIN | GND-0.3 | VDD+0.3 | V |
工作温度 | TOP | -35 | 85 | ℃ |
存储温度 | TSTG | -55 | 125 | ℃ |
注:超出表中所列的极限参数,将导致操作错误或器件损坏。
项目 | 符号 | 最小值 | 典型值 | 最大值 | 单位 | 条件 |
---|---|---|---|---|---|---|
Operating Voltage | VDD | 2.4 | 3.3 | 5.1 | V | - |
Standby current | ISBY | - | 2.0 | - | uA | VDD=3V, no load |
Operating Current | IOPR | - | 10 | - | mA | VDD=3V, no load |
Pull-Up resistor of TxD | RPU | - | 800 | - | KΩ | VDD=3V, no load |
Input current of RxD | IIH | - | - | 10.0 | uA | VDD=3V,VIN=3V |
Drive current of TxD | IOD | - | 4 | - | mA | VDD=3V,VO=2.4V |
Sink Current of Status | IOS | - | 6 | - | mA | VDD=3V,VO=0.4V |
Drive current of BP0 | IOD | - | 150 | - | mA | VDD=3V,BP0=1.5V |
Sink Current of BP0 | IOS | - | 150 | - | mA | VDD=3V,BP0=1.5V |
Drive current of BN0 | IOD | - | 150 | - | mA | VDD=3V,BN0=1.5V |
Sink Current of BN0 | IOS | - | 150 | - | mA | VDD=3V,BN0=1.5V |
Crystal Oscil. Freq | FOSC | - | 16.0 | - | MHz | VDD=3V |
测试项目 | 典型值 (测试电压:3.0V) | 典型值 (测试电压4.5V) |
---|---|---|
休眠时电流 | 0.2uA | 1uA |
工作但不播音时电流 | 3.3 mA | 4 mA |
音量1级播文本电流 | 50 mA | 50 mA |
音量6级播文本电流 | 70 mA | 80 mA |
音量10级播文本电流 | 130 mA | 150 mA |
音量16级播文本电流 | 190 mA | 280 mA |
音量1级播和弦电流 | 40 mA | 40 mA |
音量6级播和弦电流 | 60 mA | 70 mA |
音量10级播和弦电流 | 90 mA | 100 mA |
音量16级播和弦电流 | 140 mA | 200 mA |
SYN6288E在正常工作模式时,Ready/Busy指示芯片工作状态。
在语音合成或发声过程中,Ready/Busy输出高电平,指示在工作中;合成结束时,Ready/Busy输出低电平向上位机(或微处理器)发出数据传送请求,直至数据传送结束。
SYN6288E在接到主控系统的睡眠命令字后,将进入睡眠状态,以节省功耗;并可以通过RxD端口接收任意命令字,以唤醒系统。
注意:休眠后唤醒约需16毫秒才能进入工作状态。
Ready/Busy 此 STATUS 引脚信号为低电平时说明芯片正在等待接收数据。在系统设计时可以将此引脚接在MCU的中断输入源上,产生一个下降沿中断请求发送数据,以示上位机MCU可以向语音合成芯片发送数据。
为了在用户应用中输出声音, SYN6288E 内置了推挽式(Push-Pull)的 DAC ,可直接驱动喇叭,进行声音播报。并且SYN6288E内置的DAC电路模块,使用了VDDPP/VSSPP供电电源模块,具体电路说明部分请参见(10.1)和(10.2)节,其供电电压值可独立于其它电源组的供电。
上位机发送给SYN6288E的串口通信数据必须是反相的数据。上位机可以选择以下两种反相方式中的一种:
SYN6288E与MAX3221之间应加上反向器,具体的可参考MAX3221的数据手册
上述参考电路中的MAX3221加载的外接电源V33,应该为3.3V+0.3V。
上位机发送数据给SYN6288E时,中间须加有反向器,并须遵循《串口通信反向电路》一节中的说明。
也可以考虑和复位引脚RST的接法类同,配置一个较小的电容(其它组电源配置较大的电容),使得SYN6288E各组电源供电前,Res.引脚能置为高电平!这样可以有效防止外部电源的突发性干扰。
重要的是上电时,系统设计要尽量保证,SYN6288E各组电源升到正常电位比Res到正常电位要慢。
下面以 51 单片机为作为上位机为例,用C51 语言实现一段文本合成的程序实例,假设要合成的文本内容为:“欢迎使用宇音天下SNY6288E中文语音合成芯片”,以下为发送一帧TTS 文本数据的程序模块。
#include <reg51.h>
#include <string.h>
void main(void)
{
/****************需要发送的文本**********************************/
char code text[ ] = {"欢迎使用宇音天下SNY6288E中文语音合成芯片"};
unsigned char headOfFrame[5];
unsigned char length ;
unsigned char ecc = 0 ; //定义校验字节
unsigned int i = 0;
length = strlen(text); //需要发送文本的长度
/****************串口的初始化************************************/
TL1 = 0xFA; // 在11.0592MHz 下,设置波特率9600bps,工作方式2
TH1 = 0xFA;
TMOD = 0x20;
SCON = 0x50; // 串口工作方式1,允许接收
PCON = 0x80;
EA = 0;
REN = 1;
TI = 0; //发送中断标志位置零
RI = 0; //接收中断标志位置零
TR1 = 1; //定时器1 用作波特率发生
/*****************发送过程**************************************/
headOfFrame[0] = 0xFD ; //构造帧头FD
headOfFrame[1] = 0x00 ; //构造数据区长度的高字节
headOfFrame[2] = length + 3; //构造数据区长度的低字节
headOfFrame[3] = 0x01 ; //构造命令字:合成播放命令
headOfFrame[4] = 0x01 ; //构造命令参数:编码格式为GBK
for(i = 0; i<5; i++) //依次发送构造好的5个帧头字节
{
ecc=ecc^(headOfFrame[i]); //对发送的字节进行异或校验
SBUF = headOfFrame[i];
while (TI== 0) {;} //等待发送中断标志位置位
TI = 0; //发送中断标志位清零
}
for(i = 0; i<length; i++) //依次发送待合成的文本数据
{
ecc=ecc^(text[i]); //对发送的字节进行异或校验
SBUF = text[i];
while (TI== 0) {;}
TI = 0;
}
SBUF=ecc; //最后发送校验字节
while (TI== 0) {;}
TI=0;
// while(1);
}
下面是 51 单片机为控制上位机的汇编语言示例,演示向芯片发送“宇音天下”这段文本进行合成。
“宇音天下”的GBK码是:
;晶振11.0592MHz
ecc EQU 40H ;定义校验字节
ORG 0030H
TABLE: DB 0xD3,0xEE,0xD2,0xF4,0xCC,0xEC,0xCF,0xC2 ;"宇音天下"的GBK码
ORG 0000H
LJMP MAIN
ORG 0200H
MAIN:
CLR EA ;串口初始化
MOV TMOD, #20H ;定时器1工作在方式2
MOV TH1, #0FAH ;装载定时器初值,波特率9600
MOV TL1, #00H
SETB TR1 ;启动定时器1
MOV SCON, #50H ;串口工作方式1,允许接收
MOV PCON, #80H ;波特率倍增
CLR TI ;发送中断标志位置零
CLR RI ;接收中断标志位置零
MOV A, #0FDh ;帧头FD
MOV ecc, A ;给异或校验单元赋初值
MOV SBUF, A ;串口发送
JNB TI, $
CLR TI
MOV A,#00h ;数据区长度的高字节
XRL ecc,A
MOV SBUF, A
JNB TI, $
CLR TI
MOV A,#0Bh ;数据区长度的低字节
XRL ecc,A
MOV SBUF, A
JNB TI, $
CLR TI
MOV A,#01h ;命令字:合成播放命令
XRL ecc,A
MOV SBUF, A
JNB TI, $
CLR TI
MOV A,#01h ;命令参数:编码格式为GBK
XRL ecc,A
MOV SBUF, A
JNB TI, $
CLR TI
MOV R7,#8 ;待播放文本的总字节数
MOV R6,#0 ;发送字节计数
MOV DPTR,#TABLE
LOOP: MOV A,R6
MOVC A,@A+DPTR
XRL ecc,A
MOV SBUF, A ;播放"宇音天下"
JNB TI, $
CLR TI
INC R6
DJNZ R7,LOOP
MOV A,ecc ;发送校验字节
MOV SBUF, A
JNB TI, $
CLR TI
SJMP $
END
发送后可接收到芯片的反馈信号,如果是“41”和“4F”,则说明文本被正确接收且合成播音完毕,芯片处于空闲状态;如果收到的是“45”,则说明文本没有正确的收到或是合成,则需要重新发送或者复位。
上面的Demo 主要说明了发送过程需要遵循的协议问题;发送完语句后要加入发送是否完成的判断程序,可以通过查询或者中断两种方式进行判断当前芯片的工作状态,然后才能发送下一个数据。