所述实施例的详细描述
在描述一个基于Web的识别结构和用于实现同一个结构的方法之前,描述能够在所述结构中起作用的通用计算设备可能是有用的。参看图1,标号30示出了一个数据管理设备(PIM、PDA等)的范例格式。但是,可以预期本发明也能够使用下述的其他计算设备、特别是具有有限表面区域用于输入按钮等的这些计算设备实现。例如,电话和/或数据管理设备将从本发明中获得益处。与现存的便携式个人信息管理设备和其它便携式电子设备比较,这种设备将具有增强的实用性,这种设备的功能和紧凑尺寸将鼓励所述用户全天携带所述设备。因此,这里所描述的所述结构范围并不受这里所描述的范例数据管理或PIM设备、电话或计算机的限制。
图1中示出了一种数据管理移动设备30。移动设备30包括壳体32并具有一个用户界面,该用户界面包括一个使用带有指示笔33的触敏显示屏的显示器34。所述指示笔33被用于在指定坐标处按压或接触显示器34以选择一个字段以便选择性地移动光标的起始位置,或反之提供诸如直通手势或手写的命令信息。另外,或者此外,可以在设备30上包括一个或多个用于导航的按钮35。另外,也可以提供诸如旋转轮和滚柱等的其他输入机构。但是,应当说明,这些输入机构的形式并不对本发明构成限制。例如,其他形式的输入包括诸如直通计算机视觉的虚拟输入。
参看图2,其框图示出了一个包括移动设备30的功能部件。控制处理单元50执行软件控制功能。CPU50被连接到显示器34上,从而使依据控制软件产生的文本和图形、图标出现在显示器34上。扬声器43被连接到通常具有数/模转换器59的CPU50上以提供可听输出。由用户下载或输入移动设备30中的数据被存储在被双向连接到CPU50上的非易失性读/写随机存取存储器54中。随机存取存储器(RAM)54对由CPU50执行的指令提供易失存储,并存储诸如登录值的暂存数据。用于结构选择和其他变量的缺省值存储在只读存储器(ROM)58中。ROM58也能够用于为设备存储控制移动设备30基本功能相关设备和其他操作***的核心程序功能(例如将软件组件下载到RAM54中)的操作***软件。
RAM54还可以用做一个存储器,用于以和在用于存储应用程序的PC机上的硬件设备的功能类似的方式存储代码。应当注意,虽然非易失性存储器被用于存储所述代码,所述代码也可以存储在不用于执行所述代码的易失性存储器中。
利用移动设备经过连接到CPU50上的无线收发信机52可以发送/接收无线信号。也可以提供一个任选的通信接口60,用于如果需要的话从一个计算机(例如台式计算机)或从一个有线网络直接下载数据。因此,接口60可以包括各种形式的通信设备,例如,红外连接、调制解调器、网卡等等。
移动设备30包括耳机29、模/数(A/D)转换器37和存储在存储器54中的可选识别程序(语音、DTMF、手写、手势或计算机视觉)。借助于举例,响应来自设备30的用户的可听信息、指令或命令,耳机29提供被A/D转换器37数字化的多个语音信号。该语音识别器可以在数字化的信号上执行正规化和/或特征提取功能,以便获得中间语音识别结果。使用无线收发信机52或通信接口60,语音数据被发送给下面将要讨论并示于图5结构中的远程识别服务器204。然后,识别结果被返回到移动设备30用于在其上面实现(例如,可视或者可听的),并最后发送给Web服务器202(图5),其中,Web服务器202和移动设备30以客户机/服务器的关系运行。类似的处理可以用于其他形式的输入。例如,可以在设备30上在进行或不进行预处理的情况下数字化手写输入。与语音数据类似,这个形式的输入能够被发送给识别服务器204用于识别其中所述识别结果被返回到设备30和/或Web服务器202中的至少一个。同样,DTMF数据、手势数据和可视数据也能够被进行类似的处理。取决于输入的形式,设备30(和下面将要描述的其他形式的客户机)应当包括诸如用于可视输入的摄象机的必要硬件。
图3是一个平面图,它示出了便携式电话80的一个示例实施例。电话80包括显示器82和键盘84。通常,图2的框图可应用到图3所示的电话中,尽管可能需要执行其他功能的附加电路。例如,图2所示的实施例需要作为电话运行的必要收发信机。但是,这种电路与本发明不相关。
应当理解,除了上述便携或移动计算设备以外,本发明能够和诸如通用台式计算机的多种其他计算设备一起使用。例如,当诸如全字母-数字键盘的传统输入设备操作太困难时,本发明允许具有有限物理能力的用户将文本输入或进入到计算机或其他计算设备中。
本发明还可以和多种其他通用或专用计算***、环境或结构共同操作。适于和本发明一起使用但不作为限制的公知计算***、环境和/或结构的例子包括常用的电话(没有任何屏幕)、个人计算机、服务器计算机、手持或膝上型设备、多处理器***、基于微处理器的***、机顶盒、可编程的消费电子、网络PC、小型计算机、巨型计算机和包括任意上述***或设备的分布式计算环境等。
下面简要描述图4所示通用计算机120。但是,计算机120仅仅是适当计算环境的一个例子,并不对本发明的使用或者功能范围作出限定。计算机120将不会被解释为相对于这里所述部件的任何一个或组合具有相关性或要求。
本发明可以在诸如正由一个计算机执行的程序模块的计算机可执行指令的一般上下文进行描述。通常,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等。本发明还可以用于分布式计算环境中,在这种环境中,使用经过通信网络链接的远程处理设备执行任务。在一个分布式计算环境中,程序模块可以被置于包含存储器存储设备的本地和远程计算机存储媒体中。下面结合附图描述由所述程序和模块执行的任务。本领域的普通技术人员可以把这些描述和附图实现为处理器可执行指令,所述处理器可执行指令能写入到以任何形式的计算机可读介质上。
参看图4,计算机120的部件可以但不作为限制地包括:处理单元140、***存储器140、将包括所述***存储器的各种***部件连接到处理单元140上的***总线141。***总线141可以是包括存储器总线或存储器控制器、***总线和使用各种总线结构中任何一种的局部总线中的任何一种总线。借助于举例和不作为限制,这种结构包括工业标准结构(ISA)总线、通用串行总线(USB)、微信道结构(MCA)总线、增强的ISA(EISA)总线、视频电子标准关联(VESA)局部总线和也被公知为Mezzanine总线的外设部件互联(PCI)总线。计算机120通常包括各种计算机可读的媒体。计算机可读介质可以是能够被计算机120访问并包括易失和非易失媒体、可拆卸和不可拆卸媒体的任用媒体。借助于举例并不作为限制,所述计算机可读介质可以包括计算机存储媒体和通信媒体。计算机存储媒体包括易失和非易失、可拆卸和不可拆卸的媒体,其以任一方法或技术实现用于存储诸如计算机可读指令、数据指令、程序模块或其他数据的信息。计算机存储媒体包含但不局限于RAM、ROM、EEPROM、闪速存储器或其他存储器技术、CD-ROM、数字通用盘(DVD)或其他光盘存储器、卡式磁带、磁带、磁盘存储器或其他磁存储设备、或其他任何能够用于存储所需要的信息和能够被计算机120访问的媒体。
通信媒体通常包含计算机可读指令、数据结构、程序模块或以诸如载波或其他传输机构的模块化数据信号形式的数据并包括任一信息传送媒体。术语“模块化数据信号”的意思是指具有一个或多个特征集或者以这样的方式进行不会、对信号中的信息进行编码的信号。借助于不作为限制的举例,通信媒体包括诸如有线网络或直接有线连接的有线媒体和诸如声学、FR、红外和其他无线媒体的无线媒体。上述任一个的相互结合也可以包括在计算机可读介质的范围之内。
***150包括以诸如只读存储器(ROM)151和随机存取存储器(RAM)152的易失和/或非易失存储器形式出现的计算机存储媒体。包含诸如在启动期间,帮助在计算机120内的单元之间传输信息的基本例程的基本输入/输出***153(BIOS)通常被存储在ROM151中。RAM152通常包含可以被处理单元140直接访问或当前正在操作的数据和/或程序模块。借助于不作为限制的举例,图4示出了操作***54、应用程序155、其他的程序模块156和程序数据157。
计算机120还可以包括其它可拆卸/不可拆卸、易失/非易失计算机存储媒体。作为例子,图4示出了一个从或向不可拆卸非易失磁存储媒体读出或写入的硬盘驱动161、从或向可拆卸非易失磁盘172读出或写入的磁盘驱动171、以及从或向诸如CD ROM或其他光媒体的可拆卸、非易失光盘176读出或写入的光盘驱动175。能够在范例操作环境中使用的其他可拆卸/不可拆卸、易失/非易失计算机存储媒体不作为限制地包括卡式磁带、闪速存储器卡、数字通用盘、数字视频磁带、固态RAM和固态RAM等。硬盘驱动161通常经过一个诸如接口160的不可拆卸的存储器接口连接到***总线141上,磁盘驱动器171和光盘驱动器175通常经过一个诸如接口170的可拆卸存储器接口连接到***总线141上。
上述图4所示设备和其相关的计算机存储媒体提供计算机可读信息、数据结构、程序模块和用于计算机120的其他数据的存储。在图4中,例如,硬盘驱动器161被表示为一个存储操作***164、一个应用程序165、其他的程序模块166和程序数据167。注意,这些组件既可以相同于也可以不同于操作***154、应用程序155、其他的程序模块156和程序数据157。操作***164、应用程序165、其他的程序模块166和程序数据167在这里被给予不同的号码以最低限度地表示它们不同的拷贝。
用户可以经过诸如键盘182、耳机183的输入设备和诸如鼠标、跟踪球或触摸板的定点设备181将命令和信息输入到计算机120中。其它的输入设备(未示出)可以包括游戏杆、游戏操纵杆、卫星盘、扫描器等。这些和其他的输入设备经常经过连接到所述***总线上的用户输入接口180连接到处理单元140上,但是也可以由诸如并行端口、游戏端口或通用串形总线(USB)的其他接口和总线结构连接。监视器184或其他类型的显示设备也经过诸如视频接口185的一个接口连接到***总线141上。除了所述监视器以外,所述计算机还可以包括诸如扬声器187和打印机186的***输出设备,他们可以经过输出外设接口188进行连接。
计算机120可以使用到一个或多个诸如远程计算机194的远程计算机的逻辑连接工作在一个网络环境中。远程计算机194可以是个人计算机、手持设备、服务器、路由器、网络PC、对等设备或其他公共网络节点,通常包括很多或全部上述与计算机120相关的元素。在图4中描述的逻辑连接包括局域网(LAN)191和广域网(WAN)193,但是也可以包括其他的网络。这种网络环境在办公室、企事业端的计算机网络、内部网络和Internet中是普遍的。
当在LAN网络环境中使用时,计算机120经过网络接口或适配器190连接到LAN191上。当在WAN网络环境中使用时,计算机120通常包括调制解调器192或其他装置用于在所述诸如Internet的WAN193上建立通信。可以是内部或外部的调制解调器192可以经过用户输入接口180或其他的适当机构连接到***总线141上。在一个网络环境中,相对于计算机120描述的程序模块或它的一部分可以被存储在远程存储器设备中。借助于不作为限制的举例,图4示出了作为驻留在远程计算机194中的远程应用程序195。很明显,所示网络连接是范例性的而且也可以使用在计算机之间建立通信链接的其他装置。
图5示出了能够在本发明中实施的用于以Web为基础的识别的总体结构200。通常,存储在Web服务器202中的信息能够经过移动设备30(当需要基于输入的形式时,这里也表示具有显示屏幕、耳机、摄象机、触敏面板等其它形式的计算设备)、或者经过其中信息是可听地请求的电话80、或者经过响应被按压的键由电话80产生的音调进行访问并且其中来自Web服务器202的信息仅仅是可听地提供回到所述用户。
更加重要的是,总体结构200是统一的,而不管信息是经过设备30还是经过电话80使用语音识别获得的,单个的识别服务器204可以支持其中的每一种操作模式。另外,总体结构200使用一个公知标记语言(例如,HTML、XHTML、cHTML、XML、WML等)的扩展进行工作。由此,存储在Web服务器202中的信息也能够使用在这些标记语言中获得的公知GUI方法进行访问。通过使用公知标记语言的扩展,对Web服务器202的创作将变得容易,和当前存在的传统应用程序能够容易地进行修改以包括声音识别。
通常,设备30执行由Web服务器202提供的HTML页、脚本等。举例来说,当需要声音识别时,能够被数字化成音频信号或其中音频信号已经被设备30如上所述预处理过的语音特征被提供给具有语法指示或语言模块在语音识别期间使用的识别服务器204。识别服务器204的实现可以有多种形式,只示出了其中的一种,但是它们通常包括识别器211。如果需要和适当的话,识别的结果被返回提供给设备30,以便进行局部润色。在经过识别和如果使用的任一图形用户界面对信息进行编译的基础上,设备30将所述信息传送给web服务器202以便做进一步的处理,而且如果需要则进一步接收HTML页/脚本。
如图5所示,设备30、web服务器202和识别服务器204经过网络205被共同链接而且可单独寻址,这里,网络205是诸如Internet的广域网。因此,不需要使这些设备彼此位置相邻。特别是,所述web服务器不需要包括识别服务器204。以这种方式,在web服务器处的创作可以被集中到他想要的应用程序上而创作者不需要了解复杂的识别服务器204。此外,识别服务器可以被独立地设计和连接到网络205上,并借此可以在不需要进一步改变web服务器202处请求的基础上得到更新和改善。如下面将要描述的,web服务器202也能够包括一个创作机构,该创作机构能够动态地产生客户机端的标记和脚本。在另一个实施例中,web服务器202、识别服务器204和客户机30可以取决于实现机构的能力相互组合。例如,如果所述客户机包括一个例如个人计算机的通用计算机,那么,所述客户机可以包括识别服务器204。类似的,如果需要的话,web服务器202和识别服务器204可以构成一个整体。
本发明的一个方面是一种用对客户机/服务器***中的输入数据进行处理的方法,包括:从一个服务器中接收具有被配置为从一个客户机设备的用户中获得输入数据的扩展的标记语言页;在所述客户机设备上执行所述标记语言页;将来自所述客户机的输入数据(指出从所述用户处获得的语音、DTMF、手写、手势和图象)和相关语法远程发送给一个服务器;在所述客户机处接收来自所述识别服务器的识别结果。其他方面是一种计算机可读介质,该媒体具有用于在一个客户机/服务器***中的客户机上执行的标记语言,该标记语言具有指出与通过所述客户机设备输入的输入数据相关的一个语法的指令。
经过电话80对web服务器202的访问包括将电话80连接到有线或无线电话网络208上,然后将电话80连接到第三组网关210上。网关210将电话80连接到电话声音浏览器212上。电话声音浏览器212包括用于提供电话接口的媒体服务器214和声音浏览器216。与设备30相似,电话声音浏览器212从web服务器202接收HTML页/脚本或类似信息。更重要的是,所述HTML页/脚本与提供给设备30的HTML页/脚本具有类似的格式。以这种方式,web服务器202不需要单独地支持设备30和电话80,或者甚至单独地支持标准的GUI客户机。相反能够使用公用的标记语言。此外,与设备30类似,从声音浏览器216经过网络205或专线207、例如使用TCP/IP,向识别服务器204提供来自由电话80发送的可听信号的声音识别。Web服务器202、识别服务器204和电话声音浏览器212能够在任何适当计算环境中体现,诸如图4所示的通用台式计算机。
但是,应当注意,如果使用DTMF识别,这种形式的识别通常应当在媒体服务器214中执行,而不是在识别服务器204中进行。换言之,所述DTMF语法应当由所述媒体服务器使用。
如上所述,本发明的一个方面包括诸如HTML、XHTML、cHTML、XML、WML的标记语言或具有任何其它从SGML导出的标记语言的扩展,以便包括用于在客户机/服务器结构中提供识别的控制和/或对象。以这种方式,创作者可以运用在这些标记语言中的所有工具和专门知识,所述标记语言是在这种结构中使用的主要web开发平台。
通常,控制和/或对象可以包括一个或多个下述功能:用于识别器配置的识别器控制和/或对象;识别器执行和/或后处理;用于合成器配置和提示播放的合成器控制和/或对象;用于规定输入语法资源的语法控制和/或对象;和/或用于处理识别结果的汇集控制和/或对象。所述扩展被没计成轻型标记层,它将可听、可视和手写接口等功能添加到现存的标记语言中。如此,所述扩展能够保留并独立于:它们被包含在内的高层页,例如HTML;低层格式,用于由该扩展使用来引用例如上下文-语音和语法格式的语言资源进行访问;和在识别服务器204中使用的识别和语音合成的个别特征。
在叙述具有适用于识别的控制和/或对象的标记语言之前,解释一下用HTML标记语言实现的简单GUI的例子是有用的。参看图6,一个简单的GUI接口包括将***信息提交给所述web服务器以便完成在线销售。在这个例子中,所述***信息包括用于正在使用***的类型入口的字段250,所述***例如是Visa、MasterCard、或者American Express。第二字段252允许输入信用***;而第三字段254允许输入失效日期。提供提交(Submit)按钮264用于提交输入字段250、252和254的信息。
图7示出了用于从所述客户机获得前述***的HTML代码。通常,如在这些形式的标记语言中普遍使用的那样,所述代码包括主体部分260和脚本部分262。主体部分260包括指出将被执行动作类型、使用的表单、各种字段的信息250、252和254以及与提交按钮264相关的多行代码(图6)。这个例子也示出了事件支持和嵌入式脚本宿主,其中,依据提交按钮264的驱动,在脚本部分262中调用或执行函数“verify”。所述“verify”函数确定用于每个***(Visa、MasterCard、或者American Express)的***是否具有适当的长度。
图8示出了用于产生与图6所示相同GUI的客户机标记,用于获得将被提供给使用语音识别的web服务器204的***信息。虽然语音识别将在下面结合附图8-14予以讨论,但是,应当理解,所述技术也能够应用于手写识别、手势识别和图象识别。
通常,扩展(公知为“标记”)是XML元素的一个小集,具有相关的属性和DOM对象特征、事件和方法,它们可以与源标记文本一起使用以便将识别接口、DTMF或调用控制施加到一个源页上。扩展的正式格式和语义与所述源文本的特征独立,所以,所述扩展实际上可以被等效地应用在HTML、XHTML、cHTML、XML、WML或者任何其他从SGML导出的标记中。所述扩展遵循文档对象模型,其中提供了可以被分层的新功能对象或元素。每个元素都将在附录中详细讨论,但是通常所述元素能够包括属性、特征、方法、事件和/或其他“子”元素。
关于这一点,应当注意,根据将在上面执行浏览器的设备的能力,所述扩展可以用两种不同的“模式”加以解释。在第一种模式、即对象模式中,可以得到全部的能力。一个应用程序对扩展的编程操作是由例如在XHTML浏览器中的Jscript解释程序或在WML浏览器中的WMLScript解释程序、的在所述设备上的浏览器启动的机构执行。为此,只需要定义所述扩展核心特征和方法的一个小集,而且这些由存在于所述设备或客户机端的所述处理机构处理。所述对象模式提供事件和脚本并能够提供较强的功能以便在语音的交互上给对话创作者更好的客户机端控制。如这里所使用的,支持所有事件和脚本的浏览器被称之为“上层浏览器(uplevel browser)”。这种形式的浏览器将支持所述扩展的所有属性、特征、方法和事件。通常可以在具有大处理能力的设备中找到所述上层浏览器。
所述扩展也可以在“说明模式”中得到支持。如在这里所使用的,以说明模式操作的浏览器被称之为“下层浏览器”,其并不支持所有的事件和脚本性能。相反,这种形式的浏览器将支持给定扩展的说明特征(即核心元素和属性),但不可能是所有的DOM(文本对象模型)对象特征、方法和事件。这种模式使用互斥的说明语法,并可以进一步与诸如SMIL2.0(同步多媒体集成语言)的说明多媒体同步和协作机构(同步的标记语言)一起使用。下层浏览器通常会在具有有限处理能力的设备中找到。
关于这一点,下面将讨论一种入口的特定模式。具体地说,结合至少一个显示器、在另一个实施例中是一个定点设备一起使用语音识别来指出与数据入口相关的字段是特别有用的。特别是,在这种数据进入的模式下,所述用户通常是在什么时间选择一个字段和提供相应的信息控制之下。例如,在图6所示的例子中,用户应当首先决定在字段252中输入所述信用***,然后在字段250中输入所述***的类型,接着是在字段254中的失效日期。类似的,如果需要,所述用户应当返回到字段252并纠正错误的输入。当如下所述和语音识别相结合时,可以提供一种很容易和自然的导航形式。如这里所使用的,使用允许以任意形式选择字段的屏幕显示器语音识别的这种输入形式被称之为“多重模式”。
回过来参看图8,这里示出了HTML标记语言的一个例子这个代码也包括主体部分270和脚本部分272。另外与图7所示的代码相似,图8所示的代码包括关于将被执行动作类型以及所述表单的位置的指示。代码部分280、282和284分别控制或执行字段250、252和254每一个中的信息进入。首先参考代码部分280,在例如使用设备30的指示笔选择字段250的基础上,事件“点击”被启动,它调用或执行在脚本部分272中的“talk”函数。这个动作激活用于语音识别的语法,所述语音涉及与通常在字段250中希望的数据类型相关。这种包括一项以上输入(例如声音和笔点击/滚柱)技术的交互类型被称之为多重模式。
应当说明,由于对很多应用程序假设所述创作者将使用所述源页中的应用程序专用图形机构对所述页各种部件的语音启动发出信号,所以,图8所列举的语音识别扩展并不试图在所述客户机的浏览器上具有缺省可视表示。然而,如果需要所述可视表示,所述扩展也可以进行相应的修改。
下面反过来参看所述语法,所述语法是一种诸如但不做为限制的上下文无关语法的语法语法、N-语法或混合语法。(当然,当使用相应形式的识别时,可以使用DTMF语法、手写语法、手势语法和图象语法。如这里所使用的那样,“语法”包括用于执行识别的信息,并且在另一个实施例中,例如在一个规定字段中对应于所期望输入的信息),包括所述标记语言第一扩展的的一个新控制290(这里被鉴别为“reco”)包括各种元素,示出了其中的两个,即语法元素“gammar”和“bind”元素。通常,与从web服务器下载到客户机上的代码相似,所述语法可以起源于web服务器202并下载到所述客户机上和/或提供给一个远程服务器用于语音识别。所述语法然后可以被本地存储在一个高速缓存中。最后,所述语法被提供给识别服务器204以便在识别过程中使用。所述语法元素被用于使用一个属性内联或关联地规定语法。
在从识别服务器204接收与所识别的语音、手写、手势和图象等对应的识别结果的基础上,提供识别控制290的语法以接收相应的结果并使其与能够包括在显示器34上着色所述上下文的的对应字段关联。在所示的实施例中,在利用返回给所述客户机的结果完成语音识别的基础上,解激活所述Reco对象并使所识别的上下文与对应的字段关联。282和284部分的动作状态类似,其中,调用唯一的Reco对象和语法用于字段252和254中的每一个,并在接收所识别结果的基础上与字段252和254中的每一个关联。关于接收信用***字段252,函数“处理”以和上述结合图7所示类似的方式检查所述***相对于所述卡类型的长度。
通常,结和结构200以及客户机端标记语言的语音识别的使用是如下发生的:首先,指出与将被给定语音相关的字段。在所示的实施例中,使用了指示笔33,应当理解,本发明并不局限于所述指示笔33,其中,可以使用诸如按钮、鼠标指示器和旋转轮等的任何形式指示。使用众所周知的可视标记语言,可以提供诸如“点击”的相应事件。应当理解,本发明并不局限于使用“点击”事件去指示声音、手写和手势等命令的开始。任何一种可以得到的GUI事件、诸如“onSelect”,都可以被用于相同的目的。在一个实施例中,对于起指出所述相应语音的开始和/或结束作用来讲,这种事件是非常有用的。还应当说明,引导所述语音的字段可以由所述用户以及在保持跟踪用户交互作用的浏览器上运行的程序指出。
关于这一点,应当说明,语音识别的不同情况说明需要不同的行为和/或来自识别服务器204的输出。虽然,在所有情况下所述识别处理的开始是标准的-从上层浏览器中调用的显式start()或在下层浏览器中的说明性<reco>元素,但是用于停止语音识别的装置是不同的。
在上述的例子中,多重应用程序中的用户将通过例如压敏显示器上的抽头(tapping)和支撑物(holding)来控制对所述设备的输入。然后所述浏览器使用例如“pen-up”的GUI事件控制识别停止的时间并返回相应的结果。但是,在诸如电话应用程序(后述)或在免手提应用程序中的仅仅是声音的的情况下,所述用户不能在所述浏览器上直接进行控制,并且识别服务器204或客户机30必须负责决定停止识别的时间和返回所述结果(通常,经过所述语法的路径已经被识别)。另外,其中在识别停止之前必须返回中间结果的口述和其他情况(已知为“打开话筒”)不仅需要显式停止功能,而且还需要在所述识别被停止之前将多个识别结果返回给客户机30和/或web服务器202。
在一个实施例中,所述reco元素可以包括一个“mode”属性,用于区分下述三种用于指令识别服务器204如何以及何时返回所述结果的识别模式。结果的返回意味着在适当时提供“onReco”事件或激活所述“bind”元素。在一个实施例中,如果没有规定所述模式,那么,缺识别模式为“自动”。
图12示出了用于语音识别的“自动”模式的操作(类似的模式、事件等可以用于其他形式的识别)。时间线281指出何时识别服务器204将被导向在283处进行识别,在285处识别服务器204检测语音的位置以及在287处确定结束所述语音。
Reco元素的各种属性控制识别服务器204的行为。“initialTimeout”(启动超时)属性是一个位于识别283的开始和语音检测285之间的时间。如果这个时间周期被超过了,将从识别服务器204提供一个“onSlience”事件,从而发出一个信号通知那个识别已经结束了。如果识别服务器204发现所述发音是不可识别的,将发出一个“onNoReco”事件293,它将指出识别被停止。
可以停止和取消识别的其他属性包括“babbleTimeout”(串音超时)属性295,该属性295是一个时间周期,在该时间周期中,识别服务器204必须在285处在检测语音之后返回一个结果。如果超过了,则根据是否发生了误差发布不同的事件。如果识别服务器204例如在特长发音的情况下仍然在处理音频,则发布“onNoReco”属性293。但是,如果由于任何原因使“babbleTimeout”属性295被超出,更大可能是产生了识别器误差,则发布“onTimeout”事件297。类似的,也可以提供“maxTimeout”(最大超时)属性299用于识别283的开始和所述结果返回到客户机30之间的一个时间周期。如果这个时间周期被超过,则发出“onTimeout”事件297。
但是,如果一个大于“endSilence”(结束静默)属性301的时间周期被超过了,则意味着所述识别已经完成。识别服务器204将自动地停止识别并返回它的结果。应当说明,识别服务器204能够执行一个置信度测量以确定所述识别结果是否应被返回。如果所述置信度测量低于一个阈值,则发出“onNoReco”事件293,同时,如果所述可信度测量高于所述阈值,则发出“onNoReco”属性303和识别结果。图12借此示出了在“automatic mode”(自动模式)中没有显式stop()调用。
图13示出了识别服务器204的“singl mode”(单模式)的操作。可以使用上述针对“automatic mode”的属性和事件并使用相同的标号表示。但是,在这种模式的操作中,stop()调用305是在时间线281上指出的。stop()调用305与诸如由用户提供的“pen-up”的事件对应。在这种模式的操作中,识别结果的返回是在显式stop()调用305的控制下执行的。如同所有的操作模式一样,如果在“initialTimeout”周期289内没有检测到语音,则发布“onSilence”事件291,但对于这种操作模式不停止识别。类似的,“onNoReco”事件是在stop()调用305没有停止识别之前由不可识别的发音产生的。但是,如果与“babbleTimeout”属性295或“maxTimeout”属性299相关的时间周期被超过,识别将停止。
图14示出了识别服务器204的“multipl mode”(多重模式)操作。如上所述,这种操作模式被用于“打开麦克风”或口授情况。通常,在这种操作模式下,以一定的间隔返回所述结果,直到显式stop()_调用305被接收或与“babbleTimeout”属性295或“maxTimeout”属性299相关的时间周期被超过为止。但是应当注意,在任何一个不停止识别的“onSilience”事件291、“onReco”事件303或“onNoReco”事件293之后,用于“babbleTimeout”的定时器将被复位。
通常,在这种操作模式下,对于每个被识别的短语,发出“onReco”事件303并返回所述结果,直到发出stop()调用305被接收为止。如果由于一个不可识别的发音而发出了“onSilence”事件291,那么,这些事件将被报告但识别将继续。
如上所述,用于所述字段的相关Reco对象被激活,包括向所述识别服务器204提供至少一个使用哪种语法的指示。这个信息可以伴随有记录在客户机30上、并将其传送给识别服务器204的语音数据。如上所述,语音数据包括与由用户输入的所述语音相关的流式数据,或者能够包括指出在语音识别期间所使用的语音性质的经过予处理的语音数据。在另一个实施例中,客户机端的处理还包括所述语音数据的规格化,从而使由识别服务器204接收的语音数据从客户机到客户机相对一致。由于所述识别服务器相对于客户机的类型和通信信道来讲被制造为无国家性(stateless),所以这简化了识别服务器204的语音处理,借此,允许所述识别服务器更容易的可测量性。
在从识别服务器204接收所述识别结果的基础上,所述识别结果与对应的字段相关,如果需要,可以执行客户机端的验证或检查。在完成与由所述客户机当前提供的代码相关的所有字段的基础上,信息被传送给web服务器202以用于应用程序的处理。从前面的描述来看,很清楚,虽然web服务器202已经向客户机30提供有适于识别的代码或页/脚本,但是,所述识别服务不是由web服务器202执行的,而是由识别服务器204执行的。但是,本发明并不排除这样一种实现方法,其中,识别服务器204和web服务器202一起配置,或识别服务器204是客户机30的一部分。换言之,即使当识别服务器204和web服务器202或客户机30相互结合,但是由于扩展在这些部件之间提供了一个简单和方便的接口,所以,这里所提供的扩展是非常有利的。
在没有借助图8所示实施例示出的同时,所述reco控制还可以包括一个远程音频对象(RAO),用于将适当的语音数据传送给识别服务器204。由于声音接口可能是不同的,所以将RAO制成插接型对象的益处在于:允许用于每个不同设备不同的一个。另外,所述远程音频对象可以允许在相同时间处被激活的多个识别元素。
图9A和9B示出了作为具有页/脚本的HTML的只有声音的标记语言。如所清楚示出的,所述代码还可以包括一个主体部分300和一个脚本部分302。标记语言的另一种扩展-包括属性相象契约(attyibutes like bargein)的提示控制303。但是在图9A和9B的只有声音的实施例中语音识别的执行是不同的。利用所述的脚本功能“checkFilled”整个地控制所述处理,该脚本功能确定没有填满的字段并激活相应的提示和新对象。然而,使用与上述结合图8所述相同的上下文激活所述语法,其中.语音数据和关于使用给出的语法指示被提供给识别服务器204。类似的,从识别服务器204接收的输出与所述客户机(这里是电话声音浏览器212)的字段相关。
通常对于只有声音的应用程序来讲唯一的其他特征是当语音没有被识别时对所述用户的一个指示。在诸如图8所示的多重模式的应用程序中,“onNoReco”简单地将一个零值放入到所显示的字段中以指示没有识别,由此也不需要进一步的激活。在所述只有声音的实施例中,“onNoReco”305调用或执行功能“mumble”,该功能将一个字短语传送给识别服务器204,接下来使用适当的文本-语音***307将其转换成语音(图5)。识别服务器204把一个音频流返回给电话声音浏览器212,接下来传送给将被用户收听的电话80。类似的,在只有声音应用程序中的其他波形提示在需要时也被识别服务器204转换成音频流。
应当说明,在这个例子中,在经过功能“wrlcome”播放欢迎提示之后,功能“checkfilled”向用户提示每个字段并激活适当的语法,包括重复已经进入的字段和确认所述信息是正确的,这包括“confirmation”语法。注意,在这个实施例中,每个reco控制都是从脚本部分302启动的,而不是从先前所述例子中的主体部分启动的。
作为本发明的另一个方面,在不同类型客户机设备上可执行的所述标记语言(例如诸如电话的以客户机设备为基础的多重模式和非显示声音输入)统一用于与所述每一个客户机设备交互的web服务器的与语音相关的事件、GUI事件和电话事件中的至少一个。这对于允许通常将被写入或独立于客户机设备类型的web服务器应用程序的有效部分是非常有益的。在图8和图9A和9B中显示了具有“handle”函数的例子。
虽然在图9中没有示出,但是,对于所述标记语言还存在两种以上用于支持电话功能的扩展,即DTMF(双音调制的频率)控制和调用控制元素或对象。DTMF的工作情况类似于reco控制。它规定了一个从键盘字符串到文本输入的简单语法映像。例如,“1”意味着食品杂货店,“2”表示药店等。相反,调用对象涉及电话功能、相象调用功能和第三部分调用。下面将在附录中详细讨论属性、特征、方法和事件。
图10A和10B也示出了适用于只有是声音的操作模式的标记语言的另一个实施例。在这个实施例中,所述用户被允许在整个信息进入和讲话期间具有某些控制。换言之,虽然所述***可以启动或指示所述用户开始讲话,但是该用户也可以提供比最初被要求更多的信息。这是“混合启动”的一个例子。通常,在这种对话交互的形式下,所述用户被允许与所述***共享所述对话交互。除在上面指出和下面将要详细讨论的、其中用户通过提示提供比所要求更多的信息的例子,当没有这种提示时,所述用户也应当转换任务。
在图10A和10B所示的例子中,标识作为“do_field”的语法包括与“g_card_type”、“g_card_num”和“g_expiry_date”语法相关的信息。在这个例子中,电话声音浏览器212在接收由“onReco”指示的经过识别的语音的基础上,将从电话80接收的语音数据和一个使用“do_field”语法的指示传送给识别服务器204,调用或执行功能“handle”,包括使用于从所述语音数据识别的任一或全部字段的值相关。换言之,从识别服务器204获得的结果也包括用于每个字段的指示。根据在405中规定的连接规则对该信息进行语法分析并与相应的字段关联。如图5指出的,识别服务器204可以包括语法分析程序309。
从图7、8、9A、9B、10A和10B可以看出,使用了非常类似的web开发框架。在这些情况每一个中的数据表示也非常类似。另外,数据表示和流控的分开允许不同程序(***启动和混合启动)之间、或不同形式(基于GUI web的、仅仅是声音和多重模式)之间最大的可重复使用率。当电话包括显示器和与设备30类似的功能时,这也允许从仅仅是声音的操作经过电话到多重模式操作的自然扩展。附录A进一步提供了上面讨论的详细的控制和对象。
如上面所指出的,上层浏览器可以使用脚本以便执行诸如在上面例子中包括的功能“handle”的各种需要去分配所述识别结果。在上面所讨论和在附录2.1.2描述的实施例中,“bind”元素将分析所述识别结果并分配所述值,其中,“bind”元素是“reco”的子元素。
虽然脚本是有用的,但例如由于保密关系,很多人并不相信它总是浏览器的最佳形式。在本发明的另一个实施例或方面中,所述“bind”元素是一种高级元素(与“reco”类似)并被提供有其他更多的特征,它能够在没有脚本自身的情况下有效地模拟所述脚本。
在不使用脚本或不使用下面将要讨论的本发明所述方面的情况下,下面将要讨论的某些诸如复杂对话效果的能力仅仅伴随有:将一个页发送回web服务器202,执行在上面的应用程序逻辑从而产生一个新的页,并将所述页传送回给客户机设备。本发明的这个方面允许一个编程器调用与所述页的对象相关的方法而不会招致服务器的往返行程(roundtrip)。
在上面讨论的实施例中,“bind”元素仅仅具有用于以web页形式向字段分配识别结果的属性“TargetElment”和“TargetAttribute”。在另一个实施例中,“bind”元素还包括一个被添加用于对象方法调用的“TargetMethod”。“TargetMethot”的使用和性能是一种用于模拟脚本的基本技术。例如,下述语法可以被用于调用对象“OBJ1”的“X”方法:
<bind TargetElement=“OBJ1”TargetMethod=“X”...>。
注意,虽然这里所示的例子遵循HTML/XHTML事件语法,但是,本领域内普通技术人员可以发现它可以将<bind>用途直接推广到其他事件机构中,包括但局限于的W3C文本对象模型层2或层3事件标准、ECMA公共语言信息基础设施(CLI)事件模型、Java编程语言事件模型、W3C同步多媒体集成语言(SMIL)和突发W3CXML事件标准协议。
图15A和15B示出了可在一个客户机、特别是在一个下层浏览器上执行的标记语言页。在这个例子中,所述用户经过音频提示要求一杯饮料。然后,所述***确认点了什么样的饮料。在识别结果的基础上“bind”元素使用说明逻辑引导执行。当所述饮料被确认时,表单被发送回给web服务器202,所有这一切都没有脚本。
通常,图15A和15B所示的标记示例包括一个数据部分350、一个语音部分352和用户接口部分354、356和358。部分354从一般查询中接收关于用户喜欢什么饮料的识别结果并将交互识别流转移到查询是否需要奶油和糖的再提示、或确认所述饮料被点取。特别是,当奶油或糖也已经被点取时,部分356接收一个识别结果。部分358接收用于确认所述饮料的识别结果。部分360是一个使用新消息对象“SMEX”的调用控制部分,这将在后面进一步讨论。
如上面所指出的,本发明这个方面的“bind”元素包括对象方法调用,当在361处执行“welcome”对象上的“start”方法时,它利用“welcome”提示启动图15A和15B所示的用户交互。
然后,通过在362处执行“asked”对象的“start”方法,询问用户“是希望得到可乐、咖啡还是橘汁?”。然后通过在363处调用识别“reco_drink”对象上的“start”方法执行识别。
然后执行部分354中的标记,其中识别服务器204使用的语法由Xpath语句“./drink types”提供。注意,尽管这个例子使用了W3C Xpath语言,但是本领域内的普通技术人员可以发现它也可以被用于其他的标准语言,包括但局限于W3C XML查询语言(XQL)。如“bind”元素364所规定的,如果从识别服务器204接收的识别结果具有小于1O的置信分,则在366处执行提示对象“reprompt”,后面跟随着提示对象“ask”368,在这一点,在370处重新启动识别对象“reco_drink”。如果所返回的识别结果是具有大于10的置信分的“coffee”,则字段“drink”被分配有在372处识别结果的值,且在374处通过提示对象“craem_sugar”向用户提示他/她是否喜欢奶油或糖。然后在376调用部分356中的识别对象“reco_cream_sugar”。否则,如果所述识别结果的置信分大于10但不是咖啡,则在378处再次分配字段饮料。在380处通过执行提示对象“confirm”提供所述识别结果的确认,后面跟随在382处在部分358中识别对象“reco_yesno”的调用。如果用户利用大于10的置信分回答“yes”,那么,在384处显示提示对象“thanks”,然后在386处发送表单。反之,如果用户回答“no”或识别结果的置信分低于10,则在390处执行提示对象“retry”,后面再次跟随有在392处正在执行的提示对象“ask”和在394处的“reco_drink”识别对象的调用。
从前面的例子可以看出,如在部分354、356或358中所指出的,“bind”元素允许方法的多重调用。如果需要,能够说明识别结果的多重分配。在所示的实施例中,当所述多重分配和方法调用被说明时,他们是按照文本顺序被执行的。
在另一个实施例中,还提供了用于传递方法参数的标准。换言之,某些方法需要一个参数列表。这是使用“arg”子元素实现的。例如,给出下述标记:
<bind TargetElement=“OBJ”TargetMethod=
“F”><arg>X</arg><arg>Y</arg></bind>
等效于“OBJ.F(X,Y)”,或“OBJ”是一个具有参数“X”和“Y”的方法“F”的对象。
所述“bind”元素还能够包括一个“event”属性,用于说明所述连接元素被试图用于哪个事件。例如,标记:
<bind event=“onNoReco”=TargetElement=
“prompt1”TargetMethod=“start”/>
意味着“onNoReco”事件被传送的时间,对象“pyompt1”的方法“start”将被调用。考虑使用“bind”元素作为例如结合图8所述的上述“Reco”元素的子元素,用于“bind”元素的缺省属性是“onReco”。
作为一个高级元素,所述“bind”元素可以包括在所述附录的部分2.4中规定的任一事件。另外,所述“bind”事件还可以包括具有能够被访问和用于指示程序流程的“status”属性的“onError”事件。为了扩展所述“bind”元素的其他事件必须具有“status”属性,这些都是能够被访问的。
除了检查识别结果的状态以外,也可以检查正在执行的当前文本或页本身。具体地说,“test”和“value”两个属性可以被扩展成包括被称为包含文档的根节点“host”基元。例如,回过来参看图15A和15B,其中所包含的例子具有在部分354处的附加逻辑,用于询问当用户希望得到咖啡时是否需要奶油或糖。当利用标记“host()/get_drink/drink=‘coffee’”进行规定时,如果所述饮料字段仅仅是“coffee”,那么,用于添加奶油或糖的标记和随后部分356的调用将被返回。
应当说明,“bind”元素不仅可以被应用于来自语音服务器204的识别结果和在所述文档中接收或分配值,还可以被应用到消息目标(这里由“smex”表示),所述消息目标例如来自在所述客户机设备上运行的应用程序。在图15A和15B所示的例子中,当在所述客户机设备上运行的电话应用程序检测一个调用时执行所述页。在部分360中,当接收到“/Call_connected”消息时,“bind”元素通过执行“reco_drink”对象执行或播放“welcome”提示并开始识别。与从语音服务器204接收的识别结果相似,所接收的消息也非常大。某些消息被很好地定义,以便启动所希望的程序流程。其他的可以被接收和处理(例如,正如接收所述识别服务器的识别结果被分析语法)。例如,这允许标记语言与从键盘输入的自然语言分析程序相似被使用。附录A中的识别元素包括与执行这个功能相关的特征。类似的,所述提示元素通过使用特征“innertext”可以被用于提供用于动态内容或音频波文件的文本消息并在附录A中给予解释。事件可以与用于识别结果的事件类似。例如,所述事件可以包括当所述消息源(例如运行于所述客户机设备上的应用程序)具有可用于所述浏览器的消息时得到传送的“onReceived”。
然后,“smex”或消息对象允许这里所讨论的标记语言标记被扩展到运行于所述客户机设备上的其它部件或应用程序。作为另外一个例子,所述消息对象可以被用于对与听取在所述客户机上运行受到损害相关的TTY组件通信。所述TTY组件将不使用语音识别提供用户已经键入的消息。这个消息然后被使用,就象已经从所述识别服务器中接收了一个识别结果一样,其中,所述消息能够被语法分析和分配给所述表单的字段,或使用上面讨论的“reco”、“grammar”或“bind”元素进行其他处理。在附录A中提供了消息或“smex”对象的进一步讨论。
所述“bind”元素还可以包括一个“for”属性,该属性允许它的作用被附加到所述页的其它对象上。例如,当对象“prompt 1”传送事件“onComplete”时,诸如:
<bind for=“prompt1”event=“onComplet targetElement”=“prompt 2”=
targetMethod=“start”/>的标记将调用对象“prompt 2”的start方法。
回过来参看图5,web服务器202能够包括服务器端插接说明创作工具或模块320(例如,Microsoft Corporation的ASP或ASP+,或JSP等)。服务器端***模块320可以动态地产生客户机端的标记,甚至是用于访问web服务器202的客户机类型的特殊形式的标记。在最初建立客户机/服务器关系的基础上,所述客户机信息可以被提供给web服务器202,或web服务器202可以包括多个模块或例行程序以检测所述客户机的性能。利用这种方式,服务器端插接模块320可以为每个声音识别方案产生客户机端标记,即仅仅通过电话80的声音或用于设备30的多重模块。通过使用一致的客户机端的模块(能够在每个应用程序中使用的reco和prompt控制),用于多个不同客户机的创作更加容易。
除了动态产生客户机端的标记以外,与使用图8、9A和9B所示标记例子获得图6所示***信息类似,上层对话模块被构成为服务器端的控制并被存储在存储器324中,以便由开发者在应用程序创作中使用。通常,上层对话模块324将在由开发者规定的参数基础上在只有声音的和多重模块方案中动态地产生客户机端的标记和脚本。所述上层对话模块能够包括多个参数,用于产生客户机端的标记,以适应开发者的需要。例如,***信息模块可以包括一个用于指出客户机端标记脚本能够允许的***的类型参数。在服务器端插接模块320中使用的简单的ASP+页被示于图11。
虽然已经结合最佳实施例对本发明进行了描述,但是本领域普通技术人员将认识到在形式和细节上可以作出很多变化而不脱离本发明的精神和范围。
附录A
1引言
下面的标记是一集标记元素,它们允许文档使用语音作为输入或输出媒体。所述标记被设计成自包含的XML,它们能够被放入诸如HTML、XHTML、CHTML、SMIL、WML等任何一种从SGML导出的标记语言中。这里所使用的标记与可从Washington Redmond微软公司得到的已知方法SAPI5.0类似。所述标记、元素、事件、属性、特征、返回值等仅仅都是范例,并不作为限制。虽然这里解释了语音和DTMF识别,但是,也可以提供类似的标记用于其他形式的识别。
这里所讨论的主要元素是:
<prompt......> 用于语音合成结构和提示播放
<reco......> 用于识别器配置和识别执行和后处理
<grammar......>用于规定输入语法资源
<bind......> 用于识别结果的处理
<dtmf......> 用于DTMF的配置和控制
2Reco
Reco元素被用于规定可能的用户输入,而且是用于处理输入结果的装置。其主要元素可以是<grammar>和<bind>,且它包含用于配置识别器特征的资源。
Reco元素是在上层浏览器中经过Start和Stop方法、或在SMIL启用的浏览器中使用SMIL命令被编程激活的。它们被认为通过它们在所述页上的出现在下层浏览器中起说明作用(即不支持脚本的浏览器)。为了允许并行激活多种语法,可以考虑同时使多个Reco元素活动。
Reco还可以采用一种特定的模式-‘automatic’,‘single’或‘multiple’-以区分它们允许的识别方案的种类和识别平台的行为。
2.1Reco内容
Reco元素包含一个或多个语法和任选的一组bind连接元素,它检查识别的结果并将相关部分拷贝到所述包含页的值上。
在上层浏览器中,Reco支持按程序设计的各个语法规则的激活和去激活。还要说明,通过用于识别环境的缺省激活一个语法中所有的顶层规则。
2.1.1<gramma(语法)>元素
所述语法元素被用于使用src属性规定语法,联机或被关联。通常至少规定一种语法(联机或被关联)。联机语法可以是以文本为基础的语法格式,被关联的语法可以是以文本为基础或二进制类型的。可以规定多个语法元素。如果规定了一个以上的语法元素,所述语法内的规则被添加作为在相同语法中的额外规则。具有相同名称的任何规则将被重写。
属性(Attributes)
·src:如果规定了联机语法,则该项是可选的。包括所述语法的URI。注意,通过用于识别环境的缺省激活一个语法中的所有顶层规则。
·langID:可选。字符串,用于指出将使用哪种语言语音引擎。所述字符串格式遵循xml:lang定义。例如,lang ID=“en-us”表示美国英语。这个属性只有在所述langID不在语法URI中规定时才有效。如果没有规定,则缺省值为美国英语。
如果在多个地方规定了所述langID,那么,langID遵循来自最低分的先前顺序-远程语法文件(即在所语法文件内规定的语言标识),所属远程语法文件后面跟随有一个语法元素,而该语法元素后面跟随有reco元素。
<grammar src=“EromCity.xml”/>
或
<grammar>
<rule toplevel=“active”>
<p>from</p>
<ruleref name=“cities”/>
</rule>
<rule name=“cities”>
<l>
<p>Cambridge</p>
<p>Seattle</p>
<p>London</p>
</l>
</rule>
</grammar>
如果规定了引用src的语法和联机语法,则所述联机规则被添加到所述引用的规则中,并且任一具有相同名称的规则都将被重写。
2.1.2<bind(连接)>元素
所述连接元素被用于把来自识别结果的值连接到所述页中。
由所述连接元素假设的识别结果可以是包含用于规定识别结果的语义标记语言(SML)的XML文档。它的内容包括语义值、所说的实际字和置信分。
SML也可以包括另外的识别选择(像在N个最佳识别结果中一样)。下面示出了“I’d like to travel from Seattle to Boston”这一语句的样板XML文本:
<sml confidenc=“40”>
<travel text=“I’d like to travel from Seattle to Boston”>
<origin_city confidence=“15”>Seattle
</origin_city>
<dest_city confidence=“35”>Boston
</dest_city>
</travel>
</sml>
由于假设语法内的识别产生一个XML文档,所以,在语义标记语言或者在SML中,使用Xpath查询参考将从所述SML文档连接的值。并且由于在所述值被连接进入的页中的所述元素被唯一地识别(它们可能将被形成控制),所以,这些目标元素被直接关联。
属性:
·targetElement:必须。将分配来自于SML的值内容的元素(如在W3CSMIL2.0中)。
·targetAttribute:任选。将分配来自于SML值内容的目标元素的属性(如在SMIL2.0中的attributeName属性一样)。如果未规定,默认为“value”。
·test:任选。一个用于指出条件的XML Pattern字符串,在所述条件下将分配所述识别结果。缺省条件是真。
·value:必须。用于规定将被分配给所述目标元素的、来自于识别结果文档的值的XPATH字符串(如在所述W3C XML DOM说明中说明的)。
例子:
如此给出上述SML返回,随后的reco元素使用连接将origin_city和dest_city中的值传输到所述目标页元素txtBoxOrigin和txtBoxDest:
<input name=“txtBoxOrigin”type=“text”/>
<input name=“txtBoxDest”type=“text”/>
<reco id=“travel”>
<grammar src=“./city.xml”/>
<bind targetElement=“txtBoxOrigin”
value=“orogin_city”/>
<bind TargetElement=“txtBoxDest”
value=“//dest_city”/>
</reco>
如在下面的例子中所描述的,这个连接是有条件的,其中,在作为一个预定条件加给所述连接操作的所述dest_city结果的语义属性上执行一个测试:
<bind targetElement=“txtBoxDest”
value=“//dest_city”
test=“/sml_/“dest_city[@confidence$gt$40]”
/>
所述连接元素是一个在下层浏览器或上层浏览器上处理识别结果的简单说明性装置。对于更复杂的处理来讲,由上层浏览器所支持的recoDOM对象实现了onReco事件处理程序以执行编程的脚本分析和所述识别返回的后处理。
2.2属性和特征
下述属性被所有浏览器所支持,所述特征被上层浏览器所支持。
2.2.1属性
下述Reco属性用来配置用于一个对话回合的语音识别器。
·initialTimeout:任选。在识别开始和语音检测之间微秒级的时间。这个值被传送给识别平台,如果被超过,则将从所述识别平台提供一个onSilence事件(见2.4.2)。如果未规定,则所述语音平台将将使用缺省值。
·babbleTimeout:任选。微秒级的时间周期,在该周期中,在检测语音之后所述识别器必须返回一个结果。就在自动和单模式情况下的reco来说,这适于在语音检测和停止调用之间的所述周期。就在‘多重’模式下的reco来说,这个超时适于在到语音检测和每个识别结果之间的所述周期上,即在每个结果返回或其他事件之后重新开始所述周期。如果被超过,根据是否发生了误差产生不同的事件。如果所述识别器仍然在处理音频,即处于特别长发言情况下,则利用状态代码13产生onNoReco事件。但是,如果由于任何原因所述超时被超过,则将产生一个识别器误差,并产生onTimeout事件。如果未规定,则所述语音平台将默认一个初始植。
·maxTimeout:任选。在识别开始和返回到所述浏览器的结果之间的微秒级时间周期。如果被超过,则通过所述浏览器产生onTimeout事件-这为分布式环境中的网络和识别器故障提供了必要的条件。就在‘多重’模式下的reco来说,和babbleTimeout一样,在每个识别或其他事件之后重新开始所述周期。注意,maxTimeout属性应当大于或等于initialTimeout和babbleTimeout的总和。如果未规定,则该值将是浏览器故障。
·endSilence:任选。就在自动模式下的reco来说,是在此后必须没有所述识别返回的语音的发言后微秒级的静默周期。除自动模式外忽略模式的reco。如果未规定,缺省值默认为平台内部值。
·reject:任选。识别拒绝阈值,低于该阈值,所述平台将产生‘no reco’事件。如果未规定,所述语音平台将使用缺省值。置信分在0和100(整数)之间。拒绝值位于其间。
·server:任选。语音平台的URI(当标记解释程序和识别平台没有合并在一起时使用)。举例值可以是server=protocol://yourspeechplatform。应用程序写入器也能够通过将一个查询字符串添加到URI字符串上以向语音平台提供特定设置,例如
protocol://yourspeechplatform?bargeinEnergyThreshold=0.5
·langID:任选。字符串,用于指出使用哪一种语言语音引擎。该字符串格式遵循所述xml:lang规定。例如,langID=‘en-us’表示美国英语。只有当langID在所述语法元素(见2.1.2)中没有规定时这个属性才有效。
·mode:任选。用于规定将被遵循的识别模式。如果未规定,默认为‘automatic’模式。
2.2.2特征
下述特征包含由所述识别处理返回的结果(这些由所述上层浏览器支持)。
·recoResult:只读。识别结果,如2.1.2所述,保持在包含语义标记语言(SML)的XML DOM节点对象中。在没有识别的情况下,所述特征返回null。
·text:读/写。用于保持被识别字的文本的字符串(即,在读模式下在recoResult的SML识别返回中的最高层元素的文本属性内容的简写。在写模式下,可以分配一个字符串并分析该字符串是否与所述识别结果对应。所述写模式允许标记语言标记的扩展,并允许对所述客户机设备的其他组件和应用程序进行处理。可以从“SMEX”消息对象中获得所述字符串)。
·status:只读。从识别平台返回的状态代码。对于成功识别来说可能的值是0,或者错误值是-1到-4(如在start方法(部分2.3.1)、Activate方法(部分
2.3.4)上可能的异常中规定的那样),在识别器事件的接收(见2.4)中被设置为-11到-15。
2.3Object method(对象方法):
使用在RecoDOM对象中的下述方法可以控制Reco激活和语法激活。利用这些方法,上层浏览器能够开始和停止Reco对象,取消进行中的识别,激活和去激活个别的语法顶层规则(仅仅是上层浏览器)。
2.3.1start(开始)
所述Start方法开始识别处理,作为激活语法,使用所述顶层规则,用于没有被明确去激活的识别环境。
语法(语法):
Object.Start()
Return value(返回值):
无。
Exception(例外):
所述方法设置非零状态代码,当错误时激活一个onNoReco事件。可能的错误包括没有语法(reco状态=1),对于加载的一个错误是一种语法,该语法可能是与对于编译语法、不存在URI(reco状态=2)或语音平台误差(reco状态=3)类似的各种原因引起的。
2.3.2stop(停止)
所述Stop方法是一个调用,用于结束识别处理。所述Reco对象停止记录音频,所述识别器将所接收音频的识别结果返回到记录被停止的点。释放由所述Reco使用的所有识别资源,而且它的语法被去激活。(注意,由于识别器本身在识别一个完全语句之后将停止,所以,在自动模式的一般识别中不需要使用这种方法。)如果所述Reco还没有开始,那么,所述调用不起作用。
语法(语法)
Object.Stop()
Return value(返回值):
无。
Exception(例外):
无。
2.3.3Cancel(取消)
所述Cancel方法停止将所述音频馈送给所述识别器、去激活所述语法和释放所述识别器,并丢弃任何识别结果。所述浏览器将忽略用于被删除识别的识别结果。如果所述识别器没有被启动,则所述调用无效。
语法:
Object.concel()
Return value(返回值):
无。
Exception(例外):
无。
2.3.4Activate(激活)
所述Activate方法激活上下文无关语法(CFG)中的顶层规则。由于在‘Started’识别处理期间它将无效,所以,在开始识别之前必须调用所述激活。注意,用于还没有被明显去激活的识别上下文的所有语法顶层规则已经被处理为激活。
语法(语法):
Object.Activate(strName);
Parameters(参数):
StrName:必须的。将被去激活的规则名称。一个空字符串将去激活所有规则。
Return value(返回值):
无。
Exception(例外):
无。
2.3.5Deactivate(去激活)
该方法去激活在语法中的顶层规则。如果该规则不存在,则该方法不起作用。
语法:
Object.Activate(strName);
参数:
strName:必需的。要被去激活的规则名称。一个空字符串去激活所有规则。
返回值
无
例外
无
2.4Reco事件
所述Reco DOM对象支持下述事件,这些事件的处理程序可以被规定为所述Reco元素的属性。
2.4.1onReco:
当所述识别器具有所述浏览器可以得到的一个识别结果时,这个事件获得启动。对于在自动模式中的Reco,这个事件自动停止识别处理并清除资源(见
2.3.2)。OnReco通常被用于所述识别结果的按程序分析和将所述结果处理到所述页中。
Syntax(语法):
Event object Info(事件对象信息):
Event Properties(事件特征):
虽然所述事件处理程序没有直接接收所述特征,但该处理程序能查询与数据相关的事件对象(见在下面例子中的事件对象的使用)
举例
下面的XHTML段落使用onReco调用一个脚本去分析识别结果并将所述值指定给适当的字段。
<input name=“textBoxorigin”type=“text”/>
<input name=“txtBoxDest”type=“text”/>
<Reco onReco=“processCityRecognition()”/>
<grammar src=“/grammars/cuties.xml”/>
</reco>
<script><![CDATA[
>function processCityRecognition(){
smlResult=event.srcElement.recoResult;
origNode=
smlResult.selectSingleNode(“//origin_city”);
if(origNode!=null),txtBixDEST.value=
origNode.text;
destNode=
smlResult.selectSinglNode(“//dest_city”);
if(destNode!=空),txtBoxDestvalue=destNode.text;
}
]]></script>
2.4.2onSilence:
onSilence用于在所述Reco上的initialTimeout属性(见2.2.1)中规定的时间周期之前对由所述识别平台检测的无语音事件进行处理。这个事件自动取消了与自动识别模式相关的识别处理。
Event object Info(事件对象信息):
Event Properties(事件特征):
虽然所述事件处理程序没有直接接收特征,但是,所述处理程序可以查询与数据相关的事件对象。
2.4.3onTimeout
onTimeout处理通常反映了来自所述语音平台的误差的两类事件。
·它处理由所述标记解释程序发出的事件,所述标记解释程序发信号通知在所述识别被完成之前在maxtime属性(见2.2.1)中规定的周期到期了。这个事件将反映在分布式结构中所发生的问题。
·当识别已经开始但处理还没有停止并且在由babbleTimeout规定的所述周期中没有识别时,它还处理(ii)由所述语音识别平台发出的事件(见2.2.1)。
这个事件自动删除所述识别处理。
Syntax(语法):
Event object Info(事件对象信息):
Event Properties(事件特征):
虽然所述事件处理程序没有直接接收特征,但是,所述处理程序可以查询与数据相关的事件对象。
2.4.4onNoReco:
onNoReco是一个当它不能返回有效识别结果时用于由所述语音识别平台发出的事件的处理程序。其中可能发生的情况由状态代码识别。该事件自动停止识别处理。
Syntax(语法):
Event object Info(事件对象信息):
Event Properties(事件特征):
虽然所述事件处理程序没有直接接收特征,但是,所述处理程序可以查询与数据相关的事件对象。
3Prompt(提示)
所述提示元素被用于规定***输出。它的内容包括下述中的一个或多个:
·联机或参考文本,它可以利用韵律学或其他语音输出信息进行标记;
·从所包含的文本中随机提取的可变值;
·链接到音频文件。
提示元素可以由下层浏览器(或被SMIL命令激活的)或由在上层浏览器上的对象进行说明性的解释。
3.1Prompt content(提示内容)
所述提示元素包含用于***输出的资源,所述***输出可以是文本、对音频文件的参考或两者。
简单的提示仅仅需要规定输出所需要的文本,例如,:
<prompt id=“Welcome”>
Thank you for calling ACME weather report.
</prompt>
这个简单的文本还可以进一步包含下述类型之一的标记。
3.1.1语音合成标记(Speech Synthesis markup)
在提示元素中可以使用任何格式的语音合成标记语言。(这个格式在3.2.1中描述的‘tts’属性中规定)下述的例子示出了具有用于强调其中某些字的指令的文本:
<prompt id=“giveBalance”>
you have<emph>five dollars</emph>left in your accont
</prompt>
3.1.2动态内容
可能是恰恰在输出所述提示之前需要在所述客户机上计算所述提示的实际内容。为了确认一个特定值,例如在一个变量中需要解除引用所述值。所述值元素可以被用于这个目的。
value元素
value:任选。提取文档中一个元素的值。
属性:
·targetElement:任选。必须规定href或(targetElement)。该元素的id包含将被提取的值。
·targetAttribute:任选。将从中提取所述值的所述元素的属性。
·href:任选。一个音频段的URI。如果两个都存在,那么,href将取代targetElement。
所述targetElement属性被用于引用位于包含文档中的一个元素。其id由targetElement规定的元素的内容被***到将被合成的文本中。如果所希望的内容被保持在所述元素的一个属性中,所述targetAttribute属性可以被用于规定在targetElement上所需的属性。对于在HTML格式控制中解除引用所述值是有用的。例如,在下面的表述中,“txtBoxOrigin”和“txtBoxDest”的“value”属性在输出所示提示之前被***到所述文本中
<prompt id=“Confirm”>
do you want to travel from
<value targetElement=“txtBoxOrigin”
targetAttribute=“value”/>
?
</prompt>
3.1.3Audio files(音频文件)
所述值元素也可以被用于指用于播放在在一个合成提示外或者在其内的预先记录的音频文件。下面的例子在所述提示结束处播放一个笛音:
<prompt>
after the beep,please record your message.
<value href=“/way/beep.wav/”>
</prompt>
3.1.4Referenced prompt(被引用的提示)
不是规定内容联机,而是所述src属性可以经过URI利用一个空元素去引用外部内容,如下:
<prompt id=“welcome”src=“/ACMEWeatherPrompts#Welcome”
/>
所述src属性的目标可以保持规定用于联机提示的任何一个或所有的上述内容。
3.2Attributes和Properties(属性和特征)
所述提示元素保持下述属性(下层浏览器)和特征(下层和上层浏览器)。
3.2.1Attributes(属性)
·tts:任选。用于文本-语音合成的标记语言类型。缺省值为“SAPI 5”。
·src:如果规定了引用提示,则任选。一个引用提示的URI(见3.1.4)。
·bargein:任选。整数。从提示开始到提示所述播放可能被听众中断时的一个微秒级的时间周期。缺省值不限定,即,不允许任何契约(bargein)。契约=0允许直接的契约。它被用于判断哪种契约受到平台的支持。根据在所述reco开始时哪一种被允许,利用这种方式可以配置关键字或以能量为基础的契约次数。
·prefetch:任选。布尔标记,用于当加载所述页时指出所述提示是否应当被立即合成并被高速缓存在浏览器处。
3.2.2Properties(特征)
上层浏览器支持下述所述提示的DOM对象的特征。
·bookmark:只读。字符串对象,用于记录所遇到的最后一个合成书签的文本。
·status:只读。从所述语音平台返回的状态代码。
·Innertext:只读。这个特征将提供所述提示的文本转录,该文本转录将被传送给所述合成器。例如,如果一个提示包括驱动音频波文件,那么,这个特征提供那个提示的文本版本(通常是利用所述音频波文件存储的),然后它将被显示,或者例如通过将所述提示的文本版本提供给运行于所述客户机设备上的一个组件或应用程序加以使用。该innertext特征还能够被用于提供包含动态内容的提示的文本版本。
3.3Prompt methods(提示方法):
在所述提示的DOM对象中可以使用下述方法控制提示播放。利用这种方式,上层浏览器可以开始和停止提示对象。在进行中暂停和恢复所述提示,改变被合成语音的速度和音量。
3.3.1Start(开始)
开始重放所述提示。除非给定一个参数,否则所述方法播放所述对象的内容。在一个给定时间,仅仅有一个单一的提示对象被认为是‘开始’,因此,如果连续调用Start,所有的重放都将被按顺序进行。
语法:
Objects.Start([strText]);
Parameters(参数):
o strText:将被传送给所述合成器的文本。如果存在,这个参数将取代所述对象的内容。
Return value(返回值):
无。
Exception(例外):
如果服务器已经释放了音频缓冲器,则将状态设置为-1,并启动onComplete事件。
3.3.2Pause(暂停)
不用刷新所述音频缓存器的情况下暂停重放。如果重放被暂停或停止了,则这个方法不起作用。
Syntax(语法):
Object.Pause();
Return value(返回值):
无。
例外:
无。
3.3.3Resume(恢复):
不用刷新所述缓存器的情况下恢复重放。如果所述重放并没有被暂停,这个方法不起作用。
Syntax(语法):
Object.Resume();
Return value(返回值):
无。
Exception(例外):
当恢复失败时产生一个例外。
3.3.4Stop(停止)
如果没有准备好,停止重放,并刷新所述音频缓存器。如果重放已经被停止,则该方法简单地刷新所述音频缓存器。
Syntax(语法):
Object.Stop();
Return value(返回值):
无。
Exception(例外):
无。
3.3.5Change(改变)
改变重放的速度和/或音量。所述改变可以在播放期间被调用。
Syntax(语法):
Object.Change(speed,volume);
Parameters(参数):
o Speed(速度):必须。用于改变的因数。Speed=2.0表示当前速率的两倍,Speed=0.5表示当前速率的一半,Speed=0表示恢复所述缺省值。
o volume(音量):必须。用于改变的因数。Volume=2.0表示当前音量的两倍,volume=0.5表示当前音量的一半,volume=0表示恢复所述缺省值。
Return value(返回值):
无。
Exception(例外):
无。
3.3.6提示控制的例子
下述的例子示出了使用上述方法的所述提示控制如何被创作用于不支持键盘契约机构的一个平台。
<html>
<title>prompt control</title>
<head>
<script>
<!-
function checkKWBargein(){
news.change(1.0,0.5);//turn down the volume
while verifying
if(keyword.text==””){//result is below
threshold
news.change(1.0,2.0);//restore the volume
keyword.Start();//restart the recognition
}else{
news.Stop();//keyword detected!Stop the prompt
//Do whatever that is necessary
}
}
//
</script>
<script for=“window”event=“onload”>
<!--
news.Start();keyword.Start();
//
</script>
</head>
body>
<prompt id=“news”bargein=“0”>
Stocks turnd in another lackluster performance Wednesday as investors received
little incentive to make any big moves ahead of next week’s Fedsral Reserve
meeting.The tech-heavy Nasdaq Composition Index dropped 42.51 points to close at
2156.26.The Dow Jones Industrial Average fell 17,05 points to 10866.46 after an
early-afternoon rally failed.
-<!-
</prmpt>
<reco id=“keyword”
reject=“70”
onReco=“checkKWBargein()”>
<grammer src=http://denali/news bargein grammer.xml/>
</reco>
</body>
</html>
3.4提示事件
所述提示DOM对象支持下述事件,它们的处理程序可以被规定为所述提示元素的属性。
3.4.1onBookmark
当遇到一个合成书签时激活。所述事件不暂停重放。
Syntax(语法):
Event Object Info(事件对象信息):
Event Properties(事件特征):
虽然所述事件处理程序没有直接接收特征,但是,所述处理程序能够查询与数据相关的所述事件对象。
3.4.2onBargein
当检测到一个用户的契约事件时激活。(注意,什么构成了例如能量检测或关键字识别的一个契约事件的确定被传送到所述平台。)这个事件处理程序的说明不会自动地打开所述契约。
Syntax(语法):
Event Object Info(事件对象信息):
Event Properties(事件特征):
虽然事件处理程序没有直接接收特征,但所述事件处理程序可以查询与数据相关的所述事件的对象。
3.4.3onComplete:
当所述提示重放达到终点或遇到例外时(如上面所规定的)激活。
Syntax(语法):
Event Object Info(事件对象信息):
Event Properties(事件特征):
虽然所述事件处理程序没有直接接收特征,但是,所述处理程序可以查询与数据相关的事件对象。
3.4.4使用bookmarks和events
下面的例子示出了书签事件如何能够被用于确定用户响应的语义-按照在所述提示输出期间发生契约的时间顺序的出发城市的校正或目标城市的提供。所述onBargein处理程序调用一个将全局‘mark’变量设置为在所述提示中遇到的最后一个书签的脚本,这个‘mark’的值被用在所述reco的后处理功能(“heard”)中以设置所述正确的值。
<script><![CDADA[
var mark;
function interrupt(){
mark=event.srcElement.bookmark;
}
function ProcessCityConfirm(){
confirm stop();//flush the audio buffer
if(mark==“mark_origin_city”)
txtBoxOrigin.value=
event.srcElement.text;
else
txtBoxDest.value=
event srcElement>text;
}
]]></script>
<body>
<input name=“txtBoxOrigin”value=“Seattle”
type=“text”/>
<input name=“txtBoxDest”type=“text”/>
……
<prompt id=“confirm”onBargein=“interrupt()”
bargein=“0”>
From<bookmark mark=“mark_origin_city”/>
<value targetElement=“origin”
targetAttribute=“value”/>
please say<bookmark mark=“mark_dest-city”/>the
destination city you want to travel to.
</prompt>
<reco onReco=“ProcessCityConfirm()”>
<grammar src=“/grm/1033/cities.xml”/>
</reco>
……
</body>
4DTMF
创建DTMF的识别对象。所述对象可以使用联机标记语言语法或通过编制脚本实例化。当被激活时,DTMF能够使得提示对象启动一个契约对象。应当注意,下面结合在第五部分中讨论的DTMF识别和调用控制所讨论的所述标记和事件通常适用于在声音浏览器216和媒体服务器214之间的相互作用。
4.1Content(内容)
·dtmfgrammar:用于联机语法。
·bind:将DTMF转换结果分配给适当的字段。
Attributes(属性):
·targetElement:必须。将分配部分识别结果的元素(与W3C SMIL 2.0相同)。
·targetAttribute:将分配所述识别结果的所述目标元素的属性(与SMIL2.0相同).缺省值是“value”。
·test:与所述分配相关的条件。缺省值是真。
例1:将多个键映像到文本上。
<MDTF id=“city_choice”timeout=“2000”numDigits=“1”>
<dtmfgrammar>
<key value=“1”>Seattle</key>
<key value=“2”>Boston</key>
</dtmfgrammar>
<bind targetElement=“city”targetAttribute=“value”>
/>
</DTMF>
当“city_choice”被激活时,如果用户按压1,则“Seattle”将被分配给输入字段,如果用户按压2,则“Boston”将被分配给输入字段,反之,则没有。
例2:DTMF如何与多个字段一起使用。
<input type=“text”name=“area_code”/>
<input type=“text”name=“phone_number”/>
<DTMF id=“area_code”numDigits=“3”
onReco=“extension.Actuvate()”>
<bind targetElement=“area_code”/>
</DTMF>
<DTMF id=“extension”numDigits=“7”>
<bind targetElement=“phone_number”/>
<DTMF>
这个例子表明了如何允许用户输入到多个字段。
例3:当用户开始DTMF时如何允许语音和DTMF输入以及禁止所述语音。
<input type=“text”name=“credit_card_number”/>
<prompt onBookmark=“dtmf.Start();speech.Start()”
bargein=“0”>
please say<bookmark name=“starting”/>
or enter your credit card number now
</prompt>
<DTMF id=“dtmf”escape=“#”length=“16”
interdigitTimeout=“2000”
onkeypress=“speech.Stop()”>
<bind targetElement=“credit_card_number”/>
</DTMF>
<reco id=“speech”>
<grammar src=“/grm/1033/digits.xml”/>
<bind targetElement=“credit_card_number”/>
</reco>
4.2属性和特征:
4.2.1属性
·dtmfgrammar:必须。DTMF语法的URI。
4.2.2特征
·DTMFgrammar:读-写。
一个XML DOM节点对象,表示到字符串转换矩阵的DTMF(也被称之为DEMF语法)。缺省语法是
<dtmGrammar>
<key value=“0”>0</key>
<key value=“1”>1</key>
…
<key value=“9”>9</key>
<key value=“*”>*</key>
<key value=“#”>#</key>
</dtmfgrammar>
·flush
读/写,布尔标记,用于指出在激活之前是否自动刷新基础电话接口上的DTMF缓存器。缺省值是假,用于使能超前键入。
·escape
读-写。该escape键用于结束所述DRMF读对话。escape键是一个键。
·numDigits
读-写。击键的数量,用于结束所述DTMF读对话。如果规定了所述escape和长度,那么,当满足其中任何一个条件时,所述DTMF对话结束。
·dtmfResult
只读字符串。用于存储用户已经输入的DTMF键。如果击键,则结果中包括所述escape。
·text
用于存储白空间隔离的符号串的只读字符串,其中根据DTMF语法转换每个符号。
·initialTimeout
读-写。用于接收第一次DTMF击键的微秒级的超时周期。如果未规定,则缺省值为所述电话平台的内部设置。
·interdigitTimeout
读-写。用于相邻DTMF击键的微秒级的超时周期。如果未规定,缺省值为所述电话平台的内部设置。
4.3Object methods(对象方法):
4.3.1Start
允许DTMF中断和开始DTMF阅读对话。
语法;
Object.Start();
返回值:
无
例外:
无
4.3.2Stop
禁止DTMF。由所述用户输入的击键,但是保存在所述缓存器中。
语法:
Object.Stop();
返回值:
无
例外:
无
4.3.3Flush
刷新所述DTMF缓存器。在DTMF对话可以不调用所述Flush。
语法:
object.Flush();
返回值:
无
例外:
无
4.***
4.4.1onkeypress
当按压DTMF键时激活。这取代遗传自所述HTMF控制的缺省事件。当用户击打所属escape键时,是onReco事件、而不是onKeypress事件被激活。
语法:
事件对象信息:
事件特征:
虽然所属事件处理程序没有直接接收特征,但是,所述处理程序可以查询与数据相关的事件对象。
4.4.2onReco
当所述DTMF对话结束时激活。所述事件自动禁止当前DTMF对象。
语法:
事件对象信息:
事件特征:
虽然所述事件处理程序没有直接接收特征,但是,所述处理程序可以查询与数据相关的事件对象。
4.4.3onTimeout
当在超时之前没有接收到短语完成事件时激活。该事件自动停止识别处理过程。
语法:
事件特征信息;
事件特征:
虽然所述事件处理程序没有直接接收到特征,但是,所述处理程序能查询与数据相关的时间对象。
5CallControl object(呼叫控制)对象
表示电话声音浏览器的电话接口(呼叫、终端和连接)。该对象的出处与GUI浏览器中的窗口对象相同。因此,所述电话对象的寿命与所述浏览器示例本身相同。用于所述电话的声音浏览器用具体例子说明所述电话对象,即用于每个呼叫的一个。用户不能实例化或处理所述对象。
关于这一点,只有和第一方呼叫控制相关的特性经过这个对象显露出来。
5.1特征
·address(地址)
只读。XML DOM节点对象。实施专用。这是呼叫者的地址。对于PSTN,可以是ANI和ALI的一个组合。对于VOIP,可以是所述呼叫者的IP地址。
·ringsBeforeAnswer
在对输入呼叫的应答之前震铃的数量。缺省无限制,这意味着所述开发者必须使用下面的Answer()方法回答所述电话呼叫。当呼叫中心使用ACD查询所输入的电话呼叫时,这个数量可以被设置为0。
5.2Methods(方法)
注意:这里所有的方法都是同步的。
5.2.1transfer(传输)
传输所述呼叫。对于盲区传输,所述***可以终止原始呼叫,一旦所述传输完成,则解放***资源。
语法:
telephone.Transfer(strText);
参数:
o strText:必须。想要的接收器地址。
返回值:
无
例外:
当所述呼叫传输失败时产生一个例外。例如,当终端方正在忙、没有这个号、传真或应答机构应答时。
5.2.2Bridge
第三方传输。在所述呼叫被传输之后,所述浏览器可以释放分配给所述呼叫的资源。当使用strUID返回所传输的呼叫时,它可以一直到达所述应用程序以恢复所述对话状态。基础电话平台可以将返回的呼叫传送给不同的浏览器。只有当接收者终止所述呼叫时才可以返回所述呼叫。
语法:
telephone.Bridge(strText,strUID,[imaxTime]);
参数:
o strText:必须。想要的接收器的地址。
o strUID:必须。专用于识别当前呼叫的对话ID。当所传输的呼叫被传送回来时,在地址属性中将出现所述srtUID。
o imaxTime:任选。被传输呼叫的秒级最大持续时间。如果未规定,缺省值为平台内部值。
返回值:
无。
例外:
无。
5.2.3Answer(应答):
应答所述电话呼叫。
语法:
telephone.Answer();
返回值:
无。
例外:
当不存在连接时产生一个例外。在这种情况下将不激活onAnswer事件。
5.2.4Hangup(挂机)
结束电话呼叫。如果当前没有呼叫在进行,则不起作用。
语法:
telephone.Hangup();
返回值:
无。
例外:
无。
5.2.5Connect(连接):
开始第一方向外访问的电话喊叫。
语法:
telephone.Connect(strText,[iTimeout]);
参数:
o strText:必须。希望的接收器的地址。
o iTimeout:任选。在放弃所述尝试之前微秒级的时间。如果未规定,缺省值为平台内部值。
返回值:
无。
例外:
当所述呼叫不能被完成时产生一个例外,包括遇到忙信号或到达一个FAX或应答机构(注意:硬件可能不支持这个特性)。
5.2.6Record(记录):
将用户的音频记录到文件中。
语法:
telephone.Record(uel,endSilence,[maxTimeout],
[initialTimeout]);
参数:
o url:必须。所述记录结果的url。
o endSilence:必须。微秒级的时间,用于在检测到寂静之后停止所述记录。
o maxTimeout:任选。用于记录的秒级最大时间。缺省值为平台规定。
o initialTimeout:任选。在记录开始时允许的寂静最大时间(微秒级)。
返回值:
无。
例外:
当所述记录不能被写入所述url时产生一个例外。
5.3事件处理程序
使用电话声音浏览器的APP开发者可以执行下述事件处理程序。
5.3.1onIncoming()
当声音浏览器接收到一个输入声音呼叫时被调用。所有的开发者都能够使用这个处理程序去读取呼叫者的地址和在应答所述电话呼叫之前调用定制的特性。
5.3.2onAnswer()
当所述声音浏览器应答所输入的电话呼叫时被调用。
5.3.3onhangup()
当用户挂起电话时被调用。当所述程序调用Hungup或Transfer方法时,这个事件这个时间不能自动产生。
5.4例子
这个例子示出了编制的一个脚本,用于链接到所述呼叫控制事件以操纵所述电话对话。
<HTML>
<HEAD>
<TITLE>Logon page</TITLE>
</HEAD>
<SCRIPT>
var focus;
function RumSpeech(){
if(logon.user.value==“”){
focus=“user”;
p_uid.Start();g_login.Start();dtmf.Start();
return;
}
if(logon.pass.value==“”){
focus=“pin”;
p_pin.Start();g_lodin,Start();dtmf.Start();
return;
}
p_thank.Start(0;logon.submit();
}
function logon_reco(){
res=event.srcElement.recoResult;
Pnode=res.selectSingleNode(“//uid”);
If(Pnode!=null)
Logon.user.value=Pnode.xml;
Pnode=res.selectSingleNode(“//password”);
If(Pnode!=null)
Logon.pass.value=Pnode.xml;
}
function dtmf_reco(){
res=event.srcElement.dtmfResult;
if(focus==“user”)
logon.user.value=res;
else
logon.pin.value=res;
}
</SCRIPT>
<SCRIPT for=“callControl”event=“onIncoming”>
<!-
//read address,prepare customized stuff if any
callControl.Answer();
//
</SCRIPT>
<SCRIPT for=“callControl”event=“onOffhook”>
<!--
p_main.Start();g_login,Start();dtmf.Start();
focuse=“user”;
//
<SCRIPT>
<SCRIPT for=“window”event=“onload”>
<!--
if(logon.user.value!=“”){
p_retry.Start();
logon.user.value=“”
checkFields();
}
//
</SCRIPT>
<BODY>
<reco id=“g_login”>
oReco=“login_reco();runSpeech()”
timeout=“5000”
onTimeout=“p_miss.Start();runSpeech()”>
<grammar
src=http://kokaneei/etradedemo/speechonly/login.xml/>
<reco>
<dtmfid=“dtmf”
escape=“#”
onkeypress=“g_login.Stop();”
onreco=“dtmf_reco();RunSpeech()”
interdigitTimeout=“5000”
onTimeout“dtmf.Flush();p_miss.Start();RunSpeech”/>
<prompt id=“p_main”>please say your user ID and pin
number</prompt>
<prompt id=“p_uid”>please just say your user ID</prompt>
<prompt id=“p_pin”>please just say your pin number</prompt>
<prompt id=“p_miss”>Sorry,I missed that</prompt>
<prompt id=“p_thank”>thank you.please wait while I verify
your identity</prompt>
<prompt id=“p_retry”>sorry,your user ID and pin number do
not match</prompt>
<H2>login<“logon”>
<formid=“logon”>
UID:<input name=“user”type=“text”>
OnChange=“runSpeech()”/>
Pin:<inputname=“pass”type=“password”
OnChange=“runspeech()”/>
</form>
</BODY>
</HTML>
6 控制对话流程
6.1使用HTML和脚本执行对话流程
这个例子示出了如何执行一个简单的对话流程,所述流程查找与输入框相关的值并提供用于所述输入的与上下文敏感的帮助。它使用在所述HTML输入机构(在作为“工具触点”的可视浏览器中使用的)上的题目属性帮助形成所述帮助提示的内容。
<html>
<title>Contex Sensitive help</title>
<head>
<script>var focus;
function RunSpeech(){
if(trade.stock.value=””){
focus=“trade.stock”;
p_stock,Start();
return;
}
if(trade.op.value=“”){
focus=“trade.op”;
p_op.Start();
return;
}
//..repeat above for all fields
trade.submit();
}
function handl(){
res=event.srcElement.recoResult;
if(res.text=“help”){
text=“please just say”;
text+=document.all[focus].title;
p_help.Start(text);
}else{
//proceed with value assignments
}
}
</script>
</help>
<body>
<prompt id=“p_help”onComplete=“checkFileds()”/>
<prompt id=“p_stock”onComplete=“g_stock.start()”>please say
the stock name</peompt>
<peompt id-“p_op”onComplete=“g_op”.Start()>Do you want to buy or
sell</prompt>
<prompt id=“p_qantity”onComplete=“g_quantity.Start()”>how
many shares?</prompt>
<prompt ie=“p_peice”onComplete=“g_price.Start()”>What’s the price</
prompt>
<reco id=“gz-stock”onReco=“handle();checkFields()”>
<grammar src=“g_stock.xml”/>
</reco>
<reco id=“g_op”onReco=“handle()”;checkFields()/>
<grammar src=“./g_op.xml”/>
</reco>
<reco id=“g-quantity”onReco=“handle();checkFields()”/>
<grammar src=“./g_quant.sml”/>
</reco>
<reco id=“g_price”onReco=“handle();checkFields()”/>
<geammar src=“./guant.xml”/>
</reco>
<form id=“trade”>
<input name=“op”title=“stock name”/>
<select name=“op”title=“buy or sell”>
<option value=“buy”/>
<option value=“sell”/>
</select>
<input name=“quantity”title=“numeber of shares”/>
<input name=“price”title=“price”/>
</form>
</body>
</html>
6.2使用SMIL
下面的例子示出了使用SMIL机构激活提示和reco元素。
<html xmlns:t=“urn:schemas-microsoft-com:time”
xmlns:sp=“run:schemas-microsoft-com:speech”>
<head>
<style>
.time{behacior:url(#default#time2);}
</style>
<head>
<body>
<input name=“txtBoxOrigin”type=“text”>
<input name=“txtBoxDest”type=“text”/>
<sp:prompt class=“time”t:begin=“0”>
Please say the origin and destination cities
</sp:prompt>
<t:par t:begin=“time.end”t:repeatCount=“indefinitely”
<sp:reco class=“time”>
<grammar src=./fity.xml/>
<bind targetElement=“txtBoxOrigin”
value=“//origin_city”/>
<bind targetElement=“txtBoxDest”
test=“/sml/dest_city[@confidence$gt$40]”
value=“//dest_city”/>
</sp:reco>
</t:par>
</body>
</html>
7 SMEX(消息)元素/对象
作为简单消息交换/扩展的简称,SMEX是一个与外部组件或客户机设备平台上的应用程序进行通信的对象。它可以被***到XML或类似的以标记为基础的文本中作为具有标记名<smex>的元素。该消息对象的范例用途可以包括登录和电话控制。该对象表示当它允许一个新的功能通过发消息被添加时以标记为基础的识别和提示的可扩展性。
在举例说明的基础上,所述对象被用于利用平台组件或应用程序经过它自己的配置参数或属性规范建立一个同步消息交换信道。它具有一个字符串特性,每当所述特性是分配操作的接收者(即1值)时,该特性内容被传送给所述平台组件或应用程序。类似的,它还具有SML DOM Node类型特性,用于保持从所述平台组件或应用程序中接收的所述消息。所述消息对象每当接收一个平台消息时都要传送一个事件。由于它的基本操作是同步的,所以,该对象还具有内置时钟,用于使应用程序的开发者操纵超时设置。
对于所述通信装置来讲,所述消息或smex对象是不可知的。但是,在一个实施例中,所述smex对象与原始XML或标记元素具有相同的寿命,即,当它的主机文档没有被加载时,所述smex对象将被破坏。而在很多情况下,当它未被加载时,所述smex对象能够执行自动清除并释放通信资源。可以有很多使用情况,在这些情况下,在标记页两端不希望进行持久的通信链接。对于这些情况,所述结构将把停止分配资源(即关闭插座)的责任放置在所述应用程序的开发者身上。
所述smex对象在消息格式(方案)方面是中性的。在某些实施例中,它可能希望要求执行者利用对现存标准消息格式(例如在SIP或CCXML中使用的)的强烈偏爱支持少量的基本方案。实质上,所述结构允许所述平台和应用程序开发者采用XML或类似标记的标准化可扩展性的所有优点以便引入其他的特性而不损失平均时间的相互可操作性。
例1:使用smex作为登录对象
<smex id=“logServer”>
<param name=“d:server”xmlns:d=“run:Microsoft.com/COM”>
<d:protocol>DCOM</d:protocol>
<d:clsid>2093093029302029320942098432098</d:clsid>
<d:iid>090385930490349853095309094803</d:iid>
</param>
</smex>
<listen...>
...//other directtices binding reco results to input
fields
<bind targetElement=“logServer”targetAttribude=“sent”
value=“*[@log$ge$3]”/>
</listen>
这个例子说明了如何使用一个具有它的类id和接口id的com对象来实现一个登录机构。语音开发者把一个指示用于登录的兴趣级别的属性“log”加到相关的SML节点上。在上述实施例中,app开发者通过使用单个连接指示选择用大于或等于3的登录值登录所有节点。该例子在上层和下层浏览器中都可使用。
这个例子还试图说明只要不出现smex对象对返回到所述识别文档的所述平台消息的传送响应的混淆,一个页就可以包含与相同平台组件通信的多个smex对象。上述例子说明一个组件可以实现多个接口,其中的每一个接口都具有它自己的smex或消息导管。相同的参数施加到TCP服务器上以听取多个端口。
例2:阅读与输入呼叫相关的地址:
<input type=“text”id=“remote”/>
<input type=“text”id=“transfer”/>
<input type=“text”id=“local”/>
<input type=“hidden”id=“session_id”/>
……
<smex id=“telephone”sent=“start_listening”>
<param name=“server”>http://tel-scr/whatever</param>
<bind targetElement=“session_id”value=“//sid”/>
<bind targetElement=“remote”value=“//remote_addr”/>
<bind targetElement=“transfer”
value=“//transferaddr”/>
<bind targetElement=“local”value=“//local_addr”>
……
</smex>
这个例子示出了所述连接指示是如何能够被用于处理所接收的消息的。这个例子假设用于输入呼叫的消息具有多个子元素:remote_addr、transfer_addr和local_addr,它们的内容分别表示所输入呼叫的远程、传输和本地地址。
在这个例子中,以HTTP为基础的无连接协议被用于与所述电话服务器通信。这里所述电话服务器被设计成与一个以上的浏览器通信,因此,当app开始时,每个客户机都必须使用由所述服务器指定的专用id识别它本身。在这个例子中,它是通过由所述服务器传送“start_listening”消息实现的。在这个例子中,虽然其他技术(例如客户机端COOKIE)也可以被用于管理对话状态,但是,对话id被存储在可以被传送回给所述Web服务器并且被传送给所述应用程序的下一页的隐藏字段中。与用于Reco的情况相同,对于每个平台消息来讲并不是每个连接指示都被执行。上述例子并不意味着当存在一个输入电话呼叫时仅仅接收所述专用id。
7.1特征
由于只有所述读/写特征被作为与初始值规定相关的属性允许进行服务,所以,所述smex对象可以具有下述特征。
·Sent:读/写。与将被传送给所述平台组件的消息对应的一个字符串。每当所述传送被作为1值(lvalue)使用时,它的内容被发送。当所述特征被用做r值(rvalue)或当一个空对象被指定给这个特征时,它不起作用。
·received:只读,用于指出所接收消息的SML DOM节点数据。在下一个onRecieve事件被准备好传送之前所述消息将可以得到作为所述r值(rvalue)。
·timer:读/写,微秒级的、用于指出在触发一个超时事件之前过去时间的数量。当所述特征被分配给一个正值时,所述时钟开始启动。当正在进行向下计数时,所述值可以变化。在不触发所述超时事件的情况下,0或负值停止所述时钟。缺省值为0。意味着没有超时。
·status:只读,用于指出所述对象最新状态的一个整数。可能的值是0、-1和-2,他们分别意味着正常、超时期满和不能建立与所述平台的通信或已经中断。通过所接收的特征传送平台专用误差消息。对于连续传送所述误差消息的情况下,所述状态代码为0。
7.2Event(事件):
所述对象具有下述特征:
·onRecieve:当得到所述平台消息时传送这个事件。如果具有通过bind元素传送的任何命令,那么,在所述事件被启动之前首先评估这些命令。在传送之前,所述received特征将被更新。
·onError:当所述超时期满或遇到一个通信链接误差时传送这个事件。当传送该事件时,如上所述将利用一个相应的误差码来更新所述status特征。
7.3Child Elements(子元素)
当假设一个元素形成时,smex可以具有下述子元素:
·bind:除了所述指令工作于所接收的消息以外,与在reco中的情况相同。
·param:与在reco中情况相同,用于提供与所述smex对象相关的平台专用参数。可以使用“name”属性,并且param元素的内容是该参数的值。在一个实施例中,所述参数应当被理解为与名称空间和XML数据类型传送相关的标准XML属性。
7.4Other Comments(其它命令):
一种用于扩充与登录功能相关的SMEX的理想方式是:
<smex id=“logSerwer”...>...</smex>
<script>function logMessage(logClass,message){
logSerwer.sent=logClass+“|”+message;
}</script>
实际上,这利用其性能可以被定制的(全局)功能扩展了所述对象。在上述的例子中,所述登录功能被编程以便在所述id和所述消息之间***字段分割符:“|”。
对于那些不喜欢全局功能的人来讲,作为一种对象方法,他们可以使用ECMAScript的“prototype”属性。例如:
<smex id=“logSerwer”onload=“addFunction()”>...</smex>
<script>
function my_logMessage(logClass,message){
logSerwer.sent=logClass+“1”+message;
}
function addFunction(){
logSerwer.prototype.logMessage=
my_logMessage;
}
</script>
一个可以以多种面向对象的方式提供所述功能:
logSerwer.logMessage(RECO_LOG_ERROR,“My message”);
应当注意,为了在上述例子中进行扩展,虽然所有必须的结构都已经被很好地建立了标准结构,但是,还需要来自所述smex对象构成中的多项工作。