C++ : Communication OSC

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 

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); 
}
  • c_communication_osc.txt
  • Dernière modification: 2018/04/26 16:25
  • par serge