Como alterno o som com o amixer?


48

Incluindo Natty, eu sempre conseguia alternar (silenciar / não silenciar) o volume do som 'Master' com o

amixer sset Master toggle

comando que vinculei a uma ligação de borda no CompizConfig-Manager.

Agora, após a instalação do Oneiric, o comando apenas silencia o som, mas não o emudece. Eu até tentei no Terminal, mas também não funciona. Ele muda ' Mono: Reprodução 68 [78%] [-14.25dB] [desativado] ' para '... [ativado] ', mas o som permanece mudo, de modo que eu tenho que desativá-lo através do 'indicador sonoro' no painel.

Como posso fazer isso funcionar novamente? O que mudou desde Natty? Alguém conhece o comando que o 'indicador de som' usa para alternar o volume do som?


E para torná-lo ainda mais estranho: no meu outro laptop, onde atualizei do Natty para o Oneiric, em vez de uma nova instalação, ele ainda funciona.
Joschi

Respostas:


51

Isso funciona para mim no 13.04, mudo e não mudo:

amixer -D pulse set Master 1+ toggle

Ele especifica o áudio de pulso para garantir que tudo fique mudo e mudo.


Trabalhou no lubuntu 13.10. Procuro por SEMANAS!
Luisgonzalez

1
EDIT: Funcionou apenas quando executado como um comando no terminal. Mas quando tento configurar como uma ligação de chave, obtenho: Diretório inicial não acessível: Permissão negada ALSA lib pulse.c: 243: (pulse_connect) PulseAudio: Não é possível conectar-se: Amixer de conexão recusada: Erro de pulso de conexão do misturador: Conexão recusada
luisgonzalez

5
Funciona ainda melhor sem o 1+parâmetro
J. Katzwinkel 13/10

3
Ainda funciona em 17.10 (artful). Estou usando isso para ligações de mídia do i3:bindsym XF86AudioMute exec --no-startup-id amixer -D pulse set Master 1+ toggle
Joel

2
Qual é o motivo do 1+?
Gayan Weerakutti

16

Estou usando este script como uma solução alternativa:

#!/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

Eu fiz uma diferença amixer scontentsantes de ligar amixer set Master mutee depois de ligar e ativar o som de tudo usando a GUI para descobrir o que precisava ser ativado.


  1. Com som no tipo amixer scontents > ~/before(você receberá um arquivo com o status de todos os canais de som)
  2. Em seguida, alterne o volume com amixer set Master toggle
  3. Crie um segundo arquivo de status chanel com amixer scontents > ~/after
  4. Alterne novamente o som com o amixer set Master togglequal é suposto retornar o volume ao nível anterior ao primeiro comando de alternância
  5. Crie um terceiro arquivo com amixer scontents > ~/afterafter

Agora você tem três arquivos que informam o status dos canais de som usados ​​para o som normal, que são silenciados amixer set Master togglee que não são ativados novamente por reativar o som com o mesmo comando.

Para comparar facilmente os arquivos e ver as diferenças (os canais que são silenciados e não mudam depois), você pode usar meldo Centro de Software. Inicie, abra os três arquivos e, na barra de rolagem, você pode ver onde há diferenças entre os arquivos. Use os nomes dos canais encontrados para adicioná-los ao script descrito acima.


Infelizmente o som de script apenas mudos, mas não voltar a ligá-
Joschi

Provavelmente porque suas coisas que precisam ser mudas não são chamadas de "Front" e "Headphone" como no meu sistema.
Jim Hunziker

Também fiz uma comparação e descobri o que estava faltando para o script funcionar no meu computador, agora funciona. Muito obrigado.
Joschi

5

Não consegui ativar o som para alternar corretamente. Se eu usei a CLI e digite a alternância Master do Amixer sset ou pressione a tecla de alternância de mídia do pavilhão HP, obtive o mesmo resultado: se o som estiver ativado e funcionando, o canal principal e o canal PCM serão desativados automaticamente. Então, quando eu clico no botão novamente (cli ou tecla), ele SEMPRE ativa o Master, mas deixa o PCM mudo. Para o meu equipamento (HP Pavilion DV6 executando o Xubuntu Oneric), isso significa que o som está desativado mesmo com o master ativado. Quando executado a partir da CLI - mesmos resultados. Se, com cli, eu alterno o PCM, ele também desliga o canal principal e não o liga novamente, embora alterne o PCM corretamente.

O script que funcionou foi:

#!/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

Em seguida, usei as combinações de teclas do Xubuntu (configurações> gerenciador de configurações> teclado> atalhos do aplicativo) para navegar até o script (chamei-o de sndfx.sh e o configurei como executável clicando com o botão direito do mouse em thunar e, em permissões assinaladas, tornar executável). Em seguida, designei a tecla rápida do HP Pavilion tocando nessa tecla. Agora, alterna corretamente - impressionante. Espero que isso ajude outra pessoa.

Paz


2

Se não me engano, é um bug que faz com que outros canais do mixer sejam desativados e desativados. Para silenciar, tente

conjunto de misturadores Master 0;

Para ativar o som, tente

conjunto de misturadores Master 1% +; conjunto de misturadores Master 7dB +;


Esses comandos funcionam, mas não me permitem alternar o volume com um único comando que eu possa combinar com uma ligação de borda.
Joschi

1
Se alguém estiver interessado no relatório de erros associado, consulte aqui .
Joschi


1

Se você deseja substituir o amixer em .lircrc para seu controle remoto trabalhar com lirc, tente as seguintes linhas. Certifique-se de ter o xmacro instalado. O controle de volume agora funciona novamente.

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

0

O truque é fazer com que o estado do alto-falante ou do fone de ouvido siga o estado do canal principal, dependendo se você tem os fones de ouvido conectados ou não. Este script faz isso por mim no meu antigo laptop 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

Pode ser necessário verificar seus canais com o amixer no seu computador e alterar as definições de ESCRAVO de acordo. Além disso, a string grep "Headphone \ Jack" na definição HEADPHONES_PLUGGED talvez precise ser outra coisa.


-1

Força bruta sem som:

for i in $(amixer |grep -o \'.*\'); do amixer set $i unmute; done

2
Não acho que ativar 80 dispositivos ou mais seja uma boa ideia. Isso inclui microfones, o que pode levar a loops de feedback indesejados. faça um for i in $(amixer |grep -o \'.*\'); do echo amixer set $i unmute; doneantes, para ver o que seria feito.
usuário desconhecido
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.