コマンドラインからパルスオーディオボリュームを読みますか? (私は欲しい:「pactl GET-sink-volume」)

コマンドラインからパルスオーディオボリュームを読みますか? (私は欲しい:「pactl GET-sink-volume」)

私が設定できる音量レベルを読んでみたいです。

pactl set-sink-volume $SINK $VOLUME

これを行う簡単な方法はありますか?仮定するのと同じくらい簡単です

pactl get-sink-volume $SINK

(どうですか?pactlを使ってボリュームを設定しましたが、ボリュームを100%以上に設定できるようになりましたが、これは悪い考えなので(音質が低下します)、小さなスクリプトを作成しようとしています。100%を超えません。これはありますか?100%ですが、元の問題がまだ存在します。

違いがある場合はDebianを使用しています。

2021年初頭に、pactlでこの機能を実装するための作業が進行中であるようです。この点を指摘してくれたKlaas van Schelvenに感謝します。

今(2022年末)注文があるようですpactl get-sink-volume

答え1

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

これが私が持っているものです。きれいではありませんが、私の用途には十分です。見つかりません。方法行ってください。シンクを1つだけリストする方法はないようですが、pactl昇順で印刷されます。したがって、tailn番目の行を使用して選択してくださいhead。ボリュームラインには別々の左右のチャンネルボリュームがあり、sed交換にはそのボリュームのみが必要なので、最初のボリュームのみを選択します。

記録には、以下をpactl list sinks short使用してアクティブな受信者番号を取得します。

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

2017-10-05編集:パルスオーディオの変更のため、少し調整する必要がありました。これが私が今持っているものです:

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}%

答え2

他のプログラムの使用に制限がない場合は、次のことができます。pamixer

以下を使用してボリュームを取得できます。

$ pamixer --get-volume

答え3

Tommi Kyntolaの答えは、実際にシンク番号を取得するために使用しているシンクによって異なります。

また、名前付き受信者インデックスと名前付き受信者インデックスに依存することに注意してください。計算済みインデックス。たとえば、1、2、3という3つの受信機があります。3は私たちが選択した受信機で、2つの接続を切断して1と3だけを残します。 2つのボリュームフィールドのみが出力されるため、pactl list sinks | grep "^[[:space:]]Volume:"Tommi Kyntolaのソリューションを使用して受信機3を計算する$SINK + 1ことはできません。 (私はこのようなことを経験し、ただトリッキーに転んでいるわけではありません)

私の解決策は、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 set-sink-volume $(getdefaultsinkname) $1
}

答え4

ボリュームを取得するには、以下を試しています。

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

関連情報