| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- #include "StdAfx.h"
- #include "TTSibm.h"
- CTtsIbm::CTtsIbm(void) : m_Handle(NULL_ECI_HAND), m_Module(NULL), m_ProcEciNew(NULL), m_ProcEciDelete(NULL), m_ProcEciSetParam(NULL), m_ProcEciSetVoiceParam(NULL),
- m_ProcEciSetOutputFilename(NULL), m_ProcEciAddText(NULL), m_ProcEciSynthesize(NULL), m_ProcEciSynchronize(NULL), m_ProcEciSynthesizeFile(NULL)
- {
- }
- CTtsIbm::~CTtsIbm(void)
- {
- close();
- }
- ECICallbackReturn CTtsIbm::Callback( ECIHand eciHand, ECIMessage msg, long param, void * data )
- {
- if( msg == eciWaveformBuffer )
- {
- // Add your code here.
- }
- return eciDataProcessed;
- }
- /*****************************************************************
- **【函数名称】 load
- **【函数功能】 加载TTS引擎
- **【参数】
- **【返回值】
- ****************************************************************/
- bool CTtsIbm::load( LPCTSTR LibPath/* = NULL*/ )
- {
- if(LibPath == NULL)
- m_Module = LoadLibrary(_T("ibmeci.dll"));
- else
- m_Module = LoadLibrary(LibPath);
- if(m_Module == NULL)
- return false;
- if((m_ProcEciNew = (__eciNew)GetProcAddress(m_Module, _T("eciNew"))) == NULL)
- return false;
- if((m_ProcEciDelete = (__eciDelete)GetProcAddress(m_Module, _T("eciDelete"))) == NULL)
- return false;
- if((m_ProcEciSetParam = (__eciSetParam)GetProcAddress(m_Module, _T("eciSetParam"))) == NULL)
- return false;
- if((m_ProcEciSetVoiceParam = (__eciSetVoiceParam)GetProcAddress(m_Module, _T("eciSetVoiceParam"))) == NULL)
- return false;
- if((m_ProcEciSetOutputFilename = (__eciSetOutputFilename)GetProcAddress(m_Module, _T("eciSetOutputFilename"))) == NULL)
- return false;
- if((m_ProcEciAddText = (__eciAddText)GetProcAddress(m_Module, _T("eciAddText"))) == NULL)
- return false;
- if((m_ProcEciSynthesize = (__eciSynthesize)GetProcAddress(m_Module, _T("eciSynthesize"))) == NULL)
- return false;
- if((m_ProcEciSynchronize = (__eciSynchronize)GetProcAddress(m_Module, _T("eciSynchronize"))) == NULL)
- return false;
- if((m_ProcEciSynthesizeFile = (__eciSynthesizeFile)GetProcAddress(m_Module, _T("eciSynthesizeFile"))) == NULL)
- return false;
-
- return true;
- }
- /*****************************************************************
- **【函数名称】 init
- **【函数功能】 初始化TTS
- **【参数】 a_ErrorInfo:如果初始化失败,返回失败原因
- **【返回值】 TRUE:初始化成功
- ****************************************************************/
- bool CTtsIbm::init( LPTSTR a_ErrorInfo )
- {
- if(m_Handle == NULL)
- {
- // 初始化TTS
- m_Handle = m_ProcEciNew();
- if(m_Handle == NULL_ECI_HAND)
- {
- lstrcpy(a_ErrorInfo, _T("创建TTS实例失败!"));
- return false;
- } // end if
- }
- return true;
- }
- /*****************************************************************
- **【函数名称】 close
- **【函数功能】 释放TTS连接
- **【参数】
- **【返回值】
- ****************************************************************/
- void CTtsIbm::close(void)
- {
- if(m_Handle != NULL_ECI_HAND)
- {
- m_ProcEciDelete(m_Handle);
- m_Handle = NULL_ECI_HAND;
- }
- if(m_Module != NULL)
- {
- FreeLibrary(m_Module);
- m_Module = NULL;
- }
- }
- /*****************************************************************
- **【函数名称】 setParam
- **【函数功能】 设置合成前的参数
- **【参数】 a_NumReadType读的方式:1数值,2字符串方式
- a_Speed:音速
- a_Volume:音量
- **【返回值】
- ****************************************************************/
- bool CTtsIbm::setParam( int a_NumReadType, int a_Speed, int a_Volume )
- {
- if(m_Handle == NULL_ECI_HAND)
- return false;
- // 设置合成参数
- m_ProcEciSetParam(m_Handle, eciInputType, a_NumReadType); // 文本中是否含有注释
- m_ProcEciSetVoiceParam(m_Handle, 0, eciSpeed, a_Speed); // 音速
- m_ProcEciSetVoiceParam(m_Handle, 0, eciPitchBaseline, 50); // 音高
- m_ProcEciSetVoiceParam(m_Handle, 0, eciVolume, a_Volume); // 音量
- return true;
- }
- /*****************************************************************
- **【函数名称】 string2Audio
- **【函数功能】 转换文本串到语音文件
- **【参数】 a_Text 要转换的文本串
- a_AudioName 语音文件名
- **【返回值】
- ****************************************************************/
- bool CTtsIbm::string2Audio( LPTSTR a_Text, LPTSTR a_AudioName )
- {
- if(m_Handle == NULL_ECI_HAND)
- return false;
- // 设置输出文件名
- if(!m_ProcEciSetOutputFilename(m_Handle, a_AudioName))
- return false;
- // 开始合成
- if(!m_ProcEciAddText(m_Handle, (ECIInputText)a_Text))
- return false;
- if(!m_ProcEciSynthesize(m_Handle))
- return false;
- m_ProcEciSynchronize(m_Handle);
- return true;
- }
- /*****************************************************************
- **【函数名称】 file2Audio
- **【函数功能】 转换文本文件到语音文件
- **【参数】 a_FileName 要转换的文本文本文件名
- a_AudioName 语音文件名
- **【返回值】
- ****************************************************************/
- bool CTtsIbm::file2Audio( LPTSTR a_FileName, LPTSTR a_AudioName )
- {
- if(m_Handle == NULL_ECI_HAND)
- return false;
- // 设置输出文件名
- if(!m_ProcEciSetOutputFilename(m_Handle, a_AudioName))
- return false;
- // 开始合成
- if(!m_ProcEciSynthesizeFile(m_Handle, a_FileName))
- return false;
- m_ProcEciSynchronize(m_Handle);
- return true;
- }
|