Sterowanie głośnością za pomocą klawiatury

From FluxboxPL.org

Spis treści

Wstęp

Poniższe howto ma celu pokazać jak w prosty sposób sterować głośnością mixera pod Fluxboksem za pomocą klawiatury.

Zakładamy, że naszym serwerem dźwięku jest ALSA (warunek konieczny) oraz posiadamy tylko jedną kartę dźwiękową (jeżeli posiadamy więcej kart potrzebne będą drobne zmiany w skrypcie).

Wymagane aplikacje:

  • amixer - mikser ALSY sterowany z linii komend
  • osd_cat - program do wyświetlania informacji za pomocą OSD (opcjonalnie)

Skrypt

Zawartość skryptu

Na początek tworzymy skrypt o nazwie mixer.sh i nadajemy mu atrybut wykonywalności (chmod +x mixer.sh). Do skryptu wklejamy kod:

#!/bin/bash
USE_OSD=1                            # boolean, 1 = use osd, 0 = don't use
FONT=-dejavu-*-*-r-*-*-*-*-*-*-m-*-*-*
ALIGN=left
POSSITION=top
COLOUR=yellow
CHANNEL=Master
ERROR="Houston, we've got a syntax error ;)"
CurVol() {
    echo "Głośność: $(amixer get \"$CHANNEL\" | grep % | awk '{print $5}' | head -1 | sed 's:\[::g;s:\]::g')"
}
 
if [ $USE_OSD -eq 1 ]; then
    showVol() {
        killall osd_cat 2> /dev/null
        CurVol | osd_cat -f $FONT -A $ALIGN -p $POSSITION -c $COLOUR
    }
    syntaxError() {
        killall osd_cat 2> /dev/null
        echo "$ERROR" | osd_cat -f $FONT -A $ALIGN -p $POSSITION -c $COLOUR
    }
elif [ $USE_OSD -eq 0 ]; then
    showVol() {
        CurVol
    }
    syntaxError() {
        echo "$ERROR"
    }
else
    echo "Masz babo placek... miało być '0' lub '1', komentarze są pisane po to, żeby je czytać ;)"
    exit;
fi
 
 
case $1 in
    "set") amixer set "$CHANNEL" "$2"% > /dev/null && showVol ;;
    "increase") amixer set "$CHANNEL" "$2"%+ > /dev/null && showVol ;;
    "decrease") amixer set "$CHANNEL" "$2"%- > /dev/null && showVol ;;
    "get") showVol ;;
    *) syntaxError ;;
esac

W pierwszych linijkach skryptu za pomocą zmiennych możemy ustawić czy, gdzie i jak będzie wyświetlany komunikat o poziomie głośności. Możemy również zmienić ustawić jaki kanał ma obsługiwać skrypt (w powyższym przykładzie jest to Master, inne to np. PCM; pełna lista po wpisaniu w terminalu amixer scontrols).

Użycie

Przykłady użycia skryptu:

  • ./mixer.sh set 80 - ustawienie głośności na poziom 80% i wyświetlenie aktualnego stanu w OSD lub w konsoli
  • ./mixer.sh increase 10 - zwiększenie głośności o 10 punktów procentowych i wyświetlenie aktualnego stanu w OSD lub w konsoli
  • ./mixer.sh decrease 10 - zmniejszenie głośności o 10 punktów procentowych i wyświetlenie aktualnego stanu w OSD lub w konsoli
  • ./mixer.sh get - wyświetlenie aktualnego stanu w OSD lub w konsoli

Konfiguracja skrótów klawiszowych

Aby podpiąć skrypt pod klawiaturę można zrobić odpowiednie wpisy w ~/.fluxbox/keys albo, jeśli posiadamy klawiaturę z dodatkowymi przyciskami, pod klawisze multimedialne za pomocą xmodmap lub xbindkeys.

Przykładowy plik ~/.fluxbox/keys:

Control Escape :Exec ~/.skrypty/mixer.sh set        0
Control F1     :Exec ~/.skrypty/mixer.sh set       10
Control F2     :Exec ~/.skrypty/mixer.sh set       20
Control F3     :Exec ~/.skrypty/mixer.sh set       30
Control F4     :Exec ~/.skrypty/mixer.sh set       40
Control F5     :Exec ~/.skrypty/mixer.sh set       50
Control F6     :Exec ~/.skrypty/mixer.sh set       60
Control F7     :Exec ~/.skrypty/mixer.sh set       70
Control F8     :Exec ~/.skrypty/mixer.sh set       80
Control F9     :Exec ~/.skrypty/mixer.sh set       90
Control F10    :Exec ~/.skrypty/mixer.sh set      100
Control F11    :Exec ~/.skrypty/mixer.sh decrease  10
Control F12    :Exec ~/.skrypty/mixer.sh increase  10
Control grave  :Exec ~/.skrypty/mixer.sh get

W powyższym przykładzie konfiguracja jest następująca:

  • Ctrl + Esc - ustawienie głośności na 0%
  • Ctrl + F1 - ustawienie głośności na 10%
  • Ctrl + F2 - ustawienie głośności na 20%
  • (...)
  • Ctrl + F9 - ustawienie głośności na 90%
  • Ctrl + F10 - ustawienie głośności na 100%
  • Ctrl + F11 - zmniejszenie głośności o 10%
  • Ctrl + F12 - zwiększenie głośności o 10%
  • Ctrl + ` (pod Esc) - pokazanie aktualnej głośności

Uwagi końcowe

Minimalnym skokiem mixera nie jest 1%, a około 3-4%, dlatego nie da się dokładnie ustawić mixera, a jedynie wartość przybliżoną do porządanej.

I tak, jeżeli na początku mamy głośność 100% i użyjemy komendy ./mixer set 80, to w rzeczywistości (przynajmniej u mnie) otrzymujemy poziom nie 80%, a 81%. Teraz jeśli stwierdzimy, że jest nadal za głośno i użyjemy ./mixer.sh decrease 10 to głośność zmniejszy się do poziomu nie 71%, a 68%.

Jednak różnice są praktycznie nie do wychwycenia, poza względami estetycznymi ów mankament nie ma większego znaczenia.