面向应用程序开发者的SAPI XML TTS

SAPI 文本语音转换(TTS)扩展标记语言(XML)标签分成几个范畴。

声音状态控制

直接项插入

声音上下文控制

声音选择

声音状态控制标签

SAPI TTS XML 支持五个控制当前声音状态的标签:Volume, Rate, Pitch, Emph, 和 Spell。

Volume

Volume标签控制一个声音的音量。这个标签可以为空,这种情况应用于所有的该标签后面的文本,或者它也可以有内容,这种情况应用于标签内的内容。

Volume标签需要一个属性:Level。这个属性的数值应该是一个在0到100的整数。超出这个范围的数值将被忽略。

<volume level="50">

这个文本应该用50级别的音量朗读。

   <volume level="100">

      这个文本应该用100级别的音量朗读。

   </volume>

</volume>

<volume level="80"/>

以下的全部文本应该用80级别的音量朗读。

100是一个声音默认的音量级别。低数值表现的是这个默认数值的百分比。这意味着50就是最大音量的50%。

用Volume标签指定数值可以结合在编程中(使用ISpVoice::SetVolume)。例如,如果你结合<volume level="50">标签调用SetVolume( 50 ),那么声音的音量因该是全音量的25%。

Rate

Rate标签控制一个声音的速度。这个标签可以为空,这种情况应用于所有的该标签后面的文本,或者它也可以有内容,这种情况应用于标签内的内容。

Rate标签有两个属性,Speed和AbsSpeed,必须指定其中一个。这两个属性的数值必须是-10到10之间的整数。超出范围的数值将被引擎忽略(但是不被SAPI忽略)。AbsSpeed属性控制一个声音的绝对速度,所以一个数值为10声音总是符合一个10的数值,一个数值为5声音总是符合一个5的数值。

<rate absspeed="5">

   这个文本应该用速率5朗读。

   <rate absspeed="-5">

      这个文本应该用速率-5朗读。

   </rate>

</rate>

<rate absspeed="10"/>

以下的全部文本应该用速率10朗读。

Speed

Speed属性控制一个声音相对的速率。绝对数值是使用当前的绝对速度加在每个速度上建立的。

<rate speed="5">

这个文本应该用速率5朗读。

      <rate speed="-5">

         这个文本应该用速率0朗读。

      </rate>

</rate>

0是一个声音默认的速度。为正数时速度比较快,为负数时速度比较慢。在编程中可以结合使用Rate标签指定数值(使用 ISpVoice::SetRate)。

Pitch

Pitch标签控制一个声音的音调。这个标签可以为空,这种情况应用于所有的该标签后面的文本,或者它也可以有内容,这种情况应用于标签内的内容。

Pitch标签有两个属性,Middle和AbsMiddle,两者必须指定一个。这两个属性的数值必须是-10到10之间的整数。超出范围的数值将被引擎忽略(但是不被SAPI忽略)。

AbsMiddle属性控制声音绝对的音调,所以一个数值为10声音总是符合一个10的数值,一个数值为5声音总是符合一个5的数值。

<pitch absmiddle="5">

这个文本应该用音调5朗读。

   <pitch absmiddle="-5">

这个文本应该用音调-5朗读。

   </pitch>

</pitch>

<pitch absmiddle="10"/>

以下的文本应该全用音调10朗读。

Middle属性控制一个声音相对的音调。绝对数值是使用当前的绝对音调加在每个音调上建立的。

<pitch middle="5">

这个文本应该用音调5朗读。

   <pitch middle="-5">

这个文本应该用音调0朗读。

   </pitch>

</pitch>

0是一个声音默认的音调。为正数时音调比较高,为负数时音调比较低。

Emph

Emph标签指出声音强调一个单词或者一部分文字。这个标记不能为空。下列的单词将被强调。

<emph> boo </emph>!

这个方法可能因为声音的不同而不同。

Spell

Spell标签强制声音拼出所有的文本,胜于它默认会破坏规则的普通的方式。所有的字符将被作为单词读出(包括逗号,数字等)。Spell标签不能为空。

<spell>

这些单词将被拼出。

</spell>

这些单词将不被拼出。

直接项插入标记

应用程序支持具有在一些级别上直接插入项的能力的三个标签:Silence,Pron,Bookmark。

Silence

Silence标签功能是插入一个指定的毫秒级的静寂时间到音频输出流中。这个标签必须为空,并且它必须有一个属性Msec。

500毫秒的静寂 <silence msec="500"/> 才发生到这。

Pron

