同一句话为什么不该重复生成 MP3:拆分语音资产与播放任务
本地语音平台最初每次发送相同文字都会重新调用 TTS,并生成一份重复 MP3。本文从一次真实重复文件问题出发,解释为什么“语音资产”和“播放任务”必须分开,以及缓存键、历史试听、再次发送和旧数据库迁移应该怎样配合。
继续看这次记录从零开始的造物记录

当前章节
网站会跟着真实进度生长。这里始终保留最近一次公开的尝试、问题或阶段结果。
本地语音平台最初每次发送相同文字都会重新调用 TTS,并生成一份重复 MP3。本文从一次真实重复文件问题出发,解释为什么“语音资产”和“播放任务”必须分开,以及缓存键、历史试听、再次发送和旧数据库迁移应该怎样配合。
继续看这次记录最近开工
从一个想法开始,记录它怎样经过试错、修改和装配,慢慢变成真实物品。

制作一套由按钮触发的 AI 语音对话原型:录下使用者的声音并上传服务器,经大语言模型处理后返回语音内容,再由设备通过音箱播放。
过程比答案更长
供电、结构、材料和表达方式都可能让一个想法停下来。把问题写清楚,下一次才不会重新踩一遍。
本地语音平台最初每次发送相同文字都会重新调用 TTS,并生成一份重复 MP3。本文从一次真实重复文件问题出发,解释为什么“语音资产”和“播放任务”必须分开,以及缓存键、历史试听、再次发送和旧数据库迁移应该怎样配合。
阅读文章我把 ESP32-S3 的语音播放从“把固定音频烧进代码”改成了“在网页输入文字后动态播放”。本文记录网页、本地 TTS、任务队列、ESP32、MAX98357A 和喇叭之间怎样连成一条实际可听的链路,以及当前还没有完成的语音输入边界。
阅读文章记录一次已经完成的 ESP32-S3 语音播放实践:先解决喇叭插头无法接入 MAX98357A 的问题,再按 5 根线完成 I²S 接线,经过短时供电检查、三声测试音和五条网页语音验证,确认声音输出链路可用。
阅读文章从头看
这里会持续记录从第一次尝试,到失败、返工和真正做成的过程。你可以从最早的公开记录开始看。