帧结构 | 帧头 (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 BB B6 D3 AD B9 DB BF B4 | 发送合成命令,文本内容是“宇音天下” | |
回传命令 | 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:单字节(播音完毕时回传,表示播音完毕) |
语音合成(可带MP3背景音) | 0x08 | 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 0x13 | 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*] |
音效 [e*] |
英文0 读法 [o*] |
英文 单词 [h*] |
||
0x5F | 0xA8 0x03 | 0x05 | 0x08 | 0x05 | 0x03 | 0x01 | 0x01 | 0x02 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x01 |
[s*][v*][t*][m*]等参数说明,详见 《文本控制标记说明-中文合成》 《文本控制标记说明-中英合成》文档
注意:
英文"0"读法[o*]参数、英文单词[h*]参数,只适用于“英文合成”。
注意:
请确认所选型的芯片是否支持MP3功能,若不支持请使用上一章节的语音合成命令。
帧头 (1字节) |
数据区长度 (2字节) |
数据区 | |||
命令字 (1字节) |
编码格式 (1字节) |
MP3背景音序号 (2字节) |
数据 (N字节) |
||
0xFD | 0xXX 0xXX | 0x08 | 0x00=(GB2312编码) | 0xXX 0xXX | 0xXX 0xXX…… 待发送二进制文本<=4000字节 (部分芯片<=400字节) |
0x01(GBK编码) | |||||
0x03(UNICODE小头) | |||||
0x04(UNICODE大头) | |||||
0x05(UTF8编码) | 0xXX 0xXX…… 待发送二进制文本<=2000字节 (部分芯片<=400字节) |
举例:
播放文本编码格式为 “GBK” 的文本“宇音天下”(MP3背景音序号=1)
帧头 (1字节) |
数据区长度 (2字节) |
数据区 | |||
命令字 (1字节) |
编码格式 (1字节) |
MP3背景音序号 (2字节) |
数据 (N字节) |
||
0xFD | 0xXX 0xXX | 0x08 | 0x01 | 0x00 0x01 | 0xXX 0xXX |
注意:
1、MP3背景音序号 = 0,代表不播放MP3背景音 ; MP3序号 > 0,如MP3背景音序号 = 1,代表播放序号为1的MP3背景音;
2、MP3背景音时长 < TTS播放时长时,会自动循环播放该条MP3背景音,直至文本合成结束;
回传:
回传头 | 回传说明 |
0x4F | 单字节(播音完毕时回传,表示播音完毕) |
注意:
1、本章节的命令均为特殊命令,请确认您选型的芯片是否支持;
2、总存储空间为20KB,可存储40至160条文本,用户根据需求合理规划;
3、每条文本长度满足<=512字节即可,不限定每条的具体长度;
4、所有文本按顺序存储,播放时给定序号即可;
5、在出厂或者烧录全部文本后,每条文本的“占用的存储空间字节数”就固定不变了。更新某序号的文本时,修改后的文本长度不能超过本序号“占用的存储空间字节数”。
初始每条文本字节数N( 必须:N ≤ 512) | 占用存储空间字节数 | 可存储条数 |
若:N ≤ 128 | 128字节 | 160条 |
若:128 ≤ N ≤ 256 | 256字节 | 80条 |
若:256 ≤ N ≤ 512 | 512字节 | 40条 |
命令名称 | 命令字 | 回传说明 |
获取“自定义文本”区的总信息 | 0x10 | 0x51:多字节(回传“自定义文本”区的总信息) |
获取指定的“自定义文本”信息 | 0x12 | 0x50:多字节(回传指定的“自定义文本”信息) |
播放指定的“自定义文本”(可带背景音) | 0x11 | 0x4F:单字节(播音完毕时回传,表示播音完毕) |
更新指定的“自定义文本” | 0x13 | 0x54:单字节(表示操作成功) 0x55:多字节(表示操作失败,返回失败原因) |
新增一条”自定义文本” | 0x14 | 0x54:单字节(表示操作成功) 0x55:多字节(表示操作失败,返回失败原因) |
清空所有“自定义文本” | 0x16 | 0x54:单字节(表示操作成功) |
设置TTS参数命令 | 0x06 | 0x4F:单字节(配置成功时回传,表示TTS参数配置成功) |
获取TTS参数命令 | 0x05 | 0x5F:多字节(回传所有的TTS参数) |
公共命令和公共回传说明详见 《公共命令》章节
帧头(1字节) | 数据区长度(2字节) | 数据区 |
命令字(1字节) | ||
0xFD | 0x00 0x01 | 0x10 |
回传:
回传头 | 回传参数 | ||
最大序号 (2字节) |
总空间字节数 (4字节) |
已占用字节数 (4字节) |
|
0x51 | 0xXX 0xXX | 0xXX 0xXX 0xXX 0xXX | 0xXX 0xXX 0xXX 0xXX |
帧头 (1字节) |
数据区长度 (2字节) |
数据区 | ||
命令字 (1字节) |
备用 (1字节) |
文本序号 (2字节) |
||
0xFD | 0xXX 0xXX | 0x12 | 0xXX | 0xXX 0xXX |
举例:
获取序号为3的“自定义文本”信息
帧头 (1字节) |
数据区长度 (2字节) |
数据区 | ||
命令字 (1字节) |
备用 (1字节) |
文本序号 (2字节) |
||
0xFD | 0x00 0x04 | 0x12 | 0x00 | 0x00 0x03 |
回传:
回传头 | 回传数据 | |||||||
编码格式 (1字节) |
最大序号 (2字节) |
文本序号 (2字节) |
存储长度 (4字节) |
实际长度 (4字节) |
文本数据 (N字节) |
|||
0x50 | 0xXX | 0xXX 0xXX | 0xXX 0xXX | 0xXX 0xXX 0xXX 0xXX |
0xXX 0xXX 0xXX 0xXX |
0xXX… |
帧头 (1字节) |
数据区长度 (2字节) |
数据区 | |||
命令字 (1字节) |
备用 (1字节) |
文本序号 (2字节) |
MP3背景音序号 (2字节) |
||
0xFD | 0xXX 0xXX | 0x11 | 0xXX | 0xXX 0xXX | 0xXX 0xXX |
举例:
播放序号为3的“自定义文本”(MP3背景音序号为2)
帧头 (1字节) |
数据区长度 (2字节) |
数据区 | |||
命令字 (1字节) |
备用 (1字节) |
文本序号 (2字节) |
MP3背景音序号 (2字节) |
||
0xFD | 0x00 0x06 | 0x11 | 0x00 | 0x00 0x03 | 0x00 0x02 |
举例:
播放序号为3的“自定义文本”(不带背景音)
帧头 (1字节) |
数据区长度 (2字节) |
数据区 | |||
命令字 (1字节) |
备用 (1字节) |
文本序号 (2字节) |
MP3背景音序号 (2字节) |
||
0xFD | 0x00 0x06 | 0x11 | 0x00 | 0x00 0x03 | 0x00 0x00 |
注意:
1、MP3背景音序号 = 0,代表不播放MP3背景音 ; MP3背景音序号 > 0,如MP3背景音序号 = 1,代表播放序号为1的MP3背景音;
2、MP3背景音时长 < TTS播放时长时,会自动循环播放该条MP3背景音,直至“自定义文本“合成结束。
回传:
回传头 | 回传说明 |
0x4F | 单字节(播音完毕时回传,表示播音完毕) |
帧头 (1字节) |
数据区长度 (2字节) |
数据区 | |||
命令字 (1字节) |
编码格式 (1字节) |
文本序号 (2字节) |
更新数据 (N字节) |
||
0xFD | 0xXX 0xXX | 0x13 | 0xXX | 0xXX 0xXX | 0xXX 0xXX…… |
举例:
假定要更新序号为3“自定义文本”(编码格式=GBK;更新数据=宇音天下)
帧头 (1字节) |
数据区长度 (2字节) |
数据区 | |||
命令字 (1字节) |
编码格式 (1字节) |
文本序号 (2字节) |
更新数据 (N字节) |
||
0xFD | 0x00 0x0C | 0x13 | 0x01 | 0x00 0x09 | 0xD3 0xEE 0xD2 0xF4 0xCC 0xEC 0xCF 0xC2 宇音天下 |
回传:
回传头 | 回传说明 |
0x54 | 单字节(表示操作成功) |
0x55 | 多字节(表示操作失败,返回失败原因) |
操作失败回传说明
回传头 | 回传参数 | 失败原因 |
0x55 | 0x01 | 更新的长度超过“占用的存储空间字节数” |
0x55 | 0x02 | 序号无效 |
0x55 | 0x03 | 新增的序号非最大序号加1 |
0x55 | 0x04 | 更新或新增的总长度非2048字节的倍数 |
0x55 | 0x05 | 新增的长度大于“芯片整体可用长度” |
0x55 | 0x21 | 其它原因 |
帧头 (1字节) |
数据区长度 (2字节) |
数据区 | |||
命令字 (1字节) |
编码格式 (1字节) |
文本序号 (2字节) |
更新数据 (N字节) |
||
0xFD | 0xXX 0xXX | 0x14 | 0xXX | 0xXX 0xXX | 0xXX 0xXX…… |
举例:
假定要新增序号为10“自定义文本”(编码格式=GBK;更新数据=宇音天下)
帧头 (1字节) |
数据区长度 (2字节) |
数据区 | |||
命令字 (1字节) |
编码格式 (1字节) |
文本序号 (2字节) |
更新数据 (N字节) |
||
0xFD | 0x00 0x0C | 0x14 | 0x01 | 0x00 0x0A | 0xD3 0xEE 0xD2 0xF4 0xCC 0xEC 0xCF 0xC2 宇音天下 |
注意:
”新增自定义文本序号“必须等于芯片内”最大自定义文本序号+1“,如最大自定义文本序号为”10“,则要待新增的自定义文本序号为”11“。
回传:
回传头 | 回传说明 |
0x54 | 单字节(表示操作成功) |
0x55 | 多字节(表示操作失败,返回失败原因) |
操作失败回传说明
回传头 | 回传参数 | 失败原因 |
0x55 | 0x01 | 更新的长度超过“占用的存储空间字节数” |
0x55 | 0x02 | 序号无效 |
0x55 | 0x03 | 新增的序号非最大序号加1 |
0x55 | 0x04 | 更新或新增的总长度非2048字节的倍数 |
0x55 | 0x05 | 新增的长度大于“芯片整体可用长度” |
0x55 | 0x21 | 其它原因 |
帧头(1字节) | 数据区长度(2字节) | 数据区 |
命令字(1字节) | ||
0xFD | 0x00 0x01 | 0x16 |
回传:
回传头 | 回传说明 |
0x54 | 单字节(表示操作成功) |
注意:
1、本章节的命令均为特殊命令,请确认您选型的芯片是否支持;
2、总存储空间为860KB,可存储比特率为8Kbps的MP3音频时长约为860秒;
3、不限定每条MP3的具体长度;
4、所有MP3按顺序存储,播放时给定序号即可。
命令名称 | 命令字 | 回传说明 |
获取MP3区总信息 | 0x60 | 0x53:多字节(回传MP3区的总信息) |
获取指定MP3信息 | 0x62 | 0x52:多字节(回传指定的MP3信息) |
播放指定MP3 | 0x61 | 0x4F:单字节(播音完毕时回传,表示播音完毕) |
更新指定的MP3 | 0x63 | 0x54:单字节(表示操作成功) 0x55:多字节(表示操作失败,返回失败原因) |
新增一条MP3 | 0x64 | 0x54:单字节(表示操作成功) 0x55:多字节(表示操作失败,返回失败原因) |
清空所有MP3 | 0x66 | 0x54:单字节(表示操作成功) |
设置MP3音量 | 0x67 | - |
获取MP3音量 | 0x68 | 0x56:多字节(回传MP3音量) |
设置背景音音量 | 0x69 | - |
获取背景音音量 | 0x6A | 0x57:多字节(回传背景音音量) |
公共命令和公共回传说明详见 《公共命令》章节
帧头(1字节) | 数据区长度(2字节) | 数据区 | ||
命令字(1字节) | ||||
0xFD | 0x00 0x01 | 0x60 |
回传:
回传头 | 回传参数 | ||
最大序号 (2字节) |
总空间字节数 (4字节) |
已占用字节数 (4字节) |
|
0x53 | 0xXX 0xXX | 0xXX 0xXX 0xXX 0xXX | 0xXX 0xXX 0xXX 0xXX |
帧头 (1字节) |
数据区长度 (2字节) |
数据区 | ||
命令字 (1字节) |
备用 (1字节) |
MP3序号 (2字节) |
||
0xFD | 0xXX 0xXX | 0x62 | 0xXX | 0xXX 0xXX |
举例:
获取序号为3的MP3信息
帧头 (1字节) |
数据区长度 (2字节) |
数据区 | ||
命令字 (1字节) |
备用 (1字节) |
MP3序号 (2字节) |
||
0xFD | 0x00 0x04 | 0x62 | 0x00 | 0x00 0x03 |
回传:
回传头 | 回传数据 | |||||||
备用 (1字节) |
最大序号 (2字节) |
MP3序号 (2字节) |
存储长度 (4字节) |
实际长度 (4字节) |
||||
0x53 | 0xXX | 0xXX 0xXX | 0xXX 0xXX | 0xXX 0xXX 0xXX 0xXX |
0xXX 0xXX 0xXX 0xXX |
帧头 (1字节) |
数据区长度 (2字节) |
数据区 | |||
命令字 (1字节) |
备用 (1字节) |
MP3序号 (2字节) |
循环播放次数 (2字节) |
||
0xFD | 0xXX 0xXX | 0x61 | 0xXX | 0xXX 0xXX | 0xXX 0xXX |
举例:
播报序号为8的用户MP3,循环播放5次
帧头 (1字节) |
数据区长度 (2字节) |
数据区 | |||
命令字 (1字节) |
备用 (1字节) |
MP3序号 (2字节) |
循环播放次数 (2字节) |
||
0xFD | 0x00 0x06 | 0x61 | 0x00 | 0x00 0x08 | 0x00 0x05 |
回传:
回传头 | 回传说明 |
0x4F | 单字节(播音完毕时回传,表示播音完毕) |
注意:
MP3的文件大小必须是2K的整数倍,如客户的MP3大小实际为8.5K,则需要先将该MP3大小补齐(0x00补齐)到10K,然后再进行烧录。
帧头 (1字节) |
数据区 长度 (2字节) |
数据区 | ||||||
命令字 (1字节) |
备用 (1字节) |
MP3 序号 (2字节) |
MP3 总长度 (4字节) |
第几包 (2字节) |
MP3 包长 (2字节) |
数据 (N字节) |
||
0xFD | 0xXX 0xXX | 0x63 | 0x00 | 0xXX 0xXX | 0xXX 0xXX 0xXX 0xXX | 0xXX 0xXX | 0xXX 0xXX | 0xXX…… |
举例:
假定“待更新MP3总长度”=10K字节,以下举例为更新指定的MP3的第1包(MP3序号=1;MP3总长度=10K字节;第几包=第1包;MP3包长=64字节;)
帧头 (1字节) |
数据区 长度 (2字节) |
数据区 | ||||||
命令字 (1字节) |
备用 (1字节) |
MP3 序号 (2字节) |
MP3 总长度 (4字节) |
第几包 (2字节) |
MP3 包长 (2字节) |
数据 (N字节) |
||
0xFD | 0xXX 0xXX | 0x63 | 0x00 | 0x00 0x01 (序号1) |
0x00 0x00 0x28 0x00 (10K) |
0x00 0x01 (第1包) |
0x00 0x40 (64字节) |
0xXX…… (64字节) |
注意:
1、“MP3总长度” 与 “MP3包长” 都必须为64、128、256、512、1024、2048字节中的一种;
2、“MP3总长度”必须大于“待更新MP3总长度”,且是“MP3包长” 的倍数;
3、若“MP3总长度”大于“MP3包长”,用户则需要构造多个数据包,多次调用本命令发送,直到待更新MP3全部发送完毕(每包命令的 “MP3总长度”“MP3包长” 必须保持不变);最后一包的“每包MP3数据”实际发送的数据必须与“MP3包长”一致(不足的以0x00补齐)。
回传:
回传头 | 回传说明 |
0x54 | 单字节(表示操作成功) |
0x55 | 多字节(表示操作失败,返回失败原因) |
操作失败回传说明:
回传头 | 回传参数 | 失败原因 |
0x55 | 0x01 | 更新的长度超过“占用的存储空间字节数” |
0x55 | 0x02 | 序号无效 |
0x55 | 0x03 | 新增的序号非最大序号加1 |
0x55 | 0x04 | 更新或新增的总长度非2048字节的倍数 |
0x55 | 0x05 | 新增的长度大于“芯片整体可用长度” |
0x55 | 0x21 | 其它原因 |
注意:
MP3的文件大小必须是2K的整数倍,如客户的MP3大小实际为8.5K,则需要先将该MP3大小补齐(0x00补齐)到10K,然后再进行烧录。
帧头 (1字节) |
数据区 长度 (2字节) |
数据区 | ||||||
命令字 (1字节) |
备用 (1字节) |
MP3 序号 (2字节) |
MP3 总长度 (4字节) |
第几包 (2字节) |
MP3 包长 (2字节) |
数据 (N字节) |
||
0xFD | 0xXX 0xXX | 0x64 | 0x00 | 0xXX 0xXX | 0xXX 0xXX 0xXX 0xXX | 0xXX 0xXX | 0xXX 0xXX | 0xXX…… |
举例:
假定“待新增MP3总长度”=10K字节,以下举例为新增指定的MP3的第1包(MP3序号=1;MP3总长度=10K字节;第几包=第1包;MP3包长=64字节;)
帧头 (1字节) |
数据区 长度 (2字节) |
数据区 | ||||||
命令字 (1字节) |
备用 (1字节) |
MP3 序号 (2字节) |
MP3 总长度 (4字节) |
第几包 (2字节) |
MP3 包长 (2字节) |
数据 (N字节) |
||
0xFD | 0xXX 0xXX | 0x64 | 0x00 | 0x00 0x01 (序号1) |
0x00 0x00 0x28 0x00 (10K) |
0x00 0x01 (第1包) |
0x00 0x40 (64字节) |
0xXX…… (64字节) |
注意:
1、MP3总长度” 与 “MP3包长” 都必须为64、128、256、512、1024、2048字节中的一种;
2、“MP3总长度”必须大于“待新增MP3总长度”,且是“MP3包长” 的倍数;
3、”新增MP3序号“必须等于芯片内”最大MP3序号+1“,如最大MP3序号为”5“,则要待新增的MP3序号为”6“;
4、若“MP3总长度”大于“MP3包长”,用户则需要构造多个数据包,多次调用本命令发送,直到待新增MP3全部发送完毕(每包命令的 “MP3总长度”“MP3包长” 必须保持不变);最后一包的“每包MP3数据”实际发送的数据必须与“MP3包长”一致(不足的以0x00补齐)。
回传:
回传头 | 回传说明 |
0x54 | 单字节(表示操作成功) |
0x55 | 多字节(表示操作失败,返回失败原因) |
操作失败回传说明:
回传头 | 回传参数 | 失败原因 |
0x55 | 0x01 | 更新的长度超过“占用的存储空间字节数” |
0x55 | 0x02 | 序号无效 |
0x55 | 0x03 | 新增的序号非最大序号加1 |
0x55 | 0x04 | 更新或新增的总长度非2048字节的倍数 |
0x55 | 0x05 | 新增的长度大于“芯片整体可用长度” |
0x55 | 0x21 | 其它原因 |
帧头(1字节) | 数据区长度(2字节) | 数据区 | ||
命令字(1字节) | ||||
0xFD | 0x00 0x01 | 0x66 |
回传:
回传头 | 回传说明 |
0x54 | 单字节(表示操作成功) |
注意:
当MP3单独播放时,可用该命令来控制MP3的音量大小(范围为:0 ~ 10级),默认MP3音量为5级。
帧头(1字节) | 数据区长度(2字节) | 数据区 | |
命令字(1字节) | 命令参数(1字节) | ||
0xFD | 0x00 0x02 | 0x67 | 0xXX |
举例:
设置MP3音量为6级
帧头(1字节) | 数据区长度(2字节) | 数据区 | |
命令字(1字节) | 命令参数(1字节) | ||
0xFD | 0x00 0x02 | 0x67 | 0x06 |
帧头(1字节) | 数据区长度(2字节) | 数据区 |
命令字(1字节) | ||
0xFD | 0x00 0x01 | 0x68 |
回传:
回传头 | MP3音量 |
0x56 | 0xXX |
注意:
1、当进行带背景音的语音合成时,可用该命令来控制MP3背景音的音量大小(范围为:0 ~ 10级),默认背景音音量为2级。
2、详见 《带背景音语音合成》章节,《播可带背景音文本》章节
帧头(1字节) | 数据区长度(2字节) | 数据区 | |
命令字(1字节) | 命令参数(1字节) | ||
0xFD | 0x00 0x02 | 0x69 | 0xXX |
举例:
设置背景音量为3级
帧头(1字节) | 数据区长度(2字节) | 数据区 | |
命令字(1字节) | 命令参数(1字节) | ||
0xFD | 0x00 0x02 | 0x69 | 0x03 |
帧头(1字节) | 数据区长度(2字节) | 数据区 |
命令字(1字节) | ||
0xFD | 0x00 0x01 | 0x6A |
回传:
回传头 | MP3音量 |
0x57 | 0xXX |