在以往的语音播报应用中,个人多是采用串口控制型的MP3语音模块来实现,其特点是它用TF卡来存储待播放的语音片段,故存放语音片段的容量是充裕的。但它也有不足之处,即事先要录制或合成好待使用的语音片段,因而前期的准备工作是必不可少的且有些繁琐。
而Gravity: 中英文语音合成模块则是一款支持中文、英文及中英文混合的文字转语音合成的功能模块,并具有发音自然准确的特点。
该模块采用Gravity标准接口,可支持I2C与UART两种通信协议,且可以轻松兼容Arduino、micro:bit等主流开发板板。此外,它最大的优势在于即插即用,因为它自身已板载了喇叭和音频电路,故无需任何外接元件。在使用时,仅需简单的几行代码即可实现应用开发中的语音化处理,故能极大地降低语音处理的应用门槛。
该模块的技术规格为:
供电电压:3.3V~5V
工作电流:160mA
I2C地址:0x40
工作温度范围:-40℃~85℃
产品尺寸:42*32mm
该模块的主要应用场景为机器人对话、智能家居提示、环境检测数据播报等场景,面向的对象为创客、教育工作者及应用开发者。
该模块的外观如图1所示,该模块的器件布局见图2。

图1 模块外观

图2 器件布局
模块相关引脚的用途见图3所示,提供板载的模式开关可进行I2C和UART间的模式切换。

图3 引脚功能
在程序设计方面,它支持以Mind+、Arduino IDE、Python等进行开发,其中的Mind+是一种采用积木拼接式的编程模式,其界面见图4所示。

图4 程序搭建与测试
在开发板的选取方面,它常见的支持板型如图5所示。

图5 常见板型
以Arduino UNO开发板为例,其两种通信模式的连接方式如图6所示。

图6 连接方式
如果手头没有这类板卡,是否就无法进行使用了呢?
那也并非如此绝对,因为它毕竟是支持I2C或UART模式工作的,为此我们可以提供破解其指令协议来解决问题。
以播放"a b c d e f g"的发音为例,其播放指令为ss.speak(F("a b c d e f g"));
在使用开发板控制的情况下,它是通过内部的API函数来解析指令并予以执行。
在I2C模式下,发送该指令的波形解析见图7所示。

图7 波形解析
由此可知,出 I2C的从机地址是0x40外,其输出了一个“FD 00 0F 01 00”的数据序列,随后才是相应的输出字符序列。也就是说“FD 00 0F 01 00”是一个控制字,其后才是相应的输出内容。
随后,经反复测试又发现,在控制字中“OF”是一个数据量,指示着数据的多与少。该数值是发送的数据量+2。为"a b c d e f g"来说,其数据量为13,13+2=15=0x0F。
那么这种解析是否正确呢?
那就在串口模式下测试一下好了,由于串口模式下,要求波特率为115200,故需依此来设置。
为了发出“A”的读音,可按图8所示来测试。

图8 读音测试
经测试,发音正确,说明该解析是正确的。此外,我们还可以播放中文的内容。
由此,我们就可以完全摆脱开发板选型的制约,利用其指令协议来自如的开发和使用。
测试演示:
我要赚赏金
