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),仅供参考

相关新闻

Rust 结构体分解(Struct Decomposition):用组合结构让借用检查器放行独立可变借用

Rust 结构体分解(Struct Decomposition):用组合结构让借用检查器放行独立可变借用

文档教程 【免费下载链接】patterns A catalogue of Rust design patterns, anti-patterns and idioms 项目地址: https://gitcode.com/gh_mirrors/pa/patterns 点击查看 免费下载 本指南整理自当前仓库 Rust Design Patterns 目录 中的 Structural Pattern「Struc…

2026/9/25 5:29:25 阅读更多 →
Moto 中的 AWS App Mesh 模拟实现:AppMeshBackend 已支持 API 全解析与实战指南

Moto 中的 AWS App Mesh 模拟实现:AppMeshBackend 已支持 API 全解析与实战指南

Mock测试 【免费下载链接】moto A library that allows you to easily mock out tests based on AWS infrastructure. 项目地址: https://gitcode.com/gh_mirrors/mo/moto 点击查看 免费下载 本文聚焦开源库 Moto 对 AWS App Mesh 服务的本地模拟实现,以…

2026/9/25 5:29:25 阅读更多 →
野牛电器实力怎么样

野牛电器实力怎么样

深夜十一点的候机厅,总有人蹲在墙角的插座旁,从背包里翻出三四个规格各异的转换插头,一个一个试过去。手机电量告急,电脑里还差一份标书,插孔却怎么也对不上。这样的画面,对经常跨国出行的人来说&#xff0…

2026/9/25 5:29:25 阅读更多 →

最新新闻

微信小程序省市县三级联动:数据驱动组件化实现

微信小程序省市县三级联动:数据驱动组件化实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 7:14:40 阅读更多 →
VUE配置环境变量:从package.json到axios的完整实践

VUE配置环境变量:从package.json到axios的完整实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 7:14:40 阅读更多 →
基于CLI与Kubernetes的Agentic编排实战:从任务调度到多Agent流水线

基于CLI与Kubernetes的Agentic编排实战:从任务调度到多Agent流水线

1. 从“ax”这个标题说起:一个被低估的Agentic编排入口第一次看到“ax”这个标题,很多人会以为是某个命令行工具的缩写,或者某个内部项目的代号。但把热搜词摊开来看——ax、agentic、orchestrator、Kubernetes、CLI——这几个词凑在一起&…

2026/9/25 7:14:40 阅读更多 →
迅软DSE不卸载解除加密:透明加密策略精准干预指南

迅软DSE不卸载解除加密:透明加密策略精准干预指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 7:14:40 阅读更多 →
STM32F103C8T6环境监测项目全解析:从原理图到Proteus仿真

STM32F103C8T6环境监测项目全解析:从原理图到Proteus仿真

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 7:14:40 阅读更多 →
cuDF libcudf 类型分发器(utility_dispatcher)深度解析:从 `type_id` 到编译期 C++ 类型的运行时分发机制

cuDF libcudf 类型分发器(utility_dispatcher)深度解析:从 `type_id` 到编译期 C++ 类型的运行时分发机制

数据分析数据工程机器学习 【免费下载链接】cudf cuDF - GPU DataFrame Library 项目地址: https://gitcode.com/gh_mirrors/cu/cudf 点击查看 免费下载 导读 本文围绕 libcudf 的 utility_dispatcher Doxygen 文档组(即 Type Dispatcher)…

2026/9/25 7:13:39 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →