实验二 语音交互设计TTS-基于图形用户界面

合集下载

基于语音识别的语音交互系统设计与实现

基于语音识别的语音交互系统设计与实现

基于语音识别的语音交互系统设计与实现随着人工智能和智能音箱的兴起,语音交互系统成为了近年来的热点技术之一。

语音交互系统可以使得用户通过语音指令来控制各种智能设备,从而提高生活的便利性和舒适度。

而语音识别技术则是实现语音交互的核心技术之一。

本文将以基于语音识别的语音交互系统设计与实现为主题,讨论语音交互技术的应用与前景,以及如何基于语音识别技术来实现语音交互系统的设计和开发。

一、语音交互技术的应用与前景语音交互技术的应用越来越广泛,如智能音箱、智能家居、智能安防等,这些设备已经成为了人们生活中必不可少的一部分。

而语音交互技术的前景也十分广阔,可以应用于更多领域。

例如,语音识别技术可以用于医学诊断和健康监护,也可以应用于安全保障和智能教育等领域。

二、语音识别技术的原理与方法语音识别技术是指将说话人的语音转化为计算机可识别的文本,实现语音信号到文本的转换,从而实现机器学习语音并与人进行交互。

语音识别技术的原理为:语音信号采样→语音信号的预处理→声学模型的建立→解码识别→文本输出。

其中,最核心的部分是声学模型的建立和解码识别。

语音识别技术主要有基于概率模型的方法和基于深度学习的方法。

基于概率模型的方法主要有隐马尔科夫模型,其基本思想就是通过计算观测序列和目标语音模型的概率之间的最大值来确定最佳模型。

而基于深度学习的方法则主要有循环神经网络和卷积神经网络,通过输入大量的训练数据,不断优化神经网络参数,从而实现较高的语音识别准确率。

三、基于语音识别的语音交互系统设计与实现基于语音识别的语音交互系统的设计和实现,需要考虑到系统的前端采集、后台处理、语音识别算法、文本输出等方面。

其中,语音识别技术是系统的核心部分。

该系统的设计应以简洁易用、稳定性好、交互性强、代码可维护性强等方面考虑。

下面将介绍该系统的主要模块。

1.前端采集前端采集模块主要有麦克风采集、音频编码和音频传输。

麦克风采集部分可以采用常用的麦克风阵列进行语音采集。

TTS开发步骤_基于图形界面

TTS开发步骤_基于图形界面

事件驱动的文本语音转换(TTS)实例介绍一个基本的文字转语音的例子,应用程序使用图形界面(非控制台应用程序)建立项目首先,创建一个新的windows 32平台应用程序项目,在向导中,选择一个典型的“Hello world!”应用。

由此产生的项目代码比命令行版本的长,且大多数新的复杂代码与sapi关系不大,但是是实现图形界面所必须的代码。

设置sapi的路径与SAPI相关的文件路径必须在项目中声明。

以下是设置“sapi.h”路径的步骤:1,在菜单上,选择工具“Tools”,然后单击选项“Options”。

2,单击“Directories”选项卡。

3,选择“Include Files”下拉式选单4,单击最后一行闲置在路径清单,并输入“sapi.h”的文件路径:“C:/ProgramFiles/Microsoft Speech SDK 5.1/Include”5,选择“Library Files”下拉式选单,并输入“sapi.lib”的文件路径:“C:/ProgramFiles/Microsoft Speech SDK 5.1/Lib/i386”。

最后单击确定。

创建“Speak”菜单命令为了使应用程序响应我们发出“Speak”命令,并且发出声音,需要对自动生成的菜单项做一些修改。

读者可以通过VC6.0的资源管理器,在“File”菜单下面,增加一个“Speak”命令项,并且将该命令项的资源ID设置为“IDM_SPEAK”。

后文再讲述如何处理这个命令事件的代码。

现在先来编译和运行这个应用程序,确保以上的设置准确无误。

程序除了在屏幕上面显示“Hello world”之外,其它什么事情也没做,但是它确实可以运行起来了。

使用这个实例第1步:初始化com第2步:设置声音第3步:讲!第4步:设置感兴趣的事件第5步:确定事件类型第6步:响应事件第1步:初始化com用一个winmain中的程序段说明。

唯一的限制是在使用任何sapi的特定代码前com必须是初始化完成了,并且在运行sapi过程中,COM一直都是活动的。

人工智能语音交互界面设计

人工智能语音交互界面设计

人工智能语音交互界面设计随着人工智能技术的发展,语音交互成为了一种越来越常见的人机交互方式。

