-
Notifications
You must be signed in to change notification settings - Fork 0
/
BeatVertex.pde
95 lines (79 loc) · 2.55 KB
/
BeatVertex.pde
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/*
BeatVertex
Feature that renders a vertex which resize on detected beats by Minim
*/
public class BeatVertex extends Feature {
float hatSizeVertex = 200;
float snareSizeVertex = 100;
private float midiBeatVertexScaling = 0.0;
private float midiLineWidth = 7.0;
private float midiRotateSpeed = 0.0;
private boolean midiFillEnabled = false;
private float vertexRotation = 0;
public BeatVertex(PApplet applet, MidiInterface midi, int midiEnableFaderNumber) {
super(applet, midi, midiEnableFaderNumber);
}
public void setupFeature() {
midi.registerForFaderValue(this, 27);
midi.registerForNoteValue(this, 7);
midi.registerForFaderValue(this, 25);
midi.registerForFaderValue(this, 24);
}
public void newFaderValue(int value, int number) {
if (number == 27) {
midiBeatVertexScaling = map(value, 0, 127, 0.0, 2.0);
}
if (number == 25) {
midiLineWidth = map(value, 0, 127, 0, 20);
}
if (number == 24) {
midiRotateSpeed = map(value, 0, 127, 0.0, 0.1);
}
}
public void newNoteValue(int note) {
super.newNoteValue(note);
if (note == 7) {
midiFillEnabled = !midiFillEnabled;
this.midi.setControlLED(note, this.midiFillEnabled);
}
}
public void featureGotEnabled() {
}
public void drawFeature(int currentTimeState) {
vertexRotation = vertexRotation+midiRotateSpeed % 360;
PShape beatVertex; // The PShape object
int vHeight = 200;
int vWidth = 75;
beatVertex = createShape();
beatVertex.beginShape(TRIANGLE_STRIP);
beatVertex.vertex(0, vHeight, 0); //A
beatVertex.vertex(0, 0, -vWidth); //B
beatVertex.vertex(0, -vHeight, 0); //F
beatVertex.vertex(0, 0, vWidth); //D
beatVertex.vertex(0, vHeight, 0); //A
beatVertex.vertex(vWidth, 0, 0); //C
beatVertex.vertex(0, -vHeight, 0); //F
beatVertex.vertex(-vWidth, 0, 0); //E
beatVertex.vertex(0, vHeight, 0); //
if (!midiFillEnabled) {
beatVertex.noFill();
}
beatVertex.endShape();
if (beat.isKick() ) hatSizeVertex = 400;
int centerX = width/2;
int centerY = height/2;
beatVertex.setStrokeWeight(this.midiLineWidth);
if (midiFillEnabled) {
beatVertex.setFill(color(midi.hue, midi.saturation, 100));
beatVertex.setStroke(color(0,0,100));
} else {
beatVertex.setStroke(color(midi.hue, midi.saturation, 100));
}
beatVertex.rotateY(vertexRotation);
pushMatrix();
translate(0, 0, 200);
shape(beatVertex, centerX, centerY, Math.round(hatSizeVertex * midiBeatVertexScaling), Math.round(400*midiBeatVertexScaling));
popMatrix();
hatSizeVertex = constrain(hatSizeVertex * 0.98, 100, 400);
}
}