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

📄 jtts_ml.h

📁 用过恒迅达交换机的人都知道。恒迅达交换机是需要在交换机内部运行中间程序来给脚本提供数据接口并且监控机器运行状态的。本程序即是完成以上功能!用C++开发、调用了数据库(sqlserver2000)存储过
💻 H
📖 第 1 页 / 共 2 页
字号:

// jTTS_Play / jTTS_PlayToFile / jTTS_SessionStart 函数支持的dwFlag定义

// 此项仅对jTTS_PlayToFile适用
#define PLAYTOFILE_DEFAULT		0x0000	//默认值,写文件时只增加FORMAT_WAV_...格式的文件头
#define PLAYTOFILE_NOHEAD		0x0001	//所有的格式都不增加文件头
#define PLAYTOFILE_ADDHEAD		0x0002	//增加FORMAT_WAV_...格式和FORMAT_ALAW_8K,FORMAT_uLAW_8K格式的文件头

#define PLAYTOFILE_MASK			0x000F

// 此项仅对jTTS_Play适用
#define PLAY_RETURN				0x0000	// 如果正在播放,返回错误
#define PLAY_INTERRUPT			0x0010	// 如果正在播放,打断原来的播放,立即播放新的内容

#define PLAY_MASK				0x00F0

// 播放的内容
#define PLAYCONTENT_TEXT		0x0000	// 播放内容为文本
#define PLAYCONTENT_TEXTFILE	0x0100	// 播放内容为文本文件
#define PLAYCONTENT_AUTOFILE	0x0200	// 播放内容为文件,根据后缀名采用外界Filter DLL抽取
										// 无法判断的当作文本文件

#define PLAYCONTENT_MASK		0x0F00

// 播放的模式,同时用于SessionStart
#define PLAYMODE_DEFAULT		0x0000	// 在jTTS_Play下缺省异步,在jTTS_PlayToFile下缺省同步
										// jTTS_SessionStart下为主动获取数据方式
#define PLAYMODE_ASYNC			0x1000	// 异步播放,函数立即退出
#define PLAYMODE_SYNC			0x2000	// 同步播放,播放完成后退出

#define PLAYMODE_MASK			0xF000

// jTTS_FindVoice返回的匹配级别
#define MATCH_LANGUAGE			0	// 满足LANGUAGE,
#define MATCH_GENDER			1	// 满足LANGUAGE, GENDER
#define MATCH_AGE				2	// 满足LANGUAGE, GENDER, AGE
#define MATCH_NAME				3	// 满足LANGUAGE, GENDER,AGE,NAME
#define MATCH_DOMAIN			4	// 满足LANGUAGE, GENDER,AGE,NAME, DOMAIN,也即满足所有条件
#define MATCH_ALL				4	// 满足所有条件

// InsertInfo信息
#define INFO_MARK				0
#define INFO_VISEME				1

//各种信息串的长度
#define VOICENAME_LEN			32
#define VOICEID_LEN				40
#define VENDOR_LEN				32
#define DLLNAME_LEN				256

#define ATTRNAME_LEN			32
#define XMLLANG_LEN				256

//JTTS_PARAM
typedef enum 
{
	PARAM_CODEPAGE,			// CODEPAGE_xxx
	PARAM_VOICEID,			// Voice ID
	PARAM_PITCH,			// PITCH_MIN - PITCH_MAX
	PARAM_VOLUME,		    // VOLUME_MIN - VOLUME_MAX
	PARAM_SPEED,			// SPEED_MIN - SPEED_MAX
	PARAM_PUNCMODE,			// PUNC_xxx
	PARAM_DIGITMODE,		// DIGIT_xxx
	PARAM_ENGMODE,			// ENG_xxx
	PARAM_TAGMODE,			// TAG_xxx
	PARAM_DOMAIN,		    // DOMAIN_xxx
	PARAM_TRYTIMES,         // 
	PARAM_LOADBALANCE,		// 
	PARAM_VOICESTYLE,		// VOICESTYLE_CADENCE, VOICESTYLE_FLAT
	PARAM_BACKAUDIO,		// BACKAUDIO_NONE, BACKAUDIO_MIN - BACKAUDIO_MAX
	PARAM_BACKAUDIOVOLUME,	// AUDIOVOLUME_MIN - AUDIOVOLUME_MAX
	PARAM_BACKAUDIOFLAG,	// BACKAUDIOFLAG_xxx
	PARAM_VOICEBUFSIZE,		// VOICEBUFSIZE_DEFAULT, or n (K)
	PARAM_INSERTINFOSIZE,	// INSERTINFOSIZE_DEFAULT, or n
}
JTTS_PARAM;


