kramann.info
© Guido Kramann

Login: Passwort:










5.2 Basisversuche im i2audiolab

5.2 Basic tests in the i2audiolab (EN google-translate)

5.2 Podstawowe testy w i2audiolab (PL google-translate)

Befehle an die WFS-Anlage schicken

Send commands to the WFS system

Wyślij polecenia do systemu WFS

siehe auch:

see also:

zobacz także:

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.

Some basic experiments were carried out to the ability to test out the WFS attachment via a processing script using To control OSC.

Przeprowadzono kilka podstawowych eksperymentów możliwość przetestowania załącznika WFS za pomocą skryptu przetwarzania za pomocą Aby kontrolować OSC.

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.

For this audio files were created, each in a second a whole wave contain. This allows them to loop without crackin Because the sounds are provided by a PC of the plant and then become via OSC commands to specific locations in the listening level as a point sound source set, or as ambient sound.

Dla tych plików audio zostały utworzone, każdy na sekundę całą falę włączone. To pozwala im pętać bez pękani Ponieważ dźwięki są dostarczane przez komputer rośliny, a następnie stają się poprzez polecenia OSC do określonych lokalizacji na poziomie słuchania jako źródło dźwięku punktowego ustawiony lub jako dźwięk otoczenia.

// 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 5.2-1: Erstellen von Audiodateien, die geeignet sind für seamless loop mit Ardour.

wavquellen.zip - Audioquellen.

Erstes Experiment: Punktschallquellen erzeugen und einschalten.

First experiment: Create and switch on point sound sources.

Pierwszy eksperyment: Utwórz i włącz źródła dźwięku punktowego.

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 5.2-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 5.2-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 5.2-4: OSC.pde

Zweites Experiment: Kreisbewegung einer Punktschallquelle.

Second experiment: Circular motion of a point sound source.

Drugi eksperyment: ruch okrężny źródła dźwięku punktowego.

// 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 5.2-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 5.2-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 5.2-7: OSC.pde