“我懒得挑歌单,于是教我的笔记本自己作曲。”这是开发者 hendrahend 为 Hacktoberfest 开源 AI 挑战赛第三周提交的作品,主题是“慢而稳”。10 月 20 日是国际树懒日,他干脆照着树懒的性子做了个工具:给那些想听点音乐放松、却懒得浏览、懒得筛选、也懒得再订一个订阅服务的人。
用法很直接。你输入一句懒散的氛围描述,比如“rainy sunday piano”“slow ambient for sleep”“fireplace while it snows”,Sloth Sounds 就把音乐写出来。一条命令得到一个无缝循环,睡前敲一条命令,到早上就是一整段多分钟的助眠组曲。
所有计算都跑在他自己的笔记本上,只用开放权重模型,数据不出机器。
它到底做了什么
Sloth Sounds 是一个本地优先的环境音乐生成器。流程是:你输入的懒散词句先经过“氛围扩展器”,再交给 MusicGen(开放权重模型),最后输出无缝循环的 WAV 和 MP3。
- slothsounds gen "rainy sunday piano":在他的 GPU 上约半分钟生成一个无爆音的循环。他用的是 4 GB 显存的 RTX 2050,也能跑在 CPU 上,只是更慢。
- slothsounds night 10 "slow ambient for sleep":编排 10 段一套,每段都是同一氛围的变奏,让整首曲子有演进而不是原地重复,再交叉淡化成一条连续文件,附带时间码和随机种子的运行清单。
- slothsounds doctor:告诉你这台机器有什么、缺什么。
技术栈全部开放。MusicGen 的提示词需要具体的音频描述,而人输入的是感受,中间这层翻译交给 Gemma 3(4B,Q4,通过 Ollama 运行)。如果 Ollama 没在跑,关键词扩展器会接手,工具依然能完全离线工作,doctor 命令会报告当前走的是哪条路径。
同一句话,两种写法
他做了一组对照:同样的氛围、同样的种子(777)、同样的模型、同样的 GPU,唯一变量是谁来写提示词。启发式路径只是把现成的描述词往你的话上贴;Gemma 会做决定——挑乐器、定速度、塑造起伏。种子相同,意味着你听到的任何差别都只来自提示词本身。
演示部分,三个循环和一套夜间组曲都是他那晚在 RTX 2050 上生成的,以 WAV 形式提交在仓库里,不运行任何东西也能直接听:rainy-sunday-piano-42.wav、fireplace-while-it-snows-101.wav、midnight-train-through-the-countryside-202.wav 各 30 秒,full-set.wav 是 4.7 分钟的夜间组曲(10 段,交叉淡化)。公开演示页部署在 Render 上,生成仍留在本地,网站只是橱窗。
他贴出了自己机器上 doctor 的原始输出:Python 3.12.10、numpy 2.5.4、torch 2.5.1+cu121(NVIDIA GeForce RTX 2050)、audiocraft 1.3.0 均为 OK;ffmpeg 未找到(可选,仅用于 MP3 导出);Ollama 可达,模型为 gemma3:4b;backboard 的密钥未设置(可选,用于品味记忆)。
为什么开放这件事是产品本身
他给了一个对照:如果做成闭源 API 版本,这个项目就只是个包装——把你的氛围发到别人的 GPU 上,按次付费,祈祷这项服务明年还在,顺便把凌晨两点听的一切日志交给一家公司。在他看来那不是工具,是多了几步的订阅。
在本地跑开放权重模型意味着:
- 离线可用。飞机上、小屋里,音乐在你所在的地方生成。
- 运行零成本。第一千个循环和第一个循环花的钱一样多:零。
- 模型可替换。今天在 4 GB 笔记本 GPU 上跑 musicgen-small,明天在台式机上跑 musicgen-medium,后天换成微调过的专用模型,流水线不用改。
- 什么都不记录。凌晨两点的收听习惯只留在你和你的笔记本之间。
他的说法是,这些开放组件不是装饰,而是整个产品;把它们抽掉,项目就不存在了。
省下的不是时间,是“做决定”
挑战赛问的是这个项目到底省了多少时间或精力。他给了自己几个晚上的实测账:
- 旧仪式:打开流媒体应用,滚动、跳过、反复犹豫,最后落在已经听过的东西上。每晚五到十分钟的决策,永远如此。
- 新仪式:一条命令,约十秒打字,半分钟后音乐就存在了。
- 夜间模式:决定发生在你累之前。10 段、4.7 分钟不断演进的音乐,约五分半钟的实际耗时编完。你按下开始,组曲就在那里。
在 RTX 2050 上实测:每个 30 秒片段大约需要 32 秒生成,完整的 10 段组曲(交叉淡化后 282 秒音频)约五分半钟完成。模型热起来后,Gemma 的氛围扩展只多花几秒。
他不假装这能替谁省下几个小时。它真正去掉的是“决定”这件事——滚动、跳过、晚上十一点站在厨房里跟自己争论该放什么。树懒不优化走路,树懒直接不走。
他报名了两个类别,都是集成最扎实的地方:最佳 Gemma 应用——Gemma 3 通过 Ollama 把懒散氛围扩展成面向 MusicGen 优化的提示词,带离线关键词兜底,仓库里还用它来教微调数据集;最佳 Render 应用——公开演示站从仓库里的 render.yaml 蓝图部署,直接提供实际生成的音频。Tinker 和 Backboard 的集成也接进了仓库(一份 Gemma 蒸馏的训练数据集加 LoRA SFT 脚本;带本地兜底的品味记忆),但不是这次挑战的主打。
仓库地址是 github.com/hendrahend/slothsounds,MIT 协议,21 个测试,doctor 做安装检查,还有一个 Windows 兼容脚本——因为 audiocraft 的 xformers 轮子在 Windows 上不存在,这种细节只有真跑过才会遇到。项目在第三周窗口(10 月 19 日至 25 日)内完成。
热门跟贴