Pages : 1
#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
Pages : 1