一个基于WinCE平台的语音识别例子,利用微软speechAPI5.0
#include <windows.h>
#include <sapi.h>
#include <stdio.h>
#include <string.h>
#include <atlbase.h>
#include "sphelper.h"
inline HRESULT BlockForResult(ISpRecoContext * pRecoCtxt, ISpRecoResult ** ppResult)
{
//创建语音识别
HRESULT hr = S_OK;
CSpEvent event;
while (SUCCEEDED(hr) &&
SUCCEEDED(hr = event.GetFrom(pRecoCtxt)) &&
hr == S_FALSE)
{
hr = pRecoCtxt->WaitForNotifyEvent(INFINITE);
}
*ppResult = event.RecoResult();
if (*ppResult)
{
(*ppResult)->AddRef();
}
return hr;
}
const WCHAR * StopWord()
{
const WCHAR * pchStop;
LANGID LangId = ::SpGetUserDefaultUILanguage();
switch (LangId)
{
case MAKELANGID(LANG_JAPANESE, SUBLANG_DEFAULT):
pchStop = L"/x7d42/x4e86///x30b7/x30e5/x30fc/x30ea/x30e7/x30fc//x3057/x3085/x3046/x308a/x3087/x3046";;
break;
default:
pchStop = L"Stop";
break;
}
return pchStop;
}
int _tmain(int argc, TCHAR* argv[])
{
HRESULT hr = E_FAIL;
bool fUseTTS = true; // turn TTS play back on or off
bool fReplay = true; // turn Audio replay on or off
TCHAR szFileName[256];
// Process optional arguments
if (argc > 1)
{
int i;
for (i = 1; i < argc; i++)
{
if (_tcsicmp(argv[i], _T("-noTTS")) == 0)
{
fUseTTS = false;
continue;
}
if (_tcsicmp(argv[i], _T("-noReplay")) == 0)
{
fReplay = false;
continue;
}
if (_tcsicmp(argv[i], _T("-f")) == 0)
{
if( ++i < argc )
{
_tcscpy(szFileName, argv[i]);
continue;
}
}
#ifndef _WIN32_WCE
printf ("Usage: %s [-noTTS] [-noReplay] /n", argv[0]);
#else
RETAILMSG(TRUE,(_T("Usage: %s [-noTTS] [-noReplay] /n"), argv[0]));
#endif
return hr;
}
}
if (SUCCEEDED(hr = :: CoInitializeEx(NULL,COINIT_MULTITHREADED)))
{
{
CComPtr<ISpRecoContext> cpRecoCtxt;
CComPtr<ISpRecoGrammar> cpGrammar;
CComPtr<ISpVoice> cpVoice;
#ifndef _WIN32_WCE
hr = cpRecoCtxt.CoCreateInstance(CLSID_SpSharedRecoContext);
#else
// CLSID_SpInProcRecoContext is only defined when SAPI_AUTOMATION is
// defined, as a result, the following line doesn't work on CE. As a workaround, I
// create an inproc recognizer and get a reco context from that.
//cpRecoCtxt.CoCreateInstance(CLSID_SpInProcRecoContext);
CComPtr<ISpRecognizer> m_cpEngine;
m_cpEngine.CoCreateInstance(CLSID_SpInprocRecognizer);
m_cpEngine->CreateRecoContext( &cpRecoCtxt );
#endif
if(SUCCEEDED(hr))
{
hr = cpRecoCtxt->GetVoice(&cpVoice);
}
if (!cpRecoCtxt || !cpVoice)
{
hr = E_FAIL;
}
if(SUCCEEDED(hr))
{
hr = cpRecoCtxt->SetNotifyWin32Event();
}
if(SUCCEEDED(hr))
{
hr = cpRecoCtxt->SetInterest(SPFEI(SPEI_RECOGNITION), SPFEI(SPEI_RECOGNITION));
}
if(SUCCEEDED(hr))
{
hr = cpRecoCtxt->SetAudioOptions(SPAO_RETAIN_AUDIO, NULL, NULL);
}
if(SUCCEEDED(hr))
{
hr = cpRecoCtxt->CreateGrammar(0, &cpGrammar);
}
//debug
// if(SUCCEEDED(hr))
// {
// hr = cpGrammar->LoadCmdFromFile( szFileName, SPLO_STATIC );
// }
//debug
if(SUCCEEDED(hr))
{
hr = cpGrammar->LoadDictation(NULL, SPLO_STATIC);
}
if(SUCCEEDED(hr))
{
hr = cpGrammar->SetDictationState(SPRS_ACTIVE);
}
if(SUCCEEDED(hr))
{
USES_CONVERSION;
const WCHAR * const pchStop = StopWord();
CComPtr<ISpRecoResult> cpResult;
#ifndef _WIN32_WCE
printf( "I will repeat everything you say./nSay /"%s/" to exit./n", W2A(pchStop) );
#else
RETAILMSG(TRUE,( _T("I will repeat everything you say./nSay /"%s/" to exit./n"), pchStop));
#endif
if (fUseTTS)
{
cpVoice->Speak( L"I will repeat everything you say.", SPF_ASYNC, NULL);
cpVoice->Speak( L"Say stop to exit.", SPF_ASYNC, NULL);
cpVoice->Speak( L"Say <emph> stop </emph> to exit.", SPF_ASYNC | SPF_IS_XML, NULL);
}
while (SUCCEEDED(hr = BlockForResult(cpRecoCtxt, &cpResult)))
{
cpGrammar->SetDictationState( SPRS_INACTIVE );
CSpDynamicString dstrText;
if (SUCCEEDED(cpResult->GetText(SP_GETWHOLEPHRASE, SP_GETWHOLEPHRASE,
TRUE, &dstrText, NULL)))
{
#ifndef _WIN32_WCE
printf("I heard: %s/n", W2A(dstrText));
#else
RETAILMSG(TRUE,( _T("I heard: %s/n"), dstrText));
#endif
if (fUseTTS)
{
cpVoice->Speak( L"I heard", SPF_ASYNC, NULL);
cpVoice->Speak( dstrText, SPF_ASYNC, NULL );
}
if (fReplay)
{
if (fUseTTS)
cpVoice->Speak( L"when you said", SPF_ASYNC, NULL);
else
{
#ifndef _WIN32_WCE
printf ("/twhen you said.../n");
#else
RETAILMSG(TRUE,( _T("/twhen you said.../n")));
#endif
}
cpResult->SpeakAudio(NULL, 0, NULL, NULL);
}
cpResult.Release();
}
if (_wcsicmp(dstrText, pchStop) == 0)
{
break;
}
cpGrammar->SetDictationState( SPRS_ACTIVE );
}
}
}
::CoUninitialize();
}
return hr;
}
转载于:https://www.cnblogs.com/nsoft/archive/2012/06/28/2568625.html
一个基于WinCE平台的语音识别例子,利用微软speechAPI5.0相关推荐
- 卡路里计算JAVA_pedometer 这是一个基于android平台的软件,用于计算你走路的步数,算出消耗的卡路里,以达到健 238万源代码下载...
详细说明:这是一个基于android平台的软件,用于计算你走路的步数,算出消耗的卡路里,以达到健康的管理.-This is an android platform based software, us ...
- 一起谈.NET技术,发布NGuestBook(一个基于.NET平台的分层架构留言本小系统)
发布NGuestBook的动机说明 大约在半年前,我在博客上发表了一个系列文章:<基于.NET平台的分层架构实战>.当时在讲解过程中用到了一个叫NGuestBook的案例,在那以 ...
- 发布NGuestBook(一个基于.NET平台的分层架构留言本小系统)
发布NGuestBook的动机说明 大约在半年前,我在博客上发表了一个系列文章:<基于.NET平台的分层架构实战>.当时在讲解过程中用到了一个叫NGuestBook的案例,在那以后,有很多 ...
- 基于HTK中文普通话语音识别DEMO,LilyMandarinSpeechRecognition V1.0
DEMO简介: 这是一个中文普通话语音识别的最简单DEMO,LilyMandarinSpeechRecognition V1.0. 首先给出这款软件的下载链接: DEMO_LilyMandarinSp ...
- 基于android平台的语音机器人服务娱乐系统
分 类 号:TP311 学校代码:11460 学 号:10130920 本科生毕业论文 基于android平台的语音机器人服务娱乐系统 Robot Entertainment Service Syst ...
- 光学模拟 Android,基于Android平台的光学字符识别应用的设计与实现
摘要: 随着数字化时代的蓬勃发展,信息量以指数级的速度增长,然而手工录入并存储信息的速度远不及信息的产生速度.光学字符识别(OCR)技术能够自动化地检测信息并识别出来,有效地解决了信息录入速度和正确率 ...
- java android 五子棋游戏_基于Android平台五子棋游戏最终版.doc
基于Android平台五子棋游戏最终版 毕业设计(论文)任务书 毕业设计(论文)题目: 基于android平台的五子棋游戏的设计与实现 毕业设计(论文)要求及原始数据(资料): 1.综述国内基于and ...
- android控制中心实现,基于Android平台的智能家居系统控制中心的设计与实现
摘要: 随着科技的发展,人民生活水平的提高,人们对住宅的要求也越来越高,智能家居就是为解决人们的这一要求诞生的.自1984年第一栋智能建筑诞生以来,世界上出现了很多智能家居解决方案,但都或多或少的存在 ...
- android手机舆情分析,基于Android平台的环境公共舆情监督系统研究
摘要: 近年来,随着我国社会经济的持续发展和人民生活水平的不断提高,人们的环境保护意识也在不断增长,其中城市环境质量问题逐渐成为了人们普遍关注的焦点,也成为环保部门和环保从业人员的重点研究方向.环境监 ...
最新文章
- 汉字转换成html,汉字与16进制、汉字与Html转义符的转换
- Java面试题,深入理解final关键字
- 全球及中国智能音箱市场规模产值及发展机遇研究报告2021-2027年
- 《系统集成项目管理工程师》必背100个知识点-26项目范围管理
- 【转】让itunes下载加速的真正办法,转向至香港台湾澳门苹果服务器 -- 不错不错!!!...
- 单机负载告警,数据库与应用分离
- 一站式体验腾讯云音视频及融合通信技术
- 二维数组求最小值_05-最大子矩形-最大值减去最小值小于或等于num的子数组数量...
- js forEach
- MySQL innodb每行数据长度的限制
- 吴恩达《机器学习》第二章:线性回归
- 如何在Mac上的一个“预览”窗口中显示若干文件
- 卸载软件时,出现解压缩支持文件时出错,灾难性故障--转载
- Oracle项目管理系统P6 EPPM企业级规划方案
- QQ坦白说解密解决方案(二)
- java包是什么意思_java中的“包”到底是什么意思?
- Android系统篇之—-Android中的run-as命令引出升降权限的安全问题(Linux中的setuid和setgid)
- Errors集锦-数据库-file /usr/share/mysql/czech/errmsg.sys from install of mysql-community-common-5.7.16-1.
- 英语美文-不做有才华的穷人
- 数据字典(Data Dictionary)
热门文章
- linux删除eth2设备_Linux卸载/删除多余网卡
- java线程main异常,‘java.lang.NoSuchMethodError:main的原因’线程中的异常“main”’...
- 在虚拟机上安装Kali Linux的简易指南
- python bytes_Python bytes()
- python ftp_Python FTP
- java输入一串字符串反转_反转Java中的字符串
- __strong、__weak 与 __unsafe_unretained区别
- pythoon介绍、安装环境、基础知识、练习题
- 《编写高质量代码:改善Python程序的91个建议》读后感
- HDOJ 2035 人见人爱A^B