Skip to content

Releases: rosesmall2010/xmmusic

v1.2.4

Choose a tag to compare

@github-actions github-actions released this 18 Sep 08:04
Immutable release. Only release title and notes can be modified.

新增

  • 清理失效记录:本地音乐页可一键检查磁盘文件是否仍存在;删除丢失曲目时显式同步清理歌单项、收藏、最近播放、播放队列、发现列表与本地列表,并重算受影响歌单统计;同时修剪渲染端播放队列;当前曲被清时停播(含空队列仍在播);扫描根不可达或无权限则跳过不删;大批量 IN 分批;清理中互斥禁用匹配/扫描/右键匹配;刷新无封面计数

变更

  • 封面匹配搜索策略:批量/自动先搜标签歌名 ≥50,不足再搜标签歌手 ≥50;仍未命中则用文件名推测歌名/歌手(与已搜相同则跳过)再试,仍无 ≥50 则放弃;手动分别搜标签歌名与歌手,并叠加文件名推测差异词,合并去重、不设相似度下限,按相似度降序供挑选
  • 下线未落地能力:Excel 导出、文件监控、播放统计 API、歌单 JSON 导入导出、相似歌/重复组(含 exceljs/chokidar 等依赖);保留 EditTagModal / MetadataEditDialog 与全部播放特效、Howler 兜底

修复

  • 代码审查高优先级问题(详见 docs/1.2.4/代码审查-缺陷与性能问题.md H1-H7):修复分页/搜索接口逐行重查 music_dir 的 N+1 查询;拼音/声母搜索改前缀匹配以命中索引;曲库扫描写库改为按批次事务提交;修复 Windows UNC 网络路径被规范化逻辑截断双斜杠导致找不到文件;修复单目录扫描的暂停/取消未生效;批量元数据/ID3 修复循环增加事件循环让出点,避免长时间阻塞主进程 IPC;修复本地音乐页扫描状态监听器重复注册导致进度条状态被错误覆盖
  • 匹配拉取遮罩:挂到 #app 以继承主题变量;卡片用 --bg-elevated / --text-primary 等成对变量,修复浅色下白底白字、Teleport 到 body 时主题对不上
  • 主题挂载:去掉 App.vue 内重复的 #app;applyTheme 同步给 #app 与 <html>;样式选择器改为 html.light/dark, #app.light/dark;拉取遮罩补成对 fallback,避免主题类缺失时对比度崩溃
  • 封面匹配审核修:清死代码;歌名搜失败仍可降级歌手;低相似跳过回传近失分;S1.2/S1.3 文案与策略对齐
  • 手动封面候选:各轮搜索失败互不影响,保留已合并结果;全失败返回空列表仍可打开本地选图
  • 全屏匹配封面应用完成后未同步 manualMatchUiBusy,导致回到本地音乐批量按钮一直禁用;离开匹配页时强制清 busy
  • 手动匹配 busy 改为 generation 持有:finally/卸载只释放自己的 claim,避免误清另一页的 busy
  • 播放切歌:用世代号覆盖加载,避免 isPlaybackInProgress 静默丢请求;Howler 兜底补超时/onplayerror;扩展名空值兜底
  • 批量加入歌单:offBatchAddProgress 与 on 的 handler 对齐,修复监听泄漏
  • clearMediaFiles 清歌词时误用封面目录路径
  • 旧 updateMusic/updateMusicByPath 改为委托 all_music;删文件走 deleteAllMusic 并校验扫描目录
  • local-file 协议路径白名单;read-file/write-file 限制在 userData;扫描目录 ORDER BY 白名单

v1.2.3

Choose a tag to compare

@github-actions github-actions released this 16 Sep 11:00
Immutable release. Only release title and notes can be modified.

