2026年8月27日·发布日志·18 次浏览·9 分钟阅读

TAB Score Viewer 更新日志(v2.7.5)

TAB Score Viewer 更新日志(v2.7.5)

仓库README

这次更新跨度超大,从 a61afce 到 17d4679 共 89 个提交,版本号来到 2.7.5。简单说就是:重构了代码、加了超多新功能、提升了无障碍体验、修复了一堆 bug,现在需要 Python 3.11+ 才能跑。


🎉 重点速览

  • 许可证变更:从 MPL 2.0 换成了 AGPL v3,LICENSE 文件已更新,所有语言包里的版权声明同步。
  • 代码大重构:原来的“巨无霸” TAB Score Viewer.py 被拆成了 core/、service/、ui/、workers/ 分层结构,维护起来更轻松,测试也更好写了。
  • 类型注解全覆盖:核心模块都加了类型标注,引入 PyQt5-stubs,mypy 检查已开启(CI 只警告不阻塞)。
  • 测试覆盖率:从约 85% 提升到 91%,1654+ 个测试全部通过,还加入了无障碍和截图回归测试。
  • Python 版本要求:必须 3.11 及以上。

✨ 新功能(挑几个好玩的)

🎼 文件格式 & 播放

  • 支持 GP7/GP8(.gp)文件:能解析 ZIP 包里的 GPIF XML 和二进制配置,智能加载,旧格式也兼容。
  • GP3~GP5 和弦显示:重构了显示控件里的和弦渲染,去掉旧代码,显示更清爽。
  • 节拍器:GTP 模式下自动读 BPM 和拍号,图片/PDF 模式可手动设置;支持全局增益滑块,可配置分母;快捷键 Ctrl+M 一键开关。
  • GTP 播放前倒计时:3 秒倒计时 + 节拍器同步,中途可取消。
  • 速度曲线编辑器:可以自己画播放速度变化曲线,随心调速。
  • A-B 循环播放:支持设置起点终点循环播放,练琴神器。

🧭 界面 & 操作体验

  • 收藏夹:最近文件列表上方新增可折叠的收藏列表,右键点击文件即可标星/取消,最多存 100 个,空星/实星图标直观。
  • 难度评分:GP3~GP8 文件自动评分(基于 SQLite 缓存,文件修改后重新计算),背景线程批量处理,文件列表里显示星标和详情弹窗,非吉他音轨自动过滤。
  • 自定义全局快捷键:可视化配置界面,冲突检测,支持中英日三语。
  • 命令行启动:新增 cli_launcher.py,支持 macOS 文件打开事件,跨平台启动逻辑统一,窗口里加了“主页”按钮方便切换。
  • 自动更新检查:新模块,使用 certifi 增强 SSL 兼容,集成到“关于”和“设置”界面。
  • 应用内日志系统:可调级别,高级设置里开关,“打开日志目录”一键直达。
  • 关于对话框:显示版本、许可证、作者、联系方式、AI 声明等,三语支持。
  • 主题扩展系统:用户把 JSON 或 Python 文件丢进 themes/ 文件夹就能自动加载新主题,UI 和 GTP 渲染同步应用。
  • 缺失音色库提示:启动时检测到 FluidR3_GM.sf2 缺失会弹出引导对话框,告诉你各个平台该去哪下载。

♿ 无障碍(a11y)

  • 色盲/色弱模式:6 种模拟模式,专属设置页带实时预览,所有界面(滑块、对话框等)都能即时刷新。
  • 键盘导航:最近文件和收藏列表支持 ↑ / ← 折叠展开。
  • 辅助功能标签:所有 UI 组件都添加了 accessibleName 和 accessibleDescription,读屏更友好。

🎸 实用小工具

  • 吉他调音器:基于自相关算法的音高检测,标准 EADGBE 六弦实时调音,带状态指示,快捷键 Ctrl+T,全窗口单例避免麦克风冲突,支持三语。

🔧 重构(开发向,但你也能感受到稳定性提升)

  • 原来的单文件被拆分到 core/(常量、字体、国际化、主题、数据模型、快捷键、更新检查、色盲模式、难度评分)和 service/(节拍器、播放引擎、控制器、收藏服务等)以及 ui/(窗口、控件、对话框、打印等)和 workers/(异步任务)。
  • DisplayWindow 被拆成了工具栏、控制面板、底部栏、音频面板等独立组件,代码更清晰。
  • 设置对话框也拆成通用、GTP渲染、高级、色盲等多个面板,由状态机控制。
  • 导出/打印逻辑独立成纯函数模块。
  • 大量 lambda 信号槽改为命名函数,避免闭包变量捕获问题。
  • 用 logging 替代 print,日志更规范。

