Verifique o volume do dissipador PulseAudio

6

Existe algum comando para verificar o volume de receptores do PulseAudio. Significa que quero exibir o volume PulseAudio de coletores específicos em%

i.e. 50%

Eu já configurei o volume usando o comando pactl set-sinks-volume 1 50% . Mas agora eu quero verificar é 50% ou não.

Então, como posso fazer isso?

    
por Prakash V Holkar 28.04.2014 / 09:55

2 respostas

8

Você pode usar pactl list sinks para obter informações sobre o estado atual de seus sumidouros. Isso retorna muitas informações, incluindo o volume. Então, para obter apenas o volume do sink 1, você pode usar:

pactl list sinks | perl -000ne 'if(/#1/){/(Volume:.*)/; print "\n"}'

Isso retornará algo como:

Volume: 0:  50% 1:  50%

O comando perl acima irá imprimir os detalhes de sink 1 . Para usar um coletor diferente, altere o #1 para outro número, por exemplo, #0 .

Não sei ao certo o que significam os dois 50% , presumo que sejam os volumes dos altifalantes esquerdo e direito. Assim, para verificar se estão acima ou abaixo de um valor específico (supondo que o saldo esteja definido como "center", que ambos os volumes, left e right, sejam idênticos, então somente um precisa ser verificado), você pode fazer: / p>

pactl list sinks | perl -000lne 'if(/#1/){/Volume:.*?(\d+)%/;  >= 50 ? (print "y\n") : (print "n\n")}'

O texto acima imprimirá um y se o volume for maior ou igual a 50 e um n caso contrário. Isso tudo está ficando um pouco complexo, então eu simplificaria criando um script:

#!/usr/bin/env perl 

## The sink we are interested in should be given as the 
## 1st argument to the script.
die("Need a sink number as the first argument\n") if @ARGV < 1;
my $sink=$ARGV[0];

## If the script has been run with a second argument,
## that argument will be the volume threshold we are checking
my $volume_limit=$ARGV[1]||undef;

## Run the pactl command and save the output in 
## ther filehandle $fh
open(my $fh, '-|', 'pactl list sinks');

## Set the record separator to consecutive newlines (same as -000)
## this means we read the info for each sink as a single "line".
$/="\n\n";

## Go through the pactl output
while (<$fh>) {
    ## If this is the sink we are interested in
    if (/#$sink/) {
        ## Extract the current colume of this sink
        /Volume:.*?(\d+)%/;
        my $volume=;
        ## If the script has been run with a second argument,
        ## check whether the volume is above or below that
        if ($volume_limit) {
            ## If the volume os greater than or equal to the
            ## value passed, print "y"
            if ($volume >= $volume_limit) {
               print "y\n";
                exit 0;
            }
            else {
                print "n\n";
                exit 1;
            }
        }   
        ## Else, if the script has been run with just one argument,
        ## print the current volume.
        else {
            print "$volume%\n";
        }
    }

}

Salve o script acima como check_volume.pl em um diretório em $PATH (por exemplo, /usr/local/bin ), torne-o executável, chmod +x check_volume.pl e, em seguida, execute-o fornecendo o coletor de seu interesse como primeiro argumento:

$ check_volume.pl 1
50%

Para verificar se o volume está acima de um determinado limite, forneça o limite como um segundo argumento:

$ check_volume.pl 1 50
y
$ check_volume.pl 1 70
n

Observe que isso pressupõe que seu idioma do sistema seja o inglês. Se não for executado o script com uma localidade alterada:

LC_ALL=C check_volume.pl 1 50
    
por terdon 28.04.2014 / 10:57
2

Você pode usar amixer para ler o volume pulseaudio usando a opção mixer como esta.

$ amixer -c $CARD -M -D $MIXER get $SCONTROL
# CARD is your sound card number, mixer is either alsa or pulse and scontrol is the alsa device name, Master if you want to use pulse.
$ amixer -c 1 -M -D pulse get Master

Simple mixer control 'Master',0
  Capabilities: pvolume pswitch pswitch-joined
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 65536
  Mono:
  Front Left: Playback 27662 [42%] [on]
  Front Right: Playback 27662 [42%] [on]

Agora podemos analisá-lo usando grep ou sed ou perl .

$ amixer -c 1 -M -D pulse get Master | grep -o -E [[:digit:]]+%
    
por Ashhar Hasan 05.05.2016 / 16:37