C++ : Communication OSC
De Centre de Ressources Numériques - Labomedia
Installation de OSCPack
Télécharger OSCPack
cd wget http://oscpack.googlecode.com/files/oscpack_1_1_0.zip
Dézipper l'archive
unzip oscpack_1_1_0.zip
Installation
cd oscpack_1_1_0 sudo make install
Après l'installation, nous pouvons nettoyer les fichiers superflus
cd rm -r oscpack_1_1_0 rm oscpack_1_1_0.zip
Réception OSC
Dans le répertoire de votre choix, créer un fichier avec
sudo nano main.cpp
Coller dedans le code source suivant
#include <iostream>
#include <cstring>
#include "osc/OscReceivedElements.h"
#include "osc/OscPacketListener.h"
#include "ip/UdpSocket.h"
using namespace std;
using namespace osc;
#define PORT 7001
class ReceveurOSC : public OscPacketListener {
protected:
virtual void ProcessMessage(const ReceivedMessage& m, const IpEndpointName& remoteEndpoint) {
(void) remoteEndpoint; // Supprime les avertissements pour les paramètres non-utilisés
try {
if (strcmp( m.AddressPattern(), "/test") == 0 ) {
ReceivedMessageArgumentStream args = m.ArgumentStream();
osc::int32 valeur;
args >> valeur >> EndMessage;
cout << "Réception à l'adresse '/test1' d'un message avec comme valeur : " << valeur << endl;
}
} catch(Exception& e) {
cout << "Erreur pendant le traitement OSC : "
<< m.AddressPattern() << ": " << e.what() << endl;
}
}
};
int main(int argc, char* argv[]) {
(void) argc; // Supprime les avertissements pour les paramètres non-utilisés
(void) argv; // Supprime les avertissements pour les paramètres non-utilisés
ReceveurOSC receveur;
UdpListeningReceiveSocket s(IpEndpointName(IpEndpointName::ANY_ADDRESS, PORT), &receveur);
s.RunUntilSigInt();
return 0;
}
Sauvegarder
Ctrl-o
Quitter
Ctrl-x
Pour lancer la compilation
g++ -Wall -o ReceveurOSC main.cpp -loscpack -I /usr/local/include/oscpack
Pour exécuter le programme
./ReceveurOSC
Pour tester le programme, voici un émetteur de message OSC sous Processing
import oscP5.*;
import netP5.*;
OscP5 oscP5;
NetAddress myRemoteLocation;
String adresseDeLaRaspberry = "192.168.2.3";
void setup() {
size(400,400);
frameRate(25);
oscP5 = new OscP5(this,7000);
myRemoteLocation = new NetAddress(adresseDeLaRaspberry, 7001);
}
void draw() {
background(0);
}
void mousePressed() {
OscMessage myMessage = new OscMessage("/test");
myMessage.add((int)mouseX);
oscP5.send(myMessage, myRemoteLocation);
}