Controle o volume do mpg123

0

Boa hora do dia! Atualmente desenvolvendo algo como "casa inteligente" e preciso iniciar diferentes fluxos de áudio com diferentes níveis de volume. Por exemplo, eu quero ouvir música de fundo com 20% do volume original, mas no caso de alguém apertar a campainha, então eu quero ouvir aquela campainha tocar com 100% do volume. Para meus propósitos atualmente, estou usando mpg123 com scripts Python. Script Python com pexpect executa mpg123 com configurações necessárias como

mpg123 -vC <filename>

A abordagem atual envia 's' como pausa imediatamente após o início do jogador. Então, estou enviando a contagem necessária de '-' , como diminuir o volume em 2 para o player e retomá-lo. Huh ... funciona, mas uma implementação é feia, e há alguma lacuna entre o início do player e o volume decrescente. Pelo menos eu ouço alguns primeiros "pacotes" antes que o script python pause o player e diminua o volume.

Existe alguma maneira de reduzir o volume por algum comando? Existe alguma maneira de iniciar o mpg123 pausado? Pelo menos para eliminar essa lacuna

Obrigado!

    
por user922871 06.07.2017 / 00:02

1 resposta

0

Opções para o Pulseaudio:

1) Transmita a saída de mpg123 para paplay , por exemplo, com algo como

mpg123 --stdout ... | paplay --rate=44100 --format=s16le --channels=2 --stream-name=Music --client-name=Musicplayer --volume=65536

Você pode definir o volume na linha de comando como acima ou definir o volume uma vez em pavucontrol pelo nome do cliente e, na próxima vez em que o mesmo aplicativo for iniciado, ele se lembrará do volume. Portanto, se você usar nomes de clientes diferentes, digamos, Musicplayer e Bellringer , poderá pré-definir o volume de uma vez por todas, sem precisar alterar o Python.

2) Use outro programa para reproduzir arquivos MP3 que usam o Pulseaudio e pode definir o nome do cliente ou ter um nome de cliente reconhecível ou ter a opção de definir o volume. Por exemplo,

mplayer -volume=... ...

Então você tem as mesmas opções acima.

3) Use pamcd ou pactl para definir o volume do fluxo que está sendo reproduzido, por exemplo,

pacmd set-sink-input-volume 42 50%

Você pode usar algo semelhante a

pacmd list-sink-inputs | egrep '(index)|(name)'

para encontrar o índice numérico para um determinado fluxo ou nome de cliente. Ou analise a saída completa em Python.

4) Use a interface DBUS do Pulseaudio do Python. Isso exigirá alguma programação.

Eu não aconselho usar o Python com pexpect para alterar o volume através da interface do usuário, que parece um kludge horrível, e não é realmente um "nível mais alto".

    
por 06.07.2017 / 13:38

Tags