From 43919f5f9742e3e046e73356ebd917be700a6095 Mon Sep 17 00:00:00 2001 From: lou Date: Sat, 19 Sep 2026 20:48:47 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=80=E6=9C=BA=E8=87=AA=E5=90=AF:=20?= =?UTF-8?q?=E9=93=BE=E8=B7=AF=E9=9D=A0=20PipeWire=20=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=20conf(=E4=B8=8D=E9=9C=80=E8=A6=81=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1);=20=E9=9D=A2=E6=9D=BF=E5=8A=A0=20systemd=20--user=20?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=20collaplex-audio-panel.service(start=20?= =?UTF-8?q?=E6=97=B6=E8=87=AA=E5=8A=A8=E8=A3=85=E5=B9=B6=20enable,=20Resta?= =?UTF-8?q?rt=3Dno);=20=E4=BF=AE=20stop=20=E6=BC=8F=E6=9D=80=E6=8C=89?= =?UTF-8?q?=E7=9B=B8=E5=AF=B9=E8=B7=AF=E5=BE=84=E8=B5=B7=E7=9A=84=E9=9D=A2?= =?UTF-8?q?=E6=9D=BF=E8=BF=9B=E7=A8=8B(=E7=AB=AF=E5=8F=A3=E8=A2=AB?= =?UTF-8?q?=E5=8D=A0=E5=AF=BC=E8=87=B4=E6=96=B0=E6=9C=8D=E5=8A=A1=E8=B5=B7?= =?UTF-8?q?=E4=B8=8D=E6=9D=A5);=20=E6=89=93=E5=8C=85=E5=B8=A6=E4=B8=8A=20s?= =?UTF-8?q?ystemd/;=20README=20=E5=8A=A0=E8=87=AA=E5=90=AF=E6=AE=B5=20+=20?= =?UTF-8?q?=E8=BF=9B=E7=A8=8B=E5=8C=B9=E9=85=8D=E8=A6=81=E6=8C=89=E5=90=8E?= =?UTF-8?q?=E6=AE=B5=E7=9A=84=E5=9D=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 19 +++++++++++++++++++ bin/collaplex-audio | 3 ++- systemd/collaplex-audio-panel.service | 15 +++++++++++++++ 打包deb.sh | 3 +-- 脚本/安装.sh | 15 +++++++++++++++ 5 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 systemd/collaplex-audio-panel.service diff --git a/README.md b/README.md index 8ae707f..212dda0 100644 --- a/README.md +++ b/README.md @@ -63,6 +63,22 @@ collaplex-audio web # 面板: 起控制面板并打开浏览器 `WET=0.4 bash 脚本/安装.sh` 可指定初始湿量(默认 0.3)。 面板端口可换: `WEB_PORT=8899 collaplex-audio web`。 +### 开机自启 + +**链路不需要服务** —— 4 份 conf 部署在 `~/.config/pipewire/pipewire.conf.d/`, PipeWire 一起来 +就自动加载, 虚拟节点与 DSP 进程跟着起; 默认输出由 WirePlumber 记忆, 开机仍是 `collaplex_vsink`。 +所以 `start` 跑过一次就长期有效。 + +**面板**用 systemd 用户服务 `collaplex-audio-panel.service` 自启(登录即起, `Restart=no`), +`start` 时会自动装上并 enable。不要了: + +```sh +systemctl --user disable --now collaplex-audio-panel.service # 取消自启并停掉面板 +collaplex-audio stop # 连链路一起还原成系统默认输出 +``` + +音频设备与 PipeWire 都是**用户级**的, 所以"开机自启"实际是**登录自启**。 + ## 控制面板 `collaplex-audio web` → http://127.0.0.1:8789 @@ -125,6 +141,8 @@ collaplex-audio web # 面板: 起控制面板并打开浏览器 - **峰值相关的失真, 纯音测不出来** —— 纯音峰值因子仅 3 dB, 音乐是 10~14 dB。 必须用高峰值因子素材测, 见 `测试/test_limit.py`。 - **改完 `watchdog` / 常驻脚本要重启巡检** —— 旧定义还在内存里按旧参数拉服务。 +- **按命令行找进程要按"后段"匹配** —— 面板若用相对路径起过(`.venv/bin/python web/server.py`), + 只匹配绝对路径会漏杀 → 端口被占、新服务起不来。写 `*web/server.py*` 这种够特异的后段。 - 清进程时匹配串要够特异: 写 `*dsp/eq.py*` 会匹配到**自己的命令行**而自杀, 至少写成 `*python*dsp/eq.py*`。 - **房间 IR 当混响用之前, 必须清掉里面的直达声 / 传播延迟** —— 否则就是**回声**。 @@ -197,4 +215,5 @@ uv run --with websocket-client python 测试/cdp_拖动验证.py # CDP 真鼠 | `hrir/` `reverb/` | HRIR(12 条)与房间 IR | | `脚本/安装.sh` `脚本/面板.sh` | 部署 / 起面板 | | `打包deb.sh` | 打 deb 到 `发布/` | +| `systemd/collaplex-audio-panel.service` | 面板自启模板(`start` 时装到 `~/.config/systemd/user/`) | | `工具/重做混响IR.py` | 剪掉房间 IR 的直达声(裁静音 + 渐入), 原文件备份 `.orig.wav` | diff --git a/bin/collaplex-audio b/bin/collaplex-audio index dc01374..7c13271 100755 --- a/bin/collaplex-audio +++ b/bin/collaplex-audio @@ -39,7 +39,8 @@ stop) rm -f "$CONF_DIR/10-collaplex-vsink.conf" "$CONF_DIR/20-collaplex-hrtf.conf" \ "$CONF_DIR/30-collaplex-eq.conf" "$CONF_DIR/91-clock.conf" for pid in $(pids "$ROOT/dsp/"); do kill "$pid" 2>/dev/null || true; done - for pid in $(pids "$ROOT/web/server.py"); do kill "$pid" 2>/dev/null || true; done + # 面板按相对路径起过(如 .venv/bin/python web/server.py), 只匹配绝对路径会漏, 用后段匹配 + for pid in $(pids "web/server.py"); do kill "$pid" 2>/dev/null || true; done rm -f /dev/shm/collaplex-eq /dev/shm/collaplex-loudness rm -f /dev/shm/collaplex-eq.lock /dev/shm/collaplex-loudness.lock systemctl --user restart pipewire pipewire-pulse wireplumber diff --git a/systemd/collaplex-audio-panel.service b/systemd/collaplex-audio-panel.service new file mode 100644 index 0000000..867573e --- /dev/null +++ b/systemd/collaplex-audio-panel.service @@ -0,0 +1,15 @@ +[Unit] +Description=Collaplex 音效 控制面板 (http://127.0.0.1:8789) +Documentation=http://127.0.0.1:8789 +After=pipewire.service +Wants=pipewire.service + +[Service] +Type=simple +Environment=PYTHONPATH=__ROOT__ +ExecStart=__PY__ __ROOT__/web/server.py __PORT__ +Restart=no +StandardOutput=null + +[Install] +WantedBy=default.target diff --git a/打包deb.sh b/打包deb.sh index a69147e..19ea544 100755 --- a/打包deb.sh +++ b/打包deb.sh @@ -22,7 +22,7 @@ rm -rf "$STAGE" mkdir -p "$STAGE/DEBIAN" "$STAGE/usr/share/collaplex-audio" "$STAGE/usr/bin" # ---- 源码 ---- -for d in dsp bin pipewire web hrir reverb 脚本; do +for d in dsp bin pipewire web hrir reverb 脚本 systemd; do cp -a "$ROOT/$d" "$STAGE/usr/share/collaplex-audio/" done cp "$ROOT/README.md" "$STAGE/usr/share/collaplex-audio/" @@ -43,7 +43,6 @@ Architecture: all Maintainer: Collaplex Installed-Size: ${SIZE} Depends: python3 (>= 3.10), python3-numpy, python3-scipy, pipewire, wireplumber -Recommends: google-chrome | chromium Section: sound Priority: optional Description: Collaplex 音效 — 全局音频的响度归一化 + 双耳 HRTF + 32 段 EQ + 房间混响 diff --git a/脚本/安装.sh b/脚本/安装.sh index 547b4b5..03655aa 100755 --- a/脚本/安装.sh +++ b/脚本/安装.sh @@ -107,3 +107,18 @@ for p in /proc/[0-9]*; do done echo "湿量进程数: $w (应为 2)" echo -n "默认输出: "; wpctl inspect @DEFAULT_SINK@ 2>/dev/null | grep -m1 "node.name" | sed 's/.*= //' + +# ---- 5. 面板自启(systemd --user, 登录即起) ---- +# 链路本身不需要服务: conf 在 ~/.config/pipewire/pipewire.conf.d/, PipeWire 起来就自动加载。 +UNIT_DIR="$HOME/.config/systemd/user" +mkdir -p "$UNIT_DIR" +sed -e "s|__ROOT__|$ROOT|g" -e "s|__PY__|$PY|g" -e "s|__PORT__|8789|g" \ + "$ROOT/systemd/collaplex-audio-panel.service" > "$UNIT_DIR/collaplex-audio-panel.service" +if command -v systemctl >/dev/null 2>&1; then + systemctl --user daemon-reload 2>/dev/null || true + if systemctl --user enable --now collaplex-audio-panel.service 2>/dev/null; then + echo "面板服务: 已启用(登录自启) http://127.0.0.1:8789" + else + echo "面板服务: 未能启用(可手动 collaplex-audio web)" + fi +fi