現在マイクにアクセスしているプロセス(存在する場合)を照会できますか?


10

私はDebian(技術的にはRaspbian)を実行しており、Star-Trekスタイルの音声コマンドシステムを取得しようとしています。私はそれをほとんど稼働させていますが、プライバシーとすべてのジャズのために、マイクを常に録音したくありません。

私は不思議に思っています、現在マイクにアクセスしているプロセスがあれば、それをポーリングする方法はありますか?その考えは、マイクが現在オーディオを録音しているかどうかを知るための小さな指標となることです。

私の最終的な目標は、テレビのリモコンを使用してマイクのオンとオフを切り替え、オンかオフかを示すLEDインジケーターを用意することです。すべてのハードウェアが動作しているので、今すぐソフトウェアを終了する必要があります。

私は今、PulseAudioではなく純粋なALSAで構成されていると思いますが、私は間違っている可能性があります。

回答:


6

まず、マイクデバイスファイルを特定します。に似て/dev/snd/pcmC0D0cいる必要があります。デバイスファイルを見つけやすくするために、arecordなどを使用してテスト記録を開始してから、を実行できますlsof | grep '/dev/snd'。すべてのプログラムとそれに関連するデバイスファイルが一覧表示されます。

次に、を使用してマイクの使用状況を確認できますfuser /dev/snd/pcmC0D0c。デバイスが開かれている場合、デバイスにアクセスするプログラムのPIDを返します。

inotifywait /dev/snd/pcmC0D0c別の方法としてループして、デバイスのステータスを常にポーリングするのではなく、状態の変化を検出することもできます。


4

PCMデバイスのファイルのフィールドowner_pidは、どのプログラムがそれを開いたかを示します。procfsstatus

$ grep owner_pid /proc/asound/card*/pcm*/sub*/status
/proc/asound/card2/pcm0p/sub0/status:owner_pid   : 1803
$ ps -p 1803
  PID TTY          TIME CMD
 1803 pts/0    00:00:00 aplay
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.