# @crvouga/mockingbird-service-aws-speech 中文文档

规范地址：https://npmcn.com/package/%40crvouga/mockingbird-service-aws-speech/

版本：3\.11\.0
npm 元数据更新时间：2026-11-11T02:02:56.712Z
中文译文更新时间：2026-11-11T02:28:51.013Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40crvouga/mockingbird-service-aws-speech
原文对照：https://npmcn.com/package/%40crvouga/mockingbird-service-aws-speech/?lang=original
项目主页：https://github.com/crvouga/mockingbird/tree/main/packages/service/aws-speech#readme
源码仓库：https://github.com/crvouga/mockingbird

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：4.4 MB，18 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：2 个
- 首次发布：2026-09-22T23:52:41.094Z
- 最新版本发布：2026-11-11T02:02:56.120Z
- 近 30 天下载量：16240（2026-10-11 至 2026-11-09，npm 官方下载统计）
- 已发布版本数：42（近 12 个月 42 个）

## 中文简介

AWS Polly(SynthesizeSpeech, StartSpeechSynthesis Stream)和Transtics(流出于h2c,分批工作)的状态仿真器,带有精确的事件流框架和脚本记录.

## 安装

```sh
npm install @crvouga/mockingbird-service-aws-speech
```

也可以使用：`pnpm add @crvouga/mockingbird-service-aws-speech`、`yarn add @crvouga/mockingbird-service-aws-speech`、`bun add @crvouga/mockingbird-service-aws-speech`

## README

# @crvouga/ mockingbird-service-aws-speech (中文(简体) )

