私は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
プログラムが表示されます。procfs
status
$ 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