Skip to content

Commit f44caa7

Browse files
authored
Merge pull request #9 from gonski/feature/wekTraining
Feature/wek training
2 parents 1f24095 + e15a4e8 commit f44caa7

File tree

6 files changed

+111
-51
lines changed

6 files changed

+111
-51
lines changed

wekInputWrapper/FX.pde

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,42 +4,28 @@ void drawFXbtns() {
44
float x1 = width/3;
55
int y = 20;
66

7-
btns[0] = cp5.addToggle("FX1")
7+
FXBtns[0] = cp5.addToggle("FX1")
88
.setValue(false)
99
.setPosition(x1, y)
1010
.setSize(btnWidth, btnWidth);
1111

12-
btns[1] = cp5.addToggle("FX2")
12+
FXBtns[1] = cp5.addToggle("FX2")
1313
.setValue(false)
1414
.setPosition(x1 + 2 + btnWidth, y)
1515
.setSize(btnWidth, btnWidth);
1616

17-
btns[2] = cp5.addToggle("FX3")
17+
FXBtns[2] = cp5.addToggle("FX3")
1818
.setValue(false)
1919
.setPosition(x1 + 2*(2 + btnWidth), y)
2020
.setSize(btnWidth, btnWidth);
2121

22-
btns[3] = cp5.addToggle("FX4")
22+
FXBtns[3] = cp5.addToggle("FX4")
2323
.setValue(false)
2424
.setPosition(x1+ 3*(2 + btnWidth), y)
2525
.setSize(btnWidth, btnWidth);
2626

27-
btns[4] = cp5.addToggle("FX5")
27+
FXBtns[4] = cp5.addToggle("FX5")
2828
.setValue(false)
2929
.setPosition(x1+ 4*(2 + btnWidth), y)
3030
.setSize(btnWidth, btnWidth);
3131
}
32-
33-
void noteOn(int channel, int pitch, int velocity) {
34-
35-
for (int i=0; i<midiFX.length; i++) {
36-
if (midiFX[i] == pitch) {
37-
if (btns[i].getState()) {
38-
btns[i].setState(false);
39-
} else {
40-
btns[i].setState(true);
41-
}
42-
println("FXbtn " + btns[i].getState(), btns[i].getMode());
43-
}
44-
}
45-
}

wekInputWrapper/getMidi.pde

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
void noteOn(int channel, int pitch, int velocity) {
2+
3+
// FX
4+
for (int i=0; i<midiFX.length; i++) {
5+
if (midiFX[i] == pitch) {
6+
if (FXBtns[i].getState()) {
7+
FXBtns[i].setState(false);
8+
} else {
9+
FXBtns[i].setState(true);
10+
}
11+
println("FX " + i + " " + FXBtns[i].getState());
12+
}
13+
}
14+
15+
16+
17+
18+
//Training
19+
for (int i=0; i<midiTraining.length; i++) {
20+
if (midiTraining[i] == pitch) {
21+
if (TrainingBtns[i].getState()) {
22+
TrainingBtns[i].setState(false);
23+
} else {
24+
TrainingBtns[i].setState(true);
25+
}
26+
}
27+
}
28+
}

wekInputWrapper/midiOSC.pde

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// OSC -> MIDI
2+
// from https://github.com/msfeldstein/MidiToOSCBridge/blob/master/MidiOSC.pde
23

34
public void oscToMidiNote(int note, int value) {
45
log("Got OSC Note: " + note + " Velocity: " + value);
@@ -17,29 +18,13 @@ void drawMidiOSCMenu() {
1718

1819
int menuWidth = 100;
1920

20-
/*
21-
cp5.addTextfield("inputPort")
22-
.setPosition(20, nextY())
23-
.setSize(menuWidth, 20)
24-
.setValue("8000")
25-
.setAutoClear(false);
26-
27-
cp5.addTextfield("outputPort")
28-
.setPosition(20, nextY())
29-
.setSize(menuWidth, 20)
30-
.setValue("8001")
31-
.setAutoClear(false);
32-
*/
33-
34-
3521
midiInDropdown = cp5.addDropdownList("midiIn")
3622
.setPosition(20, nextY())
3723
.setSize(menuWidth, 50);
3824

39-
4025
midiOutDropdown = cp5.addDropdownList("midiOut")
41-
.setPosition(20, nextY())
42-
.setSize(menuWidth, 50);
26+
.setPosition(20, nextY())
27+
.setSize(menuWidth, 50);
4328

4429
String[] inputs = MidiBus.availableInputs();
4530
for (int i = 0; i < inputs.length; i++) {

wekInputWrapper/wekInputWrapper.pde

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
// using code from RunwayML PoseNetFull Example and
2-
// from https://github.com/msfeldstein/MidiToOSCBridge/blob/master/MidiOSC.pde
3-
41
import oscP5.*;
52
import netP5.*;
63
import themidibus.*;
@@ -14,15 +11,19 @@ OscP5 osc;
1411
NetAddress loc;
1512

1613
// FX btns
17-
Toggle[] btns = new Toggle[5];
18-
int[] midiFX = {0, 1, 2, 3, 4};
14+
Toggle[] FXBtns = new Toggle[5];
15+
int[] midiFX = {0, 1, 2, 3, 4}; // pitch idx
16+
17+
//wek training btns
18+
Toggle[] TrainingBtns = new Toggle[6];
19+
int[] midiTraining = {5, 6, 7}; // pitch idx
20+
1921

2022
//handPose
2123
float[][] points = new float[21][3];
2224
float[] origin = new float[3];
2325
float[] dist = new float [20];
24-
25-
// This array will hold all the humans detected
26+
boolean[] lastTrainingBtnValue = {false, false, false};
2627

2728
int inputPort = 8008;
2829
int outputPort = 8000;
@@ -43,6 +44,7 @@ void setup() {
4344

4445
drawMidiOSCMenu();
4546
drawFXbtns();
47+
drawTrainingBtns();
4648
}
4749

4850
void draw() {
@@ -51,5 +53,6 @@ void draw() {
5153

5254
computeOutputs();
5355
drawPoints();
54-
sendOscToWekinator();
56+
sendInputOscToWekinator();
57+
sendTrainingOscToWekinator();
5558
}

wekInputWrapper/wekTraining.pde

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
void drawTrainingBtns() {
2+
3+
int btnWidth = 50;
4+
float x1 = width/3;
5+
int y = height- btnWidth - 20;
6+
7+
TrainingBtns[0] = cp5.addToggle("rec")
8+
.setValue(false)
9+
.setPosition(x1, y)
10+
.setSize(btnWidth, btnWidth);
11+
12+
TrainingBtns[1] = cp5.addToggle("train")
13+
.setValue(false)
14+
.setPosition(x1+(2 + btnWidth), y)
15+
.setSize(btnWidth, btnWidth);
16+
17+
TrainingBtns[2] = cp5.addToggle("run")
18+
.setValue(false)
19+
.setPosition(x1 +2*(2 + btnWidth), y)
20+
.setSize(btnWidth, btnWidth);
21+
}

wekInputWrapper/wekinatorOSC.pde

Lines changed: 43 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,57 @@
1-
void sendOscToWekinator() {
1+
void sendInputOscToWekinator() {
22
OscMessage msg = new OscMessage("/wek/inputs");
33

4-
// only x, y
5-
msg.add((float)round(origin[0]));
6-
msg.add((float)round(origin[1]));
4+
// only x, y
5+
msg.add((float)round(origin[0]));
6+
msg.add((float)round(origin[1]));
77

88

99
for (int i=0; i<dist.length; i++) {
1010
msg.add((float)round(dist[i]));
1111
}
1212

1313
for (int i=0; i<midiFX.length; i++) {
14-
float state = btns[i].getState() ? 1 : 0;
14+
float state = FXBtns[i].getState() ? 1 : 0; // send in order
1515
msg.add((float)state);
1616
}
1717

18+
osc.send(msg, loc); // total 5 FX + 20 dist + 2 xy origin = 27
19+
}
20+
21+
1822

19-
osc.send(msg, loc); // total 5 + 20 + 2 = 27
23+
void sendTrainingOscToWekinator() {
24+
OscMessage msg = new OscMessage("/");
25+
for (int i=0; i<midiTraining.length; i++) {
26+
if (lastTrainingBtnValue[i] != TrainingBtns[i].getState()) {
27+
if (TrainingBtns[i].getState()) {
28+
switch(i) {
29+
case 0:
30+
msg.setAddrPattern("/wekinator/control/startRecording");
31+
break;
32+
case 1:
33+
msg.setAddrPattern("/wekinator/control/train");
34+
break;
35+
case 2:
36+
msg.setAddrPattern("/wekinator/control/startRunning");
37+
break;
38+
}
39+
} else {
40+
switch(i) {
41+
case 0:
42+
msg.setAddrPattern("/wekinator/control/stopRecording");
43+
break;
44+
case 1:
45+
msg.setAddrPattern("/wekinator/control/cancelTrain");
46+
break;
47+
case 2:
48+
msg.setAddrPattern("/wekinator/control/stopRunning");
49+
break;
50+
}
51+
}
52+
}
53+
54+
lastTrainingBtnValue[i]= TrainingBtns[i].getState();
55+
osc.send(msg, loc);
56+
}
2057
}

0 commit comments

Comments
 (0)