# AI 文字转语音：怎样做出听起来自然的声音

> 文字转语音，就是把书面文字读成语音。OpenAI 的语音接口需要模型、文字和音色，还有一个 instructions 字段，用来设定语气、语速和口音。Kokoro 这样的开源模型可以在自己的电脑上运行。听起来自然，靠的是挑对音色、写清楚指令，再检查人名和数字是怎么读的。

Mindket 编辑部 · 发布于 2026-11-06 · 更新于 2026-11-06 · https://mindket.com/cn/learn/ai-voice-music/text-to-speech

## 要点

- 向语音接口发一次请求，把返回的内容存成音频文件。
- 写一段短指令，设定语气、语速和口音，每次只改一处。
- 把人名、缩写和编号按应该读的样子写出来。
- 按用途选路线：托管的 API，或者本机运行的模型。
- 声音由 AI 生成时，要告诉听众。

## 开始之前

**文字转语音**（TTS）指程序用合成的声音把书面文字念出来。这一课走两条路线。第一条调用 OpenAI 的语音接口，需要一个 API 密钥和装有 `curl` 的终端，怎样拿到密钥可以看 [OpenAI API 入门](https://mindket.com/cn/learn/openai-api/openai-api-quickstart)。第二条路线用 Python 在自己的电脑上运行 Kokoro，一个小型开源模型。

第一条路线有个日期要先知道。OpenAI 的指南把 `tts-1`、`tts-1-hd` 和 `gpt-4o-mini-tts` 标为已弃用，将在 2027 年 1 月 6 日关停，新项目请改用 Realtime API 里的 `gpt-realtime-2.1-mini`。那是另一套工作流程，页面写明这个模型不支持 `/v1/audio/speech`。关停之前，语音接口的示例照常能用，而且它们讲的是各条路线都一样的东西：音色、指令和输出格式。

OpenAI 的使用政策还要求你告诉听众，这个声音是 AI 生成的，不是真人。现在就想好那句口播或者字幕怎么写，事后补很容易忘。

## 用 OpenAI 的语音接口生成语音文件

请求有三个必填部分，模型、文字和音色，外加一个这里很重要的可选部分 `instructions`。下面的命令来自 OpenAI 的指南，它发送一句话和一小段指令，把返回的音频写进 `speech.mp3`。

````bash
curl https://api.openai.com/v1/audio/speech \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o-mini-tts",
    "input": "Today is a wonderful day to build something people love!",
    "voice": "coral",
    "instructions": "Speak in a cheerful and positive tone."
  }' \
  --output speech.mp3
````

1. 把 API 密钥放进 `OPENAI_API_KEY` 环境变量。
2. 在终端里运行上面的命令。指南里的 Python、JavaScript、Go、Java、C# 和 Ruby 标签页，发送的是同样四个字段。
3. 打开 `speech.mp3` 听一听。默认格式是 MP3。
4. 把 `voice` 改成 `marin` 或 `cedar`。指南的音色清单列出 13 个内置音色（它的开头一段写的是 11 个），并推荐这两个，称音质最好。
5. 把音频直接送到扬声器时，用 `response_format` 要 `wav` 或 `pcm`。指南推荐它们，因为响应最快，并说明 pcm 是没有文件头的原始 24 kHz、16 位采样。
6. 每次只改一个字段再运行一遍。一次只改一处，才看得出是哪个字段起了作用。

| 输出格式 | 指南说它适合 |
| --- | --- |
| MP3 | 一般用途，也是默认格式 |
| Opus | 互联网流媒体和通信，延迟低 |
| AAC | 数字音频压缩，YouTube、Android 和 iOS 偏好 |
| FLAC | 无损压缩，适合存档 |
| WAV | 未压缩音频，适合不想花时间解码的低延迟场景 |
| PCM | 没有文件头的原始 24 kHz、16 位采样 |

## 给声音下指令：语气、语速、口音和读音

`instructions` 字段接受普通的话。OpenAI 的指南说它能控制口音、情绪幅度、语调、模仿、语速、语气和耳语，示例只给了一行。更长的指令可以看 OpenAI 讲 Realtime 语音模型提示词的那篇指南，它把指令写成几个带标签的小段。那些写法是为 Realtime 模型写的，所以当作措辞参考，不要当成语音接口一定有效的保证。

下面的文字块，把那篇指南里三个分开的示例合成了一份指令，并去掉了它的 Length 一行，因为那一行说的是对话里每一轮的长度。指南说读音清单要保持简短，听到哪个词读错了，再加哪个词。

