这次我们来看一个非常具体的教育工具:人教版普通高中教科书英语必修第一册 Welcome Unit 单词朗读工具。它解决的问题很直接——教材配套音频资源里,单词朗读往往是和课文、对话打包在一起的,想单独提取某个单词的发音,要么手动剪音频,要么去第三方 App 里一个一个导出,效率很低。而老师在做课前预习材料、听写音频,学生在做背单词卡、磨耳朵音频时,最合适的格式就是"一个单词对应一个 MP3 文件"。
这个方案的技术栈不复杂,核心是三件事:整理 Welcome Unit 词汇表、选一个 TTS 引擎、写一个批量生成脚本。整套流程不依赖显卡,不需要 GPU,普通办公电脑和轻薄本都能跑;启动方式是命令行,跑完直接输出一个音频文件夹。如果你想把能力接进自己的小程序、网页或者内部工具,还可以再加一层 HTTP 接口。
这篇文章按实操顺序展开:先看核心能力速览和适用场景,再准备 Python 环境与 TTS 依赖,然后给出可复制的批量生成脚本,接着完成单单词、批量、接口 API 三轮验证,最后整理常见问题和工程化建议。整个过程不依赖付费 API 也能跑通,适合英语老师、学生家长、教育工具开发者和刚接触 TTS 批量任务的 Python 用户阅读。
1. 核心能力速览
先给一张规格表,方便快速判断这个工具适不适合你。
| 能力项 | 说明 |
|---|---|
| 项目定位 | 教材词汇朗读批量生成工具 |
| 目标内容 | 人教版普通高中教科书英语必修第一册 Welcome Unit 词汇 |
| 主要功能 | 按单词批量生成英文朗读音频,输出 MP3 文件 |
| 硬件门槛 | 无 GPU 要求,普通 CPU 即可运行 |
| 运行平台 | Windows / macOS / Linux,Python 3.9 及以上 |
| 启动方式 | 命令行脚本运行,可选 FastAPI 包装成 HTTP 服务 |
| 是否支持 API | 支持,可提供 /api/tts、/api/batch 等接口 |
| 是否支持批量任务 | 支持,词汇表驱动批量生成 |
| 输出格式 | MP3 音频,文件名与单词一一对应 |
| 自定义能力 | 可选择不同 TTS 音色、语速、音量 |
| 适合场景 | 课前预习音频、听写材料、单词卡配音、教学课件 |
这张表里唯一需要实际确认的是 TTS 引擎。下文采用的 edge-tts 是社区里常用的微软 Edge 在线朗读服务封装库,音色自然、免费、支持多语种。如果你的网络环境访问这个服务不稳定,可以换成离线方案 pyttsx3,或者使用自己账号下的商业云 TTS API。脚本主体逻辑不用动,只需要替换"生成音频"的那一个函数。
2. 适用场景与使用边界
这个工具的使用人群很清晰:
- 英语老师:把 Welcome Unit 词汇提前做成音频包,发给学生课前跟读;也可以用来生成听写材料,省去自己反复录音的时间。
- 学生:把单词音频导入手机播放器或背单词软件,利用碎片时间反复听,比每次查词典听发音更省事。
- 家长:在家帮孩子预习、复习,不需要逐词查发音,直接把音频放给孩子听。
- 教育工具开发者:把 TTS 能力封装成接口,给单词卡 App、听力小程序、课件生成工具调用。
需要说明的是,这个工具解决的是"朗读音频生成"这一个环节,它不会自动整理教材词汇。词汇表需要自己维护,或者从教材词汇表复制整理。教材内容用于个人学习、课堂教学材料制作没有问题,但如果是批量复制并重新发布教材词汇表,或者拿去做大规模商业分发,就要先确认版权边界。TTS 引擎同样有自己的使用条款,个人学习和小范围教学使用问题不大,大规模商用建议使用有明确商用授权的云 TTS 服务。
另外,这个工具只处理单词文本,不涉及人脸、声音克隆、用户隐私数据,风险点相对少;但如果后续扩展成"整句跟读""作文朗读"等功能,被朗读的文本如果有作者版权,也需要确认授权后再使用。
3. 环境准备与前置条件
3.1 硬件与系统要求
- 操作系统:Windows 10/11、macOS、主流 Linux 发行版都可以。
- 内存:日常办公配置即可,不需要独立显卡,也不需要 CUDA 环境。
- 磁盘空间:单个单词音频通常不大,整个 Welcome Unit 词汇全部生成也不会占用多少空间,具体以实际生成文件为准。
- 网络:edge-tts 方案需要联网访问微软的在线 TTS 服务;如果网络条件不允许,改用离线 TTS 方案。
3.2 Python 环境检查
建议使用 Python 3.9 及以上版本。先确认本机 Python 和 pip 可用:
python --version pip --version如果提示python不存在,Windows 用户可以检查是否安装了 Python 并勾选了"Add Python to PATH",或者尝试python3命令。
3.3 安装 TTS 依赖
pip install edge-tts安装完成后,可以用下面的命令列出可用的英文音色,确认依赖已经正常工作:
edge-tts --list-voices | grep "en-US"如果输出中包含en-US-JennyNeural、en-US-GuyNeural、en-US-AriaNeural这类音色 ID,说明 edge-tts 安装成功,并且能够正常访问语音服务。
3.4 离线备用方案
如果你的运行环境无法访问在线 TTS 服务,可以直接改用 pyttsx3。这个库调用 Windows SAPI、macOS NSSpeechSynthesizer 或 Linux eSpeak 做本地朗读,不需要联网。安装命令:
pip install pyttsx3快速验证:
import pyttsx3 engine = pyttsx3.init() engine.say("exchange") engine.runAndWait()这个方案的好处是离线可用,缺点是音色相对机械,长文本朗读时 CPU 占用会明显上升,具体效果需要自己听一下再决定。
4. 安装部署与启动方式
4.1 准备 Welcome Unit 词汇表
先建立一个词汇表文件。以人教社 2019 版教材为例,Welcome Unit 的词汇大致包括下面这些,具体以你手头教材的 Words and Expressions 为准:
# words.py WORD_LIST = [ ("exchange", "交换;交流"), ("lecture", "讲座;讲课;教训"), ("registration", "登记;注册;挂号"), ("sex", "性别"), ("female", "女(性)的;雌的"), ("male", "男(性)的;雄的"), ("nationality", "国籍;民族"), ("nation", "国家;民族"), ("design", "设计;设计方案"), ("campus", "校园;校区"), ("formal", "正式的;正规的"), ("anxious", "焦虑的;不安的"), ("annoyed", "恼怒的;生气的"), ("frightened", "惊吓的;害怕的"), ("senior", "级别(或地位)高的;较年长的"), ("outfit", "全套服装"), ("impressive", "令人钦佩的;给人深刻印象的"), ("awkward", "令人尴尬的;难对付的"), ("junior", "地位(或职位、级别)低下的;年资较浅的"), ("explore", "探索;勘探"), ("confidence", "信心;信任"), ]这里第二个字段是中文释义,目前只用于日志输出和后续归档,不合成进音频。如果你需要"英文单词 + 中文释义"一起朗读,后面的小节会讲处理方式。
4.2 批量生成脚本
新建generate_words.py,内容如下:
import asyncio from pathlib import Path import edge_tts VOICE = "en-US-JennyNeural" # 美音女声 RATE = "+0%" # 语速,可改为 -10%、+10% 等 OUTPUT_DIR = Path("welcome_unit_audio") WORD_LIST = [ ("exchange", "交换;交流"), ("lecture", "讲座;讲课;教训"), ("registration", "登记;注册;挂号"), ("sex", "性别"), ("female", "女(性)的;雌的"), ("male", "男(性)的;雄的"), ("nationality", "国籍;民族"), ("nation", "国家;民族"), ("design", "设计;设计方案"), ("campus", "校园;校区"), ("formal", "正式的;正规的"), ("anxious", "焦虑的;不安的"), ("annoyed", "恼怒的;生气的"), ("frightened", "惊吓的;害怕的"), ("senior", "级别(或地位)高的;较年长的"), ("outfit", "全套服装"), ("impressive", "令人钦佩的;给人深刻印象的"), ("awkward", "令人尴尬的;难对付的"), ("junior", "地位(或职位、级别)低下的;年资较浅的"), ("explore", "探索;勘探"), ("confidence", "信心;信任"), ] async def generate_word(word: str, meaning: str): """生成单个单词的朗读音频。""" audio_path = OUTPUT_DIR / f"{word}.mp3" communicate = edge_tts.Communicate(word, VOICE, rate=RATE) await communicate.save(str(audio_path)) print(f"[OK] {word} -> {audio_path}") async def main(): OUTPUT_DIR.mkdir(parents=True, exist_ok=True) for word, meaning in WORD_LIST: await generate_word(word, meaning) print(f"批量生成完成,共 {len(WORD_LIST)} 个音频,输出目录:{OUTPUT_DIR.resolve()}") if __name__ == "__main__": asyncio.run(main())这段代码做三件事:创建输出目录、遍历词汇表、逐个调用 edge-tts 生成 MP3 文件。如果你只需要生成某一个单词,可以把WORD_LIST临时改成只包含一个元素,也可以单独用命令行测试。
4.3 运行与输出
在项目目录下执行:
python generate_words.py正常运行时,终端会逐行打印生成的单词和文件路径:
[OK] exchange -> welcome_unit_audio/exchange.mp3 [OK] lecture -> welcome_unit_audio/lecture.mp3 ... 批量生成完成,共 21 个音频,输出目录:xxx/welcome_unit_audio检查输出目录,确认每个单词都有对应的 MP3 文件:
ls welcome_unit_audio/Windows 下用:
dir welcome_unit_audio5. 功能测试与效果验证
工具能跑起来只是一个开始,真正要确认的是"生成的音频能不能用"。建议按下面的顺序做验证。
5.1 单单词朗读测试
先用一个单词做最小验证,确认 TTS 服务连通性和音色效果:
edge-tts --voice en-US-JennyNeural --text "exchange" --write-media exchange.mp3然后用播放器打开exchange.mp3,判断标准有三个:能正常播放、发音清晰、发音内容确实是 "exchange"。如果这一步就失败,说明是 TTS 服务或网络问题,先解决这里再跑批量。
5.2 批量生成验证
跑完generate_words.py后,做两个快速检查。
第一,统计文件数量是否和词汇表一致:
ls welcome_unit_audio/ | wc -l第二,检查是否存在空文件:
find welcome_unit_audio -name "*.mp3" -size 0Windows PowerShell 下可以用:
Get-ChildItem welcome_unit_audio -Filter *.mp3 | Where-Object Length -eq 05.3 音色与语速对比
edge-tts