Arduino 语音交互 TTS语音合成(一)
大家好,我是兔子。嵌入式工程师。专业角度带你玩转Arduino.这次教大家用Arduino来做语音交互。准备分几个部分写。今天就先第一部分,控制TTS语音合成模块,来播放中文语音。1.什么是TTSTTS是TextToSpeech的缩写,即“从文本到语音”,是人机对话的一部分,让机器能够说话。简单说,就是通过编写代码,让机器能把文字转换成对应的声音播放出来。有好多种方式可以实现,我们这次就简单点,通过TTS语音合成模块来实现。2.TTS语音合成模块我们使用的是TTS语音合成模块,是SYN6288。通过串口收发指令,将合成好的声音通过喇叭或者耳机播放出来。先给模块来个正面:SYN6288TTS语音合成模块正面模块背面:SYN6288TTS语音合成模块背面语音合成模块文本转语音TTS真人发音SYN6288兼容Arduino3.接线模块供电是2.1V~5.5V之间的宽电压,我们就给模块供3.3V即可。由于是串口传输指令数据,正好ArduinoUNO上有1个串口。SYN6288TXD->Arduino0(管脚不可调整为其他管脚,烧写程序时需要将线断开烧写)SYN6288RXD->Arduino1(管脚不可调整为其他管脚,烧写程序时需要将线断开烧写)SYN6288VCC->Arduino3.3VSYN6288GND->ArduinoGND由于ArduinoUNO烧写程序也是通过串口烧写,故烧写程序时,需要将模块的4根线取下烧写。否则会导致烧写程序失败。1)耳机接线方式如下,接好上面四根线,然后将耳机接入耳机口。TTS语音合成模块耳机播放声音2)喇叭接线方式,需要将喇叭的两根线,接到模块的BIN0和BP0上。由于喇叭不分正负极,两个管脚可以任意接。由于兔子买的喇叭质量不好,播放声音破音了。所以就用的耳机来展示效果。TTS语音合成模块喇叭播放声音4.程序程序是,通过串口,将指令及语音数据发送给TTS语言合成模块。再通过耳机将合成好的声音播放出来。效果:让ArduinoUNO通过语音合成模块,播放中文语音"欢迎光临,兔子先生"/*程序TTS语言合成模块SYN6288程序作者:兔子效果:让ArduinoUNO通过语音合成模块,播放中文语音"欢迎光临,兔子先生"时间:19.05.19联系方式:18910297350wechat:xw2816960CONNECTIONS:SYN6288TXD->Arduino0(管脚不可调整为其他管脚,烧写程序时需要将线断开烧写)SYN6288RXD->Arduino1(管脚不可调整为其他管脚,烧写程序时需要将线断开烧写)SYN6288VCC->Arduino3.3VSYN6288GND->ArduinoGND-----------------------------------------*/charChinese_GB2312[50]={0xBB,0xB6,0xD3,0xAD,0xB9,0xE2,0xC1,0xD9,0xA3,0xAC,0xCD,0xC3,0xD7,0xD3,0xCF,0xC8,0xC9,0xFA,0x00};//欢迎光临,兔子先生(中文编码)voidSYN_FrameInfo(uint8_tMusic,uint8_t*HZdata);voidsetup(){//putyoursetupcodehere,torunonce:Serial.begin(9600);SYN_FrameInfo(0,Chinese_GB2312);}voidloop(){//putyourmaincodehere,torunrepeatedly:}/************************************************************名称:YS-SYN6288文本合成函数*功能:发送合成文本到SYN6288芯片进行合成播放*入口参数:Music(背景音乐选择):0无背景音乐。1-15:相关背景音乐*HZdata:文本指针变量*出口参数:*说明:本函数只用于文本合成,具备背景音乐选择。默认波特率9600bps。*调用方法:**********************************************************/voidSYN_FrameInfo(uint8_tMusic,uint8_t*HZdata){/****************需要发送的文本**********************************/unsignedcharFrame_Info[50];unsignedcharHZ_Length;unsignedcharecc=0;//定义校验字节unsignedinti=0;HZ_Length=strlen(HZdata);//需要发送文本的长度/*****************帧固定配置信息**************************************/Frame_Info[0]=0xFD;//构造帧头FDFrame_Info[1]=0x00;//构造数据区长度的高字节Frame_Info[2]=HZ_Length+3;//构造数据区长度的低字节Frame_Info[3]=0x01;//构造命令字:合成播放命令Frame_Info[4]=0x00|MusicArduino语音模块
外观
概述
SpeechSynthesizerBee采用的SYN6288中文语音合成芯片是一款性价比高,语音合成更自然,面向中高端应用领域的语音合成芯片。SYN6288通过异步串口接收待合成的文本,实现文本到声音(TTS)的转换。SpeechSynthesizerBee语音合成模块采用xbee兼容接口,可以很方便的嵌入到我们开发的Arduino扩展板V5、xbee扩展板等产品中。功能特点
支持GB2312、GBK、BIG5和UNICODE内码格式的文本;
清晰、自然、准确的中文语音合成效果;可合成任意的中文文本,支持英文字母的合成;
具有智能的文本分析处理算法,可正确识别数值、号码、时间日期及常用的度量衡符号;
具备很强的多音字处理和中文姓氏处理能力;
支持多种文本控制标记,提升文本处理的正确率;
每次合成的文本量最多可达200字节;
支持多种控制命令,包括:合成、停止、暂停合成、继续合成、改变波特率等;
支持休眠功能,在休眠状态下可降低功耗;支持多种方式查询芯片工作状态;
支持串行数据通讯接口,支持三种通讯波特率:9600bps,19200bps、38400bps;
支持16级音量调整;播放文本的前景音量和播放背景音乐的背景音量可分开控制;
可通过发送控制标记调节词语语速,支持6级词语语速调整;
芯片内固化有多首和弦音乐、提示音效和针对某些行业领域的常见语音提示音;
内部集成19首声音提示音,23首和弦提示音,15首背景音乐;
最终产品提供SSOP贴片封装形式;体积业内最小;
芯片各项指标均满足室外严酷环境下的应用;
技术指标
1.供电电压3.3-5V
2.提供TTL串口,默认波特率9600
3.提供喇叭接口
4.提供3.5耳机插孔
模块引脚定义
SYN6288芯片手册
SYN6288芯片手册
GB2312国标码检索表
汉字十六进制转换工具
Arduino实验代码如下:
/*说明:“0xB3,0xC9”代表一个字“成”,以此类推。*/#include"Syn6288.h"Syn6288syn;uint8_ttext1[]={0xB3,0xC9,0xB6,0xBC,0xBC,0xAB,0xC8,0xA4,0xBF,0xC6,0xBC,0xBC,0xD3,0xD0,0xCF,0xDE,0xB9,0xAB,0xCB,0xBE};//成都极趣科技有限公司uint8_ttext2[]={0x77,0x77,0x77,0x2E,0x64,0x66,0x72,0x6F,0x62,0x6F,0x74,0x2E,0x63,0x6F,0x6D,0x2E,0x63,0x6E};//www.dfrobot.com.cnuint8_ttext3[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};//0,1,2,3,4,5,6,7,8,9voidsetup(){Serial.begin(9600);//syn.Slaveboudset(19200);//修改波特率//Serial.begin(19200);}voidloop(){syn.play(text1,sizeof(text1),1);//合成text1,背景音乐1syn.play(text2,sizeof(text2),2);//合成text2,背景音乐2syn.play(text3,sizeof(text3),3);//合成text3,背景音乐3}本文整理于DFRobotwiki