Fixed? a problem with MIDI when running Processing sketch Music_Controls and playing notes from sequencer program (like Ableton Live) at the same time.

This commit is contained in:
Jakob Bak 2013-06-06 16:39:18 +02:00
parent fadc5cc783
commit 5243d6c845
8 changed files with 304 additions and 196 deletions

View File

@ -1,112 +0,0 @@
byte[] savedKnobValues = new byte[numKnobs];
byte[] loadedKnobValues = new byte[numKnobs];
void loadKnobValues() {
loadedKnobValues = loadBytes("knobValues.txt");
for(int i=0; i<numKnobs; i++) {
knobValue[i] = loadedKnobValues[i];
controlP5.controller(controllerName[i]).setValue(knobValue[i]);
}
println();
println("Loaded Knob Values");
}
void saveKnobValues() {
for(int i=0;i<numKnobs;i++) {
savedKnobValues[i] = (byte)knobValue[i];
}
saveBytes("knobValues.txt", savedKnobValues);
println();
println("Saved Knob Values");
}
void sendMidiKnobs() {
sendControlChange((byte)0, (byte)knobMidiCC[0],(byte)knobValue[0]);
delay(delayTime);
//semi1(knobValue[1]);
int semi =(knobValue[1]+24)*2+16;
sendControlChange((byte)0, (byte)knobMidiCC[1], (byte)semi);
delay(delayTime);
//detune1(knobValue[2]);
sendControlChange((byte)0, (byte)knobMidiCC[2], (byte)knobValue[2]);
delay(delayTime);
//gain1(knobValue[3]);
sendControlChange((byte)0, (byte)knobMidiCC[3], (byte)knobValue[3]);
delay(delayTime);
//wave1(knobValue[4]);
sendControlChange((byte)0, (byte)knobMidiCC[4], (byte)(knobValue[4]*8));
delay(delayTime);
//freq2(knobValue[5]);
sendControlChange((byte)0, (byte)knobMidiCC[5], (byte)knobValue[5]);
delay(delayTime);
//semi2(knobValue[6]);
semi = (knobValue[6]+24)*2+16;
sendControlChange((byte)0, (byte)knobMidiCC[6], (byte)semi);
delay(delayTime);
//detune2(knobValue[7]);
sendControlChange((byte)0, (byte)knobMidiCC[7], (byte)knobValue[7]);
delay(delayTime);
//gain2(knobValue[8]);
sendControlChange((byte)0, (byte)knobMidiCC[8], (byte)knobValue[8]);
delay(delayTime);
//wave2(knobValue[9]);
sendControlChange((byte)0, (byte)knobMidiCC[9], (byte)(knobValue[9]*8));
delay(delayTime);
//freq3(knobValue[10]);
sendControlChange((byte)0, (byte)knobMidiCC[10], (byte)knobValue[10]);
delay(delayTime);
//semi3(knobValue[11]);
semi =(knobValue[11]+24)*2+16;
sendControlChange((byte)0, (byte)knobMidiCC[11], (byte)semi);
delay(delayTime);
//detune3(knobValue[12]);
sendControlChange((byte)0, (byte)knobMidiCC[12], (byte)knobValue[12]);
delay(delayTime);
//gain3(knobValue[13]);
sendControlChange((byte)0, (byte)knobMidiCC[13], (byte)knobValue[13]);
delay(delayTime);
//wave3(knobValue[14]);
sendControlChange((byte)0, (byte)knobMidiCC[14], (byte)(knobValue[14]*8));
delay(delayTime);
//attack(knobValue[15]);
sendControlChange((byte)0, (byte)knobMidiCC[15], (byte)knobValue[15]);
delay(delayTime);
//decay(knobValue[16]);
sendControlChange((byte)0, (byte)knobMidiCC[16], (byte)knobValue[16]);
delay(delayTime);
//sustain(knobValue[17]);
sendControlChange((byte)0, (byte)knobMidiCC[17], (byte)knobValue[17]);
delay(delayTime);
//release(knobValue[18]);
sendControlChange((byte)0, (byte)knobMidiCC[18], (byte)knobValue[18]);
println();
println("Sent Knob Values over MIDI");
}

