내가 설정할 수 있는 볼륨 레벨을 읽어보고 싶습니다.
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,'
이것이 내가 가진 것입니다. 깔끔하지는 않지만 제 용도로는 충분합니다. 못찾 겠어요방법가세요. 싱크를 하나만 나열할 수 있는 방법은 없는 것 같지만 pactl
오름차순으로 인쇄됩니다. 따라서 tail
n번째 행을 사용하여 선택하세요 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
답변3
Tommi Kyntola의 답변은 실제로 싱크 번호를 얻을 수 있도록 사용 중인 싱크에 따라 달라집니다.
또한 명명된 수신자 인덱스와 명명된 수신자 인덱스에 의존한다는 점에 유의하세요.계산됨색인. 예를 들어 1, 2, 3이라는 3개의 수신기가 있는데, 3이 우리가 선택한 수신기이고, 2번의 연결을 끊고 1과 3만 남깁니다. 이제 pactl list sinks | grep "^[[:space:]]Volume:"
2개의 볼륨 필드만 출력되므로 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}'`