语音交互的特点在于其快速、简单、直观,让用户能够更加方便地完成各种操作。

越来越多的应用程序也开始采用语音交互界面,比如智能音箱、汽车语音导航、智能家居等。

为了让用户更加愉悦、自然地使用语音交互界面,设计师需要考虑多种因素,这篇文章将从设计角度探究如何设计一款优秀的人工智能语音交互界面。

1. 了解用户任何界面的设计都需要围绕用户,语音交互界面也不例外。

设计师需要考虑用户使用场景、需求以及偏好等因素,来确定界面的设计方向。

比如,在设计汽车语音导航界面时,需要考虑用户在驾车时的安全驾驶,所以界面需要注重简洁、易用,让用户操作时能够不分心。

此外,用户对于语音交互界面响应速度的要求也很高,设计师需要确保界面响应及时、准确。

同时,界面的交互方式也需要符合用户的习惯,这样能够减少用户在使用时的不适感,提高用户的满意度。

2. 设计可视化元素语音交互界面虽然不需要过多的视觉元素来支持其交互,但是一些小的图标、颜色、声音等元素仍然可以起到辅助作用。

比如,在语音助手中,设计师可以使用合适的语音音效来提示用户,比如模拟人的声音、响亮的提示音效等,这样可以让用户感觉更加亲切自然。

在商业应用中,可以加入一些品牌元素,比如商标、logo等,这样能够让用户在使用时产生品牌认可度,同时有利于品牌的宣传。

3. 语音交互流程设计语音交互界面的交互方式与传统的界面有很大的不同,需要设计师来根据交互流程来梳理交互上下文,及时跟踪交互过程,并进行反馈和提醒。

比如,在语音助手中,用户需要说出自己的目标,然后系统需要通过语音辨别技术进行语音识别、欧氏距离算法、语音情感识别等技术,最终输出符合要求的答案,同时这些答案也需要语音助手进行反馈,使得用户更加理解自己的操作步骤,从而更加方便快捷的完成各种操作。

4. 信息设计语音交互界面的信息设计关键是指导用户完成各种操作,而不是让用户发现如何使用交互元素和控件。

带有语音提示功能的界面设计与开发

带有语音提示功能的界面设计与开发

人机交互基础教程实验报告实验题目:带有语音提示功能的界面设计与开发专业计算机科学与技术学生姓名班级学号教师指导单位计算机软件学院日期教师评语教师签名:年月日成绩评定备注一、实验目的1)通过开发一个简单的具有语音提示功能的人机交互系统,使同学了解多通道交互系统的优点和交互模型的构建方法。

2)理解语音合成技术的基本原理。

3)了解和掌握Microsoft speech sdk的使用方法。

二、实验器材1.配有语音卡、耳麦、扬声器等多媒体设备的PC机2. Windows操作系统3. MS Speech SDK三、实验说明1.MS Speech SDK简介:为解决语音引擎之间不兼容的问题,微软推出了一套语音应用程序开发的软件开发资源包Speech SDK,方便开发人员使用资源包开发语音识别和语音合成的应用程序,隔离了应用软件与语音引擎之间的联系,使得语音引擎的更换不会影响到应用程序的设计。

2.Speech SDK基本工作原理作为应用程序开发者,只需调用speech sdk中的函数,即可实现语音合成与语音识别功能。

3.下载安装从Microsoft官方下载站点搜索Speech SDK 5.1并下载安装,中文语言包可选择安装。

安装好Speech SDK后,语音控制程序将被添加到“控制面板”->“语音”选项中。

利用下图对话框可以设置语音识别和文字-语音转换的各项属性,包括语言、语调、语速和输入设备等。

三、实验内容与步骤(1)实验内容在visual c++或.net环境下,用微软的Speech SDK实现一个具有语音提示功能的界面,要求设计交互模型,并根据实际应用情况来确定是否要用语音。

调用Speech sdk的方法简述如下:首先在visual c++主窗口的菜单栏中选择“工程”-> “设置”。

