100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > python 科大讯飞XFS5152CE语音合成芯片串口协议测试 机器人说话so easy

python 科大讯飞XFS5152CE语音合成芯片串口协议测试 机器人说话so easy

时间:2020-10-09 05:35:31

相关推荐

python 科大讯飞XFS5152CE语音合成芯片串口协议测试 机器人说话so easy

忙中偷闲,搞个机器人语音交互模块备料,接好串口,插上耳机

打开文档

python代码

import structimport arrayfrom event import *class XFSCommand():#帧头1字节=0xfd 数据长度2字节=n数据(命令字 参数 文本)=n个字节XFS_H=0xFDXFS_COMS={"play": 0x01,"stop":0x02,"pause": 0x03,"resume": 0x04,"state": 0x21,"sleep": 0x88,"weakup": 0xFF,"sendtobuf":0x31,#4K,共分 16 个区,区参数X=(0-15),每个区的空间为 256 字节。 参数后直接跟文本(缓存时没有编码设置)"playbuf":0x32,#参数字节高4是播放次数,低4位是文本编码}XFS_BACK = {"init ok": 0x4A,"com ok": 0x41,"com err": 0x45,"busy": 0x4E,"notbusy": 0x4F}txt_encode_params={"gb2312":0x00,"gbk":0x01,"big5":0x02,"unicode":0x03}def __init__(self):passdef print_cmd_hex(self,cmd):dat = "".join(map(lambda x: (' ' if len(hex(x)) >= 4 else ' 0') + hex(x)[2:], cmd))print(dat)def cmd_play(self,_str,_encode):pd = array.array('B')arraydata = _str.encode(_encode)datalen=len(arraydata)if(datalen>1024*4):#超过4K出错return pdpassreallen=datalen+2pd.append(self.XFS_H)#framehead#length 2 bytesif(reallen>0xff):pd.append(reallen>>8)pd.append(reallen&0xff)else:pd.append(0x00)pd.append(reallen)pd.append(self.XFS_COMS["play"])#cmdpd.append(self.txt_encode_params[_encode])#param#txtdatafor i in range(datalen):pd.append(arraydata[i])return pdpassdef cmd_stop(self):return self.cmd_1_byte( "stop")def cmd_pause(self):return self.cmd_1_byte( "pause")def cmd_resume(self):return self.cmd_1_byte( "resume")def cmd_state(self):return self.cmd_1_byte( "state")def cmd_sleep(self):return self.cmd_1_byte( "sleep")def cmd_weakup(self):return self.cmd_1_byte( "weakup")def cmd_1_byte(self,_n):pd = array.array('B')pd.append(self.XFS_H)pd.append(0x00)pd.append(0x01)pd.append(self.XFS_COMS[_n])return pdpass'''帧头 1 Byte 定义为十六进制“0xFD”数据长度 2 Bytes 用两个字节表示,高字节在前,低字节在后数据区 小于 4k + 2 Bytes 命令字和命令参数,长度和“数据区长度”一致'''#play("科大讯飞",gb2312) [0xFD,0x00, 0x0A, 0x01, 0x00 ,0xBF, 0xC6, 0xB4, 0xF3, 0xD1, 0xB6, 0xB7, 0xC9]# FD 00 0A 01 00 BF C6 B4 F3 D1 B6 B7 C9#big5是繁体字编码,如果文本是简体,需要先转换为繁体#科大訊飛# FD 00 0A 01 02 ac ec a4 6a b0 54 ad b8#stop() [0xFD, 0x00, 0x01, 0x02]'''语音识别返回结果帧头 1 Byte 定义为十六进制“0xFC”数据长度 2 Bytes 用两个字节表示,高字节在前,低字节在后数据区 命令字1字节 识别结果命令字节 1234 为 成功 超时 无结果 错误'''if __name__ == '__main__':#a=u'科大讯飞'print(a.encode())utf8_a=bytearray(a,"utf-8")gb2312_a=a.encode("gb2312")gbk_a = a.encode("gbk")print(utf8_a)print(gb2312_a)print(gbk_a)#big5_a = a.encode('big5')#print(unicode(s, 'big5'))#print(big5_a)print("-------------")cmdObj = XFSCommand()#print(cmdObj.cmd_1_byte("pause"))#print(cmdObj.XFS_COMS["pause"])#print(cmdObj.cmd_pause())cmdObj.print_cmd_hex(cmdObj.cmd_pause())cmdObj.print_cmd_hex(cmdObj.cmd_play("科大讯飞", "gb2312"))cmdObj.print_cmd_hex(cmdObj.cmd_play("科大訊飛", "big5"))#import timewhile 1:time.sleep(1)print(1)

输出与文档示例相同

-------------fd 00 01 03fd 00 0a 01 00 bf c6 b4 f3 d1 b6 b7 c9fd 00 0a 01 02 ac ec a4 6a b0 54 ad b8

这个模块用起来很方便,有了它机器人说话就so easy了。

文档有颜色标注错误的地方,需注意一下,不过无伤大雅

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。