release: v1.0.1 -- 空间音频设备自检 + README 补4条实测坑(峰值因子/音量分层/USB profile/pw-cli info)
This commit is contained in:
@@ -99,6 +99,18 @@ mpv-影院 电影.mkv # 只给 mpv 用, 不依赖全局设置(适合 A/B 对比
|
||||
8. **`adelay` + `join` 合成多声道素材不可靠**:曾静默产出 0.25 秒的单声道文件。
|
||||
改用 `aevalsrc` 直接合成。
|
||||
9. **`type=time` 是时域卷积(保真)**;默认的 `type=freq` 走 FFT,会削高频。
|
||||
10. **★ 测试素材必须匹配真实内容的"峰值因子"**:用平稳的粉噪做压力测试,看着余量充足,
|
||||
一放电影里爆炸/撞击那种高峰值因子瞬态就削 —— 同样听感响度下,瞬态峰值能再高出 10dB 以上。
|
||||
**校准要用真实片源,或至少混入冲击型素材。**
|
||||
11. **★ 每一层音量都吃动态余量,改一处就要记账**:虚拟声卡音量与设备(耳机)音量
|
||||
**串联在同一条链上**。曾把设备音量从 0.66 提到 1.00(+3.6dB)却没算进余量账,
|
||||
结果一有瞬态就削。**设备自身的出厂音量是预留余量,不要顺手拉满。**
|
||||
12. **★ USB 音频设备重启后 profile 会变**(`iec958-stereo` ↔ `analog-stereo`),
|
||||
设备 `node.name` 随之后缀改变 → 配置里记的 `node.target` 失效 → WirePlumber 回落到其它输出
|
||||
(实测落到 HDMI,表现为"没声音"或"声音从显示器出来")。
|
||||
本项目的 `空间音频 开` 已带自检:设备名失效时自动重新探测并重建配置。
|
||||
13. **判定设备是否存在不能用 `pw-cli info`**:它对不存在的名字也返回成功。要用 `pw-dump`
|
||||
按 `node.name` 精确比对。
|
||||
|
||||
## 数据来源
|
||||
|
||||
|
||||
+21
-63
@@ -1,73 +1,31 @@
|
||||
#!/bin/bash
|
||||
# 打 release + 上传 deb 资产到 Gitea (2026-09-12)
|
||||
# 打 release + 上传 deb 到 Gitea。用法: 发布release.sh [版本号]
|
||||
set -eu
|
||||
cd "/home/lou/桌面/工作区/实验/空间音频"
|
||||
DEB="$HOME/桌面/collaplex-cinema-spatial_1.0.0_all.deb"
|
||||
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"
|
||||
AUTH="edgevoid:147427"
|
||||
|
||||
echo "=== 1. 重新打包(含最新脚本) ==="
|
||||
echo "=== 打包 $VER ==="
|
||||
rm -f "$DEB"
|
||||
bash 打包deb.sh 2>&1 | tail -4
|
||||
LOCAL_SIZE=$(stat -c%s "$DEB")
|
||||
LOCAL_MD5=$(md5sum "$DEB" | cut -d' ' -f1)
|
||||
echo "本地: $LOCAL_SIZE 字节 md5=$LOCAL_MD5"
|
||||
bash 打包deb.sh 2>&1 | tail -3
|
||||
[ -f "$DEB" ] || { echo "打包失败"; exit 1; }
|
||||
echo "本地: $(stat -c%s "$DEB") 字节"
|
||||
|
||||
echo
|
||||
echo "=== 2. 创建 release v1.0.0 ==="
|
||||
python3 - <<'PYEOF' > /tmp/rel_body.json
|
||||
import json
|
||||
body = """## collaplex-cinema-spatial 1.0.0
|
||||
echo "=== 建 release v$VER ==="
|
||||
RID=$(curl -s -X POST "$API/releases" -u edgevoid:147427 -H "Content-Type: application/json" -d "{\"tag_name\":\"v$VER\",\"name\":\"v$VER\",\"body\":\"collaplex-cinema-spatial $VER - 耳机电影院空间音频 (PipeWire filter-chain + SADIE-II HRTF, 96kHz/24bit). 安装: sudo dpkg -i ${PKG}_${VER}_all.deb; systemctl --user restart pipewire. 本版: 空间音频命令增加设备自检(USB profile 变化致 target 失效时自动重建), 输出目标改为自动探测物理设备(优先USB), 去硬编码.\"}" | python3 -c "import sys,json; print(json.load(sys.stdin).get('id',''))")
|
||||
echo "release id: $RID"
|
||||
[ -n "$RID" ] || exit 1
|
||||
|
||||
\u8033\u673a\u4e0a\u7684\u7535\u5f71\u9662\u7a7a\u95f4\u97f3\u9891 \u2014\u2014 PipeWire filter-chain \u865a\u62df\u58f0\u5361 + SADIE-II \u771f\u4eba HRTF\uff0c\u5168\u94fe\u8def 96kHz/24bit\u3002
|
||||
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"
|
||||
|
||||
### \u5b89\u88c5
|
||||
|
||||
```
|
||||
sudo dpkg -i collaplex-cinema-spatial_1.0.0_all.deb
|
||||
systemctl --user restart pipewire pipewire-pulse wireplumber
|
||||
```
|
||||
|
||||
\u4f9d\u8d56: pipewire libmysofa1 mpv
|
||||
|
||||
### \u7528\u6cd5
|
||||
|
||||
```
|
||||
\u7a7a\u95f4\u97f3\u9891 \u5f00 # \u5168\u5c40\u5207\u5230\u7acb\u4f53\u58f0\u4e0a\u6df7\u7248(\u63a8\u8350)
|
||||
\u7a7a\u95f4\u97f3\u9891 \u5f005.1 # \u5168\u5c40\u5207\u5230 5.1 \u76f4\u901a\u7248
|
||||
\u7a7a\u95f4\u97f3\u9891 \u5173 # \u5207\u56de\u7269\u7406\u8bbe\u5907
|
||||
\u7a7a\u95f4\u97f3\u9891 \u72b6\u6001 # \u67e5\u770b\u72b6\u6001
|
||||
mpv-\u5f71\u9662 \u7535\u5f71.mkv # \u53ea\u7ed9 mpv \u7528
|
||||
```
|
||||
|
||||
### \u8bf4\u660e
|
||||
|
||||
- HRTF \u7528 SADIE-II \u771f\u4eba\u53d7\u8bd5\u8005 H4\uff0c96K/24bit/512tap
|
||||
- \u7acb\u4f53\u58f0\u6e90\u81ea\u52a8\u77e9\u9635\u4e0a\u6df7\uff0c\u4e0d\u9700\u8981\u591a\u58f0\u9053\u7247\u6e90
|
||||
- \u82e5\u65e0\u58f0: python3 /usr/share/cinema-spatial/\u751f\u6210\u914d\u7f6e.py \u91cd\u65b0\u63a2\u6d4b\u8f93\u51fa\u8bbe\u5907
|
||||
"""
|
||||
print(json.dumps({"tag_name": "v1.0.0", "name": "v1.0.0", "body": body}, ensure_ascii=False))
|
||||
PYEOF
|
||||
|
||||
RELEASE_ID=$(curl -s -X POST "$API/releases" -u "$AUTH" -H "Content-Type: application/json" \
|
||||
--data-binary @/tmp/rel_body.json \
|
||||
| python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('id','')); " 2>/dev/null)
|
||||
echo "release id: $RELEASE_ID"
|
||||
|
||||
echo
|
||||
echo "=== 3. 上传 deb 资产 ==="
|
||||
curl -s -X POST "$API/releases/$RELEASE_ID/assets?name=collaplex-cinema-spatial_1.0.0_all.deb" \
|
||||
-u "$AUTH" -H "Content-Type: application/octet-stream" \
|
||||
--data-binary "@$DEB" -o /tmp/upl.json -w "上传 HTTP %{http_code}\n"
|
||||
|
||||
echo
|
||||
echo "=== 4. ★ 逐字节核对 ==="
|
||||
curl -s "$API/releases/$RELEASE_ID" -u "$AUTH" | python3 -c "
|
||||
echo "=== 逐字节核对 ==="
|
||||
curl -s "$API/releases/$RID" -u edgevoid:147427 | python3 -c "
|
||||
import sys, json
|
||||
d = json.load(sys.stdin)
|
||||
print('release:', d.get('tag_name'), '|', d.get('name'))
|
||||
for a in d.get('assets', []):
|
||||
print(' 资产:', a['name'], '|', a['size'], '字节')
|
||||
print(' 下载:', a.get('browser_download_url',''))
|
||||
for a in json.load(sys.stdin).get('assets', []):
|
||||
print(' 远端', a['size'], '字节', a['name'])
|
||||
print(' 下载', a.get('browser_download_url',''))
|
||||
"
|
||||
echo "本地字节: $LOCAL_SIZE 本地md5: $LOCAL_MD5"
|
||||
echo " 本地 $(stat -c%s "$DEB") 字节"
|
||||
|
||||
Reference in New Issue
Block a user