Building
我以前丢过录音。应用崩溃、电池没电、系统卡死——啪,没了。
那种“我刚花 10 分钟讲清一件重要的事,结果全没了”的下坠感,非常难受。
所以在开始做 Reso 时,我给自己立了一个约束:这件事绝不能再发生。
传统做法(以及它为什么会失败)
大多数录音应用的流程是:
1. 开始录音 -> 音频先缓存在内存
2. 停止录音 -> 再写文件到磁盘
3. 返回文件路径
问题:如果在步骤 1 和 2 之间崩溃,录音会永久丢失。
macOS 应用会崩。电源线会被拔。Kernel panic 也会发生(虽然不常见)。
解决方案:增量写盘
如果我们在录音过程中就持续写盘,而不是结束后一次性写呢?
Shadow Recording 的做法是:
1. 录音开始 -> 立刻创建带时间戳的 M4A 文件
2. 每当音频 chunk 到达,就追加到磁盘文件
3. 即使应用崩溃,文件也已经存在
结果:哪怕 Reso 在你说到一半时炸掉,录音仍能保住。
实现细节
听起来简单,但 M4A 格式并不简单。不能把原始音频字节直接拼接,否则文件会损坏。
我需要:
1. 使用支持增量写入的流式编码器
2. 确保即使中断写入,M4A 容器也保持“可读有效”
3. 处理文件清理(旧 shadow 录音不能无限堆积)
我们把 shadow 录音保留 7 天,之后自动删除。既提供安全兜底,也避免存储无限增长。
我学到的
最好的功能,往往是使用者注意不到的功能。
Shadow Recording 已经从崩溃里救回了很多录音。但使用者不会说“这个 shadow recording 真棒”,他们只会说“Reso 很可靠”。
这正是我想要的结果。
可靠性不花哨,演示时也不抢眼,但它是信任的地基。
当你知道自己的想法是安全的,你会更敢去记录半成品想法、实验和错误。
那时工具就不再只是工具,而会成为你思考过程的一部分。
这不是营销,是我们自己踩过的坑。