私はDebian(技術的にはRaspbian)を実行しており、スタートレックスタイルの音声コマンドシステムを取得しようとしています。私はそれをほとんど稼働させていますが、プライバシーとそのすべてのジャズの利益のために、マイクが常に録音されることを望んでいません。
疑問に思っているのですが、現在マイクにアクセスしているプロセスがある場合、それをポーリングする方法はありますか?アイデアは、マイクが現在オーディオを録音しているかどうかを判断するための小さなインジケーターを作成することです。
私の最終的な目標は、テレビのリモコンを使用してマイクのオンとオフを切り替え、オンかオフかを示すLEDインジケーターを用意することです。すべてのハードウェアが機能しているので、ソフトウェアを終了する必要があります。
私は今、PulseAudioではなく純粋なALSAで構成されていると信じていますが、間違っている可能性があります。
まず、マイクデバイスファイルを特定します。 /dev/snd/pcmC0D0c
のようなものである必要があります。デバイスファイルを見つけやすくするために、arecord
などでテスト記録を開始してから、lsof | grep '/dev/snd'
;を実行できます。すべてのプログラムとそれに関連するデバイスファイルが一覧表示されます。
次に、fuser /dev/snd/pcmC0D0c
を使用してマイクの使用法を確認できます。デバイスが開かれている場合、デバイスにアクセスしているプログラムのPIDを返します。
代わりに、inotifywait /dev/snd/pcmC0D0c
をループして、デバイスのステータスを常にポーリングするのではなく、状態の変化を検出することもできます。
PCMデバイスのprocfs
ファイルstatus
のフィールドowner_pid
は、どのプログラムがそれを開いたかを示します。
$ 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