

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

# 语音标记
<a name="speechmarks"></a>

*语音标记* 是描述合成语音的元数据，例如，句子或单词在音频流中的起始和结束位置。当您为文本请求语音标记时，Amazon Polly 将返回此元数据，而不是合成语音。通过将语音标记与合成语音音频流配合使用，您可以为您的应用程序提供更强的视觉体验。

例如，通过将元数据与来自文本的音频流组合使用，您就能够将语音与面部动画同步（嘴唇同步），或者在说出字幕单词时对其进行突出显示。

使用神经、长篇或标准文本转语音引擎时可以使用语音标记。

**Topics**
+ [

# 语音标记类型
](using-speechmarks.md)
+ [

# 语音视位和 Amazon Polly
](viseme.md)
+ [

# 语音标记输出
](output.md)
+ [

# 请求语音标记
](speechmarksconsole.md)
+ [

# 没有 SSML 的语音标记示例
](sp-mks-example1.md)
+ [

# 有 SSML 的语音标记示例
](sp-mks-example2.md)

# 语音标记类型
<a name="using-speechmarks"></a>

对 [SynthesizeSpeech](https://docs.amazonaws.cn/polly/latest/dg/API_StartSpeechSynthesisTask.html#polly-StartSpeechSynthesisTask-request-SpeechMarkTypes) 或 [StartSpeechSynthesisTask](https://docs.amazonaws.cn/polly/latest/dg/API_SynthesizeSpeech.html) 命令使用 [SpeechMarkTypes](https://docs.amazonaws.cn/polly/latest/dg/API_StartSpeechSynthesisTask.html) 选项来请求语音标记。您可以指定要从您输入的文本返回的元数据元素。您可以请求最多 4 种类型的元数据，但每个请求必须至少指定一种类型。未根据请求生成音频输出。

Amazon CLI 中的代码示例：

```
--speech-mark-types='["sentence", "word", "viseme", "ssml"]'
```

Amazon Polly 生成使用以下元素的语音标记：
+  **句子** – 表示输入文本中的句子元素。
+  **单词** – 表示输入文本中的单词元素。
+  **语音视位** – 描述说每个音素时的面部和口腔运动。有关更多信息，请参阅 [语音视位和 Amazon Polly](viseme.md)。
+  **ssml** – 描述 SSML 输入文本中的 <mark> 元素。有关更多信息，请参阅 [由 SSML 文档生成语音](ssml.md)。

# 语音视位和 Amazon Polly
<a name="viseme"></a>

*语音视位*代表说一个词时的面部和口腔位置。它是一个音素的视觉等价物，是形成单词的基本声学单元。语音视位是语音的基本可视构建基块。

每种语言都有一组对应于其特定音素的语音视位。在语言中，每个音素都有相应的代表口腔发音时的形状的语音视位。然而，并非所有语音视位都能映射到特定的音素，因为许多音素虽然听上去不一样，但发音时的形状相同。例如，在英语中，单词“pet”（宠物）和“bet”（打赌）声音上是不同的。但是，在目视观察中（无声音），它们看起来完全相同。

下图列出了美国英语语音的部分国际音标 (IPA) 音素和拓展音标字母评估法 (X-SAMPA) 符号，及其对应的语音视位。

如需获得完整列表和所有可用语音的表格，请参阅 [Amazon Polly 中的语言](supported-languages.md)。


| IPA | X-SAMPA | 描述 | 示例 | 语音视位 | 
| --- | --- | --- | --- | --- | 
|  **辅音**  | 
| b | b | 浊双唇塞音 | **b**ed | p | 
| d | d | 浊齿龈塞音 | **d**ig | t | 
| d͡ʒ | dZ | 浊龈后塞擦音 | **j**ump | S | 
| ð | D | 浊齿擦音 | **th**en | T | 
| f | f | 清唇齿擦音 | **f**ive | f | 
| g | g | 浊软颚塞音 | **g**ame | k | 
| h | h | 清喉擦音 | **h**ouse | k | 
| ... | ... | ... | ... | ... | 

# 语音标记输出
<a name="output"></a>

Amazon Polly 将返回以换行符分隔的 JSON 流中的语音标记对象。语音标记对象包含以下字段：
+  **time** – 相应音频流开头的时间戳（以毫秒为单位）
+  **type** – 语音的类型（句子、单词、语音视位或 ssml 标记）。
+  **start** – 输入文本中对象开头的偏移量（以字节而不是字符为单位，不包括语音视位标记）
+  **end** – 输入文本中对象末尾的偏移量（以字节而不是字符为单位，不包括语音视位标记） 
+  **value** – 根据语音标记类型变化
  +  **SSML**：<mark> SSML 标签
  +  **viseme**：语音视位名称
  +  **word** 或 **sentence**：输入文本的子字符串，由开始和结束字段分隔

例如，Amazon Polly 从文本“Mary had a little lamb”（玛丽有一只小羊羔）生成以下 `word` 语音标记对象：

```
{"time":373,"type":"word","start":5,"end":8,"value":"had"}
```

所描述的单词（“had”（具有））开始于音频流开始后 373 毫秒，并从输入文本的字节 5 处开始，在字节 8 处结束。

**注意**  
此元数据用于 `Joanna` 语音 ID。如果您使用另一个有相同输入文本的声音，元数据可能有所不同。

# 请求语音标记
<a name="speechmarksconsole"></a>

您可以使用控制台或 `synthesize-speech` 命令从 Amazon Polly 请求语音标记。然后，您可以查看元数据或将其保存到文件中。

------
#### [ Console ]

**在控制台上生成语音标记**

1. 登录到 Amazon Web Services 管理控制台 并打开 Amazon Polly 控制台，网址：[https://console.aws.amazon.com/polly/](https://console.amazonaws.cn/polly/)。

1. 选择**文本到语音转换**选项卡。

1. 打开 **SSML** 以使用 SSML。

1. 在输入框中键入或粘贴您的文本。

1. 对于**语言**，选择您的文本使用的语言。

1. 对于**语音**，选择您要使用的语音。

1. 要更改文本发音，请展开**其他设置**，打开**自定义发音**，然后在**应用词典**中，选择所需的词典。

1. 要验证语音，请选择**收听**。

1. 打开**语音文件格式设置**。
**注意**  
下载 MP3、OGG 或 PCM 格式将不会生成语音标记。

1. 对于**文件格式**，选择**语音标记**。

1. 对于**语音标记类型**，请选择要生成的语音标记的类型。选择 **SSML** 元数据的选项仅在 **SSML** 打开时可用。有关通过 Amazon Polly 使用 SSML 的更多信息，请参阅 [由 SSML 文档生成语音](ssml.md)。

1. 选择**下载**。

------
#### [ Amazon CLI ]

除了输入文本之外，以下元素也都是返回此元数据所必需的：
+ `output-format`

  当返回语音标记时，Amazon Polly 仅支持 JSON 格式。

  ```
  --output-format json
  ```

  如果您使用的是不受支持的输出格式，Amazon Polly 将引发异常。
+ `voice-id`

  为了确保元数据与相关联的音频流匹配，请指定相同语音用于生成合成语音音频流。可用语音的语速不相同。如果您使用的语音与用于生成语音的不同，则元数据将与音频流不匹配。

  ```
  --voice-id Joanna
  ```
+ `speech-mark-types`

  指定您需要的语音标记类型。您可以请求任何语音标记类型，但必须指定至少一个类型。

  ```
  --speech-mark-types='["sentence", "word", "viseme", "ssml"]'
  ```
+ `text-type`

  纯文本是 Amazon Polly 的默认输入文本，因此，如果要返回 SSML 语音标记，必须使用 `text-type ssml`。
+ `outfile`

  指定写入元数据的输出文件。

  ```
  MaryLamb.txt 
  ```

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

```
aws polly synthesize-speech \
  --output-format json \
  --voice-id Voice ID \
  --text 'Input text' \
  --speech-mark-types='["sentence", "word", "viseme"]' \
  outfile
```

------

# 没有 SSML 的语音标记示例
<a name="sp-mks-example1"></a>

以下示例显示了您所请求元数据的简单句子在屏幕上显示的效果：“Mary had a little lamb”(玛丽有一只小羊羔)。为简单起见，我们在此示例中未包括 SSML 语音标记。

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

```
aws polly synthesize-speech \
  --output-format json \
  --voice-id Joanna \
  --text 'Mary had a little lamb.' \
  --speech-mark-types='["viseme", "word", "sentence"]' \
  MaryLamb.txt
```

当您发出此请求时，Amazon Polly 会在 .txt 文件中返回以下内容：

```
{"time":0,"type":"sentence","start":0,"end":23,"value":"Mary had a little lamb."}
{"time":6,"type":"word","start":0,"end":4,"value":"Mary"}
{"time":6,"type":"viseme","value":"p"}
{"time":73,"type":"viseme","value":"E"}
{"time":180,"type":"viseme","value":"r"}
{"time":292,"type":"viseme","value":"i"}
{"time":373,"type":"word","start":5,"end":8,"value":"had"}
{"time":373,"type":"viseme","value":"k"}
{"time":460,"type":"viseme","value":"a"}
{"time":521,"type":"viseme","value":"t"}
{"time":604,"type":"word","start":9,"end":10,"value":"a"}
{"time":604,"type":"viseme","value":"@"}
{"time":643,"type":"word","start":11,"end":17,"value":"little"}
{"time":643,"type":"viseme","value":"t"}
{"time":739,"type":"viseme","value":"i"}
{"time":769,"type":"viseme","value":"t"}
{"time":799,"type":"viseme","value":"t"}
{"time":882,"type":"word","start":18,"end":22,"value":"lamb"}
{"time":882,"type":"viseme","value":"t"}
{"time":964,"type":"viseme","value":"a"}
{"time":1082,"type":"viseme","value":"p"}
```

在这个输出中，文本的每个部分都由语言标记断开：
+ 句子“Mary had a little lamb.”（玛丽有一只小羊羔。）
+ 文本中的每个单词：“Mary”、“had”、“a”、“little”和“lamb”。
+ 相应音频流中每个声音的语音视位：“p”、“E”、“r”、“i”等。有关语音视位的更多信息，请参阅 [语音视位和 Amazon Polly](viseme.md)。

# 有 SSML 的语音标记示例
<a name="sp-mks-example2"></a>

从 SSML 增强文本生成语音标记的过程与 SSML不存在时的过程相似。使用 `synthesize-speech` 命令，并指定 SSML 增强文本和您所需的语音标记类型，如下例所示。为了使示例更容易阅读，我们未包含语音视位语音标记，但这些也可以包含在内。

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

```
aws polly synthesize-speech \
  --output-format json \
  --voice-id Joanna \
  --text-type ssml \
  --text '<speak><prosody volume="+20dB">Mary had <break time="300ms"/>a little <mark name="animal"/>lamb</prosody></speak>' \
  --speech-mark-types='["sentence", "word", "ssml"]' \
  output.txt
```

当您发出此请求时，Amazon Polly 会在 .txt 文件中返回以下内容：

```
{"time":0,"type":"sentence","start":31,"end":95,"value":"Mary had <break time=\"300ms\"\/>a little <mark name=\"animal\"\/>lamb"}
{"time":6,"type":"word","start":31,"end":35,"value":"Mary"}
{"time":325,"type":"word","start":36,"end":39,"value":"had"}
{"time":897,"type":"word","start":40,"end":61,"value":"<break time=\"300ms\"\/>"}
{"time":1291,"type":"word","start":61,"end":62,"value":"a"}
{"time":1373,"type":"word","start":63,"end":69,"value":"little"}
{"time":1635,"type":"ssml","start":70,"end":91,"value":"animal"}
{"time":1635,"type":"word","start":91,"end":95,"value":"lamb"}
```