Pron 标签插入一个指定的发音。声音将严格的按照被指定的音素的顺序处理音素。这个标签可以为空,也可以不为空。如果它不为空的话,它将认为是为附上的文本的提供的发音。这意味着附上的文本将不被按照正常的方式处理。

Pron标签有一个属性,Sym,它的数值是一个用空格分割音素的字符串。

<pron sym="h eh 1 l ow & w er 1 l d "/>

<pron sym="h eh 1 l ow & w er 1 l d"> hello world </pron>

Bookmark

Bookmark 标签插入一个书签事件到一个音频输出流。当与文本相应的音频到达书签标记时使用这个事件来通知应用程序。

Bookmark标签有一个属性,Mark,它的数值是一个字符串。这个数值可以区分不同的书签事件(每个事件包含与他们相对应的标签的字符串值)。

应用程序将在这接受一个事件

<bookmark mark="bookmark_one"/>

在这将接受另一个事件

<bookmark mark="bookmark_two"/>

声音上下文控制标签

有两个标签关联当前声音的上下文:PartOfSp和Context。这些标签确定声音怎么协同文本进行处理。使用这些标签可以为声音扩展不同的上下文。

PartOfSp

PartOfSp 标签提供附上的单词的词性的发音。使用这个标签能够使一个单词根据词性做出正确的不同的发音。PartOfSp不能为空。

PartOfSp标签有一个属性,Part,它是一个与SAPI词性相应的字符串作。只有SAPI中定义了的词性被支持使用---"Unknown", "Noun", "Verb", "Modifier", "Function", "Interjection"。

<partofsp part="noun"> A </partofsp> is the first letter of the alphabet.

Did you <partofsp part="verb"> record </partofsp> that <partofsp part="noun"> record </partofsp>

Context

Context标签提供声音可以被用来确定规格化特定的项的信息,像日期,数字,货币。使用这个标签允许声音区分不同的日期格式(见下面的例子)。Context标签不能为空。

Context标签有一个属性,Id,它使用一个与附上的文本上下文相关的字符串。SAPI中定义了几个上下文并且可能有更多的可以被SAPI所识别,几乎任何字符串都可以被使用。更多详细的细节参见声音部分的文档。

<context id="date_mdy"> 03/04/01 </context> should be March fourth, two thousand one.

<context id="date_dmy"> 03/04/01 </context> should be April third, two thousand one.

<context id="date_ymd"> 03/04/01 </context> should be April first, two thousand four.

声音选择标签

有两个标签可以被用于改变当前的声音:Voice和Lang。

Voice

Voice标签选择一个基于特征,年龄,性别,语言,姓名,提供商和首选提供商的声音。这个标签可以为空,这种情况下标签将用于改变它后面的所有文本。它不为空的情况下,只改变包含的内容。

Voice有两个属性:Required和Optional。它们严格的对应IspObjectTokenCategory::EnumerateTokens 和 SpFindBestToken 函数的必需的和可选的属性参数。声音的选择必须严格的遵照与这两个函数相同的规则。就是说必须提供已经安装了的声音的必需的属性和一些可选的属性。更多的细节参见对象标记和注册设置。

另外,当Voice标签被使用时当前声音的属性总是作为作为可选属性被附加。这意味着一个和当前声音更相似的声音将比不那么相似的声音优先被选择。

如果没有和所有必需的属性匹配的声音,则当前声音不改变。

将会是默认的声音读下面的句子

<voice required="Gender=Female;Age!=Child">

一个女性的非儿童的声音读这个句子,如果它存在的话。

<voice required="Age=Teen">

   一个青少年的声音将读这个句子,例如如果存在一个非儿童的女性的声音,它将优先于一个男青年的声音被选择。

</voice>

</voice>

Lang

Lang标签选择一个独立的基于语言属性的声音。这个标签可以为空,它将作用于标签后所有的文本,它也可以不为空,将只作用于标签内。

Lang标签有一个属性,LangId,这个属性应该是一个LANGID,例如409(英语)或者411(日语)。注意这些数字是16进制的,没有明显的“0x”。

Lang标签是一个包含必须属性"Language=xxx"的Voice标签的简化版本。所以下列的例子将产生正确的相同的结果:

<voice required="Language=409">

A U.S. English voice should speak this.

</voice>

<lang langid="409">

   A U.S. English voice should speak this.

</lang>

