OE6388U语音合成模块(TTS) 让设备说话(机器人)SYN6658

您的硬件设备可以说话了吗!  研讨设备如何实现说话,变成机器人。

 

利用单片机一个IO口就可以控制OE6388模块发音, 单片机的串口资源有限,利用IO口模拟串口TXD 发送数据,实现对OE6388模块控制发音

OE6388语音合成模块 试听合成效果录音文件(复制下载地址到浏览器下载):http://115.com/file/dpa0ucyo#   

1 概述

OE6388中文语音合成模块是一款高性能中文语音合成模块,通过 UART或者SPI将用户想要合成的文字信息传送给模块进行合成并输出.主要面向中高端语音产品应用领域。该产品在语音合成方面采用大量的数据运算,使输出的声音更加流畅,更加自然。

  

模块型号

  封装名称

  封装描述

OE6388U

  SPI8_2.0mm

  UART串口通讯,单列直插8脚,尺寸18.6mm×15.8mm×4.5mm

OE6388S

  SPI8_2.0mm

  SPI通讯,单列直插8脚,尺寸18.6mm×15.8mm×4.5mm

2 应用领域

 ★ 车载 GPS调度终端  ★ 固定电话
 ★ 公交车语音报站器 ★ 税控机
 ★ 考勤机  ★ 信息机
 ★ 排队器 ★ 自动售货机
 ★ 气象预报机 ★ POS机
 ★ 智能仪器仪表 ★ 智能玩具
 ★ 语音导航

3 功能描述

中文语音合成模块的主要功能说明如下:
★ 模块支持任意中文文本的合成,采用GB2312、GBK、BIG5 和UNICODE 四种编码方式。模块支持英文字母的
合成,遇到英文单词时按字母方式发音。每次合成的文本量最多可达4K 字节。
★ 模块具有智能的文本分析算法,对常见的数值、电话号码、时间日期、度量衡符号等格式的文本,模块能够根
据内置的文本匹配规则进行正确的识别和处理。例如:“2008-12-21”读作 “二零零八年十二月二十一日”,
“10:36:28”读作 “十点三十六分二十八秒”,“28℃”读作“二十八摄氏度”,等等。模块可自动地对文本进
行分析,判别多音字的读法。例如:“当前工作的重中之重是要在重重困难中保证重庆市的重点工程的顺利进行,
坚决拒绝重复建设”,同一句中出现多个“重”字,模块都能够正确合成相应的读音 。有些汉字作为姓氏使用时,
会有特定的读法,模块也可以自动处理。如:“解晓东是解放以后出生的”,句中两个“解”字,前面一个读作“xiè”,
后面一个读作“ji?”。
★ 支持两男、两女、一个效果器和一个女童声共6个中文发音人
★ 内集成了77首声音提示音和14首和弦音乐
★ 支持合成文本、停止合成、暂停合成、恢复合成、状态查询、进入Power Down模式、唤醒等7 种控制命令。
★ 支持文本语速、语调、音量控制标记。
★ 查询模块管脚电平、通过读模块自动返回的工作状态字、发送查询命令获得模块工作状态的回传数据。
★ 两种通讯模式:UART通讯模式(TTL电平)或者SPI通讯模式。
★ 工作电压2.7---4.5V。

 

以下程序利用单片机一个IO模模拟串口实现TXD控制发音
#include
#include
#define TIMER1_ENABLE TL1=TH1; TR1=1;
#define TIMER1_DISABLE TR1=0;
/*******************************************************************************************/
unsigned char bdata sta;
sbit BIT =sta^0;
#define F_TM BIT
/*******************************************************************************************/
sbit TXD_DATA = P1^7; //模拟串口TXD引脚
void Trans_Data(unsigned char inch) //模拟串口发送一个字符
{
unsigned char ii;
ii=0;
F_TM=0;
TXD_DATA=0; //start bit
TIMER1_ENABLE; //启动TIMER1
while(!F_TM);
while(ii<8)
{
if(inch&1)
{
TXD_DATA = 1;
}
else
{
TXD_DATA = 0;
}
F_TM=0;
while(!F_TM);
ii++;
inch>>=1;
}
TXD_DATA=1; //stoop bit
F_TM=0;
while(!F_TM);
TIMER1_DISABLE; //停止TIMER1
}
void main(void)
{
/************************需要发送的文本**************************/
char code szText[] = {"[V5]欢迎使用深圳市海洋电子有限公司研制推出的OE6388语音合成模块。本演示程序
采用单片机IO口模拟串口控制语音合成模块发音。[V1]这是音量最小的效果。[V10]这是音量最大的效果。[V5] [t0]
这是语调最低的效果 [t10]这是语调最高的效果[t5] [m3]我是晓玲;[m51]我是尹小坚;[m52]我是易小强;[m53]
我是田蓓蓓;[m54]我是唐老鸭;[m55]我是小燕子;[m3]"};
unsigned int nLength = 0;
int i = 0;
/************************T1定时器的初始化****************************/
TMOD = 0x20;//用T1做定时器,工作在方式2
TR1=0; //在发送或接收才开始使用
TF1=0;
TH1=(256-192); //9600bps 就是 1000000/9600=104.167微秒
//执行的timer是104.167*22.1184/12= 192 (晶振22.1184Mhz)
TL1=TH1;
ET1=1;
EA=1;
/***********************发送过程********************************/
nLength = strlen(szText); // 需要发送文本的长度
nLength+=2;
Trans_Data (0xFD); // 向串口发送帧头标志
Trans_Data (nLength >>8); // 发送待合成文本长度的高字节
Trans_Data (nLength & 0xff); // 发送待合成文本长度的低字节
Trans_Data (0x01); // 发送文本合成命令字
Trans_Data (0x00); // 发送文本编码格式
for ( i = 0; i < nLength; i++ ) // 依次发送待合成的文本数据
{
Trans_Data (szText[i]);
}
/*************发送完后进入待机模式(电流2mA左右)****************/
Trans_Data (0xFD); // 向串口发送帧头标志
Trans_Data (0x00); // 发送文本长度的高字节
Trans_Data (0x01); // 发送文本长度的低字节
Trans_Data (0x22); // 发送待机命令字
while ( 1 ); // 死循环,阻止程序退出
}
void IntTimer1() interrupt 3
{
F_TM=1;
}

 

你可能感兴趣的:(电子)