View File

@ -3,22 +3,23 @@ String[] knobName = { "FREQ1",
"DETUNE1", "DETUNE1",
"GAIN1", "GAIN1",
"WAVE1", "WAVE1",
"FM1",
"FREQ2", "FREQ2",
"SEMI2", "SEMI2",
"DETUNE2", "DETUNE2",
"GAIN2", "GAIN2",
"WAVE2", "WAVE2",
"FM2",
"FREQ3", "FREQ3",
"SEMI3", "SEMI3",
"DETUNE3", "DETUNE3",
"GAIN3", "GAIN3",
"WAVE3", "WAVE3",
"FM3",
"ATTACK", "ATTACK",
"DECAY", "DECAY",
"SUSTAIN", "SUSTAIN",
"RELEASE", "RELEASE"
"DETUNE_ALL",
"WAVE_ALL"
}; };
String[] controllerName = { "freq1", String[] controllerName = { "freq1",
@ -26,16 +27,19 @@ String[] controllerName = { "freq1",
"detune1", "detune1",
"gain1", "gain1",
"wave1", "wave1",
"fm1",
"freq2", "freq2",
"semi2", "semi2",
"detune2", "detune2",
"gain2", "gain2",
"wave2", "wave2",
"fm2",
"freq3", "freq3",
"semi3", "semi3",
"detune3", "detune3",
"gain3", "gain3",
"wave3", "wave3",
"fm3",
"attack", "attack",
"decay", "decay",
"sustain", "sustain",
@ -62,16 +66,31 @@ String[] waveform = { "SINE",
"TAN4" "TAN4"
}; };
int[] knobMidiCC = {10,11,12,13,14,20,21,22,23,24,30,31,32,33,34,114,115,116,117,4,5}; Knob freq1,semi1,detune1,gain1,wave1,fm1,freq2,semi2,detune2,gain2,wave2,fm2,freq3,semi3,detune3,gain3,wave3,fm3,attack,decay,sustain,release;
Knob[] knobs = {freq1,semi1,detune1,gain1,wave1,fm1,freq2,semi2,detune2,gain2,wave2,fm2,freq3,semi3,detune3,gain3,wave3,fm3,attack,decay,sustain,release};
int[] knobMin = { 0,-24, 0, 0, 0, 0, 0,-24, 0, 0, 0, 0, 0,-24, 0, 0, 0, 0, 0, 0, 0, 0};
int[] knobMax = {127, 24,127,127, 15,127,127, 24,127,127, 15,127,127, 24,127,127, 15,127,127,127,127,127};
int[] knobValue = { 40, 0, 64,127, 2, 0, 40, 7, 64,127, 3, 0, 40,-12, 64,127, 5, 0, 12, 96, 64, 72};
int[] knobMidiCC= { 10, 11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 25, 30, 31, 32, 33, 34, 35,114,115,116,117};
int numKnobs = knobValue.length;
int posX = 20;
int posY = 20;
int posEnvSpacer = 40;
int posW = 65;
int posH = 70;
int knobS = 40;
void setupKnobs() { void setupKnobs() {
controlP5 = new ControlP5(this); controlP5 = new ControlP5(this);
PFont p = createFont("Georgia",12); PFont p = createFont("Georgia",24);
controlP5.setControlFont(p,12); controlP5.setControlFont(p,12);
controlP5.setColorLabel(color(255,128)); controlP5.setColorLabel(color(255,128));
/*
Textlabel labelFreq = controlP5.addTextlabel("freqLabel","FREQ",posX+posW*0,posY-20); Textlabel labelFreq = controlP5.addTextlabel("freqLabel","FREQ",posX+posW*0,posY-20);
Textlabel labelSemi = controlP5.addTextlabel("semiLabel","SEMI",posX+posW*1,posY-20); Textlabel labelSemi = controlP5.addTextlabel("semiLabel","SEMI",posX+posW*1,posY-20);
Textlabel labelDetune = controlP5.addTextlabel("detuneLabel","DETUNE",posX+posW*2,posY-20); Textlabel labelDetune = controlP5.addTextlabel("detuneLabel","DETUNE",posX+posW*2,posY-20);
@ -83,33 +102,81 @@ void setupKnobs() {
Textlabel labelsustain = controlP5.addTextlabel("sustainLabel","S",posX+16+posW*2,posY+posH*4-20); Textlabel labelsustain = controlP5.addTextlabel("sustainLabel","S",posX+16+posW*2,posY+posH*4-20);
Textlabel labelReleasek = controlP5.addTextlabel("releaseLabel","R",posX+16+posW*3,posY+posH*4-20); Textlabel labelReleasek = controlP5.addTextlabel("releaseLabel","R",posX+16+posW*3,posY+posH*4-20);
Knob freq1 = controlP5.addKnob("freq1", 0,127,64, posX+posW*0,posY+posH*0,knobS); Knob freq1 = controlP5.addKnob("freq1", 0,127,knobValue[0], posX+posW*0,posY+posH*0,knobS);
Knob semi1 = controlP5.addKnob("semi1", -24,24,0, posX+posW*1,posY+posH*0,knobS); Knob semi1 = controlP5.addKnob("semi1", -24,24,knobValue[1], posX+posW*1,posY+posH*0,knobS);
Knob detune1 = controlP5.addKnob("detune1",0,127,64, posX+posW*2,posY+posH*0,knobS); Knob detune1 = controlP5.addKnob("detune1",0,127,knobValue[2], posX+posW*2,posY+posH*0,knobS);
Knob gain1 = controlP5.addKnob("gain1", 0,127,127, posX+posW*3,posY+posH*0,knobS); Knob gain1 = controlP5.addKnob("gain1", 0,127,knobValue[3], posX+posW*3,posY+posH*0,knobS);
Knob wave1 = controlP5.addKnob("wave1", 0,15,0, posX+posW*4,posY+posH*0,knobS); Knob wave1 = controlP5.addKnob("wave1", 0,15,knobValue[4], posX+posW*4,posY+posH*0,knobS);
*/
for(int i=0; i<18; i++) {
knobs[i] = controlP5.addKnob(controllerName[i])
.setRange(knobMin[i],knobMax[i])
.setValue(knobValue[i])
.setPosition(posX+posW*(i%6),posY+posH*int(i/6))
.setRadius(knobS/2)
.setDragDirection(Knob.VERTICAL)
.setViewStyle(Knob.ELLIPSE)
.setNumberOfTickMarks(knobMax[i]-knobMin[i])
.snapToTickMarks(true)
.showTickMarks(false);
/*
if(i%6==1) {
knobs[i].setNumberOfTickMarks(49)
.snapToTickMarks(true)
.showTickMarks(false);
}
if(i%6==4) {
knobs[i].setNumberOfTickMarks(16)
.snapToTickMarks(true)
.showTickMarks(false);
}
*/
}
for(int i=18; i<22; i++) {
knobs[i] = controlP5.addKnob(controllerName[i])
.setRange(knobMin[i],knobMax[i])
.setValue(knobValue[i])
.setPosition(posX+posW*(i%6),posY+posEnvSpacer+posH*int(i/6))
.setRadius(knobS/2)
.setDragDirection(Knob.VERTICAL)
.setViewStyle(Knob.ELLIPSE);
Knob freq2 = controlP5.addKnob("freq2", 0,127,64, posX+posW*0,posY+posH*1,knobS); }
Knob semi2 = controlP5.addKnob("semi2", -24,24,0, posX+posW*1,posY+posH*1,knobS); /*
Knob detune2 = controlP5.addKnob("detune2",0,127,64, posX+posW*2,posY+posH*1,knobS); Knob freq2 = controlP5.addKnob("freq2", 0,127,knobValue[5], posX+posW*0,posY+posH*1,knobS);
Knob gain2 = controlP5.addKnob("gain2", 0,127,127, posX+posW*3,posY+posH*1,knobS); Knob semi2 = controlP5.addKnob("semi2", -24,24,knobValue[6], posX+posW*1,posY+posH*1,knobS);
Knob wave2 = controlP5.addKnob("wave2", 0,15,0, posX+posW*4,posY+posH*1,knobS); Knob detune2 = controlP5.addKnob("detune2",0,127,knobValue[7], posX+posW*2,posY+posH*1,knobS);
Knob gain2 = controlP5.addKnob("gain2", 0,127,knobValue[8], posX+posW*3,posY+posH*1,knobS);
Knob wave2 = controlP5.addKnob("wave2", 0,15,knobValue[9], posX+posW*4,posY+posH*1,knobS);
Knob freq3 = controlP5.addKnob("freq3", 0,127,64, posX+posW*0,posY+posH*2,knobS); Knob freq3 = controlP5.addKnob("freq3", 0,127,knobValue[10], posX+posW*0,posY+posH*2,knobS);
Knob semi3 = controlP5.addKnob("semi3", -24,24,0, posX+posW*1,posY+posH*2,knobS); Knob semi3 = controlP5.addKnob("semi3", -24,24,knobValue[11], posX+posW*1,posY+posH*2,knobS);
Knob detune3 = controlP5.addKnob("detune3",0,127,64, posX+posW*2,posY+posH*2,knobS); Knob detune3 = controlP5.addKnob("detune3",0,127,knobValue[12], posX+posW*2,posY+posH*2,knobS);
Knob gain3 = controlP5.addKnob("gain3", 0,127,127, posX+posW*3,posY+posH*2,knobS); Knob gain3 = controlP5.addKnob("gain3", 0,127,knobValue[13], posX+posW*3,posY+posH*2,knobS);
Knob wave3 = controlP5.addKnob("wave3", 0,15,0, posX+posW*4,posY+posH*2,knobS); Knob wave3 = controlP5.addKnob("wave3", 0,15,knobValue[14], posX+posW*4,posY+posH*2,knobS);
Knob attack = controlP5.addKnob("attack", 0,127,0, posX+posW*0, posY+posH*4, knobS);
Knob decay = controlP5.addKnob("decay", 0,127,64, posX+posW*1, posY+posH*4, knobS);
Knob sustain = controlP5.addKnob("sustain",0,127,64, posX+posW*2, posY+posH*4, knobS);
Knob release = controlP5.addKnob("release",0,127,64, posX+posW*3, posY+posH*4, knobS);
Knob attack = controlP5.addKnob("attack", 0,127,knobValue[15], posX+posW*0, posY+posH*4, knobS);
Knob decay = controlP5.addKnob("decay", 0,127,knobValue[16], posX+posW*1, posY+posH*4, knobS);
Knob sustain = controlP5.addKnob("sustain",0,127,knobValue[17], posX+posW*2, posY+posH*4, knobS);
Knob release = controlP5.addKnob("release",0,127,knobValue[18], posX+posW*3, posY+posH*4, knobS);
*/
} }
void writeKnobValues() { void writeKnobValues() {
textAlign(CENTER); textAlign(CENTER);
fill(255);
text("FREQ",40,30);
text("SEMI",100,30);
text("DETUNE",160,30);
text("GAIN",220,30);
text("WAVE",280,30);
text("A",40,270);
text("D",100,270);
text("S",160,270);
text("R",220,270);
fill(128); fill(128);
text(knobValue[0],40,90); text(knobValue[0],40,90);
text(knobValue[1],100,90); text(knobValue[1],100,90);
@ -139,7 +206,7 @@ void freq1(int val)
knobValue[knob] = val; knobValue[knob] = val;
if(printChange) println(knobName[knob] + " is: " + (int)(pow(2,(knobValue[knob]-69)/12.0)*440) + " Hz"); if(printChange) println(knobName[knob] + " is: " + (int)(pow(2,(knobValue[knob]-69)/12.0)*440) + " Hz");
//(2^((p-69)/12))*440 //(2^((p-69)/12))*440
sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)knobValue[knob]); if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)knobValue[knob]);
} }
} }
@ -150,7 +217,7 @@ void semi1(int val)
knobValue[knob] = val; knobValue[knob] = val;
if(printChange) println(knobName[knob] + " is: " + knobValue[knob]); if(printChange) println(knobName[knob] + " is: " + knobValue[knob]);
int semi =(knobValue[knob]+24)*2+16; int semi =(knobValue[knob]+24)*2+16;
sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)semi); if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)semi);
} }
} }
@ -160,7 +227,7 @@ void detune1(int val)
if(knobValue[knob] != val) { if(knobValue[knob] != val) {
knobValue[knob] = val; knobValue[knob] = val;
if(printChange) println(knobName[knob] + " is: " + knobValue[knob]); if(printChange) println(knobName[knob] + " is: " + knobValue[knob]);
sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)knobValue[knob]); if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)knobValue[knob]);
} }
} }
@ -170,7 +237,7 @@ void gain1(int val)
if(knobValue[knob] != val) { if(knobValue[knob] != val) {
knobValue[knob] = val; knobValue[knob] = val;
if(printChange) println(knobName[knob] + " is: " + knobValue[knob]); if(printChange) println(knobName[knob] + " is: " + knobValue[knob]);
sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)knobValue[knob]); if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)knobValue[knob]);
} }
} }
@ -180,150 +247,180 @@ void wave1(int val)
if(knobValue[knob] != val) { if(knobValue[knob] != val) {
knobValue[knob] = val; knobValue[knob] = val;
if(printChange) println(knobName[knob] + " is: " + knobValue[knob] + " (" + waveform[knobValue[knob]] + ")"); if(printChange) println(knobName[knob] + " is: " + knobValue[knob] + " (" + waveform[knobValue[knob]] + ")");
sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)(knobValue[knob]*8)); if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)(knobValue[knob]*8));
}
}
void fm1(int val)
{
int knob = 5;
if(knobValue[knob] != val) {
knobValue[knob] = val;
if(printChange) println(knobName[knob] + " is: " + knobValue[knob]);
if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)knobValue[knob]);
} }
} }
void freq2(int val) void freq2(int val)
{ {
int knob = 5; int knob = 6;
if(knobValue[knob] != val) { if(knobValue[knob] != val) {
knobValue[knob] = val; knobValue[knob] = val;
if(printChange) println(knobName[knob] + " is: " + (int)(pow(2,(knobValue[knob]-69)/12.0)*440) + " Hz"); if(printChange) println(knobName[knob] + " is: " + (int)(pow(2,(knobValue[knob]-69)/12.0)*440) + " Hz");
//(2^((p-69)/12))*440 //(2^((p-69)/12))*440
sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)knobValue[knob]); if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)knobValue[knob]);
} }
} }
void semi2(int val) void semi2(int val)
{ {
int knob = 6; int knob = 7;
if(knobValue[knob] != val) { if(knobValue[knob] != val) {
knobValue[knob] = val; knobValue[knob] = val;
if(printChange) println(knobName[knob] + " is: " + knobValue[knob]); if(printChange) println(knobName[knob] + " is: " + knobValue[knob]);
int semi =(knobValue[knob]+24)*2+16; int semi =(knobValue[knob]+24)*2+16;
sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)semi); if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)semi);
} }
} }
void detune2(int val) void detune2(int val)
{ {
int knob = 7; int knob = 8;
if(knobValue[knob] != val) { if(knobValue[knob] != val) {
knobValue[knob] = val; knobValue[knob] = val;
if(printChange) println(knobName[knob] + " is: " + knobValue[knob]); if(printChange) println(knobName[knob] + " is: " + knobValue[knob]);
sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)knobValue[knob]); if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)knobValue[knob]);
} }
} }
void gain2(int val) void gain2(int val)
{ {
int knob = 8; int knob = 9;
if(knobValue[knob] != val) { if(knobValue[knob] != val) {
knobValue[knob] = val; knobValue[knob] = val;
if(printChange) println(knobName[knob] + " is: " + knobValue[knob]); if(printChange) println(knobName[knob] + " is: " + knobValue[knob]);
sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)knobValue[knob]); if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)knobValue[knob]);
} }
} }
void wave2(int val) void wave2(int val)
{
int knob = 9;
if(knobValue[knob] != val) {
knobValue[knob] = val;
if(printChange) println(knobName[knob] + " is: " + knobValue[knob] + " (" + waveform[knobValue[knob]] + ")");
sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)(knobValue[knob]*8));
}
}
void freq3(int val)
{ {
int knob = 10; int knob = 10;
if(knobValue[knob] != val) { if(knobValue[knob] != val) {
knobValue[knob] = val; knobValue[knob] = val;
if(printChange) println(knobName[knob] + " is: " + (int)(pow(2,(knobValue[knob]-69)/12.0)*440) + " Hz"); if(printChange) println(knobName[knob] + " is: " + knobValue[knob] + " (" + waveform[knobValue[knob]] + ")");
sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)knobValue[knob]); if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)(knobValue[knob]*8));
} }
} }
void semi3(int val) void fm2(int val)
{ {
int knob = 11; int knob = 11;
if(knobValue[knob] != val) { if(knobValue[knob] != val) {
knobValue[knob] = val; knobValue[knob] = val;
if(printChange) println(knobName[knob] + " is: " + knobValue[knob]); if(printChange) println(knobName[knob] + " is: " + knobValue[knob]);
int semi =(knobValue[knob]+24)*2+16; if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)knobValue[knob]);
sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)semi);
} }
} }
void detune3(int val) void freq3(int val)
{ {
int knob = 12; int knob = 12;
if(knobValue[knob] != val) { if(knobValue[knob] != val) {
knobValue[knob] = val; knobValue[knob] = val;
if(printChange) println(knobName[knob] + " is: " + knobValue[knob]); if(printChange) println(knobName[knob] + " is: " + (int)(pow(2,(knobValue[knob]-69)/12.0)*440) + " Hz");
sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)knobValue[knob]); if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)knobValue[knob]);
} }
} }
void gain3(int val) void semi3(int val)
{ {
int knob = 13; int knob = 13;
if(knobValue[knob] != val) { if(knobValue[knob] != val) {
knobValue[knob] = val; knobValue[knob] = val;
if(printChange) println(knobName[knob] + " is: " + knobValue[knob]); if(printChange) println(knobName[knob] + " is: " + knobValue[knob]);
sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)knobValue[knob]); int semi =(knobValue[knob]+24)*2+16;
if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)semi);
} }
} }
void wave3(int val) void detune3(int val)
{ {
int knob = 14; int knob = 14;
if(knobValue[knob] != val) { if(knobValue[knob] != val) {
knobValue[knob] = val; knobValue[knob] = val;
if(printChange) println(knobName[knob] + " is: " + knobValue[knob] + " (" + waveform[knobValue[knob]] + ")"); if(printChange) println(knobName[knob] + " is: " + knobValue[knob]);
sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)(knobValue[knob]*8)); if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)knobValue[knob]);
} }
} }
void attack(int val) void gain3(int val)
{ {
int knob = 15; int knob = 15;
if(knobValue[knob] != val) { if(knobValue[knob] != val) {
knobValue[knob] = val; knobValue[knob] = val;
if(printChange) println(knobName[knob] + " is: " + knobValue[knob]); if(printChange) println(knobName[knob] + " is: " + knobValue[knob]);
sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)knobValue[knob]); if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)knobValue[knob]);
} }
} }
void decay(int val) void wave3(int val)
{ {
int knob = 16; int knob = 16;
if(knobValue[knob] != val) { if(knobValue[knob] != val) {
knobValue[knob] = val; knobValue[knob] = val;
if(printChange) println(knobName[knob] + " is: " + knobValue[knob]); if(printChange) println(knobName[knob] + " is: " + knobValue[knob] + " (" + waveform[knobValue[knob]] + ")");
sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)knobValue[knob]); if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)(knobValue[knob]*8));
} }
} }
void sustain(int val) void fm3(int val)
{ {
int knob = 17; int knob = 17;
if(knobValue[knob] != val) { if(knobValue[knob] != val) {
knobValue[knob] = val; knobValue[knob] = val;
if(printChange) println(knobName[knob] + " is: " + knobValue[knob]); if(printChange) println(knobName[knob] + " is: " + knobValue[knob]);
sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)knobValue[knob]); if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)knobValue[knob]);
} }
} }
void release(int val) void attack(int val)
{ {
int knob = 18; int knob = 18;
if(knobValue[knob] != val) { if(knobValue[knob] != val) {
knobValue[knob] = val; knobValue[knob] = val;
if(printChange) println(knobName[knob] + " is: " + knobValue[knob]); if(printChange) println(knobName[knob] + " is: " + knobValue[knob]);
sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)knobValue[knob]); if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)knobValue[knob]);
}
}
void decay(int val)
{
int knob = 19;
if(knobValue[knob] != val) {
knobValue[knob] = val;
if(printChange) println(knobName[knob] + " is: " + knobValue[knob]);
if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)knobValue[knob]);
}
}
void sustain(int val)
{
int knob = 20;
if(knobValue[knob] != val) {
knobValue[knob] = val;
if(printChange) println(knobName[knob] + " is: " + knobValue[knob]);
if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)knobValue[knob]);
}
}
void release(int val)
{
int knob = 21;
if(knobValue[knob] != val) {
knobValue[knob] = val;
if(printChange) println(knobName[knob] + " is: " + knobValue[knob]);
if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[knob], (byte)knobValue[knob]);
} }
} }

