![](http://www.ctiforum.com/uploadfile/2018/0620/20180620022433374.jpg)
1、首先,让我们简单说明一下为什么要对标记语言进行控制设置。演讲是一门艺术。我们看到很多名人在观众面前侃侃而谈。我们经常看的TED节目就是非常出色的演讲节目,TED节目中的演讲内容也给我们留下来深刻的印象。除了内容本身和PPT吸引观众以外,演讲嘉宾的语速语调也是非常重要的。演讲嘉宾会知道什么时间强调什么内容,语速快慢,关键词等也是非常重要的因素。因此,观众需要及时捕捉到演讲嘉宾的语义才能正确理解嘉宾的准确含义。同样的道理,语音识别引擎也需要能够非常智能地识别读音的不同,这样才能保证识别出当时的场景和读者的语气和语义。
![](http://www.ctiforum.com/uploadfile/2018/0620/20180620022544815.jpg)
在语音识别引擎的处理过程中,一个人说话的语气语调心情决定了内容的输出结果,内容输出结果会影响整个系统结果的判断。Prosody(韵律结构)简单来说就是控制语音的压力模式和读音语调。比如,某些人说话时可能对某些重点词语增加了强调作用,某些词可能是语速非常快,或者音量非常高。这些参数的变化会导致完全不同的解析结果,因此能够智能地判断出这些相关参数是语音识别中非常重要的功能,也是对语音识别准确率极大挑战。SSML提供了对语音语调的控制支持,它通过对语音控制的参数调整来对语气,音量,语速或强调作用来控制输出结果。
2、在Prosody边界参数设置中支持了几个比较重要的要素标签参数,通过这些参数可以对读音进行有效的控制,这些具体的参数包括:break,emphasis和voice。现在我们逐一介绍这些参数设置和其具体作用。
SSML支持在词语之间插入一个<break>来目前表示一个暂停或语义的边界。当数据中没有支持<break>时,语音合成服务器将通过语言逻辑来实现暂停或打断。<break>支持两种属性:time和strength(强度)。time属性表示暂停的时长,以秒或毫秒为单位。strength则表示在输出语音的暂停的语法强度。其支持的取值范围包括:none,x-weak,weak,medium (默认值),strong或者x-strong。这里注意,time和strength都是可选属性,如果缺少这两个属性设置,则表示语音合成服务器生成break。下面的示例表示暂停3秒以后继续合成:
< xml version="1.0" encoding="UTF-8" >
<speak version="1.0"
xmlns="http://www.w3.org/2001/10/synthesis"
xml:lang="en-GB">
Take a deep breath and count to three <break time="3s"/>
Now we are ready to proceed.
</speak>
SSML同样支持一个强调功能<emphasis>,它用来表示某些内容需要加以强调或加大语气,用来突出其重要性。在我们的中文语境中,尤其是某些领导开会的场合中表现尤为明显,某些被强调的词语更加需要注意。我们需要准确地了解讲话者的内容,特别是强调的内容。<emphasis>的目的就是支持这个功能。当然,<emphasis>也可以结合pitch来实现更多的语义。<emphasis>仅支持一个属性值的设置,其取值范围包括:strong, moderate (默认设置),none和reduced。语法示例如下:
< xml version="1.0" encoding="UTF-8" >
<speak version="1.0"
xmlns="http://www.w3.org/2001/10/synthesis"
xml:lang="en-GB">
That is the <emphasis level="strong">right</emphasis> answer!
</speak>
SSML中的<voice>用来表示在读音中发出的请求修改读音。<voice>支持五个属性选项,分别是:xml:lang,gender,age,name和variant。xml:lang支持各种语言格式,gender支持男性,女性和中性;age表示读音者的年龄;name可指定特别语音读音者名称;variant通过一个正整数表示内容中其他属性推荐的设置。注意,如果语音合成服务器中通过<voice>可以完全匹配属性设置的数据,则使用属性设置的数据。如果不匹配的话,则需要通过三个语法判断的优先级实现匹配,具体设置条件可以参考MRCP v2。以下是一个<voice>示例:
< xml version="1.0" encoding="UTF-8" >
<speak version="1.0"
xmlns="http://www.w3.org/2001/10/synthesis"
xml:lang="en-GB">
<voice gender="male">
Welcome to online shopping for him
</voice>
<voice gender="female">
and her!
</voice>
</speak>
3、现在我们介绍一下Prosody的控制参数配置选项,它们分别是:volume,speaking rate 和 pitch。
volume顾名思义,此选项来控制声音的音量大小。他可以是一个数值,也可以是一个相对控制量,或者也可以是一个命名标识参数。其数值范围可以是1-100之间;相对控制量通过数字前加+或-来调整其量;命名标识规范的取值为silent, x-soft,soft,medium,loud,,x-loud或default。示例如下:
< xml version="1.0" encoding="UTF-8" >
<speak version="1.0"
xmlns="http://www.w3.org/2001/10/synthesis"
xml:lang="en-GB">
Please consult our website for job vacancies.
<prosody volume="soft">
ACME is an equal-opportunities employer
</prosody></speak>
speaking rate(读音速率)有速率和长度来控制。rate可以通过相对数值定义或者命名标识来定义。相对数值可以通过+或-来调整其相对数量值。规范的命名标识值可以是x-slow,slow,medium,fast, x-fast或default。这里的默认的值是正常语速。
< xml version="1.0" encoding="UTF-8" >
<speak version="1.0"
xmlns="http://www.w3.org/2001/10/synthesis"
xml:lang="en-IE">
Please select an option from the following.
<prosody rate="-30%">
Press 1 for sales or press 2 for support.
</prosody>
Otherwise hold the only line and a customer
service representative will be with you shortly.
</speak>
pitch 通常的中文含义是音高。通常情况下,它使用一个标识和取值范围来表示。它带有一个基音取值(base pitch)表示讲话人语音的平均频率。pitch取决于两个标识符,一个是note,另外一个是note值。例如,我们通常所说的A4纸,实际上A表示一个标识,4表示一个音频值。如果是A2的话,则表示范围值为2(4-2)。其单位是Hertz (Hz)。每个标识(note)都对应一个振动频率值或一个周期(每秒)。同样,在SSML属性设置中,pitch也可以支持相对取值方式和标识方式。其相对取值设置是通过+或-然后加一个数字取值来定义,例如+4或70%。其标识取值可支持的标识为x-low, low,medium,high,x-high或default。其语法格式示例如下:
< xml version="1.0" encoding="UTF-8" >
<speak version="1.0"
xmlns="http://www.w3.org/2001/10/synthesis"
xml:lang="en-IE">
<prosody pitch="x-high">
When it hurts, I speak in a high-pitched voice!
</prosody>
</speak>
pitch可以通过contour这个属性来实现一些高级功能或高级控制方式,通过指定时间位置来分阶段调整语音的属性。通过(time-position, pitch-target)来加以定义区分。当然,这里的time-position是从0%到100%。例如:
< xml version="1.0" encoding="UTF-8" >
<speak version="1.0"
xmlns="http://www.w3.org/2001/10/synthesis"
xml:lang="en-IE">
<prosody contour="(0%,+10Hz) (50%,+50Hz) (100%,-50Hz)">
Life is full of ups and downs.
</prosody>
</speak>
4、SSMl支持一个标识符功能(marker),此功能可以通过<mark>元素添加到标识语言中。<mark>仅要求一个属性name值,此值来设定一个标识符的名称。在MRCP协议中,当语音合成资源服务器输出的已渲染的输出语音数据遇到有标识符<mark>时,服务器端会在Speech-Marker头域中插入一个带标识符名称的SPEECH-MARKER事件,然后把此事件发送到MRCP客户端。当激活打断功能以后,marker可以用来决定被渲染的语音数量。标识符消息也是非常有用的数据,它可以在数据内容中决定一些被播放的非常重要的语音或在内容中标识一个位置,这些位置上的语音可能需要稍晚重启播放。
< xml version="1.0" encoding="UTF-8" >
<speak version="1.0"
xmlns="http://www.w3.org/2001/10/synthesis"
xml:lang="en-GB">
<mark name="before-ad"/>
<audio src="advertisement.wav"/>
<mark name="after-ad"/>
Please select from the following options.
</speak>
SSML可以支持两种metadata容器元素,其支持的格式为:<meta> element 和<metadata>element。<meta>是相对比较旧的格式,支持的语法格式比较简单,我们这里不做太多介绍。<metadata>则是一个比较新的格式,它可以支持更多标准的,功能强大的机制来设定metadata数据。在目前的版本中,SSML仅支持<metadata>的格式。<metadata>是一种容器的XML元素格式,容器元素中可以包含一个文件(XML),文件中包含数据信息内容。SSML技术细节推荐使用XML的RDF(Resource Description Framework)语法结合Dublin Core Metadata Initiative(定义标准metadata属性)构成文件信息内容。Dublin Core Metadata Initiative提供标准的metadata属性内容,例如抬头,标题和创建者信息等数据内容。以下示例是使用了RDF和Dublin Core Metadata Initiative来完成对XML语法数据构建:
< xml version="1.0" encoding="UTF-8" >
<speak version="1.0"
xmlns="http://www.w3.org/2001/10/synthesis"
xml:lang="en-GB">
<metadata>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<rdf:Description
rdf:about="http://www.example.com/meta.xml"
dc:Title="Online banking welcome"
dc:Description="Provides a welcome message"
dc:Publisher="D Burke"
dc:Language="en-US"
dc:Date="2006-02-02"
dc:Rights="Copyright (c) D Burke"
dc:Format="application/ssml+xml" >
<dc:Creator>
<rdf:Seq ID="CreatorsAlphabeticalBySurname">
<rdf:li>Dave Burke</rdf:li>
</rdf:Seq>
</dc:Creator>
</rdf:Description>
</rdf:RDF>
</metadata>
Welcome to online banking.
</speak>
5、在本章节的分享中,我们重点介绍了Prosody中的break来支持词语之间的边界控制,我们还介绍了使用emphasis强调元素来对某些词语进行强调,同时我们还介绍了非常重要的vicoe元素,使用此属性来设置播放性别,年龄,语言种类等相关参数。另外,我们对Prosody中的控制参数做了详细说明以及其控制参数 voume,speak rate,pitch的使用方式。最后,笔者介绍了如何使用标记符对某些特定内容进行标记,还有metadata中文件的格式和其数据构成进行了介绍。通过Prosody中属性参数的介绍,笔者已经把语音合成标记语言的基本数据格式做了一个完整的介绍,为读者起到了抛砖引玉的作用,也为未来其他章节的学习打下一个良好的基础。
参考资料:https://www.ibm.com/support/knowledgecenter/en/SSMQSV_6.1.1/com.ibm.voicetools.ssml.doc/ssml_pitch.html
http://dublincore.org/specifications/
https://en.wikipedia.org/wiki/Resource_Description_Framework
AMY Isard: SSML: A Markup Language for Speech Synthesis
WU Zhiyong:A Unified Framework for Multilingual Text-to-Speech Synthesis with SSML Specification as Interface ![](http://www.ctiforum.com/uploadfile/2018/0502/20180502092247260.jpg)
![](http://www.ctiforum.com/uploadfile/2018/0502/20180502092255301.jpg)
unimrcp-MRCP协议学习分享,QQ群号:208136295
关注微信公众号:asterisk-cn,获得有价值的行业分享
freepbx 技术论坛:www.ippbx.org.cn
Asterisk, freepbx技术文档: www.freepbx.org.cn
欧米(Omni)智能客服解决方案
融合通信商业解决方案,协同解决方案首选产品:www.hiastar.com