コマンドラインからpulseaudioボリュームを読み出しますか?(欲しい:「pactl GET-sink-volume」)


25

設定できる音量レベルを読みたい

pactl set-sink-volume $SINK $VOLUME

それを行う簡単な方法はありますか?仮説と同じくらい簡単

pactl get-sink-volume $SINK

(私がやろうとしていることは、ボリュームを設定するためにpactlを使用し、100%を超えるボリュームを設定することをお勧めします(音質は低下します)ので、 100%を超えないようにしてください読み取りますあるしきい値を超えていますか?100%に設定しますか?以下に1%を追加しますそれを行う別の方法がある場合は、教えてください! 100%。ただし、元の質問は残ります。何らかの方法が必要です。

それが違いを生むなら、私はDebianにいます。


pactl list sinksボリュームを提供しますが、set-sink-volumeのような簡単な形式ではありません。
デロバート

2
Ask Ubuntuには、これからボリュームを解析するための素敵なperl-onelinerを提供する質問があります。
アンドレアスヴィーゼ

@derobertありがとう、ただgrepし、そして/またはそこからそれを送ります!
ヒゲマル

@AndreasWieseありがとう、それを見なかった。私はperlコードをひと目見ましたが、自分で汚い小さなスクリプトを書くだけだと思います。;-)
ヒゲマル

回答:


19
pactl list sinks | grep '^[[:space:]]Volume:' | \
    head -n $(( $SINK + 1 )) | tail -n 1 | sed -e 's,.* \([0-9][0-9]*\)%.*,\1,'

それが私が持っているものです。きれいではありませんが、私の使用には十分でした。私はそれをする方法を見つけることができませんでした。pactlただ一つだけのシンクのためにリスト取得の任意の手段を持っていないようですが、それらは昇順で印刷されています。使用してn番目の行を選択し、それはそうtailhead。ボリュームラインには、右チャネルと左チャネルに別々のボリュームがあり、そのsed代替は最初のボリュームのみを選択することに注意してください。

記録のpactl list sinks shortために、アクティブなシンク番号を取得するためにを使用します。

pactl list short | grep RUNNING | sed -e 's,^\([0-9][0-9]*\)[^0-9].*,\1,'

EDIT 2017-10-05:pulseaudioの変更により、それらを少し調整する必要がありました。私が今持っているものは次のとおりです。

SINK=$( pactl list short sinks | sed -e 's,^\([0-9][0-9]*\)[^0-9].*,\1,' | head -n 1 )
NOW=$( pactl list sinks | grep '^[[:space:]]Volume:' | head -n $(( $SINK + 1 )) | tail -n 1 | sed -e 's,.* \([0-9][0-9]*\)%.*,\1,' )

私はMOD+10または-10に設定し、いくつかの境界チェックを行い、最後に:

pactl set-sink-volume $SINK ${MOD}%

1
ありがとう!アクティブシンク番号を取得するには、私が使用するために必要なpactl list sinks short | grep RUNNING | sed -e 's,^\([0-9][0-9]*\)[^0-9].*,\1,'-を追加しましsinkspactl listshort
コウシク

LC_ALL=C pactl list sinks | grep「Volume:」テキストはユーザーの言語にローカライズされる可能性があるため、堅牢性についてはお勧めします。
マリウス・ゲドミナス

私は1つのシンクを持っているので、これはbashスクリプトで私のために働いていた:volume=$(pactl list sinks | grep Volume | head -n1 | awk '{print $5}')
マティアス・ブラウン

11

別のプログラムを使用するための制限がない場合は、がありpamixerます。

ボリュームを取得するには:

$ pamixer --get-volume

4
Debianでは、pulsemixerパッケージを使用できます。ほぼ同じように見えます。
ヨーゼフクーフナー

8

Tommi Kyntolaの答えは、実際にシンク番号を取得できるように、使用中のシンクに依存していることに注意してください。

