模块很便宜,品牌叫天龙,在淘宝上搜来的。带2首背景曲,15个音效,女声发音。
tts_2.jpg (96.67 KB, 下载次数: 2)
下载附件
2012-5-11 12:06 上传
程序实际跑通的。BUSY信号送到RB0, RST连接到RD7。串口连接RD4/RD5
//USART2,连接汉语语音合成芯片组件TTS。RD4设为TX2(对语音芯片的RX),RD5设为RX2,
//RB0连接BUSY
//RD7作为模块RESET。开启U2_RC中断响应,以便重启TTS之后不被吊死
#include <P18f46j11.h>
#include <usart.h>
#include <timers.h>
#include <stdlib.h>
#include <delays.h>
#define LED1 LATDbits.LATD2
//以下预先声明各个函数
void main (void);
void InterruptHandlerHigh (void);
unsigned char u2_rc;
//***************主函数*****************
void main()
{
unsigned char i,j;
//**************USART2 INIT**********************
EECON2=0x55; //修改重定位锁定标志前的必须序列
EECON2=0xAA;
PPSCONbits.IOLOCK=0; //打开重定向锁
RPINR16=22; //RX2赋予RP22(RD5)
RPOR21=5; ` //TX2连接到RP21(RD4)
EECON2=0x55; //修改重定位锁定标志前的必须序列
EECON2=0xAA;
PPSCONbits.IOLOCK=1; //关闭重定向锁
Close2USART(); //关闭串口
//下句打开串口2,收中断,高速,9600
Open2USART( USART_TX_INT_OFF & USART_RX_INT_ON & USART_ASYNCH_MODE &
USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_LOW,51 );
RCSTA2bits.ADDEN=0; //消除9位通信的地址相关设置
BAUDCON2bits.ABDOVF=0; //将波特率计满指示清0
BAUDCON2bits.RXDTP=0; //将空闲反相关闭
BAUDCON2bits.BRG16=1; //选择16位波特率
ANCON1bits.PCFG12=1; //RB0(AN12)=IO
TRISBbits.TRISB0=1; //
//****************INTERRUPT INIT*******************
INTCONbits.PEIE=1;
INTCONbits.GIE=1;
//**************************IO INIT********************
TRISDbits.TRISD2=0; //RD2 led output
TRISDbits.TRISD7=0; //RD7 TTS模块RESET
//*********TTS RESET**************************
LATDbits.LATD7=0;
Delay1KTCYx(150); //减慢发送速度而设
Delay1KTCYx(150); //减慢发送速度而设
LATDbits.LATD7=1;
Delay1KTCYx(150); //减慢发送速度而设
while (!TXSTA2bits.TRMT);
putrs2USART("<N>1"); ////have a try
Delay1KTCYx(100); //减慢发送速度而设
while (!TXSTA2bits.TRMT);
putrs2USART("<W>1"); ////have a try
Delay1KTCYx(100); //减慢发送速度而设
while (!TXSTA2bits.TRMT);
putrs2USART("<X>1"); ////have a try
Delay1KTCYx(100); //减慢发送速度而设
while (!TXSTA2bits.TRMT);
putrs2USART("<M>0"); ////have a try
Delay1KTCYx(100); //减慢发送速度而设
while (!TXSTA2bits.TRMT);
putrs2USART("<G>x18 ,老婆大人,你好!x13");
Delay1KTCYx(100); //减慢发送速度而设
putrs2USART("<I>2"); ////have a try
Delay1KTCYx(100); //减慢发送速度而设
while (!TXSTA2bits.TRMT);
putrs2USART("<G>x11 你来啦!今天天气真好 x12"); //a try
while (!TXSTA2bits.TRMT);
putrs2USART("x14 请你吃西瓜,你先吃大边,你再吃小边 x15"); //a try
while (!TXSTA2bits.TRMT);
putrs2USART("x16 有时间咱们去人人乐超市吧? x17"); //a try
//**************************主循环************************
while(1)
{
Delay1KTCYx(100); //减慢发送速度而设
if (PORTBbits.RB0)
LED1=1; //测试指示
else
LED1=0; //测试指示
//到达MAIN最后部分
}
}
//----------------------------------------------------------------------------
// High priority interrupt vector
#pragma code InterruptVectorHigh = 0x08
void
InterruptVectorHigh (void)
{
_asm
goto InterruptHandlerHigh //jump to interrupt routine
_endasm
}
//----------------------------------------------------------------------------
// High priority interrupt routine
#pragma code
#pragma interrupt InterruptHandlerHigh
void InterruptHandlerHigh ()
{
if (INTCONbits.TMR0IF)
{ //check for TMR0 overflow
INTCONbits.TMR0IF = 0; //clear interrupt flag
}
else if (PIR3bits.RC2IF)
{
u2_rc = RCREG2; //若USART2收中断,以读出数据方式清除标志
}
}
我从淘宝上搜到了嵌入芯片的报价。有个“4240”还是什么很贵,另外有家抛“4040”型号的,便宜,只有几片。
这东西现在还无法达到语素合成而且带情绪表达吧?我买的这个,感觉就是建立一个语音库,再建立二级汉字库的索引,语音之间间隔比较大,就显出字字都顿一下,当然就很僵硬了。
刚看了下4240,以前不知道科大讯飞还有这个玩意儿,不知道效果怎么样,不过可以肯定的是,准确表达语气情绪是不可能做到的。另外我刚看到这个4240的时候以为他是个单芯片解决方案,看了板子后面才知道还有个flash在后面。单片解决方案你看下syn6288
我卖的这个是f3p6
一周热门 更多>