Sonorisation sans fil
Principe
Matériel
Réception et traitement du signal OSC:
- Raspberry Pi modèle B : http://www.raspberrypi.org/products/model-b/
- Antenne Wifi TP-Link TL-WN722N : http://www.tp-link.fr/products/details/?categoryid=&model=TL-WN722N
- Hub USB avec alimentation secteur 5V 2A :
- Carte SD 8Go Sandisk classe 10 : http://www.sandisk.fr/products/memory-cards/sd/ultra-uhs-1-class10/?capacity=8GB
Alimentation :
- Batterie au plomb 12V 5.4 Ah : http://www.enix-energies.com/batterie-plomb-agm-s-12v-5-4ah-12v-5-4ah-t1-amp9047.html
- Chargeur de batterie 230V -> 12V 1.5A : http://www.all-batteries.fr/chargeur-plomb-6v-ou-12v-1-5a-230v-economique-cep0305.html
- Transformateur 12V -> 5V USB : http://www.aukey.com/product/cc-c2-24w-aipower-car-charger-micro-usb-black
Sono :
- Amplificateur 65W RMS : http://www.jvc.fr/product.php?id=KS-AX3202&catid=100194
- Haut-parleur 2 voies séparées 45W RMS : http://www.pioneer.eu/fr/products/25/131/201/TS-G172Ci/page.html
- Câble Audio Jack 3,5 mm stéréo vers 2 x RCA Mâle 1 m : http://www.amazon.fr/gp/product/B00A7W26S0
- Carte son Hama https://de.hama.com/00051620/hama-71-surround-usb-sound-card
Installation
Configurer le WiFi comme ceci :
http://wiki.labomedia.org/index.php/Emission_radio_avec_une_Raspberry_Pi#Connecter_le_WiFi_au_r.C3.A9seau_local
Configurer du système audio : Il faut modifier les fichier de configuration audio :
sudo nano /etc/modprobe.d/alsa-base.conf
Il faut modifier la ligne suivante :
options snd-usb-audio index=-2
Il faut modifier la valeur de l'index de -2 à 0 comme ceci :
options snd-usb-audio index=0
Sauvegardez Ctrl + o et quittez Ctrl + x Vous pouvez tester avec :
speaker-test -c2 -D hw:0,0
On peut régler les volumes
alsamixer
Vous pouvez augmenter les volumes avec les différentes flèches. Esc pour quitter.
Installation des modules logiciels
L communication entre DLight et la Raspberry Pi se font par OSC, donc il faut installer la librairie pyOSC :
git clone git://gitorious.org/pyosc/devel.git cd devel sudo ./setup.py
Vérifier l'adresse de la Pi dans le réseau avec
ifconfig
modifier le fichier Tartuffe.py si nécessaire.
Interface
Le fichier config.xml :
<OSC>
<adresse>/circ/</adresse>
<portReception>7001</portReception>
</OSC>
<musique>
<adresseDMX>100</adresseDMX>
<fichier>musique.mp3</fichier>
</musique>
<canalArret circuit = 102>123</canalArret>
<canalArret circuit = 103>123</canalArret>
<seuilInterupteur circuit = 110>127</seuilInterupteur>
#pragma once
#include "ofMain.h"
#include "ofxXmlSettings.h"
#include "ofxOsc.h"
class ofApp : public ofBaseApp{
public:
void setup();
void update();
void draw();
void keyPressed(int key);
void keyReleased(int key);
void mouseMoved(int x, int y );
void mouseDragged(int x, int y, int button);
void mousePressed(int x, int y, int button);
void mouseReleased(int x, int y, int button);
void windowResized(int w, int h);
void dragEvent(ofDragInfo dragInfo);
void gotMessage(ofMessage msg);
ofxXmlSettings XML;
map<int, int> canauxArret;
map<int, int> canaux;
map<int, ofSoundPlayer*> discotheque;
pair<int, int> interrupteur;
// OSC
ofxOscReceiver recepteurOSC;
int portReceptionOSC;
string adresseOSC;
string messageOSC;
string getOscMsgAsString(ofxOscMessage m);
};
#include "ofApp.h"
//--------------------------------------------------------------
void ofApp::setup(){
// XML
if (XML.loadFile("config.xml")) {
XML.pushTag("OSC");
adresseOSC = XML.getValue("adresse", "");
portReceptionOSC = XML.getValue("portReception", 0);
XML.popTag();
int num = XML.getNumTags("musique");
for (int i = 0; i < num; i++) {
XML.pushTag("musique", i);
int indice = XML.getValue("adresseDMX", 0);
discotheque[indice] = new ofSoundPlayer();
string str = XML.getValue("fichier", "");
discotheque[indice]->loadSound(str);
discotheque[indice]->setVolume(0.0f);
discotheque[indice]->setMultiPlay(false);
XML.popTag();
cout << indice << " : " << str << endl;
}
num = XML.getNumTags("canalArret");
for (int i = 0; i < num; i++) {
//XML.pushTag("canalArre
canauxArret[XML.getAttribute("canalArret","circuit", 0, i)] = XML.getValue("canalArret", 0, i);
canaux[XML.getAttribute("canalArret","circuit", 0, i)] = 0;
}
interrupteur = make_pair(XML.getAttribute("seuilInterupteur","circuit", 0, 0), XML.getValue("seuilInterupteur", 0, 0));
cout << "Circuit interrupteur : " << interrupteur.first << ", seuil : " << interrupteur.second << endl;
XML.clear();
} else {
ofLogError("Le fichier n'a pu etre lu");
}
// OSC
recepteurOSC.setup(portReceptionOSC);
cout << "Port reception : " << portReceptionOSC << endl;
}
//--------------------------------------------------------------
void ofApp::update(){
while(recepteurOSC.hasWaitingMessages()){
ofxOscMessage m;
recepteurOSC.getNextMessage(&m);
string adresse = m.getAddress();
if (adresse.substr(0, adresseOSC.length()) == adresseOSC) {
int circuit = ofToInt(adresse.substr(adresseOSC.length(), adresse.length()));
int valeur = m.getArgAsInt32(0);
if (canauxArret.find(circuit) != canauxArret.end()) {
canaux[circuit] = valeur;
//cout << canauxArret.size() << endl;
}
if (discotheque.find(circuit) != discotheque.end()) {
if (valeur == 0) {
if (discotheque[circuit]->getIsPlaying()) {
discotheque[circuit]->stop();
}
} else {
if (!discotheque[circuit]->getIsPlaying()) {
discotheque[circuit]->play();
}
discotheque[circuit]->setVolume(ofMap(valeur, 1, 255, 0, 1));
}
}
}
}
int drapeau = 0;
for (map<int,int>::iterator it = canauxArret.begin(); it != canauxArret.end(); ++it) {
if (canaux[it->first] == it->second) {
drapeau++;
}
}
if (drapeau == canauxArret.size()) {
cout << "Au revoir" << endl;
system("sudo halt");
}
}
//--------------------------------------------------------------
void ofApp::draw(){
}
Modifier le fichier addons.make pour ajouter les addons:
ofxXmlSettings ofxOsc
Installer la librairie WiringPi.
Modifier le fichier config.make pour la compilation.