スピーカーからの音を検出します。

スピーカーからの音を検出します。

私は古いラップトップでラジオを作ることにしました。 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そしてここ:サイレントが検出されると、ソックスの録音を終了します。

また、失敗するまで常にオンラインであることがわかっているホストにpingを送信し、再び機能するまでさらにpingを試みることもできます。この時点で、接続が切断されてから戻ってきたことがわかるので、openFMを再起動する必要があります。これは、3番目のループ内で2つのループを使用して実行できます。

#!/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をpingする必要はなく、必要に応じてスリープ時間を変更できます。

おすすめ記事