新增

  • 封面匹配服务(S1.1):主进程在线匹配专辑封面(网易云搜索同源 API;解析 album.picUrl / al.picUrl,缺失时经 /song/detail 补图);自动/批量匹配相似度 ≥50;手动候选列表不设相似度下限(有封面 URL 即展示);下载原图不缩放但拒绝超时/非图片/超过 15MB;缓存写入 userData/covers/{hash}_cover_{timestamp}.*;有效封面判定为路径非空且文件存在;MP3 先写 ID3 APIC 成功再更新数据库,失败不改库;非 MP3 仅更新库并标记 fileNotUpdated;IPC:match-cover / list-cover-candidates / apply-cover-candidate,成功后推送 cover-matched 与列表刷新。批量 matchBatch 已预留供后续 Story。
  • 单曲匹配封面 UI(S1.2):列表右键「匹配/重新匹配封面」与全屏播放均弹出 CoverMatchSelectModal 候选(不设相似度下限,缩略图预览;可另选本地图片;由用户点选或取消),选中后 apply-cover-candidate / apply-local-cover;成功刷新列表与播放栏封面,非 MP3 提示仅更新应用内封面。
  • 批量匹配封面(S1.3):本地音乐工具栏「批量匹配封面」;仅处理无有效封面歌曲;自动相似度 ≥50;进度条可取消、离开页面再回仍可见(coverMatch store);汇总区分写入文件 / 仅更新库;与批量歌词互斥。
  • 拼音/声母搜索(S2.1):all_music 预计算 search_pinyin / search_initials 列(方案 A)+ 存量回填;searchMusic FTS 分流(纯字母走拼音旁路,汉字走 music_fts),结果合并去重;修复 FTS 表名 music_fts;含特殊字符 query 转义防抛错。
  • 顶栏搜索接入(S2.2):顶栏 placeholder 提示支持拼音/声母;SearchView / 搜索建议自动受益。
  • 应用内快捷键(S3.1):主窗 + 迷你 keydown 监听(不注册 globalShortcut);默认 Space 播停、Ctrl/Cmd+方向键切歌、Shift+方向键音量、Shift+F 收藏;输入框聚焦时 Space/字母不触发。
  • 快捷键设置(S3.2):设置页「应用内快捷键」可录制/清除/恢复默认;冲突提示;保存后热更新;隐藏 toggle-window 死键。

修复

  • 快捷键审核修复:兼容历史 Media* 旧配置自动迁移到应用内默认键;设置页录键期间暂停应用层快捷键触发,避免录制时误播停;toggle-window 从注册动作集合移除
  • 搜索审核修复:拼音列回填改为分批处理并补索引;搜索建议可返回歌名/歌手/专辑命中项,不再固定只返歌名
  • 封面匹配审核修复:列表右键经 IPC 判定有效封面;批量枚举阶段取消不再被 matchBatch 重置吞掉;无缺失封面时批量按钮禁用+tooltip;批量进行中无 progress 仍显示进度条与取消;全屏应用封面成功后切歌仍刷新元数据;无候选时清理弹窗状态
  • 封面匹配:详情补图某一镜像无 pic 时继续尝试其余 SEARCH_API,不再过早放弃
  • 封面匹配:下载后一律魔数校验;WebP 经 nativeImage 转为 JPEG 再落盘/写 ID3,避免 MIME 标成 jpeg 的错误;有效封面改为 accessSync 可读判定;清理旧缓存时规范化路径以兼容 Windows 盘符大小写;apply-cover-candidate 对已有有效封面需显式 force
  • 封面匹配:搜歌某一镜像空结果时换下一个镜像;候选列表过滤无封面 URL 的条目,避免裂图;全部镜像空结果返回空列表而非误报「API 全部失败」
  • 封面匹配审核修复(二轮):批量枚举与「无封面计数」过滤已删除文件(is_exists = 1),避免把失效文件算作失败目标;替换旧封面改为先写库再删旧图,DB 失败时旧图仍保留、库不指向丢失路径;取消标志生命周期收敛到 IPC 入口(批量结束不再无条件复位,单曲/候选应用入口先复位),消除批量取消后单曲匹配被残留标志误中止的尾部竞态;下载封面支持取消中断(AbortController + 手动超时定时器,cancel() 立即中止网络请求);缓存文件名用 randomUUID 避免并发同毫秒撞名;搜歌全部镜像无结果补日志便于排查;候选缩略图放行 https 图源(CSP img-src)
  • 音效设置面板增加「确定」按钮,避免与「重置」相邻导致误以为关闭即保存、实际点到重置
  • 全部对话框/弹窗统一取消「点击遮罩/外部区域即关闭」:目录管理、删除确认、添加/编辑扫描目录、音效设置、歌曲详情、设置歌单封面、在线匹配歌词选择、新建/编辑歌单、加入歌单等,均需通过关闭按钮或取消/确定按钮才会关闭,避免误触丢失未保存内容
  • LRC 歌词时间戳解析支持小数点后 1 位(十分之一秒,如 [02:34.0]):此前正则要求 2~3 位,遇到 1 位小数的行会整行解析失败被丢弃,导致该句歌词消失、播放时停留在上一句不变,看起来像两行显示成一行
  • 注释审核补全:封面 store 状态同步、IPC 歌词/封面互斥、批量枚举两阶段与 cancel 保留、搜索合并策略、快捷键 Media* 迁移与录制流程等关键路径补充中文注释
  • 拼音回填:迁移启动时检测空列记录即续跑回填,避免首次升级中断后重启不再补全
  • 批量封面匹配:结束后逐条推送 cover-matched,App 订阅并同步播放栏/队列当前曲封面
  • 全屏手动匹配封面:取消候选 ≥35 相似度门槛,搜索结果中有封面 URL 的全部列出;无论几条都弹窗预览,由用户选择或取消(不再对唯一候选自动写入)
  • 全屏封面选择弹窗支持「选择本地图片」:复制到 covers 缓存后按 MP3/非 MP3 规则写入;无在线结果时仍可打开弹窗仅选本地图;BMP 等魔数未识别格式经 nativeImage 转 JPEG 后写入,与选图对话框可选格式对齐
  • 列表右键「匹配/重新匹配歌词、封面」改为弹出候选列表(歌词可预览、封面可预览/选本地图),不再因相似度过低直接跳过;歌词手动候选亦取消 ≥35 门槛;全屏匹配歌词无论几条都弹窗挑选
  • 右键匹配歌词:打开弹窗前若已有歌词(含同目录 sidecar)先确认替换;无在线候选时尝试关联本地 .lrc
  • 批量/自动匹配封面与歌词相似度门槛由 ≥75 调整为 ≥50
  • 右键/全屏匹配歌词与封面:拉取候选期间显示可取消的加载遮罩与曲名;confirm/alert 前收起遮罩;重新匹配确认前互斥占位;候选搜索 IPC 持锁;无在线歌词候选仅 link-local-lyrics 关联同目录 .lrc(不调 matchOne);手动匹配期间禁用批量按钮;finally 清占位绑定 token;批量取消后仍计入已成功写入的任务;进度条仅在总数 ≥3 时显示「并发 3 路」

