二、 微软语音应用程序开发包sdk 1.1
在2004年,微软发行了 microsoft speech server,还有一个免费的sdk允许你开发基于web的运行于speech server上的语音程序。可以使用sdk来构建电话或只发声的应用程序-其中的计算机对用户的交互是使用电话来实现的。同时你还可以构建多模态应用程序,其中由用户选择使用语音还是传统型web控件作为输入。
微软tts引擎通过把单词拆分成音素来合成文本。音素是人类语言的基本单位。它们代表一组"音",正是由它们构成单词的声音。然后由该tts引擎分析提取的音素并且把它们转换成符号用来生成数字音频语音。
你可以使用随同本文的可下载的示例应用程序(exploringtexttospeech.csproj)来试验微软tts引擎可配置的方面。该多模态应用程序包含一个web页面(见图2),你可以在其中输入一些文本。然后,可以点击一个按钮来以下面方式听取文本。
作者注:在要被播放的文本无法提前知道的情况下,使用一tts引擎是不可避免的;然而,你可以由录制音频来得到更好的音质。当音频质量是关键的时,你可以使用微软语音应用程序软件开发工具箱(sasdk)来录制音频。例如,你可能想使用录制的音频来提示用户信息。被记录的音频可以被分解成一系列的提示,它们在运行时刻再被连接起来。
· speak text normally-提供一种测试基准
· say as an acronym-文本"asp"被发作"a.s.p."
· say as name-mr.john doe被发作"mister john doe"
· say as date-在这种情况中,日期格式化为:月,日,年
· say as web address-在这种情况中,文本格式化为一个统一资源标识符(uri)
· say as digits-作为文本输入的数字被发作一系列的位
· high pitch/slow rate-文本以高音调慢速发出。
· rate fast/volume loud-文本以快速高音发出。
· low pitch/volume soft-文本以低音调适中音量发出。
图2.示例应用程序-你可以使用这个程序来听一下以多种方式说出的文本。
该多模态应用程序使用一提示控件来指定将被播放给用户的音频。该提示控件包含inlinecontent属性——它可以包含一个或者是content型或者是value型的基本speech控件。该content控件指定一特定的包含存储的音频记录的提示文件。该value控件指定一个html web页面中的元素。该示例应用程序使用一value控件——它参考一个名为txttext的输入元素(在图2中的"type some text here:"域)。下面是描述了用于一个提示的标注的html:
<speech:prompt id="prmtext" runat="server">
<inlinecontent>
<speech:value runat="server"
targetelement="txttext"
targetattribute="value">
</speech:value>
</inlinecontent>
</speech:prompt>
三、 语音合成标注语言
该tts引擎在怎样播放由属性inlinecontent参考的文本时作出某些缺省的假设,但是开发者能通过使用语音合成标注语言(ssml)元素来控制该tts引擎生成音频的方式。根据w3c协会的推荐,ssml是一基于xml的标注语言。表1列举出由sasdk所支持的ssml元素。
表1.被支持的ssml元素:表中列出由sasdk所支持的ssml元素并且用于控制tts引擎生成文本的方式。
ssml元素 描述
ssml:paragraph/ssml:sentence 用于把文本分解成语句或段落。
ssml:say-as 用于指定播放文本的方式。它能够接受若干不同的属性来指定文本的类型。
ssml:phoneme 用于控制一个单词的发音方式。
ssml:sub 用于指定一个替代单词或词组来代替指定的文本。
ssml:emphasis 用于提高放到一单词或词组中的重音。
ssml:break 用于在文本的某些单词间插入一些暂停。
ssml:prosody 用于控制音调,速率和音量。
ssml:audio 用于插入被录制的音频文件。
ssml:mark 用于在文本的某个位置插入一个标记。然后可以使用这个标记来表示一事件或触发一个行为。
该示例应用程序说明了say-as和prosodyssml元素的使用。在该default.aspx页面上的每个按钮都相应于一个提示控件。这些提示控件在inlinecontent元素中包括一ssml:say-as或一个ssml:prosody元素。下面示例显示了针对这些元素之一的html标注:
<speech:prompt id="prmsayasacronym" runat="server">
<inlinecontent>
<ssml:say-as type="acronym">
<speech:value runat="server"
targetelement="txttext"
targetattribute="value"></speech:value>
</ssml:say-as>
</inlinecontent>
</speech:prompt>
当用户点击这些按钮之一,它执行如下所示的javascript:
function sayasacronym() {
prmsayasacronym.start();
}
在上面的示例中,名为prmsayasacronym的提示包括了ssml:say-as元素,它指定任何包含在txttext输入元素中的文本都应该被以每个单词的第一个字母方式发出。因此,如果你输入"asp"到文本元素中并且点击"say as acronym",那么该tts引擎将读每个字母。
为了用该示例应用程序进行试验,你可以输入一些文本片断,然后点击每一个按钮来看一下该tts引擎是怎样解释文本的。我主张你改变元素值并且用每一个控件生成的方式进行试验。sasdk提供给开发者关于该tts引擎怎样生成文本的良好控件,因此试验可能会导致出现一种更为自然的基于语音的应用程序。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器