View File

@ -9,19 +9,11 @@ MidiInput input;
Serial port0; Serial port0;
boolean printChange = true; boolean printChange = true;
boolean serialBusy;
int backgroundColor = color(0,0,0); int backgroundColor = color(0,0,0);
int knobColor = color(235,103,295); int knobColor = color(235,103,295);
int numKnobs = 19;
int[] knobValue = new int[numKnobs];
int posX = 20;
int posY = 40;
int posW = 60;
int posH = 60;
int knobS = 40;
long time = 0; long time = 0;
long lastTime = 0; long lastTime = 0;
long timePassed; long timePassed;
@ -48,7 +40,7 @@ void setup() {
void draw() { void draw() {
background(backgroundColor); background(backgroundColor);
writeKnobValues(); //writeKnobValues();
} }

View File

@ -32,22 +32,24 @@ void sendNoteOn(byte channel, byte pitch, byte velocity) {
byte noteOn = byte(0x90 | channel); byte noteOn = byte(0x90 | channel);
serialBusy = true;
port0.write(noteOn); port0.write(noteOn);
port0.write(pitch); port0.write(pitch);
port0.write(velocity); port0.write(velocity);
//println('\n' + hex(noteOn) + " " + hex(pitch) + " " + hex(velocity)); //println('\n' + hex(noteOn) + " " + hex(pitch) + " " + hex(velocity));
serialBusy = false;
} }
void sendNoteOff(byte channel, byte pitch, byte velocity) { void sendNoteOff(byte channel, byte pitch, byte velocity) {
byte noteOff = byte(0x80 | channel); byte noteOff = byte(0x80 | channel);
serialBusy = true;
port0.write(noteOff); port0.write(noteOff);
port0.write(pitch); port0.write(pitch);
port0.write(velocity); port0.write(velocity);
//println('\n' + hex(noteOff) + " " + hex(pitch) + " " + hex(velocity)); //println('\n' + hex(noteOff) + " " + hex(pitch) + " " + hex(velocity));
serialBusy = false;
} }
void sendControlChange(byte channel, byte CC, byte value) { void sendControlChange(byte channel, byte CC, byte value) {
@ -58,9 +60,11 @@ void sendControlChange(byte channel, byte CC, byte value) {
byte controlChange = byte(0xB0 | channel); byte controlChange = byte(0xB0 | channel);
serialBusy = true;
port0.write(controlChange); port0.write(controlChange);
port0.write(CC); port0.write(CC);
port0.write(value); port0.write(value);
serialBusy = false;
//println('\n' + hex(controlChange) + " " + hex(CC) + " " + hex(value)); //println('\n' + hex(controlChange) + " " + hex(CC) + " " + hex(value));
} }
} }