v1.2.2

Choose a tag to compare

@github-actions github-actions released this 28 Aug 06:58

新增

  • 全屏播放页歌词面板新增「歌词偏移」手动校准:在歌词区右键弹出菜单,可前进/后退 0.5/1/2 秒微调并「重置」;正值歌词提前、负值延后,实时生效;偏移按每首歌独立持久化(all_music.lyrics_offset 列),主进程加载歌词时烘入行时间戳,迷你 / 桌面歌词窗口一并生效;菜单同时提供「在线匹配歌词」入口,无歌词时其余校准项禁用
  • 播放栏音量按钮前增加「定位当前」:通过数据库直接查下标,跳转本地音乐页并 instant 居中显示正在播放的歌曲(不再逐页扫描列表)
  • 全屏播放页队列支持右键菜单(播放 / 收藏 / 加歌单 / 编辑标签 / 打开目录 / 详情 / 移出队列,不含批量操作)
  • 右键菜单新增「新标签信息」:三栏对比数据库 / 当前ID3 / 编辑后的歌手、歌名、专辑、年份、流派,支持逐字段或整包 GB2312/GBK 转码、复制ID3、复制数据库,另有对调歌手歌名、按文件名推测(写入编辑后列)、重置;保存时 MP3 写回文件标签并同步数据库,非 MP3 仅同步数据库
  • 在线匹配歌词选择弹窗新增歌词预览:点选某条候选即在下方文本框显示该结果的歌词全文(按 songId 缓存,避免重复请求;纯音乐/空歌词/加载失败均有对应提示)
  • 歌词区右键菜单新增「显示/隐藏歌词时间」:开启后每句歌词前显示精确到 0.1 秒的时间戳(随偏移校准实时变化),便于直观核对调整效果

变更

  • 歌曲列表与全屏播放队列的右键菜单「编辑标签」统一改为打开「新标签信息」三栏对比编辑弹窗(旧的单栏编辑标签弹窗组件保留,仅不再从右键菜单入口触达);「新标签信息」弹窗为 MP3 文件补充「仅同步数据库」按钮(不改文件 ID3,只写数据库,与保存并列),补齐旧弹窗原有的能力

修复

  • 编辑标签对话框不再因点击遮罩/外部区域而关闭,需通过「取消」或保存后关闭,避免误触丢失未保存内容
  • 「定位当前」等待列表容器布局完成后再滚动,避免从其他页跳转时 clientHeight 为 0 导致滚到顶部;定位全程锁定按钮,防止重复点击叠载
  • 「定位当前」切歌时预查是否在本地库:不在库则按钮禁用,悬停提示原因,不再点一下才弹窗;切歌立刻清空缓存避免沿用上一首状态;扫描/清库通过 music-list-refresh 刷新预查;点击使用缓存下标不再二次查询
  • 全屏队列右键菜单:点封面/控件等外部区域或按 Esc 可关闭;收藏状态查询防竞态;移出队列按 music.id 查找避免下标过期

v1.2.1

Choose a tag to compare

@github-actions github-actions released this 05 Aug 08:09

