Проверьте объем приемника PulseAudio

Есть ли любая команда для проверки объема приемников PulseAudio. Средства, которые я хочу, отображают объем PulseAudio конкретных приемников в %

т.е. 50%

Я уже установил использование объема pactl set-sinks-volume 1 50% команда. Но теперь я хочу проверить, это 50% или нет.

Таким образом, как я могу сделать это?

6
задан 29 April 2014 в 01:36

3 ответа

Можно использовать pactl list sinks получить информацию о текущем состоянии Ваших приемников. Это возвращает большую информацию, включая объем. Так, для получения только объема приемника 1 можно использовать:

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

Это возвратит что-то как:

Volume: 0:  50% 1:  50%

Вышеупомянутое perl команда распечатает детали sink 1. Для использования другого приемника изменитесь #1 к другому числу, например #0.

Я не уверен что два 50% средний, я предполагаю, что они - левая и правая громкость динамика. Так, чтобы проверить, ли они выше или ниже определенного значения, (предполагающий, что баланс установлен "центрироваться", что оба левых и правых объема идентичны так только одна потребность, которые будут проверены), можно сделать:

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

Вышеупомянутое распечатает a y если объем больше, чем или равен 50 и n иначе. Это все становится немного сложным, хотя, таким образом, я упростил бы путем создания сценария:

#!/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";
        }
    }

}

Сохраните сценарий выше как check_volume.pl в каталоге в Вашем $PATH (например, /usr/local/bin), сделайте это исполняемым файлом, chmod +x check_volume.pl и затем выполненный это дающий приемник Вам интересно как первый аргумент:

$ check_volume.pl 1
50%

Чтобы проверить, является ли объем выше данного порога, дайте порог как второй аргумент:

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

Обратите внимание, что это предполагает, что Ваш системный язык является английским. Если это не запущено скрипт с измененной локалью:

LC_ALL=C check_volume.pl 1 50
8
ответ дан 17 November 2019 в 09:02

Можно использовать amixer для чтения pulseaudio объема при помощи опции микшера как это.

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

Теперь мы можем проанализировать его с помощью grep или sed или perl.

$ amixer -c 1 -M -D pulse get Master | grep -o -E [[:digit:]]+%
2
ответ дан 17 November 2019 в 09:02

Это может быть реализовано как часть команды pulseaudio pactl в какой-то момент в будущем (начиная с января 2021 года). Неполный список мест, где можно отслеживать прогресс:

1
ответ дан 17 January 2021 в 11:59

Другие вопросы по тегам:

Похожие вопросы: