当前位置: 首页 > news >正文

宣讲家网站美丽乡村建设2022全国封城名单

宣讲家网站美丽乡村建设,2022全国封城名单,建设文库网站,百度网络营销推广转自#xff1a;http://blog.vckbase.com/iwaswzq/archive/2009/05/22/22382.html 一、SAPI简介 软件中的语音技术包括两方面的内容#xff0c;一个是语音识别(speech recognition) 和语音合成(speech synthesis)。这两个技术都需要语音引擎的支持。微软推出的应用编程接口…转自http://blog.vckbase.com/iwaswzq/archive/2009/05/22/22382.html 一、SAPI简介 软件中的语音技术包括两方面的内容一个是语音识别(speech recognition) 和语音合成(speech synthesis)。这两个技术都需要语音引擎的支持。微软推出的应用编程接口API虽然现在不是业界标准但是应用比较广泛。 SAPI全称 The Microsoft Speech API.相关的SR和SS引擎位于Speech SDK开发包中。这个语音引擎支持多种语言的识别和朗读包括英文、中文、日文等。 SAPI包括以下组件对象接口 1Voice Commands API。对应用程序进行控制一般用于语音识别系统中。识别某个命令后会调用相关接口是应用程序完成对应的功能。如果程序想实现语音控制必须使用此组对象。 2Voice Dictation API。听写输入即语音识别接口。 3Voice Text API。完成从文字到语音的转换即语音合成。 4Voice Telephone API。语音识别和语音合成综合运用到电话系统之上利用此接口可以建立一个电话应答系统甚至可以通过电话控制计算机。 5Audio Objects API。封装了计算机发音系统。 SAPI是架构在COM基础上的微软还提供了ActiveX控件所以不仅可用于一般的windows程序还可以用于网页、VBA甚至EXCEL的图表中。如果对COM感到陌生还可以使用微软的C WRAPPERS它用C类封装了语音SDK COM对象。 二、安装SAPI SDK。 首先从这个站点下载开发包http://www.microsoft.com/speech/download/sdk51 Microsoft Speech SDK 5.1添加了Automation支持。所以可以在VB,ECMAScript等支持Automation的语言中使用。 版本说明 Version: 5.1 发布日期: 8/8/2001 语音: English 下载尺寸: 2.0 MB - 288.8 MB 这个SDK开发包还包括了可以随便发布的英文和中文的语音合成引擎(TTS)和英文、中文、日文的语音识别引擎(SR)。 系统要求98以上版本。编译开发包中的例子程序需要vc6以上环境。 ******下载说明****** 1如果要下载例子程序说明文档SAPI以及用于开发的美国英语语音引擎需要下载SpeechSDK51.exe大约68M。 2如果想要使用简体中文和日文的语音引擎需要下载SpeechSDK51LangPack.exe。大约82M。 3如果想要和自己的软件一起发布语音引擎需要下载SpeechSDK51MSM.exe大约132M。 在这个地址我未能成功下载。 4如果要获取XP下的 Mike 和 Mary 语音下载Sp5TTIntXP.exe。大约3.5M。 5如果要获取开发包的文档说明请下载sapi.chm。大约2.3M。这个在sdk51里面已经包含。 下载完毕后首先安装SpeechSDK51.exe然后安装中文语言补丁包SpeechSDK51LangPack然后展开 msttss22l自动将所需dll安装到系统目录。 三、配置vc环境 在vc6.0的环境下编译语音工程首先要配置编译环境。假设sdk安装在d:/Microsoft Speech SDK 5.1/路径下打开工程设置对话框在c/c栏中选择Preprocessor分类然后在附加包含路径中输入 d:/Microsoft Speech SDK 5.1/include 告诉vc编译程序所需的SAPI头文件的位置。 然后切换到LINK栏在Input分类下的附加库路径中输入 d:/Microsoft Speech SDK 5.1/lib/i386 使vc在链接的时候能够找到sapi.lib。 四、语音合成的应用。即使用SAPI实现TTS(Text to Speech)。 1、首先要初始化语音接口一般有两种方式 ISpVoice* pVoice; ::CoInitialize(NULL); HRESULT hr CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)pVoice); 然后就可以使用这个指针调用SAPI函数了例如 pVoice-SetVolume(50);//设置音量 pVoice-Speak(str.AllocSysString(),SPF_ASYNC,NULL); 另外也可以使用如下方式 CComPtr m_cpVoice; HRESULT hr m_cpVoice.CoCreateInstance( CLSID_SpVoice ); 在下面的例子中都用这个m_cpVoice变量。 CLSID_SpVoice的定义位于SPAI.H中。 2、获取/设置输出频率。 SAPI朗读文字的时候可以采用多种频率方式输出声音比如 8kHz 8Bit Mono、8kHz 8Bit Stereo、44kHz 16Bit Mono、44kHz 16Bit Stereo等。在音调上有所差别。具体可以参考sapi.h。 可以使用如下代码获取当前的配置 CComPtr cpStream; HRESULT hrOutputStream m_cpVoice-GetOutputStream(cpStream); if (hrOutputStream S_OK) { CSpStreamFormat Fmt; hr Fmt.AssignFormat(cpStream); if (SUCCEEDED(hr)) { SPSTREAMFORMAT eFmt Fmt.ComputeFormatEnum(); } } SPSTREAMFORMAT 是一个ENUM类型定义位于SPAI.H中。每一个值对应了不同的频率设置。例如 SPSF_8kHz8BitStereo 5 通过如下代码设置当前朗读频率 CComPtr m_cpOutAudio; //声音输出接口 SpCreateDefaultObjectFromCategoryId( SPCAT_AUDIOOUT, m_cpOutAudio ); //创建接口 SPSTREAMFORMAT eFmt 21; //SPSF_22kHz 8Bit Stereo CSpStreamFormat Fmt; Fmt.AssignFormat(eFmt); if ( m_cpOutAudio ) { hr m_cpOutAudio-SetFormat( Fmt.FormatId(), Fmt.WaveFormatExPtr() ); } else hr E_FAIL; if( SUCCEEDED( hr ) ) { m_cpVoice-SetOutput( m_cpOutAudio, FALSE ); } 3、获取/设置播放所用语音。 引擎中所用的语音数据文件一般保存在SpeechEngines下的spd或者vce文件中。安装sdk后在注册表中保存了可用的语音比如英文的男/女简体中文的男音等。位置是 HKEY_LOCAL_MACHINE/Software/Microsoft/Speech/Voices/Tokens 如果安装在中文操作系统下则缺省所用的朗读语音是简体中文。SAPI的缺点是不能支持中英文混读在朗读中文的时候遇到英文只能逐个字母读出。所以需要程序自己进行语音切换。 (1) 可以采用如下的函数把当前SDK支持的语音填充在一个组合框中 // SAPI5 helper function in sphelper.h HWND hWndCombo GetDlgItem( hWnd, IDC_COMBO_VOICES ); //组合框句柄 HRESULT hr SpInitTokenComboBox( hWndCombo , SPCAT_VOICES ); 这个函数是通过IEnumSpObjectTokens接口枚举当前可用的语音接口把接口的说明文字添加到组合框中并且把接口的指针作为LPARAM 保存在组合框中。 一定要记住最后程序退出的时候释放组合框中保存的接口 SpDestroyTokenComboBox( hWndCombo ); 这个函数的原理就是逐个取得combo里面每一项的LPARAM数据转换成IUnknown接口指针然后调用Release函数。 (2) 当组合框选择变化的时候可以用下面的函数获取用户选择的语音 ISpObjectToken* pToken SpGetCurSelComboBoxToken( hWndCombo ); (3) 用下面的函数获取当前正在使用的语音 CComPtr pOldToken; HRESULT hr m_cpVoice-GetVoice( pOldToken ); (4) 当用户选择的语音和当前正在使用的不一致的时候用下面的函数修改 if (pOldToken ! pToken) { // 首先结束当前的朗读这个不是必须的。 HRESULT hr m_cpVoice-Speak( NULL, SPF_PURGEBEFORESPEAK, 0); if (SUCCEEDED (hr) ) { hr m_cpVoice-SetVoice( pToken ); } } (5) 也可以直接使用函数SpGetTokenFromId获取指定voice的Token指针例如 WCHAR pszTokenId[] LHKEY_LOCAL_MACHINE//Software//Microsoft//Speech//Voices//Tokens//MSSimplifiedChineseVoice; SpGetTokenFromId(pszTokenID , pChineseToken); 4、开始/暂停/恢复/结束当前的朗读 要朗读的文字必须位于宽字符串中假设位于szWTextString中则 开始朗读的代码 hr m_cpVoice-Speak( szWTextString, SPF_ASYNC | SPF_IS_NOT_XML, 0 ); 如果要解读一个XML文本用 hr m_cpVoice-Speak( szWTextString, SPF_ASYNC | SPF_IS_XML, 0 ); 暂停的代码 m_cpVoice-Pause(); 恢复的代码 m_cpVoice-Resume(); 结束的代码上面的例子中已经给出了 hr m_cpVoice-Speak( NULL, SPF_PURGEBEFORESPEAK, 0); 5、跳过部分朗读的文字 在朗读的过程中可以跳过部分文字继续后面的朗读代码如下 ULONG ulGarbage 0; WCHAR szGarbage[] LSentence; hr m_cpVoice-Skip( szGarbage, SkipNum, ulGarbage ); SkipNum是设置要跳过的句子数量值可以是正/负。 根据sdk的说明目前SAPI仅仅支持SENTENCE这个类型。SAPI是通过标点符号来区分句子的。 6、播放WAV文件。SAPI可以播放WAV文件这是通过ISpStream接口实现的 CComPtr cpWavStream; WCHAR szwWavFileName[NORM_SIZE] L;; USES_CONVERSION; wcscpy( szwWavFileName, T2W( szAFileName ) );//从ANSI将WAV文件的名字转换成宽字符串 //使用sphelper.h 提供的这个函数打开 wav 文件并得到一个 IStream 指针 hr SPBindToFile( szwWavFileName, SPFM_OPEN_READONLY, cpWavStream ); if( SUCCEEDED( hr ) ) { m_cpVoice-SpeakStream( cpWavStream, SPF_ASYNC, NULL );//播放WAV文件 } 7、将朗读的结果保存到wav文件 TCHAR szFileName[256];//假设这里面保存着目标文件的路径 USES_CONVERSION; WCHAR m_szWFileName[MAX_FILE_PATH]; wcscpy( m_szWFileName, T2W(szFileName) );//转换成宽字符串 //创建一个输出流绑定到wav文件 CSpStreamFormat OriginalFmt; CComPtr cpWavStream; CComPtr cpOldStream; HRESULT hr m_cpVoice-GetOutputStream( cpOldStream ); if (hr S_OK) hr OriginalFmt.AssignFormat(cpOldStream); else hr E_FAIL; // 使用sphelper.h中提供的函数创建 wav 文件 if (SUCCEEDED(hr)) { hr SPBindToFile( m_szWFileName, SPFM_CREATE_ALWAYS, cpWavStream, OriginalFmt.FormatId(), OriginalFmt.WaveFormatExPtr() ); } if( SUCCEEDED( hr ) ) { //设置声音的输出到 wav 文件而不是 speakers m_cpVoice-SetOutput(cpWavStream, TRUE); } //开始朗读 m_cpVoice-Speak( szWTextString, SPF_ASYNC | SPF_IS_NOT_XML, 0 ); //等待朗读结束 m_cpVoice-WaitUntilDone( INFINITE ); cpWavStream.Release(); //把输出重新定位到原来的流 m_cpVoice-SetOutput( cpOldStream, FALSE ); 8、设置朗读音量和速度 m_cpVoice-SetVolume((USHORT)hpos); //设置音量范围是 0 - 100 m_cpVoice-SetRate(hpos); //设置速度范围是 -10 - 10 hpos的值一般位于 9、设置SAPI通知消息。SAPI在朗读的过程中会给指定窗口发送消息窗口收到消息后可以主动获取SAPI的事件 根据事件的不同用户可以得到当前SAPI的一些信息比如正在朗读的单词的位置当前的朗读口型值用于显 示动画口型中文语音的情况下并不提供这个事件等等。 要获取SAPI的通知首先要注册一个消息 m_cpVoice-SetNotifyWindowMessage( hWnd, WM_TTSAPPCUSTOMEVENT, 0, 0 ); 这个代码一般是在主窗口初始化的时候调用hWnd是主窗口或者接收消息的窗口句柄。WM_TTSAPPCUSTOMEVENT 是用户自定义消息。 在窗口响应WM_TTSAPPCUSTOMEVENT消息的函数中通过如下代码获取sapi的通知事件 CSpEvent event; // 使用这个类比用 SPEVENT结构更方便 while( event.GetFrom(m_cpVoice) S_OK ) { switch( event.eEventId ) { 。。。 } } eEventID有很多种比如SPEI_START_INPUT_STREAM表示开始朗读SPEI_END_INPUT_STREAM表示朗读结束等。 可以根据需要进行判断使用。 示例程序代码下载http://download.csdn.net/source/2918975 Powered by Zoundry Raven
http://www.dnsts.com.cn/news/150365.html

