Amazon Polly 与 AWS SDK for JavaScript (v3) 实战指南:文本转语音与浏览器播放
示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载本篇指南基于aws-doc-sdk-examples仓库中的 javascriptv3/example_code/polly/README.md系统讲解如何使用 AWS SDK for JavaScript (v3) 调用 Amazon Polly 文本转语音Text-to-SpeechTTS服务。你将掌握在 Node.js 环境中创建 Polly 客户端、通过StartSpeechSynthesisTask将语音直接写入 Amazon S3 的完整流程以及在浏览器中结合 Amazon Cognito 身份池与预签名 URL 实现「输入文本 → 点击合成 → 就地播放」的前端方案。Amazon Polly 与 SDK for JavaScript (v3) 概述Amazon Polly 是 AWS 提供的云端文本转语音服务能够将文本转换为逼真的人声语音支持多种语言、音色Voice和音频格式广泛用于有声读物、语音导航、无障碍阅读、语音机器人等场景。仓库中该示例的目标是展示「如何使用 AWS SDK for JavaScript (v3) 与 Amazon Polly 协同工作」。整个示例模块位于 javascriptv3/example_code/polly 目录其中包含两套互补的代码示例运行环境核心用途general-examples/src/polly_synthesize_to_s3.jsNode.js异步合成任务语音文件自动上传到 S3 存储桶src/polly.js src/polly.html浏览器Webpack 打包通过预签名 URL 在页面内直接播放合成语音⚠ 运行注意事项运行这些代码可能在您的 AWS 账户中产生费用请留意 AWS 定价与免费套餐的限制运行测试同样可能产生费用建议为代码授予最小权限least privilege仅开放完成任务所需的最低权限本代码并未在所有 AWS 区域完成测试使用前请确认目标区域的服务可用性。环境准备Prerequisites官方说明要求读者先阅读javascriptv3目录的 README 完成前置准备核心要求如下安装 Node.js安装最新稳定版本配置 AWS 凭证在本地设置共享配置文件~/.aws/credentials使 SDK 能够加载访问凭证。详情可参考 AWS SDK for JavaScript (v3) 开发者指南中关于「从共享文件加载 Node.js 凭证」的章节安装依赖在包含文档的路径下执行npm i安装项目依赖。此外general-examples/src/package.json 明确了 Node.js 示例所需的依赖{ dependencies: { aws-sdk/client-polly: ^3.32.0, aws-sdk/types: ^3.32.0 }, type: module }而浏览器示例的 package.json 则额外引入aws-sdk/client-cognito-identity创建 Cognito 身份客户端aws-sdk/credential-provider-cognito-identity从身份池获取临时凭证aws-sdk/polly-request-presigner生成 Polly 合成语音请求的预签名 URL。创建 Polly 服务客户端pollyClient所有 Polly 调用都建立在客户端实例之上。仓库将客户端封装在 general-examples/src/libs/pollyClient.js 中核心代码如下import { PollyClient } from aws-sdk/client-polly; // Set the AWS Region. const REGION REGION; //e.g. us-east-1 // Create an Amazon S3 service client object. export const pollyClient new PollyClient({ region: REGION });要点说明使用PollyClient而非聚合的Polly按需引入可以显著减小打包体积这也是 SDK v3 的模块化设计初衷从源码结构看REGION是必须替换的占位符例如us-east-1客户端创建后通过pollyClient.send(command)发起请求客户端依赖运行时环境中已配置的 AWS 凭证环境变量或共享配置文件因此无需在代码中硬编码密钥。Node.js 示例文本合成语音并上传至 S3完整代码与参数解析主示例 polly_synthesize_to_s3.js 使用StartSpeechSynthesisTaskCommand演示如何把文本合成为 MP3 并自动写入指定的 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();参数说明参数示例值含义与取值范围OutputFormatmp3输出音频格式支持json、mp3、ogg_vorbis、pcmOutputS3BucketNamevideoanalyzerbucket语音文件写入的目标 S3 存储桶名称需替换为实际桶名TextHello David, How are you?待合成文本TextTypetext文本类型取值text纯文本或ssmlSSML 标记语言VoiceIdJoanna音色标识例如Joanna、Matthew等不同音色对应不同语言和性别SampleRate22050采样率Hz如8000、16000、22050、24000等需与输出格式匹配异步合成任务的特性StartSpeechSynthesisTask属于异步合成接口调用后立即返回任务信息语音文件由 Polly 后台任务生成并写入OutputS3BucketName指定的存储桶。因此代码注释中强调运行前必须替换两个输入项BUCKET_NAME目标 S3 存储桶名称IDENTITY_POOL_IDCognito 身份池 ID用于浏览器示例Node.js 示例中按需配置凭证。运行方式node ./actions/fileName即针对本示例可执行node polly_synthesize_to_s3.js权限配置setup.yaml 的最小权限设计为了在浏览器中安全地调用 Polly仓库提供了 general-examples/src/setup.yaml它基于 AWS CDK 生成基础设施核心包含Cognito 身份池ExampleIdentityPool并开启AllowUnauthenticatedIdentities: true允许未登录访客获得临时身份未认证角色CognitoDefaultUnauthenticatedRole通过sts:AssumeRoleWithWebIdentity信任 Cognito 身份池角色策略精确限定三条权限语句ActionEffectResource用途mobileanalytics:PutEventsAllow*移动分析事件上报cognito-sync:*Allow*Cognito 数据同步polly:SynthesizeSpeechAllow*同步合成语音polly:StartSpeechSynthesisTaskAllow*启动异步合成任务可以看到策略仅授权了 Polly 合成所需的两个核心 API这正是「最小权限」原则的落地示例——没有授予任何 S3 写入或其他服务的高危权限。部署该模板后浏览器代码即可通过身份池凭证安全调用 Polly。浏览器示例文本转语音就地播放前端页面 polly.htmlsrc/polly.html 提供了极简交互界面一个文本输入框、一个「Synthesize」按钮以及一个audio播放器。页面通过script src./dist/main.js引入 Webpack 打包后的 SDK 代码点击按钮触发全局函数speakText()。核心逻辑 polly.jssrc/polly.js 展示了浏览器端调用 Polly 的标准姿势分为三步第一步基于 Cognito 身份池创建客户端import { CognitoIdentityClient } from aws-sdk/client-cognito-identity; import { fromCognitoIdentityPool } from aws-sdk/credential-provider-cognito-identity; import { Polly } from aws-sdk/client-polly; import { getSynthesizeSpeechUrl } from aws-sdk/polly-request-presigner; const client new Polly({ region: REGION, credentials: fromCognitoIdentityPool({ client: new CognitoIdentityClient({ region: REGION }), identityPoolId: IDENTITY_POOL_ID, // IDENTITY_POOL_ID }), });第二步定义合成参数const speechParams { OutputFormat: OUTPUT_FORMAT, // For example, mp3 SampleRate: SAMPLE_RATE, // For example, 16000 Text: , // The speakText function supplies this value TextType: TEXT_TYPE, // For example, text VoiceId: POLLY_VOICE, // For example, Matthew };需要替换的占位符包括OUTPUT_FORMAT、SAMPLE_RATE、TEXT_TYPE、POLLY_VOICE、REGION、IDENTITY_POOL_ID。第三步生成预签名 URL 并播放const speakText async () { speechParams.Text document.getElementById(textEntry).value; try { const url await getSynthesizeSpeechUrl({ client, params: speechParams }); document.getElementById(audioSource).src url; document.getElementById(audioPlayback).load(); document.getElementById(result).innerHTML Speech ready to play.; } catch (err) { document.getElementById(result).innerHTML err; } }; window.speakText speakText;这里的关键点是aws-sdk/polly-request-presigner的getSynthesizeSpeechUrl它在浏览器端为SynthesizeSpeech请求生成带签名的预签名 URL前端拿到 URL 后直接赋给audio标签的src即可播放无需在浏览器中保存任何长期密钥。浏览器示例的构建与运行浏览器示例无法直接打开 HTML 运行需要通过 Webpack 将 ES6 模块打包npm run该命令定义在 package.json 的scripts字段中会执行webpack src/polly.js --mode development --libraryTarget commonjs2 --target web --devtool false -o src/dist/main.js打包产物为src/dist/main.js随后用浏览器打开polly.html即可体验完整流程。运行示例与测试通用运行指令README 明确给出两类运行命令并注明所有代码均以 ECMAScript 6ES6编写如需转为 CommonJS 语法可参考 AWS 官方 JavaScript 语法转换指南运行单个 actionnode ./actions/fileName运行场景scenarionode ./scenarios/fileName注场景通常需要调用同一服务内的多个函数以完成特定任务。测试⚠ 运行测试可能产生 AWS 费用。如需运行测试请参照javascriptv3根目录 README 中的说明。该根目录提供了两套测试体系单元测试npm test集成测试npm run integration-test。测试输出会分别写入unit_test.log或integration_test.log错误信息仍打印到控制台。此外还可在根目录执行npm run ci-lint使用 Biome 做静态检查。深入理解从 README 到源码的调用链综合仓库源码可以梳理出 Polly 示例的完整调用链Node.js 链路pollyClient.js创建PollyClient→polly_synthesize_to_s3.js构造StartSpeechSynthesisTaskCommand参数 →pollyClient.send(command)发起异步合成 → Polly 将 MP3 写入 S3 桶浏览器链路fromCognitoIdentityPool换取临时凭证 → 创建Polly客户端 →getSynthesizeSpeechUrl生成预签名 URL → 注入audio播放权限链路setup.yaml中 Cognito 未认证角色仅授权polly:SynthesizeSpeech与polly:StartSpeechSynthesisTask两个 Action与两条调用链路一一对应保证了「最小权限」。可以推断这种「README 概述 可运行源码 CDK 权限模板」的组合正是本仓库示例的标准组织方式目的是让读者既能快速跑通又能对照源码理解底层 API 的调用关系。小结与延伸阅读通过本指南你可以独立完成两件事在 Node.js 服务端把文本异步合成为音频并落盘到 S3在浏览器端用 Cognito 临时凭证加预签名 URL 实现零密钥的语音就地播放。这两个模式分别对应了语音内容生产批处理与消费交互式播放两大典型场景可直接迁移到自己的应用项目中。如需进一步深入可继续查阅仓库内以下资源javascriptv3/example_code/polly/README.md本指南对应的官方示例说明javascriptv3/example_code/polly/general-examples/src/polly_synthesize_to_s3.jsNode.js 异步合成完整源码javascriptv3/example_code/polly/general-examples/src/libs/pollyClient.jsPolly 客户端工厂javascriptv3/example_code/polly/general-examples/src/setup.yamlCognito 身份池与最小权限策略javascriptv3/example_code/polly/src/polly.js 与 src/polly.html浏览器端合成播放示例javascriptv3/README.mdSDK for JavaScript (v3) 示例总览、测试与 Docker 镜像说明。版权说明本文章对应示例源码遵循 Apache-2.0 许可版权归 Amazon.com, Inc. 或其关联公司所有。赞分享示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载相关推荐基于 AWS SDK for Go 的 Amazon Polly 语音合成与语音资源管理实战指南基于 AWS SDK for Go 的 Amazon Polly 语音合成与语音资源管理实战指南 导读 本文以 go/polly https://link.gi示例工程教程后端AWS SDK for JavaScript (v3) 操作 Amazon S3 完整实战指南AWS SDK for JavaScript v3 操作 Amazon S3 完整实战指南 本篇技术指南以 javascriptv3/example_code/示例工程教程后端Amazon Polly 语音合成实战指南aws-doc-sdk-examples 仓库中 AWS SDK for Java 2.x 示例详解Amazon Polly 语音合成实战指南aws doc sdk examples 仓库中 AWS SDK for Java 2.x 示例详解 本文基于 aw示例工程教程后端上一篇Home Assistant Android应用连接问题分析与解决方案下一篇Cellpose项目中关于torch.load安全加载模型权重的技术分析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考