web-dev-qa-db-ja.com

コマンドラインからボリュームレベルを取得する方法

タイリングウィンドウマネージャーにテキストステータスバーがあり、tclを使用して情報をフィードしています。現時点では、ボリュームレベル0%から100%を出力するコマンドラインが必要です。 Arch Linuxを使用しています。

16
milarepa

ステータスバーのamixerの出力を解析するワンライナー:

awk -F"[][]" '/dB/ { print $2 }' <(amixer sget Master)
15
jasonwryan

これを行うには、amixerを使用できます。

$ amixer get Master
Simple mixer control 'Master',0
  Capabilities: pvolume pswitch pswitch-joined penum
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 65536
  Mono:
  Front Left: Playback 65536 [100%] [off]
  Front Right: Playback 65536 [100%] [off]

次のように変更してミュートすることもできます。

設定ボリューム75%

$ amixer set Master 75%
Simple mixer control 'Master',0
  Capabilities: pvolume pswitch pswitch-joined penum
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 65536
  Mono:
  Front Left: Playback 49152 [75%] [on]
  Front Right: Playback 49152 [75%] [on]

ミュート/ミュート解除

$ amixer set Master toggle
Simple mixer control 'Master',0
  Capabilities: pvolume pswitch pswitch-joined penum
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 65536
  Mono:
  Front Left: Playback 65536 [100%] [on]
  Front Right: Playback 65536 [100%] [on]

--quietスイッチを使用して出力を表示したくない場合は、出力を静めることができます。

$ amixer --quiet set Master 75%
$ 
12
slm

amixer sget Master | grep 'Right:' | awk -F'[][]' '{ print $2 }'
85%

amixer sget Master | grep 'Left:' | awk -F'[][]' '{ print $2 }'
85%

サウンドサーバー

デフォルトとしてpulseaudioを使用していない場合は、amixer-D Pulseで使用するサーバーを指定できます。

amixer -D Pulse sget Master | grep 'Left:' | awk -F'[][]' '{ print $2 }'
85%
7
intika

ここですでにいくつかの回答に基づいていますが、同じコマンドでawkgrepの両方を使用して回避することができました(これは膨らむため)。

amixer -D Pulse get Master | awk -F 'Left:|[][]' 'BEGIN {RS=""}{ print $3 }'

説明:

amixer -D Pulse get Master ...

かなり自明です。マスターコントロールに関するものだけをリストします(Pulseを使用しているため、-D Pulse)。私にとって、それは印刷します:

  Capabilities: pvolume pswitch pswitch-joined
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 65536
  Mono:
  Front Left: Playback 52428 [80%] [on]
  Front Right: Playback 52428 [80%] [on]

... awk -F 'Left:|[][]' ...

正規表現を使用してフィールド区切り文字を定義します。これはLeft:または][のいずれかです。

... { print $3 }'

次に、3列目を印刷します。 Left:も分離しているため、右側のスピーカーの$3の値は空白になることがわかります。

... 'BEGIN {RS=""}...

現在は、80%と一連の改行のみを印刷しています。私が書いていたスクリプトでは、これらは必要なかったので、{RS=""}を使用してほとんどのスクリプトを削除し、BEGINを追加して、最初のスクリプトを削除しました。

0
7thFox