中航光电的中间件仓库

jttsprotocal.h 34KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704
  1. /*
  2. jTTS Protocal 4.0
  3. */
  4. #ifndef __jTTSPROTOCAL_H__
  5. #define __jTTSPROTOCAL_H__
  6. #include <crtdbg.h>
  7. #include "mytrace.h"
  8. // 以下数据结构和函数仅为和1.0版本兼容
  9. typedef struct
  10. {
  11. UINT nCodePage;
  12. UINT nVoiceID;
  13. int nPitch;
  14. int nVolume;
  15. int nSpeed;
  16. int nPuncMode;
  17. int nDigitMode;
  18. }JTTSCONFIG;
  19. //以下与Socket有关
  20. #define jTTS_ID 0x5A5A5A5A //Socket包识别符
  21. #define jTTS_PACK_MAXLEN 1024 //每个Socket包最大长度,字节数
  22. //文本合成请求包和语音数据包不受此长度限制
  23. //以下为Socket指令
  24. //格式:jTTS_X1_X2
  25. //X1==REQ,来自客户方; X1==ANS,来自服务器方
  26. //X2为具体命令
  27. #define jTTS_REQ_SETPARAM 0x1001 //设置语音合成参数请求(V1.0)
  28. #define jTTS_REQ_TEXT 0x1002 //发送文本请求
  29. #define jTTS_REQ_CANCELSYNTH 0x1003 //取消当前合成过程
  30. #define jTTS_REQ_SETPARAM2 0x1004 //设置语音合成参数请求(V2.0)
  31. #define jTTS_REQ_SETPARAM4 0x1010 //设置语音合成参数请求(V4.0)
  32. #define jTTS_REQ_VOICECOUNT 0x1011 //查询音库数目
  33. #define jTTS_REQ_VOICEATTRIB 0x1012 //查询某个序号的音库属性
  34. #define jTTS_REQ_ISVOICESUPPORTED 0x1013 //查询服务器是否支持某个音库
  35. #define jTTS_REQ_FINDVOICE 0x1014 //选择一个音库
  36. #define jTTS_REQ_QUIT 0x1100 //结束请求
  37. #define jTTS_REQ_TEXT4 0x1015 //jTTS4添加合成文本,jTTSService开始一个新Session
  38. #define jTTS_REQ_ADDTEXT4 0x1016 //添加文本如果前面的合成已经暂时结束,则又触发合成。
  39. #define jTTS_REQ_LICENCENUM 0x1017 //获得授权数
  40. #define jTTS_REQ_VOICEATTRIBBYID 0x1018 //通过voiceId 获得音库属性
  41. #define jTTS_REQ_LANGATTRIBUTE 0x1019 //通过index获得语言属性
  42. #define jTTS_REQ_LANGATTRIBUTEBYVALUE 0x1020 //通过语言值获得语言属性
  43. #define jTTS_REQ_COUNTERS 0x1021 //请求计数器
  44. #define jTTS_REQ_DOMAINATTRIBUTE 0x1022 //通过index获得领域属性
  45. #define jTTS_REQ_DOMAINATTRIBUTEBYVALUE 0x1023 //通过领域值获得领域属性
  46. #define jTTS_REQ_LANGCOUNT 0x1024 //获得语言值的个数
  47. #define jTTS_REQ_DOMAINCOUNT 0x1025 //获得领域值的个数
  48. #define jTTS_REQ_LICENSEINFO 0x1026 //获得授权信息
  49. //-----Xiaohai Add for 3.0---------
  50. #define jTTS_REQ_WFSYN 0x1005 //词库同步发送
  51. #define jTTS_REQ_WFSYNEND 0x1006 //词库同步结束,需要重起服务器,使新词库有效
  52. #define jTTS_REQ_LBAUTHENADD 0x1007 //负载均衡加密验证请求(增加一个语音合成线程)
  53. #define jTTS_REQ_LBAUTHENSUB 0x1008 //负载均衡加密验证请求(减少一个语音合成线程)
  54. //---------------------------------
  55. #define jTTS_ANS_CONNECT 0x4000 //连接服务器应答
  56. #define jTTS_ANS_SETPARAM 0x4001 //设置语音合成参数应答
  57. #define jTTS_ANS_SOUND 0x4002 //发送语音流
  58. #define jTTS_ANS_SOUND4 0x4003 //发送语音流V4
  59. #define jTTS_ANS_UNKNOWN 0x4080 //服务器接收到一个未知命令的Socket包
  60. #define jTTS_ANS_SHUTDOWN 0x4100 //服务器异常退出,可能是CjTTSConfig调用了StopServer方法
  61. #define jTTS_ANS_OUTOFTIME 0x4101 //客户超时,即空闲时间超过设定阈值
  62. #define jTTS_ANS_VOICECOUNT 0x4011 //返回音库数目
  63. #define jTTS_ANS_VOICEATTRIB 0x4012 //返回某个序号的音库属性
  64. #define jTTS_ANS_ISVOICESUPPORTED 0x4013 //返回服务器是否支持某个音库
  65. #define jTTS_ANS_FINDVOICE 0x4014 //返回选择音库的结果
  66. #define jTTS_ANS_ADDTEXT4 0x4015 //添加文本应答
  67. #define jTTS_ANS_LICENCENUM 0x4016 //返回授权数
  68. #define jTTS_ANS_LANGATTRIBUTE 0x4017 //返回语言属性
  69. #define jTTS_ANS_COUNTERS 0x4018 //返回计数器
  70. #define jTTS_ANS_DOMAINATTRIBUTE 0x4019 //返回领域属性
  71. #define jTTS_ANS_LANGCOUNT 0x4020 //返回语言值的个数
  72. #define jTTS_ANS_DOMAINCOUNT 0x4021 //返回领域值的个数
  73. #define jTTS_ANS_LICENSEINFO 0x4022 //返回授权信息
  74. //------Xiaohai Add for 3.0----------
  75. #define jTTS_ANS_WFSYN 0x4005 //词库同步接受应答
  76. #define jTTS_ANS_SERVICERESTART 0x4006 //使新词库有效的重起服务器操作完成,可以与下一个服务器进行词库同步
  77. #define jTTS_ANS_LBAUTHEN 0x4007 //负载均衡加密验证应答
  78. //-----------------------------------
  79. //以下为系统常数
  80. #define jTTS_PORTMAX 32767 //端口号最大值
  81. #define jTTS_PORTMIN 1 //端口号最小值
  82. #define jTTS_REQNUMMAX 255 //并发请求数最大值
  83. #define jTTS_REQNUMMIN 1 //并发请求数最小值
  84. #define jTTS_IDLETIMEMAX 100 //空闲时间最大值
  85. #define jTTS_IDLETIMEMIN 0 //空闲时间最小值 //xiaohai 从1修改为0,0表示没有超时限制。02-01-17
  86. //以下为错误码
  87. #define jTTS_NOERROR 0 //操作正确完成
  88. #define jTTS_AUTODISCONNECT 1 //用户超时
  89. #define jTTS_SYNTHCOMPLETE 2 //语音合成完毕
  90. #define jTTS_SERVERSTART 3 //服务器启动
  91. #define jTTS_SERVERSHUTDOWN 4 //服务器退出
  92. #define jTTS_PARAMOUTOFRANGE 0xA0010001//参数超出了设定范围
  93. #define jTTS_PARAMERR 0xA0010002//参数错误
  94. #define jTTS_INVALIDTEXT 0xA0010003//错误的文本参数,可能是文本指针指向一个空字符串
  95. #define jTTS_TOOMANYCONNECTIONS 0xA0020001//并发的连接大于设定的阈值
  96. #define jTTS_PREVSYNTHNOTCOMPLETE 0xA0020002//上次语音合成过程并未完全结束
  97. #define jTTS_ERRMASK 0xA0030000//jTTS错误掩码
  98. #define jTTS_MOREDATA 0xA0040001//语音数据没有发送完,请继续接收语音数据
  99. #define jTTS_SYNTHBECANCELED 0xA0050001//用户取消该语音合成过程
  100. #define jTTS_SOCKETERR 0xA0100001//启动socket错误
  101. #define jTTS_JTTSINITERR 0xA0100002//jTTS SDK初始化错误
  102. #define jTTS_DOGERR 0xA0100003//软件狗读取错误
  103. #define jTTS_STOPERR 0xA0100010//停止socket错误
  104. #define jTTS_MEMALLOCERR 0xA0110001//内存分配错误
  105. #define jTTS_ERRPACK 0xA0120001//接收到一个错误的包,可能为ID错误或包长度错误
  106. #define jTTS_VOICENOTSUPPORTED 0xA0130001//没有查到合适的Voice
  107. #define jTTS_ADDTEXT4 0xA0140001//AddText之前,没有SessionStart,即没有发送jTTS_REQ_TEXT4
  108. #define jTTS_TEXT4 0xA0140002//jTTS_REQ_TEXT4或者jTTS_REQ_TEXT启动的合成线程还在运行
  109. #define jTTS_ERRUNKNOWN 0xA0200001//未知错误
  110. #pragma warning( push )
  111. #pragma warning( disable : 4244 )
  112. //这个宏在Release选择优化以后会优化,因为sizeof是在编译的时候就可以确定的,所以不必担心效率
  113. #define H2N(x) \
  114. {\
  115. _ASSERTE(sizeof(x)==2 || sizeof(x)==4); \
  116. if (sizeof(x) == 2) x = htons(x);else x = htonl(x);\
  117. }
  118. #define N2H(x) \
  119. {\
  120. _ASSERTE(sizeof(x)==2 || sizeof(x)==4); \
  121. if (sizeof(x) == 2) x = ntohs(x);else x = ntohl(x);\
  122. }
  123. /****************************************************************/
  124. /* CjTTSSocketProtocal为所有Socket包类的基类 */
  125. /* 成员变量: */
  126. /* DWORD m_dwID; jTTS识别符,固定为jTTS_ID, 即0x5A5A5A5A */
  127. /* DWORD m_dwCommand; Socket指令,可能为上面提到的9种之一 */
  128. /* DWORD m_dwLen; 整个包的长度,字节数。 */
  129. /****************************************************************/
  130. class CjTTSSocketProtocal
  131. {
  132. public:
  133. DWORD m_dwID;
  134. DWORD m_dwCommand;
  135. DWORD m_dwLen;
  136. #ifdef CHECK_DEBUG
  137. int m_checkhton;
  138. int m_checkntoh;
  139. #endif
  140. #ifdef CHECK_DEBUG
  141. void CheckCallEnd()
  142. {
  143. _ASSERTE(m_checkhton ==1 && m_checkntoh==1);
  144. }
  145. #endif
  146. CjTTSSocketProtocal()
  147. : m_dwID(jTTS_ID)
  148. {
  149. m_dwCommand = 0;
  150. m_dwLen = sizeof( *this );
  151. #ifdef CHECK_DEBUG
  152. m_checkhton = 0;
  153. m_checkntoh = 0;
  154. #endif
  155. }
  156. void htonheader()
  157. {
  158. #ifdef CHECK_DEBUG //这个函数不能重复调用两次,检查一下
  159. m_checkhton ++;
  160. _ASSERTE(m_checkhton < 2);
  161. #endif
  162. H2N(m_dwID);
  163. H2N(m_dwCommand);
  164. H2N(m_dwLen);
  165. MYTRACE("CjTTSSocketProtocal::htonheader()\n");
  166. }
  167. void ntohheader()
  168. {
  169. #ifdef CHECK_DEBUG //这个函数不能重复调用两次,检查一下
  170. m_checkntoh ++;
  171. _ASSERTE(m_checkntoh < 2);
  172. _ASSERTE(m_checkhton == 1); //确认在之前调用过htonheader
  173. #endif
  174. N2H(m_dwID);
  175. N2H(m_dwCommand);
  176. N2H(m_dwLen);
  177. MYTRACE("CjTTSSocketProtocal::ntohheader()\n");
  178. }
  179. };
  180. #define JTTS_HEADERLEN sizeof(CjTTSSocketProtocal)
  181. //////////////////////////////////////////////////
  182. // xiaohai add 负载均衡加密验证请求包 //
  183. //////////////////////////////////////////////////
  184. class CjTTSReqLBAuthenAdd : public CjTTSSocketProtocal
  185. {
  186. public:
  187. long m_nData;
  188. char m_szVoiceId[VOICEID_LEN];
  189. CjTTSReqLBAuthenAdd()
  190. {
  191. m_dwCommand = jTTS_REQ_LBAUTHENADD;
  192. m_dwLen = sizeof(*this);
  193. }
  194. void htonall()
  195. {
  196. CjTTSSocketProtocal::htonheader();
  197. H2N(m_nData);
  198. }
  199. void ntoh()
  200. {
  201. N2H(m_nData);
  202. }
  203. };
  204. class CjTTSReqLBAuthenSub : public CjTTSSocketProtocal
  205. {
  206. public:
  207. long m_nData;
  208. BOOL m_bUseFreeLicense;
  209. char m_szVoiceId[VOICEID_LEN];
  210. CjTTSReqLBAuthenSub()
  211. {
  212. m_dwCommand = jTTS_REQ_LBAUTHENSUB;
  213. m_bUseFreeLicense = FALSE;
  214. m_dwLen = sizeof(*this);
  215. }
  216. void htonall()
  217. {
  218. CjTTSSocketProtocal::htonheader();
  219. H2N(m_nData);
  220. H2N(m_bUseFreeLicense);
  221. }
  222. void ntoh()
  223. {
  224. N2H(m_nData);
  225. N2H(m_bUseFreeLicense);
  226. }
  227. };
  228. //////////////////////////////////////////////////
  229. // xiaohai add 负载均衡加密验证应答包 //
  230. //////////////////////////////////////////////////
  231. class CjTTSAnsLBAuthen : public CjTTSSocketProtocal
  232. {
  233. public:
  234. long m_nData;
  235. BOOL m_bUseFreeLicense;
  236. CjTTSAnsLBAuthen()
  237. {
  238. m_dwCommand = jTTS_ANS_LBAUTHEN;
  239. m_bUseFreeLicense = FALSE;
  240. m_dwLen = sizeof(*this);
  241. }
  242. void htonall()
  243. {
  244. CjTTSSocketProtocal::htonheader();
  245. H2N(m_nData);
  246. H2N(m_bUseFreeLicense);
  247. }
  248. void ntoh()
  249. {
  250. N2H(m_nData);
  251. N2H(m_bUseFreeLicense);
  252. }
  253. };
  254. //////////////////////////////////////////////////
  255. // Xiaohai add for Words file synchronize //
  256. // CjTTSReqWFSyn: 发送词库同步数据包 //
  257. //////////////////////////////////////////////////
  258. class CjTTSReqWFSyn : public CjTTSSocketProtocal
  259. {
  260. public:
  261. char m_cFileName[MAX_PATH];
  262. DWORD m_dwTextLen;
  263. char m_ptszText[1];
  264. CjTTSReqWFSyn()
  265. {
  266. m_dwCommand = jTTS_REQ_WFSYN;
  267. m_dwLen = sizeof(*this); //必须置为包含词库同步文本的实际包长度
  268. m_ptszText[0] = '\0'; //将词库同步文本拷贝到此位置
  269. }
  270. void htonall()
  271. {
  272. CjTTSSocketProtocal::htonheader();
  273. H2N(m_dwTextLen);
  274. }
  275. void ntoh()
  276. {
  277. N2H(m_dwTextLen);
  278. }
  279. };
  280. //////////////////////////////////////////////////////
  281. // Xiaohai add for 词库同步结束,需要重起服务器 //
  282. // CjTTSReqWFSynEnd: 词库同步结束数据包 //
  283. //////////////////////////////////////////////////////
  284. class CjTTSReqWFSynEnd : public CjTTSSocketProtocal
  285. {
  286. public:
  287. CjTTSReqWFSynEnd()
  288. {
  289. m_dwCommand = jTTS_REQ_WFSYNEND;
  290. m_dwLen = sizeof(*this);
  291. }
  292. void htonall()
  293. {
  294. CjTTSSocketProtocal::htonheader();
  295. }
  296. void ntoh()
  297. {
  298. }
  299. };
  300. //////////////////////////////////////////////////////
  301. // xiaohai add for Words file synchronize //
  302. // CjTTSAnsWFSyn: 词库同步响应数据包 //
  303. //////////////////////////////////////////////////////
  304. class CjTTSAnsWFSyn : public CjTTSSocketProtocal
  305. {
  306. public:
  307. UINT m_nErrorCode;
  308. CjTTSAnsWFSyn()
  309. {
  310. m_dwCommand = jTTS_ANS_WFSYN;
  311. m_dwLen = sizeof(*this);
  312. m_nErrorCode = jTTS_NOERROR;
  313. }
  314. void htonall()
  315. {
  316. CjTTSSocketProtocal::htonheader();
  317. H2N(m_nErrorCode);
  318. }
  319. void ntoh()
  320. {
  321. N2H(m_nErrorCode);
  322. }
  323. };
  324. //////////////////////////////////////////////////////////
  325. // Xiaohai add for 使新词库有效的服务器重起已经完成 //
  326. // CjTTSAnsServiceRestart: 服务器重起完成数据包 //
  327. //////////////////////////////////////////////////////////
  328. class CjTTSAnsServiceRestart : public CjTTSSocketProtocal
  329. {
  330. public:
  331. CjTTSAnsServiceRestart()
  332. {
  333. m_dwCommand = jTTS_ANS_SERVICERESTART;
  334. m_dwLen = sizeof(*this);
  335. }
  336. void htonall()
  337. {
  338. CjTTSSocketProtocal::htonheader();
  339. }
  340. void ntoh()
  341. {
  342. }
  343. };
  344. //获得授权数
  345. class CjTTSPtlReqLicenceNum : public CjTTSSocketProtocal
  346. {
  347. public:
  348. CjTTSPtlReqLicenceNum()
  349. {
  350. m_dwCommand = jTTS_REQ_LICENCENUM;
  351. m_dwLen = sizeof(*this);
  352. }
  353. void htonall()
  354. {
  355. CjTTSSocketProtocal::htonheader();
  356. }
  357. void ntoh()
  358. {
  359. }
  360. };
  361. class CjTTSPtlReqLicenseInfo : public CjTTSSocketProtocal
  362. {
  363. public:
  364. CjTTSPtlReqLicenseInfo()
  365. {
  366. m_dwCommand = jTTS_REQ_LICENSEINFO;
  367. m_dwLen = sizeof(*this);
  368. }
  369. void htonall()
  370. {
  371. CjTTSSocketProtocal::htonheader();
  372. }
  373. void ntoh()
  374. {
  375. }
  376. };
  377. //
  378. //--------------------------------------------------------
  379. //以下为客户端Socket包,当前版本共计3种
  380. /****************************************************************/
  381. /* CjTTSPtlReqSetParam: 设定语音合成参数请求 */
  382. /* 为有应答的请求,应答包为CjTTSPtlAnsSetParam */
  383. /* m_dwCommand = jTTS_REQ_SETPARAM */
  384. /* 成员变量: */
  385. /* JTTSCONFIG m_jTTSConfig;语音合成参数 */
  386. /* int m_nFormat; 输出格式,声卡输出还是文件输出 */
  387. /****************************************************************/
  388. class CjTTSPtlReqSetParam : public CjTTSSocketProtocal
  389. {
  390. public:
  391. JTTSCONFIG m_jTTSConfig;
  392. int m_nFormat;
  393. CjTTSPtlReqSetParam()
  394. {
  395. m_dwCommand = jTTS_REQ_SETPARAM;
  396. m_dwLen = sizeof(*this);
  397. ::memset( &m_jTTSConfig, 0, sizeof(JTTSCONFIG) );
  398. m_nFormat = 0;
  399. }
  400. void htonall()
  401. {
  402. CjTTSSocketProtocal::htonheader();
  403. htonJTTSCONFIG(m_jTTSConfig);
  404. H2N(m_nFormat);
  405. }
  406. void ntoh()
  407. {
  408. ntohJTTSCONFIG(m_jTTSConfig);
  409. N2H(m_nFormat);
  410. }
  411. private:
  412. void htonJTTSCONFIG(JTTSCONFIG & jconfig)
  413. {
  414. _ASSERTE(sizeof(jconfig) == 28);
  415. H2N(jconfig.nCodePage);
  416. H2N(jconfig.nDigitMode);
  417. H2N(jconfig.nPitch);
  418. H2N(jconfig.nPuncMode);
  419. H2N(jconfig.nSpeed);
  420. H2N(jconfig.nVoiceID);
  421. H2N(jconfig.nVolume);
  422. H2N(jconfig.nVoiceID);
  423. }
  424. void ntohJTTSCONFIG(JTTSCONFIG & jconfig)
  425. {
  426. _ASSERTE(sizeof(jconfig) == 28);
  427. N2H(jconfig.nCodePage);
  428. N2H(jconfig.nDigitMode);
  429. N2H(jconfig.nPitch);
  430. N2H(jconfig.nPuncMode);
  431. N2H(jconfig.nSpeed);
  432. N2H(jconfig.nVoiceID);
  433. N2H(jconfig.nVolume);
  434. N2H(jconfig.nVoiceID);
  435. }
  436. };
  437. /****************************************************************/
  438. /* CjTTSPtlReqSetParam2: 设定语音合成参数请求 */
  439. /* 为有应答的请求,应答包为CjTTSPtlAnsSetParam2 */
  440. /* m_dwCommand = jTTS_REQ_SETPARAM */
  441. /* 成员变量: */
  442. /* JTTSCONFIG2 m_jTTSConfig2;语音合成参数 */
  443. /* int m_nFormat; 输出格式,声卡输出还是文件输出 */
  444. /****************************************************************/
  445. class CjTTSPtlReqSetParam2 : public CjTTSSocketProtocal
  446. {
  447. public:
  448. JTTSCONFIG2 m_jTTSConfig2;
  449. int m_nFormat;
  450. CjTTSPtlReqSetParam2()
  451. {
  452. m_dwCommand = jTTS_REQ_SETPARAM2;
  453. m_dwLen = sizeof(*this);
  454. ::memset( &m_jTTSConfig2, 0, sizeof(JTTSCONFIG2) );
  455. m_nFormat = 0;
  456. }
  457. void htonall()
  458. {
  459. CjTTSSocketProtocal::htonheader();
  460. htonJTTSCONFIG2(m_jTTSConfig2);
  461. H2N(m_nFormat);
  462. }
  463. void ntoh()
  464. {
  465. ntohJTTSCONFIG2(m_jTTSConfig2);
  466. N2H(m_nFormat);
  467. }
  468. private:
  469. void htonJTTSCONFIG2(JTTSCONFIG2 & jconfig2)
  470. {
  471. _ASSERTE(sizeof(jconfig2) == 36);
  472. H2N(jconfig2.nCodePage);
  473. H2N(jconfig2.nDigitMode);
  474. H2N(jconfig2.nEngMode);
  475. H2N(jconfig2.nPitch);
  476. H2N(jconfig2.nPuncMode);
  477. H2N(jconfig2.nSpeed);
  478. H2N(jconfig2.nVolume);
  479. H2N(jconfig2.wVersion);
  480. H2N(jconfig2.nVoiceID);
  481. }
  482. void ntohJTTSCONFIG2(JTTSCONFIG2 & jconfig2)
  483. {
  484. _ASSERTE(sizeof(jconfig2) == 36);
  485. N2H(jconfig2.nCodePage);
  486. N2H(jconfig2.nDigitMode);
  487. N2H(jconfig2.nEngMode);
  488. N2H(jconfig2.nPitch);
  489. N2H(jconfig2.nPuncMode);
  490. N2H(jconfig2.nSpeed);
  491. N2H(jconfig2.nVolume);
  492. N2H(jconfig2.wVersion);
  493. N2H(jconfig2.nVoiceID);
  494. }
  495. };
  496. /****************************************************************/
  497. /* CjTTSPtlReqText: 语音合成请求 */
  498. /* 为有应答的请求,应答包为CjTTSPtlAnsSound */
  499. /* DWORD m_dwCommand = jTTS_REQ_TEXT */
  500. /* 成员变量: */
  501. /* DWORD m_dwTextLen待合成文本char字符的个数, */
  502. /* 即对于UNICODE版本,实际字符数为2*m_dwTextLen */
  503. /****************************************************************/
  504. class CjTTSPtlReqText : public CjTTSSocketProtocal
  505. {
  506. public:
  507. DWORD m_dwTextLen;
  508. char m_ptszText[1];
  509. CjTTSPtlReqText()
  510. {
  511. m_dwCommand = jTTS_REQ_TEXT;
  512. m_dwLen = sizeof(*this);
  513. }
  514. void htonall()
  515. {
  516. CjTTSSocketProtocal::htonheader();
  517. H2N(m_dwTextLen);
  518. }
  519. void ntoh()
  520. {
  521. N2H(m_dwTextLen);
  522. }
  523. };
  524. /****************************************************************/
  525. /* CjTTSPtlReqText4: 语音合成请求V4 */
  526. /* 为有应答的请求,应答包为CjTTSPtlAnsSound */
  527. /* DWORD m_dwCommand = jTTS_REQ_TEXT4 */
  528. /* 成员变量: */
  529. /* DWORD m_dwTextLen待合成文本char字符的个数, */
  530. /* 即对于UNICODE版本,实际字符数为2*m_dwTextLen */
  531. /****************************************************************/
  532. class CjTTSPtlReqText4 : public CjTTSSocketProtocal
  533. {
  534. public:
  535. DWORD m_dwTextLen;
  536. char m_ptszText[1];
  537. CjTTSPtlReqText4()
  538. {
  539. m_dwCommand = jTTS_REQ_TEXT4;
  540. m_dwLen = sizeof(*this);
  541. }
  542. void htonall()
  543. {
  544. CjTTSSocketProtocal::htonheader();
  545. H2N(m_dwTextLen);
  546. }
  547. void ntoh()
  548. {
  549. N2H(m_dwTextLen);
  550. }
  551. };
  552. class CjTTSPtlReqAddText4 : public CjTTSSocketProtocal
  553. {
  554. public:
  555. DWORD m_dwTextLen;
  556. char m_ptszText[1];
  557. CjTTSPtlReqAddText4()
  558. {
  559. m_dwCommand = jTTS_REQ_ADDTEXT4;
  560. m_dwLen = sizeof(*this);
  561. }
  562. void htonall()
  563. {
  564. CjTTSSocketProtocal::htonheader();
  565. H2N(m_dwTextLen);
  566. }
  567. void ntoh()
  568. {
  569. N2H(m_dwTextLen);
  570. }
  571. };
  572. /****************************************************************/
  573. /* CjTTSPtlReqCancelSynth: 取消当前语音合成过程,无应答 */
  574. /* DWORD m_dwCommand = jTTS_REQ_CANCELSYNTH */
  575. /* 成员变量:无 */
  576. /****************************************************************/
  577. class CjTTSPtlReqCancelSynth : public CjTTSSocketProtocal
  578. {
  579. public:
  580. CjTTSPtlReqCancelSynth()
  581. {
  582. m_dwCommand = jTTS_REQ_CANCELSYNTH;
  583. m_dwLen = sizeof(*this);
  584. }
  585. void htonall()
  586. {
  587. CjTTSSocketProtocal::htonheader();
  588. }
  589. void ntoh()
  590. {
  591. }
  592. };
  593. /****************************************************************/
  594. /* CjTTSPtlReqQuit: 客户退出请求,无应答 */
  595. /* DWORD m_dwCommand = jTTS_REQ_QUIT */
  596. /* 成员变量:无 */
  597. /****************************************************************/
  598. class CjTTSPtlReqQuit : public CjTTSSocketProtocal
  599. {
  600. public:
  601. CjTTSPtlReqQuit()
  602. {
  603. m_dwCommand = jTTS_REQ_QUIT;
  604. m_dwLen = sizeof(*this);
  605. }
  606. void htonall()
  607. {
  608. CjTTSSocketProtocal::htonheader();
  609. }
  610. void ntoh()
  611. {
  612. }
  613. };
  614. //设置语音合成参数请求(V4.0)
  615. class CjTTSPtlReqSetParam4 : public CjTTSSocketProtocal
  616. {
  617. public:
  618. JTTS_CONFIG m_jTTSConfig;
  619. unsigned short m_nFormat;
  620. CjTTSPtlReqSetParam4()
  621. {
  622. m_dwCommand = jTTS_REQ_SETPARAM4;
  623. m_dwLen = sizeof(*this);
  624. }
  625. void htonall()
  626. {
  627. CjTTSSocketProtocal::htonheader();
  628. htonJTTS_CONFIG(m_jTTSConfig);
  629. H2N(m_nFormat);
  630. }
  631. void ntoh()
  632. {
  633. ntohJTTS_CONFIG(m_jTTSConfig);
  634. N2H(m_nFormat);
  635. }
  636. private:
  637. //更改JTTS_CONFIG的时候就应该修改这个函数
  638. void htonJTTS_CONFIG(JTTS_CONFIG & jconfig)
  639. {
  640. //如果这个断言不成立说明你对 JTTS_CONFIG结构做了修改,你应该相应修改这个函数,
  641. //并把sizeof(jconfig)更改成正确的值
  642. _ASSERTE(sizeof(jconfig) == 92);
  643. H2N(jconfig.bLoadBalance);
  644. H2N(jconfig.nCodePage);
  645. H2N(jconfig.nDigitMode);
  646. H2N(jconfig.nDomain);
  647. H2N(jconfig.nEngMode);
  648. H2N(jconfig.nPitch);
  649. H2N(jconfig.nPuncMode);
  650. H2N(jconfig.nSpeed);
  651. H2N(jconfig.nTagMode);
  652. H2N(jconfig.nTryTimes);
  653. H2N(jconfig.nVolume);
  654. H2N(jconfig.wVersion);
  655. }
  656. //更改JTTS_CONFIG的时候就应该修改这个函数
  657. void ntohJTTS_CONFIG(JTTS_CONFIG & jconfig)
  658. {
  659. //如果这个断言不成立说明你对 JTTS_CONFIG结构做了修改,你应该相应修改这个函数,
  660. //并把sizeof(jconfig)更改成正确的值
  661. _ASSERTE(sizeof(jconfig) == 92);
  662. N2H(jconfig.bLoadBalance);
  663. N2H(jconfig.nCodePage);
  664. N2H(jconfig.nDigitMode);
  665. N2H(jconfig.nDomain);
  666. N2H(jconfig.nEngMode);
  667. N2H(jconfig.nPitch);
  668. N2H(jconfig.nPuncMode);
  669. N2H(jconfig.nSpeed);
  670. N2H(jconfig.nTagMode);
  671. N2H(jconfig.nTryTimes);
  672. N2H(jconfig.nVolume);
  673. N2H(jconfig.wVersion);
  674. }
  675. };
  676. //查询音库数目
  677. class CjTTSPtlReqVoiceCount : public CjTTSSocketProtocal
  678. {
  679. public:
  680. CjTTSPtlReqVoiceCount()
  681. {
  682. m_dwCommand = jTTS_REQ_VOICECOUNT;
  683. m_dwLen = sizeof(*this);
  684. }
  685. void htonall()
  686. {
  687. CjTTSSocketProtocal::htonheader();
  688. MYTRACE("CjTTSPtlReqVoiceCount::htonall\n");
  689. }
  690. void ntoh()
  691. {
  692. MYTRACE("CjTTSPtlReqVoiceCount::ntoh\n");
  693. }
  694. };
  695. //查询某个序号的音库属性
  696. class CjTTSPtlReqVoiceAttrib : public CjTTSSocketProtocal
  697. {
  698. public:
  699. int m_nIndex;
  700. CjTTSPtlReqVoiceAttrib()
  701. {
  702. m_dwCommand = jTTS_REQ_VOICEATTRIB;
  703. m_dwLen = sizeof(*this);
  704. }
  705. void htonall()
  706. {
  707. CjTTSSocketProtocal::htonheader();
  708. H2N(m_nIndex);
  709. }
  710. void ntoh()
  711. {
  712. N2H(m_nIndex);
  713. }
  714. };
  715. class CjTTSPtlReqVoiceAttribByID : public CjTTSSocketProtocal
  716. {
  717. public:
  718. char m_szVoiceID[VOICEID_LEN];
  719. CjTTSPtlReqVoiceAttribByID()
  720. {
  721. m_dwCommand = jTTS_REQ_VOICEATTRIBBYID;
  722. m_dwLen = sizeof(*this);
  723. }
  724. void htonall()
  725. {
  726. CjTTSSocketProtocal::htonheader();
  727. }
  728. void ntoh()
  729. {
  730. }
  731. };
  732. //查询服务器是否支持某个音库
  733. class CjTTSPtlReqIsVoiceSupported : public CjTTSSocketProtocal
  734. {
  735. public:
  736. char m_szVoiceID[VOICEID_LEN];
  737. CjTTSPtlReqIsVoiceSupported()
  738. {
  739. m_dwCommand = jTTS_REQ_ISVOICESUPPORTED;
  740. m_dwLen = sizeof(*this);
  741. }
  742. void htonall()
  743. {
  744. CjTTSSocketProtocal::htonheader();
  745. }
  746. void ntoh()
  747. {
  748. }
  749. };
  750. //选择一个音库
  751. class CjTTSPtlReqFindVoice : public CjTTSSocketProtocal
  752. {
  753. public:
  754. int m_nLanguage;
  755. char m_szName[VOICENAME_LEN];
  756. int m_nGender;
  757. int m_nAge;
  758. int m_nDomain;
  759. char m_szVoiceID[VOICEID_LEN];
  760. DWORD m_dwMatchFlag;
  761. CjTTSPtlReqFindVoice()
  762. {
  763. m_dwCommand = jTTS_REQ_FINDVOICE;
  764. m_dwLen = sizeof(*this);
  765. }
  766. void htonall()
  767. {
  768. CjTTSSocketProtocal::htonheader();
  769. H2N(m_nLanguage);
  770. H2N(m_nGender);
  771. H2N(m_nAge);
  772. H2N(m_nDomain);
  773. H2N(m_dwMatchFlag);
  774. }
  775. void ntoh()
  776. {
  777. N2H(m_nLanguage);
  778. N2H(m_nGender);
  779. N2H(m_nAge);
  780. N2H(m_nDomain);
  781. N2H(m_dwMatchFlag);
  782. }
  783. };
  784. //以下为服务器端Socket包,当前版本共计5种
  785. /****************************************************************/
  786. /* CjTTSPtlAnsConnect: 当客户试图和服务器建立连接时, */
  787. /* 服务器向客户发出连接应答,指示连接是否成功建立。 */
  788. /* DWORD m_dwCommand = jTTS_ANS_CONNECT */
  789. /* 成员变量: */
  790. /* UINT m_nErrorCode; 错误码,可能为如下值: */
  791. /* 1)jTTS_NOERROR,连接建立成功 */
  792. /* 2)jTTS_TOOMANYCONNECTIONS,当前并发连接数已达到设定阈值 */
  793. /****************************************************************/
  794. class CjTTSPtlAnsConnect : public CjTTSSocketProtocal
  795. {
  796. public:
  797. UINT m_nErrorCode;
  798. CjTTSPtlAnsConnect()
  799. {
  800. m_nErrorCode = jTTS_NOERROR;
  801. m_dwCommand = jTTS_ANS_CONNECT;
  802. m_dwLen = sizeof(*this);
  803. }
  804. void htonall()
  805. {
  806. CjTTSSocketProtocal::htonheader();
  807. H2N(m_nErrorCode);
  808. }
  809. void ntoh()
  810. {
  811. N2H(m_nErrorCode);
  812. }
  813. };
  814. /****************************************************************/
  815. /* CjTTSPtlAnsSetParam: 当客户发送语音合成参数设定请求时, */
  816. /* 服务器向客户发出应答,指示参数设定是否成功。 */
  817. /* DWORD m_dwCommand = jTTS_ANS_SETPARAM */
  818. /* 成员变量: */
  819. /* UINT m_nErrorCode; 错误码,可能为如下值: */
  820. /* 1)jTTS_NOERROR,连接建立成功 */
  821. /* 2)jTTS_ERRPACK,包长度不正确,概率基本为0 */
  822. /****************************************************************/
  823. class CjTTSPtlAnsSetParam : public CjTTSSocketProtocal
  824. {
  825. public:
  826. UINT m_nErrorCode;
  827. CjTTSPtlAnsSetParam()
  828. {
  829. m_nErrorCode = jTTS_NOERROR;
  830. m_dwCommand = jTTS_ANS_SETPARAM;
  831. m_dwLen = sizeof(*this);
  832. }
  833. void htonall()
  834. {
  835. CjTTSSocketProtocal::htonheader();
  836. H2N(m_nErrorCode);
  837. }
  838. void ntoh()
  839. {
  840. N2H(m_nErrorCode);
  841. }
  842. };
  843. /****************************************************************/
  844. /* CjTTSPtlAnsSound: 当客户发送语音合成请求时, */
  845. /* 服务器向客户发出应答,指示语音请求是否成功完成。 */
  846. /* DWORD m_dwCommand = jTTS_ANS_SOUND */
  847. /* 成员变量: */
  848. /* int m_nBitsPerSample;//数据流每采样的位数 */
  849. /* int m_nSamplesPerSec;//数据流每秒的采样数 */
  850. /* DWORD m_dwSoundLen;//语音数据流的长度 */
  851. /* UINT m_nErrorCode; 错误码,可能为如下值: */
  852. /* 1)jTTS_NOERROR,连接建立成功 */
  853. /* 2)jTTS_MOREDATA,数据还没有发送完,请继续接收 */
  854. /* 3)jTTS_ERRPACK,包长度不正确,概率基本为0 */
  855. /* 4)jTTS_INVALIDTEXT,语音请求文本参数错误,可能是 */
  856. /* 文本指针指向一个空字符串 */
  857. /* 5)jTTS_MEMALLOCERR,内存分配错误 */
  858. /* 6)其他,jTTS_ERRMASK | jTTSSDK的错误码 */
  859. /* 为语音合成时jTTS SDK给出的错误 */
  860. /* */
  861. /* !!!!注意: */
  862. /* 语音数据包中不包含语音数据缓冲区! */
  863. /* 或者说语音数据包仅仅是一个包头。 */
  864. /* 只要m_dwSoundLen不为0 */
  865. /* 其后将发送一个长度m_dwSoundLen个byte的语音数据. */
  866. /* */
  867. /*一个简单的接收过程如下(不考虑错误): */
  868. /* 1)接收语音数据包 */
  869. /* 2)m_dwSoundLen==0 ? 完成 : 接收m_dwSoundLen长度的语音数据 */
  870. /* 3)m_nErrorCode==jTTS_MOREDATA ? 转到第一步继续执行 : 完成 */
  871. /****************************************************************/
  872. class CjTTSPtlAnsSound : public CjTTSSocketProtocal
  873. {
  874. public:
  875. UINT m_nErrorCode;
  876. int m_nBitsPerSample;
  877. int m_nSamplesPerSec;
  878. DWORD m_dwSoundLen;
  879. DWORD m_dwReadBytes;
  880. unsigned char m_pData[1];
  881. CjTTSPtlAnsSound()
  882. {
  883. m_nErrorCode = jTTS_NOERROR;
  884. m_dwCommand = jTTS_ANS_SOUND;
  885. m_nBitsPerSample = -1;
  886. m_nSamplesPerSec = -1;
  887. m_dwSoundLen = 0;
  888. m_dwReadBytes = 0;
  889. m_dwLen = sizeof(*this);
  890. //肖海从Service程序中看出来的m_dwLen的实际含义
  891. //m_dwLen = offsetof(CjTTSPtlAnsSound, m_pData) + m_dwSoundLen;
  892. }
  893. void htonall()
  894. {
  895. CjTTSSocketProtocal::htonheader();
  896. if (m_nBitsPerSample == 16){
  897. for(DWORD i = 0; i < m_dwSoundLen; i+=2)
  898. {
  899. H2N(*(WORD *)(m_pData + i));
  900. }
  901. }
  902. H2N(m_nErrorCode);
  903. H2N(m_nBitsPerSample);
  904. H2N(m_nSamplesPerSec);
  905. H2N(m_dwSoundLen);
  906. H2N(m_dwReadBytes);
  907. }
  908. void ntoh()
  909. {
  910. N2H(m_nErrorCode);
  911. N2H(m_nBitsPerSample);
  912. N2H(m_nSamplesPerSec);
  913. N2H(m_dwSoundLen);
  914. N2H(m_dwReadBytes);
  915. if (m_nBitsPerSample == 16){
  916. for(DWORD i = 0; i < m_dwSoundLen; i+=2)
  917. {
  918. N2H(*(WORD *)(m_pData + i));
  919. }
  920. }
  921. }
  922. };
  923. class CjTTSPtlAnsSound4 : public CjTTSSocketProtocal
  924. {
  925. public:
  926. UINT m_nErrorCode;
  927. int m_nBitsPerSample;
  928. int m_nSamplesPerSec;
  929. DWORD m_dwSoundLen;
  930. DWORD m_dwInsertInfoNum;
  931. DWORD m_dwReadBytes;
  932. unsigned char m_pData[1];
  933. CjTTSPtlAnsSound4()
  934. {
  935. m_nErrorCode = jTTS_NOERROR;
  936. m_dwCommand = jTTS_ANS_SOUND4;
  937. m_nBitsPerSample = -1;
  938. m_nSamplesPerSec = -1;
  939. m_dwSoundLen = 0;
  940. m_dwInsertInfoNum = 0;
  941. m_dwReadBytes = 0;
  942. m_dwLen = sizeof(*this);
  943. //肖海从Service程序中看出来的m_dwLen的实际含义
  944. //m_dwLen = offsetof(CjTTSPtlAnsSound, m_pData) + m_dwSoundLen + m_dwInsertInfoNum*sizeof(InsertInfo);
  945. //Sound紧跟m_dwReadBytes之后,InsertInfo在最后。
  946. }
  947. void htonall()
  948. {
  949. CjTTSSocketProtocal::htonheader();
  950. if (m_nBitsPerSample == 16){
  951. for(DWORD i = 0; i < m_dwSoundLen; i+=2)
  952. {
  953. H2N(*(WORD *)(m_pData + i));
  954. }
  955. }
  956. H2N(m_nErrorCode);
  957. H2N(m_nBitsPerSample);
  958. H2N(m_nSamplesPerSec);
  959. H2N(m_dwSoundLen);
  960. H2N(m_dwInsertInfoNum);
  961. H2N(m_dwReadBytes);
  962. }
  963. void ntoh()
  964. {
  965. N2H(m_nErrorCode);
  966. N2H(m_nBitsPerSample);
  967. N2H(m_nSamplesPerSec);
  968. N2H(m_dwSoundLen);
  969. N2H(m_dwInsertInfoNum);
  970. N2H(m_dwReadBytes);
  971. if (m_nBitsPerSample == 16){
  972. for(DWORD i = 0; i < m_dwSoundLen; i+=2)
  973. {
  974. N2H(*(WORD *)(m_pData + i));
  975. }
  976. }
  977. }
  978. };
  979. /****************************************************************/
  980. /* CjTTSPtlAnsUnknown: 无法识别接收到的客户请求,概率为0 */
  981. /* DWORD m_dwCommand = jTTS_ANS_UNKNOWN */
  982. /* 成员变量:无 */
  983. /****************************************************************/
  984. class CjTTSPtlAnsUnknown : public CjTTSSocketProtocal
  985. {
  986. public:
  987. CjTTSPtlAnsUnknown()
  988. {
  989. m_dwCommand = jTTS_ANS_UNKNOWN;
  990. m_dwLen = sizeof(*this);
  991. }
  992. void htonall()
  993. {
  994. CjTTSSocketProtocal::htonheader();
  995. }
  996. void ntoh()
  997. {
  998. }
  999. };
  1000. /****************************************************************/
  1001. /* CjTTSPtlAnsShutdown: 服务器退出 */
  1002. /* DWORD m_dwCommand = jTTS_ANS_SHUTDOWN */
  1003. /* 成员变量:无 */
  1004. /****************************************************************/
  1005. class CjTTSPtlAnsShutdown : public CjTTSSocketProtocal
  1006. {
  1007. public:
  1008. CjTTSPtlAnsShutdown()
  1009. {
  1010. m_dwCommand = jTTS_ANS_SHUTDOWN;
  1011. m_dwLen = sizeof(*this);
  1012. }
  1013. void htonall()
  1014. {
  1015. CjTTSSocketProtocal::htonheader();
  1016. }
  1017. void ntoh()
  1018. {
  1019. }
  1020. };
  1021. /****************************************************************/
  1022. /* CjTTSPtlAnsOutoftime: 客户空闲时间超出设定阈值 */
  1023. /* DWORD m_dwCommand = jTTS_ANS_OUTOFTIME */
  1024. /* 成员变量:无 */
  1025. /****************************************************************/
  1026. class CjTTSPtlAnsOutoftime : public CjTTSSocketProtocal
  1027. {
  1028. public:
  1029. CjTTSPtlAnsOutoftime()
  1030. {
  1031. m_dwCommand = jTTS_ANS_OUTOFTIME;
  1032. m_dwLen = sizeof(*this);
  1033. }
  1034. void htonall()
  1035. {
  1036. CjTTSSocketProtocal::htonheader();
  1037. }
  1038. void ntoh()
  1039. {
  1040. }
  1041. };
  1042. // 返回音库数目
  1043. class CjTTSPtlAnsVoiceCount : public CjTTSSocketProtocal
  1044. {
  1045. public:
  1046. int m_nVoiceCount;
  1047. CjTTSPtlAnsVoiceCount()
  1048. {
  1049. m_dwCommand = jTTS_ANS_VOICECOUNT;
  1050. m_dwLen = sizeof(*this);
  1051. }
  1052. void htonall()
  1053. {
  1054. CjTTSSocketProtocal::htonheader();
  1055. H2N(m_nVoiceCount);
  1056. }
  1057. void ntoh()
  1058. {
  1059. N2H(m_nVoiceCount);
  1060. }
  1061. };
  1062. // 返回某个序号的音库属性
  1063. // m_nErrorCode 错误码,有如下值:
  1064. // jTTS_NOERROR: 没有错误
  1065. // jTTS_ERRPACK: 数据包接收错
  1066. // jTTS_PARAMOUTOFRANGE: Voice的Index超出正常范围
  1067. class CjTTSPtlAnsVoiceAttrib : public CjTTSSocketProtocal
  1068. {
  1069. public:
  1070. UINT m_nErrorCode;
  1071. char m_szName[VOICENAME_LEN];
  1072. char m_szVoiceID[VOICEID_LEN];
  1073. int m_nGender;
  1074. int m_nAge;
  1075. DWORD m_dwDomainArray;
  1076. int m_nLanguage;
  1077. char m_szVendor[VENDOR_LEN];
  1078. DWORD m_dwVersionLS;
  1079. DWORD m_dwVersionMS;
  1080. CjTTSPtlAnsVoiceAttrib()
  1081. {
  1082. m_nErrorCode = jTTS_NOERROR;
  1083. m_dwCommand = jTTS_ANS_VOICEATTRIB;
  1084. m_dwLen = sizeof(*this);
  1085. }
  1086. void htonall()
  1087. {
  1088. CjTTSSocketProtocal::htonheader();
  1089. H2N(m_nGender);
  1090. H2N(m_nAge);
  1091. H2N(m_dwDomainArray);
  1092. H2N(m_nLanguage);
  1093. H2N(m_dwVersionLS);
  1094. H2N(m_dwVersionMS);
  1095. }
  1096. void ntoh()
  1097. {
  1098. N2H(m_nGender);
  1099. N2H(m_nAge);
  1100. N2H(m_dwDomainArray);
  1101. N2H(m_nLanguage);
  1102. N2H(m_dwVersionLS);
  1103. N2H(m_dwVersionMS);
  1104. }
  1105. };
  1106. // 返回服务器是否支持某个音库
  1107. // m_nErrorCode 错误码,有如下值:
  1108. // jTTS_NOERROR: 没有错误
  1109. // jTTS_ERRPACK: 数据包接收错
  1110. class CjTTSPtlAnsIsVoiceSupported : public CjTTSSocketProtocal
  1111. {
  1112. public:
  1113. UINT m_nErrorCode;
  1114. int m_bIsSupported;
  1115. CjTTSPtlAnsIsVoiceSupported()
  1116. {
  1117. m_nErrorCode = jTTS_NOERROR;
  1118. m_dwCommand = jTTS_ANS_ISVOICESUPPORTED;
  1119. m_dwLen = sizeof(*this);
  1120. }
  1121. void htonall()
  1122. {
  1123. CjTTSSocketProtocal::htonheader();
  1124. H2N(m_nErrorCode);
  1125. }
  1126. void ntoh()
  1127. {
  1128. N2H(m_nErrorCode);
  1129. }
  1130. };
  1131. // 返回选择音库的结果
  1132. // m_nErrorCode 错误码,有如下值:
  1133. // jTTS_NOERROR: 没有错误
  1134. // jTTS_ERRPACK: 数据包接收错
  1135. // jTTS_VOICENOTSUPPORTED: 没有查到符合条件的Voice
  1136. class CjTTSPtlAnsFindVoice : public CjTTSSocketProtocal
  1137. {
  1138. public:
  1139. UINT m_nErrorCode;
  1140. WORD m_wMatchFlag;
  1141. char m_szVoiceID[VOICEID_LEN];
  1142. CjTTSPtlAnsFindVoice()
  1143. {
  1144. m_nErrorCode = jTTS_NOERROR;
  1145. m_dwCommand = jTTS_ANS_FINDVOICE;
  1146. m_dwLen = sizeof(*this);
  1147. }
  1148. void htonall()
  1149. {
  1150. CjTTSSocketProtocal::htonheader();
  1151. H2N(m_nErrorCode);
  1152. H2N(m_wMatchFlag);
  1153. }
  1154. void ntoh()
  1155. {
  1156. N2H(m_nErrorCode);
  1157. N2H(m_wMatchFlag);
  1158. }
  1159. };
  1160. class CjTTSPtlAnsAddText4 : public CjTTSSocketProtocal
  1161. {
  1162. public:
  1163. UINT m_nErrorCode;
  1164. CjTTSPtlAnsAddText4()
  1165. {
  1166. m_nErrorCode = jTTS_NOERROR;
  1167. m_dwCommand = jTTS_ANS_ADDTEXT4;
  1168. m_dwLen = sizeof(*this);
  1169. }
  1170. void htonall()
  1171. {
  1172. CjTTSSocketProtocal::htonheader();
  1173. H2N(m_nErrorCode);
  1174. }
  1175. void ntoh()
  1176. {
  1177. H2N(m_nErrorCode);
  1178. }
  1179. };
  1180. //返回授权数
  1181. class CjTTSPtlAnsLicenceNum : public CjTTSSocketProtocal
  1182. {
  1183. public:
  1184. UINT m_nLicenceNum;
  1185. CjTTSPtlAnsLicenceNum()
  1186. {
  1187. m_dwCommand = jTTS_ANS_LICENCENUM;
  1188. m_dwLen = sizeof(*this);
  1189. m_nLicenceNum = 0;
  1190. }
  1191. void htonall()
  1192. {
  1193. CjTTSSocketProtocal::htonheader();
  1194. H2N(m_nLicenceNum);
  1195. }
  1196. void ntoh()
  1197. {
  1198. N2H(m_nLicenceNum);
  1199. }
  1200. };
  1201. class CjTTSPtlAnsLicenseInfo : public CjTTSSocketProtocal
  1202. {
  1203. public:
  1204. JTTS_LICENSEINFO m_licenseInfo;
  1205. CjTTSPtlAnsLicenseInfo()
  1206. {
  1207. m_dwCommand = jTTS_ANS_LICENSEINFO;
  1208. m_dwLen = sizeof(*this);
  1209. }
  1210. void htonall()
  1211. {
  1212. CjTTSSocketProtocal::htonheader();
  1213. H2N(m_licenseInfo.bService);
  1214. H2N(m_licenseInfo.nSharedLines);
  1215. H2N(m_licenseInfo.wLicenseType);
  1216. H2N(m_licenseInfo.wVersion);
  1217. }
  1218. void ntoh()
  1219. {
  1220. N2H(m_licenseInfo.bService);
  1221. N2H(m_licenseInfo.nSharedLines);
  1222. N2H(m_licenseInfo.wLicenseType);
  1223. N2H(m_licenseInfo.wVersion);
  1224. }
  1225. };
  1226. class CjTTSPtlReqLangAttribute: public CjTTSSocketProtocal
  1227. {
  1228. public:
  1229. int m_nIndex;
  1230. CjTTSPtlReqLangAttribute()
  1231. {
  1232. m_dwCommand = jTTS_REQ_LANGATTRIBUTE;
  1233. m_dwLen = sizeof(*this);
  1234. m_nIndex = 0;
  1235. }
  1236. void htonall()
  1237. {
  1238. CjTTSSocketProtocal::htonheader();
  1239. H2N(m_nIndex);
  1240. }
  1241. void ntoh()
  1242. {
  1243. N2H(m_nIndex);
  1244. }
  1245. };
  1246. class CjTTSPtlReqLangAttributeByValue: public CjTTSSocketProtocal
  1247. {
  1248. public:
  1249. int m_nValue;
  1250. CjTTSPtlReqLangAttributeByValue()
  1251. {
  1252. m_dwCommand = jTTS_REQ_LANGATTRIBUTEBYVALUE;
  1253. m_dwLen = sizeof(*this);
  1254. m_nValue = 0;
  1255. }
  1256. void htonall()
  1257. {
  1258. CjTTSSocketProtocal::htonheader();
  1259. H2N(m_nValue);
  1260. }
  1261. void ntoh()
  1262. {
  1263. N2H(m_nValue);
  1264. }
  1265. };
  1266. class CjTTSPtlAnsLangAttribute: public CjTTSSocketProtocal
  1267. {
  1268. public:
  1269. UINT m_nErrorCode;
  1270. int m_nValue;
  1271. char m_szName[ATTRNAME_LEN];
  1272. char m_szEngName[ATTRNAME_LEN];
  1273. char m_szXmlLang[XMLLANG_LEN];
  1274. CjTTSPtlAnsLangAttribute()
  1275. {
  1276. m_nErrorCode = jTTS_NOERROR;
  1277. m_dwCommand = jTTS_ANS_LANGATTRIBUTE;
  1278. m_dwLen = sizeof(*this);
  1279. m_nValue = 0;
  1280. }
  1281. void htonall()
  1282. {
  1283. CjTTSSocketProtocal::htonheader();
  1284. H2N(m_nErrorCode);
  1285. H2N(m_nValue);
  1286. }
  1287. void ntoh()
  1288. {
  1289. N2H(m_nErrorCode);
  1290. N2H(m_nValue);
  1291. }
  1292. };
  1293. class CjTTSPtlReqDomainAttribute: public CjTTSSocketProtocal
  1294. {
  1295. public:
  1296. int m_nIndex;
  1297. CjTTSPtlReqDomainAttribute()
  1298. {
  1299. m_dwCommand = jTTS_REQ_DOMAINATTRIBUTE;
  1300. m_dwLen = sizeof(*this);
  1301. m_nIndex = 0;
  1302. }
  1303. void htonall()
  1304. {
  1305. CjTTSSocketProtocal::htonheader();
  1306. H2N(m_nIndex);
  1307. }
  1308. void ntoh()
  1309. {
  1310. N2H(m_nIndex);
  1311. }
  1312. };
  1313. class CjTTSPtlReqDomainAttributeByValue: public CjTTSSocketProtocal
  1314. {
  1315. public:
  1316. int m_nValue;
  1317. CjTTSPtlReqDomainAttributeByValue()
  1318. {
  1319. m_dwCommand = jTTS_REQ_DOMAINATTRIBUTEBYVALUE;
  1320. m_dwLen = sizeof(*this);
  1321. m_nValue = 0;
  1322. }
  1323. void htonall()
  1324. {
  1325. CjTTSSocketProtocal::htonheader();
  1326. H2N(m_nValue);
  1327. }
  1328. void ntoh()
  1329. {
  1330. N2H(m_nValue);
  1331. }
  1332. };
  1333. class CjTTSPtlAnsDomainAttribute: public CjTTSSocketProtocal
  1334. {
  1335. public:
  1336. UINT m_nErrorCode;
  1337. int m_nValue;
  1338. char m_szName[ATTRNAME_LEN];
  1339. char m_szEngName[ATTRNAME_LEN];
  1340. CjTTSPtlAnsDomainAttribute()
  1341. {
  1342. m_nErrorCode = jTTS_NOERROR;
  1343. m_dwCommand = jTTS_ANS_DOMAINATTRIBUTE;
  1344. m_dwLen = sizeof(*this);
  1345. m_nValue = 0;
  1346. }
  1347. void htonall()
  1348. {
  1349. CjTTSSocketProtocal::htonheader();
  1350. H2N(m_nErrorCode);
  1351. H2N(m_nValue);
  1352. }
  1353. void ntoh()
  1354. {
  1355. N2H(m_nErrorCode);
  1356. N2H(m_nValue);
  1357. }
  1358. };
  1359. class CjTTSPtlReqLangCount: public CjTTSSocketProtocal
  1360. {
  1361. public:
  1362. CjTTSPtlReqLangCount()
  1363. {
  1364. m_dwCommand = jTTS_REQ_LANGCOUNT;
  1365. m_dwLen = sizeof(*this);
  1366. }
  1367. void htonall()
  1368. {
  1369. CjTTSSocketProtocal::htonheader();
  1370. }
  1371. void ntoh()
  1372. {
  1373. }
  1374. };
  1375. class CjTTSPtlAnsLangCount: public CjTTSSocketProtocal
  1376. {
  1377. public:
  1378. int m_nCount;
  1379. CjTTSPtlAnsLangCount()
  1380. {
  1381. m_dwCommand = jTTS_ANS_LANGCOUNT;
  1382. m_dwLen = sizeof(*this);
  1383. m_nCount=0;
  1384. }
  1385. void htonall()
  1386. {
  1387. CjTTSSocketProtocal::htonheader();
  1388. H2N(m_nCount);
  1389. }
  1390. void ntoh()
  1391. {
  1392. N2H(m_nCount);
  1393. }
  1394. };
  1395. class CjTTSPtlReqDomainCount: public CjTTSSocketProtocal
  1396. {
  1397. public:
  1398. CjTTSPtlReqDomainCount()
  1399. {
  1400. m_dwCommand = jTTS_REQ_DOMAINCOUNT;
  1401. m_dwLen = sizeof(*this);
  1402. }
  1403. void htonall()
  1404. {
  1405. CjTTSSocketProtocal::htonheader();
  1406. }
  1407. void ntoh()
  1408. {
  1409. }
  1410. };
  1411. class CjTTSPtlAnsDomainCount: public CjTTSSocketProtocal
  1412. {
  1413. public:
  1414. int m_nCount;
  1415. CjTTSPtlAnsDomainCount()
  1416. {
  1417. m_dwCommand = jTTS_ANS_DOMAINCOUNT;
  1418. m_dwLen = sizeof(*this);
  1419. m_nCount=0;
  1420. }
  1421. void htonall()
  1422. {
  1423. CjTTSSocketProtocal::htonheader();
  1424. H2N(m_nCount);
  1425. }
  1426. void ntoh()
  1427. {
  1428. N2H(m_nCount);
  1429. }
  1430. };
  1431. class CjTTSPtlReqCounters: public CjTTSSocketProtocal
  1432. {
  1433. public:
  1434. CjTTSPtlReqCounters()
  1435. {
  1436. m_dwCommand = jTTS_REQ_COUNTERS;
  1437. m_dwLen = sizeof(*this);
  1438. }
  1439. void htonall()
  1440. {
  1441. CjTTSSocketProtocal::htonheader();
  1442. }
  1443. void ntoh()
  1444. {
  1445. }
  1446. };
  1447. class CjTTSPtlAnsCounters : public CjTTSSocketProtocal
  1448. {
  1449. public:
  1450. int m_nErrorCode;
  1451. int m_nSession;
  1452. CjTTSPtlAnsCounters()
  1453. {
  1454. m_nErrorCode = ERR_NONE;
  1455. m_dwCommand = jTTS_ANS_COUNTERS;
  1456. m_dwLen = sizeof(*this);
  1457. }
  1458. void htonall()
  1459. {
  1460. CjTTSSocketProtocal::htonheader();
  1461. H2N(m_nErrorCode);
  1462. H2N(m_nSession);
  1463. }
  1464. void ntoh()
  1465. {
  1466. N2H(m_nErrorCode);
  1467. N2H(m_nSession);
  1468. }
  1469. };
  1470. #pragma warning( pop )
  1471. #endif //__jTTSPROTOCAL_H__