¿Puedo consultar qué procesos (si los hay) están accediendo actualmente al micrófono?

10

Estoy ejecutando Debian (técnicamente Raspbian), tratando de obtener un sistema de comando de voz estilo Star-Trek. Lo tengo todo en funcionamiento, pero en aras de la privacidad y todo ese jazz, no quiero que mi micrófono siempre grabe.

Me pregunto, ¿hay alguna forma de sondear qué procesos, si los hay, están accediendo actualmente al micrófono? La idea es que me haga un pequeño indicador para saber si el micrófono estaba grabando audio o no.

Mi objetivo final es encender y apagar el micrófono usando un control remoto de TV y tener un indicador LED para saber si está encendido o apagado. Tengo todo el hardware funcionando, solo necesito que finalice el software ahora.

Creo que en este momento estoy configurado en ALSA puro, es decir, no en PulseAudio, aunque podría estar equivocado.

jmite
fuente

Respuestas:

6

Primero identifique el archivo de su dispositivo de micrófono; debe ser algo similar a /dev/snd/pcmC0D0c. Para ayudarlo a encontrar el archivo del dispositivo, puede comenzar una grabación de prueba con arecordo tal, luego hacer lsof | grep '/dev/snd'; enumerará todos los programas y su archivo de dispositivo asociado.

Luego puede echar un vistazo al uso del micrófono fuser /dev/snd/pcmC0D0c. Devolverá el PID del programa que accede al dispositivo, si dicho dispositivo está abierto.

Es posible que prefiera realizar un bucle inotifywait /dev/snd/pcmC0D0calternativamente, para detectar cambios en el estado en lugar de consultar constantemente el estado del dispositivo.

Patrice Levesque
fuente
4

El campo owner_piden el procfsarchivo statusde un dispositivo PCM muestra qué programa lo ha abierto:

$ 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
CL.
fuente