Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 09/03/2010, à 10:30

takanuva

Savoir s'il y a un son joué

Bonjour,

Je suis en train de me confectionner une multi-prises contrôlé par usb. Le but étant, entre autre, d'allumer automatiquement l'ampli quand l'ordinateur joue un son.
Mais pour ça j'ai besoin de savoir s'il joue un son ou pas. La plupart du temps, le son émis viendra de mpd mais il est possible qu'il vienne d'un autre ordinateur à travers le réseau et pulseaudio.

D'où ma question comment savoir si pulseaudio joue un son?
merci d'avance

Hors ligne

#2 Le 09/03/2010, à 12:14

francoisp31

Re : Savoir s'il y a un son joué

/proc/n°process_pulseaudio/fd/*

comme ça si le processus ouvres un fichier tu le veras là
tout fichier ouvert par un processus et lié à ce processus par un lien symbolique

par exemple si le processus pulsaudio est le n°1111 et le fichier lu toto.mp3
il y aura un lien tel que

/proc/1111/fd/n° -> /chemin/toto.mp3

un exemple concret :

ps -ef | grep -i soffice
francois 10776     1  1 09:13 ?        00:01:52 /usr/lib/openoffice/program/soffice.bin
cd /proc/10776/fd

ls -l | grep xls
lrwx------ 1 francois francois 64 2010-03-09 10:00 33 -> /home/francois/boulot/Codes.xls

mon processus openoffice est bien en train de travailler et le fichier xls est tjrs ouvert.

Dernière modification par francoisp31 (Le 09/03/2010, à 12:17)


Que les puces d'un millier de chiens galleux infeste le cul de celui qui osera vous gacher ne serai ce
qu'une seule journée de votre vie et que les bras lui soient trop court pour qu'il puisse se le gratter.

Hors ligne

#3 Le 09/03/2010, à 12:40

Totor

Re : Savoir s'il y a un son joué

Il suffit de combiner la piste de francoisp31 avec inotify pour obtenir ce que tu souhaites.


-- Lucid Lynx --

Hors ligne

#4 Le 09/03/2010, à 20:23

takanuva

Re : Savoir s'il y a un son joué

Merci pour les astuces.

Je pense avoir identifié quel élément apparaît ou disparaît quand pulseaudio joue un son.

Quand rien n'est joué un "ls -l /proc/25987/fd/" (le 25987 à été identifier grâce à la commande de francoisp31) me donne:

lr-x------ 1 root root 64 mar  9 19:09 0 -> /dev/null
l-wx------ 1 root root 64 mar  9 19:09 1 -> /dev/null
lrwx------ 1 root root 64 mar  9 19:09 11 -> socket:[120178]
lrwx------ 1 root root 64 mar  9 19:09 12 -> anon_inode:[eventfd]
lrwx------ 1 root root 64 mar  9 19:09 13 -> anon_inode:[eventfd]
lrwx------ 1 root root 64 mar  9 19:09 14 -> anon_inode:[eventfd]
lrwx------ 1 root root 64 mar  9 19:09 15 -> anon_inode:[eventfd]
lrwx------ 1 root root 64 mar  9 19:09 16 -> /dev/snd/controlC0
lrwx------ 1 root root 64 mar  9 19:09 17 -> /dev/snd/pcmC0D0p
lrwx------ 1 root root 64 mar  9 19:09 18 -> /dev/snd/controlC0
lrwx------ 1 root root 64 mar  9 19:09 19 -> anon_inode:[eventfd]
l-wx------ 1 root root 64 mar  9 19:09 2 -> /dev/null
lrwx------ 1 root root 64 mar  9 19:09 20 -> anon_inode:[eventfd]
lrwx------ 1 root root 64 mar  9 19:09 21 -> anon_inode:[eventfd]
lrwx------ 1 root root 64 mar  9 19:09 22 -> anon_inode:[eventfd]
lrwx------ 1 root root 64 mar  9 19:09 23 -> socket:[120210]
lrwx------ 1 root root 64 mar  9 19:09 25 -> /dev/snd/controlC0
lrwx------ 1 root root 64 mar  9 19:09 26 -> socket:[120183]
lrwx------ 1 root root 64 mar  9 19:09 27 -> socket:[120185]
lrwx------ 1 root root 64 mar  9 19:09 28 -> socket:[120186]
lrwx------ 1 root root 64 mar  9 19:09 29 -> socket:[120191]
lr-x------ 1 root root 64 mar  9 19:09 3 -> pipe:[120174]
lrwx------ 1 root root 64 mar  9 19:09 30 -> socket:[120196]
l-wx------ 1 root root 64 mar  9 19:09 4 -> pipe:[120170]
l-wx------ 1 root root 64 mar  9 19:09 5 -> pipe:[120174]
lr-x------ 1 root root 64 mar  9 19:09 6 -> pipe:[120176]
l-wx------ 1 root root 64 mar  9 19:09 7 -> pipe:[120176]
lr-x------ 1 root root 64 mar  9 19:09 8 -> pipe:[120177]
l-wx------ 1 root root 64 mar  9 19:09 9 -> pipe:[120177]

Et quand quelque chose est joué:

lr-x------ 1 root root 64 mar  9 19:09 0 -> /dev/null
l-wx------ 1 root root 64 mar  9 19:09 1 -> /dev/null
lrwx------ 1 root root 64 mar  9 19:09 10 -> socket:[120919]
lrwx------ 1 root root 64 mar  9 19:09 11 -> socket:[120178]
lrwx------ 1 root root 64 mar  9 19:09 12 -> anon_inode:[eventfd]
lrwx------ 1 root root 64 mar  9 19:09 13 -> anon_inode:[eventfd]
lrwx------ 1 root root 64 mar  9 19:09 14 -> anon_inode:[eventfd]
lrwx------ 1 root root 64 mar  9 19:09 15 -> anon_inode:[eventfd]
lrwx------ 1 root root 64 mar  9 19:09 16 -> /dev/snd/controlC0
lrwx------ 1 root root 64 mar  9 19:09 17 -> /dev/snd/pcmC0D0p
lrwx------ 1 root root 64 mar  9 19:09 18 -> /dev/snd/controlC0
lrwx------ 1 root root 64 mar  9 19:09 19 -> anon_inode:[eventfd]
l-wx------ 1 root root 64 mar  9 19:09 2 -> /dev/null
lrwx------ 1 root root 64 mar  9 19:09 20 -> anon_inode:[eventfd]
lrwx------ 1 root root 64 mar  9 19:09 21 -> anon_inode:[eventfd]
lrwx------ 1 root root 64 mar  9 19:09 22 -> anon_inode:[eventfd]
lrwx------ 1 root root 64 mar  9 19:09 23 -> socket:[120210]
lrwx------ 1 root root 64 mar  9 19:09 25 -> /dev/snd/controlC0
lrwx------ 1 root root 64 mar  9 19:09 26 -> socket:[120183]
lrwx------ 1 root root 64 mar  9 19:09 27 -> socket:[120185]
lrwx------ 1 root root 64 mar  9 19:09 28 -> socket:[120186]
lrwx------ 1 root root 64 mar  9 19:09 29 -> socket:[120191]
lr-x------ 1 root root 64 mar  9 19:09 3 -> pipe:[120174]
lrwx------ 1 root root 64 mar  9 19:09 30 -> socket:[120196]
l-wx------ 1 root root 64 mar  9 19:09 4 -> pipe:[120170]
l-wx------ 1 root root 64 mar  9 19:09 5 -> pipe:[120174]
lr-x------ 1 root root 64 mar  9 19:09 6 -> pipe:[120176]
l-wx------ 1 root root 64 mar  9 19:09 7 -> pipe:[120176]
lr-x------ 1 root root 64 mar  9 19:09 8 -> pipe:[120177]
l-wx------ 1 root root 64 mar  9 19:09 9 -> pipe:[120177]

Donc le responsable semble être

lrwx------ 1 root root 64 mar  9 19:09 10 -> socket:[120919]

Est-ce que ça semble possible?

Je jette un coup d'oeil du coté de inotify.

Merci encore

Dernière modification par takanuva (Le 09/03/2010, à 20:27)

Hors ligne

#5 Le 10/03/2010, à 13:40

takanuva

Re : Savoir s'il y a un son joué

Bonjour,

Voila j'ai jeté un coup d'oeil sur inotify (pyinotify en particulier). C'est plutôt chouette, ils proposent un script déjà tout fait pour se familiariser avec l'outil dans le tutorial.
Du coup je l'ai essayé sur /proc/25987/fd/ grâce à la commande (il faut avoir installer python-inotifer avant quand même)

python -m pyinotify /proc/25987/fd/

Et là que je coup ou non la musique, rien ne se passe, rien ne m'est signalé alors que le ls-l donne bien deux contenus différents.

Je précise que j'ai lancer cette commande en tant que root sinon, je n'ai pas les droit de lecture.

D'où peut venir le problème? Est-ce qu'il y a une autre manière de voir si du son est joué?

Hors ligne

#6 Le 10/03/2010, à 16:49

Coolgeek

Re : Savoir s'il y a un son joué

un lsof sur ton périphérique audio ne permettrais pas de voir si ta carte son est occupé ?

Hors ligne

#7 Le 11/03/2010, à 14:23

takanuva

Re : Savoir s'il y a un son joué

Je n'ai pas l'impression que lsof marche.
Si je fais un

lsof | grep pulseaudi

Il n'y a aucune différence si un son est joué ou pas.

PS: c'est bien pulseaudi, il  n'y a aucune entré à pulseaudio. Le nom a dû être tronqué.

Hors ligne

#8 Le 11/03/2010, à 14:31

Coolgeek

Re : Savoir s'il y a un son joué

je pensais plutot un lsof /dev/audio0 ou lsof/dev/snd0 ou quelque chose dans le genre

Hors ligne

#9 Le 12/03/2010, à 02:51

sputnick

Re : Savoir s'il y a un son joué

On peux pas utiliser inotify sur /proc que je sache. C'est pas des vrais fichiers, c'est des fichiers virtuels.
A tu testé :

lsof /dev/dsp /dev/snd/*

?


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#10 Le 12/03/2010, à 08:59

takanuva

Re : Savoir s'il y a un son joué

Je viens de tester, et aucune des ces commandes ne revoie de résultat.
Je vous donne le résultat d'un "ls /dev/" pour voir si il pourrait être caché autre part.

agpgart          kmsg                null   ram3    sdb       tty13  tty27  tty40  tty54  ttyS1            usbdev5.1_ep00  vcsa3
block            log                 port   ram4    sdb1      tty14  tty28  tty41  tty55  ttyS2            usbdev5.1_ep81  vcsa4
bsg              loop0               ppp    ram5    shm       tty15  tty29  tty42  tty56  ttyS3            usbdev5.2_ep00  vcsa5
bus              loop1               psaux  ram6    snapshot  tty16  tty3   tty43  tty57  urandom          usbdev5.2_ep01  vcsa6
char             loop2               ptmx   ram7    snd       tty17  tty30  tty44  tty58  usbdev1.1_ep00   usbdev5.2_ep82  xconsole
console          loop3               pts    ram8    sndstat   tty18  tty31  tty45  tty59  usbdev1.1_ep81   vcs             zero
core             loop4               ram0   ram9    stderr    tty19  tty32  tty46  tty6   usbdev2.10_ep00  vcs1
cpu_dma_latency  loop5               ram1   random  stdin     tty2   tty33  tty47  tty60  usbdev2.10_ep01  vcs2
disk             loop6               ram10  root    stdout    tty20  tty34  tty48  tty61  usbdev2.10_ep81  vcs3
fd               loop7               ram11  rtc     tty       tty21  tty35  tty49  tty62  usbdev2.1_ep00   vcs4
full             MAKEDEV             ram12  rtc0    tty0      tty22  tty36  tty5   tty63  usbdev2.1_ep81   vcs5
hpet             mem                 ram13  sda     tty1      tty23  tty37  tty50  tty7   usbdev3.1_ep00   vcs6
initctl          net                 ram14  sda1    tty10     tty24  tty38  tty51  tty8   usbdev3.1_ep81   vcsa
input            network_latency     ram15  sda2    tty11     tty25  tty39  tty52  tty9   usbdev4.1_ep00   vcsa1
kmem             network_throughput  ram2   sda3    tty12     tty26  tty4   tty53  ttyS0  usbdev4.1_ep81   vcsa2

Dernière modification par takanuva (Le 12/03/2010, à 09:00)

Hors ligne