在弹出对话框中选择“c/c++”选项卡,在分类中选择“preprocessor”,在附加包含路径中,输入speech sdk安装路径下的include目录,如:C:\Program Files\Microsoft Speech SDK 5.1\Include然后选择“link”选项卡,在分类中选择“Input”,在附加库路径中,输入speech sdk安装路径下的lib目录,如:C:\Program Files\Microsoft Speech SDK 5.1\Lib\i386程序中的关键代码如下:#include <sapi.h>#include <sphelper.h> //引入头文件,以调用SDK中的APIUpdateData();ISpV oice * pV oice = NULL;if (FAILED(CoInitialize(NULL))){AfxMessageBox("Error to intiliaze COM");return;}//初始化COMHRESULT hr = CoCreateInstance(CLSID_SpV oice, NULL, CLSCTX_ALL, IID_ISpV oice, (void **)&pVoice);if( SUCCEEDED( hr ) ){hr = pV oice->SetV olume(80);//音量控制0~100hr = pV oice->SetRate(0);//语速控制-5~5hr = pV oice->Speak(L“hello world”, SPF_DEFAULT, NULL);//语音的内容ISpObjectToken * spToken = NULL;if (SUCCEEDED(SpFindBestToken(SPCAT_VOICES, L"language=804", NULL, &SpToken))) { pV oice->SetVoice(SpToken);//切换至中文语音模式,language=804代表中文,409代表英文pV oice->Speak(L"世界你好", SPF_DEFAULT, NULL);SpToken->Release();}if (SUCCEEDED(SpFindBestToken(SPCA T_VOICES, L"language=409", L"Name=Microsoft Mike", &SpToken)))//说话人控制{pV oice->SetVoice(SpToken);pV oice->Speak(L"This is Mike speaking", SPF_DEFAULT, NULL);SpToken->Release();}pV oice->Speak(L"<LANG LANGID='804'>你好</LANG> ", SPF_IS_XML, NULL);//也可直接写成xml标签的格式pV oice->Speak(L"This sounds normal <pitch middle = '-10'/> but the pitch drops half way through", SPF_IS_XML, NULL ); //声调控制,-代表低音,+代表高音pV oice->Release();pV oice = NULL;}CoUninitialize();Speech sdk还有很多功能,详见安装目录下的帮助文档。

人机交互实验报告

人机交互实验报告
学生成绩管理系统为管理员、教师和学生提供服务接口以便他们进行管理操作。同时,还为系统提供数据服务接口来管理系统。
任务金字塔:
系统总体功能需求如图所示:
4)对自已设计界面的分析:
在进入界面开始,我设计的这个界面简洁,按钮文字很清楚的描述了所带的功能,用户会比较快的时间内掌握此软件的使用。此界面清爽,颜色柔和,并且增加了一些小工具,我设计的这款软件就是为了满足用户的需求,则在需求分析中就设计到了这点,这款软件暂时集合了这些功能来满足学生,老师,管理员可以合理的管理好信息,同时也结合良好的界面,估计用户对这款软件会比较满意。
下面使用了用例图的方式表现了整个系统的所有功能。
管理员用例图:
教师用例图:
学生用例图:
6)顺序图:
顺序图表示了对象之间传送消息的时间顺序。
图1.添加学生信息顺序图
图2.修改学生信息顺序图
图3.删除学生信息顺序图
学生查询成绩序列图:
7)协作图:
协作图和序列图都可以表示各对象间的交互关系,但它们的侧重点不同。序列图用消息的几何排列关系来表达消息的时间顺序,各角色之间的相关关系是隐含的。
总之,我们在设计图形用户界面时要以用户为中心,正确的理解和运用图形用户界面的思想。
1)一般性原则
2)颜色的使用
3)图标的设计。按钮的设计
4)屏幕布局的设计,菜单界面的设计
5)填表输入界面的设计
二.实验设计题目
1)题目名称:
学生成绩管理系统
2)实验结果及截图:
3)功能要求:
系统管理员登录系统后,通过身份验证,能够对学生的基本信息进行管理,包括如下:添加学生信息、查询学生信息、修改学生信息、删除学生信息。
显示的用户交互行为与应用程序最终产生的结果是一致的。

实验二语音交互设计-TTS(汇编)

实验二语音交互设计-TTS(汇编)

实验二语音交互设计-TTS(汇编)第一篇:实验二语音交互设计-TTS文本语音(Text-to-Speech,以下简称TTS),它的作用就是把通过TTS引擎把文本转化为语音输出。

简单介绍如何运用Microsoft Speech SDK 建立自己的文本语音转换应用程序。

Microsoft Speech SDK是微软提供的软件开发包,提供的Speech API(SAPI)主要包含两大方面:1.API for Text-to-Speech:微软TTS引擎的接口,通过它我们可以很容易地建立功能强大的文本语音程序;2.API for Speech Recognition:与TTS相对应的语音识别为了在VC中使用这SDK,必需在工程中添加SDK的include和lib 目录,为免每个工程都添加目录,最好的办法是在VC的Option->Directoris加上SDK的include和lib目录。

