关于语音包读汉字或英文问题

首先下个TTS开发包  微软的TTS   SDK5.0

#include   <windows.h>  
  #include   <sapi.h>  
  #include   <wininet.h>  
  #include   <assert.h>  
  #include   <cstdio>  
  #include   <sphelper.h>  
  #pragma   comment(lib,"wininet")  
  int   main(int   argc,   char*   argv[])  
  {  
          ISpVoice*                                                         pVoice   ;  
          ISpObjectToken*                                                 pVoiceToken;  
          IEnumSpObjectTokens*                                 pEnum;  
   
          ULONG         ulCount=0;  
   
   
          if   (FAILED(::CoInitialize(NULL)))  
                  return   FALSE;  
   
          HRESULT   hr   =   CoCreateInstance(CLSID_SpVoice,   NULL,   CLSCTX_ALL,   IID_ISpVoice,   (void   **)&pVoice);  
          if(   SUCCEEDED(   hr   )   )  
          {  
                  hr   =   SpEnumTokens(SPCAT_VOICES,   NULL,   NULL,   &pEnum);  
                   
                  if(SUCCEEDED(hr))  
                          hr   =   pEnum->GetCount(&ulCount);  
                   
                  //   Obtain   a   list   of   available   voice   tokens,   set   the   voice   to   the   token,   and   call   Speak  
                  while   (SUCCEEDED(hr)   &&   ulCount   --   )  
                  {  
                          if(SUCCEEDED(hr))  
                                  hr   =   pEnum->Next(   1,   &pVoiceToken,   NULL   );  
                           
                          if(SUCCEEDED(hr))  
                                  hr   =   pVoice->SetVoice(pVoiceToken);  
                           
                          if(SUCCEEDED(hr))  
                                  hr   =   pVoice->Speak(   L"How   are   you?",   SPF_DEFAULT,   NULL);    
                           
                          hr   =   pVoice->Speak(L"Hello   world",   0,   NULL);  
                          //   Change   pitch  
                          hr   =   pVoice->Speak(L"This   sounds   normal   <pitch   middle   =   '-10'/>   but   the   pitch   drops   half   way   through",   SPF_IS_XML,   NULL   );  
                          hr   =   pVoice->Speak(L"1234567&sup1;&thorn;&sup1;&thorn;",   0,   NULL);  
   
                          pVoiceToken->Release();  
                          pVoiceToken=NULL;  
   
                  }  
   
                  pVoice->Release();  
                  pVoice   =   NULL;  
          }  
          ::CoUninitialize();  
          return   TRUE;  
          /*  
          LPCSTR   url="https://202.106.134.65/";  
          HINTERNET         hInet=InternetOpen("",INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,NULL);  
          assert(hInet);  
          HINTERNET         hHttps=InternetOpenUrl(hInet,url,NULL,NULL,NULL,NULL);  
          assert(hHttps);  
          ULONG     nRead=0;  
          do{  
                  char   Buffer[1024];  
                  Buffer[1000]=0;  
                  InternetReadFile(hHttps,Buffer,1000,&nRead);  
                  puts(Buffer);  
          }while(nRead>0);  
          InternetCloseHandle(hHttps);  
          InternetCloseHandle(hInet);  
  */  
  }  

关于:TTS   VTxtAuto  
   
  1.成员函数的第一个参数向TTS引擎传送需要朗读的文字,第二个参数传递朗读时的语气和优先级别,由两个常量相加组成  
   
  控制优先级别的常量有:  
   
  vtxtsp_HIGH=256(&H100),尽快读出,加入播放队列开始  
  vtxtsp_NORMAL=512(&H200),默认,加入播放队列末尾  
  vtxtsp_VERYHIGH=128(&H80),立即读出,可以打断正在读的内容  
   
   
  控制语气的常量有:  
  vtxtst_COMMAND=4,命令的语气  
  vtxtst_NUMBERS=32(&H20),阅读数字的语气  
  vtxtst_QUESTION=2   提问的语气  
  vtxtst_READING   阅读文档时的语气  
  vtxtst_SPREADSHEET=64(&H40),阅读电子表格中元素的语气  
  vtxtst_STATEMENT=1   ,平时说话时的语气  
  vtxtst_WARNING=8,警告的语气  
  通过IsSpeaking可以取得当前状态  
  可以通过改变AudioForward和AudioRewind向前和向后跳过一句朗读  
  修改speed属性可以设置朗读的语速,默认值speed=170

语音朗读开发包  
  www.smartysoft.cn

原文地址:https://www.cnblogs.com/buffer/p/1258996.html