1、语音合成资源包括了两个主要的事件,它们分别是SPEECH-MARKER和SPEAK-COMPLETE事件。
当语音合成资源服务器在其正在使用的语音描述语言中发现支持了一个标记标签时,语音合成服务器会生成一个SPEECH-MARKER的事件。在SSML文件中会插入一个<标记>要素和其关联的值。另外,当在PENDING状态的SPEAK请求进入到IN-PROGRESS状态时,资源合成服务器也会发生SPEECH-MARKER事件。这里,SPEECH-MARKER的目的是请求状态从此时(时间戳)进入到进行中状态。
语音MARKER设计中会包含一个演讲,标记包含一个时间戳和其发现的标签。以下是一个语音MARKER的示例图:

具体的SPEECH-MARKER事件中包含的消息如下:
- F1(客户端→speechsynth):
- MRCP / 2.0330 SPEAK 8000
- 通道标识符:23eb10a @ speechsynth
- 内容类型:应用程序/ SSML + XML
- 内容长度:205 <?xmlversion = “1.0” 编码= “UTF-8”?>
- XML:LANG = “EN-US”>
-
从mark name =“here”/这里是mark name =“there”/那里说话
- F2(speechsynth→客户端):
- MRCP / 2.0 118 8000 200 正在进行中
- 频道标识符:23eb10a @ speechsynth
- 语音标记:时间戳= 857206027059
- F3(speechsynth→客户):
- MRCP / 2.0 132 SPEECH-MARKER 8000正在进行中
- 频道标识符:23eb10a @ speechsynth
- Speech-Marker:timestamp = 861500994355;这里
- F4(speechsynth→客户端):
- MRCP / 2.0 133 SPEECH-MARKER 8000正在进行中
- 频道标识符:23eb10a @ speechsynth
- Speech-Marker:timestamp = 865795961651;那里
- F5(speechsynth→客户端):
- MRCP / 2.0 161 SPEAK-COMPLETE 8000完整
- 频道标识符:23eb10a @ speechsynth
- Speech-Marker:timestamp = 865795961652;那里
- 完成 - 原因:000正常
2、SPEAK完成事件简单来说就是完成了相应的SPEAK请求以后,合成资源服务器端生成的事件消息。SPEAK完成事件消息中包含完成原因来说明结果原因其最后的原因代码如下列表:

3、在合成语音资源的头域值中包括了十七个头域值。我们这里简单介绍这些报头的消息内容。

因为篇幅的关系,我们不会对每个头做非常详细地说明,笔者仅做一个简单介绍具体的细节读者可以参考RFC6786以下是十七个头的使用说明。:
完成 - 原因总是出现在SPEAK-COMPLETE响应消息中,它表示SPEAK结束。此头值包含一个原因代码和相应的原因名称。例如:完成 - 原因:002解析失败。
完成 - 原因总是以可选的方式出现在SPEAK-COMPLETE响应消息中来提供更多消息说明,它表示SPEAK请求结束的原因。此消息用来支持对MRCP客户端的日志排查等。例如:完成 -原因:SSMLnotwell形成。
Failed-URI表示访问URL失败,例如:Failed-URI:http://www.example.com/dictionary.pls。
Failed-URI-Cause是配合失败-URI来一起工作为使用的协议提供更多具体的消息内容,例如HTTP的4XX或者5XX消息,例如:Failed-URI-Cause:404 Not Found。
语音标记具有两个目的:1)报告最后发现的标记0.2)报告执行语音合成的时间戳例如:语音标记:时间戳= 857206027059; my_mark_name。
画外音支持四种SSML的属性,它们分别是:语音性别,语音时代,语音变,和语音名称例如:语音性别:女。
Prosody-支持来自于SSML的六种属性,它们分别是:韵律音调,韵律轮廓,韵律范围,韵律率,韵律持续期间,和韵律批量这些属性我们在以前的SSML文件中已经做过介绍读者可以参考历史文档来进一步学习例如:。韵律卷:软
Speaker-Profile提供一个URL参考链接支持说话人的语音合成。示例:Speaker-Profile:http://www.example.com/speaker01.pfl。
言语 - 语言表示默认的合成语言支持示例为:言语 - 语言:zh-GB。
杀-ON-强行插入携带一个布尔值来打断SPEAK请求中的DTMF或者语音输入示例为:杀-ON-强插:假的。
Fetch-Hint决定何时语音合成资源应该对资源(URL关联的相关资源)做一个请求。示例:Fetch-Hint:safe。这里安全表示当需要内容时可以对其进行下载。
Audio-Fetch-Hint表示对象使用在语音文件中,并且可以覆盖上面的头值。示例: Audio-Fetch-Hint:stream。
Jump-Size表示要求对语音进行跳转(前转或回退)。示例:Jump-Size:+5秒,可选参数包括:二,词,句,或段段。
Speak-Restart消息通知MRCP客户端有一个CONTROL请求携带了跳转的设置。示例:Speak-Restart:true。
Speak-Length设定一个在语音的说话长度。例如:Speak-Length:25 Second
Load-Lexicon在DEFINE-LEXICON请求中设定的值表示是否可以加载或者卸载语法文件。示例:Load-Lexicon:false。
的词典检索顺序设定一个已查询到的语法列表示例:
的词典检索顺序:
http://example.com/nouns.pls
http://10.0.0.1/places.pls
4、在此章节的介绍中,我们介绍了两种事件的具体细节和消息示例,另外还介绍了语音合成资源的十七个报头以及各自的示例。用户可以参考RFC对标题的属性和可选参数进行进一步的了解。
在接下来的章节中,笔者会继续介绍语音识别资源的请求,事件和报头的使用说明。




unimrcp-MRCP协议学习分享,QQ群号:208136295
关注微信公众号:asterisk-cn,获得有价值的行业分享
freepbx 技术论坛:www.ippbx.org.cn
Asterisk, freepbx技术文档: www.freepbx.org.cn
欧米(Omni)智能客服解决方案
融合通信商业解决方案,协同解决方案首选产品:www.hiastar.com