开始之前
文字转语音(TTS)指程序用合成的声音把书面文字念出来。这一课走两条路线。第一条调用 OpenAI 的语音接口,需要一个 API 密钥和装有 curl 的终端,怎样拿到密钥可以看 OpenAI API 入门。第二条路线用 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。
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- 把 API 密钥放进
OPENAI_API_KEY环境变量。 - 在终端里运行上面的命令。指南里的 Python、JavaScript、Go、Java、C# 和 Ruby 标签页,发送的是同样四个字段。
- 打开
speech.mp3听一听。默认格式是 MP3。 - 把
voice改成marin或cedar。指南的音色清单列出 13 个内置音色(它的开头一段写的是 11 个),并推荐这两个,称音质最好。 - 把音频直接送到扬声器时,用
response_format要wav或pcm。指南推荐它们,因为响应最快,并说明 pcm 是没有文件头的原始 24 kHz、16 位采样。 - 每次只改一个字段再运行一遍。一次只改一处,才看得出是哪个字段起了作用。
| 输出格式 | 指南说它适合 |
|---|---|
| MP3 | 一般用途,也是默认格式 |
| Opus | 互联网流媒体和通信,延迟低 |
| AAC | 数字音频压缩,YouTube、Android 和 iOS 偏好 |
| FLAC | 无损压缩,适合存档 |
| WAV | 未压缩音频,适合不想花时间解码的低延迟场景 |
| PCM | 没有文件头的原始 24 kHz、16 位采样 |
给声音下指令:语气、语速、口音和读音
instructions 字段接受普通的话。OpenAI 的指南说它能控制口音、情绪幅度、语调、模仿、语速、语气和耳语,示例只给了一行。更长的指令可以看 OpenAI 讲 Realtime 语音模型提示词的那篇指南,它把指令写成几个带标签的小段。那些写法是为 Realtime 模型写的,所以当作措辞参考,不要当成语音接口一定有效的保证。
下面的文字块,把那篇指南里三个分开的示例合成了一份指令,并去掉了它的 Length 一行,因为那一行说的是对话里每一轮的长度。指南说读音清单要保持简短,听到哪个词读错了,再加哪个词。
# 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),并且原样重复这个号码。
- 指令的局限。 指南说,提示词能调口音、语速和表达方式,但替代不了声音设计。需要品牌专属的声音,就要用自定义声音,这是下一课的内容。
- 重复。 示例短语容易被用得太多。加一条变化规则(“Do not repeat the same sentence twice”),长篇朗读才不会像机器人。
| 听起来不对劲 | 该改什么 |
|---|---|
| 平淡、一个调子 | 在 instructions 里加语气和情绪的词,比如“cheerful and positive” |
| 太慢或太快 | 用文字说明语速,因为 speed 设置在 Realtime API 里只改播放速度 |
| 人名或缩写读错 | 写出该怎么读:把 “SQL” 读成 “sequel” |
| 数字糊成一团 | 要求每次读一个字符,用连字符隔开 |
| 口音飘忽 | 写明口音,说清哪些要保持稳定,并说明不要夸张 |
| 同一句话反复出现 | 加一条变化规则 |
看 OpenAI 介绍语音模型
2025 年 3 月 20 日,OpenAI 的四位成员介绍了 API 里的三个音频模型,其中一个就是支撑 instructions 字段的文字转语音模型,并做了演示。语音指南现在把这个模型列为已弃用,所以视频只用来理解怎样给声音下指令,当前的日期以指南为准。