> 本地模拟器。 真正的API合同. 部分 [嘲笑鸟](https://github.com/crvouga/mockingbird)。 。 。 .

状态模拟器 **亚马逊波利** 财务报告和审定财务报表 **亚马逊语转写** 测试套房: Polly `SynthesizeSpeech` 财务报告和审定财务报表 `StartSpeechSynthesisStream` (HTTP/2 二进制事件流),转写 流线 `StartStreamTranscription` (HTTP/2 二相)和转录批次 `StartTranscriptionJob` 编号 : `GetTranscriptionJob`。聊天声音将运行到没有音频结束 离开机器:转录“听力” 测试脚本,波利用决定论回答 其长度跟随文本的合成音频.

-   行动范围: [支助](https://github.com/crvouga/mockingbird/blob/main/packages/service/aws-speech/SUPPORT.md)
-   与官方客户 证明我们的消费者针: `@aws-sdk/client-polly`, (中文(简体) ), `@aws-sdk/client-transcribe-streaming`, (中文(简体) ), `@aws-sdk/client-transcribe` (3.1132.0)和《蒙特利尔议定书》3 解码我们的后端用途( e)`mpg123-decoder@1.0.3`) (中文(简体) ).

## 安装

```bash
npm install -D @crvouga/mockingbird-service-aws-speech
```

仅限无害环境管理。 节点 22或 Bun 1.2. 无土生属地. 给它服务 `npx mockingbird-aws-speech serve` (h2c + 一个端口的HTTP/1.1), `createServer` 从 `./server`,或 `createRuntime` 与任何获取服务器(仅HTTP/1.1).

## 使用量

```bash
npx mockingbird-aws-speech serve --port 8797
export AWS_ENDPOINT_URL_POLLY=http://127.0.0.1:8797
export AWS_ENDPOINT_URL_TRANSCRIBE_STREAMING=http://127.0.0.1:8797
export AWS_ENDPOINT_URL_TRANSCRIBE=http://127.0.0.1:8797
```

```ts
import { PollyClient, SynthesizeSpeechCommand } from "@aws-sdk/client-polly"
import {
  StartStreamTranscriptionCommand,
  TranscribeStreamingClient,
} from "@aws-sdk/client-transcribe-streaming"
import { createServer } from "@crvouga/mockingbird-service-aws-speech/server"

// Test setup: start the emulator and script what the next voice session "hears":
// partials while audio streams in, then the final.
const emulator = await createServer()
await fetch(`${emulator.url}/__admin/transcripts`, {
  method: "PUT",
  headers: { "content-type": "application/json" },
  body: JSON.stringify({ match: { any: true }, partials: ["I have", "I have a headache"], final: "I have a headache." }),
})

// The AWS SDK clients your application uses; only the endpoint changes.
const config = {
  endpoint: emulator.url,
  region: "us-east-1",
  credentials: { accessKeyId: "fixture", secretAccessKey: "fixture" },
}
const transcribe = new TranscribeStreamingClient(config)
const polly = new PollyClient(config)

// Application code: a voice turn transcribes the member's audio, then speaks the reply.
const { TranscriptResultStream } = await transcribe.send(
  new StartStreamTranscriptionCommand({
    LanguageCode: "en-US",
    MediaEncoding: "pcm",
    MediaSampleRateHertz: 16_000,
    AudioStream: (async function* () {
      yield { AudioEvent: { AudioChunk: new Uint8Array(3_200) } }
    })(),
  }),
)
const heard: string[] = []
for await (const event of TranscriptResultStream ?? []) {
  for (const result of event.TranscriptEvent?.Transcript?.Results ?? [])
    heard.push(result.Alternatives?.[0]?.Transcript ?? "")
}
// heard: ["I have", "I have a headache", "I have a headache."]
const { AudioStream } = await polly.send(
  new SynthesizeSpeechCommand({ VoiceId: "Matthew", OutputFormat: "mp3", Text: "Rest and drink water." }),
)
const audio = await AudioStream?.transformToByteArray() // deterministic MP3 frames

await emulator.close() // after the test
```

### 议定书

Polly 和 Translatising 客户端默认为 `NodeHttp2Handler`: 反对 `http://` 他们说话的终点 **(单位:千美元)** 及其双向 操作需要 HTTP/2 二进制。 转录批次使用HTTP/1.1. `mockingbird-aws-speech serve` 财务报告和审定财务报表 `createServer` 嗅出每个连接并在一个端口上服务(`serve --config` 从 另一家服务的CLI,和 `createRuntime` 在 Plain Facker 服务器后,只说 HTTP/1.1 ).

### 路线

| 路线 | 行为 |
| --- | --- |
| `POST /v1/speech` | 宝丽 `SynthesizeSpeech`。 。 。 . `OutputFormat: pcm` − 生PCM s16le单音节440 Hz音(`audio/pcm`即使字节数, `SampleRate` 8000/16000,默认为16000; `mp3` • 有效的 MPEG-2 第三级框架(`audio/mpeg`,8000/16000/22050/24000) (中文(简体) ). 每个字符60毫秒的音频,每跑一次的字节相同; `x-amzn-RequestCharacters`。错误: `ValidationException` (未知的声音或引擎), `InvalidSampleRateException`, (中文(简体) ), `TextLengthExceededException` ( > 3000个字符). |
| `POST /v1/synthesisStream` | 宝丽 `StartSpeechSynthesisStream` (HTTP/2 二进制,参数: `x-amzn-Engine` 编号 : `x-amzn-VoiceId` 编号 : `x-amzn-OutputFormat` 编号 : `x-amzn-SampleRate`; 仅基因引擎). 每个 `TextEvent` 答题 `AudioEvent`s (24 kHz MP3 帧 mpg123 解码); `CloseStreamEvent` (或输入结束)答案 `StreamClosedEvent {RequestCharacters}`。 。 。 . |
| `POST /stream-transcription` | 转写 `StartStreamTranscription` (HTTP/2 二联). 验证 `x-amzn-transcribe-*` 参数 (400) `BadRequestException`),在响应标题中回放它们 `x-amzn-transcribe-session-id`。发送一个脚本部分(`IsPartial: true`(单位) `AudioEvent` 收到,其余的当音频结束, 然后最后的结果,然后关闭。 音频字节被计算,从未保留. |
| `POST /` | 转录批次(AWS JSON 1.1, `X-Amz-Target`) (中文(简体) ). `StartTranscriptionJob` → `IN_PROGRESS` (单位:千美元)`ConflictException` 重复名称; `GetTranscriptionJob` → `COMPLETED` 一次 `jobDurationMs` (2 s) 已经传递到模拟时钟上 `Transcript.TranscriptFileUri` =: `https://s3.<region>.amazonaws.com/<OutputBucketName>/<OutputKey>`· ; `BadRequestException` 一个未知的工作. |

### 语录 (`PUT /__admin/transcripts`(中文(简体) )

`{match?, partials?, final, times?}` (或 `{"transcripts": [...]}`) (中文(简体) ). `match` 实值 `{sessionIndex}` (基于名称空间中流线会话的0基数), `{jobName}` (批次数) 任务),或 `{any: true}`; 准确的对决胜出 `any`。无文字记录的会议和工作听到 `defaultTranscript` (单位:千美元)`"Hello."`, (中文(简体) ), `PUT /__admin/settings`并计为 `unscripted` (单位:千美元)`GET /__admin/transcripts` → `stats`) (中文(简体) ).

