使用 SSML (Amazon CLI) - Amazon Polly
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 SSML (Amazon CLI)

您可以使用 Amazon CLI 合成 SSML 输入文本。以下示例说明如何使用 Amazon CLI 执行常见任务。

通过合成语音命令使用 SSML

此示例展示了如何使用具有 SSML 字符串的 synthesize-speech 命令。在使用 synthesize-speech 命令时,通常您需要提供以下要素:

  • 输入文本(必需)

  • 开始和结束标签(必需)

  • 输出格式

  • 语音

在此示例中,您通过引号指定简单的文本字符串,以及必要的开始和结束 <speak></speak> 标签。

重要

在 Amazon Polly 控制台中不需要将输入文本放在引号中,但使用 Amazon CLI 必须将输入文本放在引号中。另外一项重要的注意事项是,您需要区分输入文本两端的引号和个别标签需要使用的引号。

例如,您可以在输入文本两端使用标准引号 ("),并将单引号 (') 用于内部标签,也可相反使用。Unix、Linux 和 macOS 适用于这两种选项。但对于 Windows,必须在输入文本两端使用标准引号,并将单引号用于标签。

对于所有操作系统,您都可以在输入文本两端使用标准引号 ("),并将单引号 (') 用于内部标签。例如:

--text "<speak>Hello <break time='300ms'/> World</speak>"

对于 Unix、Linux 和 macOS,您也可以在输入文本两端使用单引号 ('),并将标准引号 (") 用于内部标签:

--text '<speak>Hello <break time="300ms"/> World</speak>'

以下 Amazon CLI 示例针对 Linux、Unix 和 macOS 编排了格式。对于 Windows,请将每行末尾的反斜杠 (\) Unix 行继续符替换为脱字号 (^) 并在输入文本周围使用全角引号(“),内部标签使用单引号(’)。

aws polly synthesize-speech \ --text-type ssml \ --text '<speak>Hello world</speak>' \ --output-format mp3 \ --voice-id Joanna \ speech.mp3

要试听合成语音,请使用任何播放器播放生成的 speech.mp3 文件。

合成 SSML 增强文档

如果输入文本较长,可能将 SSML 内容保存为文件,简单地在 synthesize-speech 命令中指定文件名更加方便。例如,您可以把以下内容保存为名为 example.xml 的文件:

<?xml version="1.0"?> <speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:lang="en-US">Hello World</speak>

xml:lang 属性指定 en-US(美国英语)作为输入文本的语言。有关输入文本的语言和所选语音的语言对 SynthesizeSpeech 操作的影响,请参阅 改善外语词汇的发音

要运行 SSML 增强文件
  1. 将 SSML 保存为文件(例如 example.xml)。

  2. 从存储 XML 文件的路径运行以下 synthesize-speech 命令,并用 file:\\example.xml 替换输入文本,指定 SSML 文件作为输入。由于此命令指向一个文件,不包含实际输入文本,所以您不需要使用引号。

    注意

    以下 Amazon CLI 示例针对 Linux、Unix 和 macOS 编排了格式。对于 Windows,请将每行末尾的反斜杠 (\) Unix 行继续符替换为脱字号 (^)。

    aws polly synthesize-speech \ --text-type ssml \ --text file://example.xml \ --output-format mp3 \ --voice-id Joanna \ speech.mp3
  3. 要试听合成语音,请使用任何播放器播放生成的 speech.mp3 文件。

将 SSML 用于常见 Amazon Polly 任务

以下示例展示了如何使用 SSML 标签完成常见的 Amazon Polly 任务。如需了解更多 SSML 标签,请参阅 支持的 SSML 标签

要测试以下示例,请将以下 synthesize-speech 命令用于适当的 SSML 增强文本:

以下 Amazon CLI 示例针对 Linux、Unix 和 macOS 编排了格式。对于 Windows,请将每行末尾的反斜杠 (\) Unix 行继续符替换为脱字号 (^) 并在输入文本周围使用全角引号(“),内部标签使用单引号(’)。

aws polly synthesize-speech \ --text-type ssml \ --text '<speak>Hello <break time="300ms"/> World</speak>' \ --output-format mp3 \ --voice-id Joanna \ speech.mp3

添加停顿

要在词语之间添加停顿,请使用 <break> 元素。以下 SSML synthesize-speech 命令使用 <break> 元素在单词“Hello”和“World”之间添加 300 毫秒的延迟。

<speak> Hello <break time="300ms"/> World. </speak>

控制音量、音高和速度

要控制音高、语速和音量,请使用 <prosody> 元素。

  • 以下 synthesize-speech 命令使用 <prosody> 元素控制音量:

    <speak> <prosody volume="+20dB">Hello world</prosody> </speak>
  • 以下 synthesize-speech 命令使用 <prosody> 元素控制音高:

    <speak> <prosody pitch="x-high">Hello world.</prosody> </speak>
  • 以下 synthesize-speech 命令使用 <prosody> 元素指定语速:

    <speak> <prosody rate="x-fast">Hello world.</prosody> </speak>
  • 您可以在一个 <prosody> 元素中指定多个属性,如以下示例中所示:

    <speak> <prosody volume="x-loud" pitch="x-high" rate="x-fast">Hello world.</prosody> </speak>

轻读

要轻读词语,请使用 <amazon:effect name="whispered"> 元素。在以下示例中, <amazon:effect name="whispered"> 元素告知 Amazon Polly 轻读“little lamb”:

<speak> Mary has a <amazon:effect name="whispered">little lamb.</amazon:effect> </speak>

要增强这种效果,可以使用 <prosody> 元素稍稍减慢轻读的语速。

强调词语

要强调词或短语,请使用 <emphasis> 元素。

<speak> <emphasis level="strong">Hello</emphasis> world how are you? </speak>

指定某些词语的读法

要提供要朗读的文本类型的相关信息,请使用 <say-as> 元素。

例如,在以下 SSML 中,<say-as> 指明应将文本“4/6”解释为日期。interpret-as="date" format="dm" 属性指明应将它作为日期朗读,格式为月/日。

您还可以使用 <say-as> 元素告知 Amazon Polly 将数字作为分数、电话号码、度量单位等形式朗读。

<speak> Today is <say-as interpret-as="date" format="md" >4/6</say-as> </speak>

生成的语音为“今天是六月四日”。<say-as> 标签利用 interpret-as 属性提供额外的上下文,指定如何解释文本。

要验证合成语音的准确度,请播放生成的 speech.mp3 文件。

有关此元素的更多信息,请参阅 控制如何朗读特殊的词语类型

改善外语词汇的发音

Amazon Polly 假设输入文本与您所选的朗读语音为同一种语言。要改善输入文本中外语词汇的发音,请在 synthesize-speech 调用中 使用 xml:lang 属性指定目标语言。这样可告知 Amazon Polly 针对您添加标签的外语词汇应用不同的发音规则。

以下示例展示如何在输入文本中使用不同的语言组合,以及如何指定外语词汇的语音和发音。有关可用语言的完整列表,请参阅 Amazon Polly 支持的语言

在以下示例中,语音 (Joanna) 为美国英语语音。默认情况下,Amazon Polly 假设输入文本与语音的语言相同(在此例中均为美国英语)。当您使用 xml:lang 标签时,Amazon Polly 将文本解释为西班牙语,使用所选语音朗读的文本将根据外语发音规则以西班牙语词汇发音。如果没有此标签,朗读文本时将使用所选语音的发音规则。

<speak> That restaurant is terrific. <lang xml:lang="es-ES">Mucho gusto.</lang> </speak>

由于输入文本的语言是英语,Amazon Polly 会将西班牙语音素与最接近的英语音素进行对应。因此,Joanna 会以美国英语为母语的方式朗读文本,他的西班牙语发音正确,但有美国英语口音。

注意

某些语言相似度更高,因此某些语言组合效果更好。