Jak przełączać dźwięk w amixerze?

48

W tym Natty zawsze byłem w stanie przełączać (wyciszać / wyłączać) głośność „Master” za pomocą

amixer sset Master toggle

polecenie, które podłączyłem do powiązania krawędzi w CompizConfig-Manager.

Teraz po zainstalowaniu Oneiric polecenie tylko wycisza dźwięk, ale go nie wycisza. Próbowałem nawet w terminalu, ale to też nie działa. Zmienia „ Mono: Odtwarzanie 68 [78%] [-14,25 dB] [wył.] Na„ ... [wł.] ”, Ale dźwięk pozostaje wyciszony, więc muszę go wyciszyć za pomocą„ wskaźnika dźwięku ”w płyta.

Jak mogę to znów uruchomić? Co zmieniło się od czasu Natty? Czy ktoś zna polecenie, którego „wskaźnik dźwięku” używa do przełączania głośności?

joschi
źródło
I jeszcze bardziej dziwne: na moim drugim laptopie, w którym przeszedłem z Natty na Oneiric zamiast świeżej instalacji, nadal działa.
joschi

Odpowiedzi:

51

Działa to dla mnie 13.04, zarówno wyciszanie, jak i wyłączanie wyciszenia:

amixer -D pulse set Master 1+ toggle

Określa pulsacyjny dźwięk, aby zapewnić wyciszenie, wycisza wszystko.

David C. Bishop
źródło
Pracował na lubuntu 13.10. Szukałem tego przez WEEKS!
luisgonzalez
1
EDYCJA: Działa tylko, gdy działa jako polecenie w terminalu. Ale kiedy próbuję skonfigurować jako powiązanie klucza, dostaję: Katalog główny niedostępny: Odmowa dostępu ALSA lib pulse.c: 243: (pulse_connect) PulseAudio: Nie można się połączyć: Połączenie odmówiło amixer: Błąd impulsu dołączenia miksera: Połączenie odrzucone
luisgonzalez
5
Działa jeszcze lepiej bez 1+parametru.
J. Katzwinkel
3
Nadal działa w 17.10 (pomysłowy). Używam tego do powiązań mediów i3:bindsym XF86AudioMute exec --no-startup-id amixer -D pulse set Master 1+ toggle
Joel
2
Jaki jest powód 1+?
Gayan Weerakutti
16

Używam tego skryptu jako obejścia:

#!/bin/bash

CURRENT_STATE=`amixer get Master | egrep 'Playback.*?\[o' | egrep -o '\[o.+\]'`

if [[ $CURRENT_STATE == '[on]' ]]; then
    amixer set Master mute
else
    amixer set Master unmute
    amixer set Front unmute
    amixer set Headphone unmute
fi

Zrobiłem diff amixer scontentsprzed wywołaniem amixer set Master mutei po wywołaniu go i regulacja głośności wszystko za pomocą interfejsu GUI, aby dowiedzieć się, co potrzebne, aby być wyciszone.


  1. Z dźwiękiem na typ amixer scontents > ~/before(otrzymasz plik ze statusem wszystkich kanałów dźwiękowych)
  2. Następnie przełącz głośność za pomocą amixer set Master toggle
  3. Utwórz drugi plik statusu kanału za pomocą amixer scontents > ~/after
  4. Ponownie przełącz dźwięk, dzięki amixer set Master togglektóremu głośność ma wrócić do poziomu przed pierwszym poleceniem przełączania
  5. Utwórz trzeci plik za pomocą amixer scontents > ~/afterafter

Teraz masz trzy pliki z informacją o stanie kanałów dźwiękowych używanych do normalnego dźwięku, które są wyciszone amixer set Master togglei które nie są ponownie włączane przez ponowne wyciszenie za pomocą tego samego polecenia.

Aby łatwo porównać pliki i zobaczyć różnice (kanały wyciszone i nie wyciszone później) możesz skorzystać meldz Centrum oprogramowania. Uruchom go, otwórz trzy pliki, a na pasku przewijania zobaczysz różnice między plikami. Użyj znalezionych nazw kanałów, aby dodać je do wyżej opisanego skryptu.

Jim Hunziker
źródło
Niestety skrypt tylko wycisza dźwięk, ale go nie wycisza
joschi,
Prawdopodobnie dlatego, że twoje rzeczy, które muszą być wyciszone, nie są nazywane „Front” i „Headphone”, tak jak w moim systemie.
Jim Hunziker
Zrobiłem też różnicę i dowiedziałem się, czego brakuje, aby skrypt działał na moim komputerze, teraz działa. Wielkie dzięki.
joschi
5