````text
# Personality & Tone
## Personality
- Friendly, calm and approachable expert customer service assistant.
## Tone
- Warm, concise, confident, never fawning.
## Pacing
- Deliver your audio response fast, but do not sound rushed.
- Do not modify the content of your response, only increase speaking speed for the same response.

# Reference Pronunciations
When voicing these words, use the respective pronunciations:
- Pronounce “SQL” as “sequel.”
- Pronounce “PostgreSQL” as “post-gress.”
- Pronounce “Kyiv” as “KEE-iv.”
- Pronounce "Huawei" as “HWAH-way”
````

- **语速。** 在 Realtime API 里，`speed` 设置改的是播放速度，不是模型组织语音的方式。想让声音更快，指南的做法是像上面那样加一条语速指令。
- **口音。** 指南说，“Sound Australian.” 这样含糊的一句，可能会漂移，甚至切换语言。它把口音写成几个稳定的特征：说带一点澳大利亚口音的英语，从第一个词到最后一个词保持稳定，不要夸张。
- **编号和数字。** 对电话号码、订单号和各种代码，指南加的规则是：每个字符单独读，用连字符隔开（比如 4-1-5），并且原样重复这个号码。
- **指令的局限。** 指南说，提示词能调口音、语速和表达方式，但替代不了声音设计。需要品牌专属的声音，就要用自定义声音，这是[下一课](https://mindket.com/cn/learn/ai-voice-music/voice-cloning)的内容。
- **重复。** 示例短语容易被用得太多。加一条变化规则（“Do not repeat the same sentence twice”），长篇朗读才不会像机器人。

| 听起来不对劲 | 该改什么 |
| --- | --- |
| 平淡、一个调子 | 在 `instructions` 里加语气和情绪的词，比如“cheerful and positive” |
| 太慢或太快 | 用文字说明语速，因为 `speed` 设置在 Realtime API 里只改播放速度 |
| 人名或缩写读错 | 写出该怎么读：把 “SQL” 读成 “sequel” |
| 数字糊成一团 | 要求每次读一个字符，用连字符隔开 |
| 口音飘忽 | 写明口音，说清哪些要保持稳定，并说明不要夸张 |
| 同一句话反复出现 | 加一条变化规则 |

## 看 OpenAI 介绍语音模型

2025 年 3 月 20 日，OpenAI 的四位成员介绍了 API 里的三个音频模型，其中一个就是支撑 `instructions` 字段的文字转语音模型，并做了演示。语音指南现在把这个模型列为已弃用，所以视频只用来理解怎样给声音下指令，当前的日期以指南为准。

[Audio Models in the API](https://www.youtube.com/watch?v=lXb0L16ISAc)

OpenAI 在自己的频道介绍并演示 API 里的三个新音频模型，直播于 2025 年 3 月 20 日。

## 在自己的电脑上运行开源模型：Kokoro

Kokoro 是一个开放权重的模型，只有 8200 万参数，结构轻量。它的权重采用 Apache 许可，所以可以放进产品里。模型卡说，它只用允许使用的或不受版权保护的音频训练：公有领域的录音、Apache 或 MIT 等许可下的音频，以及闭源 TTS 模型生成的合成音频。README 里的示例都是选一个有名字的音色，比如 `af_heart`，没有出现参考录音。1.0 版发布于 2025 年 1 月 27 日，带有 54 个音色，覆盖 8 种语言。

安装包叫 `kokoro`，还需要 `espeak-ng`。README 用这个语音工具处理英文词典之外的词和另外几种语言。下面是 README 里那段代码的精简版，每段文字生成一个 24000 Hz 的 WAV 文件。

````python
pip install -q "kokoro>=0.9.4" soundfile
# espeak-ng: on Linux  apt-get -qq -y install espeak-ng
#            on Windows  run the .msi from the espeak-ng releases page

from kokoro import KPipeline
import soundfile as sf

pipeline = KPipeline(lang_code='a')   # 'a' => American English
text = '''Kokoro is an open-weight TTS model with 82 million parameters.'''
generator = pipeline(text, voice='af_heart')
for i, (gs, ps, audio) in enumerate(generator):
    print(i, gs, ps)
    sf.write(f'{i}.wav', audio, 24000)
````

- `lang_code` 决定语言，必须和音色匹配：`a` 美式英语，`b` 英式英语，`e` 西班牙语，`f` 法语，`h` 印地语，`i` 意大利语，`j` 日语，`p` 巴西葡萄牙语，`z` 普通话。
- 日语需要 `pip install misaki[ja]`，普通话需要 `pip install misaki[zh]`。
- 在苹果芯片的 Mac 上，README 设置 `PYTORCH_ENABLE_MPS_FALLBACK=1` 来启用 GPU 加速。
- 模型卡链接了完整的音色清单（VOICES.md）和音频样例（SAMPLES.md）。
- 模型卡提醒，域名里带 kokoro 的网站，比如 kokorottsai_com，和这个模型没有关系，很可能是骗局。

## 哪条路线适合你的任务

托管的 API 让你用文字下指令，给你一个现成的声音。Kokoro 每个文件不花钱，文字也留在你自己的机器上，不过音色只能从它自带的里面选。Chatterbox 接受一段参考录音，还有表现力控制，但它的状态有个麻烦。想看 OpenAI 之外的托管工具，[AI 配音工具课](https://mindket.com/cn/learn/ai-tools/best-ai-voice-generator)做了对比。

**把文字变成语音的三种方式**

| | OpenAI 语音接口 | Kokoro-82M | Chatterbox |
| --- | --- | --- | --- |
| 在自己的电脑上运行 | ✗ 否 | ✓ 是 | ✓ 是 |
| 用文字设定语气和语速 | ✓ 是 | README 里没有出现 | ◐ 部分 |
| 用一段录音克隆声音 | ◐ 部分 | README 里没有出现 | ✓ 是 |
| 语言 | 跟随 Whisper 的语言清单，音色针对英语优化 | 8 种语言，54 个音色 | Multilingual V3 支持 23 种以上，Turbo 和 Nano 只有英语 |
| 许可或条款 | OpenAI 使用政策 | Apache-2.0 | MIT |
| 2026 年 11 月 6 日的状态 | 语音模型 2027 年 1 月 6 日关停 | 1.0 版发布于 2025 年 1 月 | 2026 年 8 月退役，作为存档保留 |

来源：[OpenAI API docs: Text to speech](https://developers.openai.com/api/docs/guides/text-to-speech) (2026-11-06 查阅)；[Hugging Face: hexgrad/Kokoro-82M model card](https://huggingface.co/hexgrad/Kokoro-82M) (2026-11-06 查阅)；[GitHub: resemble-ai/chatterbox README](https://github.com/resemble-ai/chatterbox) (2026-11-06 查阅)；[Hugging Face: ResembleAI/chatterbox model card](https://huggingface.co/ResembleAI/chatterbox) (2026-11-06 查阅)

## 决定你该用什么的几个日期

四个日期都来自厂商自己的页面。转写模型的关停日期，在配音那一课里还会用到，因为配音从语音开始，又在语音结束。

1. **2025年1月27日** Kokoro 1.0 版发布。8 种语言共 54 个音色，权重采用 Apache 许可。
2. **2026年8月** Chatterbox 退役。仓库作为存档继续公开，采用 MIT 许可，不再提供支持和更新。
3. **2027年1月6日** OpenAI 语音模型关停。`tts-1`、`tts-1-hd` 和 `gpt-4o-mini-tts` 停止工作，请迁移到 Realtime API。
4. **2027年2月26日** OpenAI 转写模型关停。`whisper-1`、`gpt-4o-transcribe` 系列模型和 `/v1/audio/translations` 停止工作。

来源：[Hugging Face: hexgrad/Kokoro-82M model card](https://huggingface.co/hexgrad/Kokoro-82M) (2026-11-06 查阅)；[GitHub: resemble-ai/chatterbox README](https://github.com/resemble-ai/chatterbox) (2026-11-06 查阅)；[OpenAI API docs: Text to speech](https://developers.openai.com/api/docs/guides/text-to-speech) (2026-11-06 查阅)；[OpenAI API docs: File transcription](https://developers.openai.com/api/docs/guides/speech-to-text) (2026-11-06 查阅)

## 常见错误

- 新产品直接建在 `gpt-4o-mini-tts` 上，却没有应对它关停日期的计划。
- 只写“要澳大利亚口音”，不说哪些要保持稳定，结果听到口音飘忽。
- 用 `speed` 设置去改一句话的表达方式，而它在 Realtime API 里只改播放速度。
- 让电话号码或订单号连成一串，而不是要求每次读一个字符。
- Kokoro 的 `lang_code` 和音色不匹配，或者漏装了 `espeak-ng`。
- 把读音堆成一长串清单，而指南说要保持简短，听到读错再加。
- 漏掉告诉听众这是 AI 生成声音的那一句。

## 动手试试

- 用上面的请求生成 `speech.mp3`，再只把 `voice` 改成 `marin`，对比两个文件。
- 给自己写的一段文字配一份指令，包含一条语速和一个人名的读音，再检查这个名字读对了没有。
- 把一个编造的订单号读两遍，一遍不加规则，一遍用连字符规则，听听有什么不同。
- 运行 Kokoro 那段代码，再把 `lang_code` 和 `voice` 一起换成 README 列出的另一种语言。

## 下一课：声音克隆

选一个内置音色是一回事，做出一个像某个具体的人的声音是另一回事，后者还有同意方面的规则。[声音克隆](https://mindket.com/cn/learn/ai-voice-music/voice-cloning)讲它的原理、OpenAI 和开源模型对你的要求，以及克隆之前该检查什么。

## 自测一下

1. OpenAI 语音请求里的哪个字段，用普通的话设定语气、语速和口音？

   A. input
   B. voice
   C. instructions
   D. response_format

   答案：C。 指南说 instructions 能控制口音、情绪幅度、语调、语速、语气和耳语。其他字段分别设置文字、音色和文件格式。

2. 指南说 tts-1、tts-1-hd 和 gpt-4o-mini-tts 什么时候关停？

   A. 2027 年 2 月 26 日
   B. 2027 年 1 月 6 日
   C. 已经关停了
   D. 2026 年 12 月 1 日

   答案：B。 指南把这三个模型标为已弃用，关停日期是 2027 年 1 月 6 日。2027 年 2 月 26 日是转写模型的日期。

3. 下面哪一项是 Kokoro 模型卡里写明的？

   A. 它只能通过托管的 API 使用
   B. 它只会说英语
   C. 它有 82 亿参数
   D. 它有 8200 万参数，权重采用 Apache 许可

   答案：D。 模型卡称 Kokoro 是开放权重的模型，有 8200 万参数，权重采用 Apache 许可。1.0 版列出 8 种语言共 54 个音色，pip 包可以在你自己的电脑上运行。

4. 一个电话号码被读成一团糊在一起的数字。OpenAI 的 Realtime 提示词指南建议怎么办？

   A. 要求每次读一个字符，用连字符隔开
   B. 调高 speed 设置
   C. 把输出格式换成 wav
   D. 用更长的声音样本

   答案：A。 指南加了一条规则：每个字符单独读，用连字符隔开，并原样重复这个号码。

## 常见问题

### 语音接口能边生成边播放吗？

可以。指南说，这个接口用分块传输编码来流式输出音频，所以整个文件还没生成完，就可以开始播放。想要最快的起播，它推荐用 wav 或 pcm 格式。

### 有没有能离线运行的免费 AI 文字转语音？

Kokoro 就是一个。它用 pip 和 espeak-ng 安装，在你自己的电脑上运行，有 54 个音色可选。模型卡说它的权重采用 Apache 许可，README 里的示例是选一个有名字的音色。

### 一定要说明声音是 AI 生成的吗？

对 OpenAI 的声音来说，是的，因为它的使用政策要求向听众清楚说明。最简单的位置，是在说明文字或简介里写一句。其他工具有各自的条款，要逐个去读。

### OpenAI 的文字转语音能说哪些语言？

指南说，这个模型大体跟随 Whisper 的语言清单，其中有中文、西班牙语、法语、印地语和马来语，音色则针对英语优化。输入文字用你想要的语言写就行。

### 怎样让文字转语音听起来不那么像机器人？

用文字去指挥它：语气和语速、稳定的口音、一份简短的读音清单，以及对代码每次读一个字符。每次只改一处，一次改好几处，就看不出是哪一处起了作用。

## 资料来源

- [OpenAI API docs: Text to speech](https://developers.openai.com/api/docs/guides/text-to-speech) (2026-11-06 查阅)
- [OpenAI API docs: Prompting Realtime models](https://developers.openai.com/api/docs/guides/voice-prompting) (2026-11-06 查阅)
- [OpenAI API docs: File transcription](https://developers.openai.com/api/docs/guides/speech-to-text) (2026-11-06 查阅)
- [Hugging Face: hexgrad/Kokoro-82M model card](https://huggingface.co/hexgrad/Kokoro-82M) (2026-11-06 查阅)
- [GitHub: hexgrad/kokoro README](https://github.com/hexgrad/kokoro) (2026-11-06 查阅)
- [GitHub: resemble-ai/chatterbox README](https://github.com/resemble-ai/chatterbox) (2026-11-06 查阅)
- [Hugging Face: ResembleAI/chatterbox model card](https://huggingface.co/ResembleAI/chatterbox) (2026-11-06 查阅)
- [YouTube: OpenAI, Audio Models in the API](https://www.youtube.com/watch?v=lXb0L16ISAc) (2026-11-06 查阅)

[对比语音工具](https://mindket.com/cn/learn/ai-tools/best-ai-voice-generator)