XML TTS 指南相关推荐

  1. 史上最最靠谱,又双叒叒(ruò,zhuó)简单的基于MSXML的XML解析指南-C++

    文章目录 史上最最靠谱,又双叒叒简单的基于MSXML的XML解析指南-C++ 流程设计 xml信息有哪几种读取形式(xml文件或wchar) 如何选取节点,and取节点属性有哪些方法? IXMLDOM ...

  2. 值得学习Google的编程样式指南

    摘要:本文分享了Google众多编程语言的样式指南,其中包括C语言.C++.Objective-C.Python.HTML/CSS.JavaScript.XML.R语言.cpplint等. " ...

  3. Flash媒体服务器的强化指南

    将简单谚语 "简单就是美(less is more)" 应用于你的Flash Media Server (FMS)设备,意味着你将会遇到较少的麻烦.安全恶梦或客户投诉等问题. 因此 ...

  4. 很全的XML 资料下载

    很全的XML 资料下载[2004-08-28最后更新] [zz] http://www.xml.org.cn 资料下载[2004-08-28最后更新] 注: (1)本站提供的所有软件和资料仅供本站成员 ...

  5. FreeMarker中文帮助手册API文档,基础入门学习文档

    FreeMarker中文帮助手册API文档,基础入门学习文档 分类: 编程技术 发布: bywei 浏览: 7 日期: 2011年5月28日 分享到: QQ空间 新浪微博 腾讯微博 人人网 什么是Fr ...

  6. 工厂三兄弟之工厂方法模式

    本文转载自 :http://blog.csdn.net/lovelion/article/details/9306457 简单工厂模式虽然简单,但存在一个很严重的问题.当系统中需要引入新产品时,由于静 ...

  7. Delphi及C++Builder经典图书一览表(持续更新中2018.01.02)

    序号 书名 原版书名 作者 译者 出版社 页数 年代 定价 备注 1 C++Builder 5程序设计大全 C++Builder 5 Developer's Guide Jarrod Hollingw ...

  8. 2005免费书记下载-[NEW]

    VC++书藉 MFC中文帮助 下载 VC++编程资料 下载 ADO程序员参考 下载 有关ADO的四篇文章 下载 C#初学者入门文档 下载 Visual C++程序设计指南 下载 这是一本很好的VC++ ...

  9. 2005精品书籍-go go go

    VC++书藉 MFC中文帮助 下载 VC++编程资料 下载 ADO程序员参考 下载 有关ADO的四篇文章 下载 C#初学者入门文档 下载 Visual C++程序设计指南 下载 这是一本很好的VC++ ...

最新文章

  1. android预置第三方apk,android 内置APK成系统应用
  2. How good software makes us stupid?
  3. IDA Pro 修改默认名称
  4. java中==和equals引发的思考
  5. 寒冬悟道者马云:阿里巴巴逢单出击(4)
  6. Java原生序列化、Avro、RPC与Log4j
  7. MSMQ消息队列线程使用
  8. memcache的简单应用
  9. 计算机excel无法打开,双击Excel软件无法打开表格文件怎么办?
  10. 前端工程师的前途与价值体现
  11. 2021-2025年中国共享Web托管服务行业市场供需与战略研究报告
  12. HP DL380 G7安装部署VM ESXI6.5.0
  13. java旋转太极图_如何用CSS纯代码画一个旋转的太极图(附代码)
  14. Matlab二值图像进行轮廓提取
  15. WebRTC 教程四: WebRTC聊天室设计和搭建
  16. python实现繁简体自动转换小工具
  17. PTA_2019春_电话聊天狂人
  18. 自勉三句话--关于职业生涯规划
  19. A2 AP AUTOSAR 与 CP AUTOSAR 的特性
  20. 比较血饮、谷雨、龙牙的武器哪个好点

热门文章

  1. 数学二英语一计算机学校,研究生招生考试中英语一和英语二,数学一、数学二和数学三有什么区别、侧重点?听说英语一比英语二简单,数学一是计算机类专业考的等等,是这样的情况吗?...
  2. AI Studio 飞桨 零基础入门深度学习笔记4-飞桨开源深度学习平台介绍
  3. TCP包的类型 (SYN, FIN, ACK, PSH, RST, URG)
  4. 实现一个简单的 vue-router
  5. 1179:最小公倍数和最大公约数
  6. 双链表的初始化(带头结点)
  7. 内置式永磁电机maxwell2d_基于ANSYSMaxwell2D分析异步起动永磁同步电机
  8. android 终端运行 vim / vi 命令执行失败 busybox解决之
  9. Matlab怎么修改显示数值格式/精度/小数位数
  10. 如何定义对战详情的数据结构