Add a C++/Qt6/CMake CLI prototype that captures the default sink monitor through libpulse and transcribes it in-process with Qwen3-ASR via libllama/libmtmd. Add phase 0/1 verification docs. 新增实时字幕命令行原型:libpulse 采集默认输出 monitor,进程内用 libllama/libmtmd 跑 Qwen3-ASR 推理。附阶段 0/1 验证文档。
26 lines
969 B
Bash
Executable File
26 lines
969 B
Bash
Executable File
#!/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}'
|