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

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

私のオーディオデバイスがミュートされていることを確認する基本的なプログラムはありますか?

編集する:無音とは、何かが再生中のときを意味します(アクティブ化またはオンになっているだけでなく)。

このような:

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

関連情報