SAPI5语音转换扩展XMLTTS标记语言详解
[作者:张赐荣]

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">
一个青少年的声音将读这个句子,例如如果存在一个非儿童的女性的声音,它将优先于一个男青年的声音被选择。
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>

张赐荣 | 详解SAPI5语音转换扩展XMLTTS标记相关推荐

  1. 张赐荣: 详解 Java 中的包装类型

    在Java中,包装类型是用于将基本数据类型(int.float.boolean等)转换为对象的类.这些类被称为包装类,它们的名字都是在基本数据类型前面加上"Integer".&qu ...

  2. 张赐荣 | 浅谈 UIAutomation 自动化技术在读屏软件中的应用

    读屏软件工作原理 [文 / 张赐荣] Windows UIAutomation 是 Windows 操作系统中的软件自动化技术,能让开发人员通过编程方式访问和操作 Windows 系统中的用户界面元素 ...

  3. 张赐荣:计算机网络快速入门教程

    计算机网络协议快速入门 [编辑 / 张赐荣] 我们每天都使用互联网.你有没有想过,它是如何工作的? 全世界几十亿台电脑,连接在一起,两两通信.上海的某一块网卡送出信号,洛杉矶的另一块网卡居然就收到了, ...

  4. 张赐荣 | Windows 消息处理机制 入门

    张赐荣 | Windows 消息处理机制 入门 [文 / 张赐荣] 事件驱动和消息循环 消息概述 消息,就是指Windows发出的一个通知,告诉应用程序某个事情发生了.例如,单击鼠标.改变窗口尺寸.按 ...

  5. 张赐荣 | 工信部信息技术互联网内容无障碍可访问性技术要求与测试方法

    [整理人:张赐荣] <GB_T37668-2019_信息技术互联网内容无障碍可访问性技术要求与测试方法> 前言 本标准按照GB/T1.1-2009给出的规则起草. 请注意本文件的某些内容可 ...

  6. 张赐荣: C#ADO.NET 操作Mysql 详细教程

    [作者:张赐荣] ADO.NET是.NET框架中用于访问数据库的一组组件.它可以用于访问不同类型的数据库,例如MySQL.Oracle.SQL Server等. 基本使用 下面是使用ADO.NET连接 ...

  7. 张赐荣 | PHP 获取喜马拉雅音频直链地址

    [作者:张赐荣] 获取喜马拉雅音频直链的方法 对以下地址发起Request Get请求,返回Json格式结果,其中的data.src就是音频的真实路径. "https://www.ximal ...

  8. java语音播报源代码_详解Android 语音播报实现方案(无SDK)

    本文介绍了详解Android 语音播报实现方案(无SDK),分享给大家,具体如下: 功能描述 类似支付宝收款时候的语音播报功能:当别人扫描你的收款码,你收到钱之后,就会听到"支付宝到账12. ...

  9. 张赐荣 | 安装版软件和绿色版软件究竟有什么区别?

    安装版软件和绿色版软件究竟有什么区别? [作者:张赐荣] 众所周知,大部分软件都需要先安装才能使用,例如 QQ.360.迅雷等,要先从网上下载一个安装包,然后安装到电脑的 C 盘或者 D 盘等.大部分 ...

最新文章

  1. linux ubuntu 系统日志信息
  2. 新的起点,新的生活!加油!
  3. Serializable在C#中的作用及其优点
  4. Mysql数据库设计及常见问题
  5. String内存分配
  6. MFC中实现模态对话框的结构与原理
  7. C#入门详解(12)
  8. http与websocket(基于SignalR)两种协议下的跨域基于ASP.NET MVC--竹子整理
  9. python pywin32模块 修改cad_安装pywin32(Python调用win api必看)
  10. 学计算机高考分数线,2020高考分数线预测
  11. 小甲鱼python课后题答案_小甲鱼python课后习题总结
  12. SadpTool 海康设备网络搜索工具
  13. h桥程序控制c语言,H桥电路原理及直流电机驱动编程
  14. 可以搜python题答案的app-有哪些可以搜Python题答案的APP
  15. java类型转换异常处理_类型转换中的错误处理
  16. python tkinter 按钮 Button增加图片
  17. 美国圣诞8日西海岸自驾游
  18. 【算法java版01】:键盘录入一个字符串,将字符串中的大写改成小写,小写改成大写,数字改成*
  19. 微信开发者工具创建vue项目步骤
  20. java8 steam流在当前数据对象上的操作。判断list中的属性值是否符合条件或者不为空,后赋值另一个属性的操作

热门文章

  1. 安装spacy遇到的问题
  2. c语言rand生成1 100随机数,c语言生成1~100随机数
  3. 利用ccle数据库构造分类器区分耐药与不耐药样本
  4. 两团队在《自然》上发布重要抗癌研究成果,消化系统肿瘤或有望治愈...
  5. edvac是商用计算机吗,EDVAC(eniac与edvac的区别)
  6. 触摸板把计算机从休眠状态唤醒,win10笔记本盒盖唤醒后触摸板失灵的处理方法...
  7. 文件 打包 及 生成Excel文件转PDF格式和Excsl文件格式一体数据
  8. Vue组织架构图组件
  9. 生活手机必备5款APP,一用就会上瘾,简直就是生活中的好帮手
  10. MATLAB给多组条形图添加误差棒