PulseAudioシンクボリュームを確認するコマンドはありますか。特定のシンクのPulseAudioボリュームを%で表示することを意味します
つまり、50%
pactl set-sinks-volume 1 50%
コマンドを使用して、すでにボリュームを設定しています。しかし、今私はそれが50%かどうかを確認したいです。
どうすればこれを行うことができますか?
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
に変更します。
2つの50%
が何を意味するのかわかりません。それらが左右のスピーカーの音量だと思います。そのため、それらが特定の値の上または下にあるかどうかを確認するために(バランスが「中央」に設定され、左右のボリュームが同一であるため、一方だけをチェックする必要があると仮定して)、次のことができます:
pactl list sinks | Perl -000lne 'if(/#1/){/Volume:.*?(\d+)%/; $1 >= 50 ? (print "y\n") : (print "n\n")}'
上記は、ボリュームが50以上の場合はy
を出力し、それ以外の場合は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%
ボリュームが所定のしきい値を超えているかどうかを確認するには、2番目の引数としてしきい値を指定します。
$ check_volume.pl 1 50
y
$ check_volume.pl 1 70
n
これは、システムの言語が英語であることを前提としていることに注意してください。変更されたロケールでスクリプトを実行しない場合:
LC_ALL=C check_volume.pl 1 50
このようなミキサーオプションを使用すると、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:]]+%