一、TTS—基于控制台这是一个基于控制台的语音程序示例。

这个例子中,使用了最简单的COM框架,并让计算机“说”一句简单的话。

同时介绍了如何使用XML标签来对语音进行修改。

主要包括如下步骤:--Step1:建立工程项目--Step2:初始化COM接口--Step3:创建语音对象--Step4:开始说话--Step5:用XML标签修改语音1、Step1:建立工程(1)利用Visual Studio的开发环境中的应用程序向导建立一个Win32控制台(console)程序。

在创建过程中时,选择一个简单的“Hello world”应用程序工程项目。

(2)创建完成后,打开“stdafx.h”头文件,把以下的内容粘贴在“#include ”与“#end if”之间。

这样把SAPI所需的其它依赖信息包含进来。

#define _ATL_APARTMENT_THREADED #include (3)在工程中增加两个文件sapi.h和sapi.lib的路径。

基于智能语音交互的人机界面设计

基于智能语音交互的人机界面设计

基于智能语音交互的人机界面设计一、简介随着生活方式的改变和技术的不断更新,人们对人机界面设计的需求也越来越高,期望通过交互的方式更方便地完成各种操作。

智能语音交互技术作为现今最为流行的人机交互方式之一,已经成为了人机交互领域的绝对热门话题。

因此,基于智能语音交互的人机界面设计也得到了广泛关注,并在现实生活中得到了广泛应用。

二、智能语音交互技术智能语音交互技术是一种基于人们语音识别、自然语言处理和声音合成技术的人机交互方式。

用户可以通过语音指令与设备进行交互,完成各种与设备相关的操作。

现今,智能语音交互技术已经成熟,并广泛应用于智能音箱、智能家居等场景中。

其优点主要包括:无需使用复杂的手势、可视化界面和键盘等设备; 用户语音交互更加方便快捷,大大提升了用户使用体验。

三、基于智能语音交互的人机界面设计特点1. 更加便捷的操作方式:在使用智能语音交互技术时,用户无需使用复杂的手势或键盘等设备,只需要通过简单的语音指令就可以完成各种操作。

与传统的人机界面设计相比,智能语音交互技术可以大大提升用户的使用便捷性,提高用户体验。

2. 更加人性化的设计:基于智能语音交互的人机界面设计更加人性化,同时也更加符合人类使用语言的习惯。

与传统的视觉化界面相比,语音交互界面可以更加方便地帮助老年人、视力障碍者等人群使用设备,进一步推动科技普及。

3. 交互实时性更强:在智能语言交互技术下,用户可以直接向设备发出指令,设备可以更加快速、准确地响应用户需求。

这种强交互实时性能够实现人机交互更加深入、更加有效。

四、基于智能语音交互的人机界面设计案例1. 智能音箱:智能门铃、智能家居等家庭设备的快速接入,用户只需通过语音交互即可获取天气、新闻、音乐等各种信息。

2. 智能医疗设备:针对听力不佳的患者,设计成集智能语音交互与界面操作于一体的智能诊疗一体机,通过语音交互就可以快速获取医学检测数据、查询病历资料等信息。

3. 智能出租车:基于智能语音交互技术,乘客可以使用语音快速告诉车载系统目的地,系统通过语音交互反馈导航信息,同样也可帮助路上艰难的司机。

基于语音识别的智能语音交互系统设计与实现

基于语音识别的智能语音交互系统设计与实现

基于语音识别的智能语音交互系统设计与实现随着人工智能技术的不断发展,语音识别技术已经成为人们生活中不可或缺的一部分。

它用来实现智能语音交互系统的功能已经被广泛应用,以提高人们的生活质量和工作效率。

本文将探讨基于语音识别的智能语音交互系统的设计和实现,以及它在生活中的应用。

一、什么是智能语音交互系统智能语音交互系统是一种基于人工智能技术的交互方式,它通过语音识别技术将用户的语音转换成文字,并将输入的文字进行自然语言处理,从而识别用户的意图,最后通过语音合成技术将结果输出给用户。

智能语音交互系统的应用十分广泛,其中包括智能家居、智能客服、智能医疗等等。

二、基于语音识别的智能语音交互系统的设计和实现智能语音交互系统的设计与实现可以分为几个阶段。

首先是语音输入的处理,也就是语音识别过程。

