Files
edgevoid 68db84a10c 初始化: 耳机电影院空间音频(PipeWire filter-chain + SADIE-II HRTF)
- 两个虚拟声卡: 5.1 直通版 / 立体声矩阵上混版
- 全链路 96kHz/24bit, SADIE-II 真人 HRTF 96K/512tap
- 命令: 空间音频(开关) / mpv-影院(单程序)
- deb 打包 + 验收测试脚本
- README 记录 9 个实测踩坑(增益校准/采样率/相位等)
2026-09-12 23:52:43 +08:00

40 lines
1.7 KiB
Bash

#!/bin/bash
# 排查 sofalizer 为什么没做出双耳差异
set -u
cd "/home/lou/桌面/工作区/实验/空间音频"
SOFA=/usr/share/libmysofa/MIT_KEMAR_normal_pinna.sofa
echo "===== 1. sofalizer 支持哪些参数 ====="
ffmpeg -hide_banner -h filter=sofalizer 2>&1 | sed -n '1,45p'
echo
echo "===== 2. 详细日志跑一次(找 hrtf/layout/channel 相关) ====="
ffmpeg -y -v verbose -i 51-test.wav \
-af "sofalizer=sofa=$SOFA:type=freq:radius=1.2" \
-c:a pcm_s16le /tmp/b2.wav 2>&1 | grep -iE "sofal|hrtf|layout|channel|error|warn|invalid|fail" | head -25
echo
echo "===== 3. 输出到底是什么布局 ====="
ffprobe -v error -show_entries stream=channels,channel_layout,codec_name -of default=nw=1 /tmp/b2.wav
echo
echo "===== 4. 单方向测试: 只有左前一个脉冲, 渲染后左耳该明显响于右耳 ====="
ffmpeg -y -hide_banner -loglevel error -f lavfi -i "anoisesrc=d=0.3:c=pink:a=0.7:r=48000" \
-af "pan=5.1|FL=c0|FR=0*c0|FC=0*c0|LFE=0*c0|BL=0*c0|BR=0*c0" -t 0.5 -c:a pcm_s16le /tmp/onlyFL.wav
ffmpeg -y -hide_banner -loglevel error -i /tmp/onlyFL.wav \
-af "sofalizer=sofa=$SOFA:type=freq:radius=1.2" -c:a pcm_s16le /tmp/FL_hrtf.wav
python3 - <<'PY'
import struct, wave
def chan(p, i):
with wave.open(p) as w:
ch, n = w.getnchannels(), w.getnframes()
raw = w.readframes(n)
s = struct.unpack("<%dh" % (len(raw)//2), raw)
return [float(s[j]) for j in range(i, len(s), ch)]
for label, path in (("输入(只有FL)", "/tmp/onlyFL.wav"), ("sofalizer 输出", "/tmp/FL_hrtf.wav")):
L, R = chan(path, 0), chan(path, 1)
el = sum(x*x for x in L) ** 0.5
er = sum(x*x for x in R) ** 0.5
print(" %-16s L能量=%9.1f R能量=%9.1f L/R=%.3f" % (label, el, er, (el/er) if er else 0))
PY