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?
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
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:]]+%