语音技术
微软公司董事长比尔盖茨曾不止一次的提出,语音技术将越来越多得改变我们的生活。新一代的搜索引擎也将使用语音最为最终的输入手段;电脑键盘的作用将逐步减少,今后人们使用电脑时将不再是通过键盘输入文字,而是用语音来输入文字。
不可否认的是,如今的语音技术还未达到如他所述的成熟程度。但是一些简单的应用,例如语音拨号的功能已经被大家所接受。基于语音技术的自动应答系统在欧美已然流行开来,帮助像银行,移动运营商这样的大型服务性机构搭建无人电话语音服务,以此减少接线员的工作量,给大家的生活带来便利。
VXML 简介
Voice eXtensible Markup Language(简称 VXML)是被用来创建语音对话系统,可以调用语音合成以及语音识别服务,可以用来记录语音录入和连接电话系统。创建 VXML 语音的主要目的就是用 Web 开发的理念来开发交互式的语音应用。VXML 提供了基于 Menu 和基于 Form 的两套框架,整合了语音识别和语音合成两个关键服务,使得语音应用的开发变得更为方便和快捷。
VXML 的运行环境
VXML 和普通的标记语言一样,需要有浏览器进行解析;还需要提供语音识别和语音合成服务的应用服务器;有时也需要有 http 服务器提供文档服务;当然,如果需要与电话系统相连,就必须加上 VOIP (网络电话)的支持。如下图所示的就是 VXML 的运行环境:
图 1. VXML 运行环境
一个企业级应用的系统框架
IVR (interactive voice-response services) 也就是自动应答服务,是使用 VXML 的典型企业级应用。IVR 和使用者通过电话,按键 (DTMF) 互动,如语音订票,语音查询,语音投票等。普通的 IVR 都是支持 VXML 的解析和提供了 sip 协议的支持,通过和 ASR ( 语音识别 ) 应用服务器以及 TTS( 语音合成 ) 应用服务器的集成,可以实现几乎所有的 VXML 封装的操作。
企业级的 VXML 应用需要如下的体系结构,以使用 IBM Voice Server (WVS) 为例:
图 2. 一个 VXML 具体应用的例子
上图中的 IVR 事实上就是 VXML 解析器,通过解析 VXML,分发相应的工作给 WVS ,实现 VXML 封装的语音识别和语音合成的功能。
两个开源的实验环境
尝试 VXML,可以使用开源的项目 OpenVXI (见参考资源) 。OpenVXI 提供的是完整的 VXML 解析服务,同时也提供了有限语言的 TTS 支持。虽然暂时来看, OpenVXI 没有提供 ASR 的实现,但是 OpenVXI 提供了方便的回调函数的接口,因此可以很方便的嵌入外部 ASR 和 TTS 的服务。
尝试 VXML ,另一个选择是使用一个名为 Tadpole (见参考资源) 的 Firefox 浏览器上的开源插件。通过 Tadpole 的帮助, Firefox 平台因此具有 VXML 解析浏览器的功能。此架构的缺点是只支持 XHTML-Voice 标记语言,这个语言只能说是 VXML 语言的一个子集。
搭建自己的 VXML 中文应用
从一个简单的例子开始
清单 1. 一个典型的 VXML 的例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
meta
name
=
"GENERATOR"
content
=
"Voice demo"
/>
<
form
id
=
"head"
>
<
block
>
请问您需要何种服务?
<
audio
src
=
"BEEP.WAV"
/>
<
goto
next
=
"#main"
/>
</
block
>
</
form
>
<
menu
id
=
"main"
>
<
choice
next
=
"menu_1.jsp"
>
开空调
</
choice
>
<
choice
dtmf
=
"1"
next
=
"menu_1.vxml"
/>
<
choice
next
=
"menu_2.jsp "
>
开洗澡水
</
choice
>
<
choice
dtmf
=
"2"
next
=
"menu_2.vxml"
/>
<
choice
next
=
"menu_3.jsp"
>
打开音响
</
choice
>
<
choice
dtmf
=
"3"
next
=
"menu_3.vxml"
/>
<
catch
event
=
"noinput"
count
=
"1"
>
<
prompt
> 请问您需要何种服务? <
audio
src
=
"BEEP.WAV"
/> </
prompt
>
</
catch
>
<
catch
event
=
"noinput"
count
=
"2"
>
<
submit
next
=
"menu_whole.vxml"
/>
</
catch
>
<
catch
event
=
"nomatch"
>
<
prompt
> 对不起,我没有听清,请再重复一遍。 <
audio
src
=
"BEEP.WAV"
/> </
prompt
>
</
catch
>
</
menu
>
</
vxml
>
|