//JTTS_CONFIG
#define JTTS_VERSION4		0x0004	// version 4.0
typedef struct JTTS_CONFIG_T
{
	WORD	wVersion;				// JTTS_VERSION4
	WORD	nCodePage;
	char	szVoiceID[VOICEID_LEN];	// 使用的音色
	short	nDomain;	
	short	nPitch;
	short	nVolume;
	short	nSpeed;
	short	nPuncMode;
	short	nDigitMode;
	short	nEngMode;
	short	nTagMode;
	short   nTryTimes;			// 重试次数,此成员仅用于远程合成
	short	nReserved1;			
	BOOL    bLoadBalance;		// 负载平衡,此成员仅用于远程合成
	short	nVoiceStyle;		// 朗读风格
	short	nBackAudio;			// BACKAUDIO_NONE: 无背景音乐,BACKAUDIO_MIN-BACKAUDIO_MAX: 背景音乐序号,在资源管理中心"录音管理器"中定义
	short	nBackAudioVolume;	// 背景音乐的音量
	WORD	wBackAudioFlag;		// 背景音乐的属性
	short	nVoiceBufSize;		// 设置内部缓冲区的大小
	short	nInsertInfoSize;	// 缓冲区中插入信息的个数
	short	nReserved[6];		// 保留
}
JTTS_CONFIG;

//JTTS_VOICEATTRIBUTE
typedef struct JTTS_VOICEATTRIBUTE_T
{
	char		szName[VOICENAME_LEN];	// 只能为英文名称
	char		szVoiceID[VOICEID_LEN];	// 音色的唯一标识
	short		nGender;				// GENDER_xxx
	short		nAge;					// AGE_xx
	DWORD		dwDomainArray;			// 由低位向高位,分别表示DOMAIN_xxx
	DWORD		nLanguage;				// 支持的语言, LANGUAGE_xxx
	char		szVendor[VENDOR_LEN];	// 提供厂商
	char		szDLLName[DLLNAME_LEN];	// 对应的DLL
	DWORD		dwVersionMS;			// 引擎的版本号,对应"3.75.0.31"的前两节
										// e.g. 0x00030075 = "3.75"
    DWORD		dwVersionLS;			// e.g. 0x00000031 = "0.31"
}
JTTS_VOICEATTRIBUTE;

// 插入信息
typedef struct INSERTINFO_T
{
	int nTag;		// 有二种:INFO_MARK, INFO_VISEME
	DWORD dwValue; 	// 具体信息:
					// MARK时,高24位mark文本偏移,低8位文本长度
					// VISEME时,表示唇型
	DWORD dwBytes;	// 在语音流的什么地方插入,必须按顺序增加
}
INSERTINFO;

typedef struct JTTS_LANGATTRIBUTE_T
{
	int	  nValue;
	char  szName[ATTRNAME_LEN];
	char  szEngName[ATTRNAME_LEN];
	char  szXmlLang[XMLLANG_LEN];
}
JTTS_LANGATTRIBUTE;

typedef struct JTTS_DOMAINATTRIBUTE_T
{
	int   nValue;
	char  szName[ATTRNAME_LEN];
	char  szEngName[ATTRNAME_LEN];
}
JTTS_DOMAINATTRIBUTE;

typedef struct JTTS_COUNTERS_T
{	
	int nSession;
}
JTTS_COUNTERS;

// 系统通知消息及回调函数部分

// 系统通知消息
#define WM_JTTS_NOTIFY			(WM_USER + 0x4999)

// 回调函数
typedef BOOL (TTSAPI * JTTS_CALLBACKPROC)(WORD wParam, LONG lParam, DWORD dwUserData);
typedef BOOL (TTSAPI * JTTS_DATACALLBACKPROC)(DWORD dwSessionID, WORD wParam, LONG lParam, 
									   unsigned char * pVoiceData, DWORD dwLen, 
									   INSERTINFO* pInsertInfo, int nInsertInfo, 
									   DWORD dwUserData);

// WM_JTTS_NOTIFY / JTTS_CALLBACKPROC / JTTS_DATACALLBACKPROC中wParam的定义
#define NOTIFY_BEGIN			0	// lParam: 没有使用
#define NOTIFY_END				1	// lParam: 没有使用
#define NOTIFY_SENTEND			2	// lParam: 已经读完的字节数
#define NOTIFY_SENTBEGIN		3	// lParam: 将要读到的位置(以字节数计算)
#define NOTIFY_MARK				4	// lParam: 标记Mark串的位置和长度, 参考宏GETMARKOFFSET和GETMARKLEN
#define NOTIFY_VISEME			5	// lParam: 标记唇型信息,现版本中未使用
#define NOTIFY_CHANGECONFIG		6	// 系统主动使用与传入Config不同的配置
#define NOTIFY_DATA				7	// 仅用于 JTTS_DATACALLBACKPROC,传递合成数据和InsertInfo信息 
									// lParam not use; dwLen是pVoiceData长度; pVoiceData语音数据缓冲; 
									// nInsertInfo, pInsertInfo是插入数据的数目和内容

