Não consegui criar uma solução adequada para que o alsamixer gerencie corretamente meu som.
Aqui está o meu comportamento desejado:
- Ao reinicializar, hibernar ou dormir e, em seguida, acordar, desejo preservar todos os níveis de alsamixer e as configurações de sigilo.
- A tecla mudo no meu teclado deve ativar o mudo, os botões de aumento e diminuição de volume devem aumentar ou diminuir o volume e, se aplicável, remover o bloqueio.
- Quando eu conecto fones de ouvido, deve haver uma configuração de volume diferente para eles e os níveis de volume devem se ajustar automaticamente. Não importa para mim se o mestre mudar ou se os níveis dos fones de ouvido / alto-falante mudarem. Só precisa ter certeza de que isso funciona com as teclas de volume {up, down}.
Eu uso XMonad e xbindkeys para mapear minhas teclas de volume / mudo para ações.
Atualmente:
"amixer set Master 2dB+"
XF86AudioRaiseVolume
"amixer set Master 2dB-"
XF86AudioLowerVolume
"/path/to/mute.sh"
XF86AudioMute
onde mute.sh é
FILE=$HOME/.mute
if [ -f $FILE ]; then
amixer set Master 'cat $FILE'
rm $FILE
else
amixer get Master\
| grep Mono\
| grep -P -o '[\d]{1,3}'\
| head -n 1\
> $FILE
amixer set Master 0
fi
Atualmente, quando eu reinicio meu computador, parece que os canais aleatórios estão mudos. E meu script mudo na verdade apenas define o nível de volume para zero, o que não é ideal. No lado positivo, conectar fones de ouvido parece ajustar o nível do volume.
Alguma idéia de como eu poderia tornar o comportamento de silenciar e reiniciar melhor?
----- EDITAR 1 -----
Alternar entre mestre também interrompe o canal do palestrante:
$ amixer get Speaker | tail -n 1
Front Right: Playback 87 [100%] [0.00dB] [on]
$ amixer set Master toggle
Simple mixer control 'Master',0
Capabilities: pvolume pvolume-joined pswitch pswitch-joined penum
Playback channels: Mono
Limits: Playback 0 - 87
Mono: Playback 87 [100%] [0.00dB] [off]
$ amixer set Master unmute
Simple mixer control 'Master',0
Capabilities: pvolume pvolume-joined pswitch pswitch-joined penum
Playback channels: Mono
Limits: Playback 0 - 87
Mono: Playback 87 [100%] [0.00dB] [on]
$ amixer get Speaker | tail -n 1
Front Right: Playback 87 [100%] [0.00dB] [off]
----- EDIT 2 -----
A alternância é estranha:
$ for x in Master Headphone Speaker; do amixer set $x toggle ;done
Simple mixer control 'Master',0
Mono: Playback 87 [100%] [0.00dB] [on]
Simple mixer control 'Headphone',0
Front Left: Playback 87 [100%] [0.00dB] [on]
Front Right: Playback 87 [100%] [0.00dB] [on]
Simple mixer control 'Speaker',0
Front Left: Playback 87 [100%] [0.00dB] [off]
Front Right: Playback 87 [100%] [0.00dB] [off]
$ for x in Master Headphone Speaker; do amixer set $x toggle ;done
Simple mixer control 'Master',0
Mono: Playback 87 [100%] [0.00dB] [on]
Simple mixer control 'Headphone',0
Front Left: Playback 87 [100%] [0.00dB] [on]
Front Right: Playback 87 [100%] [0.00dB] [on]
Simple mixer control 'Speaker',0
Front Left: Playback 87 [100%] [0.00dB] [on]
Front Right: Playback 87 [100%] [0.00dB] [on]