#include "StdAfx.h" #include "TTSjt.h" CTtsJt::CTtsJt(void) : m_IsInit(false), m_UseCount(0), m_Module(NULL), m_ProcJTTS_Init(NULL), m_ProcJTTS_End(NULL), m_ProcJTTS_SetParam(NULL), m_ProcJTTS_PlayToFile(NULL) { } CTtsJt::~CTtsJt(void) { close(); } /***************************************************************** **【函数名称】 load **【函数功能】 加载TTS引擎 **【参数】 **【返回值】 ****************************************************************/ bool CTtsJt::load( LPCTSTR LibPath /*= NULL*/ ) { if(LibPath == NULL) m_Module = LoadLibrary(_T("jTTS_ML.dll")); else m_Module = LoadLibrary(LibPath); if(m_Module == NULL) return false; if((m_ProcJTTS_Init = (__jTTS_Init)GetProcAddress(m_Module, _T("jTTS_Init"))) == NULL) return false; if((m_ProcJTTS_End = (__jTTS_End)GetProcAddress(m_Module, _T("jTTS_End"))) == NULL) return false; if((m_ProcJTTS_SetParam = (__jTTS_SetParam)GetProcAddress(m_Module, _T("jTTS_SetParam"))) == NULL) return false; if((m_ProcJTTS_PlayToFile = (__jTTS_PlayToFile)GetProcAddress(m_Module, _T("jTTS_PlayToFile"))) == NULL) return false; return true; } /***************************************************************** **【函数名称】 init **【函数功能】 初始化TTS **【参数】 a_ErrorInfo:如果初始化失败,返回失败原因 **【返回值】 TRUE:初始化成功 ****************************************************************/ bool CTtsJt::init( LPTSTR a_ErrorInfo ) { if (!m_IsInit) { // 系统从注册表中得到序列号和初始化字符串,进行初始化。 ERRCODE err = m_ProcJTTS_Init(NULL, NULL); if (err != ERR_NONE) { CString strError = ""; strError.Format("创建TTS实例失败, ERRCODE = %d", err); lstrcpy(a_ErrorInfo, strError.GetBuffer()); return false; } m_IsInit = true; } // 用户计数 ++m_UseCount; return true; } /***************************************************************** **【函数名称】 close **【函数功能】 释放TTS连接 **【参数】 **【返回值】 ****************************************************************/ void CTtsJt::close( void ) { --m_UseCount; if (m_UseCount == 0) { m_ProcJTTS_End(); m_IsInit = false; if(m_Module != NULL) { FreeLibrary(m_Module); m_Module = NULL; } } } /***************************************************************** **【函数名称】 setParam **【函数功能】 设置合成前的参数 **【参数】 a_NumReadType读的方式:1数值,2字符串方式 a_Speed:音速 a_Volume:音量 **【返回值】 ****************************************************************/ bool CTtsJt::setParam( int a_NumReadType, int a_Speed, int a_Volume ) { if (!m_IsInit) return false; m_ProcJTTS_SetParam(PARAM_DIGITMODE, a_NumReadType); m_ProcJTTS_SetParam(PARAM_SPEED, a_Speed); m_ProcJTTS_SetParam(PARAM_VOLUME, a_Volume); return true; } /***************************************************************** **【函数名称】 string2Audio **【函数功能】 转换文本串到语音文件 **【参数】 a_Text 要转换的文本串 a_AudioName 语音文件名 **【返回值】 ****************************************************************/ bool CTtsJt::string2Audio( LPTSTR a_Text, LPTSTR a_AudioName ) { if (!m_IsInit) return false; ERRCODE err = m_ProcJTTS_PlayToFile(a_Text, a_AudioName, FORMAT_WAV_8K16B, NULL, 0, NULL, 0); if (err != ERR_NONE) return false; return true; } /***************************************************************** **【函数名称】 file2Audio **【函数功能】 转换文本文件到语音文件 **【参数】 a_FileName 要转换的文本文本文件名 a_AudioName 语音文件名 **【返回值】 ****************************************************************/ bool CTtsJt::file2Audio( LPTSTR a_FileName, LPTSTR a_AudioName ) { if (!m_IsInit) return false; ERRCODE err = m_ProcJTTS_PlayToFile(a_FileName, a_AudioName, FORMAT_WAV_8K16B, NULL, PLAYCONTENT_TEXTFILE, NULL, 0); if (err != ERR_NONE) return false; return true; }