新增

  • 全屏播放新增 CD、实体磁带封面特效(与频谱 / 火焰 / 闪电 / 经典唱片一并循环切换并持久化)
  • 迷你模式封面可在「无特效 / 唱片 / CD / 磁带」间切换;与全屏特效双向同步(频谱/火焰/闪电 ↔ 无特效;唱盘类同名互传)

变更

  • 重做「磁带」特效:浅灰横纹壳体、四角螺丝、顶部磁头舱开口朝上、双卷轴与走带窗;贴纸区用专辑封面铺满;播放时卷轴旋转
  • 全屏顶栏「特效开关」在唱片/CD/磁带下改为禁用占位(不再隐藏),避免相邻按钮跳动;tip 说明「当前特效无需开关」
  • CD / 磁带不接管频谱 Web Audio;仅全屏播放页的频谱类特效才为可视化挂图

修复

  • 去掉默认封面圆形外沿半透明软边色晕;全屏封面/磁带壳体去掉易渗色的外投影
  • 离开全屏或进入迷你且未开音效时,释放仅为频谱挂上的 Web Audio,与普通模式原生直出对齐
  • 迷你补齐与 PlayerBar 相同的音效保活:音效开启且播放中确保挂接滤波链,全屏/迷你/普通听感一致
  • 迷你唱片隐藏唱臂;迷你特效封面补齐加载失败回退;CD 去掉 soft-light 以免封面发灰

v1.2.0

Choose a tag to compare

@github-actions github-actions released this 04 Aug 09:14

新增

  • 无文字图标按钮补充悬停 tips(原生 title):顶栏清除搜索/窗口控件、迷你播放器切歌、各弹窗关闭与队列移除等;全屏顶栏已有自定义 tooltip,不再叠加原生 title
  • 迷你播放模式有歌词时,歌名下方显示当前一句歌词(随进度切换;无歌词时不显示该行)
  • 迷你播放模式右上角增加深色/浅色主题切换按钮

修复

  • 修复全屏顶栏同时出现原生 title 与自定义 .btn-tooltip 双重提示叠加
  • 修复智能推荐页每次加载「最近添加」都把无意义的「高级搜索」写入搜索历史,导致下拉历史重复错乱;仅真实检索条件才记历史,并按关键词去重
  • 修复智能推荐页「随机播放」卡片无点击逻辑:现可打乱全部本地音乐并进入随机模式开始播放
  • 修复 Windows 托盘无图标:改用 build/icon-*.png 并按平台缩放;Windows 不再误用 macOS 模板图(setTemplateImage)
  • 修复托盘图标不是当前 App 图:优先 appicon2.png/icon.png,并重新生成各尺寸;macOS 关闭模板灰图,显示彩色图标
  • 修复 macOS 托盘图标方角:新增 tray-icon-mac.png(透明圆角),托盘优先使用该图标
  • 调整 tips:上一首/播放/下一首不再显示;播放模式/队列/搜歌词/音效与顶栏操作保留 tip;悬停约 1s 显示、移开约 0.15s 消失
  • 收藏按钮补充悬停 tip(未收藏「添加到收藏」/已收藏「从收藏移除」);统一 tip 背景/前景/边框色,随浅色与深色主题切换
  • 非全屏播放栏移除“歌词”按钮(全屏页保留)
  • Windows 全屏播放页右上角补充最小化 / 最大化 / 关闭按钮(无边框窗口)
  • 批量匹配歌词改为最多 3 路并发,缩短大批量等待时间
  • 批量匹配取消后丢弃进行中任务的回调(不计入统计/结果),写库前再检查取消;进度只按已完成数更新
  • 修复智能推荐页随机播放读取过期总数:点击时实时刷新曲库总量,确保新入库歌曲可参与随机队列
  • 修复批量匹配取消边界:进行中任务在写库前再次检查取消;若已写入临时歌词则回滚删除,避免取消后继续落盘/写库
  • 修复批量匹配取消后 cancelled 未复位,导致后续单曲在线匹配一直返回「已取消」
  • 修复搜索建议报错 no such table: music:改为从 local_music 关联 all_music 查询建议
  • 修复全屏播放页 tip 完全不显示:顶栏 tip 改为向下展开,并去掉裁切 tip 的 overflow

变更

  • Release(已打包)启用单实例锁:同系统仅允许一个 Release 进程,二次启动会聚焦已有窗口;Dev 不限制多开,且与 Release 的 userData/锁互不干扰;首个实例尚未建窗时二次启动会排队,建窗后补聚焦
  • 暂时禁用全局快捷键注册(媒体键等会抢占系统快捷键、影响其他 App);shortcutManager 中 ENABLE_GLOBAL_SHORTCUTS=false,恢复时改为 true

v1.1.9

