He reescrito la función 'ajustar_volumen' original porque no funciona con todas las tarjetas de audio. Era esta
ajustar_volumen () {
if [ $1 ] ; then
amixer set Headphone $1% > /dev/null
fi
}
El problema es que la utilidad amixer se vale de un control para ajustar el volumen y, desafortunadamente, ese control puede recibir nombres distintos según qué tarjeta. Tengo dos pinchos de audio y cada uno usa un nombre distino: 'Headphone' y 'Speaker'.
El nombre del control se puede averiguar con el comando
root@OpenWrt:~# amixer scontrols
Simple mixer control 'Speaker',0
Simple mixer control 'Mic',0
Simple mixer control 'Auto Gain Control',0
La nueva función trabaja bien con mis dos tarjetas, pero puede ser que no funcione con otras
ajustar_volumen () {
if [ -z $control ] ; then
# Hay que averiguar el nombre del control para poder utilizarlo, ya que varía según qué tarjeta.
control=$(amixer scontrols | head -1 | sed "s/^Simple mixer control .//" | sed "s/.,0$//")
fi
if [ $1 ] ; then
amixer set $control $1% > /dev/null
fi
}
Tengo otro cacharro USB que no es exactamente un pincho de audio, pero que funciona como si lo fuera. Es una barra con dos altavoces que se engancha por debajo del monitor.

La nueva función lo reconoce como 'PCM'.
root@OpenWrt:~# amixer scontrols
Simple mixer control 'PCM',0
Saludos.