LSW-framboiseAudio

De fablabo
Aller à : navigation, rechercher


lecteur audio déclenchant des samples lors du passage de spectateurs dans une exposition

DSC 4676 s.jpg

Contributeur(s)

Statut du projet

Prototype

Statut de la publication

{{{status_pub}}}

License

GPL

Inspiration

yenapa

Fichiers source

Outils

Ingrédients




Objectifs

Pour une exposition dédiée à un auteur de bande dessinée dans une bibliothèque, un espace semi-clos doté d'un plancher est consacré à un ouvrage dédié au flamenco. Il faut qu'une bande-son de flamenco se déclenche lorsque le visiteur arrive à la fin de sa visite et ne pas se déclencher lors d'une simple traversée de l'espace.

Analyse

Vu que le plancher est déjà monté au moment de la commande et la discrétion nécessaire du dispositif, l'emploi de micros piezo posés sous le plancher est impossible. Je compte donc employer un capteur PIR (infrarouge) disposé en hauteur. Par mesure d'économie et de réduction de l'encombrement, je ne compte pas utiliser de PC portable. Etant donné le coût et la galère des shields audio pour Arduino, je me penche vers une solution à base de Raspberry Pi.

Réalisation

Matériel

  • une framboise Pi avec la distribution Rasbian
  • une alim 5V 1A (important d'avoir un ampérage >= 1A pour pouvoir alimenter directement capteur, adaptateur Wifi et sortie son)
  • un capteur PIR modèle GH-718 alimenté en 5V, signal en 3,3V (donc parfait pour le GPIO de la framboise)
  • un shield de prototypage Adafruit http://www.adafruit.com/products/801 avec des borniers à vis

Logiciel

  • Puredata-extended version armhf pour la partie audio et l’algorithme de déclenchement
  • Python pour la gestion du capteur via le GPIO

Une fois le Pi démarré, la session de l'utilisateur pi est ouverte , et le fichier ~/.bashrc est consulté. A la fin de ce fichier j'ai rajouté la ligne suivante:

touch /run/shm/flamenco; cd ~/flamenco; pd-extended -nogui -noadc -alsa lecteur-audio.pd & sudo python gpio.py &

Ce qui permet de créer un fichier vide en mémoire partagée (il sera ensuite modifié par le script python et lu par le patch Pd), puis de se déplacer dans le répertoire flamenco, de lancer le bon patch pd et enfin de lancer le script python avec les droits de super utilisateur pour accéder au GPIO. Les ; et les & sont primordiaux!


Le script Python teste la valeur du capteur toutes les 0,5 secondes. Il écrit cette valeur (0 = absence ou 1 = présence) dans un fichier texte stocké dans un espace de mémoire partagée (pour ne pas devoir écrire sur la SD => /run/shm/monfichier ).

Toutes les 0.5 seconde (pas de callback, une simple horloge [metro]), le patch Puredata lit la valeur du fichier texte, et l'ajoute à la liste des x dernières valeurs enregistrées (x correspondant à 2 x durée de la fenêtre temporelle d'observation exprimée en secondes). Lorsque la moyenne arithmétique des valeurs lues dans la fenêtre passe en dessous d'un certain seuil, cela déclenche la lecture du patch audio.

Valeurs par défaut pour cette expo

  • fenêtre temporelle : 25 secondes
  • seuil de déclenchement: 0.3

Le patch audio tire au hasard un fichier audio (et ne tire jamais deux fois la même séquence à suivre), lance la lecture dudit fichier ce qui stoppe la lecture du fichier texte du capteur. A la fin de la lecture du fichier, une horloge d'une durée oscillant de façon aléatoire entre y et y + 1/3 y est lancée, avant de relancer la lecture du fichier texte du capteur (objet cyclone/drunk)

Valeurs par défaut

délai y à la fin de la lecture avant de relancer l'observation de présence : 90 secondes

code source

https://gitorious.org/ci-git/base/source/503a4627a9a13edff8e8f208e40d3e308787a7de:expoFlao

Le code (manquant) Python est une version adaptée du code de Adafruit:

http://learn.adafruit.com/adafruits-raspberry-pi-lesson-12-sensing-movement/software

TODO list

  • la qualité sonore de la carte son d'origine de la framboise Pi est vraiment horrible
  • je n'avais pas d'enceinte amplifiée équipé d'une lyre ou d'un dispositif d'accroche, j'ai donc du créer en menuiserie vite fait mal fait une boîte en OSB permettant de suspendre cette enceinte Fostex avec un crochet de projecteur lumière.
  • la salle d'expo est blanche, j'ai du peindre vite fait mal fait la boite OSB en blanc et cacher les câbles audio dans une moulure électrique Legrand sans pouvoir y glisser l'alim électrique (courants forts/courants faibles)


Adaptateur 35mm