相关文章:

  • 郑州餐饮网站建设哪家好网站建设的提成
  • 南京学校网站制作英文网站模版
  • 做配资网站多少钱网站完成上线时间
  • 瑞金网站建设推广响应式网站开发图标
  • php 网站配置电子商务网站平台有哪些
  • wed网站开发是什么衡水网站设计怎么做
  • 洛阳网站seo昆山那个网站推广好
  • 网站项目设计书大岭山做网站
  • 模板网站的优势有哪些wordpress如何建企业站
  • 自适应网站建设极速建站网页设计欣赏及点评
  • 巴塘网站建设佛山网站建设网站制作公司
  • 广州手机建站模板交互式网站开发技术
  • 哪些网站是动态关于网站策划的说法错误的是
  • 扬中网站建设策划那里可以建设网站
  • 深圳网站制作搜行者seo网页界面设计的特点是什么
  • 联谊会总结网站建设对外宣传网站做常规优化
  • 通辽网站公司软件开发机构
  • 查数据的网站有哪些网站开发与技术维护
  • 免费软件库合集软件资料网站创业做旅游网站
  • 自己做电视视频网站汕头站扩建
  • 耐克运动鞋网站建设规划书框架宿迁网站优化
  • 三九集团如何进行网站建设wordpress主题next推荐
  • 我想在阿里巴巴做卫生纸的网站qq钓鱼网站生成器手机版
  • spark网站开发专题网站建设策划
  • 诸暨市建设局网站网站快照出现两个
  • 网站上怎么做推广做网站的难点
  • 网站开发+兼职挣钱吗jsp做网站注册页面
  • 北京网站建设 地址海淀做网站的图片需要多少钱
  • 工业和信息化部关于开展加强网站备案管理专项行动的通知北京营销策划公司有哪些
  • 网站后台代码添加图片天津网站建设优化