本帖最后由 云栈大前端 于 2025-12-31 23:36 编辑
很多人用 Spotify 听歌很方便,但一旦想把喜欢的歌“长期保存”到本地媒体库,就会遇到两个小麻烦:一是格式和音源问题,二是整理成本太高——封面、曲序、文件名规则,手动弄一遍很费时间。
SpotiFLAC 是一个开源桌面项目,思路很直接:用桌面 App 把这套流程串起来,让你更省事地把音频文件落到本地,并尽量把元数据整理到位。
说明:本文基于我已读取到的仓库 README.md / main.go / wails.json / go.mod 和目录清单整理;没有展开到的源码细节不写“猜测结论”。
它主要做什么(按项目暴露的能力说话)
从 app.go 的接口模型能看到,它围绕三步走:
- 接收 Spotify 输入:以 URL 为入口,并支持批处理、节流、超时参数(更像“可控的批量任务”,而不是点一下就硬跑)。
- 聚合可用平台链接:项目里用到 song.link,把 Spotify Track 映射出一组平台链接,方便后续选择与处理。
- 下载与落盘规整:下载请求字段很完整,覆盖输出目录、音频格式、文件名格式、封面与歌词嵌入、碟号/曲序等信息,目标就是更贴近本地媒体库的使用习惯。
如果你平时会在本地用播放器/媒体库管理工具,这类“把文件整理好再给你”的方向会更实用。
技术栈怎么选的(全栈视角)
桌面框架:Wails v2
main.go 里是标准 Wails v2 启动方式。
- 前端构建产物
frontend/dist 用 //go:embed 打进二进制里,发布的时候不需要用户再配一堆静态文件。
- 窗口参数里还能看到无边框(Frameless)、拖拽(DragAndDrop)等桌面交互配置。
- 通过 Wails 的 Bind 机制,前端可以直接调用 Go 的方法。
前端:pnpm + TypeScript
wails.json 写得很明确:pnpm install、pnpm run build,开发用 pnpm run dev。
frontend/ 里也能看到 ESLint 配置与 components.json(组件体系的工程化配置之一)。
后端:Go(音频元数据相关依赖明确)
从 go.mod 能确认它用到了音频元数据相关库:
- FLAC 相关:
go-flac、mewkiz/flac
- ID3 相关:
bogem/id3v2
这类依赖的意义很明确:它不是只把文件下载下来就结束,而是有条件把“可用的元数据写入能力”也做到工具里。
想系统补齐工程化与后端能力的话,可以顺手看下云栈社区整理的:前端框架 / 工程化实践 和 Go。
目录结构怎么读(建议从这两处入手)
这个仓库的结构挺清晰,属于一眼能懂的那种:
main.go:桌面入口、窗口配置、资源 embed、绑定 API
app.go:前端能调用的“应用层 API”(参数校验、调用 backend、返回结果)
backend/:按能力拆分的 Go 模块(能看到 analysis.go / cover.go / ffmpeg.go / amazon.go / config.go ...)
frontend/:UI 与构建相关内容
如果你是想学 Wails 的工程组织方式,建议先看 main.go 怎么把前端 dist 嵌进去,再看 app.go 怎么把业务方法暴露给前端调用。
项目地址
https://github.com/afkarxyz/SpotiFLAC
官方文档 / 网站
相关教程
- TypeScript:
https://yunpan.plus/f/13
- Golang:
https://yunpan.plus/f/27
关注我
我会继续做前端工程、跨平台、全栈方向的开源项目拆解,尽量写得“能直接拿去参考”。
关注《云栈大前端》,也欢迎来云栈社区一起交流和补充案例。
标签: #SpotiFLAC #Github #Wails #Go #跨平台 #桌面应用
来自圈子: 云栈大前端 |