在自己的电脑上运行开源模型: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 文件。
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 配音工具课做了对比。
| 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 (2026年11月6日 查阅);Hugging Face: hexgrad/Kokoro-82M model card (2026年11月6日 查阅);GitHub: resemble-ai/chatterbox README (2026年11月6日 查阅);Hugging Face: ResembleAI/chatterbox model card (2026年11月6日 查阅)
决定你该用什么的几个日期
四个日期都来自厂商自己的页面。转写模型的关停日期,在配音那一课里还会用到,因为配音从语音开始,又在语音结束。
Kokoro 1.0 版发布
8 种语言共 54 个音色,权重采用 Apache 许可。
来源:Hugging Face: hexgrad/Kokoro-82M model card (2026年11月6日 查阅)
Chatterbox 退役
仓库作为存档继续公开,采用 MIT 许可,不再提供支持和更新。
来源:GitHub: resemble-ai/chatterbox README (2026年11月6日 查阅)
OpenAI 语音模型关停
tts-1、tts-1-hd和gpt-4o-mini-tts停止工作,请迁移到 Realtime API。来源:OpenAI API docs: Text to speech (2026年11月6日 查阅)
OpenAI 转写模型关停
whisper-1、gpt-4o-transcribe系列模型和/v1/audio/translations停止工作。来源:OpenAI API docs: File transcription (2026年11月6日 查阅)
常见错误
- 新产品直接建在
gpt-4o-mini-tts上,却没有应对它关停日期的计划。 - 只写“要澳大利亚口音”,不说哪些要保持稳定,结果听到口音飘忽。
- 用
speed设置去改一句话的表达方式,而它在 Realtime API 里只改播放速度。 - 让电话号码或订单号连成一串,而不是要求每次读一个字符。
- Kokoro 的
lang_code和音色不匹配,或者漏装了espeak-ng。 - 把读音堆成一长串清单,而指南说要保持简短,听到读错再加。
- 漏掉告诉听众这是 AI 生成声音的那一句。
动手试试
- 用上面的请求生成
speech.mp3,再只把voice改成marin,对比两个文件。 - 给自己写的一段文字配一份指令,包含一条语速和一个人名的读音,再检查这个名字读对了没有。
- 把一个编造的订单号读两遍,一遍不加规则,一遍用连字符规则,听听有什么不同。
- 运行 Kokoro 那段代码,再把
lang_code和voice一起换成 README 列出的另一种语言。
下一课:声音克隆
选一个内置音色是一回事,做出一个像某个具体的人的声音是另一回事,后者还有同意方面的规则。声音克隆讲它的原理、OpenAI 和开源模型对你的要求,以及克隆之前该检查什么。
自测一下
OpenAI 语音请求里的哪个字段,用普通的话设定语气、语速和口音?
查看答案
C. instructions 指南说 instructions 能控制口音、情绪幅度、语调、语速、语气和耳语。其他字段分别设置文字、音色和文件格式。
指南说 tts-1、tts-1-hd 和 gpt-4o-mini-tts 什么时候关停?
查看答案
B. 2027 年 1 月 6 日 指南把这三个模型标为已弃用,关停日期是 2027 年 1 月 6 日。2027 年 2 月 26 日是转写模型的日期。
下面哪一项是 Kokoro 模型卡里写明的?
查看答案
D. 它有 8200 万参数,权重采用 Apache 许可 模型卡称 Kokoro 是开放权重的模型,有 8200 万参数,权重采用 Apache 许可。1.0 版列出 8 种语言共 54 个音色,pip 包可以在你自己的电脑上运行。
一个电话号码被读成一团糊在一起的数字。OpenAI 的 Realtime 提示词指南建议怎么办?
查看答案
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
- OpenAI API docs: Prompting Realtime models https://developers.openai.com/api/docs/guides/voice-prompting
- OpenAI API docs: File transcription https://developers.openai.com/api/docs/guides/speech-to-text
- Hugging Face: hexgrad/Kokoro-82M model card https://huggingface.co/hexgrad/Kokoro-82M
- GitHub: hexgrad/kokoro README https://github.com/hexgrad/kokoro
- GitHub: resemble-ai/chatterbox README https://github.com/resemble-ai/chatterbox
- Hugging Face: ResembleAI/chatterbox model card https://huggingface.co/ResembleAI/chatterbox
- YouTube: OpenAI, Audio Models in the API https://www.youtube.com/watch?v=lXb0L16ISAc