また、カウントされたインデックスと同じ名前のシンクインデックスに依存していることに注意してください。たとえば、3つのシンク1、2、3があり、その3が選択されたシンクである場合、2番を切断して1と3を残します。pactl list sinks | grep "^[[:space:]]Volume:"2つのボリュームフィールドのみが出力されるため、$SINK + 1「/ th」行を取得するためのヘッド/テールへのパイピングは機能しません。

私のソリューションは、pacmdが常に特定の順序でシンクをリストするという仮定に基づいて機能します。より信頼性の高いソリューションが必要な場合は、出力を解析する必要があります。

#!/bin/sh

# Get the index of the selected sink:
getsink() {
    pacmd list-sinks |
        awk '/index:/{i++} /* index:/{print i; exit}'
}

# Get the selected sink volume
getvolume() {
    pacmd list-sinks |
        awk '/^\svolume:/{i++} i=='$(getsink)'{print $5; exit}'
}

getvolume

注:ボリュームフィールドが異なるかどうかはわかりません。私のように見えます(からpacmd list-sinks):

volume: front-left: 42706 /  65% / -11.16 dB,   front-right: 42706 /  65% / -11.16 dB

また、パーセント形式(つまり、フィールド5)で最初のチャンネル(左前)のボリュームのみを取得しているため、チャンネルのレベルが異なる場合があります。


編集:

考え直してみると、おそらく実際にpacmd statは、より複雑でないソリューションのためにデフォルトのシンク名を取得したいと思うでしょう:

#/bin/sh
getdefaultsinkname() {
    pacmd stat | awk -F": " '/^Default sink name: /{print $2}'
}

getdefaultsinkvol() {
    pacmd list-sinks |
        awk '/^\s+name: /{indefault = $2 == "<'$(getdefaultsinkname)'>"}
            /^\s+volume: / && indefault {print $5; exit}'

}

setdefaulsinkvol() {
    pactl $(getdefaultsinkname) $1
}

ありがとう!2番目のソリューションはうまく機能します。ただし、setdefaulsinkvol()をする必要があると思うpactl set-sink-volume $(getdefaultsinkname) "$1"
Monica

4

ボリュームを取得するために私はこれを試しています:

echo `(pactl list sinks | grep "Volume: 0:")| awk '{print $3}'`

3
注:「ボリューム」はネイティブ言語に翻訳されているため、英語のシステムでのみ機能します。

3
複数のシンクがある場合、複数行の出力が得られます。
震災14年

4

多言語バリアント:

pactl list sink-inputs | \
grep -A15 -P "(\#|№)$SINK" | \
grep -P "\d+\s*\/\s*\d+\%" | \
head -1 | \
awk "{print \$5}"

pactl 5.0でテスト済み


説明を追加できますか?
コードブリン

4

私はまだコメントできないので(@jgrの回答を改善するために特別にサインアップしました)、デフォルトのシンクがプラグインである場合(任意の数のladspaプラグインと同様)、彼の編集ソリューションはXX%を返します(末尾のコンマに注意してください)、これはそれよりも少しうまく機能します。申し訳ありませんが、私のawk-fuは非常に基本的なものです。これを行うためのより良い方法があると確信しています。

また、修正されたソリューションでは、「%」を省略していますが、それを維持する意味が分からないため、数値だけを返す場合は数学で使用できます。また、setvolのケースも修正しました。このケースでは、特定の指示が必要です。

#/bin/sh
getdefaultsinkname() {
    pacmd stat | awk -F": " '/^Default sink name: /{print $2}'
}

getdefaultsinkvol() {
    pacmd list-sinks |
        awk '/^\s+name: /{indefault = $2 == "<'$(getdefaultsinkname)'>"}
            /^\s+volume: / && indefault {print $5; exit}' |
        awk -F"%" '{print $1}'
}

setdefaultsinkvol() {
    pactl -- set-sink-volume $(getdefaultsinkname) $1
}

2

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:]]+%
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.