Choose a tag to compare

@github-actions github-actions released this 03 Aug 10:18

新增

  • 标签编辑支持年份、流派手动编辑;ID3 侧可对单个字段按 GB2312/GBK 转换并填入表单,也可整包转换后逐字段应用

修复

  • 修复标签编码转换未覆盖流派/年份:检测、预览、批量同步与写回均纳入 genre/year;乱码流派/年份不再入库
  • 修复音效开关开启却听感无变化:全屏特效释放/重建音频后未按音效状态重新接管滤波链;开启音效时改为主动挂到当前播放元素
  • 修复全屏页关闭均衡器时与 toggle 重复派发 restore 导致双重重建(可感知断音/进度跳变)
  • 修复音效仍不生效:播放器模块引用与 DOM 音频节点不一致时 EQ 挂错节点;关闭音效且特效仍需频谱时改为旁路而非销毁重建;开音效强制重路由滤波链;元素已被占用时自动重建后再挂接
  • 修复音效 restore 竞态:挂接失败时若正处于重建中改为排队补跑,避免事件被静默丢弃;缓存节点与 DOM 不一致时完整拆除 AudioContext 再挂接
  • 修复「清除所有」在库清理成功前就清空前端队列与 localStorage:失败时界面已空但数据库仍在、重启后又恢复;改为先清库成功再清内存/本地缓存
  • 修复「清除所有」失败:music_fts_data 等 FTS5 影子表不可直接 DELETE;改为跳过影子表/虚拟表,清空内容表后 rebuild 全文索引
  • 修复「清除所有」库已成功后仍因刷新失败误报清除失败;并清空搜索页内存缓存,避免仍显示已删曲目
  • 「清除所有」在清库前先停播并清空播放队列/当前曲/音频元素与本地播放缓存,避免清理过程中仍在播放
  • 修复「清除所有」清库失败时队列已被永久抹掉:清库前只停播并 release Web Audio,持久化清空放到清库成功之后;失败则恢复内存队列

变更

  • 主窗口默认进入本地音乐页(不再默认打开智能推荐/发现)
  • 本地音乐:列表为空时禁用「播放全部」;无可用扫描目录时禁用「扫描」;「扫描目录」改为「设置扫描目录」,无目录时按钮高亮引导配置
  • 修复「清除所有」后按钮状态可能未及时更新:停止后台分页并 reset 列表世代,避免过期 loadMusic 把旧数据推回导致「播放全部」等仍可点
  • 本地音乐「清除所有」改为清空数据库中除 settings 与配置目录(local_music_dir)外的全部表(曲目主表、本地列表、歌单、收藏、播放队列、最近播放、搜索历史等);主题/语言/音效等设置与已添加的扫描目录保留;并同步清空内存与本地缓存中的播放队列
  • 播放进度不再实时写入数据库/本地缓存:重启后从曲首开始播放,减少 SQLite 高频写入;仍保留队列、当前曲下标、音量与播放模式

v1.1.8

Choose a tag to compare

@github-actions github-actions released this 02 Aug 04:46

新增

  • 全屏播放顶栏新增「开启/关闭特效」按钮:可单独关闭频谱/火焰/闪电背景动画(唱片特效不受影响,本就不读频谱)

修复

  • 修复全屏播放页在大歌单(万级歌曲队列)下 CPU 占用偏高(约 30%-50%,且与特效开关状态无关):全屏页右侧的队列 Tab 用的是不做虚拟滚动的 v-for,即使停在歌词 Tab 没打开队列,这份列表也常驻 DOM,播放进度每次 tick 都要重新构建/diff 全部队列节点,歌单上万条时这才是全屏 CPU 高的真正原因(跟特效开关无关);改成与 PlayQueueDrawer.vue 一致的虚拟滚动,只渲染可视区域
  • 关闭全屏特效开关(或切到唱片特效)且均衡器面板本身未开启时,释放频谱可视化此前接管的 Web Audio 图并恢复原生 Audio 直出,避免不需要频谱时均衡器/压缩器/双分析器仍在后台空转
  • 修复关闭特效开关后仍会静默接管 Web Audio 音频图:现在关闭开关时不再触发频谱接管,与画面隐藏保持一致
  • 修复关闭均衡器重建原生音频后,全屏可视化频谱失联退化为假频谱:重建原生 Audio 元素后,如仍需要真实频谱会重新接管
  • 修复频谱/火焰/闪电可视化每次播放都重新连接整条 Web Audio 图(10 段滤波器/增益/限幅器/双分析器):仅在均衡器开关状态真正变化时才重新校正路由
  • 修复大歌单(万级歌曲)播放时 CPU 占用高、全屏特效卡顿:播放位置(下标/音量/进度等)每 ~5 秒一次的高频保存不再捎带整条播放队列一起序列化并同步写库;队列仅在真正结构变化(播放全部/增删/清空/拖拽排序)时才持久化
  • 修复播放队列状态监听:去重 SongList 里重复注册的 deep watcher;同时补上对队列引用替换的监听,修复"播放全部"两次或切到等长队列时"是否在队列中"图标不刷新的问题
  • 播放队列面板改为虚拟滚动,避免万级队列打开面板时一次性渲染全部 DOM 节点;顺带修复面板重新打开后滚动位置错位、队列骤减时短暂空白的问题
  • 唱片特效(VinylRecord.vue)盘面纹理改为一次性烧到 canvas 位图再旋转,避免旋转动画每帧都要重新合成唱纹 mask 与 mix-blend-mode 光泽层;同时补上 devicePixelRatio 变化(拖到不同 DPI 显示器)时的重绘监听
  • 修复播放队列里残留的曲目(比如上次会话保存后、又在设置里删除了对应扫描目录)已不在曲库中时,点击播放会因 recent_plays 外键约束失败而报错、并连续跳过后续所有曲目:启动时校验队列曲目是否仍存在于曲库并自动清理失效项;"记录最近播放"这个旁路操作失败也不再阻断真正的播放尝试

