Puis-je demander quels processus (le cas échéant) accèdent actuellement au microphone?

10

J'utilise Debian (techniquement Raspbian), essayant d'obtenir un système de commande vocale de style Star-Trek. Je l'ai principalement opérationnel, mais dans l'intérêt de la vie privée et de tout ce jazz, je ne veux pas que mon microphone enregistre toujours.

Je me demande, existe-t-il un moyen d'interroger les processus, le cas échéant, qui accèdent actuellement au microphone? L'idée est que je me ferais un petit indicateur pour dire si le microphone enregistrait actuellement de l'audio ou non.

Mon objectif ultime est d'allumer et d'éteindre le microphone à l'aide d'une télécommande TV et d'avoir un indicateur LED pour savoir s'il est allumé ou éteint. J'ai tout le matériel qui fonctionne, j'ai juste besoin de la fin du logiciel maintenant.

Je crois qu'en ce moment, je suis configuré en ALSA pur, c'est-à-dire pas PulseAudio, bien que je puisse me tromper.

jmite
la source

Réponses:

6

Identifiez d'abord votre fichier de périphérique de microphone; devrait être quelque chose de similaire à /dev/snd/pcmC0D0c. Pour vous aider à trouver le fichier du périphérique, vous pouvez démarrer un enregistrement de test avec arecordou tel, puis faites lsof | grep '/dev/snd'; il répertorie tous les programmes et leur fichier de périphérique associé.

Ensuite, vous pouvez consulter l'utilisation du microphone à l'aide de fuser /dev/snd/pcmC0D0c. Il renverra le PID du programme accédant à l'appareil, si celui-ci est ouvert.

Vous pouvez également préférer effectuer une boucle inotifywait /dev/snd/pcmC0D0cpour détecter les changements d'état plutôt que d'interroger constamment l'état de l'appareil.

Patrice Levesque
la source
4

Le champ owner_piddans le procfsfichier statusd'un périphérique PCM indique le programme qui l'a ouvert:

$ 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.
la source