我可以查询当前哪些进程(如果有)正在访问麦克风吗?

我可以查询当前哪些进程(如果有)正在访问麦克风吗?

我正在运行 Debian(技术上是 Raspbian),试图获得星际迷航风格的语音命令系统。我已经基本启动并运行了它,但为了隐私和所有爵士乐的利益,我不希望我的麦克风总是录音。

我想知道,有没有办法轮询哪些进程(如果有)当前正在访问麦克风?我的想法是为自己制作一个小指示器来判断麦克风当前是否正在录制音频。

我的最终目标是使用电视遥控器打开和关闭麦克风,并有一个 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

相关内容