🧪 类型安全 & 测试

  • 核心模块全部加类型注解,使用 TYPE_CHECKING 避免运行时循环导入。
  • mypy 开启 disallow_untyped_defs 等检查(仅警告,不影响 CI)。
  • 修复了若干真实类型错误(比如 cvd.py 里错误使用模块级 app)。
  • 新增大量单元测试,覆盖新控制器、服务、控件、对话框和调音器,修复了跨平台路径问题。

🚀 CI/CD & 打包

  • GitHub Actions 增加 ruff 检查、pytest 测试、mypy 类型检查、i18n 翻译同步。
  • VERSION 文件打进所有平台的 spec 包里。
  • macOS 支持 Apple Silicon,自动检测 Homebrew 路径,修复 PyInstaller BUNDLE 模式下的 SVG 图标加载。
  • PyInstaller 的隐藏导入更新,补全核心模块和服务模块。
  • 应用图标添加 .icns 格式。

🐛 修复的 Bug(挑几个影响大的)

  • 打击乐无声(v1.1.2 遗留):修复了 GP7/GP8 鼓轨 MIDI Bank Select 编码错误,并补全了 GPIF 打击乐音高映射。
  • GP7/GP8 弦位错乱:修正了音符到弦的映射,在解析器文档和注释里说明了弦号反转问题,FAQ 里增加了 Q5/Q6。
  • SpeedCurveConfig 崩溃:补上 @dataclass 装饰器,避免 field(default_factory) 返回 Field 对象而不是列表,加绘回归测试。
  • 主题切换失效:修复了文件名带空格时主窗口不刷新的问题;给设置对话框和选择窗口加了 objectName 以精确匹配 QSS;DisplayWindow 强制重绘背景色。
  • macOS 双击 GTP 启动失败:重构 CLI 启动逻辑,延迟处理 Apple Event,避免内存泄漏。
  • macOS 权限问题:添加 TCC 预热钩子,跨语言权限错误提示并重新选文件。
  • A-B 标签未初始化:补上缺失的 ab_info_label,移除 hasattr 回退,改用 logging。
  • 色盲模式刷新:修复了 4 个窗口(关于、设置、DisplayWindow、ModernSlider)应用颜色矩阵的问题,统一通过 ThemeManager.get() 获取。
  • 分轨 GTP 注释路径:在音频引擎初始化后重新加载注释控制器,避免 gtp_player 未就绪时丢失路径。
  • 吉他技巧评分权重:调整了评分算法,难度更合理。
  • 字体模块导入:修正 get_font_family → get_ui_font_family。
  • 更新检查 SSL:使用 certifi 优先的上下文,解决 macOS 证书问题,修正 User-Agent 格式。

📚 文档更新

  • 添加 LICENSE 文件,所有本地化许可文本同步为 AGPL v3。
  • README 更新标题、版本徽章,优化 macOS 安装说明(精简冗余)。
  • FAQ 扩展(GP7/GP8 弦映射问题 Q5/Q6)。
  • 新增 alphaTab 弯音/颤音/摇杆 MIDI 合成原理分析文档,附带 ApolloTab 移植笔记。
  • 添加国际化贡献指南(中英双语),翻译同步脚本移到 tools/。
  • 项目记忆文档压缩到 250 行以内,保持简洁。

📦 依赖变化

  • 新增:Pydantic v2(用于 settings.json 校验与序列化)、PyQt5-stubs>=5.15.6.0、pytest-qt。
  • 升级:PyMuPDF 到 1.24+。
  • 注意:ARM Linux 用户如果 pip 安装 PyQt5 失败,建议用系统包。

⚙️ 配置系统

  • 基于 Pydantic v2 重构,增加配置校验测试。
  • 新增配置项:启动时检查更新、日志开关/级别、色盲模式、自定义快捷键、节拍器增益/拍号分母、收藏列表。

提交范围:a61afce → 17d4679(89 个提交)
最终版本:2.7.5


👏 致谢

感谢新贡献者 @LiJingrong123456 在 PR #3 中大刀阔斧重构并修复诸多 bug!

完整变更记录:
https://github.com/Zhuwenqian/TAB-Score-Viewer/compare/v2.1.0...v2.7.5


附件下载

附件需登录后下载

0 条评论

请 登录 后发表评论

还没有评论,快来抢沙发吧