v1.1.7

Choose a tag to compare

@github-actions github-actions released this 02 Aug 03:13

文档

  • 同步更新 README:最新版本 v1.1.7、安装包文件名;补充播放模式说明与切歌行为
  • 默认使用 npmmirror 加速 Electron / electron-builder 二进制下载(.npmrc + electron-mirror-env.js + electron-builder.yml)
  • .npmrc 的 node-options 改为 ${NODE_OPTIONS?} --require=...,避免覆盖本机/CI 已有 NODE_OPTIONS

修复

  • 修复上一首/下一首未严格跟随播放模式:随机两端均随机且避开当前;顺序到头/尾不切换;顺序循环首尾互绕;单曲循环手动/自动均重播当前;切歌改回传队列下标避免同 id 找错
  • 修复单曲循环下当前曲不在队列时伪造 index:0 导致误切队首;播放失败改用跳过当前,避免单曲循环死循环重试损坏文件
  • 修复 Windows 下播放卡住/无声音(尤其是通过远程桌面等虚拟音频设备连接时):移除主进程注入的 audio-buffer-size=2048 启动参数——它会导致部分 Windows 音频设备静默打开失败,onplay/onloadedmetadata 正常触发但音频时钟不走、完全无声,且不报任何错误

v1.1.6

Choose a tag to compare

@github-actions github-actions released this 29 Jul 12:26

文档

  • 修正 README 徽章:补充 MIT LICENSE 文件,License 改为静态 MIT 徽章;Platform 标明 macOS arm64 | Windows | Linux,并链接到 Releases
  • README 安装章节补充 macOS 说明:仅 arm64、右键打开、xattr -cr 清除隔离属性(「已损坏」误报)、建议从 Releases 直下 dmg
  • 同步更新 PROGRESS.md 至 v1.1.6:里程碑/模块进度、本周工作、近期完成项与下一步计划
  • 同步更新 TODO.md 至 v1.1.6:勾选已完成项、调整优先级(macOS 公证/列表交互/自动更新)、补全 v1.1.x 已完成清单
  • README 全屏特效说明改为四套(频谱 / 火焰 / 闪电 / 唱片)

新增

  • 全屏播放新增闪电特效:分频带突增触发折线闪电与分支(无闪屏背景);浅色主题用深色电弧、深色主题用亮色电光;与频谱/火焰共用 nowPlayingStage;顶栏循环「频谱 → 火焰 → 闪电 → 唱片」
  • 本地音乐支持在线批量匹配歌词(参考 music-lrc-match:网易云搜索 + 相似度筛选 + 下载同名 .lrc);有歌词歌曲右键可「重新匹配」覆盖写入
  • 全屏播放控制栏新增「在线匹配歌词」:多候选弹出选择对话框(歌名/歌手/相似度);已有歌词时先确认是否替换

修复

  • 修复蓝色火焰不跟声调/频率变化:改为与霓虹频谱相同的分频带映射(左右对应低频→中高频),喷发位置/高度/数量由本频段能量驱动,上升快、回落慢
  • 修复闪电未开音效时假频谱持续误触发:假数据改为稀疏脉冲,且必须陡升才击打;并压低假频谱下的生成上限与冷却
  • 收敛火焰强音粒子生成量(约对齐分频前档位),假频谱补齐中心聚焦,减轻卡顿并与霓虹舞台感一致
  • 闪电去掉强音闪屏背景;浅色主题改为深色电弧,深色主题保持亮色电光
  • 修复全屏在线匹配切歌串写:锁定搜索时的曲目 id;弹窗/写入期间禁用按钮,切歌关闭选择框
  • 歌词匹配 IPC 互斥:批量进行中拒绝单曲搜索/写入;失效 lyrics_path 也纳入批量待匹配
  • 修复新下载 UTF-8 歌词显示乱码:编码检测误用 includes('') 恒真,无 BOM 的 UTF-8 被一律当 GBK 解码
  • 修复批量匹配歌词离开本地音乐页再回来进度消失:状态改存 Pinia + 主进程可查询,挂载时恢复
  • 修复批量匹配状态同步竞态(回页可能卡在「匹配中」)、回页强制刷新列表,以及 UTF-16 BOM 歌词误按 UTF-8 读取
  • 修复全屏播放从队列切回歌词时未滚到当前句:隐藏面板不再无效 scrollIntoView,切回时按进度强制对齐
  • 修复全屏在线匹配歌词成功后高亮丢失:loadLyrics 重置索引后若已在歌词面板则强制按当前进度同步并滚动;切歌重载同理(暂停时进度未变也能对齐)
  • 修复全屏播放封面底部被裁切:封面在矮窗口中改为受 max-height 约束等比缩小,不再被 overflow 切掉下边;唱片组件同步按可用空间缩放
  • 修复唱片特效盘面消失:盘面子元素为绝对定位,width/height:auto 会塌成 0;改回 width:100% + max-height + aspect-ratio 等比缩放
  • 封面/唱片缩放改用 container query(min(100%, 100cqh)),按容器宽高较小边定边长,避免部分引擎 width:100% 不回缩导致再次裁底

v1.1.5

Choose a tag to compare

@github-actions github-actions released this 27 Jul 08:21

文档

  • 同步更新 README:最新版本 v1.1.5、全屏特效/浅色主题说明、安装包文件名;播放链路说明改为原生 Audio 为主、Howler 兜底

修复

  • 修复唱片唱臂被 .main-area 裁切:vinyl 时父级一并放开 overflow
  • 唱片旋转改为挂载后再启动,避免 discRef 未就绪时空转
  • 火焰生成改为复用本帧 stage;小粒子改用实心色减少 createRadialGradient
  • 修复音效(均衡器)设置退出后丢失:开关/预设立即落盘,关闭面板与退出前 flush;localStorage 同步镜像兜底
  • 修复全屏播放偶发白屏闪一下:去掉主布局 out-in 空窗、进入 NowPlaying 禁用淡入淡出;封面取色强制压暗;canvas resize 先铺黑底
  • 降低全屏白屏频率:普通页恢复 out-in(避免叠层透底);进出 NowPlaying 仍用 instant;去掉会触发重挂载的 route key;封面预加载后再替换;去掉进场 opacity:0 动画;背景色与渐变拆开写
  • 改善播放音质:未开音效时不再强制走 Web Audio 滤波链(PlayerBar 仅在开启时接管);音效关闭时音频图直通 destination;开启时按最大提升留主音量余量减轻削波
  • 进一步提升音质:全屏频谱不再劫持 Audio;仅开启音效才 createMediaElementSource;关闭音效时释放 Web Audio 并重建原生元素直出;未开音效不设 crossOrigin
  • 修复开音效后音质发糊:滤波器 Q 修正为倍频程标准 1.414(过宽会导致相邻频段叠加、低频实际提升远超面板值);尾部加限幅器防 0dBFS 硬削波;增益改用 setTargetAtTime 平滑过渡消除爆音
  • 继续优化音质:31Hz/16kHz 两端频段改用搁架滤波(低频不再白耗动态余量、高频避免奈奎斯特弯折变形);加大 Chromium 音频输出缓冲至 2048 防 UI 高负载爆音;全屏频谱限帧 30fps 降低绘制对解码的挤压
  • 修复霓虹频谱背景明显延迟卡顿:撤销 30fps 限帧恢复满帧率;去掉每根柱子的 shadowBlur(掉帧主因)改用廉价叠层发光;平滑改为帧率无关的指数趋近(上升快回落慢);频谱分析平滑常数 0.8 降为 0.5 让数据跟上节拍
  • 修复全屏播放两种主题下歌词与播放队列文字看不清:次要文字不再用低不透明度的灰(改为 0.62~0.96 四档,层级差交给字号与字重);歌词、队列、标签与时间刻度统一改用八向描边 + 外发光(深色主题黑描边、浅色主题白描边),与歌曲名称同一套,不使用遮挡背景的衬底
  • 修复频谱光柱顶部过亮压住上方文字:两种主题的光柱都改为「底部实、向上渐隐」(原深色方案是顶部最亮,柱顶正好侵入歌词/队列区域,描边无法救回),霓虹感保留在靠近进度条的柱基
  • 修复频谱光晕过粗显糊:柱子发光半径改为跟随柱宽并收在间隙量级内(原固定 4~12px 是柱宽的三倍多,相邻光晕大面积重叠糊成一团雾),半径收窄同时略提亮度还原霓虹边缘;底部径向柔光减弱并收小半径,不再在柱顶上方留一片朦胧
  • 关闭频谱光晕:去掉底部径向柔光与柱子外圈叠层发光,柱体边缘更清晰;顺带移除已无消费者的 baseColor 入参
  • 加强浅色主题频谱可见度:提高柱体不透明度与饱和度、压低明度以贴浅底对比;拖尾擦除略放慢、底部虚化减弱,避免柱基被抹成水印
  • 恢复频谱绚丽度(深浅主题):柱体改回「顶部亮、底部收暗」的霓虹渐变(此前为避文字改成向上渐隐,显得发闷);提高饱和度与不透明度;柱高略增;光晕仍关闭(此前反馈过粗发糊)
  • 全屏播放「歌词 / 播放队列」Tab 标题去掉文字描边(深浅主题均不描边,避免暗色切亮色时 is-light 未生效前短暂闪出白描边)
  • 修复全屏播放区播放/暂停按钮周围异常:去掉 box-shadow(父级 overflow 会裁成底部一条发灰直线,且透明底栏上阴影易与频谱叠色);保留实心主色胶囊
  • 修复封面取色的背景渐变被频谱 canvas 整块遮住(实测 canvas 像素 alpha 恒为 255):拖尾与底部虚化改用 destination-out 按 alpha 擦除,不再叠不透明底色,canvas 恢复透明让渐变透出;顺带消除 resize/拖尾/父层三处不一致的底色硬编码
  • 修复封面取色的竞态:切歌与切主题两条并发异步链改用共用的递增请求序号,只允许最新一次写回背景主色,避免慢的那次把背景改成上一首歌或上一个主题的颜色
  • 修复进度条拖动按钮在浅色主题下看不清:纯白改为白底 + 主色描边(主界面播放栏与全屏播放页一致)
  • 修复全屏播放页进度条拖动按钮显示不全:进度条留出 6px 外边距,避免比轨道大的按钮被外层 overflow 裁掉
  • 去掉全屏播放页进度条区域上方多余的分隔线