### 管理员(超过标准合同)

| 路线 | 效果 |
| --- | --- |
| `PUT` 编号 : `POST` 编号 : `GET` 编号 : `DELETE /__admin/transcripts` | 替换、添加、列表(由 `stats`),删除(`?id=`) (中文(简体) ). |
| `GET /__admin/jobs` | 批量工作(在模拟器时钟上得到先进). |
| `POST /__admin/jobs/:name/complete` | 现在完成,可选择使用 `{transcript}`。 。 。 . |
| `POST /__admin/jobs/:name/fail` | 失败 `{reason}` (单位:千美元)`FailureReason`) (中文(简体) ). |
| `GET /__admin/jobs/:name/transcript` | JSON Transis的笔录会写给S3. |
| `GET /__admin/speech` | 每份合成/抄本的元数据(语音、引擎、格式、字符、字节、脚本 id——从不文本). |
| `GET/PUT /__admin/settings` | `defaultTranscript`, (中文(简体) ), `jobDurationMs`。 。 。 . |

与 `--s3-endpoint <url>` (单位:千美元)`transcriptStore` jSON的笔录也是 写到 S3( 堆栈的 s3rver) `OutputBucketName/OutputKey`所以这个应用是自己的 `GetObject` 打开 `TranscriptFileUri` 发现它.

错误预设( E)`POST /__admin/faults {"preset": "<name>", "count"?: n}`: `polly_throttling` (429个) `ThrottlingException`, (中文(简体) ), `polly_service_failure` (500个), `polly_stream_throttling` 编号 : `polly_stream_validation` 编号 : `polly_stream_quota` (一个例外) 任何音频前的事件: 我们的适配器返回到 `SynthesizeSpeech`, (中文(简体) ), `polly_stream_failure` (单位:千美元)`ServiceFailureException` 音频之后, `polly_stream_no_close` (无) `StreamClosedEvent`, (中文(简体) ), `transcribe_bad_request` (400个), `transcribe_limit_exceeded` (429个), `transcribe_service_unavailable` (503个), `transcribe_mid_stream_failure` (单位:千美元)`InternalFailureException` 在第一部分之后, `transcribe_job_limit` (单位:千美元)`LimitExceededException`, (中文(简体) ), `transcribe_job_failed` (下一个任务) `FAILED`) (中文(简体) ).

### 命名空间

`x-mockingbird-namespace`页:1 `/__admin/ns/<name>` 前缀在端点 URL上,或 SigV4 访问密钥 id: `PUT /__admin/credentials {"credentials": {"<AWS_ACCESS_KEY_ID>": "<namespace>"}}`。日记 记录语音,引擎,格式,字符计数和脚本代号——永远不要文本.

### 故意不模拟

-   真实的语音: Polly 音频是一个音调( PCM) 或无声但有效的 MP3 帧( 一个音调需要真实的) MP3编码器; Transis从不听——单词只出自脚本.
-   `ogg_vorbis`, (中文(简体) ), `ogg_opus`, (中文(简体) ), `mulaw`, (中文(简体) ), `alaw` 和语音标记`json`)输出,SSML语义(tags) 按长度、词典、每台语音引擎的可用性计算.
-   转写语言识别,扬声器标签,自定义词汇(接受并呼应, ),Call Analytics and Medical 变体,批量工作读取自S3的介质.
-   SigV4 签名和事件签名未验证;访问密钥 id 只选择一个 名称空间.

## API 密码

