微软语音合成的停顿与语速可通过 SSML 控制。要让导览句子在“注意”后停一下,结构化标签比在文字里连续加逗号更容易复核。本文依据 Azure Speech 文档给出 XML 与调用方式;未调用服务,音色支持和最终读音需用自己的资源验证。
先确认音色与语言
在当前资源的音色列表中选择支持 zh-CN 和所需 SSML 标签的音色,将名称保存为 AZURE_SPEECH_VOICE。不同声音,尤其部分 HD 声音,对标签的支持并不相同。不要把一个音色支持的情绪风格复制给另一个音色就当成有效;本例仅控制 break 与 prosody。

把停顿写成标签
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="zh-CN">
<voice name="替换为当前资源支持的音色名称">
注意。<break time="500ms"/>
<prosody rate="-10%">请在展柜外观看,不要触摸展品。</prosody>
</voice>
</speak>
保存为 ssml.xml 并替换音色名。这里的 500ms 与 -10% 是试验输入,不是实际测得的停顿和语速。XML 特殊字符如 & 需转义为 &,不能把整段标签作为普通朗读文字提交。
使用 SSML 专用入口并核对状态
import os
import azure.cognitiveservices.speech as s
config = s.SpeechConfig(subscription=os.environ["AZURE_SPEECH_KEY"],
region=os.environ["AZURE_SPEECH_REGION"])
audio = s.audio.AudioOutputConfig(filename="guide.wav")
synth = s.SpeechSynthesizer(speech_config=config, audio_config=audio)
xml = open("ssml.xml", encoding="utf-8-sig").read()
result = synth.speak_ssml_async(xml).get()
if result.reason != s.ResultReason.SynthesizingAudioCompleted:
raise RuntimeError(str(s.SpeechSynthesisCancellationDetails(result)))
官方指出带 BOM 的 XML 字符串可能报错,因此按 utf-8-sig 读取。状态检查要先于“导出成功”的判断,空文件或取消结果不能当作音频完成。
对比两个版本再决定参数
另存无 break、无 prosody 的基础版,保持文字与音色一致,听辨“注意”后是否更清楚、整句是否拖沓,检查“展柜”等词是否误读。音色不支持标签时查文档和取消详情;标签生效但不自然时只改变一个参数。下一步使用确认过的版本试听真实场景,不把示例数值当所有配音的默认设置。
参考资料
依据 2026-10-03 读取的官方资料整理:官方文档 1;官方文档 2;官方文档 3。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/33098.html