toes-audio/volume.sh
2026-04-17 11:14:45 -07:00

77 lines
2.4 KiB
Bash
Executable File

#!/bin/bash
# DAC3100 speaker-path helper
# Usage: ./volume.sh [dac] [driver] [analog]
# dac: 0-175 (digital volume, 127=0dB)
# driver: 0-3 (class-D gain: 6/12/18/24 dB)
# analog: 0-127 (analog volume, 127=0dB)
set -euo pipefail
CARD_ID="barepiaudio"
CARD_NAME="barepi-audio"
DEFAULT_DAC=127
DEFAULT_DRIVER=0
DEFAULT_ANALOG=50
find_card() {
awk -v id="$CARD_ID" -v name="$CARD_NAME" '
index($0, "[" id "]") || index($0, name) { print $1; exit }
' /proc/asound/cards
}
show_status() {
echo "Using ALSA card: $CARD ($CARD_NAME)"
amixer -c "$CARD" sget 'DAC' || true
amixer -c "$CARD" sget 'DAC Left Input' || true
amixer -c "$CARD" sget 'DAC Right Input' || true
amixer -c "$CARD" sget 'Output Left From Left DAC' || true
amixer -c "$CARD" sget 'Output Right From Right DAC' || true
amixer -c "$CARD" sget 'Speaker' || true
amixer -c "$CARD" sget 'Speaker Driver' || true
amixer -c "$CARD" sget 'Speaker Analog' || true
}
enable_speaker_path() {
echo "Enabling TLV320 speaker path..."
amixer -c "$CARD" sset 'DAC Left Input' 'Left Data' >/dev/null || true
amixer -c "$CARD" sset 'DAC Right Input' 'Right Data' >/dev/null || true
amixer -c "$CARD" sset 'Output Left From Left DAC' on >/dev/null || true
amixer -c "$CARD" sset 'Output Right From Right DAC' on >/dev/null || true
amixer -c "$CARD" sset 'Speaker' on >/dev/null || true
amixer -c "$CARD" sset 'HP Left' off >/dev/null || true
amixer -c "$CARD" sset 'HP Right' off >/dev/null || true
amixer -c "$CARD" sset 'HP Driver' 0 >/dev/null || true
amixer -c "$CARD" sset 'HP Driver' off >/dev/null || true
}
CARD="$(find_card || true)"
if [ -z "$CARD" ]; then
echo "Could not find ALSA card for $CARD_NAME." >&2
echo "Reboot after setup, then check /proc/asound/cards." >&2
exit 1
fi
if [ $# -eq 0 ]; then
show_status
exit 0
fi
DAC=${1:-$DEFAULT_DAC}
DRIVER=${2:-$DEFAULT_DRIVER}
ANALOG=${3:-$DEFAULT_ANALOG}
enable_speaker_path
echo "Setting levels..."
amixer -c "$CARD" sset 'DAC' "$DAC" "$DAC" >/dev/null
amixer -c "$CARD" sset 'Speaker Driver' "$DRIVER" >/dev/null || true
amixer -c "$CARD" sset 'Speaker Driver' on >/dev/null || true
amixer -c "$CARD" sset 'Speaker Analog' "$ANALOG" >/dev/null || true
alsactl store "$CARD" >/dev/null 2>&1 || alsactl store >/dev/null 2>&1 || true
echo ""
echo "Using ALSA card: $CARD ($CARD_NAME)"
echo "Set: dac=$DAC driver=$DRIVER analog=$ANALOG"
echo "Example: ./volume.sh 127 0 50"