Skip to content

2.0 后续与推迟项跟踪 #141

Description

@LiuYunPlayer

跟踪 2.0 重构(数据/SDK 分层、老插件兼容、效果器、属性面板)之后有意推迟的事项。每项均已确认可安全后补(加性/非破坏);某项排期时可从本 issue 拆出独立 issue。

同步 2026-06-18:插件设置系统、effect 接口规范化(会话化)、manifest 入口统一 classes 数组、插件冲突消解矩阵(所有类型) 均已完成、移入末尾「已完成」。

🔴 高优先级

  • (暂无)

🟡 中优先级

  • 效果器参数预设(preset)保存/加载
  • 颤音对效果器自动化的影响(扩展现有"影响哪些自动化"映射到 effect)
  • PropertyArray(有序可重复列表)—— 需求驱动(重复音素 / 可中插删列表);typed 叶子包装(Bool/Number/String)已划掉(零消费者、具体类型重载替代)

🟢 低优先级

  • effect 段内子区间增量(流式边合成边交付 + effect 自决段内局部重合成);纯加性、Write API 已铺好,可不做
  • 免重启卸载/更新扩展(加载器已 collectible-ready,切换 isCollectible:true 即可;当前走重启式安装器)
  • 原生 dll 子目录(runtimes/<rid>/native 等)探测兜底 —— 当前原生依赖只走 .deps.json,无目录探测兜底(托管 dll 有)
  • context 统一(并入合成 context)—— 原挂"待 voice API 整体改造";voice SDK 重设计已落地,可重估是否还需要
  • 主程序 .NET 升级(net8→net10,跳 net9 直上 LTS):SDK/Foundation 保持 net8 二进制地板、老插件 roll-forward;需一轮老插件加载回归,独立进行
  • CI 用 ApiCompat 对比黄金 dll 校验冻结契约(可选护栏)
  • 权威野外插件兼容清单(真机实测持续补全)
  • release/2.0.0 → master 合并、effect worktree 清理

🔵 未来大版本方向

  • 能力发现模式(IPlugin.GetExtension(id) 字符串能力面)
  • 跨大版本插件兼容(下一代 SDK 的 extern alias 桥接)

✅ 已完成(记录)

  • 键值集合的集合表达式支持([CollectionBuilder]):Map/OrderedMap 及其可变/只读接口挂 [CollectionBuilder],解锁 [] 字面量——含 new() 无法表达的接口目标 = [](不能 new 接口);Map 由继承 Dictionary 改为组合、公有枚举统一产出 IReadOnlyKeyValuePair,使单个 builder 通吃具体类与接口;只读接口空 [] 复用 Empty 单例(零分配);OrderedMap 保留覆盖语义与 RemoveAt/KeyAt/ValueAt 索引 API。连带:DataMap 内部字段由 Map 改原生 Dictionary(对外 IDictionary 契约不变)、TLP/CBOR 读写辅助方法形参 Dictionary→Map/IReadOnlyMap。非空 KV 字面量收益有限(元素是接口、new(...) 与 BCL KeyValuePair 都不隐式汇入、须显式 new ReadOnlyKeyValuePair<,>(...)),主要价值在空 []。独立测试 MapCollectionExpressionTests(7 例)。提交 39e1a9c
  • 扩展冲突消解矩阵(所有插件类型,非仅 format):身份 id(format 扩展名 / voice·effect·agent 引擎 id)跨包可重名、非全局唯一键。四个 manager 从 id→单个(先到丢弃) 改为 id→多包并存(同包同 id 去重);ExtensionRouting 三合一——活实现解析(用户选择 / 内建优先 / packageId 序最小)+ 选择存 app Settings.jsonExtensionRouting 字典 + 冲突聚合;工程只引身份 id、不存包 id,选中包缺失按默认策略回退(工程跨机可移植);format import/export 各为可路由身份;ExtensionSettingsManager 改按 (packageId,id) 枚举;设置窗口「Extension Routing」页按类型分组(Voice/Effect/Agent Model/Format)、下拉显包名、专属图标;legacy 包 id 改用目录名(区分多包 + 反查包名,退役"legacy=空串");夹具 V1.RouteConflict.A/B(format)+V1.VoiceConflict.A/B(voice) + tests/EXTENSION-ROUTING-TEST-CASES.md。提交 1474ddb
  • 插件设置系统(opt-in IExtensionSettings;设置窗口「扩展」页;ExtensionSettingsStore 单文件;设置按包分桶 root[packageId][kind:extensionId] 根治不同包同 id 串味,内建用 (built-in)、legacy 用目录名、V1 包用反向域名 id;密钥 DPAPI/钥匙串;agent 复用存储层)
  • effect 接口规范化(会话化):厚 IEffectProcessor(每段一个)+ IEffectContext + IUpstreamAudioSegment;退役 IEffectInput/Output/Change;自订阅自管失效;EffectGraph 反应式 processor 图;回显轨端到端
  • manifest 入口统一 classes 数组:退役 class/import/export 具名槽,改 classes 候选类清单、宿主按 type 所需接口扫描认领;assembly 保持单数(一能力的入口类同住一 dll,多 dll 走多 extensions[] 条目共享一 per-package ALC)
  • 条件属性面板(§三.25,config=f(context) 提交时整树重算 + keyed-diff)
  • PropertyValue.Invalid 垫片清理(Invalid 正式化为长期哨兵)+ 装箱优化(标签+字段联合)
  • IDataObject.WillModify 改前事件(merge 对偶语义,对齐 C++ aboutToModify)
  • voice SDK 会话模型重设计(厚插件;插件面全秒轴)+ 合成分段 Segment SDK 形状(SynthesisSegment/IAudioSegment)
  • voice→effect 音频段化 + 按段增量重渲染(段握柄 / 按段独立过链 cache[segment][stage] / 波形 + 播放逐段;提交①②③,§三.28)
  • 插件多语言(i18n)适配(插件侧自译 + 静态全局 host context + manifest localizations)
  • 扩展侧边栏信息增强(icon / 作者 / 简介 tooltip / 真实类别徽标)
  • voice 插件实战开发文档(plugin-development.md §5:音素 I/O / 音高双通道采样 / 快照 / note·part 属性约定 / 原生依赖打包 + LLM 版同步)

🗑️ 不再跟踪(已决 / 无跟踪价值)

  • 传给插件的音符是否宿主侧先去重叠 —— 已决:SDK 直传可重叠序列、去重叠归插件(单声部按需截断 / 和弦原味消费),见 78096bb/caecc3e
  • assembly 单数 vs assemblies 复数 —— 已决:保持单数;classes 复数是因一个能力可有多入口类(如 format 导入+导出),但它们同属一身份、同住一 dll;多 dll 包用多 extensions[] 条目(共享一 per-package ALC)表达
  • 文档数据集合接口统一 / IDataObject DIM 重构(effect 那套 IReadOnlyDataCollection 统一)—— §三.20 已定"不纳入";§三.21/22/24 已重做数据/事件/导航模型(IDataObject.WillModify 已实装,见已完成)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions