升龙物业 老版本 ocx IPO, 加密狗 转值班电话

TtsIbm.cpp 4.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. #include "StdAfx.h"
  2. #include "TTSibm.h"
  3. CTtsIbm::CTtsIbm(void) : m_Handle(NULL_ECI_HAND), m_Module(NULL), m_ProcEciNew(NULL), m_ProcEciDelete(NULL), m_ProcEciSetParam(NULL), m_ProcEciSetVoiceParam(NULL),
  4. m_ProcEciSetOutputFilename(NULL), m_ProcEciAddText(NULL), m_ProcEciSynthesize(NULL), m_ProcEciSynchronize(NULL), m_ProcEciSynthesizeFile(NULL)
  5. {
  6. }
  7. CTtsIbm::~CTtsIbm(void)
  8. {
  9. close();
  10. }
  11. ECICallbackReturn CTtsIbm::Callback( ECIHand eciHand, ECIMessage msg, long param, void * data )
  12. {
  13. if( msg == eciWaveformBuffer )
  14. {
  15. // Add your code here.
  16. }
  17. return eciDataProcessed;
  18. }
  19. /*****************************************************************
  20. **【函数名称】 load
  21. **【函数功能】 加载TTS引擎
  22. **【参数】
  23. **【返回值】
  24. ****************************************************************/
  25. bool CTtsIbm::load( LPCTSTR LibPath/* = NULL*/ )
  26. {
  27. if(LibPath == NULL)
  28. m_Module = LoadLibrary(_T("ibmeci.dll"));
  29. else
  30. m_Module = LoadLibrary(LibPath);
  31. if(m_Module == NULL)
  32. return false;
  33. if((m_ProcEciNew = (__eciNew)GetProcAddress(m_Module, _T("eciNew"))) == NULL)
  34. return false;
  35. if((m_ProcEciDelete = (__eciDelete)GetProcAddress(m_Module, _T("eciDelete"))) == NULL)
  36. return false;
  37. if((m_ProcEciSetParam = (__eciSetParam)GetProcAddress(m_Module, _T("eciSetParam"))) == NULL)
  38. return false;
  39. if((m_ProcEciSetVoiceParam = (__eciSetVoiceParam)GetProcAddress(m_Module, _T("eciSetVoiceParam"))) == NULL)
  40. return false;
  41. if((m_ProcEciSetOutputFilename = (__eciSetOutputFilename)GetProcAddress(m_Module, _T("eciSetOutputFilename"))) == NULL)
  42. return false;
  43. if((m_ProcEciAddText = (__eciAddText)GetProcAddress(m_Module, _T("eciAddText"))) == NULL)
  44. return false;
  45. if((m_ProcEciSynthesize = (__eciSynthesize)GetProcAddress(m_Module, _T("eciSynthesize"))) == NULL)
  46. return false;
  47. if((m_ProcEciSynchronize = (__eciSynchronize)GetProcAddress(m_Module, _T("eciSynchronize"))) == NULL)
  48. return false;
  49. if((m_ProcEciSynthesizeFile = (__eciSynthesizeFile)GetProcAddress(m_Module, _T("eciSynthesizeFile"))) == NULL)
  50. return false;
  51. return true;
  52. }
  53. /*****************************************************************
  54. **【函数名称】 init
  55. **【函数功能】 初始化TTS
  56. **【参数】 a_ErrorInfo:如果初始化失败,返回失败原因
  57. **【返回值】 TRUE:初始化成功
  58. ****************************************************************/
  59. bool CTtsIbm::init( LPTSTR a_ErrorInfo )
  60. {
  61. if(m_Handle == NULL)
  62. {
  63. // 初始化TTS
  64. m_Handle = m_ProcEciNew();
  65. if(m_Handle == NULL_ECI_HAND)
  66. {
  67. lstrcpy(a_ErrorInfo, _T("创建TTS实例失败!"));
  68. return false;
  69. } // end if
  70. }
  71. return true;
  72. }
  73. /*****************************************************************
  74. **【函数名称】 close
  75. **【函数功能】 释放TTS连接
  76. **【参数】
  77. **【返回值】
  78. ****************************************************************/
  79. void CTtsIbm::close(void)
  80. {
  81. if(m_Handle != NULL_ECI_HAND)
  82. {
  83. m_ProcEciDelete(m_Handle);
  84. m_Handle = NULL_ECI_HAND;
  85. }
  86. if(m_Module != NULL)
  87. {
  88. FreeLibrary(m_Module);
  89. m_Module = NULL;
  90. }
  91. }
  92. /*****************************************************************
  93. **【函数名称】 setParam
  94. **【函数功能】 设置合成前的参数
  95. **【参数】 a_NumReadType读的方式:1数值,2字符串方式
  96. a_Speed:音速
  97. a_Volume:音量
  98. **【返回值】
  99. ****************************************************************/
  100. bool CTtsIbm::setParam( int a_NumReadType, int a_Speed, int a_Volume )
  101. {
  102. if(m_Handle == NULL_ECI_HAND)
  103. return false;
  104. // 设置合成参数
  105. m_ProcEciSetParam(m_Handle, eciInputType, a_NumReadType); // 文本中是否含有注释
  106. m_ProcEciSetVoiceParam(m_Handle, 0, eciSpeed, a_Speed); // 音速
  107. m_ProcEciSetVoiceParam(m_Handle, 0, eciPitchBaseline, 50); // 音高
  108. m_ProcEciSetVoiceParam(m_Handle, 0, eciVolume, a_Volume); // 音量
  109. return true;
  110. }
  111. /*****************************************************************
  112. **【函数名称】 string2Audio
  113. **【函数功能】 转换文本串到语音文件
  114. **【参数】 a_Text 要转换的文本串
  115. a_AudioName 语音文件名
  116. **【返回值】
  117. ****************************************************************/
  118. bool CTtsIbm::string2Audio( LPTSTR a_Text, LPTSTR a_AudioName )
  119. {
  120. if(m_Handle == NULL_ECI_HAND)
  121. return false;
  122. // 设置输出文件名
  123. if(!m_ProcEciSetOutputFilename(m_Handle, a_AudioName))
  124. return false;
  125. // 开始合成
  126. if(!m_ProcEciAddText(m_Handle, (ECIInputText)a_Text))
  127. return false;
  128. if(!m_ProcEciSynthesize(m_Handle))
  129. return false;
  130. m_ProcEciSynchronize(m_Handle);
  131. return true;
  132. }
  133. /*****************************************************************
  134. **【函数名称】 file2Audio
  135. **【函数功能】 转换文本文件到语音文件
  136. **【参数】 a_FileName 要转换的文本文本文件名
  137. a_AudioName 语音文件名
  138. **【返回值】
  139. ****************************************************************/
  140. bool CTtsIbm::file2Audio( LPTSTR a_FileName, LPTSTR a_AudioName )
  141. {
  142. if(m_Handle == NULL_ECI_HAND)
  143. return false;
  144. // 设置输出文件名
  145. if(!m_ProcEciSetOutputFilename(m_Handle, a_AudioName))
  146. return false;
  147. // 开始合成
  148. if(!m_ProcEciSynthesizeFile(m_Handle, a_FileName))
  149. return false;
  150. m_ProcEciSynchronize(m_Handle);
  151. return true;
  152. }