feat(ncm §20): 音质体系全量——八档UI/VIP检测缓存/逐级降级下首恢复/fee门禁/默认极高HQ

- core: 9档枚举(顺序=降级链, DOLBY映射保留不进UI/链) + level_key(sky/sky_c51)
  + level_gate(CVIP/SVIP门槛) + song_url surround档附加immerseType=c51
  + song_url_auto全档表降级(out_level回填/响应level静默降档采信/try_fn可注入)
  + vip_info(weapi v2优先v1兜底) + parse_vip_info离线可测 + NCM_ERR_VIP(-15)
- app/logic/account.c(新): account.json会员态缓存(uid/nick/vip/双expire/checked_at)
  刷新=登录后/超1天/到期后各一次不轮询; account_vip本地到期降档视图
- player_manager: 用户档按会员钳顶后逐级降级(不硬拒,缓存键仍用户档),
  fee∈{1,4}且非会员→NCM_ERR_VIP零请求(缓存命中优先), eff_level回填
- UI: 设置页八档(规格+门槛+未解锁标注,允许选定), 播放页时间行中央
  生效档/已降级至xx小字, VIP专享文案; 默认档Hi-Res→极高HQ(存量设置保留)
- 验证(0真实请求): degrade_sim 90例矩阵全PASS; player_flow_sim P1-P8全PASS;
  test_ncm_core vip解析9例宿主+qemu全PASS; 窗口/分页/缓存/封面/audiod sim全PASS;
  mipsel -Wall -Wextra 0 warning; 6页离屏rc=0。未部署真机(留主会话)
This commit is contained in:
MeowOS committed 2026-09-01 15:55:42 +08:00
1 parent ab4dfb4f9c
commit bdd9e898f4
23 files changed
+1026 -70

No files matched your search

+34
View File
@@ -103,3 +103,37 @@ void chrome_tick(void)
s_snack_until = 0;
}
}
/* ---- §20 音质档位显示名/规格(八档 UI 权威口径,NCM_CACHE_DESIGN §3;settings/player 共用)----
* 档位中文名以我方设计文档为准(BIZ_NOTES §2.1:CNMPlayer 标签只做 level 串对齐参考)。 */
const char *ncm_level_name(int lv)
{
switch (lv) {
case NCM_LEVEL_SURROUND: return "沉浸环绕声";
case NCM_LEVEL_SKY: return "臻音全景声";
case NCM_LEVEL_JYMASTER: return "超清母带";
case NCM_LEVEL_JYEFFECT: return "高清臻音";
case NCM_LEVEL_DOLBY: return "杜比全景声"; /* 映射保留,不进 UI 清单 */
case NCM_LEVEL_HIRES: return "Hi-Res";
case NCM_LEVEL_LOSSLESS: return "无损 SQ";
case NCM_LEVEL_EXHIGH: return "极高 HQ";
case NCM_LEVEL_HIGHER: return "较高"; /* 仅降级链中间档,不进 UI */
default: return "标准";
}
}
const char *ncm_level_spec(int lv)
{
switch (lv) {
case NCM_LEVEL_SURROUND: return "5.1 声道";
case NCM_LEVEL_SKY: return "Audio Vivid";
case NCM_LEVEL_JYMASTER: return "192kHz/24bit";
case NCM_LEVEL_JYEFFECT: return "96kHz/24bit";
case NCM_LEVEL_DOLBY: return "Dolby Atmos";
case NCM_LEVEL_HIRES: return "192kHz/24bit";
case NCM_LEVEL_LOSSLESS: return "48kHz/16bit";
case NCM_LEVEL_EXHIGH: return "≤320kbps";
case NCM_LEVEL_HIGHER: return "192kbps";
default: return "128kbps";
}
}