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

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

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

現在どのプロセス(ある場合)がマイクにアクセスしているかをポーリングする方法があるかどうか疑問に思います。私の考えは、マイクが現在オーディオを録音しているかどうかを知らせる小さなインジケータを作成することでした。

私の究極の目標は、テレビのリモコンを使用してマイクをオン/オフし、マイクがオンになっているかどうかを示すLED照明を持つことです。すべてのハードウェアが正常に動作しています。これで、仕上げるソフトウェアだけが必要です。

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

答え1

マイクデバイスファイルを識別することから始めます/dev/snd/pcmC0D0c。デバイスファイルを見つけるのに役立つように、arecord次のコマンドを使用してテスト記録を開始して実行すると、lsof | grep '/dev/snd'すべてのプログラムと関連デバイスファイルが一覧表示されます。

その後、を使用してマイクの使用量を表示できますfuser /dev/snd/pcmC0D0c。デバイスが開かれると、デバイスにアクセスするプログラムのPIDが返されます。

inotifywait /dev/snd/pcmC0D0cデバイスの状態を継続的にポーリングするよりも、状態の変化を検出するためにループを好むことができます。

答え2

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

関連情報