注意:
支持蓝牙功能与不支持蓝牙功能的语音合成芯片,回传的数据有所不同。
1、支持蓝牙功能的回传数据格式为“RTN + 回传命令字和内容”,即在本文档所有回传命令字和内容前会加上“RTN”标识。
2、不支持蓝牙功能的回传数据没有“RTN”标识,以本文档为准。
回传举例:
支持蓝牙的芯片 | 不支持蓝牙的芯片 | |
---|---|---|
初始化回传 | RTN 0x4A(0x52 0x54 0x4E 0x4A) | 0x4A |
接收成功 | RTN 0x41(0x52 0x54 0x4E 0x41) | 0x41 |
接收失败 | RTN 0x45(0x52 0x54 0x4E 0x45) | 0x45 |
芯片播音中 | RTN 0x4E(0x52 0x54 0x4E 0x4E) | 0x4E |
播音完毕或空闲 | RTN 0x4F(0x52 0x54 0x4E 0x4F) | 0x4F |
帧结构 | 帧头 (1字节) |
数据区长度 (2字节) |
数据区 | ||
命令字 (1字节) |
命令参数 (0或1字节) |
数据 (0或N字节) |
|||
数据 | 0xFD | 0xXX 0xXX | 0xXX | 0xXX | 0xXX…… |
说明 | - | 高字节在前,低字节在后 | 总字节数必须和前面的“数据区长度”一致 |
注意:
1、芯片支持以下命令帧格式:“帧头FD + 数据区长度+数据区”格式;
2、上位机发送给芯片的所有命令和数据都需要用“帧”的方式进行封装后传输;
3、同一帧数据中,每个字节之间的发送间隔不能超过30ms;帧与帧之间的发送间隔必须超过30ms。
4、当芯片正在合成文本的时候,如果又接收到一帧有效的合成命令帧,芯片会立即停止当前正在合成的文本,转而合成新收到的文本;
5、用户在连续播放文本内容时,在收到前一帧数据播放完毕的“芯片空闲”字节(即0x4F)后,最好延时1ms左右再发送下一帧数据。
本方式是针对应用比较简单的使用场景。用户不用关心本芯片的工作状态,只需要发送文本,本芯片会将接收的文本合成为语音输出。
在这种情况下,上位机只要与本芯片之间建立起UART通信,即可发送合成命令来实现文本的合成,上位机不需要理睬芯片的回传数据或R/B状态引脚的输出。
注意:
1、本方式客户需要自行测试,确保稳定;
2、如前一帧文本还没有合成完,再发送文到芯片就会打断前次合成,而执行新的合成;
3、采用本方式时,必须在芯片上电650ms后再发送串口命令;
4、发送“设置特殊参数”命令帧后(例如对“去上电POP音延时”、“去句首丢音延时”、“去句尾POP音延时”进行设置),上位机必须间隔150ms才能发送其它命令,否则会有大风险(例如:参数没生效,参数乱写,个别芯片表现异常,个别芯片参数乱写)。
5、发送“设置TTS参数”命令帧后(例如对音量,语速等进行设置),上位机必须间隔150ms才能发送其它命令,否则会有大风险(例如:参数没生效,参数乱写,个别芯片表现异常,个别芯片参数乱写)。
对于一般情况,上位机需要确定芯片的忙闲状态,以便精确的控制芯片的工作。
应用举例1:假设需要合成的文本为5k字节,超过了“语音合成播放命令帧”定义的“待发送文本”的最大字节数(注意:不同的编码格式,最大字节数会不相同),这时分多次给芯片发送文本信息。
步骤1:上位机先给芯片发送一个语音合成命令帧,“待发送文本”不超过4000字节(GB2312、GBK、Unicode编码)或2000字节(UTF8编码)
步骤2:通过以下三种方式之一确保上一帧文本合成完毕
第1种方式:上位机收到芯片回传“0x4F”(表明芯片合成播放完毕)
第2种方式:查询输出引脚“R/B”的电平,直到“R/B”为低电平(表明芯片合成播放完毕)
第3种方式:用“芯片忙闲查询命令”查询芯片的忙闲状态,直到芯片回传的是0x4F(表明芯片合成播放完毕)
步骤3:上位机再发送一个语音合成命令帧给芯片(合成剩下的文本)
应用举例2:假设需要先“设置TTS参数”,然后马上发送语音合成命令。
步骤1:上位机先给芯片发送“设置TTS参数”命令帧
步骤2:通过以下三种方式之一确保TTS参数设置成功
第1种方式:上位机收到芯片回传“0x4F”(表明TTS设置成功)
第2种方式:查询输出引脚“R/B”的电平,直到“R/B”为低电平(表明TTS设置成功)
第3种方式:用“芯片忙闲查询命令”查询芯片的忙闲状态,直到芯片回传的是0x4F(表明TTS设置成功)
步骤3:上位机再发送文语音合成命令帧给芯片
命令名称 | 命令字 | 命令举例 | 回传说明 |
睡眠 | 0x22 | 0xFD 0x00 0x01 0x22 | 无回传 POPEN脚(第6脚)低电平不适用 |
0x88 | 0xFD 0x00 0x01 0x88 | 0x4B:单字节(芯片进入深度睡眠模式) POPEN脚(第6脚)低电平不适用 |
|
唤醒 | 0xFF | 0xFD 0x00 0x01 0xFF | 0x4A:回传只要包含0x4A则代表“唤醒成功" 例如:0x00 0x4A 或 0x00 0x34 0x4A 或 0xF0 0x4A |
停止播音 | 0x02 | 0xFD 0x00 0x01 0x02 | 0x41:单字节(接收成功) |
暂停播音 | 0x03 | 0xFD 0x00 0x01 0x03 | 0x41:单字节(接收成功) |
恢复播音 | 0x04 | 0xFD 0x00 0x01 0x04 | 0x41:单字节(接收成功) |
播音忙闲状态查询 | 0x21 | 0xFD 0x00 0x01 0x21 | 0x4E:单字节(表示播音中) 0x4F:单字节(表示空闲中) |
查询版本号 | 0x58 | 0xFD 0x00 0x01 0x58 | 0x58:多字节(回传版本号) |
说明: 睡眠命令0x88、0x22都可以使芯片进入深度睡眠模式,只是两者返回数据不同,用户根据实际需求二选其一即可
回传类型名称 | 回传命令 | 备注 |
初始化成功回传 (芯片在上电或复位后) |
0x4A | 回传只要包含0x4A则代表“初始化成功" 例如:0x00 0x4A 或 0x00 0x34 0x4A 或 0xF0 0x4A |
命令接收成功回传 | 0x41 | 收到正确的命令帧时回传 |
命令接收失败回传 | 0x45 | 收到错误的命令帧时回传 |
空闲回传 | 0x4F | 播音完毕或参数配置成功时回传 |
通过查询输出引脚“R/B”的电平,来判断芯片的忙闲状态。当“R/B”为高电平时,表明芯片正在播音;当“R/B”低电平时,表明芯片为空闲状态。
通过“芯片忙闲查询命令”来查询芯片的忙闲状态。芯片回传0x4E代表芯片正在播音,芯片回传0x4F代表芯片为空闲状态。
芯片不会主动Deep Sleep,只有接收到上位机发送的Deep Sleep命令帧后才会Deep Sleep。
芯片进入Deep Sleep之后,上位机首先需要唤醒芯片(可以通过发送唤醒命令唤醒,或者通过给WAKEUP引脚一个下降沿唤醒,唤醒后会收到0x4A回传(TTS初始化成功),代表唤醒成功,然后上位机再向芯片发送文本合成命令帧数据。
注意:
1、如设备对低功耗性能要求较高,建议让芯片长时间处于Deep Sleep模式。即发送完文本合成命令帧后收到0x4F回传(代表芯片播音完毕芯片空闲)后,随即发送Deep Sleep命令,使芯片进入深度睡眠模式。
2、最小唤醒间隔:40ms(开始计时点:发睡眠指令;结束计时点:发唤醒命令)
3、成功睡眠时间:70ms(开始计时点:发0x88睡眠指令回传收到0x4B时;结束计时点:芯片睡着电流到2uA)
开机即进入深度睡眠模式及唤醒合成流程
场景 | 类型 | 内容 | 说明 |
【图一】 开机即进入睡眠 |
回传命令 | 0x4A | 上电后回传4A,TTS初始化成功 |
发送命令 | FD 00 01 22 | 发送深度睡眠命令,睡眠后芯片将无回传 | |
【图二】 完整的唤醒+合成+睡眠流程 |
发送命令 | FD 00 01 FF | 发送唤醒命令 |
回传命令 | 0x4A | 回传4A,TTS初始化成功,唤醒成功 | |
发送命令 | FD 00 0A 01 01 D3 EE D2 F4 CC EC CF C2 | 发送合成命令,文本内容是“宇音天下” | |
回传命令 | 0x41 | 表明芯片接收到上一条合成命令 | |
回传命令 | 0x4F | 返回4F,表明芯片播音完毕,处于空闲状态 | |
发送命令 | FD 00 01 22 | 发送深度睡眠命令,睡眠后芯片将无回传 |
1、不同功放的性能有比较大的差异,部分功放可能存在上电POP杂音,以及段首丢音(即首字丢音)的现象。为方便用户解决该问题,支持用户对“去上电POP音延时”、“去句首丢音延时”、“去句尾POP音延时”进行配置。
2、建议客户全部用默认配置(启动时间和出音响应时间会略慢,但基本适配了绝大部分功放),不要修改配置。对于启动时间和出音响应时间有极端快速要求的,可以自行配置和自行测试。
参数 | 默认配置 | 配置范围 | POPEN口与MUTE口 适用方案 |
参数说明 |
---|---|---|---|---|
去上电POP音延时 | 200ms | 0 ~ 200ms | 方案一 方案二 方案三 |
1、值越小,芯片启动越快; 2、但部分功放在上电时可能出现POP杂音; 3、若修改配置,需客户自行测试上电POP音大小是否能接受; |
去句首丢音延时 | 250ms | 0 ~ 250ms | 方案三 | 1、值越小,出音响应越快; 2、但部分功放可能出现段首丢音(即首字丢音); 3、若修改配置,需客户自行测试出一个合适的延时值: (合适的标准:分别合成这3个词语:"当前";"途中","宇音",听感完整无段首丢音) |
去句尾POP音延时 | 50ms | 0 ~ 300ms | 方案三 | 1、值越小,合成播音完毕返回0x4F(空闲状态)越快; 2、但部分功放在段尾可能有POP杂音; 3、若修改配置,需客户自行抽测待合成的目标文本; |
注意:
1、 会实时保存参数(断电不受影响,断电重新上电后依然是最新参数)。上位机只需第1次上电设置一次即可。
2、 发送“设置特殊参数”命令帧后,上位机满足以下条件之一才能发送其它命令,否则会有大风险(例如:参数没生效,参数乱写,个别芯片表现异常,个别芯片参数乱写):
2.1 间隔150ms,发送其它命令;
2.2 收到0x4F空闲回传后,发送其它命令;
2.3 用硬件方式查询“R/B脚”(即READY/BUSY脚)的电平为低电平后,发送其它命令;
2.4 用软件方式通过“芯片忙闲查询命令”查询芯片回传0x4F后,发送其它命令;
帧头 (1字节) |
数据区长度 (2字节) |
数据区 | |||
命令字 (1字节) |
数据(6字节) | ||||
上电POP音延时 (2字节) |
段首丢音延时 (2字节) |
段尾POP音延时 (2字节) |
|||
0xFD | 0x00 0x07 | 0x0A | 0xXX 0xXX | 0xXX 0xXX | 0xXX 0xXX |
举例:
去上电POP音延时=200ms,去段首丢音延时=250ms,去段尾POP音延时=50ms
帧头 (1字节) |
数据区长度 (2字节) |
数据区 | |||
命令字 (1字节) |
数据(6字节) | ||||
上电POP音延时 (2字节) |
段首丢音延时 (2字节) |
段尾POP音延时 (2字节) |
|||
0xFD | 0x00 0x07 | 0x0A | 0x00 0xC8 | 0x00 0xFA | 0x00 0x32 |
举例:
去上电POP音延时=0ms,去段首丢音延时=0ms,去段尾POP音延时=50ms
帧头 (1字节) |
数据区长度 (2字节) |
数据区 | |||
命令字 (1字节) |
数据(6字节) | ||||
上电POP音延时 (2字节) |
段首丢音延时 (2字节) |
段尾POP音延时 (2字节) |
|||
0xFD | 0x00 0x07 | 0x0A | 0x00 0x00 | 0x00 0x00 | 0x00 0x32 |
回传:
回传头 | 回传说明 |
0x4F | 单字节(参数配置成功时回传,表示参数配置成功) |
帧头(1字节) | 数据区长度(2字节) | 数据区 |
命令字(1字节) | ||
0xFD | 0x00 0x01 | 0x0B |
回传举例:
去上电POP音延时=200ms,去段首丢音延时=250ms,去段尾POP音延时=50ms
回传头 | 特殊参数 | |||
上电POP音延时(2字节) | 段首丢音延时(2字节) | 段尾POP音延时(2字节) | 备用参数(6字节)用户可忽略 | |
0x5E | 0x00 0xC8 | 0x00 0xFA | 0x00 0x32 | 0xXX 0xXX 0xXX 0xXX 0xXX 0xXX |
命令名称 | 命令字 | 回传说明 |
语音合成 | 0x01 | 0x4F:单字节(播音完毕时回传,表示播音完毕) |
设置TTS参数 | 0x06 | 0x4F:单字节(TTS参数配置成功时回传,表示TTS参数配置成功) |
获取TTS参数 | 0x05 | 0x5F:多字节(回传所有的TTS参数) |
帧头 (1字节) |
数据区长度 (2字节) |
数据区 | ||
命令字 (1字节) |
编码格式 (1字节) |
数据 (N字节) |
||
0xFD | 0xXX 0xXX | 0x01 | 0x00(GB2312编码) | 0xXX 0xXX…… 待发送二进制文本<=4000字节 (部分芯片<=400字节) |
0x01(GBK编码) | ||||
0x03(UNICODE小头) | ||||
0x04(UNICODE大头) | ||||
0x05(UTF8编码) | 0xXX 0xXX…… 待发送二进制文本<=2000字节 (部分芯片<=400字节) |
举例:
播放文本编码格式为 “GBK” 的文本“宇音天下”
帧头 (1字节) |
数据区长度 (2字节) |
数据区 | ||
命令字 (1字节) |
编码格式 (1字节) |
数据 (N字节) |
||
0xFD | 0x00 0x0A | 0x01 | 0x01 | 0xD3 0xEE 0xD2 0xF4 0xCC 0xEC 0xCF 0xC2 文本=宇音天下 |
举例:
播放文本编码格式为 “UNICODE大头” 的文本“宇音天下”
帧头 (1字节) |
数据区长度 (2字节) |
数据区 | ||
命令字 (1字节) |
编码格式 (1字节) |
数据 (N字节) |
||
0xFD | 0x00 0x0A | 0x01 | 0x04 | 0x5B 0x87 0x97 0xF3 0x59 0x29 0x4E 0x0B 文本=宇音天下 |
举例:
设置TTS参数:"[m55][v8][s7][n1][e3]"(发音人=小燕子;音量=8级;语速=7级;数字=读成号码;音效=机器人)
帧头 (1字节) |
数据区 长度 (2字节) |
数据区 | ||
命令字 (1字节) |
编码 格式 (1字节) |
数据 (N字节) |
||
0xFD | 0x00 0x17 | 0x01 | 0x01 | 0x5B 0x6D 0x35 0x35 0x5D 0x5B 0x76 0x38 0x5D 0x5B 0x73 0x37 0x5D 0x5B 0x6E 0x31 0x5D 0x5B 0x65 0x33 0x5D 文本=[m55][v8][s7][n1][e3] |
注意:
设置TTS参数时,采用“0x01”或“0x06”命令效果等同,二者任选其一,“0x06”命令详见下方《设置TTS参数》章节
举例:
恢复默认:”[d][m3]“(默认用户参数控制标记和默认发音人参数)
帧头 (1字节) |
数据区长度 (2字节) |
数据区 | ||
命令字 (1字节) |
编码格式 (1字节) |
数据 (N字节) |
||
0xFD | 0x00 0x09 | 0x01 | 0x01 | 0x5B 0x64 0x5D 0x5B 0x6D 0x33 0x5D 文本=[d][m3] |
回传:
回传头 | 回传说明 |
0x4F | 单字节(播音完毕时回传,表示播音完毕) |
注意:
1、会实时保存参数(断电不受影响,断电重新上电后依然是最新参数)。若参数后期不再变的话,上位机只需第1次上电设置一次即可。
2、设置TTS参数时,采用“0x01”语音合成命令或“0x06”设置TTS命令效果等同,二者任选其一即可。
3、发送“设置TTS参数”命令帧后,上位机满足以下条件之一才能发送其它命令,否则会有大风险(例如:参数没生效,参数乱写,个别芯片表现异常,个别芯片参数乱写)。
3.1 间隔150ms,发送其它命令;
3.2 收到0x4F空闲回传后,发送其它命令;
3.3 用硬件方式查询“R/B脚”(即READY/BUSY脚)的电平为低电平后,发送其它命令;
3.4 用软件方式通过“芯片忙闲查询命令”查询芯片回传0x4F后,发送其它命令;
帧头 (1字节) |
数据区长度 (2字节) |
数据区 | ||
命令字 (1字节) |
编码格式 (1字节) |
数据 (N字节) |
||
0xFD | 0xXX 0xXX | 0x06 | 0x01 | 0xXX…… |
举例:
帧头 (1字节) |
数据区 长度 (2字节) |
数据区 | 说明 | ||
命令字 (1字节) |
编码 格式 (1字节) |
数据 (N字节) |
|||
0xFD | 0x00 0x07 | 0x06 | 0x01 | 0x5B 0x76 0x31 0x30 0x5D | 设置:[v10] 音量 = 10级 |
0xFD | 0x00 0x07 | 0x06 | 0x01 | 0x5B 0x73 0x31 0x30 0x5D | 设置:[s10] 语速 = 10级 |
0xFD | 0x00 0x06 | 0x06 | 0x01 | 0x5B 0x6D 0x33 0x5D | 设置:[m3] 发音人 = 小燕子 |
0xFD | 0x00 0x10 | 0x06 | 0x01 | 0x5B 0x6D 0x33 0x5D 0x5B 0x76 0x31 0x30 0x5D 0x5B 0x73 0x31 0x30 0x5D |
设置:[m3][v10][s10] 发音人=小燕子 音量=10 语速=10 |
0xFD | 0x00 0x16 | 0x06 | 0x01 | 0x5B 0x6D 0x35 0x34 0x5D 0x5B 0x76 0x31 0x30 0x5D 0x5B 0x74 0x31 0x30 0x5D 0x5B 0x73 0x33 0x30 0x5D |
设置:[m54][v10][t10][s30] 发音人=唐老鸭 音量=10 语调=10 语速=30 |
0xFD | 0x00 0x05 | 0x06 | 0x01 | 0x5B 0x64 0x5D | 设置:[d] 所有TTS参数恢复默认 (发音人除外) |
0xFD | 0x00 0x09 | 0x06 | 0x01 | 0x5B 0x64 0x5D 0x5B 0x6D 0x33 0x5D | 设置:[d][m3] 所有TTS参数恢复默认 发音人=晓玲(默认) |
回传:
回传头 | 回传说明 |
0x4F | 单字节(TTS参数配置成功时回传,表示TTS参数配置成功) |
帧头(1字节) | 数据区长度(2字节) | 数据区 |
命令字(1字节) | ||
0xFD | 0x00 0x01 | 0x05 |
回传举例:
假定当前用户的TTS参数设置为:文本编码=GBK;语速=5级;音量=8级;语调=5级;发音人=晓玲;提示音=按提示音处理;发音风格=平铺直叙;数字读法=按数值读;数字"1"=读成“幺”;标点读法=不读标点;韵律=不处理韵律标注;拼音=不识别汉语拼音;姓氏=自动判断;无定义(预留);英文"0"=读成“zero”;英文单词=按照字母读法。
回 传 头 |
回传数据(参数) | ||||||||||||||||
文本 编码 |
语速 [s*] |
音量 [v*] |
语调 [t*] |
发音人 [m*] |
提示音 [x*] |
发音 风格 [f*] |
数字 读法 [n*] |
数字1 读法 [y*] |
标点 读法 [b*] |
韵律 [z*] |
拼音 [i*] |
姓氏 [r*] |
预留 1字节 |
英文0 读法 [o*] |
英文 单词 [h*] |
||
0x5F | 0xA8 0x03 | 0x05 | 0x08 | 0x05 | 0x03 | 0x01 | 0x01 | 0x02 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x01 |
注意:文本编码返回值对应如下
0xA9 0x03 = GB2312
0xA8 0x03 = GBK
0xAA 0x03 = UTF8
0xB0 0x04 = UNICODE小头
0xB1 0x04 = UNICODE大头
0xB6 0x03 = BIG5
[s*][v*][t*][m*]等参数说明,详见 《文本控制标记说明-中文合成》 《文本控制标记说明-中英合成》文档
注意:
英文"0"读法[o*]参数、英文单词[h*]参数,只适用于“英文合成”。