你可能已经注意到如今语音合成越来越普遍成百上午的电动玩具和小器具都能够以机器的声音向它们的主人讲话不管它是一个讲话的婴儿玩偶一个会谈话的计步器或是一新的自动电话系统现在几乎每天都会有一种使用文本来发音的产品发行
文本到语音(TTS)技术也称为语音合成是把输入的文本转换成音频语音的过程这种方式会优于预先录制好的文本它必须对要说的内容提前了解而使用TTS却有可能加入动态的信息该动态的信息可以来自于一个数据库或是用户不断重复的话
一 TTS试验
如果你看到或听说过实际的TTS那么你可能想下载一个免费版本的ReadPlease 该产品能够读取Windows剪贴板中的文本要使用它你只需要简单地把一些文本粘贴到ReadPlease编辑器中(见图)并且假定你的PC扬声器打开了那么你会听到文本的播放当前该产品仅能工作在所有的Windows桌面OS版本中但是他们还计划发行针对MacUnixPalm和Windows CE系统的版本
ReadPlease令人感兴趣的地方在于你可以使用ReadPlease编辑器来试验你的TTS参数选择例如你可以通过上下移动如图所示的Speed滑动块控件来调整发音速度你还可以通过点击在小脸图标下方的箭头按钮来改变所用的语音
图ReadPlease 应用程序这个Windows应用程序可能读任何从剪贴板中粘贴到编辑字段中的文本
你需要什么呢?Visual StudioNET 微软语音应用程序SDK
点击Tools菜单然后选择Options允许你进一步用该TTS编辑器进行试验例如你可以调整在段落之间的语音引擎的暂停时间长度升级到ReadPlease Plus版本将可以使你存取另外的一个发音编辑器选项它让你指定怎样读一个特别的词ReadPlease Plus还包括一个你可以停靠在你的Windows桌面顶部的任务条因此你可以快速地从任何基于文件的应用程序拖动文本到任务栏上并让它读给你听
缺省状态下该ReadPlease应用程序使用内置的微软语音(MarkMikeSam或Marilyn)但是你可以选择性地购买更高质量的AT&T Natural Voices例如在AT&T Natural Voices Starter Pack中提供的语音该Starter包包括K版本的Mike和Crystal它们二者听起来都优于缺省的微软声音
作者注 术语K意味着该抽样频率用于创建发生在每秒位的WAV文件另外一种格式是k它可以产生一种更清晰和更为自然的听觉效果基本上样本率越高声音质量好越
二 微软语音应用程序开发包SDK
在年微软发行了 Microsoft Speech Server还有一个免费的SDK允许你开发基于Web的运行于Speech Server上的语音程序可以使用SDK来构建电话或只发声的应用程序其中的计算机对用户的交互是使用电话来实现的同时你还可以构建多模态应用程序其中由用户选择使用语音还是传统型Web控件作为输入
微软TTS引擎通过把单词拆分成音素来合成文本音素是人类语言的基本单位它们代表一组音正是由它们构成单词的声音然后由该TTS引擎分析提取的音素并且把它们转换成符号用来生成数字音频语音
你可以使用随同本文的可下载的示例应用程序(ExploringTextToSpeechcsproj)来试验微软TTS引擎可配置的方面该多模态应用程序包含一个Web页面(见图)你可以在其中输入一些文本然后可以点击一个按钮来以下面方式听取文本
作者注在要被播放的文本无法提前知道的情况下使用一TTS引擎是不可避免的然而你可以由录制音频来得到更好的音质当音频质量是关键的时你可以使用微软语音应用程序软件开发工具箱(SASDK)来录制音频例如你可能想使用录制的音频来提示用户信息被记录的音频可以被分解成一系列的提示它们在运行时刻再被连接起来
Speak Text Normally提供一种测试基准
Say as an Acronym文本ASP被发作ASP
Say as NameMrJohn 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文本以低音调适中音量发出
该多模态应用程序使用一提示控件来指定将被播放给用户的音频该提示控件包含InlineContent属性——它可以包含一个或者是Content型或者是Value型的基本Speech控件该Content控件指定一特定的包含存储的音频记录的提示文件该Value控件指定一个HTML Web页面中的元素该示例应用程序使用一Value控件——它参考一个名为txtText的输入元素(在图中的Type some text here域)下面是描述了用于一个提示的标注的HTML
<speechprompt id=prmText runat=server><InlineContent><speechValue runat=server TargetElement=txtText TargetAttribute=value></speechValue></InlineContent></speechprompt>
三 语音合成标注语言
该TTS引擎在怎样播放由属性InlineContent参考的文本时作出某些缺省的假设但是开发者能通过使用语音合成标注语言(SSML)元素来控制该TTS引擎生成音频的方式根据WC协会的推荐SSML是一基于XML的标注语言表列举出由SASDK所支持的SSML元素
表被支持的SSML元素表中列出由SASDK所支持的SSML元素并且用于控制TTS引擎生成文本的方式
SSML元素 描述ssmlparagraph/ssmlsentence 用于把文本分解成语句或段落
ssmlsayas 用于指定播放文本的方式它能够接受若干不同的属性来指定文本的类型
ssmlphoneme 用于控制一个单词的发音方式
ssmlsub 用于指定一个替代单词或词组来代替指定的文本
ssmlemphasis 用于提高放到一单词或词组中的重音
ssmlbreak 用于在文本的某些单词间插入一些暂停
ssmlprosody 用于控制音调速率和音量
ssmlaudio 用于插入被录制的音频文件
ssmlmark 用于在文本的某个位置插入一个标记然后可以使用这个标记来表示一事件或触发一个行为
该示例应用程序说明了sayas和prosodySSML元素的使用在该Defaultaspx页面上的每个按钮都相应于一个提示控件这些提示控件在InlineContent元素中包括一ssmlsayas或一个ssmlprosody元素下面示例显示了针对这些元素之一的HTML标注
<speechprompt id=prmSayAsAcronym runat=server><InlineContent><ssmlsayas type=acronym><speechValue runat=server TargetElement=txtText TargetAttribute=value></speechValue></ssmlsayas></InlineContent></speechprompt>
当用户点击这些按钮之一它执行如下所示的JavaScript
function SayAsAcronym() { prmSayAsAcronymStart()}
在上面的示例中名为prmSayAsAcronym的提示包括了ssmlsayas元素它指定任何包含在txtText输入元素中的文本都应该被以每个单词的第一个字母方式发出因此如果你输入ASP到文本元素中并且点击Say As Acronym那么该TTS引擎将读每个字母
为了用该示例应用程序进行试验你可以输入一些文本片断然后点击每一个按钮来看一下该TTS引擎是怎样解释文本的我主张你改变元素值并且用每一个控件生成的方式进行试验SASDK提供给开发者关于该TTS引擎怎样生成文本的良好控件因此试验可能会导致出现一种更为自然的基于语音的应用程序