亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ptts.cxx

?? 安裝 H323需要的pwlib庫
?? CXX
字號:
/* * ptts.cxx * * Text To Speech classes * * Portable Windows Library * * Copyright (c) 2002 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Portable Windows Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Log: ptts.cxx,v $ * Revision 1.15  2004/10/23 10:56:15  ykiryanov * Added ifdef _WIN32_WCE for PocketPC 2003 SDK port * * Revision 1.14  2004/07/12 09:17:20  csoutheren * Fixed warnings and errors under Linux * * Revision 1.13  2004/07/06 10:12:54  csoutheren * Added static integer o factory template to assist in ensuring factories are instantiated * * Revision 1.12  2004/06/30 12:17:05  rjongbloed * Rewrite of plug in system to use single global variable for all factories to avoid all sorts *   of issues with startup orders and Windows DLL multiple instances. * * Revision 1.11  2004/06/19 09:02:32  csoutheren * Added rate and volume to keep Festival happy * * Revision 1.10  2004/06/19 07:18:59  csoutheren * Change TTS engine registration to use abstract factory code * * Revision 1.9  2004/04/09 06:52:17  rjongbloed * Removed #pargma linker command for /delayload of DLL as documentations sais that *   you cannot do this. * * Revision 1.8  2004/02/23 23:52:20  csoutheren * Added pragmas to avoid every Windows application needing to include libs explicitly * * Revision 1.7  2003/10/30 11:28:25  rjongbloed * Added dircetory name for Speech API under Windows. * * Revision 1.6  2003/09/17 06:02:13  csoutheren * Fixed windows header file problem caused by removing recursive headers * * Revision 1.5  2003/04/17 01:21:33  craigs * Added import of pybuildopts to correctly detect if P_SAPI is set * * Revision 1.4  2003/04/16 08:00:19  robertj * Windoes psuedo autoconf support * * Revision 1.3  2002/11/06 22:47:25  robertj * Fixed header comment (copyright etc) * * Revision 1.2  2002/08/14 15:18:25  craigs * Fixed Festval implementation * * Revision 1.1  2002/08/06 04:45:58  craigs * Initial version * */#ifdef __GNUC__#pragma implementation "ptts.h"#endif#include "ptbuildopts.h"////////////////////////////////////////////////////////////// WIN32 COM stuff must be first in file to compile properly#if P_SAPI#if defined(P_SAPI_LIBRARY)#pragma comment(lib, P_SAPI_LIBRARY)#endif#ifndef _WIN32_DCOM#define _WIN32_DCOM 1#endif#include <objbase.h>#include <atlbase.h>#include <objbase.h>#include <windows.h>#include <windowsx.h>#include <sphelper.h>#endif////////////////////////////////////////////////////////////// this disables the winsock2 stuff in the Windows contain.h, to avoid header file problems#define P_KNOCKOUT_WINSOCK2#define P_DISABLE_FACTORY_INSTANCES#include <ptlib.h>#include <ptlib/pipechan.h>#include <ptclib/ptts.h>#ifdef _WIN32PINSTANTIATE_FACTORY(PTextToSpeech, PString)#endif//////////////////////////////////////////////////////////////// Text to speech using Microsoft's Speech API (SAPI)// Can be downloaded from http://www.microsoft.com/speech/download/sdk51//#if P_SAPI#define MAX_FN_SIZE 1024class PTextToSpeech_SAPI : public PTextToSpeech{  PCLASSINFO(PTextToSpeech_SAPI, PTextToSpeech);  public:    PTextToSpeech_SAPI();    ~PTextToSpeech_SAPI();    // overrides    PStringArray GetVoiceList();    BOOL SetVoice(const PString & voice);    BOOL SetRate(unsigned rate);    unsigned GetRate();    BOOL SetVolume(unsigned volume);    unsigned GetVolume();    BOOL OpenFile   (const PFilePath & fn);    BOOL OpenChannel(PChannel * channel);    BOOL IsOpen()     { return opened; }    BOOL Close      ();    BOOL Speak      (const PString & str, TextType hint);  protected:    BOOL OpenVoice();    static PMutex refMutex;    static int * refCount;    PMutex mutex;    CComPtr<ISpVoice> m_cpVoice;    CComPtr<ISpStream> cpWavStream;    BOOL opened;    BOOL usingFile;    unsigned rate, volume;    PString voice;};PFactory<PTextToSpeech>::Worker<PTextToSpeech_SAPI> sapiTTSFactory("Microsoft SAPI", false);int * PTextToSpeech_SAPI::refCount;PMutex PTextToSpeech_SAPI::refMutex;PTextToSpeech_SAPI::PTextToSpeech_SAPI(){  PWaitAndSignal m(refMutex);  if (refCount == NULL) {    refCount = new int;    *refCount = 1;    ::CoInitializeEx(NULL, COINIT_MULTITHREADED);  } else {    (*refCount)++;  }  usingFile = opened = FALSE;}PTextToSpeech_SAPI::~PTextToSpeech_SAPI(){  PWaitAndSignal m(refMutex);  if ((--(*refCount)) == 0) {    ::CoUninitialize();    delete refCount;    refCount = NULL;  }}BOOL PTextToSpeech_SAPI::OpenVoice(){  PWaitAndSignal m(mutex);  HRESULT hr = m_cpVoice.CoCreateInstance(CLSID_SpVoice);  return (opened = SUCCEEDED(hr));}BOOL PTextToSpeech_SAPI::OpenChannel(PChannel *){  PWaitAndSignal m(mutex);  Close();  usingFile = FALSE;  return (opened = FALSE);}BOOL PTextToSpeech_SAPI::OpenFile(const PFilePath & fn){  PWaitAndSignal m(mutex);  Close();  usingFile = TRUE;  if (!OpenVoice())    return FALSE;  CSpStreamFormat wavFormat;  wavFormat.AssignFormat(SPSF_8kHz16BitMono);  WCHAR szwWavFileName[MAX_FN_SIZE] = L"";;  USES_CONVERSION;  wcscpy(szwWavFileName, T2W((const char *)fn));  HRESULT hr = SPBindToFile(szwWavFileName, SPFM_CREATE_ALWAYS, &cpWavStream, &wavFormat.FormatId(), wavFormat.WaveFormatExPtr());   if (!SUCCEEDED(hr)) {    cpWavStream.Release();    return FALSE;  }	hr = m_cpVoice->SetOutput(cpWavStream, TRUE);  return (opened = SUCCEEDED(hr));}BOOL PTextToSpeech_SAPI::Close(){  PWaitAndSignal m(mutex);  if (!opened)    return TRUE;  if (usingFile) {    if (opened)      m_cpVoice->WaitUntilDone(INFINITE);    cpWavStream.Release();  }  if (opened)    m_cpVoice.Release();  opened = FALSE;  return TRUE;}BOOL PTextToSpeech_SAPI::Speak(const PString & otext, TextType hint){  PWaitAndSignal m(mutex);  if (!IsOpen())    return FALSE;  PString text = otext;  // do various things to the string, depending upon the hint  switch (hint) {    case Digits:      {      }      break;    default:    ;  };  // quick hack to calculate length of Unicode string  unsigned short * uStr = new unsigned short[text.GetLength()+1];  USES_CONVERSION;  wcscpy(uStr, T2W((const char *)text));  HRESULT hr = m_cpVoice->Speak(uStr, SPF_DEFAULT, NULL);  delete[] uStr;  return SUCCEEDED(hr);}PStringArray PTextToSpeech_SAPI::GetVoiceList(){  PWaitAndSignal m(mutex);  PStringArray voiceList;  CComPtr<ISpObjectToken> cpVoiceToken;  CComPtr<IEnumSpObjectTokens> cpEnum;  ULONG ulCount = 0;  //Enumerate the available voices   HRESULT hr = SpEnumTokens(SPCAT_VOICES, NULL, NULL, &cpEnum);  // Get the number of voices  if (SUCCEEDED(hr))    hr = cpEnum->GetCount(&ulCount);  // Obtain a list of available voice tokens, set the voice to the token, and call Speak  while (SUCCEEDED(hr) && ulCount--) {    cpVoiceToken.Release();    if (SUCCEEDED(hr))      hr = cpEnum->Next(1, &cpVoiceToken, NULL );    if (SUCCEEDED(hr)) {      voiceList.AppendString("voice");    }  }   return voiceList;}BOOL PTextToSpeech_SAPI::SetVoice(const PString & v){  PWaitAndSignal m(mutex);  voice = v;  return TRUE;}BOOL PTextToSpeech_SAPI::SetRate(unsigned v){  rate = v;  return TRUE;}unsigned PTextToSpeech_SAPI::GetRate(){  return rate;}BOOL PTextToSpeech_SAPI::SetVolume(unsigned v){  volume = v;  return TRUE;}unsigned PTextToSpeech_SAPI::GetVolume(){  return volume;}#endif// P_SAPI////////////////////////////////////////////////////////////////  Generic text to speech using Festival//class PTextToSpeech_Festival : public PTextToSpeech{  PCLASSINFO(PTextToSpeech_Festival, PTextToSpeech);  public:    PTextToSpeech_Festival();    ~PTextToSpeech_Festival();    // overrides    PStringArray GetVoiceList();    BOOL SetVoice(const PString & voice);    BOOL SetRate(unsigned rate);    unsigned GetRate();    BOOL SetVolume(unsigned volume);    unsigned GetVolume();    BOOL OpenFile   (const PFilePath & fn);    BOOL OpenChannel(PChannel * channel);    BOOL IsOpen()    { return opened; }    BOOL Close      ();    BOOL Speak      (const PString & str, TextType hint);  protected:    BOOL Invoke(const PString & str, const PFilePath & fn);    PMutex mutex;    BOOL opened;    BOOL usingFile;    PString text;    PFilePath path;    unsigned volume, rate;    PString voice;};PFactory<PTextToSpeech>::Worker<PTextToSpeech_Festival> festivalTTSFactory("Festival", false);PTextToSpeech_Festival::PTextToSpeech_Festival(){  PWaitAndSignal m(mutex);  usingFile = opened = FALSE;  rate = 8000;  volume = 100;}PTextToSpeech_Festival::~PTextToSpeech_Festival(){  PWaitAndSignal m(mutex);}BOOL PTextToSpeech_Festival::OpenChannel(PChannel *){  PWaitAndSignal m(mutex);  Close();  usingFile = FALSE;  opened = FALSE;  return TRUE;}BOOL PTextToSpeech_Festival::OpenFile(const PFilePath & fn){  PWaitAndSignal m(mutex);  Close();  usingFile = TRUE;  path = fn;  opened = TRUE;  PTRACE(3, "TTS\tWriting speech to " << fn);  return TRUE;}BOOL PTextToSpeech_Festival::Close(){  PWaitAndSignal m(mutex);  if (!opened)    return TRUE;  BOOL stat = FALSE;  if (usingFile)    stat = Invoke(text, path);  text = PString();  opened = FALSE;  return stat;}BOOL PTextToSpeech_Festival::Speak(const PString & ostr, TextType hint){  PWaitAndSignal m(mutex);  if (!IsOpen()) {    PTRACE(3, "TTS\tAttempt to speak whilst engine not open");    return FALSE;  }  PString str = ostr;  // do various things to the string, depending upon the hint  switch (hint) {    case Digits:    default:    ;  };  if (usingFile) {    PTRACE(3, "TTS\tSpeaking " << ostr);    text = text & str;    return TRUE;  }  PTRACE(3, "TTS\tStream mode not supported for Festival");  return FALSE;}PStringArray PTextToSpeech_Festival::GetVoiceList(){  PWaitAndSignal m(mutex);  PStringArray voiceList;  voiceList.AppendString("default");  return voiceList;}BOOL PTextToSpeech_Festival::SetVoice(const PString & v){  PWaitAndSignal m(mutex);  voice = v;  return TRUE;}BOOL PTextToSpeech_Festival::SetRate(unsigned v){  rate = v;  return TRUE;}unsigned PTextToSpeech_Festival::GetRate(){  return rate;}BOOL PTextToSpeech_Festival::SetVolume(unsigned v){  volume = v;  return TRUE;}unsigned PTextToSpeech_Festival::GetVolume(){  return volume;}BOOL PTextToSpeech_Festival::Invoke(const PString & otext, const PFilePath & fname){  PString text = otext;  text.Replace('\n', ' ', TRUE);  text.Replace('\"', '\'', TRUE);  text.Replace('\\', ' ', TRUE);  text = "\"" + text + "\"";  PString cmdLine = "echo " + text + " | ./text2wave -F " + PString(PString::Unsigned, rate) + " -otype riff > " + fname;#if 1#ifndef _WIN32_WCE  system(cmdLine);#endif  return TRUE;#else  PPipeChannel cmd;  int code = -1;  if (!cmd.Open(cmdLine, PPipeChannel::ReadWriteStd)) {    PTRACE(2, "TTS\tCannot execute command " << cmd);  } else {    PTRACE(2, "TTS\tCreating " << fname << " using " << cmdLine);    cmd.Execute();    code = cmd.WaitForTermination();    if (code >= 0) {      PTRACE(2, "TTS\tdata generated");    } else {      PTRACE(2, "TTS\tgeneration failed");    }  }  return code == 0;#endif}// End Of File ///////////////////////////////////////////////////////////////

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆精品久久精品色综合| 国产精品88av| 中文字幕一区二区视频| 日本一区二区在线不卡| 欧美经典一区二区| 亚洲婷婷在线视频| 亚洲成av人片一区二区三区| 日本不卡不码高清免费观看| 粉嫩欧美一区二区三区高清影视| 国产91丝袜在线播放0| 在线观看日韩一区| 日本一区二区在线不卡| 五月天亚洲婷婷| 国产69精品久久777的优势| 欧美日本韩国一区二区三区视频| 欧美一个色资源| 中文字幕的久久| 天天综合色天天综合色h| 国产在线播放一区二区三区| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 中文字幕乱码一区二区免费| 亚洲影视在线播放| 99久久久久久| 国产欧美综合在线| 麻豆精品久久精品色综合| 在线观看一区二区视频| 亚洲精品在线观看网站| 午夜av电影一区| 一本大道久久a久久精二百| 日韩一级在线观看| 国产精品久久夜| 美女脱光内衣内裤视频久久影院| 欧美性感一类影片在线播放| 国产精品成人网| 国产成人在线免费| 日韩美女天天操| 天涯成人国产亚洲精品一区av| 色综合欧美在线视频区| 国产亚洲欧美一区在线观看| 日韩电影在线观看电影| 在线视频欧美区| 中文字幕视频一区| 成熟亚洲日本毛茸茸凸凹| 久久综合色婷婷| 九一九一国产精品| 欧美白人最猛性xxxxx69交| 日韩一区欧美二区| 成人福利视频网站| 欧美一级二级三级乱码| 亚洲成av人综合在线观看| 91免费精品国自产拍在线不卡| 国产日韩欧美在线一区| 国产麻豆一精品一av一免费| 欧美成人一级视频| 国产一区福利在线| 国产日韩精品久久久| 国内精品免费**视频| 精品国产污污免费网站入口| 久久成人18免费观看| 欧美精品一区二区三区蜜桃视频| 美女精品一区二区| 久久久精品国产99久久精品芒果| 国产成人精品一区二区三区网站观看| 精品国产凹凸成av人导航| 蓝色福利精品导航| 久久亚洲一区二区三区四区| 国产aⅴ综合色| 亚洲色图欧洲色图婷婷| 欧美伊人久久久久久久久影院| 亚洲在线一区二区三区| 91麻豆精品国产91久久久| 蜜桃av噜噜一区| 国产亚洲一区二区三区在线观看| 国产成人在线色| 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲综合色丁香婷婷六月图片| 欧美少妇bbb| 亚洲一线二线三线久久久| 欧美日韩精品一区二区在线播放| 一区二区三区精品视频在线| 9191成人精品久久| 国产一区二区三区精品欧美日韩一区二区三区| 国产亚洲精品7777| 97久久精品人人做人人爽50路| 樱桃视频在线观看一区| 日韩亚洲欧美一区二区三区| 国产91丝袜在线观看| 亚洲午夜久久久久久久久电影院| 日韩情涩欧美日韩视频| 国产精品中文字幕日韩精品 | 婷婷亚洲久悠悠色悠在线播放 | 91免费版在线| 日日嗨av一区二区三区四区| 欧美一区二区三区在线看| 国产高清在线精品| 午夜视频在线观看一区二区| 久久色.com| 欧美日本韩国一区二区三区视频| 激情综合网最新| 樱花草国产18久久久久| 久久精品一二三| 欧美另类z0zxhd电影| 国产成人一级电影| 日韩在线一区二区| 亚洲色图都市小说| 久久精品视频在线免费观看| 欧美性xxxxx极品少妇| 国产福利电影一区二区三区| 亚洲国产日韩a在线播放 | 亚洲一级片在线观看| 久久精品日韩一区二区三区| 欧美日韩黄视频| 91网址在线看| 国产成人在线电影| 亚洲国产中文字幕| 最新不卡av在线| 久久久www成人免费毛片麻豆| 51久久夜色精品国产麻豆| 色综合天天综合在线视频| 成人免费毛片a| 国产一区二区在线免费观看| 日本欧美韩国一区三区| 午夜一区二区三区视频| 亚洲欧洲制服丝袜| 国产欧美日韩精品a在线观看| 欧美一区二区三区免费在线看| 欧美在线视频你懂得| 91同城在线观看| 不卡一二三区首页| 99久久精品免费看国产| 成人综合在线视频| 捆绑紧缚一区二区三区视频| 亚洲福利视频三区| 亚洲欧美另类图片小说| 亚洲欧美一区二区在线观看| 国产精品久久久久久久久免费桃花| 久久久久久99久久久精品网站| 精品处破学生在线二十三| 日韩欧美资源站| 欧美一二三区在线| 91麻豆精品国产91久久久更新时间 | 欧美日韩一级黄| 欧美日韩激情一区| 91精品国产麻豆国产自产在线| 欧美精品xxxxbbbb| 欧美一区二区三区在线看| 日韩免费在线观看| 精品国产3级a| 欧美激情在线一区二区三区| 日韩欧美的一区二区| 在线不卡免费av| 欧美v亚洲v综合ⅴ国产v| 欧美xxxxxxxxx| 国产亚洲综合色| 亚洲男同1069视频| 午夜欧美在线一二页| 日本va欧美va瓶| 国产高清亚洲一区| 91亚洲精品一区二区乱码| 欧美亚洲禁片免费| 7777精品伊人久久久大香线蕉超级流畅 | 成人美女视频在线看| 欧美三级资源在线| 久久久不卡网国产精品一区| 亚洲国产精品一区二区久久恐怖片 | 丝袜美腿亚洲一区二区图片| 岛国一区二区在线观看| 69av一区二区三区| 亚洲欧美综合网| 精品亚洲免费视频| 在线免费观看视频一区| 国产性色一区二区| 日本中文一区二区三区| 91麻豆国产香蕉久久精品| 欧美精品一区视频| 午夜精品视频一区| 日本久久精品电影| 国产精品免费aⅴ片在线观看| 日韩电影在线免费看| 色综合久久中文字幕| 日本一区二区在线不卡| 久久99热这里只有精品| 欧美日韩国产片| 亚洲另类在线制服丝袜| eeuss国产一区二区三区| 欧美成人三级电影在线| 午夜久久久久久久久| 在线观看日韩一区| 亚洲三级电影全部在线观看高清| 国产精品一品二品| 久久综合一区二区| 久久99精品久久久久久| 91麻豆精品国产91| 日精品一区二区三区| 欧美性大战久久| 亚洲午夜影视影院在线观看| 91蝌蚪porny| 亚洲欧美一区二区三区极速播放| 成人高清视频在线| 国产精品传媒在线|