• v1.0.9 d331128e88

    edgevoid released this 2026-09-24 09:37:59 +08:00 | 0 commits to main since this release

    输出设备不写死: 面板设备选择 + 自动挂载守护

    症状: 开机后 / 插上 USB 耳机后听感变成「双重混响」, 只有 collaplex-audio stop + start 才恢复。

    根因: 链路末段的输出设备原来写死在 30-collaplex-eq.confnode.target(安装时探测一次)。
    开机时那台设备要是还没枚举出来, 会话管理器建链时目标不存在 -> 末段连到别处或者干脆不连;
    设备出现后不会自己改回来。两次实测的时序:

    日期 开机 EDIFIER USB 枚举 时差
    2026-09-23 21:01:17 21:03:01 +1 分 44 秒
    2026-09-24 08:57:07 09:19:43 +22 分 36 秒

    修法(三段缺一不可):

    做什么
    选择落盘 ~/.local/state/cinema-spatial/output.json; 安装.sh 优先用它, 设备不在位也照样按它建链
    面板按钮 「输出设备」卡片: 下拉硬件输出 + 「应用」-> 立刻重挂 + 落盘(GET /api/devices, POST /api/device)
    守护线程 web/output_route.py: 每 3 秒核对「选中设备在位 且 collaplex_eq_out 只连它」, 不对就拆错的补对的 -> 设备一插上自动挂好, 不用重启链路

    设备名带 USB 序列号、跨重插稳定, 所以「选哪台」能记住; 不稳定的是「建链那一刻设备在不在」。

    实测:

    场景 结果
    面板真鼠标点「应用」切到内建模拟输出 / 再切回耳机 routed 立刻跟随
    手动把末段连到错设备 守护 2 秒纠回
    末段连线全拆 守护 3 秒挂回
    collaplex-audio start 自检 打印 输出设备: ... [在位]

    两个坑(写进来省的再踩):

    • pw-dump 的 Link 对象键名是 output-port-id / input-port-id —— 写成 output-port
      一条连线都读不到, 而且不报错
    • 面板服务是 systemctl --user enable --now: 已在运行时不会重启, 改完 web/*.py 必须
      restart 才生效(否则接口 404, 而内存里还是旧代码)

    安装: sudo dpkg -i collaplex-audio_1.0.9_all.deb(装完不自动接管, collaplex-audio start 才生效)

    Downloads
  • v1.0.8 717842f0a9

    v1.0.8 Stable

    edgevoid released this 2026-09-20 17:16:10 +08:00 | 2 commits to main since this release

    场所预设: 「电影院」「歌剧院」一键切 EQ + 混响

    影院和歌剧院最本质的差别是混响时间(0.40.8 s vs 1.41.8 s) —— 光切 EQ 不够, 所以把
    这两个入口从 EQ 预设里单独立出来, 做成一排「场所」按钮, 点一下同时切:

    场所 实际混响时间 湿量 EQ 取向
    电影院 0.4~0.8 s 0.35 X-curve 高频滚降 + sub 低频 = 厚, 暗, 有力
    歌剧院 1.4~1.8 s 0.78 木质厅堂温暖 + presence = 暖, 亮, 有细节

    EQ 依据

    • 电影院: 高频按 X-curve(ISO 2969 国际版, 2 kHz 以上约 -1.5 dB/oct, 实测
      2k -> 4k -> 8k -> 16k 逐段 -1.5)再叠银幕透声损失; 低频 2560 Hz +2.53 dB
      (影院 sub / LFE 通道的体感)
    • 歌剧院: 中低频 150400 Hz +2 dB(木质厅堂的温暖); 25 kHz +0.5~1 dB
      (没有扩声系统, 歌手和乐器的投射全靠这个 presence 区, 不能削); 高频只随空气吸收缓降
    • 两者在 3.15~5 kHz 相差 3 dB 且方向相反, 这是它们听感上最大的分野

    按钮亮绿框标示当前选中; 之后手动拖 EQ 滑块或湿量推子会自动取消高亮。
    总音量不在这套里 —— 那是个人听音响度, 不该切个场所就被改掉。

    实现上踩的一个坑

    wet 的 change handler 里是 await post(...) 之后才清高亮 —— 属于异步, 会在
    applyVenue 点亮之后才跑, 把高亮又清掉(第一轮 CDP 验收就是这么挂的)。改成在 dispatch
    那一刻用标志记录意图, handler 据此判断要不要清。

    安装: sudo dpkg -i collaplex-audio_1.0.8_all.deb(装完不自动接管, collaplex-audio start 才生效)

    Downloads
  • v1.0.7 2566307e6c

    v1.0.7 Stable

    edgevoid released this 2026-09-20 13:51:36 +08:00 | 3 commits to main since this release

    EQ 预设 +2: 「电影院」「歌剧院」(按现实场所声学设计)

    前 10 个是常见调音口味; 这两个按现实场所的声学特性设计, 不是随手画的微笑曲线。

    电影院 —— 厚, 暗, 有力

    • 高频按 X-curve(ISO 2969 国际版): 2 kHz 以上每倍频程约 -1.5 dB
      (北美 SMPTE 版是 -3 dB/oct, 更暗)。实测本预设 2k -> 4k -> 8k -> 16k 逐段 -1.5 dB
      再叠一层银幕透声损失(穿孔幕布在 4~10 kHz 的衰减)。
    • 低频 2560 Hz +2.53 dB: 影院有 sub / LFE 通道(标定电平比主声道高 10 dB)+ 厅内增益。
    • 中低频 200~400 Hz 略降: 银幕后扬声器 + 厅堂增益让这一段容易浑, 让出一点。

    歌剧院 —— 暖, 亮, 有细节

    • 中低频 150~400 Hz +2 dB: 木质地板/墙面的厅堂温暖(bloom), 大提琴/男中的厚度来源。
    • 25 kHz +0.51 dB: 歌剧院没有扩声系统, 歌手和乐器的投射全靠这个 presence 区 ——
      不能削(削了就闷), 这正是和影院最大的分野。
    • 极低频 20~40 Hz -1 dB: 没有电声强化, 自然厅堂里这一段本就不强。
    • 高频缓降: 10 kHz 以上 -0.5~-2 dB(比影院缓得多), 只有大空间的空气吸收。

    两者差异(实测平均)

    频段 电影院 歌剧院
    25~60 Hz +2.75 -0.62 影院重 +3.4 dB
    150~400 Hz -0.10 +1.90 歌剧院足 +2.0 dB
    1~2 kHz -0.25 +0.25 基本持平
    3.15~5 kHz -2.00 +1.00 歌剧院足 +3.0 dB
    8~16 kHz -4.25 -0.75 歌剧院足 +3.5 dB

    搭配建议

    混响时间才是这两个场所最本质的差别, 影响比 EQ 更大:

    场所 实际混响时间 建议湿量
    电影院(带银幕的放映厅) 0.4~0.8 s 0.30~0.40
    歌剧院 1.4~1.8 s 0.70~0.85

    面板上直接拖, 实时生效。

    顺带修

    .presets button.on 的样式一直定义了, 但没有任何代码加这个类 —— 点了预设没有选中反馈。
    现在点预设会高亮该按钮, 手动拖滑块 / 全部归零则自动取消高亮。

    安装: sudo dpkg -i collaplex-audio_1.0.7_all.deb(装完不自动接管, collaplex-audio start 才生效)

    Downloads
  • v1.0.6 3b6ce2c57e

    v1.0.6 Stable

    edgevoid released this 2026-09-20 13:40:19 +08:00 | 4 commits to main since this release

    参数持久化: 面板改动落盘, 重启后自动恢复

    修的坑: open_store() 原本是"文件不存在就零填充创建", 而 /dev/shm 是 tmpfs ——
    重启后参数全变 0。听感上不是"参数没保存", 而是**"混响突然没了"**(湿量 0),
    极易被当成链路故障去查。

    环节 做什么
    面板改参数 落盘到 params.json(值没变不写)
    DSP 启动 检测到共享内存是新建的 → 自动从落盘恢复
    落盘缺失/损坏 退回默认(全平直 / 0 dB / 0.3)

    实测(清空 /dev/shm 参数 + 重启 pipewire): 参数自动恢复, 与落盘逐值一致 ——
    总音量 +2.0 / 湿量 0.600 / EQ 非零 30 段 ✓

    落盘位置 ~/.local/state/cinema-spatial/params.json(与响度归一化的 loudness.json 同目录)。


    本包同时包含 v1.0.5 的修复 —— 低频脏 + 沙沙:

    • 根因: 归一化把内容顶到满刻度 → 软限幅一半以上时间介入(峰值因子 14→2 dB), 宽频一削,
      互调产物堆低频(脏)、高频碎屑(沙沙)
    • 四条修: LN_MAX_BOOST 20→12 / HRIR 同相合并响应均衡(−7.2 dB, 不是标准 DF-EQ) /
      房间 IR 低频校平(−21 dB, 湿路 gain 0.4→0.61 补偿) / EQ 微笑曲线改平直
    • 复测: 低频 20~200 Hz +13.6 → +0.2 dB, 超软限幅阈值样本 50.49% → 0.00%
    • 另修: 混响立体声丢失(IR 保双声道 + convolver channel 0/1)

    安装: sudo dpkg -i collaplex-audio_1.0.6_all.deb(装完不自动接管, collaplex-audio start 才生效)

    Downloads
  • v1.0.5 5c6a982210

    v1.0.5 Stable

    edgevoid released this 2026-09-20 13:06:15 +08:00 | 5 commits to main since this release

    修复: 低频脏 / 沙沙 —— 根因是电平被顶穿后软限幅常年介入

    诊断: 链路的线性部分其实干净(20~330 Hz 峰谷 2.1 dB, 无驻波; 纯音谐波 −116 dB)。
    脏与沙沙来自: 归一化把内容提到满刻度, 宽频信号一削, 互调产物堆在低频(听感"脏")、
    高频碎屑(听感"沙沙")。

    实测(同一粉噪素材, 只改电平):

    条件 峰值因子 超软限幅阈值样本
    直通(不过链, 参考) 14.1 dB 0%
    绕归一化 13.5 dB 0%
    整链 修前 2.0 dB 50.49%
    整链 修后 12.2 dB 0.00%

    四条修复

    1. LN_MAX_BOOST 20 → 12(默认值) —— 20 dB 的提升上限让任何轻内容都被顶穿满刻度
    2. HRIR 同相合并响应均衡(lowshelf 500 Hz −7.2 dB Q=0.707, 12 条共用一条曲线,
      方向线索 ILD/ITD 不受影响): 这套 HRIR 是原始测量数据、没做过漫反射场均衡
    3. 房间 IR 低频校平(lowshelf 300 Hz −21 dB Q=0.70): 它低频比中频高 24.5 dB,
      压到 +5.8 dB 留一点厚度; IR 峰值掉 3.7 dB, 湿路 gain 0.4 → 0.61 补偿
    4. EQ 微笑曲线改回平直(20~63 Hz 原本 +2.5 dB、高频 +3 dB)

    复测(同素材同脚本)

    指标 修前 修后
    低频(20~200 Hz 相对 1 kHz) +13.6 dB +0.2 dB
    整链峰值因子 2.0 dB 12.2 dB
    超软限幅阈值样本 50.49% 0.00%
    峰值 / RMS −0.1 / −2.1 dBFS −6.2 / −18.4 dBFS

    另修: 混响立体声丢失

    工具/重做混响IR.py 曾把双声道房间 IR 压成单声道(取 x[:, 0]), 而 revL/revR
    读同一个文件 -> 两路湿声完全同源、混响糊在正中央。现在 IR 保持双声道, conf 用
    PipeWire convolver 的 channel = 0 / channel = 1 分别取左右(实测验证: 用"左零右真"
    的探针文件, 右耳尾巴不塌, 左右差仅 1.1 dB)。

    安装

    sudo dpkg -i collaplex-audio_1.0.5_all.deb
    collaplex-audio start      # 装完不自动接管, 要手动 start
    

    细节见 README「IR 校正」与「实测(2026-09-20)」两节。

    Downloads
  • v1.0.4 43919f5f97

    edgevoid released this 2026-09-19 20:49:06 +08:00 | 9 commits to main since this release

    日常使用形态: 装完起一次, 之后开机自动可用。

    链路不需要服务 —— 4 份 conf 部署在 ~/.config/pipewire/pipewire.conf.d/, PipeWire 一起来就自动加载, 虚拟节点与 DSP 进程跟着起; 默认输出由 WirePlumber 记忆。
    面板用 systemd 用户服务 collaplex-audio-panel.service(登录即起, Restart=no), start 时自动装上并 enable。

    因为音频设备与 PipeWire 都是用户级的, 开机自启实际是登录自启。要还原: systemctl --user disable --now collaplex-audio-panel.service 加 collaplex-audio stop。

    另外两个修复:

    1. 去掉 deb 的 Recommends: google-chrome|chromium —— 在 snapd 被 mask 的机器上 apt 会因为它失败而卡住依赖配置(本次实测踩到), chromium 只是面板截图可选件。
    2. collaplex-audio stop 原来只按绝对路径找面板进程, 面板若以相对路径起过就漏杀 -> 端口被占、新服务起不来; 改为按后段 web/server.py 匹配。

    实测(重启 PipeWire 等价开机): 6 节点自动重建、默认输出回到 collaplex_vsink、6 个 DSP 自动起、面板 active。

    其余同 v1.0.2(修回声)。安装: sudo dpkg -i collaplex-audio_1.0.4_all.deb, 然后 collaplex-audio start

    Downloads
  • v1.0.2 3aa10897ba

    edgevoid released this 2026-09-19 20:32:40 +08:00 | 10 commits to main since this release

    修掉混响路径里那个明显的回声。

    根因: 房间 IR 是含传播延迟的房间响应 —— 前 20ms 是静音、主峰在 30ms(= 声源到麦克风 10.3m 的声程), 而且前两次反射与直达声同量级(30ms 处 0dB, 40ms 处 -1.6dB)。干声(HRTF)是零延迟的, 两路一相加就成了湿声晚 30ms 还很响 = 回声。

    取证: 播单脉冲、录数字输出。修前主峰后 120ms 处有一个 -26dBFS 的孤立峰(比周围高 12dB); 湿量设 0 则完全没有 -> 确认出在混响路径, 与 DSP 进程无关(6 节点/6 进程不重复)。

    修法: IR 裁掉前 22ms 纯静音 + 前 55ms 余弦渐入(直达声段 0 -> -23.6dB), 只留混响尾; 再把卷积增益重标 0.126 -> 0.4 补回混响量。修后包络单调衰减, 无孤立峰。

    原 IR 备份为 房间混响IR-96k.orig.wav, 处理脚本 工具/重做混响IR.py, 取证脚本 测试/test_echo.py。

    其余同 v1.0.1(start / stop / web 三个动作)。

    Downloads
  • v1.0.1 ddd642b772

    edgevoid released this 2026-09-19 20:13:31 +08:00 | 12 commits to main since this release

    主命令改成日常三个动作(load进系统后手动 start 才接管)。

    collaplex-audio start 启动: 接管系统音频(部署配置 + 重载 PipeWire + 自检)
    collaplex-audio stop 停止: 恢复系统默认输出, 同时关掉面板
    collaplex-audio web 面板: 起控制面板并打开浏览器

    实测: stop 后默认输出回到硬件设备(alsa_output.pci-0000_05_00.1.pro-output-3)、conf.d 清空;
    start 后 6 节点 + 6 个 DSP 进程全回、默认输出回到 collaplex_vsink;
    web 起面板 8789 并打开浏览器。

    其余同 v1.0.0。安装: sudo dpkg -i collaplex-audio_1.0.1_all.deb, 然后 collaplex-audio start

    Downloads
  • v1.0.0 489a8a79c2

    edgevoid released this 2026-09-19 20:04:42 +08:00 | 13 commits to main since this release

    第二代重构版(对第一代 cinema-spatial 推倒重构)。

    链路: 虚拟声卡 -> 响度归一化 -> 双耳 HRTF(SADIE II H4, 96kHz) + 房间混响 -> 32 段 EQ + 总音量 -> 数字输出。共 6 节点 + 6 DSP 进程。

    实测: 归一化输入差 20.00dB -> 输出差 0.00dB; HRTF 左右相关 0.679; 湿量 1 时 3 秒混响尾巴; 总音量 +12dB 输出峰值 -1.11 dBFS 不削波; 纯音谐波 -91 dB; 面板刷新 62Hz。

    面板: 4 个双声道电平表 + 归一化电平/动态增益 + 湿度/总音量滑块 + 32 段 EQ(10 预设)。

    安装: sudo dpkg -i collaplex-audio_1.0.0_all.deb && collaplex-audio install
    依赖: python3-numpy python3-scipy pipewire wireplumber。装完不动系统音频, 手动 install 才接管。

    Downloads