나는 오래된 노트북으로 라디오를 만들기로 결정했습니다. Puppy linux를 설치하고 특수 기능을 설정했습니다. 예를 들어 잠에서 깨어난 후 내가 가장 좋아하는 온라인 라디오(openFM)를 켜고 화면을 끕니다.
가끔 인터넷 연결이 끊어지고 음악이 멈추는 경우가 있는데, 노트북이 인터넷에 다시 연결되면 음악이 다시 시작되지 않아 프로그램(openFM)을 다시 시작해야 합니다.
현재 음악이 재생 중인지 확인하고 음악이 재생되지 않을 때 openFM을 다시 시작해야 하는 스크립트를 작성하고 싶습니다.
음악이 재생되고 있는지 감지하는 방법을 모르겠습니다. 나는 시도했다:
/proc/asound/card*/pcm*/sub*/status
그러나 항상 다음이 포함됩니다.
state: RUNNING
다른 제안사항이 있나요?
답변1
한 번은 스크립트를 찾았습니다(내 bash_history가 어디에 있는지 기억이 나지 않습니다).
이는 해결책이 아니라 해결 방법입니다. 나는 이것이 정확히 당신이 요청한 것이 아니라는 것을 알고 있지만 작동할 수도 있습니다.
침묵을 감지하기 위해 마이크를 사용합니다.
이것은 내 스크립트입니다.
while :;
do
rec -t raw /dev/null rate 32k silence 1 0.1 4% 1 1.0 15%;
clementine -t;
sleep 1;
done
- 1.0은 무음 시간(1초)을 나타냅니다. 음악이 일시 중지되지 않도록 더 긴 시간으로 변경하세요.
- 15%는 조용한 임계값을 나타내며, 조용한 장소에는 더 작은 값을 사용하고 시끄러운 장소에는 더 높은 값을 사용합니다.
- clementine -t는 음악 플레이어 상태(일명 clementine)를 전환하는 데 사용하는 명령이며, openFM을 다시 시작하는 데 사용하는 명령으로 변경합니다.
- sleep 1: 약간의 시간을 주기 위해 조금 지연합니다.
여기에서 자세한 내용을 읽을 수 있습니다.http://linux.die.net/man/1/rec그리고 여기:침묵이 감지되면 Sox 녹음을 종료합니다.
또한 실패할 때까지 항상 온라인 상태일 것으로 알고 있는 호스트에 ping을 보낸 다음 다시 작동할 때까지 계속해서 더 많은 ping을 시도할 수도 있습니다. 이 시점에서 연결이 끊어졌다가 다시 돌아왔음을 알 수 있으므로 openFM을 다시 시작해야 합니다. 이는 세 번째 루프 내에서 두 개의 루프를 사용하여 수행할 수 있습니다.
#!/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
-c 1은 한 번만 ping을 수행한다는 의미입니다(그런 다음 다시 호출함). Google의 DNS를 핑할 필요가 없으며 필요에 따라 절전 시간을 변경할 수 있습니다.