diff src/melodyTriangle.cpp @ 32:06a2fdb333ca

Added visibilty control for tokens; removed token highlight when keyboard disabled.
author samer
date Wed, 15 Feb 2012 10:14:04 +0000
parents 417deb31dd4e
children 260cc4f4d70a
line wrap: on
line diff
--- a/src/melodyTriangle.cpp	Tue Feb 07 14:23:32 2012 +0000
+++ b/src/melodyTriangle.cpp	Wed Feb 15 10:14:04 2012 +0000
@@ -2,8 +2,10 @@
 #include <GLUT/GLUT.h> 
 
 #define BUFFER_ZONE 64 // have to drag this far to snap out of triange.
+#define NUM_TEMPI 9
 
-static int tempi[]={20,30,45,60,90,120,150,180};
+static int tempi[]={20,30,45,60,90,120,150,180,240};
+
 
 melodyTriangle::melodyTriangle(const char *host, int port, int numVoices, 
 							   bool enableKeys,int voiceIdOffset,int receivePort): 
@@ -121,7 +123,7 @@
 	ofTriangle(x1, y1, x2, y2, x3, y3);
 	
 	for (int i=numVoices-1; i>=0; i--){
-		voices[i]->draw(voices[i]->isInVoice(mouseX,mouseY));
+		voices[i]->draw(enableKeys && voices[i]->isInVoice(mouseX,mouseY));
 	}
 	
 	// display message if any
@@ -195,7 +197,7 @@
 					send("/tempo",tempi[tempoIndex]); 
 					break;
 				case '}': 
-					if (tempoIndex<7) tempoIndex++;
+					if (tempoIndex<NUM_TEMPI-1) tempoIndex++;
 					send("/tempo",tempi[tempoIndex]); 
 					break;
 					
@@ -223,7 +225,9 @@
 void melodyTriangle::voiceKeypress(Voice *v, int key) {
 	switch (key) {
 		case 'a':
-			send(v->isActive ? "/stop" : "/start", v->id);
+			if (v->inTriangle) {
+				send(v->isActive ? "/stop" : "/start", v->id);
+			}
 			v->isActive=!v->isActive;
 			break;
 		case OF_KEY_LEFT:  sendShift(v->id,-1,ratio); break;
@@ -305,6 +309,7 @@
 			string msg=msg_path.substr(8);
 			Voice *v=get_voice(m.getArgAsInt32(0));
 			
+			cout << "Received " << msg_path << "\n";
 			if (msg=="requested") 	 v->status=Voice::waiting;
 			else if (msg=="pending") v->status=Voice::pending;
 			else if (msg=="received") {
@@ -335,6 +340,10 @@
 			} else if (msg=="params") {
 				v->octave    = m.getArgAsInt32(1);
 				v->amplitude = m.getArgAsFloat(2);
+			} else if (msg=="visible") {
+				v->isVisible = m.getArgAsInt32(1);
+				if (voiceGrabbed==v && !v->isVisible) 
+					voiceGrabbed=NULL;
 			}
 		} else if (msg_path=="/display") {
 			display_msg=m.getArgAsString(0);
@@ -405,34 +414,9 @@
 	printf("sent /reply_to %i\n",receivePort);
 }
 
-void melodyTriangle::sendPeriod(int id, int num, int den){
-	ofxOscMessage m;
-	m.setAddress("/period");
-	m.addIntArg(id);
-	m.addIntArg(num);
-	m.addIntArg(den);
-	sender.sendMessage(m);
-	printf("sent /period %i %i %i\n",id,num,den);
-}
-
-void melodyTriangle::sendShift(int id, int num, int den){
-	ofxOscMessage m;
-	m.setAddress("/shift");
-	m.addIntArg(id);
-	m.addIntArg(num);
-	m.addIntArg(den);
-	sender.sendMessage(m);
-	printf("sent /shift %i %i %i\n",id,num,den);
-}
-
-void melodyTriangle::sendOctave(int id, int oct){
-	ofxOscMessage m;
-	m.setAddress("/octave");
-	m.addIntArg(id);
-	m.addIntArg(oct);
-	sender.sendMessage(m);
-	printf("sent /octave %i %i\n",id,oct);
-}
+void melodyTriangle::sendPeriod(int id, int num, int den){ send("/period",id,num,den); }
+void melodyTriangle::sendShift(int id, int num, int den) { send("/shift",id,num,den); }
+void melodyTriangle::sendOctave(int id, int oct){ send("/octave",id,oct); }
 
 void melodyTriangle::sendAmplitude(int id, float amp){
 	ofxOscMessage m;
@@ -443,6 +427,27 @@
 	printf("sent /amplitude %i %1.3f\n",id,amp);
 }
 
+void melodyTriangle::send(const char *addr, int a, int b, int c) {
+	ofxOscMessage m;
+	m.setAddress(addr);
+	m.addIntArg(a);
+	m.addIntArg(b);
+	m.addIntArg(c);
+	sender.sendMessage(m);
+	printf("sent %s %i\n",addr,a);
+}
+
+
+void melodyTriangle::send(const char *addr, int a, int b) {
+	ofxOscMessage m;
+	m.setAddress(addr);
+	m.addIntArg(a);
+	m.addIntArg(b);
+	sender.sendMessage(m);
+	printf("sent %s %i\n",addr,a);
+}
+
+
 void melodyTriangle::send(const char *addr, int a) {
 	ofxOscMessage m;
 	m.setAddress(addr);