这个过程主要使用语音识别技术将用户的语音输入转换成文本,在这一过程中需要考虑到音频信号的采样率、压缩等问题,同时对于多音字、口音、语速等问题需要进行有效的识别。

接下来是自然语言处理,也就是将转换的文本进行分析、分类和处理,从而识别用户的意图。

这一过程包括分词、句法分析等处理,同时可以使用机器学习模型来提高准确度。

最后是输出过程,即使用语音合成技术将得到的结果输出给用户。

这一过程可以使用TTS技术(Text-to-Speech),将上一步得到的文本转换成语音,使用相应的语音合成算法进行输出。

三、基于语音识别的智能语音交互系统在生活中的应用智能语音交互系统在生活中的应用非常广泛,首先包括智能家居的应用。

通过智能语音交互系统,用户可以通过语音指令轻松控制家中的各种设备,如灯泡、电视、窗帘等,从而提高用户的居住舒适度和生活质量。

另外,智能语音交互系统在智能客服领域也有着广泛的应用。

通过智能语音交互系统,用户可以通过语音与客服人员进行沟通,从而提高客服质量和效率,并解决客户在服务过程中可能遇到的问题。

对于医疗行业,智能语音交互系统的应用也非常重要。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

COM:即组件对象模型,Component Object Model。

1、在COM构架下,人们可以开发出各种各样的功能专一的组件,组件实际上是一些小的二进制可执行程序,它们可以给应用程序、操作系统以及其他组件提供服务,然后将它们按照需要组合起来,构成复杂的应用系统(如dll)。

优点:可用新组件替换原有组件,系统升级和定制更加简便;可在多个应用系统中重复利用同一个组件;可以方便的将应用系统扩展到网络环境下;COM与语言、平台无关,程序员可充分发挥自己的才智与专长编写组件模块等。

2、使用和处理COM对象。

COM独立于语言,COM为自己提供对象管理例程。

COM中创建对象,实际是调用COM库中的API函数CoCreatInstance().调用该函数时,在注册表中查找COM服务器位置,将服务器加载到内存,并创建所请求的实例。

3、一般使用COM对象的步骤是:●初始化COM库(Initialize);●创建一个COM对象,获得相应接口;●如果对象创建成功,则调用COM对象的某个方法;●释放接口;●收回COM库(Uninitialize)二、TTS—基于图形界面基于图形用户界面创建一个TTS应用程序,通过对菜单命令的选择执行文本-语音的转换。

一、建立项目1、创建一个实现典型“Hello world”应用的windows 32平台应用程序项目。

二、设置sapi路径:与SAPI相关的文件路径必须在项目中声明。

(sapi.h和sapi.lib)1、选择“Tools”→“Options”→“Directories”选项卡;2、选择“Include Files”下拉式选单,增加“sapi.h”的文件路径;3、选择“Library Files”下拉式选单,增加“sapi.lib”的文件路径;三、创建“Speak”菜单命令1、修改自动生成的菜单项。

打开“资源管理器”→“File”菜单→增加“Speak”命令项→资源ID设置为“IDM_SPEAK”。

四、实现speak功能第1步:初始化COM第2步:创建语音对象设置声音第3步:调用speak函数第4步:设置感兴趣的事件第5步:确定事件类型第6步:响应事件1、初始化COMif( FAILED( CoInitialize(NULL) ) ){return FALSE;}2、创建语音对象设置声音一旦com运行后,下一步就是要创建语音对象。

这里需要用到CoCreatInstance().为简洁和方便起见,这个例子使用了特别的处理方式。

首先,它使用initinstance ()来初始化声音。

这是最简单的初始化过程。

第二,这个语音对象是全局性的。

第三,语音对象建立之后,对象本省和用到的内存立即被释放。

最后,如果初始化失败,应用程序应该有更强有力的检查错误机,更广泛的报告和更详细的资料。

程序清单2:ISpVoice *pVoice; //SAPI voice(初始化模块)……BOOL InitInstance(HINSTANCE hInstance, int nCmdShow){。

// Instead of using IDC_TEST, use the identifier of menu resource of the current application.SetMenu(hWnd, LoadMenu(hInstance, MAKEINTRESOURCE(IDC_TEST))); ShowWindow(hWnd, nCmdShow);UpdateWindow(hWnd);//Initialize SAPIHRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL,IID_ISpVoice, (void **)&pVoice);if( SUCCEEDED( hr ) ) {pVoice->SetInterest( SPFEI(SPEI_WORD_BOUNDARY),SPFEI(SPEI_WORD_B OUNDARY) );pVoice->SetNotifyWindowMessage( hWnd, WM_USER, 0, 0 );}elsereturn FALSE;3、调用Speak函数实现“讲话”的功能要让计算机讲话只需一句简单的调用命令,要讲话的内容用一个参数传给语音对象,常是从一个对话框或一个文件获取字符串的。

