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 加「参数持久化」节 + 坑表条目。
28 lines
966 B
Python
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()
|