25 lines
969 B
Bash
25 lines
969 B
Bash
#!/usr/bin/env bash
|
|||
|
|
# Phase 0: 验证"系统播放音频 → monitor 源采集"链路
|
||
|
|
# 用法: ./loopback_test.sh <要播放的音频文件> <输出wav>
|
||
|
|
set -euo pipefail
|
||
|
|
SRC="${1:?usage: loopback_test.sh <file> <out.wav>}"
|
||
|
|
OUT="${2:?usage: loopback_test.sh <file> <out.wav>}"
|
||
|
|
|
||
|
|
echo "默认 sink : $(pactl get-default-sink)"
|
||
|
|
echo "默认 sink 的 monitor: $(pactl get-default-sink).monitor"
|
||
|
|
|
||
|
|
# 1) 后台开始录制默认输出的 monitor(48k 立体声 float32,与设备速率一致)
|
||
|
|
parec -d @DEFAULT_MONITOR@ --format=float32le --rate=48000 --channels=2 \
|
||
|
|
--file-format=wav "$OUT" &
|
||
|
|
REC=$!
|
||
|
|
sleep 0.6 # 等录制真正开始
|
||
|
|
|
||
|
|
# 2) 播放测试音频到默认输出
|
||
|
|
paplay --device="$(pactl get-default-sink)" "$SRC"
|
||
|
|
|
||
|
|
sleep 0.6
|
||
|
|
kill "$REC" 2>/dev/null || true
|
||
|
|
wait "$REC" 2>/dev/null || true
|
||
|
|
|
||
|
|
echo "采集完成: $OUT"
|
||
|
|
ffprobe -v error -show_entries format=duration -of csv=p=0 "$OUT" | awk '{printf "采集时长: %.2f s\n",$1}'
|