LSW-framboiseAudio
lecteur audio déclenchant des samples lors du passage de spectateurs dans une exposition
Contributeur·ice·s
Statut du projet
Prototype
Statut de la publication
License
GPL
Inspiration
yenapa
Fichiers source
Machines
Matériaux
Sommaire
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)