View File

@ -0,0 +1,124 @@
byte[] savedKnobValues = new byte[numKnobs];
byte[] loadedKnobValues = new byte[numKnobs];
void loadKnobValues() {
loadedKnobValues = loadBytes("knobValues.txt");
for(int i=0; i<numKnobs; i++) {
knobValue[i] = loadedKnobValues[i];
controlP5.controller(controllerName[i]).setValue(knobValue[i]);
}
println();
println("Loaded Knob Values");
}
void saveKnobValues() {
for(int i=0;i<numKnobs;i++) {
savedKnobValues[i] = (byte)knobValue[i];
}
saveBytes("knobValues.txt", savedKnobValues);
println();
println("Saved Knob Values");
}
void sendMidiKnobs() {
sendControlChange((byte)0, (byte)knobMidiCC[0],(byte)knobValue[0]);
delay(delayTime);
//semi1(knobValue[1]);
int semi =(knobValue[1]+24)*2+16;
if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[1], (byte)semi);
delay(delayTime);
//detune1(knobValue[2]);
if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[2], (byte)knobValue[2]);
delay(delayTime);
//gain1(knobValue[3]);
if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[3], (byte)knobValue[3]);
delay(delayTime);
//wave1(knobValue[4]);
if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[4], (byte)(knobValue[4]*8));
delay(delayTime);
//fm1(knobValue[5]);
if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[5], (byte)knobValue[5]);
delay(delayTime);
//freq2(knobValue[6]);
if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[6], (byte)knobValue[6]);
delay(delayTime);
//semi2(knobValue[7]);
semi = (knobValue[7]+24)*2+16;
if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[7], (byte)semi);
delay(delayTime);
//detune2(knobValue[8]);
if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[8], (byte)knobValue[8]);
delay(delayTime);
//gain2(knobValue[7]);
if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[9], (byte)knobValue[9]);
delay(delayTime);
//wave2(knobValue[10]);
if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[10], (byte)(knobValue[10]*8));
delay(delayTime);
//fm2(knobValue[11]);
if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[11], (byte)knobValue[11]);
delay(delayTime);
//freq3(knobValue[12]);
if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[12], (byte)knobValue[12]);
delay(delayTime);
//semi3(knobValue[13]);
semi =(knobValue[13]+24)*2+16;
if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[13], (byte)semi);
delay(delayTime);
//detune3(knobValue[14]);
if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[14], (byte)knobValue[14]);
delay(delayTime);
//gain3(knobValue[15]);
if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[15], (byte)knobValue[15]);
delay(delayTime);
//wave3(knobValue[16]);
if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[16], (byte)(knobValue[16]*8));
delay(delayTime);
//fm3(knobValue[17]);
if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[17], (byte)knobValue[17]);
delay(delayTime);
//attack(knobValue[18]);
if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[18], (byte)knobValue[18]);
delay(delayTime);
//decay(knobValue[19]);
if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[19], (byte)knobValue[19]);
delay(delayTime);
//sustain(knobValue[20]);
if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[20], (byte)knobValue[20]);
delay(delayTime);
//release(knobValue[21]);
if(!serialBusy) sendControlChange((byte)0, (byte)knobMidiCC[21], (byte)knobValue[21]);
println();
println("Sent Knob Values over MIDI");
}

View File

@ -1268,6 +1268,7 @@ void MMidi::init()
void MMidi::checkMidi() void MMidi::checkMidi()
{ {
//while(Serial.available() > 32) Serial.read();
while(Serial.available() > 0) { while(Serial.available() > 0) {
data = Serial.read(); data = Serial.read();
@ -1283,6 +1284,7 @@ void MMidi::checkMidi()
midiBuffer[midiBufferIndex] = data; midiBuffer[midiBufferIndex] = data;
midiBufferIndex++; midiBufferIndex++;
if (midiBufferIndex > 2) { if (midiBufferIndex > 2) {
midiRead = false;
midiHandler(); midiHandler();
} }
} }
@ -1472,6 +1474,7 @@ void MMidi::controller(uint8_t channel, uint8_t number, uint8_t value) {
Music.setRelease(value); Music.setRelease(value);
break; break;
default: default:
//Music.setFM2(value);
break; break;
} }
} }