Zauważ, że odpowiedź Tommiego Kyntoli zależy od tego, czy zlew będzie używany, abyś mógł uzyskać numer zlewu.
Należy również pamiętać, że opiera się na nazwanych indeksach ujścia, aby były takie same jak indeks zliczany . Załóżmy na przykład, że mamy 3 zlewy 1, 2 i 3 i że 3 jest naszym wybranym zlewem, następnie odłączamy numer 2, pozostawiając nam 1 i 3. Teraz nie możesz liczyć na zatopienie 3 z rozwiązaniem Tommi Kyntola, ponieważ pactl list sinks | grep "^[[:space:]]Volume:"
wypisze tylko 2 pola objętości, więc potokowanie do głowy / ogona w celu uzyskania $SINK + 1
linii nie będzie działać.
Moje rozwiązanie działa w oparciu o założenie, że pacmd zawsze będzie wyświetlał zlewy w określonej kolejności. Jeśli potrzebujesz bardziej niezawodnego rozwiązania, musisz przeanalizować dane wyjściowe.
#!/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
Uwaga: nie wiem, czy pola objętości różnią się, moje wygląda następująco (od pacmd list-sinks
):
volume: front-left: 42706 / 65% / -11.16 dB, front-right: 42706 / 65% / -11.16 dB
Dostaję też tylko głośność pierwszego kanału (lewy przedni) w formacie procentowym (tj. Pole 5), twoje kanały mogą być na różnych poziomach.
EDYTOWAĆ:
Po drugie, prawdopodobnie faktycznie chcesz uzyskać domyślną nazwę zlewu pacmd stat
dla mniej skomplikowanego rozwiązania:
#/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
}
pactl list sinks
daje ci objętość, ale nie w przyjemnym, łatwym formacie, takim jak set-sink-volume.