新增

  • 全屏播放模式支持浅色主题(此前仅深色):跟随全局主题设置,system 模式下随系统偏好切换
    • 新增一套局部配色令牌(--np-*),文字/控件/滚动条/边框在两种主题下都有足够对比度;文字描边深色用黑、浅色用白
    • 封面取色按主题分流:深色继续压暗,浅色改为混白提亮成柔和淡彩,保证深色文字可读
    • 霓虹频谱特效适配浅色:改用正常混合(加法混合在浅背景上只会洗白)、白色拖尾蒙层、淡彩低透明度柱体,让特效退到背景不与文字抢注意力
    • 切换主题时重算封面主色并清空 canvas(露出下层渐变,避免残留上一主题的残影)
  • 全屏播放顶栏增加与主界面一致的主题切换、语言切换按钮(与主界面共用 settingsStore 逻辑)
  • 全屏播放新增两套视觉特效,连同原有霓虹频谱共三套,均适配深浅主题
    • 火焰特效:深浅主题统一蓝色火焰(白青芯 → 电光青蓝 → 钴蓝外焰 + 细尖卷须 + 蓝白火星);低频驱动;无暖色火星、无背景晕层;舞台与频谱共用 nowPlayingStage(底边停在进度条上沿,不含控制栏)
    • 经典唱片特效:密纹黑胶 + 封面标签环 + 中心镂空轴孔 + SVG 一体唱臂(暂停抬起、播放落下);转角直写 DOM,避免每帧响应式更新
    • 顶栏语言切换按钮之后新增特效切换按钮,按「频谱 → 火焰 → 唱片」循环;所选特效写入 localStorage,非法值回落频谱
  • 全屏播放左右分栏改为各占 50%(封面+标题 | 歌词/队列);封面 max-width: 360px,避免遮挡背景主题
  • 修复 50/50 布局溢出:默认左面板 overflow:hidden;仅唱片特效放开 overflow 以保证唱臂完整显示
  • 火焰性能收敛:粒子上限约 200/100,降低每帧生成量与渐变色阶,减轻卡顿风险
  • 频谱与火焰舞台常量抽到 src/renderer/utils/nowPlayingStage.ts,避免两边硬编码漂移