app/ = /opt/callrec (Node-Backend, Vite-Frontend, Python-Inferenz, Audio-Skripte, rkllm_server.cpp), system/ = systemd-Units, WirePlumber/PipeWire-Drop-ins, sudoers. Modelle, Binaries, Aufnahmen und node_modules bleiben draussen (.gitignore). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
26 lines
1012 B
Bash
26 lines
1012 B
Bash
#!/bin/bash
|
|
# Clean poll-based volume bridge (pure ALSA, no PipeWire).
|
|
# Windows "Source/Sink" speaker volume -> gadget control numid=7 (PCM Capture
|
|
# Volume, 0-100). Applied to ES8323 analog output (Output 1/2, 0-33) only when it
|
|
# actually changes (poll every 200ms) so we don't hammer the mixer on the gadget's
|
|
# ~10Hz async rate-feedback events.
|
|
set -u
|
|
CG=UAC2Gadget
|
|
CE=0
|
|
last=-1; lastm=-1
|
|
while true; do
|
|
v=$(amixer -c "$CG" cget numid=7 2>/dev/null | awk -F= '/: values=/{print $2; exit}')
|
|
m=$(amixer -c "$CG" cget numid=6 2>/dev/null | awk -F= '/: values=/{print $2; exit}')
|
|
if [ -n "$v" ] && { [ "$v" != "$last" ] || [ "$m" != "$lastm" ]; }; then
|
|
o=$(( v * 25 / 100 ))
|
|
amixer -c "$CE" sset 'Output 1' "$o" >/dev/null 2>&1
|
|
amixer -c "$CE" sset 'Output 2' "$o" >/dev/null 2>&1
|
|
case "$m" in
|
|
off|0) amixer -c "$CE" sset 'Headphone' off >/dev/null 2>&1 ;;
|
|
*) amixer -c "$CE" sset 'Headphone' on >/dev/null 2>&1 ;;
|
|
esac
|
|
last="$v"; lastm="$m"
|
|
fi
|
|
sleep 0.2
|
|
done
|