detectando o som dos alto-falantes

1

Eu decidi fazer um rádio do meu antigo laptop. Eu instalei o Puppy linux e configurei recursos especiais, como: depois de acordar, ele liga meu rádio online favorito (openFM) e desliga a tela.

Às vezes, perde a conexão com a internet e a música pára, mas quando o Laptop se reconecta à internet, a música não começa de novo, tenho que reiniciar o programa (openFM).

Eu quero escrever um script que verifique se a música está tocando no momento e, quando não há música tocando, ele deve reiniciar o openFM.

Eu não sei como detectar se a música está tocando ou não. Eu tentei:

/proc/asound/card*/pcm*/sub*/status

mas sempre contém:

state: RUNNING

Você tem outras ideias?

    
por Alin 26.05.2016 / 16:59

1 resposta

0

Eu encontrei um script uma vez (não me lembro onde tudo que eu tenho é meu bash_history).

Esta não é a solução, é uma solução alternativa. Eu sei que não é exatamente o que você pediu, mas pode ser útil.

Ele usa o microfone para detectar o silêncio.

Este é o meu script:

while :;
    do
    rec -t raw /dev/null rate 32k silence 1 0.1 4% 1 1.0 15%;
    clementine -t;
    sleep 1;
done
  • O 1,0 representa o tempo de silêncio (1 segundo), altera para algo mais longo para garantir que não seja uma pausa de música.
  • Os 15% representam o limiar de silêncio, usam valores menores para locais silenciosos, valores mais altos para locais barulhentos.
  • clementine -t é o comando que eu uso para alternar o meu player de música state aka clementine, altere isso com o comando que você usa para reiniciar o openFM.
  • sleep 1: faça um pequeno atraso para dar tempo às coisas.

Você pode ler mais aqui: link e aqui: Ende a gravação sox quando o silêncio for detectado

Você também pode jogar fazendo pings para um host que você sabe que sempre estará online até que ele falhe, e continue tentando mais pings até que funcione novamente. Neste ponto, você sabe que a conexão foi embora, mas está de volta, então você deve reiniciar o openFM. Isso pode ser feito com 2 loops dentro de um terceiro.

#!/bin/bash
while :;
    do

    while ping -c 1 8.8.8.8; # do we have connection?
        do
        sleep 5;
    done
    # the connection seems to be gone...

    until ping -c 1 8.8.8.8; # do we have connection?
        do
        sleep 5;
    done
    # the connection seems to be back again...

    # restart here your service

done

Note que -c 1 significa fazer apenas um ping (então nós o chamamos novamente). Não precisa ser o DNS do google para o qual você faz o ping, mude o tempo de espera como desejar.

    
por 30.05.2016 / 18:34