マイコンピュータは、ネットワーク経由でオンまたはオフにできるオーディオアンプに接続されています。 10分間オーディオが再生されない場合は、自動的にオフになるように設定したいと思います。
/proc/asound/card*/pcm*/sub*/status
ここでオーディオが出力されていることを示す単語があるかどうかを調べるよう提案するいくつかの同様の質問を見つけましたがRUNNING
、多くのプログラムではノイズが発生しなくてもオーディオが実行されるようにするようです。ただ出力を静かにするだけです。 Firefoxの実行など、一部のPythonプログラムがこれを行うことがわかりましたapulse
。
/proc/asound/
これは、スピーカーが恒久的であるため、音声が出ないタイミングを検出できないことを意味しますRUNNING
。
再生される唯一のオーディオ信号が無音の場合を検出する別の方法はありますか?hw
デバイスが使用中のデバイスであっても、ALSA出力を記録または傍受する方法はありますか?
答え1
sox
これはalsa(alsaループバックモジュール)のみを使用してサイレントを検出する概念実証デモです。ループバックモジュールは、サウンドを再生して再録音できる出力デバイスを提供します。たとえば、mplayer
サウンド出力にループバックを直接使用し、ループバックsox
で録音を実行し、無音を検出してから元のハードウェア出力デバイスに出力できます。
モジュールのロード
sudo modprobe snd-aloop
(利用可能なカーネルモジュールのリストにあります)。aplay -l
これで、2つのデバイスを含む新しいカードが一覧表示されます。デバイス0は再生に使用され、デバイス1は録音に使用されます。 8つの独立した「サブデバイス」チャンネルがあり、通常は省略できるため、数字0を使用するのが最も簡単です。 (aplay
バッグで見つけましたalsa-utils
)
$ aplay -l
...
card 1: Loopback [Loopback], device 0: Loopback PCM [Loopback PCM]
Subdevices: 8/8
Subdevice #0: subdevice #0
Subdevice #1: subdevice #1
...
Subdevice #7: subdevice #7
card 1: Loopback [Loopback], device 1: Loopback PCM [Loopback PCM]
Subdevices: 8/8
Subdevice #0: subdevice #0
Subdevice #1: subdevice #1
...
Subdevice #7: subdevice #7
これで、パッケージの他のユーティリティを使用してループバックデバイス0(サブデバイス0)から連続ビープ音を生成できます。
speaker-test -t sine -D hw:Loopback
または、たとえば、mplayer
オプションのあるデバイスを使用するように指示します。-ao alsa:device=hw=Loopback
sox
デバイスの反対側を読み、実際のハードウェアに書き込むように実行するまで、音は聞こえません(カード0と仮定)。
sox -q -t alsa hw:Loopback,1 -t alsa hw:0 silence 0 1 10.0 2%
(警告をたくさん見ました。サックス警告 alsa: アンダーラン)。スピーカーのテストを停止すると、sox
10秒間サイレントしてからコマンドを停止します。ミュートするとmplayer
音は鳴りませんが、これはデータレベルとは関係がないようです(から削除すると可視化できます-q
)sox
。mplayer
サイレントを検出するには、音のレベルを一時停止または減らす必要があります。sox
また、オーディオに1〜2秒の遅延が発生する可能性があります。カード0の代わりにループバックデバイスをプライマリデバイスに設定するようにalsaを設定できる必要があります。
より満足のいく解決策は、カーネルサウンドドライバがリアルタイムオーディオを処理できるようにし、sox
それを使用してサイレントを検出して出力を削除することです。可能であるように見えますが、alsaだけを使用すると、少し複雑で私が持っていない知識が必要ですが、両方のデバイス、元のサウンドsox
カード、およびそれを読むことができる仮想デバイスにサウンドをコピーする例を見つけることができます。
pulseaudioを使用したより簡単なソリューションの実装監視装置可能です。pactl load-module module-combine-sink
調査にも使用できます。