Nie mogłem uzyskać wyciszenia dźwięku, aby poprawnie się przełączał. Niezależnie od tego, czy użyłem CLI i wpisałem przełącznik Amixer sset Master, czy nacisnąłem klawisz przełączania mediów pawilonu HP, otrzymuję ten sam rezultat: Jeśli dźwięk jest włączony i działa, automatycznie wyłączy kanał główny i kanał PCM. Potem, kiedy ponownie uderzę w przełącznik (cli lub klawisz), ZAWSZE włącza się Master, ale pozostawia PCM wyciszony. Dla mojego urządzenia (HP Pavilion DV6 z Xubuntu Oneric) oznacza to, że dźwięk jest wyłączony nawet przy włączonym urządzeniu master. Po uruchomieniu z CLI - te same wyniki. Jeśli za pomocą cli przełączę PCM, to również wyłączy kanał główny i ponownie nie włączy go ponownie, chociaż poprawnie przełączy PCM.

Skrypt, który zadziałał to:

#!/bin/bash
    if amixer -c 0 get Master | grep -q off
then
    amixer set Master unmute
    amixer set PCM unmute

else
    amixer set Master mute
fi

Następnie użyłem skrótów klawiaturowych Xubuntu (ustawienia> menedżer ustawień> klawiatura> skróty aplikacji), aby przejść do skryptu (nazwałem go sndfx.sh i ustawiłem go jako wykonywalny poprzez kliknięcie prawym przyciskiem myszy w Thunar i przy zaznaczonych uprawnieniach wykonaj plik wykonywalny). Następnie przypisałem mu klawisz skrótu HP Pavilion, dotykając go. Teraz przełącza się poprawnie - Niesamowite. Mam nadzieję, że to pomaga komuś innemu.

Pokój

użytkownik46082
źródło
2

Jeśli się nie mylę, jest to błąd, który powoduje wyciszenie i wyłączenie wyciszenia innych kanałów miksera. Aby wyciszyć, spróbuj

amixer set Master 0;

Aby wyłączyć wyciszenie, spróbuj

amixer set Master 1% +; zestaw amixer Master 7dB +;

Meme Notyou
źródło
Te polecenia działają, ale nie pozwalają mi przełączać głośności za pomocą jednego polecenia, które mogę łączyć z wiązaniem krawędzi.
joschi
1
Jeśli ktoś jest zainteresowany powiązanym raportem o błędach, zobacz tutaj .
joschi
1

Jeśli chcesz zastąpić amixer w .lircrc dla twojego pilota działającego z lirc, możesz wypróbować następujące linie. Koniecznie zainstaluj Xmacro. Kontrola głośności działa teraz ponownie.

begin
        prog = irexec
        button = KEY_VOLUMEUP
        repeat = 1
        delay = 2
        config = echo KeyStrPress XF86AudioRaiseVolume KeyStrRelease XF86AudioRaiseVolume | xmacroplay $DISPLAY
end
begin
        prog = irexec
        button = KEY_VOLUMEDOWN
        repeat = 1
        delay = 2
        config = echo KeyStrPress XF86AudioLowerVolume KeyStrRelease XF86AudioLowerVolume | xmacroplay $DISPLAY
end
begin
        prog = irexec
        button = KEY_MUTE
        config = echo KeyStrPress XF86AudioMute KeyStrRelease XF86AudioMute | xmacroplay $DISPLAY
end
Jakob
źródło
0

Sztuczka polega na tym, aby stan głośnika lub słuchawek podążał za kanałem głównym w zależności od tego, czy masz podłączone słuchawki, czy nie. Ten skrypt robi to na moim starożytnym laptopie Dell Latitude:

#!/bin/bash

amixer -q sset Master toggle

MASTER_STATE=`amixer get Master | awk -F"dB] " 'NR == 5 {print $2;}'`
HEADPHONES_PLUGGED=`amixer contents | grep -A 2 Headphone\ Jack | awk -F"=" 'NR == 3 {print $2;}'`

if [[ $HEADPHONES_PLUGGED == 'on' ]]; then
    SLAVE="Headphone"
else
    SLAVE="Speaker+LO"
fi

if [[ $MASTER_STATE == '[on]' ]]; then
    amixer -q sset $SLAVE unmute
else
    amixer -q sset $SLAVE mute
fi

Konieczne może być sprawdzenie kanałów z amixerem na komputerze i odpowiednia zmiana definicji SLAVE. Również ciąg grep „Headphone \ Jack” w definicji HEADPHONES_PLUGGED może wymagać czegoś innego.

pętla
źródło
-1

Brute force unmute:

for i in $(amixer |grep -o \'.*\'); do amixer set $i unmute; done
asdf
źródło
2
Nie sądzę, aby wyciszenie 80 i więcej urządzeń było dobrym pomysłem. Obejmuje to mikrofony, które mogą prowadzić do niepożądanych pętli sprzężenia zwrotnego. zrobić for i in $(amixer |grep -o \'.*\'); do echo amixer set $i unmute; donewcześniej, aby zobaczyć, co można zrobić.
użytkownik nieznany