贡献代码
环境与常用命令见环境搭建,类型检查与 pydantic 约定见代码规范。
项目结构
多个前端共享同一转换核心——格式转换逻辑永远写在 libresvip 核心与插件里,不要写进任何前端:
| 入口 | 技术 | 位置 |
|---|---|---|
| 桌面 GUI | PySide6 / QML | libresvip/gui/(界面在 libresvip/res/ 的 QML,编译成 resources.rcc) |
| TUI | textual | libresvip/tui/ |
| Web | 自研页面 | libresvip/web/ |
| 移动端 | flet | libresvip/mobile/ |
| CLI | typer | libresvip/cli/(含 rpc/,入口 libresvip-cli) |
核心层:
libresvip/model/— 内部工程模型:base.py(全部模型的 pydantic 基类,populate_by_name=True),以及各类音高/曲线转换(synthv_pitch、relative_pitch_curve、reset_time_axis、vocaloid/…)libresvip/core/— tick 换算(tick_counter)、时间同步(time_sync)、注音(lyric_phoneme/)、异常与警告类型libresvip/extension/— 插件系统:SVSConverter基类(base.py)、加载与元信息(manager.py)libresvip/middlewares/— 转换前后处理管道(音高平移、缩放、去歌词符号、替换歌词…)
格式插件 libresvip/plugins/<format>/(约 40 个格式,ace 至 y77):
- 固定角色:
model.py(目标格式 pydantic 模型)、<format>_parser.py(格式 → 内部Project)、<format>_generator.py(Project→ 格式)、<format>_converter.py(SVSConverter子类,load/dump 入口)、options.py(输入/输出选项) - 插件元信息在
<format>.yapsy-plugin,翻译在locales/<lang>/LC_MESSAGES/(用户可见文案用gettext_lazy包_());复杂插件可加常量/工具模块,但上述角色不变
周边:
scripts/— 代码生成与编译(proto、snake_case pyi、Qt 资源、babel 编目)tests/— 扁平test_*.py+data/、files/测试素材packaging/— 各平台打包脚本;deprecated/与experimental/存放旧实现与实验代码