最近学校布置了任务,要求我们每个老师每周在专门的读书群中发 3 段不少于 8 分钟的个人读书音频,学校教务处会每周进行统计并量化到学期评优中。学校的本意是希望我们每个人可以养成读书的习惯,但最终评价的标准却简化为了这样一种形式。就我个人来说,平日里读书我习惯拿笔默读,不时进行写写划划,而读出声的方式并不符合我的习惯。
一开始我尝试接受学校的任务,把录读书音频的过程也作为我个人读书的一部分,但尝试几次后还是无法习惯。最后我还是决定把录音频当作一件每周要应付完成的任务。
教学生学 Python 或者 C++ 的时候,我常会和学生说,人都是喜欢偷懒的,程序员也是如此——事情不想自己做就编程让电脑来完成、要重复很多次所以有了循环、某个功能太常用就把它写成了函数。当我把录读书音频这件事作为一个要应付的任务之后,我开始思考是否也有能偷懒的方法。我搜索到了 Fish Audio 这个 AI 语音合成平台,然后在 ChatGPT 的辅助下经历了三次调整,最终我实现了一个比较自动化的偷懒方法。
利用 Fish Audio 上的纳西妲语音模型生成的一段演示
版本 1: 纯手动
Fish Audio 注册后上传一段二三十秒的音频就可以创建相应的声音模型,我直接用了之前录制的一段读书音频,生成的模型效果非常不错。
Fish Audio 对于免费用户每天有 50 次、每次 500 字节(约 160 个汉字)的配额来进行文字转音频,每次生成的音频大约 35 秒。以我要生成 8 分钟读书音频来说,需要重复 16 次“复制文本-粘贴-生成音频-下载音频”的过程,最终还需要合并音频的操作,时间成本上几乎和我自己读并录制没有什么区别。于是我选择了订阅会员,这样每天有 1000 次、每次 5000 字节的配额,一次生成的音频就在 5 分钟左右,这样一段 8 分钟的音频我只需要进行 2 次音频生成操作再进行音频合并就可以完成。而对每周任务来说,经过 3 次就可以完成任务,最终的流程可以用下图来表示。
版本 2: 半自动
在 Fish Audio 网站生成的音频文件,下载后的默认命名为一串字母数字的编码,为了避免顺序错乱,每次下载后我需要按顺序重命名为序号。这一步我想到可以使用 Hazel 进行文件的自动重命名——检测到下载目录有新的 .mp3
文件时将其自动命名为序号。
音频合并这一个操作,我则直接询问 ChatGPT 如何通过代码自动合并相邻两个 .mp3
文件并存储到指定目录,再结合 Hazel 实现合并后音频文件的自动重命名。在这一步 ChatGPT 给出了利用 pydub
和 ffmpeg
合并音频的代码,帮我把合并音频这个过程自动化了。
在这个版本,我可以机械地复制文本到 Fish Audio 网站生成音频下载,当积累多个已下载音频文件后,运行 Python 代码就可以一次产出多个读书音频。
版本 3: 全自动
在上一个版本,整个流程已经极大地简化,但还并不是全自动化的过程,也还存在着一些可以进一步改进的地方:
- 从书中复制文字后,有时我会忘记接下来要复制的是哪一段
- 5000 个字节约 1600 个汉字,在复制的时候很难精确控制复制的文字量
- 每一次复制文本到 Fish Audio 网站上生成音频时需要等待一定的时间
- 每次下载音频都需要点击两次鼠标才能完成
看到网站上的 API 页面,我开始思考如何用 API 进一步让整个音频生成流程自动化。如果是以前,以我半吊子的 Python 基础,对于这种涉及 API 的问题总会无从下手,但现在我可以直接把问题抛给 ChatGPT。
第一次提问我只用文字描述我期望实现的效果,但生成的 Python 代码并没有可以指定语音模型。第二次提问我则把 API 文档中的示范代码作为示例,这次成功生成了可行代码。
到了这一步,整个流程已经如我最开始所期望的,我只需要准备好书的文本文档,运行代码就可以自动地批量生成读书音频。但最终产出的约 80 个音频中,有五六个出现了时长过短或过长的情况,可以进一步在生成音频后检测音频长度来避免。此外,当一次运行中断后,我要修改代码中的 start_index
来指定下次生成音频的起始序号。实际上可以让程序每次生成音频后记录当前序号到一个 progress.txt
中存档当前序号。虽然还有进一步可优化的地方,但已生成的上百个读书音频,足够我接下来半年时间的使用,也就没有再继续去修改。
一些感想
回到学校用发指定数量和时长的读书音频来促进我们老师读书这件事上——如何评价一个人是否已形成了良好的读书习惯,这个问题其实和教育中很多问题类似。要评价的东西很难用一个数字去判定,但用数字判定却是最“容易”和“省事”的,于是很多时候我们侧重于“评价”而忽略了真正所带来的效果。
以我任教的信息科技这门学科来说,我希望学生能在课上开拓眼界、培养独立思考和解决问题的能力、形成编程的意识等等。但最终面临中考这件事,我还是必须要让学生去把打字、WPS 操作、IE 浏览器操作(是的,你没看错)这些要考的东西学会。 如何权衡评价和学生真正有所学习这两件事,在接下来依然会是我所需要思考的问题。
作为一名义务教育阶段的信息科技老师,我一直喜欢在工作中尝试各种数字工具。「教师数字文具盒」系列,是我对我使用的工具或方法所做的一系列介绍文章。具体包含:
- 教师数字文具盒 1:课表管理——iStudiez Pro + 日历
- 教师数字文具盒 2:课程进度管理——Notion
- 教师数字文具盒 番外:个人读书音频生成——Python+Fish Audio(即本文)