Quero ler o nível de volume que posso definir com
pactl set-sink-volume $SINK $VOLUME
Existe uma maneira fácil de fazer isso? Tão fácil quanto o hipotético
pactl get-sink-volume $SINK
?
(O que estou tentando fazer? Eu uso o pactl para definir o volume e ele permite definir um volume superior a 100%, o que é uma má ideia (a qualidade do som diminui). Por isso, estou pensando em escrever um pequeno script que acima de 100%. Leia-o. Acima de algum limite? Defina como 100%. Abaixo? adicione 1%. Se houver outra maneira de fazer isso, ótimo, diga-me! A solução mais limpa provavelmente diria ao pulso para parar em 100%. Mas a pergunta original permanece, deve haver alguma maneira ..)
Estou no Debian se isso faz alguma diferença.
command-line
pulseaudio
Higemaru
fonte
fonte
pactl list sinks
fornece o volume, mas não em um formato fácil e agradável, como set-sink-volume.Respostas:
É o que eu tenho. Não é legal, mas foi o suficiente para o meu uso. Não consegui encontrar o caminho para fazê-lo. O
pactl
justo parece não ter meios de obter uma listagem apenas de um coletor, mas eles são impressos em ordem crescente. Então isso seleciona a enésima linha usandotail
ehead
. Observe que a linha de volume pode ter volumes separados para os canais direito e esquerdo e essesed
substituto escolhe apenas o primeiro, porque eu precisava disso.Para o registro, eu uso o
pactl list sinks short
para obter meu número de coletor ativo:EDIT 2017-10-05: Eu tive que ajustá-los um pouco devido a alterações no pulseaudio. Aqui está o que eu tenho agora:
Eu
MOD
configurei para +10 ou -10 e faço algumas verificações de limite e, finalmente:fonte
pactl list sinks short | grep RUNNING | sed -e 's,^\([0-9][0-9]*\)[^0-9].*,\1,'
- Adicionadosinks
entrepactl list
eshort
LC_ALL=C pactl list sinks | grep
porque o texto "Volume:" pode estar localizado no idioma do usuário.volume=$(pactl list sinks | grep Volume | head -n1 | awk '{print $5}')
Se você não tem uma restrição para usar outro programa, existe o
pamixer
.Você pode obter o volume com:
fonte
pulsemixer
pacote. Parece o mesmo.Observe que a resposta de Tommi Kyntola depende da pia estar em uso para que você possa realmente obter o número da pia.
Observe também que ele depende dos índices de coletor nomeados para serem os mesmos do índice contado . Digamos, por exemplo, que temos 3 pias 1, 2 e 3 e que 3 é o nosso coletor selecionado, então desconectamos o número 2, deixando-nos 1 e 3. Agora você não pode contar com o coletor 3 com a solução de Tommi Kyntola porque
pactl list sinks | grep "^[[:space:]]Volume:"
produzirá apenas 2 campos de volume, portanto, a tubulação para a cabeça / cauda para obter a$SINK + 1
'linha th' não funcionará.Minha solução funciona com base no pressuposto de que o pacmd sempre listará pias em uma ordem específica. Se você deseja uma solução mais confiável, precisa analisar a saída.
Nota: Não sei se os campos de volume diferem, o meu se parece com este (de
pacmd list-sinks
):Além disso, estou obtendo apenas o volume do primeiro canal (frente-esquerda) em formato percentual (ou seja, campo 5), seus canais podem estar em níveis diferentes.
EDITAR:
Pensando bem, você provavelmente deseja obter o nome do coletor padrão
pacmd stat
para uma solução menos complicada:fonte
pactl set-sink-volume $(getdefaultsinkname) "$1"
para obter um volume, estou tentando este:
fonte
Variante multilíngue:
Testado no pactl 5.0
fonte
Como ainda não posso comentar (inscrevi-me especificamente para melhorar a resposta de @ jgr), no caso de seu coletor padrão ser um plugin (como qualquer número de plugins ladspa), sua solução de edição retornará XX% (observe a vírgula à direita) ), então isso funciona um pouco melhor que isso. Desculpe, meu awk-fu é muito básico, tenho certeza de que há uma maneira melhor de fazer isso.
A solução modificada também omite o '%', pois não vejo sentido em mantê-lo e, se retornarmos apenas o número, podemos usá-lo em matemática. Também foi corrigido o caso setvol, que precisa de instruções específicas no meu caso.
fonte
Você pode usar
amixer
para ler o volume do pulseaudio usando a opção do mixer como esta.Agora podemos analisá-lo usando
grep
orsed
ouperl
.fonte