私のオーディオデバイスがミュートされていることを確認する基本的なプログラムはありますか?
編集する:無音とは、何かが再生中のときを意味します(アクティブ化またはオンになっているだけでなく)。
このような:
if [[ device0 is silent ]] ; then
radio $RANDOM
fi
編集2:私が実装したいのは、ブロードキャストを再生し、プレーヤーが失敗した場合でも再生を続けることができるスクリプトです。たとえば、インターネット接続が失われてプレーヤーが再開されない場合は、プレーヤーを殺して再起動します。
答え1
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]}'
答え2
私が正しく理解した場合、例は次のとおりです。
静かな:
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
ALSAミキサーを使用してサウンドを再生すると仮定すると、amixer
それを使用してオーディオデバイスに関する情報を照会できます。オーディオデバイスには、それぞれミュートとミュート解除が可能な複数のオーディオチャンネルやコントロールがあることがよくあります。たとえば、Master
コントロールがミュートされていることを確認するには、次のようにします。
if amixer get Master | grep -q off; then
# action
fi
このset
オプションを使用してコントロールの操作を実行します。man amixer
追加のヘルプを参照してください。
答え4
htorの答えはうまくいくかもしれませんが、出力の他の場所に「off」が表示され、誤った結果が生じる可能性があります。以下はGNU awkを使ったより厳格なチェックです:
if amixer get Master | gawk 'END{ if ( $NF != "[off]" ) { exit 1 } }'; then
# muted
else
# unmuted
fi