オーディオデバイスがサイレント状態にあるかどうかを確認できるデフォルトのプログラムはありますか?
編集:沈黙とは、(アクティブ化したり開かれたりするだけでなく)何かが再生されている場合のことです
このようなもの:
if [[ device0 is silent ]] ; then
radio $RANDOM
fi
編集2:私が達成しようとしているのは、ラジオを再生し、プレーヤーが失敗したときに再生を続けることができるスクリプトです。インターネット接続がダウンし、プレーヤーが回復しなかった場合、私はプレーヤーを殺して最初からやり直します
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]}'
私があなたを正しく理解しているなら、ここに例があります:
沈黙:
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
。
これは非常に依存する方法です。
サウンドにALSAミキサーを使用しているとすると、amixer
を使用してオーディオデバイスに関する情報を照会できます。オーディオデバイスには通常、複数のオーディオチャネル(またはコントロール)があり、それぞれをミュートおよびミュート解除できます。たとえば、Master
コントロールがミュートされているかどうかを確認するには、次のようにします。
if amixer get Master | grep -q off; then
# action
fi
set
オプションを使用して、コントロールで処理を実行します。見る man amixer
詳細については。
htorの答えはおそらく機能しますが、出力のどこかに「オフ」が表示され、誤った結果が生じる可能性があります。 GNU awkを使用したより厳密なチェックは次のとおりです。
if amixer get Master | gawk 'END{ if ( $NF != "[off]" ) { exit 1 } }'; then
# muted
else
# unmuted
fi