

 [适用于 JavaScript 的 AWS SDK V3 API 参考指南](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/)详细描述了 适用于 JavaScript 的 AWS SDK 版本 3 (V3) 的所有 API 操作。

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

# Amazon Polly 示例
<a name="polly-examples"></a>

![\[JavaScript code example that applies to Node.js execution\]](http://docs.aws.amazon.com/zh_cn/sdk-for-javascript/v3/developer-guide/images/nodeicon.png)

**此 Node.js 代码示例演示：**
+ 将使用 Amazon Polly 录制的音频上传到 Amazon S3

## 情景
<a name="polly-example-synthesize-to-s3-scenario"></a>

在此示例中，将使用一系列 Node.js 模块，通过 Amazon S3 客户端类的以下方法将使用 Amazon Polly 录制的音频自动上传到 Amazon S3：
+ [https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-client-polly/Class/StartSpeechSynthesisTaskCommand/](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-client-polly/Class/StartSpeechSynthesisTaskCommand/)

## 先决条件任务
<a name="polly-example-synthesize-to-s3-prerequisites"></a>

要设置和运行此示例，您必须先完成以下任务：
+ 按照中的说明设置项目环境以运行 Node JavaScript 示例[ GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/javascriptv3/example_code/s3/README.md)。
+ 使用用户凭证创建共享配置文件。有关提供共享凭据文件的更多信息，请参阅[和*工具参考指南中的共享配置AWS SDKs 和*凭据文件](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html)。
+ 创建一个 AWS Identity and Access Management (IAM) 未经身份验证的 Amazon Cognito 用户角色投票SynthesizeSpeech ：权限，以及一个附有 IAM 角色的 Amazon Cognito 身份池。下面的[使用创建 AWS 资源 CloudFormation](#polly-example-synthesize-to-s3-create-resources)部分将介绍如何创建这些资源。

**注意**  
此示例使用 Amazon Cognito，但是如果您不使用 Amazon Cognito，则 AWS 您的用户必须具有以下 IAM 权限策略  

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "mobileanalytics:PutEvents",
        "cognito-sync:*"
      ],
      "Resource": "*",
      "Effect": "Allow"
    },
    {
      "Action": "polly:SynthesizeSpeech",
      "Resource": "*",
      "Effect": "Allow"
    }
  ]
}
```

## 使用创建 AWS 资源 CloudFormation
<a name="polly-example-synthesize-to-s3-create-resources"></a>

CloudFormation 使您能够以可预测的方式重复创建和配置 AWS 基础架构部署。有关的更多信息 CloudFormation，请参阅《[AWS CloudFormation 用户指南》](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/)。

要创建 CloudFormation 堆栈，请执行以下操作：

1. 按照《 AWS CLI [AWS CLI 用户指南](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)》中的说明进行安装和配置。

1. 在项目文件夹的根目录`setup.yaml`中创建一个名为的文件，然后将[此处](https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/javascriptv3/example_code/polly/general-examples/src/setup.yaml)的内容复制 GitHub到该文件中。
**注意**  
该 CloudFormation 模板是使用[此处 AWS CDK 提供的模板生成的 GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/resources/cdk/javascript_example_code_polly_aws_service/)。有关更多信息 AWS CDK，请参阅《[AWS Cloud Development Kit (AWS CDK) 开发人员指南》](https://docs.aws.amazon.com/cdk/latest/guide/)。

1. 从命令行运行以下命令，*STACK\$1NAME*替换为堆栈的唯一名称。
**重要**  
堆栈名称在 AWS 区域和 AWS 账户中必须是唯一的。您最多可指定 128 个字符，支持数字和连字符。

   ```
   aws cloudformation create-stack --stack-name STACK_NAME --template-body file://setup.yaml --capabilities CAPABILITY_IAM
   ```

   有关 `create-stack` 命令参数的更多信息，请参阅 [AWS CLI 命令参考指南](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html)和 [CloudFormation 用户指南](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-cli-creating-stack.html)。

1. 导航到 CloudFormation 管理控制台，选择**堆栈**，选择堆栈名称，然后选择**资源**选项卡以查看已创建资源的列表。  
![\[CloudFormation 资源\]](http://docs.aws.amazon.com/zh_cn/sdk-for-javascript/v3/developer-guide/images/cfn_polly.png)

## 将使用 Amazon Polly 录制的音频上传到 Amazon S3
<a name="polly-example-synthesize-to-s3-example"></a>

创建文件名为 `polly_synthesize_to_s3.js` 的 Node.js 模块。确保如前所示配置 SDK，包括安装所需的客户端和软件包。在代码中，输入*REGION*、和*BUCKET\$1NAME*。要访问 Amazon Polly，请创建一个 `Polly` 客户端服务对象。*"IDENTITY\$1POOL\$1ID"*替换为您为此**示例创建的 Amazon Cognito 身份池示例页面**中的。`IdentityPoolId`这也被传递给每个客户端对象。

调用 Amazon Polly 客户端服务对象的 `StartSpeechSynthesisCommand` 方法以合成语音消息，将其上传到 Amazon S3 存储桶。

```
import { StartSpeechSynthesisTaskCommand } from "@aws-sdk/client-polly";
import { pollyClient } from "./libs/pollyClient.js";

// Create the parameters
const params = {
  OutputFormat: "mp3",
  OutputS3BucketName: "videoanalyzerbucket",
  Text: "Hello David, How are you?",
  TextType: "text",
  VoiceId: "Joanna",
  SampleRate: "22050",
};

const run = async () => {
  try {
    await pollyClient.send(new StartSpeechSynthesisTaskCommand(params));
    console.log(`Success, audio file added to ${params.OutputS3BucketName}`);
  } catch (err) {
    console.log("Error putting object", err);
  }
};
run();
```

可以在此[处找到此](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/javascriptv3/example_code/polly/general-examples/src/polly_synthesize_to_s3.js)示例代码 GitHub。