web-dev-qa-db-fra.com

Vérifier le volume de l'évier PulseAudio

Existe-t-il une commande permettant de vérifier le volume des puits PulseAudio? Signifie que je veux afficher le volume PulseAudio de puits particuliers en%

c'est-à-dire 50%

J'ai déjà réglé le volume avec la commande pactl set-sinks-volume 1 50%. Mais maintenant, je veux vérifier si c'est 50% ou non.

Alors, comment puis-je faire cela?

6
Prakash V Holkar

Vous pouvez utiliser pactl list sinks pour obtenir des informations sur l'état actuel de vos puits. Cela renvoie beaucoup d'informations, y compris le volume. Ainsi, pour obtenir uniquement le volume de l'évier 1, vous pouvez utiliser:

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

Cela retournera quelque chose comme:

Volume: 0:  50% 1:  50%

La commande Perl ci-dessus imprimera les détails de sink 1. Pour utiliser un autre récepteur, remplacez le #1 par un autre numéro, par exemple #0.

Je ne suis pas sûr de ce que signifient les deux 50%, je suppose que ce sont les volumes des haut-parleurs gauche et droit. Ainsi, afin de vérifier si elles sont au-dessus ou au-dessous d'une valeur spécifique (en supposant que la balance est définie sur "centre", que les volumes gauche et droit sont identiques, il ne faut donc en vérifier qu'un seul):

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

Ce qui précède imprimera un y si le volume est supérieur ou égal à 50 et un n sinon. Tout cela devient un peu complexe, je simplifierais donc en créant un 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=$1;
        ## 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";
        }
    }

}

Enregistrez le script ci-dessus sous le nom check_volume.pl dans un répertoire de votre $PATH (par exemple, /usr/local/bin), rendez-le exécutable, chmod +x check_volume.pl, puis exécutez-le en indiquant le puits souhaité. comme premier argument:

$ check_volume.pl 1
50%

Pour vérifier si le volume est supérieur à un seuil donné, donnez le seuil comme second argument:

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

Notez que cela suppose que la langue de votre système est l'anglais. Si ce n'est pas le cas, exécutez le script avec une locale modifiée:

LC_ALL=C check_volume.pl 1 50
8
terdon

Vous pouvez utiliser amixer pour lire le volume du pulsé en utilisant l’option de mixage comme ceci.

$ 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]

Nous pouvons maintenant l’analyser avec grep ou sed ou Perl.

$ amixer -c 1 -M -D Pulse get Master | grep -o -E [[:digit:]]+%
2
Ashhar Hasan