| 导出 | 仁爱 | 说明 |
| --- | --- | --- |
| `SpeechAPI` | 类 | 进程模拟器 : `fetch`, (中文(简体) ), `reset`, (中文(简体) ), `jobs()`, (中文(简体) ), `complete(name, transcript?)`, (中文(简体) ), `fail(name, reason)`, (中文(简体) ), `transcriptDocument(job)`, (中文(简体) ), `speechLog()`, (中文(简体) ), `stats()`选项: `sqlite`, (中文(简体) ), `now`, (中文(简体) ), `namespace`, (中文(简体) ), `settings`, (中文(简体) ), `transcripts`, (中文(简体) ), `transcriptStore`。 。 。 . |
| `createRuntime` | 函数 | 服务合同的模拟者。 选项 : `settings`, (中文(简体) ), `transcripts`, (中文(简体) ), `transcriptStore`, (中文(简体) ), `clock`, (中文(简体) ), `seed`, (中文(简体) ), `adminKey`, (中文(简体) ), `onLog`, (中文(简体) ), `sqlite`。 。 。 . |
| `SPEECH_PRESETS` | 对象 | 每个命名的断层预设. |
| `SPEECH_NAMESPACE` | 字符串 | 服务名称, `"aws-speech"`。 。 。 . |
| `POLLY_VOICES` | 数组 | 每个波利的声音id模拟器接受. |
| `speechError` | 函数 | 剩余 Json1 错误响应( S)`x-amzn-ErrorType` + 键 `{message}`) (中文(简体) ). |
| `accessKeyCredential` | 函数 | SigV4 访问请求的密钥 ID( 如何将证书映射到命名空间) . |
| `pcmTone`, (中文(简体) ), `mp3Audio`, (中文(简体) ), `mp3Frame`, (中文(简体) ), `durationFor`, (中文(简体) ), `MS_PER_CHARACTER`, (中文(简体) ), `MP3_SAMPLE_RATES`, (中文(简体) ), `MP3_SAMPLES_PER_FRAME` | 音频 | 决定性的合成音频. |
| `DEFAULT_SETTINGS` | 价值 | 默认设置 . |
| `encodeMessage`, (中文(简体) ), `decodeMessage`, (中文(简体) ), `FrameReader`, (中文(简体) ), `readFrames`, (中文(简体) ), `eventFrame`, (中文(简体) ), `exceptionFrame`, (中文(简体) ), `unwrapSigned`, (中文(简体) ), `crc32`, (中文(简体) ), `EventStreamError` | 代码c | 事件流编码器(精确的前奏,头和CRC32),双向. |
| `document`, (中文(简体) ), `operationIds`, (中文(简体) ), `supportedOperationIds` | 数值 | 销售商为OpenAPI合同及其业务代号. |
| `createServer`, (中文(简体) ), `serveTarget`, (中文(简体) ), `DEFAULT_PORT`, (中文(简体) ), `listenH2c` (单位:千美元)`./server`(中文(简体) ) | 节点 | 在一个端口上服务 h2c + HTTP/1.1 `serve` CLI目标; 第8797端口; 二相正听器. |

部分 [嘲笑鸟](https://github.com/crvouga/mockingbird)。 。 。 .

## 常见问题

### @crvouga/mockingbird-service-aws-speech 是什么？

AWS Polly\(SynthesizeSpeech, StartSpeechSynthesis Stream\)和Transtics\(流出于h2c,分批工作\)的状态仿真器,带有精确的事件流框架和脚本记录\.

### 如何安装 @crvouga/mockingbird-service-aws-speech？

在项目目录运行 npm install @crvouga/mockingbird-service-aws-speech，或使用 pnpm add / yarn add / bun add。它还提供命令行工具 mockingbird-aws-speech，可以用 npx mockingbird-aws-speech 直接运行。

### @crvouga/mockingbird-service-aws-speech 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @crvouga/mockingbird-service-aws-speech 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @crvouga/mockingbird-service-aws-speech 可以商用吗？

@crvouga/mockingbird-service-aws-speech 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @crvouga/mockingbird-service-aws-speech 的下载量有多少？

根据 npm 官方下载统计，@crvouga/mockingbird-service-aws-speech 在 2026/10/11 – 2026/11/09 这 30 天内被下载 16,240 次，日均约 541 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @crvouga/mockingbird-service-aws-speech 还在维护吗？

最新版本 3\.11\.0 发布于 2026/11/11（今天）；至今共发布 42 个版本，其中过去 12 个月发布了 42 个；首次发布于 2026/09/23。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

