Skip to content

Instantly share code, notes, and snippets.

@jingkaihe
Last active January 4, 2016 18:29
Show Gist options
  • Save jingkaihe/8660923 to your computer and use it in GitHub Desktop.
Save jingkaihe/8660923 to your computer and use it in GitHub Desktop.
// Einbeziehen des minim-Audio-Toolkits
import ddf.minim.*;
import ddf.minim.effects.*;
import processing.serial.*;
import TUIO.*;
import java.util.*;
// Instanz der minim Bibliothek
Minim minim;
TuioProcessing tuioClient;
PFont myFont;
// Instanz die das geladene Audiodokument repräsentiert
AudioPlayer player_1;
AudioPlayer player_2;
AudioPlayer player_3;
AudioPlayer player_4;
AudioPlayer player_5;
AudioPlayer player_6;
AudioPlayer player_7;
AudioPlayer player_8;
int j= -10;
int maxX = 1028;
int maxY = 768;
float cursor_size = 15;
float object_size = 60;
float table_size = 760;
float scale_factor = 1;
PFont font;
PImage imginfos, imginfo, imggt1;
float r = 100;
float w = 40;
float h = 40;
void setup () {
// Audiotoolkit erstellen
size(maxX, maxY);
frameRate(15);
loop();
minim = new Minim (this);
tuioClient = new TuioProcessing(this);
// Audiodatei aus dem data-Ordner laden
player_1 = minim.loadFile ("piano_1.mp3");
player_2 = minim.loadFile ("piano_2.mp3");
player_3 = minim.loadFile ("piano_3.mp3");
player_4 = minim.loadFile ("piano_4.mp3");
player_5 = minim.loadFile ("man_1.mp3");
player_6 = minim.loadFile ("man_2.mp3");
player_7 = minim.loadFile ("man_3.mp3");
player_8 = minim.loadFile ("man_4.mp3");
player_1.play ();
player_2 .play ();
player_3.play ();
player_4 .play ();
player_5.play ();
player_6 .play ();
player_7.play ();
player_8 .play ();
player_1.loop();
player_2.loop();
player_3.loop();
player_4.loop();
player_5.loop();
player_6.loop();
player_7.loop();
player_8.loop();
// player_1.setGain(j);
// player_2.setGain(j);
// player_3.setGain(j);
// player_4.setGain(j);
//set volume mute
player_1.mute();
player_2.mute();
player_3.mute();
player_4.mute();
player_5.mute();
player_6.mute();
player_7.mute();
player_8.mute();
imginfos = loadImage("infos.png");
imginfo = loadImage("info.png");
imggt1 = loadImage("gt1.png");
}
String origin = "Weißt du, was Obertöne sind?";
String info_str1 = "Ein Ton besteht aus einem Grundton und vielen Obertönen. Ein Oberton ist ein Ton, der mit einem Vielfachen der Frequenz eines Grundtons schwingt. Um zu starten, brauchen wir einen Grundton.";
String info_str2 = "Sie hören gerade den Grundton, die tiefste Frequenz des Klaviers. Töne entstehen, wenn eine Saite schwingt. Dabei gilt je schneller die Schwingung, desto höher derTon.";
String s="Weißt du, was Obertöne sind?";
float ygrundton = -100;
float xgrundton = -100;
float x = width/2;
float y = height/2;
float size = 40;
void draw () {
background(0, 73, 134);
noFill();
stroke(0);
ellipse(width/2,height/2,width/4*3,width/4*3);
float obj_size = object_size*scale_factor;
float cur_size = cursor_size*scale_factor;
myFont = createFont("MiloSerifPro-Xbold", 20);
Vector tuioObjectList = tuioClient.getTuioObjects();
for (int i=0;i<tuioObjectList.size();i++) {
TuioObject tobj = (TuioObject)tuioObjectList.elementAt(i);
stroke(0);
fill(0);
pushMatrix();
translate(tobj.getScreenX(width),tobj.getScreenY(height));
rotate(tobj.getAngle());
//rect(-obj_size/3,-obj_size/3,obj_size,obj_size);
popMatrix();
fill(255);
textSize(12);
text(""+tobj.getSymbolID(), tobj.getScreenX(width), tobj.getScreenY(height));
textAlign(CENTER, CENTER);
textSize(20);
fill(255);
if (tobj.getSymbolID()==0){
imageMode(CENTER);
image(imginfo,tobj.getScreenX(width)-25, tobj.getScreenY(height)-25);
image(imginfos,tobj.getScreenX(width)-25, tobj.getScreenY(height)-25);
}else if(tobj.getSymbolID()==1){
image(imggt1,tobj.getScreenX(width)-25, tobj.getScreenY(height)-25);
}
}
fill(255);
textSize(size);
text(s, 250, 160,width/2+20, height/2-200);
//
// imageMode(CENTER);
// image(imginfo,width/2,height/2);
strokeWeight(2);
float a = random(0, 255);
//println(a);
stroke(255,a);
noFill();
rect(xgrundton, ygrundton, 80, 80,10,10,10,10);
imageMode(CENTER);
image(imginfo,x,y);
Vector tuioCursorList = tuioClient.getTuioCursors();
for (int i=0;i<tuioCursorList.size();i++) {
TuioCursor tcur = (TuioCursor)tuioCursorList.elementAt(i);
Vector pointList = tcur.getPath();
if (pointList.size()>0) {
stroke(7,7,255);
TuioPoint start_point = (TuioPoint)pointList.firstElement();;
for (int j=0;j<pointList.size();j++) {
TuioPoint end_point = (TuioPoint)pointList.elementAt(j);
line(start_point.getScreenX(width),start_point.getScreenY(height),end_point.getScreenX(width),end_point.getScreenY(height));
start_point = end_point;
}
stroke(192,192,192);
fill(192,192,192);
ellipse( tcur.getScreenX(width), tcur.getScreenY(height),cur_size,cur_size);
fill(234);
text(""+ tcur.getCursorID(), tcur.getScreenX(width)-5, tcur.getScreenY(height)+5);
}
}
}
//boolean addinfo = false;
//boolean addpiano = false;
//
//boolean removeinfo = false;
//boolean removepiano = false;
//
//boolean updateinfo = false;
//boolean updatepiano = false;
boolean info = true;
int others = 0;
void addTuioObject(TuioObject tobj) {
if (tobj.getSymbolID()==0){
info = true;
}
else if (tobj.getSymbolID()==1){
others ++;
player_1.unmute();
}
else if (tobj.getSymbolID()==2 && player_1.getGain()!=0){// die Voraussetzung ist grundton.
player_2.unmute();
}
else if ( tobj.getSymbolID()==3 && player_1.getGain()!=0){
player_3.unmute();
}
else if (tobj.getSymbolID()==4 && player_1.getGain()!=0){
player_4.unmute();
}
else if (tobj.getSymbolID()==5){
player_5.unmute();
}
else if (tobj.getSymbolID()==2 && player_5.getGain()!=0){
player_6.unmute();
}
else if (tobj.getSymbolID()==3 && player_5.getGain()!=0){
player_7.unmute();
}
else if (tobj.getSymbolID()==4 && player_5.getGain()!=0){
player_8.unmute();
}
else {
player_1.mute();
player_2.mute();
player_3.mute();
player_4.mute();
player_5.mute();
player_6.mute();
player_7.mute();
player_8.mute();
}
}
void updateTuioObject (TuioObject tobj) {
//println(updatepiano + " " + removepiano);
if (tobj.getSymbolID()==0 ){
//println("shit shit shit " + updatepiano + " " + removepiano);
size = 20;
x = -1000;
y = -1000;
if(info){
s = info_str1;
}else{
s = origin;
}
println(s);
redraw();
} else if (tobj.getSymbolID()==1){
// if(updateinfo == true && removeinfo == false){
size = 20;
if(info){
s = info_str2;
}else{
s = "";
}
x = -1000;
y = -1000;
float value = map(tobj.getAngle(),0,8,-40,100);
//println("angle"+":"+angle);
println("player_1"+":"+value);
//println(tobj.getAngle());
player_1.setGain(value);
player_1.unmute();
redraw();
}
else if ( tobj.getSymbolID()==2 && player_1.getGain()!=0){ // die Voraussetzung ist grundton.
float value = map(tobj.getAngle(),0,8,-40,100);
//println("angle"+":"+angle);
//println("value"+":"+value);
//println(tobj.getAngle());
player_2.setGain(value);
player_2.unmute();
fill(247,238,0);
ellipse(75,75,tobj.getScreenX(width)-25, tobj.getScreenY(height)-25);
stroke(0,0,0,120);
strokeWeight(6);
noFill();
ellipse(90,90,tobj.getScreenX(width)-25, tobj.getScreenY(height)-25);
}else if ( tobj.getSymbolID()==3 && player_1.getGain()!=0){
float value = map(tobj.getAngle(),0,8,-40,100);
//println("angle"+":"+angle);
//println("value"+":"+value);
//println(tobj.getAngle());
player_3.setGain(value);
player_3.unmute();
}else if (tobj.getSymbolID()==4 && player_1.getGain()!=0){
float value = map(tobj.getAngle(),0,8,-40,100);
//println("angle"+":"+angle);
println("value"+":"+value);
//println(tobj.getAngle());
player_4.setGain(value);
player_4.unmute();
}
else if (tobj.getSymbolID()==5){
float value = map(tobj.getAngle(),0,8,-40,100);
//println("angle"+":"+angle);
//println("player_1"+":"+value);
//println(tobj.getAngle());
player_5.setGain(value);
player_5.unmute();
} else if ( tobj.getSymbolID()==2 && player_5.getGain()!=0){ // die Voraussetzung ist grundton.
float value = map(tobj.getAngle(),0,8,-40,100);
//println("angle"+":"+angle);
println("value"+":"+value);
//println(tobj.getAngle());
player_6.setGain(value);
player_6.unmute();
}else if ( tobj.getSymbolID()==3 && player_5.getGain()!=0){
float value = map(tobj.getAngle(),0,8,-40,100);
//println("angle"+":"+angle);
//println("value"+":"+value);
//println(tobj.getAngle());
player_7.setGain(value);
player_7.unmute();
}else if (tobj.getSymbolID()==4 && player_5.getGain()!=0){
float value = map(tobj.getAngle(),0,8,-40,100);
//println("angle"+":"+angle);
println("value"+":"+value);
//println(tobj.getAngle());
player_8.setGain(value);
player_8.unmute();
}
else {
player_1.mute();
player_2.mute();
player_3.mute();
player_4.mute();
player_5.mute();
player_6.mute();
player_7.mute();
player_8.mute();
}
}
void removeTuioObject(TuioObject tobj) {
size = 40;
s = "Weißt du, was Obertöne sind?";
x = width/2;
y = height/2;
if (tobj.getSymbolID()==0){
info = false;
if(others > 0){
s = "";
}else{
s = origin;
}
size = 20;
x = -1000;
y = -1000;
}
else if (tobj.getSymbolID()==1){
size = 20;
others --;
if(info){
s = info_str1;
}else{
s = origin;
}
x = -1000;
y = -1000;
player_1.mute();
player_1.setGain(0); //wegen obertoene
player_5.mute();
player_5.setGain(0);
}
else if (tobj.getSymbolID()==5){
player_5.mute();
player_5.setGain(0);
}
else if (tobj.getSymbolID()==2){
player_2.mute();
player_6.mute();
} else if (tobj.getSymbolID()==3){
player_3.mute();
player_7.mute();
}
else if (tobj.getSymbolID()==4){
player_4.mute();
player_8.mute();
}
}
void refresh(TuioTime bundleTime) {
redraw();
}
// called when an object is moved
// called when a cursor is added to the scene
void addTuioCursor(TuioCursor tcur) {
println("add cursor "+tcur.getCursorID()+" ("+tcur.getSessionID()+ ") " +tcur.getX()+" "+tcur.getY());
}
// called when a cursor is moved
void updateTuioCursor (TuioCursor tcur) {
println("update cursor "+tcur.getCursorID()+" ("+tcur.getSessionID()+ ") " +tcur.getX()+" "+tcur.getY()
+" "+tcur.getMotionSpeed()+" "+tcur.getMotionAccel());
}
// called when a cursor is removed from the scene
void removeTuioCursor(TuioCursor tcur) {
println("remove cursor "+tcur.getCursorID()+" ("+tcur.getSessionID()+")");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment