#!/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