Folia 本地歌单一次讲透:保存队列、排序与 M3U8 导入导出完整流程
【免费下载链接】folia-major专注于绚丽的歌词动画效果的本地音乐/navidrome/第三方多平台在线音乐播放器项目地址: https://gitcode.com/GitHub_Trending/fo/folia-major
你从 Folia 导出的.m3u8丢回音乐根目录,别的播放器打开就能直接播——但有个前提:歌得全部来自同一个导入文件夹。这是 Folia 本地歌单里最容易被忽略的细节,也直接决定了你导出文件该往哪放。
Folia 本地歌单怎么建第一张:保存队列还是随手收藏
建第一张本地歌单最自然的方式,都长在"你现在正在听的"之上,主要有两条路径。
最直接的:听到这里,队列里已经攒下一串想留住的歌。打开底部播放区的队列面板,只要队列里全是本地歌曲,右上角就会露出保存为歌单按钮——在线歌曲没有磁盘路径,不属于本地歌单体系。点它、给歌单起个名,当前顺序原样固化成一张新歌单,按钮位置见 QueueTab.tsx。
另一条路径更懒:随听随存。某首歌听到心动就点一下播放区的心形按钮,它会直接落进内置的Liked Songs收藏歌单,收藏和取消收藏反复操作都没有副作用,底层 setLocalSongFavorite 是幂等操作。
也可以在本地音乐区选中若干首歌后走"新建歌单",输入名称即建单。殊途同归——最终被存下来的只是一串歌曲 id,这正是整套本地歌单轻量的前提。
Folia 歌单不是只读的:排序、移除、改名都即改即存
打开目标歌单卡片进入集合视图,切到编辑模式(命令面板里也有toggle-edit-mode命令),就能动歌序和移除歌曲。拖好顺序,reorderLocalPlaylistSongs 会立刻写回本地数据库,没有"应用"按钮这一步;移除歌曲同样即时生效。歌单本身的重命名和删除,也都是卡片级的操作。
关键词是即改即存:每个动作都算一次落库,下次打开 Folia,顺序和名字保持在你上次动它时的状态。删了歌单后悔?重新保存一次队列或把歌加回来就行,只要音乐文件没动,随时能还原。
有一处保护值得留意:Liked Songs 是带isFavorite标记的系统收藏歌单,deleteLocalPlaylist 对它的删除请求直接拒绝,前端也会默认禁掉删除入口——前后端双重保险,心形列表不会误删。
M3U8 的"出"与"入":导出文件放哪,旧歌单怎么进
先说"出":打开目标歌单卡片,在集合操作里选**"导出 M3U8"**(命令面板中也有同名命令),应用会自动下载一个以歌单命名的.m3u8文件。文件是 UTF-8 编码,中文歌名不乱码;每首歌附带一行#EXTINF时长说明和"艺术家 - 标题"信息。
真正讲究的是路径规则。serializeLocalPlaylistToM3u8 会先收集每首歌路径的第一段(也就是导入根目录名):恰好只有一个根,判定为共享根,歌曲写相对该根的路径;横跨多个根目录,则保留完整路径。⚠️ 所以你的歌全来自一个文件夹时,把.m3u8放进那个文件夹,别的播放器直接就能播;跨了多个文件夹,就把它放到各根目录的共同父目录里。
再说"入",匹配策略是宽容但不瞎猜。前提一步:先把歌单引用的音乐文件夹导入 Folia——导入动作只在当前曲库索引里做路径匹配,不会拉取音频文件,也不会替你申请新权限。点本地音乐首页的"导入歌单",选.m3u或.m3u8:歌单名优先取文件里的#PLAYLIST:注释行,没有就用文件名(去掉扩展名);完成后状态栏会报出成功导入的歌数和被跳过的路径数。
匹配分几层:先把路径统一成同一种比较形式(file://地址、Windows 盘符、反斜杠、URL 编码全部归一化),再按完整路径、去根相对路径、文件名做大小写不敏感的精确匹配,没命中才用路径后缀兜底。同名命中多个候选时不随便挑,计入"歧义"跳过——宁可少导几首,不导错一首。http://这类网络地址会被判为非本地直接排除,完整逻辑见 matchM3uPathsToLocalSongs。
Folia 本地歌单源码里的三个设计取舍
- 歌单只存 id,每次读取都"自动修车"。设计意图是让歌单始终是个轻量的指针容器:LocalPlaylist 类型里只有一个
songIds数组,不碰音乐本体。于是 getLocalPlaylists 每次读取时多做两件事——剔除指向已删除歌曲的失效引用,把"同一份文件重复导入"的副本归并到同一个正主 id。对你意味着:引用一致性不用你维护,脏数据在读取路径上悄悄修好。 - 去重贯穿所有入口。选歌添加、保存队列、文件导入,任何写歌单的路径都会让 id 列表过一遍
dedupeSongIds,同一首歌进不了同一张歌单两次。对你意味着:把同一批歌又导入一次,歌单不会变胖。 - 导入匹配"宁可少导,不可导错"。设计意图是把不确定摆到明面上:matchM3uPathsToLocalSongs 只在命中唯一候选时才落歌,命中多个同名文件就计为歧义跳过。对你意味着:导入时"跳过 N 条路径"不是故障,是刻意的诚实,补齐对应文件夹后重新导入即可。
你大概率会踩的三个坑
- 如果你删了文件夹或歌曲,担心歌单里出现点不开的死链:不会。失效引用在读取时就被自动清掉,歌单里永远只剩还能播的歌。
- 如果你想把导出的 M3U8 拿到另一台设备播:前提是那台机器上有同样的音乐文件,且目录结构和文件里的相对路径一致。按"共享根目录"规则放置就能直接播,否则只能手动改路径。
- 如果你手头是 foobar2000 的二进制
.fpl歌单:不支持。Folia 只解析.m3u/.m3u8文本格式,二进制文件它读不了。
Folia 的本地歌单体系,说到底都绕着一个原则打转——引用,而不是文件。建单、排序、M3U8 双向互通,全是同一套指针玩法。想再深挖.foliaignore排除规则这类细节,可以读一读本地音乐库管理文档。
【免费下载链接】folia-major专注于绚丽的歌词动画效果的本地音乐/navidrome/第三方多平台在线音乐播放器项目地址: https://gitcode.com/GitHub_Trending/fo/folia-major
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考