”好,下一步就是生成MP3文件了,我们需要生成的MP3文件有:1、主人,我在;2、好的;3、已开风扇;4、已关风扇;5、主人再见,很高兴为您服务。
生成这些MP3文件我用的软件是朗读女,我们只要输入文字,它就会合成语音,选择想要的发音人,然后就可以直接生成MP3文件啦,非常好用。当然还有其它软件,比如灵云朗读软件、TTS语音合成工具、讯飞快读等,大家根据自己需要来选用。好,我们生成这些MP3文件后,把它们拷贝到TF卡里,然后把卡插到MP3播放模块上就可以了。到此为止,我们硬件上的准备已经就绪,接下来要做的就是要修改程序。到这一步要跟大家说一下控制这个MP3模块播放的指令和格式。举个例子,指定播放一个MP3文件的指令是这样的:7E FF 06 03 00 00 01 FE F7 EF,很长吧,我们从语音模块通过串口给MP3模块发这一串东西,MP3模块收到后就知道这是要播放第一个MP3文件了,在这里简单说一下每个字节表示的意思:7E是起始位,固定不变的,都要有它;FF这是这个模块的版本信息,也是固定不变的;06,指的是从上一字节开始,到后面的字节个数,也就是说,从FF开始,到06 03 00 00 01为止,一共有六个字节。然后这个03在这里,指的是指定曲目播放,也是固定不变的。00在这里指的是不需要反馈信息,如果是01,就是要反馈信息,这里的反馈信息指的是MP3播放模块反馈给语音识别模块的信息。到这个00 01,这里指的是歌曲序号,00是数据高字节,01是数据低字节,低字节01在这里表示的就是播放第一首歌曲。FE和F7指的是累加和校验,是用来给数据查错的,最后一位EF是结束位,当接收到这一位,就说明整个数据发送完毕了。在这里可能大家听得比较懵逼,它设置那么复杂的指令是为了提高数据传输时的准确性,大家听不懂也没关系,懂得有这么一回事就得了。在这里我们要关注的是03 00 00 01这四个字节,代表的就是指定播放第一首歌曲,不需要信息反馈。好,看下面的图片,MP3模块官方给出的例程,在这里我只给大家简单介绍3个函数,首先是这个串口发送函数,就是把我们上面的这一串东西发送出去的函数,你看它最先发送出去的是起始位的7E,然后通过一个自加循环,i++,按顺序的把这一串数据全部发送出去,后面EF就是结束位了。如下图,往下这个是求和校验函数,为什么要这个函数呢,它是怕数据在传输的过程中出错,经过这个函数处理,配合下一个要讲的函数,它就知道这个数据在传输的过程有没有出错。举个例子,比如原先我是想传00010001这个数据,结果数据在传输的过程中受到干扰,有一位数据受到影响由0变成1了,那在接收的那一端收到的数据可能就变成了00010011了,如果没有校验函数去校验,接收端就无法判断数据的准确性,这就很容易出现大问题,所以这个函数存在的意义就在这里了。这个函数在这里具体是怎么校验的就不深入给大家讲了,解释进去又是另一片天地了。再看到下边的图片,图片上面那个是Uart_SendCMD函数,我们一起结合下面main函数里的操作来看,如下图:先看下面的main函数,在main函数里首先初始化串口寄存器,然后执行Uart_SendCMD这个函数,这个函数的括号里有3个数据,0x03指的是播放指定的MP3文件,中间的0指的是无需反馈,0x01指的是播放第一首歌曲,这三个数据会分别赋值给上面这个函数括号里的CMD、feedback和dat,然后大家看到上边Uart_SendCMD函数里边,CMD放画红色横线1的位置,feedback放画红色横线2的位置,dat放画红色横线3的位置,而且这个dat分高字节和低字节的,这6个字节的数据是不是就是我们刚才讲过的从FF开始到01的这6个,是了吧,然后进行校验,最后就把这些数据通过串口给发送出去了。好,我们需要做的就是把这3个函数复制粘贴到语音识别模块的大程序中去,进行融合,如下图:然后我们在语音识别程序处理函数这里加上我们想要播放的音乐就得了,还记得我们刚才生成的MP3文件吗?我们按顺序放到TF卡里,第一首是“主人,我在”,第二首是“好的”,第三首是“已开风扇”,第四首是“已关风扇”,第五首是“主人再见,很高兴为您服务”。来啦,如下图:当我们说出一级口令,识别成功后我们就调用第一首音乐,把这个函数放过来,里面三个数据就是0x03,0,0x01,0x01在这里指的就是播放第一首歌曲嘛,就是播放“主人我在”。好,然后下面,如下图:打开继电器关闭继电器都是调用“好的”这个MP3文件,那我们把这个函数放过来,里面三个数据就是0x03,0,0x02。0x02在这里指的就是播放第二首歌曲。同理,看下面的图片:当我说出“打开风扇”时,调用的就是第三首歌曲,IO口给个高电平;当我说出“关闭风扇”时,调用的就是第四首歌曲,IO口给个低电平。看上面的图片,最后,当我说出拜拜时,IO口不用做任何操作,只发送串口数据,调用“主人再见,很高兴为您服务。
”这个MP3文件,一样的,我们把这个函数放过来,里面三个数据就是0x03,0,0x05,后面的这个0x05在这里指的就是播放第五首歌曲。好的,这就完成了编程的整个过程,我们将程序编译下载,就完成了给语音识别模块添加语音交互的这个功能,整个过程有点繁琐,也有点难度,需要大家有一定的基础,在这里主要是给大家粗略看一下开发的大致框架与过程,给大家提供一个思路,大家也可以根据自己的需求加入更好的创意和想法,还是挺好玩的一个作品。详细视频教程请移步到我的主页观看,本期图文教程就讲这么多,后面再给这个语音控制系统加一个无线传输数据、无线控制的功能,比如在家里,我想在一个房间通过语音识别,去控制另一个房间的灯的开关,那就需要一个无线模块去完成通讯了,我们先做一对一的,看进度可以的话再做一对多,不断完善丰富我们的系统。本期教程就到这里了,我们下期再见,拜拜。
(图片来源网络,侵删)
0 评论