另外,字符串也可以从一个流中获取,但就要使用另外一个调用ispvoice::speakstream 。

Speak函数的调用代码是放在windows的消息处理函数wndproc ()相应的消息处理中的。

从文件菜单选择Speak命令,计算机将开始讲:"我很高兴发言。

"程序代码3:// FUNCTION: WndProc(HWND, unsigned, WORD, LONG)。

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){。

WCHAR tempString[30];。

switch (wmId){。

case IDM_SPEAK:wcscpy( theString, L"I am glad to speak." );pVoice->Speak( theString, SPF_ASYNC, NULL);pVoice->Speak(L"I am glad to speak", SPF_ASYNC, NULL);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}4、设置事件像其它大部分windows应用程序一样,在COM组件中有很多交互动作,这些交互信息将以信息形式出现。

sapi是也一样。

信息是在TTS或SR引擎中产生的,某个特定的事件也是在那里开始和结束的.很多时候, sapi或sapi的引擎产生的事件是对应用程序有用的。

举例来说,当一个识别过程开始的时候,应用程序会得到相应的通知或消息,最终的用户也可以得到相应的通知。

(1)首先,需要接收一个来自sapi的或sapi的引擎的消息。

这个消息是程序自定义的.但是,所有的活动sapi都使用相同的消息通知应用程序;(2)得到通知后,应用程序要检查一个事件结构,这个事件结构是由SAPI完成的.利用这个结构来确定具体是发生了什么事件(见第五步骤).(3)设定感兴趣的事件。

程序可以用setinterest 来设置感兴趣的事件。

默认情况下,TTS不向程序发出任何事件通知。

也就是说,如果程序忽略了setinterest的调用,TTS应用程序是得不到任何事件通知的。

(4)设定消息。

不论以何种事件,应用程序都应该将一个消息与sapi联系起来。

程序通过调用setnotifywindowmessage来完成这个任务,本例使用WM_USER消息。

程序清单4://Initialize SAPIHRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);if( SUCCEEDED( hr ) ){pVoice->SetInterest( SPFEI(SPEI_WORD_BOUNDARY),SPFEI(SPEI_WORD_BOUN DARY) );pVoice->SetNotifyWindowMessage( hWnd, WM_USER, 0, 0 );}elsereturn FALSE;5、确定事件。

使用事件来工作需要2个步骤。

(1)首先是使用一个简单和标准的做法设置和使用Windows消息。

消息是被发送到程序的消息环中的。

在这个例子里,wndproc()接收wm_user讯息。

一旦讯息是捕获,其余事情由sapi函数来完成。

(2)第二个步骤是确定哪些消息发生了。

Sapi使用spevent和getevents方法来确定具体的事件和消息。

通过这两个函数可以获取指定的事件信息和事件类型。

在SPEVENT 的成员eeventid恰恰是setinterest所设定的值。

该spevent结构必须在首次使用时被初始化。

而且重新使用之前也要被清除。

可以使用spclearevent来完成清除工作。

程序清单5:switch (message){case WM_COMMAND:wmId = LOWORD(wParam);wmEvent = HIWORD(wParam);。

case WM_USER: //处理speak命令的窗口SPEVENT eventItem;memset( &eventItem, 0,sizeof(SPEVENT));while( pVoice->GetEvents(1, &eventItem, NULL ) == S_OK ){switch(eventItem.eEventId ){case SPEI_WORD_BOUNDARY :SPVOICESTATUS eventStatus;pVoice->GetStatus( &eventStatus, NULL );ULONG start, end;start = eventStatus.ulInputWordPos;end = eventStatus.ulInputWordLen;wcsncpy( tempString, theString + start , end );tempString[ end ] = '/0';//MessageBoxW( hWnd, tempString, L"GUIApp",MB_OK|MB_ICONWARNING );MessageBoxW( hWnd, tempString, L"SayApp",MB_OK|MB_ICONWARNING );break;default:break;}SpClearEvent( &eventItem );}break;。

case WM_DESTROY: //释放语音对象if (pVoice){pVoice->Release();pVoice = NULL;}PostQuitMessage(0);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}6、响应事件。

相关文档
最新文档