Megaphone_TTS.c 5.1 KB
#include <stdio.h>
#include <string.h>
#include <pthread.h>
#include <malloc.h>

#include "Megaphone_TTS.h"
#include "tts_sample.h"
#include "JZsdkLib.h"
#include "tts_sample.h"

static int g_Megaphone_TTS_tone = 0x01;
static int g_Megaphone_TTS_volue = 100;
static int g_Megaphone_TTS_speed = 0x32;

int tts_add = 0x00;

struct t_Megaphone_tts_param
{
	int tts_tone;		//喊话器音色
	int tts_volume;		//tts原音量
	int tts_speed;		//喊话速度
	int tts_ReplyFlag;   //是否需要回复
	char ttsdata[1024]; //tts数据
};


int TTS_Compound_flag=0;//默认是0     //TTS 标志



static void *TTS_flie(void *arg);
static int TTS(int name,int volume,int speed,int len,char *data, int ReplyFlag);//文本播放UTF-8,name发音人默认name==1;volume合成音量默认合成音量100;speed语速默认speed==50;argv文本内容。

/*********
 * 
 *  TTS设置音色
 * 
 * *********/
T_JZsdkReturnCode TTS_SetTone(int tone)
{
	switch (tone)
	{
		case 0x01:
			printf("tts设置为 中文女声\n");
		break;
		
		case 0x02:
			printf("tts设置为 中文男声\n");
		break;
		
		case 0x11:
			printf("tts设置为 英文女声\n");
		break;
		
		case 0x12:
			printf("tts设置为 英文男声\n");
		break;
		
		case 0x31:
        	printf("tts设置为 东北话\n");
        break;
            
		case 0x32:
			printf("tts设置为 四川话\n");
			break;
				
		case 0x33:
			printf("tts设置为 河南话\n");
			break;
				
		case 0x34:
			printf("tts设置为 湖南话\n");
			break;
				
		case 0x35:
			printf("tts设置为 陕西话\n");
			break;
				
		case 0x36:
			printf("tts设置为 广东话\n");
			break;
				
		default:
			printf("无效的tts设置\n");
			return JZ_ERRORCODE_TTS_INVALID_TONE;
        break;
	}	
		
	g_Megaphone_TTS_tone = tone;
	return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/*********
 * 
 *  TTS设置语速
 * 
 * *********/
T_JZsdkReturnCode TTS_SetSpeed(int Speed)
{
	if ( (Speed < 0) || (Speed > 100) )
	{
		printf("TTS语速超出范围\n");
		return JZ_ERRORCODE_TTS_INVALID_SPEED;
	}
	
	printf("设置tts语速倍率为%d \n",Speed);
	g_Megaphone_TTS_speed = Speed;
	return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;

}

T_JZsdkReturnCode TTS_SetAppendTone(int tone)
{
	if (tone == 0x00 || tone == 0x01 || tone == 0x02)
	{
		tts_add = tone;

		return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 
	}

	else
	{
		tts_add = 0x00;

		return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; 
	}	
}

/*********
 * 
 *  TTS播放
 * 
 * *********/
int TTS_Play(int len, char *data,  int ReplyFlag)
{
	return TTS(g_Megaphone_TTS_tone, g_Megaphone_TTS_volue, g_Megaphone_TTS_speed, len, data, ReplyFlag);
}

static int TTS(int name,int volume,int speed,int len,char *data, int ReplyFlag)//文本播放UTF-8,name发音人默认name==1;volume合成音量默认合成音量100;speed语速默认speed==50;argv文本内容。
{
	pthread_t TTS_flie_task;
	pthread_attr_t task_attribute; //线程属性
	pthread_attr_init(&task_attribute);  //初始化线程属性
	pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED);      //设置线程属性


	//如果tts没有在合成线程标志
	if(TTS_Compound_flag==0)
	{
		//tts参数结构体
		struct t_Megaphone_tts_param *Megaphone_tts_param = (struct t_Megaphone_tts_param *)malloc(sizeof(struct t_Megaphone_tts_param));
		if(Megaphone_tts_param == NULL)//如果申请内存失败,malloc会返回一个NULl
		{
			printf("malloc use failure");
			return 1;//申请内存失败,错误退出
		}

		//清空参数
		memset (Megaphone_tts_param,0,sizeof(struct t_Megaphone_tts_param));

		//写入参数
		Megaphone_tts_param->tts_speed = speed;
		Megaphone_tts_param->tts_tone =  name;
		Megaphone_tts_param->tts_volume = volume;
		Megaphone_tts_param->tts_ReplyFlag = ReplyFlag;
		snprintf(Megaphone_tts_param->ttsdata,len+8,"%s", data);
		

		int tts_ret = pthread_create(&TTS_flie_task,&task_attribute,TTS_flie,(void *)Megaphone_tts_param);		//TTS线程
		if(tts_ret != 0)
		{
			printf("创建TTS线程失败!\n");
			return -1;
		}
	}
}

//TTS合成线程
static void *TTS_flie(void *arg)
{
	//打开tts合成线程标志
	TTS_Compound_flag=1;

	struct t_Megaphone_tts_param *Megaphone_tts_param = (struct t_Megaphone_tts_param *) arg;

	//打开TTS播放标志
	Set_TTS_play_flag(1);

	//生成tts播放文件
	play_tts(Megaphone_tts_param->tts_tone, Megaphone_tts_param->tts_volume,  Megaphone_tts_param->tts_speed, Megaphone_tts_param->ttsdata, Megaphone_tts_param->tts_ReplyFlag);

	//释放掉结构体
	delayMs(1); //1ms
	free(Megaphone_tts_param);

	//打开tts合成线程标志
	TTS_Compound_flag=0;
}

/*********
 * 
 *  获取音色
 * 
 * 
**********/
int TTS_Get_tone()
{
	return g_Megaphone_TTS_tone;
}
/*********
 * 
 *  获取语速
 * 
 * 
**********/
int TTS_Get_speed()
{
	return g_Megaphone_TTS_speed;
}

/*********
 * 
 *  20、获取追加音色
 * 
 * 
**********/
int TTS_Get_TTS_AppendTone()
{

    return tts_add;

}