syn6288是一种常用的简单语音合成模块,以下是arduino的调用代码。
Syn6288.h
#ifndef Syn6288_h #define Syn6288_h #include <inttypes.h> #include <avr/io.h> #include <avr/pgmspace.h> #include <util/delay.h> #include <Arduino.h> #include <stddef.h> #define HEADLEN 5 //#define LEN_OFFSET 2 //#define uint8_t unsigned int class Syn6288 { public: //private: uint8_t music; byte TEXTLEN; uint8_t pi; void play(uint8_t *text,uint8_t TEXTLEN,uint8_t music); //void play(uint8_t *text,uint8_t music); void Slaveboudset(uint16_t boudr); void stop(); void restore(); void inquire(); void Pause(); void sleep(); }; #endif
#include <inttypes.h> #include <avr/io.h> #include <avr/pgmspace.h> #include <util/delay.h> #include "Syn6288.h" #include <Arduino.h> #include <stdio.h> uint8_t head[5] = {0xfd,0x00,0x00,0x01,0x00};//合成播放命令 uint16_t boud[5]={0xFD,0x00,0x03,0x31,0x00}; //设置波特率 /*发送文本合成命令,music为背景音乐设置*/ void Syn6288::play(uint8_t *text,uint8_t TEXTLEN,uint8_t music) { pi=0; delay(100); head[2]=TEXTLEN+3; switch(music) { case 0: head[4]=0x01;break; case 1: head[4]=0x09;break; case 2: head[4]=0x11;break; case 3: head[4]=0x19;break; case 4: head[4]=0x21;break; case 5: head[4]=0x29;break; case 6: head[4]=0x31;break; case 7: head[4]=0x39;break; case 8: head[4]=0x41;break; case 9: head[4]=0x49;break; case 10: head[4]=0x51;break; case 11: head[4]=0x59;break; case 12: head[4]=0x61;break; case 13: head[4]=0x69;break; case 14: head[4]=0x71;break; case 15: head[4]=0x79;break; } for(int i=0;i<5;i++) { pi^=head[i]; // Serial.print(head[i],BYTE); Serial.write(head[i]); delay(2); } for(int j=0;j<TEXTLEN;j++) { pi^=text[j]; // Serial.print(text[j],BYTE); Serial.write(text[j]); delay(2); } Serial.write(pi); delay(300*TEXTLEN); } void Syn6288::Slaveboudset(uint16_t boudr) //波特率设置 { uint8_t p; p=0; switch(boudr) { case 9600: boud[4]=0x00; break; case 19200: boud[4]=0x01; break; } for(int z=0;z<HEADLEN;z++) { p^=boud[z]; Serial.write(boud[z]); delay(2); } Serial.write(p); p=0; for(int z=0;z<HEADLEN;z++) { p^=boud[z]; Serial.write(boud[z]); delay(2); } Serial.write(p); delay(200); }以上两个文件放到arduino目录的库目录,您的Arduino安装目录\libraries\Syn6288 目录下。
调用库进行语音合成
#include "Syn6288.h" Syn6288 syn; uint8_t text1[] = {0xbb,0xb6,0xd3,0xad,0xb9,0xe2,0xc1,0xd9}; //欢迎光临 void setup() { Serial.begin(9600); } void loop() { syn.play(text1, sizeof(text1), 1); delay(10000); }
GBK汉字的十六进制转换
http://www.dwenzhao.cn/cal/php/hexhanzi.php