Files
cinema-spatial/发布release.sh
T

33 lines
2.8 KiB
Bash

#!/bin/bash
# 打 release + 上传 deb 到 Gitea。用法: 发布release.sh [版本号]
set -eu
cd "$(dirname "$(readlink -f "$0")")"
VER="${1:-$(grep -oP '^VER="\K[^"]+' 打包deb.sh)}"
PKG="collaplex-cinema-spatial"
DEB="$HOME/桌面/${PKG}_${VER}_all.deb"
API="http://8.136.202.225:3000/api/v1/repos/edgevoid/cinema-spatial"
echo "=== 打包 $VER ==="
rm -f "$DEB"
bash 打包deb.sh 2>&1 | tail -3
[ -f "$DEB" ] || { echo "打包失败"; exit 1; }
echo "本地: $(stat -c%s "$DEB") 字节"
echo "=== 建 release v$VER ==="
BODY="collaplex-cinema-spatial $VER - 耳机电影院空间音频 (PipeWire filter-chain + SADIE-II HRTF, 96kHz/24bit)\n\n核心技术: 镜像法房间声学追踪(0-80ms 早期反射, 8473 条镜面路径) + Sabine 统计尾音(80ms-2s) -> 96kHz 真实房间 IR 双耳卷积; 湿量按能量归一(湿量 G 时湿路 = 干路 + 20log10 G)。不是 Freeverb/Schroeder 类算法混响。\n\n本版新增/修复:\n- 单声道设备支持: 单声道蓝牙音响/耳机连不上(链输出是 2 声道 FL/FR, 单声道设备只有 1 个 MONO 端口) -> 新增单声道合并(自动/开/关), 默认按目标设备声道数自动判定\n- 切换设备不再重启 PipeWire: 新增运行期重连(链输出本质是 stream, 端口可运行期改连) -> 蓝牙设备不再被重启带掉\n- 修复'重启后目标失效': 原来固定 sleep 4 就判死, 而蓝牙/USB 设备要 3~8 秒重连 -> 改为轮询等待(最多 20 秒), 回退探测跳过显卡/HDMI\n- 修复削波: 房间混响 IR 原来只按峰值归一, 能量增益 +11dB, 处理后峰值冲到 +12dBFS -> 改为能量归一(sigma ir^2 = 1)\n- 电平表采集: 处理后电平改为按端口 id 显式连线读取链输出, 杜绝 pw-record 静默回退到麦克风\n- 面板新增'核心技术'说明区; 新增输入增益(削波余量)滑块\n- 打包: control 版本号改为跟随 VER(旧版恒为 1.0.0 致 dpkg 无法升级), 补入 音频状态.py 与 web/ 面板\n\n安装: sudo dpkg -i ${PKG}_${VER}_all.deb; systemctl --user restart pipewire pipewire-pulse"
RID=$(curl -s -X POST "$API/releases" -u edgevoid:147427 -H "Content-Type: application/json" -d "{\"tag_name\":\"v$VER\",\"name\":\"v$VER\",\"body\":\"$BODY\"}" | python3 -c "import sys,json; print(json.load(sys.stdin).get('id',''))")
echo "release id: $RID"
[ -n "$RID" ] || exit 1
echo "=== 上传资产 ==="
curl -s -X POST "$API/releases/$RID/assets?name=$(basename "$DEB")" -u edgevoid:147427 -H "Content-Type: application/octet-stream" --data-binary "@$DEB" -o /dev/null -w "上传 HTTP %{http_code}\n"
echo "=== 逐字节核对 ==="
curl -s "$API/releases/$RID" -u edgevoid:147427 | python3 -c "
import sys, json
for a in json.load(sys.stdin).get('assets', []):
print(' 远端', a['size'], '字节', a['name'])
print(' 下载', a.get('browser_download_url',''))
"
echo " 本地 $(stat -c%s "$DEB") 字节"