Files
lou 3b6ce2c57e 参数持久化: 面板改动落盘, 重启/开机后自动恢复
问题(09-20 实测复现): dsp/common.py 的 open_store() 是"文件不存在就零填充创建", 而
/dev/shm 是 tmpfs —— 重启后参数全变 0。听感上不是"参数没保存", 而是**"混响突然没了"**
(湿量 0), 极易被当成链路故障去查。

修法:
- common.py: 加 params.json 落盘(load_saved_params / save_params / restore_params);
  open_store() 检测到文件是"新建的"就从落盘恢复(带上下限夹取)。幂等 —— 两个声道进程
  同时判定为新建也没关系, 写进去的值一样。
- web/server.py: 面板每次改参数(POST /api/eq|volume|wet)后 save_params() 落盘; 值没变不写。
- 初始化.py: 改成"优先用落盘, 没有才用默认值", 并报告参数来源。

实测(rm /dev/shm/collaplex-eq* + 重启 pipewire): 参数自动恢复, 与落盘逐值一致
(总音量 +2.0 / 湿量 0.600 / EQ 非零 30 段)。

落盘位置 ~/.local/state/cinema-spatial/params.json(与 loudness.json 同目录)。
README 加「参数持久化」节 + 坑表条目。
2026-09-20 13:40:06 +08:00

28 lines
966 B
Python

"""把参数写进共享内存: 优先用上次落盘的(params.json), 没有则用默认值。
安装脚本在共享内存不存在时调用它。平时开机后由 dsp/common.py 的 open_store()
自动完成同样的恢复(见那里的注释), 所以这个入口主要给安装/手动修复用。
"""
from __future__ import annotations
import os
import sys
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
import common
def main() -> None:
store = common.open_store()
common.restore_params(store) # 显式恢复一次(幂等)
gains, volume_db, wet, version = common.read_params(store)
source = "落盘文件" if common.load_saved_params() is not None else "默认值"
nonzero = sum(1 for x in gains if abs(x) > 1e-9)
print("参数已写入: 来源%s / 总音量 %+.1f dB / 湿量 %.2f / EQ 非零 %d 段 (版本 %d)"
% (source, volume_db, wet, nonzero, version))
if __name__ == "__main__":
main()