web-dev-qa-db-ja.com

オーディオデバイス/サウンドカードが現在再生されているかどうかをテストしていますか?

オーディオデバイスがサイレント状態にあるかどうかを確認できるデフォルトのプログラムはありますか?

編集:沈黙とは、(アクティブ化したり開かれたりするだけでなく)何かが再生されている場合のことです

このようなもの:

if [[ device0 is silent ]] ; then
    radio $RANDOM
fi

編集2:私が達成しようとしているのは、ラジオを再生し、プレーヤーが失敗したときに再生を続けることができるスクリプトです。インターネット接続がダウンし、プレーヤーが回復しなかった場合、私はプレーヤーを殺して最初からやり直します

9
RSFalcon7

PulseAudioを使用している場合(GnomeベースのLinuxディストリビューションはPulseAudioを使用する傾向があり、ps -C pulseaudioで実行されているかどうかを確認できます)、一部のアプリケーションがデータを「シンク」に送信しているかどうかを知りたい場合は、出来ました:

pacmd list-sink-inputs | grep -c 'state: RUNNING'

それでもPulseAudioを使用して、サウンド出力がミュートされているかどうかを確認したい場合は、もっと簡単かもしれませんが、以下を使用してデフォルトの「シンク」の「ミュート」ステータスを取得できます。

pacmd dump | awk '
  $1 == "set-sink-mute" {m[$2] = $3}
  $1 == "set-default-sink" {s = $2}
  END {print m[s]}'
4

私があなたを正しく理解しているなら、ここに例があります:

沈黙:

fuser /dev/snd/timer && echo "Something is playing" || echo "There's silence"
There's silence

私は大胆にオンにします:

fuser /dev/snd/timer && echo "Something is playing" || echo "There's silence"
/dev/snd/timer:      47663
Something is playing

OSSチャンドの場合/dev/snd/timerから/dev/dsp

これは非常に依存する方法です。

3
Eddy_Em

サウンドにALSAミキサーを使用しているとすると、amixerを使用してオーディオデバイスに関する情報を照会できます。オーディオデバイスには通常、複数のオーディオチャネル(またはコントロール)があり、それぞれをミュートおよびミュート解除できます。たとえば、Masterコントロールがミュートされているかどうかを確認するには、次のようにします。

if amixer get Master | grep -q off; then
    # action
fi

setオプションを使用して、コントロールで処理を実行します。見る man amixer詳細については。

1
user13742

htorの答えはおそらく機能しますが、出力のどこかに「オフ」が表示され、誤った結果が生じる可能性があります。 GNU awkを使用したより厳密なチェックは次のとおりです。

if amixer get Master | gawk 'END{ if ( $NF != "[off]" ) { exit 1 } }'; then
    # muted
else
    # unmuted
fi
1
Chris Down