⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 t2s (utf8-unicode).h

📁 it is about embeded system
💻 H
字号:
/***************************************************  Copyright(C), 2008 , JUST  File name: t2s.h  Author: StevenZ    Version: 1.0     Date: 08/09/06  Description: XF-S4240语音合成芯片的接口函数    	   ps:此为UNICODE版  History:	08/06/07  开始些基本接口	08/06/15  测试 	08/07/22  改写成UNICODE版,及自动打开关闭设备***************************************************/#ifndef _T2S_H#define _T2S_H#include<stdio.h>#include<stdlib.h>#include<fcntl.h>#include<unistd.h>#include<string.h>#define T2S_DEVICE_NAME "/dev/xf-s4240"#define GB		1#define GBK		2#define BIG5		3#define UNICODE		4#define MALE           	0#define FEMALE		1#define DEFAULT 	255#define STAY_O          254#define MAX_TEXT 1024struct _text_ {	char str[MAX_TEXT];
	int size;};/***************************************************  Function: T2S_t2s  Description:开始语音合成  Input: s--需要语音合成的内容的指针        ps:如果连续执行两个此函数,第二个会将第一个中断,请自己延迟  Output: 无  Return:void***************************************************/void T2S_t2s(char *s);/***************************************************  Function: T2S_pause  Description:暂停当前语音合成  Input: 无  Output: 无  Return:void***************************************************/void T2S_pause(void);/***************************************************  Function: T2S_continue  Description:继续当前语音合成  Input: 无  Output: 无  Return:void***************************************************/void T2S_contiue(void);/***************************************************  Function: T2S_stop  Description:结束当前语音合成  Input: 无  Output: 无  Return:void***************************************************/void T2S_stop(void);/***************************************************  Function: T2S_option   Description:设置语音合成的参数  Input:  voice-男声或女声,MALE/FEMALE/STAY_O/DEFAULT        volume-音量,0~10/STAY_O/DEFAULT        speed-语速,0~10/STAY_O/DEFAULT  Output: 无  Return:void***************************************************/void T2S_option(int voice,int volume,int speed);void text_init(struct _text_ *src)
{
	src->str[0]='\0';
	src->size=0;
}void text_input(struct _text_ *src,char s[])
{
	int i=0;
	while(s[i])	{		src->str[i]=s[i];
		i++;
	}	src->size=i;}void utf8_to_unicode(struct _text_ *src){	int srcptr=0;	int desptr=0; 	int i,j;	int srcsize=src->size;	struct _text_ des;		if (src->size<=0) return;	text_init(&des);	for(j=0;j<srcsize;j++)	{		char temp=src->str[srcptr];		if ((temp&0x80)==0)		{    /*begin with 0*/			des.str[desptr]=src->str[srcptr];			desptr++;
			des.str[desptr]=0x00;
			desptr++;
			des.size+=2;
			srcptr++;		}		else if((temp&0xE0)==0xC0)		    {  /*begin with 110*/			des.str[desptr]=src->str[srcptr];			desptr++;			srcptr++;			des.str[desptr]=src->str[srcptr];			desptr++;			srcptr++;			des.size+=2;		    }		    else if((temp&0xF0)==0xE0)			{  /*begin with 1110*/				des.str[desptr]&=0x0;				des.str[desptr+1]&=0x0;				des.str[desptr+1]|=(src->str[srcptr]&0x1F)<<4;				des.str[desptr+1]|=(src->str[srcptr+1]&0x3C)>>2;				des.str[desptr]|=(src->str[srcptr+1]&0x03)<<6;				des.str[desptr]|=(src->str[srcptr+2]&0x3F);
				des.size+=2;
				desptr+=2;
				srcptr+=3;
				j+=2;			}	}	src->size=des.size;
	for(i=0;i<src->size;i++)
	{
		src->str[i]=des.str[i];
	}	src->str[i]='\0';}void move(struct _text_ *src,int n)
{
	int i;
	i=src->size;
	for(;i>=0;i--)
	{
		src->str[i+n]=src->str[i];
	}
}
int add_head(struct _text_ *src,int flag)
{	int sz=src->size;	if(sz>1020) 		return 0;	move(src,5);	src->str[0]=0xFD;	sz+=2;	src->str[1]=(char)((sz&0xff00)>>8);	src->str[2]=(char)sz;	src->str[3]=0x01;	switch(flag)	{	  case GB  	:src->str[4]=0x0;	            	break;  	  case GBK 	:src->str[4]=0x1;	            	break;	  case BIG5  	:src->str[4]=0x2;	            	break;	  case UNICODE :src->str[4]=0x3;	            	break;	  default:   return 0;	}	src->size+=5;}/*	api*/int T2S_start(int *T2S_fd){/*t2s must starts with it*/	*T2S_fd=open(T2S_DEVICE_NAME,O_RDWR);	printf("T2S_fd=%d\n",*T2S_fd);	if(*T2S_fd==-1)	{		printf("T2S start error!\n");		return 0;	}	return 1;}void T2S_end(int *T2S_fd){/*t2s must ends with it*/	close(*T2S_fd);}int T2S_t2s(char *s){/*t2s without holding*/	//int n;	int T2S_fd;	struct _text_ t;	text_init(&t);	text_input(&t,s);	utf8_to_unicode(&t);		if(!add_head(&t,UNICODE)) 	{			printf("add_head() ERROR\n");		exit(1);	}  	/*for(n=0;n<t.size;n++)	{		printf("0x%x\n",t.str[n]);	}*/	T2S_start(&T2S_fd);	write(T2S_fd,t.str,t.size);	T2S_end(&T2S_fd);}

int T2S_t2s_hold(char *s)
{/*t2s with hold,wait for the last t2s ends*/	int T2S_fd;
	struct _text_ t;
	text_init(&t);
	text_input(&t,s);	utf8_to_unicode(&t);
	if(!add_head(&t,UNICODE)) 	{			printf("add_head() ERROR\n");		exit(1);	}
	for(;;)
	{
		if(!T2S_IsBusy())
			break;
	}	T2S_start(&T2S_fd);
	write(T2S_fd,t.str,t.size);	T2S_end(&T2S_fd);
}void T2S_pause(void){/*pause t2s*/	int T2S_fd;	char cmd[]={0xFD,0x00,0x01,0x03};	T2S_start(&T2S_fd);	write(T2S_fd,cmd,sizeof(cmd));	T2S_end(&T2S_fd);	}void T2S_contiue(void){/*continue t2s*/	int T2S_fd;	char cmd[]={0xFD,0x00,0x01,0x04};	T2S_start(&T2S_fd);	write(T2S_fd,cmd,sizeof(cmd));	T2S_end(&T2S_fd);		}void T2S_stop(void){/*stop t2s*/	int T2S_fd;	char cmd[]={0xFD,0x00,0x01,0x02};	T2S_start(&T2S_fd);	write(T2S_fd,cmd,sizeof(cmd));	T2S_end(&T2S_fd);		}int T2S_IsBusy(void){/*if t2s is processing,return 1,else return 0*/	char cmd[]={0xFD,0x00,0x01,0x21};	char c;	int T2S_fd;	T2S_start(&T2S_fd);	write(T2S_fd,cmd,sizeof(cmd));		read(T2S_fd,&c,1);	if(c==0x4E)	{		T2S_end(&T2S_fd);			return 1;		sleep(1);	}	T2S_end(&T2S_fd);		return 0;}void T2S_option(int voice,int volume,int speed){/** voice 		MALE/FEMALE/STAY_O/DEFAULT* volume 	int 0~10/STAY_O/DEFAULT* speed 	  	int 0~10/STAY_O/DEFAULT* DEFAULT 	default option* STAY_O		last option*/	int T2S_fd;	char s[20];	struct _text_ t;	s[0]='\0';	switch(voice)	{		case MALE:strcat(s,"[m4]");break;		case FEMALE:strcat(s,"[m3]");break;		case DEFAULT:strcat(s,"[m3]");break;		case STAY_O:		default:	}	switch(volume)	{		case 0:strcat(s,"[v0]");break;
		case 1:strcat(s,"[v1]");break;
		case 2:strcat(s,"[v2]");break;
		case 3:strcat(s,"[v3]");break;
		case 4:strcat(s,"[v4]");break;
		case 5:strcat(s,"[v5]");break;
		case 6:strcat(s,"[v6]");break;
		case 7:strcat(s,"[v7]");break;
		case 8:strcat(s,"[v8]");break;
		case 9:strcat(s,"[v9]");break;
		case 10:strcat(s,"[v10]");break;
		case DEFAULT:strcat(s,"[v5]");break;
		case STAY_O:		default:	}		switch(speed)	{		case 0:strcat(s,"[s0]");break;		case 1:strcat(s,"[s1]");break;		case 2:strcat(s,"[s2]");break;		case 3:strcat(s,"[s3]");break;		case 4:strcat(s,"[s4]");break;		case 5:strcat(s,"[s5]");break;		case 6:strcat(s,"[s6]");break;		case 7:strcat(s,"[s7]");break;		case 8:strcat(s,"[s8]");break;		case 9:strcat(s,"[s9]");break;		case 10:strcat(s,"[s10]");break;		case DEFAULT:strcat(s,"[s5]");break;		case STAY_O:		default:	}	text_init(&t);
	text_input(&t,s);
	
	if(!add_head(&t,GB)) 
	{	
		printf("ERROR\n");
		exit(1);
	}
	T2S_start(&T2S_fd);
	write(T2S_fd,t.str,t.size);	T2S_end(&T2S_fd);					
}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -