kramann.info
© Guido Kramann

Login: Passwort:










kramann.info
© Guido Kramann

Login: Passwort:




Basisversuche im i2audiolab

(EN google-translate)

(PL google-translate)

Befehle an die WFS-Anlage schicken

siehe auch:

i2audiolab raumklang-technische-informationen

Es wurden einige grundlegende Experimente durchgeführt, um die Möglichkeit auszutesten, die WFS-Anlage über ein Processing-Skript mittels OSC zu steuern.

Hierzu wurden Audiofiles erstellt, die jeweils in einer Sekunde eine ganze Welle enthalten. Dies ermöglicht sie ohne "Knacks" zu "loopen". Denn die Sounds werden von einem PC der Anlage bereitgestellt und werden dann über OSC-Befehle an bestimmte Stellen in der Hörebene als Punktschallquelle gesetzt, oder als Ambient-Sound.

// Quellen erstellen:
// 48000Hz, mono, 16Bit, 1 Sekunde Dauer
// 0..4                       samp   freq/Hz 
// 480/1 == 2*2*2*2*2*3*5     480    100
// 480/2 ==   2*2*2*2*3*5     240    200
// 480/3 == 2*2*2*2*2  *5     160    300
// 480/4 ==     2*2*2*3*5     120    400
// 480/5 == 2*2*2*2*2*3        96    500


mat = zeros(1,48000);
teiler = [2,3,4,5];
for k=1:4
    samp = 480/teiler(k);
    freq = 48000.0/samp;
    t=0.0;
    dt = 1.0/48000.0;
    for i=1:48000
        wert = 0.5*sin(2*%pi*freq*t);
        mat(1,i)=wert;
        t=t+dt;
    end
    name = sprintf("sinus_neu%i_%iHz.wav",k,round(freq));
    wavwrite(mat, 48000.0, 16, name);
end

Code 0-1: Erstellen von Audiodateien, die geeignet sind für seamless loop mit Ardour.

wavquellen.zip - Audioquellen.

Erstes Experiment: Punktschallquellen erzeugen und einschalten.

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

import oscP5.*;
import netP5.*;

//Beispiel Ardourbefehl:
//  W-LAN xxx
//  PORT  xxx
//  Ardour OSC googeln.

//   ARDOUR/transport_play
//   ARDOUR/transport_stop
//   ARDOUR/transport_stop

//   48000 Samplerate!


//String IP   = "xxx"; //LAN   //Ardour über Lan: 192.168.3.254
String IP   = "xxx";   //W-LAN
int    PORT = xxx;
double VSCHALL = 343.0;  // m/s
double BRAUM   = 5.0;    // m Breite des Raumes
double HRAUM   = 5.7;   // m Tiefe des Raumes
int[] ID = {0,1,2,3};

int BREITE = 640; //Fenster dieses Sketches 
int HOEHE  = 480;
double PIXEL_PRO_METER = 4.0;

OSC osc;
Performance performance;

void setup() 
{
    size(BREITE,HOEHE);
    frameRate(25);

    osc = new OSC(IP,PORT);
    osc.initialisieren();
    
    performance = new Performance(osc,VSCHALL,BRAUM,HRAUM,ID,BREITE,HOEHE,PIXEL_PRO_METER);
    
    performance.initialisieren();
    performance.starten();
}


void draw() 
{
  background(0);
  performance.draw();
}

Code 0-2: test001_punktquelle_erzeugen_und_einschalten.pde

public class Performance implements Runnable
{
    //Speziell: 4 Quellen
    float[][] xy = {{0,0},{0,0},{0,0},{0,0}}; 
    int[][]  rgb = {{0,0,0},{0,0,0},{0,0,0},{0,0,0}}; 
    boolean[] aktiv = {false,false,false,false};
  
    private int[] ID;
  
    private ScheduledExecutorService  schedExecService;
    private long              periode = 2000;
 
    private double VSCHALL;  // m/s
    private double BRAUM;    // m Breite des Raumes
    private double HRAUM;    // m Länge des Raumes
    private int BREITE;
    private int HOEHE;
    private double PIXEL_PRO_METER;
    
    private OSC osc;
  
    public void setzePosition(int nr, double phi, double millis)
    {
         double r = VSCHALL*millis*0.001;
         double x = r*Math.cos(phi);
         double y = r*Math.sin(phi);
         
         float x_wfs =  (float)(  x );//+ BRAUM*0.5);
         float y_wfs =  (float)( -y + HRAUM*0.5);

         xy[nr][0] =  (float)(x*PIXEL_PRO_METER) + (float)(BREITE/2);
         xy[nr][1] = -(float)(y*PIXEL_PRO_METER) + (float)(HOEHE/2);
         
         osc.setzePosition(nr,x_wfs,y_wfs);
    }
  
    public void auffrischen()
    {
        setzePosition(ID[0],0.0,        100);
        setzePosition(ID[1],0.5*Math.PI,100);
        setzePosition(ID[2],1.0*Math.PI,100);
        setzePosition(ID[3],1.5*Math.PI,100);
        
        osc.setzeFarbe(ID[0],255,0,0);
        osc.setzeFarbe(ID[1],0,255,0);
        osc.setzeFarbe(ID[2],0,0,255);
        osc.setzeFarbe(ID[3],255,255,0);
    }
  
    public void initialisieren()
    {              
        osc.deaktiviereQuelle(ID[0]);
        osc.deaktiviereQuelle(ID[1]);
        osc.deaktiviereQuelle(ID[2]);
        osc.deaktiviereQuelle(ID[3]);
        
        osc.setzeAlsPunktquelle(ID[0]);        
        osc.setzeAlsPunktquelle(ID[1]);        
        osc.setzeAlsPunktquelle(ID[2]);        
        osc.setzeAlsPunktquelle(ID[3]);
        
        setzePosition(ID[0],0.0,        100);
        setzePosition(ID[1],0.5*Math.PI,100);
        setzePosition(ID[2],1.0*Math.PI,100);
        setzePosition(ID[3],1.5*Math.PI,100);
        
        osc.setzeFarbe(ID[0],255,0,0);
        osc.setzeFarbe(ID[1],0,255,0);
        osc.setzeFarbe(ID[2],0,0,255);
        osc.setzeFarbe(ID[3],255,255,0);
        rgb[0] = new int[] {255,0,0};        
        rgb[1] = new int[] {0,255,0};        
        rgb[2] = new int[] {0,0,255};        
        rgb[3] = new int[] {255,255,0};        
    }

    public void starten()
    {
        schedExecService.scheduleAtFixedRate(this, 0, periode, TimeUnit.MILLISECONDS);               
    }
  
    public Performance(OSC osc,double VSCHALL,double BRAUM,double HRAUM, int[] ID, 
                       int BREITE, int HOEHE, double PIXEL_PRO_METER)
    {
        this.osc = osc;
        this.VSCHALL = VSCHALL;
        this.BRAUM = BRAUM;
        this.HRAUM = HRAUM;        
        
        this.ID = ID;
        
        this.BREITE = BREITE;
        this.HOEHE = HOEHE;
        this.PIXEL_PRO_METER = PIXEL_PRO_METER;
        
        schedExecService = Executors.newSingleThreadScheduledExecutor();
    }

    int ZAEHLER = 0;
  
    public void run()
    {
         println("
++++ SENDE NEUE NACHRICHTEN  ++++");
      
         switch(ZAEHLER)
         {
              case 0:
                  println("0000");
                  osc.deaktiviereQuelle(0);
                  osc.deaktiviereQuelle(1);
                  osc.deaktiviereQuelle(2);
                  osc.deaktiviereQuelle(3);
                  aktiv[0]=false;aktiv[1]=false;aktiv[2]=false;aktiv[3]=false;
              break;
              case 1:
osc.stoppeArdourquellen();    //dadurch GRÜN nicht hörbar!            
                  println("1000");
                  osc.aktiviereQuelle(0);
                  osc.deaktiviereQuelle(1);
                  osc.deaktiviereQuelle(2);
                  osc.deaktiviereQuelle(3); 
                  
                  auffrischen();
                  aktiv[0]=true;aktiv[1]=false;aktiv[2]=false;aktiv[3]=false;
              break;
              case 2:
osc.starteArdourquellen();              
                  println("0100");
                  osc.deaktiviereQuelle(0);
                  osc.aktiviereQuelle(1);
                  osc.deaktiviereQuelle(2);
                  osc.deaktiviereQuelle(3);              
                  auffrischen();
                  aktiv[0]=false;aktiv[1]=true;aktiv[2]=false;aktiv[3]=false;
              break;
              case 3:
                  println("0010");
                  osc.deaktiviereQuelle(0);
                  osc.deaktiviereQuelle(1);
                  osc.aktiviereQuelle(2);
                  osc.deaktiviereQuelle(3);              
                  auffrischen();
                  aktiv[0]=false;aktiv[1]=false;aktiv[2]=true;aktiv[3]=false;
              break;
              case 4:
                  println("0001");
                  osc.deaktiviereQuelle(0);
                  osc.deaktiviereQuelle(1);
                  osc.deaktiviereQuelle(2);
                  osc.aktiviereQuelle(3);              
                  auffrischen();
                  aktiv[0]=false;aktiv[1]=false;aktiv[2]=false;aktiv[3]=true;
              break;
         }
      
      
         ZAEHLER++;
         ZAEHLER%=5;
    }
    
    public void draw()
    {
          noStroke();
          //Raum einzeichnen:
          fill(100,100,100);
          rect((float)(BREITE/2)-0.5f*(float)(BRAUM*PIXEL_PRO_METER),
               (float)(HOEHE/2) -0.5f*(float)(HRAUM*PIXEL_PRO_METER),
               (float)(BRAUM*PIXEL_PRO_METER),
               (float)(HRAUM*PIXEL_PRO_METER));
      
          fill(100,100,255);
          rect((float)(BREITE/2)-0.5f*0.6f*(float)(BRAUM*PIXEL_PRO_METER),
               (float)(HOEHE/2) -0.5f*(float)(HRAUM*PIXEL_PRO_METER),
               0.6f*(float)(BRAUM*PIXEL_PRO_METER),
               0.1f*(float)(HRAUM*PIXEL_PRO_METER));
      
          for(int i=0;i<xy.length;i++)
          {
                if(aktiv[i]==true)
                {
                    fill(rgb[i][0],rgb[i][1],rgb[i][2]);
                    ellipse(xy[i][0],xy[i][1],HOEHE/40,HOEHE/40);
                }    
          }
    }
}

Code 0-3: Performance.pde

public class OSC
{
    private String[] nachrichten = {
                                       "/WONDER/source/activate",
                                       "/WONDER/source/deactivate",
                                       "/WONDER/source/type",
                                       "/WONDER/source/position",
                                       "/WONDER/source/color"
                                   };
                                   
                                   
    private String IP;
    private int    PORT;
    
    NetAddress zielgeraet;
    NetAddress zielgeraetArdour;
    OscP5 oscP5;
    
    
    public void initialisieren()
    {
        oscP5      = new OscP5(this,PORT);
        zielgeraet = new NetAddress(IP,PORT);        
        zielgeraetArdour = new NetAddress(IP,3819);        
    }
    
    public void pause()
    {
         try
         {
             Thread.sleep(1);
         }
         catch(Exception e)
         {
         }
    }
    
    public OSC()
    {
        this.IP   = "127.0.0.1";
        this.PORT = 12000;
    }
    
    public OSC(String IP, int PORT)
    {
        this.IP   = IP;
        this.PORT = PORT;
    }

    public void starteArdourquellen()
    {
        OscMessage myMessage = new OscMessage("/ardour/transport_play");  
        //myMessage.add(nr); 
        oscP5.send(myMessage, zielgeraetArdour);    
        pause();
    }
    public void stoppeArdourquellen()
    {
        OscMessage myMessage = new OscMessage("/ardour/transport_stop");  
        //myMessage.add(nr); 
        oscP5.send(myMessage, zielgeraetArdour);    
        pause();
    }
 
    public void aktiviereQuelle(int nr)
    {
        OscMessage myMessage = new OscMessage(nachrichten[0]);  
        myMessage.add(nr); 
        oscP5.send(myMessage, zielgeraet);    
        pause();
    }
    
    public void deaktiviereQuelle(int nr)
    {
        OscMessage myMessage = new OscMessage(nachrichten[1]);  
        myMessage.add(nr); 
        oscP5.send(myMessage, zielgeraet);                  
        pause();
    }
    
    public void setzeAlsPunktquelle(int nr)
    {
        OscMessage myMessage = new OscMessage(nachrichten[2]);  
        myMessage.add(nr); 
        myMessage.add(1); 
        oscP5.send(myMessage, zielgeraet);                  
        pause();
    }
    
    public void setzePosition(int nr, float x, float y)
    {
        OscMessage myMessage = new OscMessage(nachrichten[3]);  
        myMessage.add(nr); 
        myMessage.add(new Float(x)); 
        myMessage.add(new Float(y)); 
        oscP5.send(myMessage, zielgeraet);                  
        pause();
    }
    
    public void setzeFarbe(int nr, int rot, int gruen, int blau)
    {
        OscMessage myMessage = new OscMessage(nachrichten[4]);  
        myMessage.add(nr); 
        myMessage.add(rot); 
        myMessage.add(gruen); 
        myMessage.add(blau); 
        oscP5.send(myMessage, zielgeraet);                  
        pause();
    }
    
    void oscEvent(OscMessage theOscMessage) 
    {
         /* print the address pattern and the typetag of the received OscMessage */
         print("OSC-Nachricht empfangen:");
         String name = theOscMessage.addrPattern();
         print("Name: "+name);         
         println(" typetag: "+theOscMessage.typetag());
         
         for(int i=0;i<nachrichten.length;i++)
         {
               if(name.equals(nachrichten[i]))
               {
                    println("Nachricht wurde identifiziert:");
                    switch(i)
                    {
                         case 0:
                             int nr0 = theOscMessage.get(0).intValue();
                             println("**** QUELLE mit ID "+nr0+" AN ****");
                         break;
                         case 1:
                             int nr1 = theOscMessage.get(0).intValue();
                             println("**** QUELLE mit ID "+nr1+" AUS ****");
                         break;
                         case 2:
                             int nr2 = theOscMessage.get(0).intValue();
                             int typ = theOscMessage.get(1).intValue();
                             println("**** SETZE QUELLE mit ID "+nr2+" ALS TYP "+typ+" ****");
                         break;
                         case 3:
                             int nr3 = theOscMessage.get(0).intValue();
                             float x = theOscMessage.get(1).floatValue();
                             float y = theOscMessage.get(2).floatValue();
                             println("**** SETZE QUELLE mit ID "+nr3+" AN POSITION x="+x+" y="+y+" ****");
                         break;
                         case 4:
                             int nr4   = theOscMessage.get(0).intValue();
                             int rot   = theOscMessage.get(1).intValue();
                             int gruen = theOscMessage.get(2).intValue();
                             int blau  = theOscMessage.get(3).intValue();
                             println("**** SETZE QUELLE mit ID "+nr4+" MIT FARBE rot="+rot+" gruen="+gruen+" blau="+blau+" ****");
                         break;
                         
                    }
                    
                    break;
               }
         }
    }     
}    

Code 0-4: OSC.pde

Zweites Experiment: Kreisbewegung einer Punktschallquelle.

// 20 mal pro Sekunde die Positionen der vier Quellen ändern.
// Kreisbewegung um die Raummitte herum.

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

import oscP5.*;
import netP5.*;

//Beispiel Ardourbefehl:
//  W-LAN xxx
//  PORT  xxx
//  Ardour OSC googeln.

//   ARDOUR/transport_play
//   ARDOUR/transport_stop
//   ARDOUR/transport_stop

//   48000 Samplerate!

//String IP   = "xxx"; //LAN   //Ardour über Lan: 192.168.3.254
String IP   = "xxx";   //W-LAN
int    PORT = xxx;
double VSCHALL = 343.0;  // m/s
double BRAUM   = 5.0;    // m Breite des Raumes
double HRAUM   = 5.7;   // m Tiefe des Raumes
int[] ID = {0,1,2,3};

int BREITE = 640; //Fenster dieses Sketches 
int HOEHE  = 480;
double PIXEL_PRO_METER = 4.0;

OSC osc;
Performance performance;

void setup() 
{
    size(BREITE,HOEHE);
    frameRate(25);

    osc = new OSC(IP,PORT);
    osc.initialisieren();
    
    performance = new Performance(osc,VSCHALL,BRAUM,HRAUM,ID,BREITE,HOEHE,PIXEL_PRO_METER);
    
    performance.initialisieren();
    performance.starten();
}


void draw() 
{
  background(0);
  performance.draw();
}

Code 0-5: test002_kreisbewegung_korrigiert3.pde

public class Performance implements Runnable
{
    //Speziell: 4 Quellen
    float[][] xy = {{0,0},{0,0},{0,0},{0,0}}; 
    int[][]  rgb = {{0,0,0},{0,0,0},{0,0,0},{0,0,0}}; 
    boolean[] aktiv = {true,true,true,true};
  
    private int[] ID;
  
    private ScheduledExecutorService  schedExecService;
    private long              periode = 50;
 
    private double VSCHALL;  // m/s
    private double BRAUM;    // m Breite des Raumes
    private double HRAUM;    // m Länge des Raumes
    private int BREITE;
    private int HOEHE;
    private double PIXEL_PRO_METER;
    
    private OSC osc;
  
    public void setzePosition(int nr, double phi, double millis)
    {
         double r = VSCHALL*millis*0.001;
         double x = r*Math.cos(phi);
         double y = r*Math.sin(phi);
         
         float x_wfs =  (float)(  x + BRAUM*0.5);
         float y_wfs =  (float)( -y + HRAUM*0.5);

         xy[nr][0] =  (float)(x*PIXEL_PRO_METER) + (float)(BREITE/2);
         xy[nr][1] = -(float)(y*PIXEL_PRO_METER) + (float)(HOEHE/2);
         
         osc.setzePosition(nr,x_wfs,y_wfs);
    }
  
    public void initialisieren()
    {              
        osc.deaktiviereQuelle(ID[0]);
        osc.deaktiviereQuelle(ID[1]);
        osc.deaktiviereQuelle(ID[2]);
        osc.deaktiviereQuelle(ID[3]);
        
        osc.setzeAlsPunktquelle(ID[0]);        
        osc.setzeAlsPunktquelle(ID[1]);        
        osc.setzeAlsPunktquelle(ID[2]);        
        osc.setzeAlsPunktquelle(ID[3]);
        
        setzePosition(ID[0],0.0,        100);
        setzePosition(ID[1],0.5*Math.PI,100);
        setzePosition(ID[2],1.0*Math.PI,100);
        setzePosition(ID[3],1.5*Math.PI,100);
        
        osc.setzeFarbe(ID[0],255,0,0);
        osc.setzeFarbe(ID[1],0,255,0);
        osc.setzeFarbe(ID[2],0,0,255);
        osc.setzeFarbe(ID[3],255,255,0);
        
        //osc.aktiviereQuelle(ID[0]);
        
        //osc.aktiviereQuelle(ID[1]);
        //osc.aktiviereQuelle(ID[2]);
        osc.aktiviereQuelle(ID[3]);
        
        osc.starteArdourquellen();
        
        rgb[0] = new int[] {255,0,0};        
        rgb[1] = new int[] {0,255,0};        
        rgb[2] = new int[] {0,0,255};        
        rgb[3] = new int[] {255,255,0};        
    }

    public void starten()
    {
        schedExecService.scheduleAtFixedRate(this, 0, periode, TimeUnit.MILLISECONDS);               
    }
  
    public Performance(OSC osc,double VSCHALL,double BRAUM,double HRAUM, int[] ID, 
                       int BREITE, int HOEHE, double PIXEL_PRO_METER)
    {
        this.osc = osc;
        this.VSCHALL = VSCHALL;
        this.BRAUM = BRAUM;
        this.HRAUM = HRAUM;        
        
        this.ID = ID;
        
        this.BREITE = BREITE;
        this.HOEHE = HOEHE;
        this.PIXEL_PRO_METER = PIXEL_PRO_METER;
        
        schedExecService = Executors.newSingleThreadScheduledExecutor();
    }

    double PHI = 0.0;
    public void run()
    {
         //println("
++++ SENDE NEUE NACHRICHTEN  ++++");
         setzePosition(ID[0],0.0 +PHI       ,100);
         setzePosition(ID[1],0.5*Math.PI+PHI,100);
         setzePosition(ID[2],1.0*Math.PI+PHI,100);
         setzePosition(ID[3],1.5*Math.PI+PHI,100);
      
         PHI += 2.0*Math.PI / 200.0;  // 50ms == 20mal pro Sek. => /200 10 Sek. pro Umdrehung, 
                                      // Auflösung 360/200 = 1,8 Grad
                                      //
    }
    
    public void draw()
    {
          noStroke();
          //Raum einzeichnen:
          fill(100,100,100);
          rect((float)(BREITE/2)-0.5f*(float)(BRAUM*PIXEL_PRO_METER),
               (float)(HOEHE/2) -0.5f*(float)(HRAUM*PIXEL_PRO_METER),
               (float)(BRAUM*PIXEL_PRO_METER),
               (float)(HRAUM*PIXEL_PRO_METER));
      
          fill(100,100,255);
          rect((float)(BREITE/2)-0.5f*0.6f*(float)(BRAUM*PIXEL_PRO_METER),
               (float)(HOEHE/2) -0.5f*(float)(HRAUM*PIXEL_PRO_METER),
               0.6f*(float)(BRAUM*PIXEL_PRO_METER),
               0.1f*(float)(HRAUM*PIXEL_PRO_METER));
      
          for(int i=0;i<xy.length;i++)
          {
                if(aktiv[i]==true)
                {
                    fill(rgb[i][0],rgb[i][1],rgb[i][2]);
                    ellipse(xy[i][0],xy[i][1],HOEHE/40,HOEHE/40);
                }    
          }
    }
}

Code 0-6: Performance.pde

public class OSC
{
    private String[] nachrichten = {
                                       "/WONDER/source/activate",
                                       "/WONDER/source/deactivate",
                                       "/WONDER/source/type",
                                       "/WONDER/source/position",
                                       "/WONDER/source/color"
                                   };
                                   
                                   
    private String IP;
    private int    PORT;
    
    NetAddress zielgeraet;
    NetAddress zielgeraetArdour;
    OscP5 oscP5;
    
    
    public void initialisieren()
    {
        oscP5      = new OscP5(this,PORT);
        zielgeraet = new NetAddress(IP,PORT);        
        zielgeraetArdour = new NetAddress(IP,3819);        
    }
    
    public void pause()
    {
         try
         {
             Thread.sleep(1);
         }
         catch(Exception e)
         {
         }
    }
    
    public OSC()
    {
        this.IP   = "127.0.0.1";
        this.PORT = 12000;
    }
    
    public OSC(String IP, int PORT)
    {
        this.IP   = IP;
        this.PORT = PORT;
    }



    public void starteArdourquellen()
    {
        OscMessage myMessage = new OscMessage("/ardour/transport_play");  
        //myMessage.add(nr); 
        oscP5.send(myMessage, zielgeraetArdour);    
        pause();
    }
    public void stoppeArdourquellen()
    {
        OscMessage myMessage = new OscMessage("/ardour/transport_stop");  
        //myMessage.add(nr); 
        oscP5.send(myMessage, zielgeraetArdour);    
        pause();
    }
 
    public void aktiviereQuelle(int nr)
    {
        OscMessage myMessage = new OscMessage(nachrichten[0]);  
        myMessage.add(nr); 
        oscP5.send(myMessage, zielgeraet);    
        pause();
    }
    
    public void deaktiviereQuelle(int nr)
    {
        OscMessage myMessage = new OscMessage(nachrichten[1]);  
        myMessage.add(nr); 
        oscP5.send(myMessage, zielgeraet);                  
        pause();
    }
    
    public void setzeAlsPunktquelle(int nr)
    {
        OscMessage myMessage = new OscMessage(nachrichten[2]);  
        myMessage.add(nr); 
        myMessage.add(1); 
        oscP5.send(myMessage, zielgeraet);                  
        pause();
    }
/*    
    public void setzePosition(int nr, float x, float y)
    {
        OscMessage myMessage = new OscMessage(nachrichten[3]);  
        myMessage.add(nr); 
        myMessage.add(new Float(x)); 
        myMessage.add(new Float(y)); 
        oscP5.send(myMessage, zielgeraet);                  
        pause();
    }
*/
    public void setzePosition(int nr, float x, float y)
    {
        OscMessage myMessage = new OscMessage(nachrichten[3]);  
        myMessage.add(nr); 
        myMessage.add(new Float(x)); 
        myMessage.add(new Float(y)); 
        myMessage.add(new Float(50.0f/1000.0f)); //50ms Thread 
        oscP5.send(myMessage, zielgeraet);                  
        pause();
    }

    public void setzeFarbe(int nr, int rot, int gruen, int blau)
    {
        OscMessage myMessage = new OscMessage(nachrichten[4]);  
        myMessage.add(nr); 
        myMessage.add(rot); 
        myMessage.add(gruen); 
        myMessage.add(blau); 
        oscP5.send(myMessage, zielgeraet);                  
        pause();
    }
    
    void oscEvent(OscMessage theOscMessage) 
    {
         /* print the address pattern and the typetag of the received OscMessage */
         print("OSC-Nachricht empfangen:");
         String name = theOscMessage.addrPattern();
         print("Name: "+name);         
         println(" typetag: "+theOscMessage.typetag());
         
         for(int i=0;i<nachrichten.length;i++)
         {
               if(name.equals(nachrichten[i]))
               {
                    println("Nachricht wurde identifiziert:");
                    switch(i)
                    {
                         case 0:
                             int nr0 = theOscMessage.get(0).intValue();
                             println("**** QUELLE mit ID "+nr0+" AN ****");
                         break;
                         case 1:
                             int nr1 = theOscMessage.get(0).intValue();
                             println("**** QUELLE mit ID "+nr1+" AUS ****");
                         break;
                         case 2:
                             int nr2 = theOscMessage.get(0).intValue();
                             int typ = theOscMessage.get(1).intValue();
                             println("**** SETZE QUELLE mit ID "+nr2+" ALS TYP "+typ+" ****");
                         break;
                         case 3:
                             int nr3 = theOscMessage.get(0).intValue();
                             float x = theOscMessage.get(1).floatValue();
                             float y = theOscMessage.get(2).floatValue();
                             println("**** SETZE QUELLE mit ID "+nr3+" AN POSITION x="+x+" y="+y+" ****");
                         break;
                         case 4:
                             int nr4   = theOscMessage.get(0).intValue();
                             int rot   = theOscMessage.get(1).intValue();
                             int gruen = theOscMessage.get(2).intValue();
                             int blau  = theOscMessage.get(3).intValue();
                             println("**** SETZE QUELLE mit ID "+nr4+" MIT FARBE rot="+rot+" gruen="+gruen+" blau="+blau+" ****");
                         break;
                         
                    }
                    
                    break;
               }
         }
    }     
}    

Code 0-7: OSC.pde