// 为和老版本兼容而保留
#define NOTIFY_PROGRESS			2	
#define NOTIFY_PROGRESS2		3	

// 通过NOTIFY_MARK的lParam得到具体的Mark String的偏移量和长度
#define GETMARKOFFSET(lParam)	(lParam >> 8)
#define GETMARKLEN(lParam)		(lParam & 0xFF)

//------------------------------------------------------------------------
// 系统函数
ERRCODE TTSAPI jTTS_Init(const char * pcszLibPath, const char * pcszSerialNo);
ERRCODE TTSAPI jTTS_End();

int		TTSAPI jTTS_GetLangCount();
ERRCODE TTSAPI jTTS_GetLangAttribute(int nIndex, JTTS_LANGATTRIBUTE * pAttribute);
ERRCODE TTSAPI jTTS_GetLangAttributeByValue(int nValue, JTTS_LANGATTRIBUTE * pAttribute);

int		TTSAPI jTTS_GetDomainCount();
ERRCODE TTSAPI jTTS_GetDomainAttribute(int nIndex, JTTS_DOMAINATTRIBUTE * pAttribute);
ERRCODE TTSAPI jTTS_GetDomainAttributeByValue(int nValue, JTTS_DOMAINATTRIBUTE * pAttribute);

//-------------------------------------------------------------
// 音库信息函数
int		TTSAPI jTTS_GetVoiceCount();
ERRCODE TTSAPI jTTS_GetVoiceAttribute(int nIndex, JTTS_VOICEATTRIBUTE * pAttribute);
ERRCODE TTSAPI jTTS_GetVoiceAttributeByID(const char *pszVoiceID, JTTS_VOICEATTRIBUTE * pAttribute);
BOOL	TTSAPI jTTS_IsVoiceSupported(const char *pszVoiceID);
ERRCODE TTSAPI jTTS_FindVoice(int nLanguage, int nGender, int nAge, char * szName, int nDomain, 
					   char * pszVoiceID, WORD * pwMatchFlag);

ERRCODE TTSAPI jTTS_PreLoad (const char *pszVoiceID);

//------------------------------------------------------------------------
// 设置函数 
ERRCODE TTSAPI jTTS_Set(const JTTS_CONFIG * pConfig);
ERRCODE TTSAPI jTTS_Get(JTTS_CONFIG * pConfig);
ERRCODE TTSAPI jTTS_SetParam(JTTS_PARAM nParam, DWORD dwValue);
ERRCODE TTSAPI jTTS_GetParam(JTTS_PARAM nParam, DWORD *pdwValue);

//------------------------------------------------------------------------
// 播放函数 
ERRCODE TTSAPI jTTS_SetPlay(UINT uDeviceID, HWND hwnd, JTTS_CALLBACKPROC lpfnCallback, DWORD dwUserData);
ERRCODE TTSAPI jTTS_Play(const char * pcszText, DWORD dwFlag);
ERRCODE TTSAPI jTTS_Stop();
ERRCODE TTSAPI jTTS_Pause();
ERRCODE TTSAPI jTTS_Resume();
int     TTSAPI jTTS_GetStatus();

//------------------------------------------------------------------------
// 播放到文件函数 
ERRCODE TTSAPI jTTS_PlayToFile(const char *pcszText, const char * pcszFileName, 
							   UINT nFormat, const JTTS_CONFIG * pConfig, 
							   DWORD dwFlag, JTTS_CALLBACKPROC lpfnCallback, 
							   DWORD dwUserData);

//-------------------------------------------------------------
// 合成过程底层函数
ERRCODE TTSAPI jTTS_SessionStart(const char * pcszText, DWORD * pdwSessionID, 
								 UINT nFormat, const JTTS_CONFIG *pConfig, DWORD dwFlag, 
								 int * pnBitsPerSample, int * pnSamplesPerSec);
ERRCODE TTSAPI jTTS_SessionGetData(DWORD dwSessionID, int nBufIndex, unsigned char ** ppVoiceData, 
								   DWORD * pdwLen, int nReserveLen, INSERTINFO** ppInsertInfo,
								   int* pnInsertInfo);
ERRCODE TTSAPI jTTS_SessionStop(DWORD dwSessionID);
ERRCODE TTSAPI jTTS_SessionGetReadBytes(DWORD dwSessionID, DWORD * pdwBytes);
ERRCODE TTSAPI jTTS_SessionExec(DWORD dwSessionID, JTTS_DATACALLBACKPROC lpfnDataCallback, DWORD dwUserData);


#ifdef __cplusplus
}
#endif

#pragma pack( pop, jtts_ml_h )

#endif //_JTTS_ML_H_


⌨️ 快捷键说明

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