✨feat(mac/tray/lyric): 新增 macOS 状态栏歌词与托盘图标适配 by Pissofdvpe · Pull Request #843 · imsyy/SPlayer
and others added 2 commits
February 7, 2026 22:30- 将 macOS 状态栏歌词功能从 模块完全迁移至新增的 独立模块,显著提升模块化和可维护性。 - 现已专用于处理 Windows/Linux 平台的任务栏歌词逻辑,消除了平台间的耦合。 - 更新为根据操作系统平台动态加载 或 。 - 调整了 对 事件的响应逻辑,并移除了冗余的 监听器,确保托盘标题管理与歌词功能的独立控制。 - 歌词和播放状态数据(如 等)的底层 IPC 事件保持共享,无需修改渲染进程的数据发送逻辑。
- 统一了 macOS 歌词相关 IPC 的类型定义,将 移至 并导入 IPC payload 类型。
- 优化了 macOS 状态栏歌词更新逻辑:
- 移除了歌词更新的 200ms 防抖延迟。
- 实现了下一行歌词提前 300ms 预显示,以提高流畅度。
- 引入了 50ms 间隔的歌词插值,以实现更平滑的进度更新,尤其是在主进程接收到渲染器防抖更新时。
- 为 macOS 状态栏歌词数据请求创建了专用的 IPC 通道 ,增强了关注点分离。
- 恢复了 中缺失的注释,以提高代码可读性和可维护性。
- 修复了开启macOS状态栏歌词时,先快速闪烁logo和错误歌词文本的问题 - 移除了在启用歌词时立即清空歌词列表的逻辑 - 确保在新歌词数据到达后立即更新状态栏显示 - 优化了 setInterval 的使用方式: - 彻底废弃了 setInterval 内部的时间推移逻辑 - 转而完全依赖渲染进程通过 IPC 同步的精确时间来更新歌词进度 - 解决了 IPC 延迟导致的歌词抢跑问题 - 在主进程的 mac-statusbar:update-progress 处理器中引入了进度同步阈值 (100ms) - 只有当 IPC 传递的 currentTime 与主进程本地 macCurrentTime 差异超出阈值时才进行同步,以平滑歌词显示,避免微小跳动 - 修正了注释以提高代码可读性 - 更新了 ipcMain.on(taskbar:update-state) 处理器中的注释,使其更准确、清晰,并反映了当前逻辑
- 引入 Date.now() 驱动的内部时间推进机制,减少 CPU 空转并提高同步健壮性: - 新增 macLastUpdateTime 变量,记录 macCurrentTime 上次更新时间戳。 - 修改 startInterpolation 函数的 setInterval 回调,通过计算 elapsedTime 累加到 macCurrentTime。 - 优化 IPC 进度同步为校准机制: - 在 mac-statusbar:update-progress IPC 事件处理器中,当 currentTime 与 macCurrentTime 差异超过阈值或非播放状态时,才进行时间校准。 - 确保 PROGRESS_SYNC_THRESHOLD_MS 阈值正常发挥作用,避免不必要的微小同步。 - 清理冗余调试日志,提升代码整洁度。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters